<?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>234717</bug_id>
          
          <creation_ts>2021-12-27 21:22:00 -0800</creation_ts>
          <short_desc>Move BidiResolver to PAL</short_desc>
          <delta_ts>2022-01-03 21:22:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>annulen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbarton</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>jbedard</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1827029</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-27 21:22:00 -0800</bug_when>
    <thetext>Move BidiResolver to PAL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827030</commentid>
    <comment_count>1</comment_count>
      <attachid>448032</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-27 21:23:20 -0800</bug_when>
    <thetext>Created attachment 448032
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827034</commentid>
    <comment_count>2</comment_count>
      <attachid>448033</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-27 22:11:17 -0800</bug_when>
    <thetext>Created attachment 448033
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827082</commentid>
    <comment_count>3</comment_count>
      <attachid>448045</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-28 08:27:58 -0800</bug_when>
    <thetext>Created attachment 448045
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827862</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-03 21:22:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/87077283&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448032</attachid>
            <date>2021-12-27 21:23:20 -0800</date>
            <delta_ts>2021-12-27 22:17:16 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-234717-20211227212319.patch</filename>
            <type>text/plain</type>
            <size>398246</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhmMzI4OGU4ODRmODcw
M2EyMjNmOGVjZDQ5N2Y0N2ViNGFhZDVkZS4uMGU0MjkwYWZjMjQ1OTVkZDA2MTQ3M2NkN2M3OTA1
YjY2NWNjOWUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5MiBAQAorMjAyMS0xMi0yNyAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQmlk
aVJlc29sdmVyIHRvIFBBTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM0NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdl
LgorCisgICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZWxl
bWVudFBhdGggY29uc3QpOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6
RVVuaWNvZGVCaWRpIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVl
OjpvcGVyYXRvciBQQUw6OlRleHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEVVbmljb2RlQmlkaSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgVGV4dERpcmVj
dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5Lmg6CisgICAg
ICAgICogY3NzL21ha2Vwcm9wLnBsOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlVGl0bGVGcm9tVGl0bGVFbGVtZW50KToKKyAg
ICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Omlu
bGluZVJ1bkFuZE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJp
bWFyeURpcmVjdGlvbiBjb25zdCk6CisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6CisgICAgICAg
ICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpcmVjdGlvbk9mRW5j
bG9zaW5nQmxvY2spOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YmFzZVdyaXRpbmdE
aXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6ZGlyZWN0
aW9uT2ZFbmNsb3NpbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
ZGlyZWN0aW9uT2ZTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OndpbGxCZU1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2Rp
ZnlFeHRlbmRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5RXh0ZW5kaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
bW9kaWZ5TW92aW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1v
ZGlmeUV4dGVuZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1v
ZGlmeUV4dGVuZGluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
Ojptb2RpZnlNb3ZpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp0
ZXh0U2VsZWN0aW9uSW50ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpt
b2RpZnkpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9z
aXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zm
c2V0IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oOgorICAgICAg
ICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc3VhbFdv
cmRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0V29yZFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJpZ2h0V29yZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmxlZnRC
b3VuZGFyeU9mTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpyaWdodEJvdW5kYXJ5T2ZMaW5lKToK
KyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5oOgorICAgICAgICAqIGh0bWwvQmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGlt
ZUlucHV0VHlwZTo6c2V0dXBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpkaXJl
Y3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Y2FsY3VsYXRlQW5k
QWRqdXN0RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXJlY3Rpb25Gb3JGb3JtRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6YWRq
dXN0SW5uZXJUZXh0U3R5bGUgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50Ojpjb21wdXRlZFRleHRX
aXRoRGlyZWN0aW9uKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0
b1RleHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6bWVhc3VyZVRleHRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjp0ZXh0T2Zmc2V0KToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg6CisgICAgICAgICogaHRt
bC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJbm5l
ckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lSXRlbXNCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6aGFuZGxlRW50ZXJFeGl0QmlkaUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpidWlsZEJpZGlQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtc0J1aWxkZXI6OmJyZWFrQW5kQ29tcHV0ZUJpZGlMZXZlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUJveFN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbXNCdWlsZGVyOjpoYW5k
bGVJbmxpbmVCb3hFbmQpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5s
aW5lL0lubGluZUxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6UnVuOjpp
bmxpbmVEaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9Jbmxp
bmVJdGVyYXRvckJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6
ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6
OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAq
IGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0IGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9yU3R5
bGUpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0No
cm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6Om1vdXNlRGlkTW92ZU92ZXJFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6Z2V0VG9vbFRpcCk6CisgICAgICAgICog
cGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhZ2luYXRpb25Nb2RlRm9y
UmVuZGVyU3R5bGUpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MueWFtbDoKKyAgICAgICAgKiBw
YWdlL1NldHRpbmdzQmFzZS5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBP
ZmZzZXRzSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpheGVzRmxpcHBlZEZvcldyaXRpbmdN
b2RlQW5kRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNuYXBPZmZzZXRzRm9y
U2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5oOgorICAgICAgICAqIHBsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmg6CisgICAgICAg
IChXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UG9wdXBNZW51U3R5bGU6OnRleHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL1JlY3RFZGdlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzdGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWN0RWRnZXM6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6ZW5k
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6c2V0U3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzZXRFbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0eSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjp3aWR0aEZvclNp
bXBsZVRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2Fk
ZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZTo6bGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlOjpyaWdodEV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdC
aWRpVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRS
ZWN0c0Zvck91dGxpbmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRp
ZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0UnVuOjpUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OmRp
cmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpydGwgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6bHRyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRSdW46OnNldERpcmVjdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFwcGx5SW5pdGlhbEFk
dmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjphcHBseVRyYW5zZm9ybXMgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeTo6U2VsZWN0aW9uR2VvbWV0cnkpOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uR2VvbWV0cnk6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25HZW9tZXRyeTo6c2V0RGlyZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0
cmluZ1dpdGhEaXJlY3Rpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2Rl
Lmg6CisgICAgICAgIChXZWJDb3JlOjptYWtlVGV4dEZsb3dJbml0YWxpemVyKToKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VUZXh0Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjppc1ZlcnRpY2FsV3Jp
dGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNGbGlwcGVkV3JpdGluZ01vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJD
b3JlOjptYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
QmlkaVJ1bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuOjpCaWRpUnVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZGlSdW46OnRha2VOZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQmlk
aVJ1bi5oOgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1bjo6bmV4dCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dDo6c3BlbGxpbmdUb29sVGlwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1
bHQ6OnRpdGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmlubmVy
VGV4dElmVHJ1bmNhdGVkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUJveFBhaW50ZXI6OnBhaW50RmlsbExheWVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxp
bmVCb3g6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVC
b3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lJbmxpbmVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6ZW1iZWRDaGFyRnJvbURp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlPYnNlcnZlckVudGVyZWRPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5T2JzZXJ2ZXJXaWxsRXhpdE9iamVjdCk6CisgICAg
ICAgIChQQUw6OldlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6aW5jcmVtZW50SW50ZXJuYWwp
OgorICAgICAgICAoUEFMOjpJc29sYXRlVHJhY2tlcjo6ZW1iZWQpOgorICAgICAgICAoUEFMOjpJ
c29sYXRlVHJhY2tlcjo6YWRkRmFrZVJ1bklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFBBTDo6V2Vi
Q29yZTo6SW5saW5lQmlkaVJlc29sdmVyOjphcHBlbmRSdW5JbnRlcm5hbCk6CisgICAgICAgIChQ
QUw6OldlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6bmVlZHNDb250aW51ZVBhc3RFbmRJbnRl
cm5hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6OmluY3Jl
bWVudEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVUcmFja2Vy
OjpJc29sYXRlVHJhY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlVHJh
Y2tlcjo6ZW50ZXJJc29sYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVU
cmFja2VyOjpleGl0SXNvbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6aW5Jc29sYXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklz
b2xhdGVUcmFja2VyOjplbWJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SXNvbGF0ZVRyYWNrZXI6OmFkZEZha2VSdW5JZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6bmVlZHNDb250
aW51ZVBhc3RFbmRJbnRlcm5hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L0xlZ2FjeUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lRGlyZWN0
aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVu
c0Zvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpyZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y29uc3RydWN0TGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojp0ZXh0QWxpZ25tZW50Rm9yTGluZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2Fs
V2lkdGhGb3JBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6
Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5TGluZUxheW91dDo6aGFuZGxlVHJhaWxpbmdTcGFjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkxlZ2FjeUxpbmVMYXlvdXQ6OmNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmRldGVybWluZVN0YXJ0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6ZGV0ZXJtaW5lRW5k
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6bWF0Y2hlZEVu
ZExpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5Um9vdElubGluZUJveDo6Y2hpbGRSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeVJvb3RJbmxpbmVCb3g6OmxpbmVCcmVha0JpZGlTdGF0dXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6c2V0TGluZUJyZWFrSW5mbyk6CisgICAgICAg
ICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lk
dGhSZXBsYWNlZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZyYWdtZW50ZWRGbG93Ojp1cGRhdGVMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRlZEZsb3c6OnVwZGF0ZUZyYWdtZW50c0ZyYWdt
ZW50ZWRGbG93UG9ydGlvblJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnNob3VsZFBsYWNlVmVydGljYWxTY3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
SXRlbTo6Y29tcHV0ZU1hcmtlclN0eWxlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpkaXJlY3Rp
b24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSk6CisgICAgICAg
IChSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQgY29uc3QpOgorICAgICAgICAoUmVu
ZGVyTWVudUxpc3Q6OmNsaWVudFBhZGRpbmdSaWdodCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNv
bGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzSW50ZXJuYWwpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwb3B1
cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1pcnJvclJUTFNlZ21lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5l
L0JyZWFraW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlTGluZUJveEluc2lk
ZUlnbm9yZWRTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0OjpoYW5k
bGVCUik6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZU91dE9mRmxv
d1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVF
bXB0eUlubGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWlsaW5nT2JqZWN0czo6dXBkYXRlV2hpdGVzcGFjZUNv
bGxhcHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6
Om1pcnJvcklmTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJh
dG9yOjpsYXlvdXRCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpSZW5kZXJTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6dXNlZENsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN0eWxlOjp1c2VkRmxvYXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnVuaWNvZGVCaWRpIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpkaXJlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldFVuaWNvZGVCaWRpKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXREaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6OmluaXRpYWxVbmljb2RlQmlkaSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTdHlsZTo6aW5pdGlhbERpcmVjdGlvbik6CisgICAgICAgICogc3R5bGUvRWxlbWVu
dFJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkVsZW1lbnRSdWxl
Q29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVsZUNvbGxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0b3I6Omlz
TGVmdFBhZ2UgY29uc3QpOgorICAgICAgICAqIHN0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0b3I6OlBhZ2VSdWxlQ29sbGVj
dG9yKToKKyAgICAgICAgKiBzdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaDoKKwogMjAyMS0xMi0yNyAg
V2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBFbGVtZW50
Ojpib3VuZGluZ0Fic29sdXRlUmVjdFdpdGhvdXRMYXlvdXQoKSBzaG91bGQgYmUgbWFya2VkIGBj
b25zdGAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDQ1MTI0YzNjZjQ5OWQzMzk1NDg3OTdhYmViMmQ2
OGZiMGY0Njk5MmQuLmJmZDIwZjFiMzBlMmFiNDQxYzQzZWUyOTVlNmFlMjJlNmIyN2I4OWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDIxLTEyLTI3ICBNeWxlcyBDLiBN
YXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBCaWRpUmVzb2x2
ZXIgdG8gUEFMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzQ3MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFBBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBhbC9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBwYWwvTG9nZ2luZy5jcHA6CisgICAgICAgICogcGFsL3RleHQv
QmlkaUNvbnRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9CaWRpQ29udGV4dC5jcHAuCisgICAgICAgICogcGFsL3RleHQvQmlkaUNvbnRleHQuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaC4KKyAg
ICAgICAgKiBwYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmguCisgICAgICAgIChQQUw6OkJpZGlTdGF0
dXM6OkJpZGlTdGF0dXMpOgorICAgICAgICAoUEFMOjpCaWRpRW1iZWRkaW5nOjpCaWRpRW1iZWRk
aW5nKToKKyAgICAgICAgKFBBTDo6QmlkaUNoYXJhY3RlclJ1bjo6QmlkaUNoYXJhY3RlclJ1bik6
CisgICAgICAgIChQQUw6OkJpZGlSZXNvbHZlckJhc2U6OmNvbnRleHQgY29uc3QpOgorICAgICAg
ICAoUEFMOjpCaWRpUmVzb2x2ZXJCYXNlOjpzZXRDb250ZXh0KToKKyAgICAgICAgKFBBTDo6Qmlk
aVJlc29sdmVyQmFzZTo6cnVucyk6CisgICAgICAgIChQQUw6OkRlcml2ZWRDbGFzcz46OmVtYmVk
KToKKyAgICAgICAgKFBBTDo6RGVyaXZlZENsYXNzPjo6Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFp
c2VFbWJlZGRpbmdMZXZlbCk6CisgICAgICAgIChQQUw6OkRlcml2ZWRDbGFzcz46OmNvbW1pdEV4
cGxpY2l0RW1iZWRkaW5nKToKKyAgICAgICAgKFBBTDo6RGVyaXZlZENsYXNzPjo6Y3JlYXRlQmlk
aVJ1bnNGb3JMaW5lKToKKyAgICAgICAgKiBwYWwvdGV4dC9CaWRpUnVuTGlzdC5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oLgorICAgICAg
ICAoUEFMOjpCaWRpUnVuTGlzdDxSdW4+OjpyZXZlcnNlUnVucyk6CisgICAgICAgICogcGFsL3Rl
eHQvVGV4dERpcmVjdGlvbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0RGlyZWN0aW9uLmguCisgICAgICAgIChQQUw6OmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24pOgorICAgICAgICAqIHBhbC90ZXh0L1VuaWNvZGVCaWRpLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVCaWRpLmguCisgICAgICAgIChQQUw6Omlz
SXNvbGF0ZWQpOgorICAgICAgICAoUEFMOjppc092ZXJyaWRlKToKKyAgICAgICAgKiBwYWwvdGV4
dC9pb3MvVGV4dEVuY29kaW5nUmVnaXN0cnlJT1MubW06CisgICAgICAgICogcGFsL3RleHQvbWFj
L1RleHRFbmNvZGluZ1JlZ2lzdHJ5TWFjLm1tOgorCiAyMDIxLTEyLTIxICBTYW0gV2VpbmlnICA8
d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcHJlbXVsdGlwbGll
ZCBhbHBoYSBpbnRlcnBvbGF0ZWQgZ3JhZGllbnRzIGFuZCBkZWZhdWx0ZWQgb2ZmIG9wdGlvbiB0
byB1c2UgdGhlbSBmb3IgQ1NTIEdyYWRpZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBjZTI3ZTE0YzY5ZmQyNDRh
ZTdiMjQ0NWUzZTQ5ODdjNmY3MWJiMjgzLi43NTc5YTNkNmNmY2NmZWY5YmU2ZWRiMzg4MGJkYzBj
MzNkYTVlNDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIxLTEyLTI3ICBNeWxlcyBD
LiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBCaWRpUmVz
b2x2ZXIgdG8gUEFMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzQ3MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpB
cmd1bWVudENvZGVyPFNlbGVjdGlvbkdlb21ldHJ5Pjo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFy
ZWQvV2ViUG9wdXBJdGVtLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBJdGVtOjpXZWJQ
b3B1cEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cEl0ZW06OmRlY29kZSk6CisgICAg
ICAgICogU2hhcmVkL1dlYlBvcHVwSXRlbS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldHVwUGFnZUNvbmZpZ3Vy
YXRpb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvd1BvcHVwTWVudSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBvcHVwTWVudVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgd2ViU2VsZWN0
aW9uUmVjdHNGb3JTZWxlY3Rpb25HZW9tZXRyaWVzOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV0tUZXh0U2VsZWN0aW9uUmVjdC5tbToKKyAgICAgICAgKC1bV0tUZXh0U2VsZWN0aW9uUmVj
dCB3cml0aW5nRGlyZWN0aW9uXSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1l
bnVQcm94eU1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlN
YWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5TWFjOjpwb3B1bGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5TWFjOjpzaG93UG9wdXBNZW51KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpm
b2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKToKKwogMjAyMS0xMi0yNiAgU2FtIFdlaW5pZyAgPHdl
aW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBXZWJLaXQvQ29jb2FDb2xvci5oIHdp
dGggV2ViQ29yZS9Db2xvckNvY29hLmgsIG5vdCBjb25mdXNpbmcgYXQgYWxsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L2lvcy9DaGFuZ2VMb2cKaW5kZXggZjc3MTMwZmY3OWVlN2YyY2Y0NGFiMjJlYTBmYzEyNzQ3NDA5
ZWExMi4uMmQ4MTliMzhmOTE4YzE3M2UxYTY2MzkzMjliN2RiZDU3MDcxZDliYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvaW9zL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTEyLTI3ICBNeWxlcyBD
LiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBCaWRpUmVz
b2x2ZXIgdG8gUEFMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzQ3MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tOgorICAgICAgICAoLVtXZWJGcmFt
ZSBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTpdKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJWaXNpYmxlUG9zaXRpb24ubW06CisgICAgICAgICgtW1dlYlZpc2libGVQb3NpdGlvbiB0
ZXh0RGlyZWN0aW9uXSk6CisgICAgICAgICgtW1dlYlZpc2libGVQb3NpdGlvbiBkaXJlY3Rpb25J
c0Rvd25zdHJlYW06XSk6CisgICAgICAgICogV2ViVmlldy9XZWJQREZWaWV3SU9TLm1tOgorICAg
ICAgICAoLVtXZWJQREZWaWV3IF9jaGVja1BERlRpdGxlXSk6CisKIDIwMjEtMTAtMjIgIElhbiBB
bmRlcnNvbiAgPGlhbmFAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIG1vZHVsZSBtYXAgZmls
ZSBmb3IgUHJpdmF0ZUZyYW1ld29ya3MvV2ViS2l0TGVnYWN5CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKaW5kZXggZWY5NDlkZTYwNjg5NmNhOTkzZWRmOGYzNGQ5YzFiMzBhNWI2NTRhYi4uNzNh
MzEwYzJmYjFkOWI1NGE3MGIxYjI2MmFhYjg3Y2FjMDAwYzg5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIxLTEyLTI3ICBNeWxlcyBDLiBNYXhmaWVs
ZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBCaWRpUmVzb2x2ZXIgdG8g
UEFMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ3
MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1p
c2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW06CisgICAgICAgICgtW1dlYkVsZW1lbnREaWN0aW9u
YXJ5IF9zcGVsbGluZ1Rvb2xUaXBdKToKKyAgICAgICAgKC1bV2ViRWxlbWVudERpY3Rpb25hcnkg
X3RpdGxlXSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tOgorICAg
ICAgICAoUG9wdXBNZW51TWFjOjpwb3B1bGF0ZSk6CisgICAgICAgIChQb3B1cE1lbnVNYWM6OnNo
b3cpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9t
ZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UpOgorICAgICAgICAqIFdlYlZpZXcv
V2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9kaXNwYXRjaERpZFJlY2VpdmVUaXRs
ZTpdKToKKwogMjAyMS0xMi0yMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
IAogICAgICAgICBGaXggV2ViS2l0IEJ1aWxkIGlzc3VlcyB3aGVuIHVzaW5nIHN5c3RlbSBjb250
ZW50IHBhdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9u
cy9Ob3RpZmljYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb24uaAppbmRleCBhMDczNDEzZmFlOGJlM2IwMTdiNDkwN2U5YWIxY2ZiYWRkYWEy
YWM3Li41ZDYzYTM1NzcwOWFkNjgxOGJiNTNiZTY3MDkyY2ZjNDJkODljODk0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oCkBA
IC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHRhZygpIGNvbnN0IHsg
cmV0dXJuIG1fdGFnOyB9CiAgICAgY29uc3QgVVJMJiBpY29uKCkgY29uc3QgeyByZXR1cm4gbV9p
Y29uOyB9CiAKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlyZWN0aW9uID09IERpcmVjdGlvbjo6UnRsID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERp
cmVjdGlvbjo6TFRSOyB9CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZGlyZWN0aW9uID09IERpcmVjdGlvbjo6UnRsID8gUEFMOjpUZXh0RGlyZWN0
aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsgfQogCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkaXNwYXRjaENsaWNrRXZlbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRp
c3BhdGNoQ2xvc2VFdmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNmMTEyYWFhMGZkNTU5YzEzOTMyZWMzOTVlMTE0MGMz
NDBlMzI0YjEuLjA0OTg3NDEwZGQ3OTNjYjgxNGRhZjQzYmM5NDM0NjlhZWI4NDUzMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE1NCw2ICsxNTQsMTAgQEAKIAkJMUM1QzU3RTkyNzU3MzE4RTAwM0I1NDBEIC8qIFRleHRFbmNv
ZGluZ1JlZ2lzdHJ5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUM1QzU3RTgyNzU3MzE4RDAwM0I1NDBEIC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5
TWFjLm1tICovOyB9OwogCQkxQzc3QzhDOTI1RDc5NzIwMDA2MzVFMEMgLyogQ29yZVRleHRTb2Z0
TGluay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
Qzc3QzhDNzI1RDc5NzIwMDA2MzVFMEMgLyogQ29yZVRleHRTb2Z0TGluay5jcHAgKi87IH07CiAJ
CTFDNzdDOENFMjVEN0E0QTMwMDYzNUUwQyAvKiBPVFNWR1RhYmxlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNzdDOENEMjVEN0E0QTMwMDYzNUUw
QyAvKiBPVFNWR1RhYmxlLmNwcCAqLzsgfTsKKwkJMUNCMENBRDYyNzdBQTEzNjAwOUI1QkYwIC8q
IEJpZGlSdW5MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQ0IwQ0FENTI3N0FBMTI1MDA5QjVCRjAgLyogQmlkaVJ1bkxpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxQ0IwQ0FEQTI3N0FBNDc3
MDA5QjVCRjAgLyogQmlkaUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUNCMENBRDgyNzdBQTQ3NzAwOUI1QkYwIC8qIEJpZGlDb250ZXh0
LmNwcCAqLzsgfTsKKwkJMUNCMENBREIyNzdBQTQ3NzAwOUI1QkYwIC8qIEJpZGlDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0IwQ0FEOTI3
N0FBNDc3MDA5QjVCRjAgLyogQmlkaUNvbnRleHQuaCAqLzsgfTsKKwkJMUNCMENBREQyNzdBQjgz
QzAwOUI1QkYwIC8qIFVuaWNvZGVCaWRpLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQ0IwQ0FEQzI3N0FCODE4MDA5QjVCRjAgLyogVW5pY29kZUJpZGku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQ0Mz
QUNFODIyQkQ3RUM1MDBGMzYwRjAgLyogTWV0YWxTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQzNBQ0U3MjJCRDdFQjgwMEYzNjBGMCAvKiBNZXRh
bFNQSS5oICovOyB9OwogCQkxQ0NFRTRGNTIwRDg3MTkzMDA0N0IwOTcgLyogQ29yZVVJU1BJLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0NFRTRGNDIw
RDg3MTkzMDA0N0IwOTcgLyogQ29yZVVJU1BJLmggKi87IH07CiAJCTFDQ0VFNEY3MjBEODc0M0Yw
MDQ3QjA5NyAvKiBOU0FwcGVhcmFuY2VTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDQ0VFNEY2MjBEODc0M0YwMDQ3QjA5NyAvKiBOU0FwcGVhcmFu
Y2VTUEkuaCAqLzsgfTsKQEAgLTU5Miw2ICs1OTYsMTIgQEAKIAkJMUM3N0M4QzgyNUQ3OTcyMDAw
NjM1RTBDIC8qIENvcmVUZXh0U29mdExpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZVRleHRTb2Z0
TGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzc3QzhDQjI1RDc5QjZDMDA2
MzVFMEMgLyogT1RTVkdUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPVFNWR1RhYmxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNzdDOENEMjVEN0E0QTMwMDYzNUUwQyAvKiBPVFNW
R1RhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9UU1ZHVGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQ0IwQ0FENTI3N0FBMTI1MDA5QjVCRjAgLyogQmlkaVJ1bkxp
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQmlkaVJ1bkxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUNCMENBRDgyNzdBQTQ3NzAwOUI1QkYwIC8qIEJpZGlDb250ZXh0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJpZGlDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUNCMENBRDkyNzdBQTQ3NzAwOUI1QkYwIC8qIEJpZGlDb250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJpZGlDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjBD
QURDMjc3QUI4MTgwMDlCNUJGMCAvKiBVbmljb2RlQmlkaS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlj
b2RlQmlkaS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0IwQ0FERTI3N0FDMUQz
MDA5QjVCRjAgLyogQmlkaVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZGlSZXNvbHZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0IwQ0FERjI3N0FDNUFEMDA5QjVCRjAg
LyogVGV4dERpcmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RGlyZWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQzNBQ0U3MjJCRDdFQjgwMEYzNjBGMCAvKiBNZXRh
bFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhbFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQ0M1RTQxMzI3Mzc0OTJDMDA2RjZGRjQgLyogV2ViR1BVU3RvcmFnZVRleHR1cmVC
aW5kaW5nTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVN0b3JhZ2VUZXh0dXJlQmluZGlu
Z0xheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0M1RTQxNDI3Mzc0OTJD
MDA2RjZGRjQgLyogV2ViR1BVVGV4dHVyZVZpZXdEZXNjcmlwdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkdQVVRleHR1cmVWaWV3RGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTQxMSw2ICsxNDIxLDEwIEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQzVDNTdFNTI3
NTczMTA1MDAzQjU0MEQgLyogaW9zICovLAogCQkJCUEzMEQ0MTIzMUYwREQxMDUwMEI3MTk1NCAv
KiBtYWMgKi8sCisJCQkJMUNCMENBRDgyNzdBQTQ3NzAwOUI1QkYwIC8qIEJpZGlDb250ZXh0LmNw
cCAqLywKKwkJCQkxQ0IwQ0FEOTI3N0FBNDc3MDA5QjVCRjAgLyogQmlkaUNvbnRleHQuaCAqLywK
KwkJCQkxQ0IwQ0FERTI3N0FDMUQzMDA5QjVCRjAgLyogQmlkaVJlc29sdmVyLmggKi8sCisJCQkJ
MUNCMENBRDUyNzdBQTEyNTAwOUI1QkYwIC8qIEJpZGlSdW5MaXN0LmggKi8sCiAJCQkJMUM1QzU3
RTEyNzU3MUNCMTAwM0I1NDBEIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oICovLAogCQkJCTFD
NUM1N0QyMjc1NzE2MjIwMDNCNTQwRCAvKiBFbmNvZGluZ1RhYmxlcy5jcHAgKi8sCiAJCQkJMUM1
QzU3RDMyNzU3MTYyNTAwM0I1NDBEIC8qIEVuY29kaW5nVGFibGVzLmggKi8sCkBAIC0xNDM1LDYg
KzE0NDksNyBAQAogCQkJCTFDNUM1N0M0Mjc1NzE1MkMwMDNCNTQwRCAvKiBUZXh0Q29kZWNVVEYx
Ni5oICovLAogCQkJCTFDNUM1N0MzMjc1NzE1MkEwMDNCNTQwRCAvKiBUZXh0Q29kZWNVVEY4LmNw
cCAqLywKIAkJCQkxQzVDNTdDODI3NTcxNTMxMDAzQjU0MEQgLyogVGV4dENvZGVjVVRGOC5oICov
LAorCQkJCTFDQjBDQURGMjc3QUM1QUQwMDlCNUJGMCAvKiBUZXh0RGlyZWN0aW9uLmggKi8sCiAJ
CQkJMUM1QzU3REEyNzU3MTY4RTAwM0I1NDBEIC8qIFRleHRFbmNvZGluZy5jcHAgKi8sCiAJCQkJ
MUM1QzU3RDgyNzU3MTY4ODAwM0I1NDBEIC8qIFRleHRFbmNvZGluZy5oICovLAogCQkJCTFDNUM1
N0Q5Mjc1NzE2OEIwMDNCNTQwRCAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5oICovLApAQCAtMTQ0
Miw2ICsxNDU3LDcgQEAKIAkJCQkxQzVDNTdENjI3NTcxNjgzMDAzQjU0MEQgLyogVGV4dEVuY29k
aW5nUmVnaXN0cnkuY3BwICovLAogCQkJCTFDNUM1N0Q3Mjc1NzE2ODUwMDNCNTQwRCAvKiBUZXh0
RW5jb2RpbmdSZWdpc3RyeS5oICovLAogCQkJCTkzRTU5MDlDMUY5M0JGMUUwMDY3RjhDRiAvKiBV
bmVuY29kYWJsZUhhbmRsaW5nLmggKi8sCisJCQkJMUNCMENBREMyNzdBQjgxODAwOUI1QkYwIC8q
IFVuaWNvZGVCaWRpLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHRleHQ7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwpAQCAtMTUxNyw2ICsxNTMzLDggQEAKIAkJCQkwQzJEQTEzRTFGM0JFQjQ5
MDBEQkMzMTcgLyogQVZLaXRTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQjk5RTQ2MjVERDcw
MTYwMDA3ODI5QSAvKiBBVlN0cmVhbURhdGFQYXJzZXJTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTI5Q0RFQkE2MjU0OEQ1N0YwMDdDMDdCNyAvKiBBWFNwZWVjaE1hbmFnZXJTUEkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTFDQjBDQURCMjc3QUE0NzcwMDlCNUJGMCAvKiBCaWRpQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMUNCMENBRDYyNzdBQTEzNjAwOUI1QkYwIC8qIEJpZGlSdW5MaXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREY5MTExMzIyMEU0RUVDMDAxRUEzOUUgLyogQ2VsZXN0
aWFsU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQzJEQTA2RDFGMzNDQTg0MDBEQkMzMTcgLyog
Q0ZMb2NhbGVTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBDMkRBMDZFMUYzM0NBODQwMERCQzMx
NyAvKiBDRk5ldHdvcmtDb25uZWN0aW9uQ2FjaGVTUEkuaCBpbiBIZWFkZXJzICovLApAQCAtMTY2
Miw2ICsxNjgwLDcgQEAKIAkJCQkwQzc3ODVBMTFGNDUxMzBGMDBGNEVCQjYgLyogVGVsZXBob255
VXRpbGl0aWVzU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTEzNDJDQzIxNUFBMTBBMDA3MTk5
RDIgLyogVUlLaXRTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEM1QUY5MjIxRjQzQTRD
NzAwMkVBQzAyIC8qIFVJS2l0U1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQ0IwQ0FERDI3N0FC
ODNDMDA5QjVCRjAgLyogVW5pY29kZUJpZGkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBDMkRBMTQ3
MUYzQkVCNDkwMERCQzMxNyAvKiBVUkxGb3JtYXR0aW5nU1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwNzYxMURCNjI0M0ZBNUJGMDBEODA3MDQgLyogVXNhZ2VUcmFja2luZ1NvZnRMaW5rLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNDZCOEM0RjI2NzQwQUQ4MDA3QTY1NTQgLyogVmlzaW9uS2l0Q29y
ZVNQSS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODg5LDYgKzE5MDgsNyBAQAogCQkJCTU3RkQzMThB
MjJCMzU5M0UwMDhEMEU4QiAvKiBBcHBTU09Tb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTQxNkU5OTUzMjNEQUU2QkUwMEU4NzFDQiAvKiBBdWRpb1Rvb2xib3hTb2Z0TGluay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwNzdFODdCMTIyNkE0NjAyMDBBMkFGRjAgLyogQVZGb3VuZGF0aW9u
U29mdExpbmsubW0gaW4gU291cmNlcyAqLywKKwkJCQkxQ0IwQ0FEQTI3N0FBNDc3MDA5QjVCRjAg
LyogQmlkaUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUQyQjQxMzQyNUYwNUUzNTAw
QTNGNzBBIC8qIENsb2NrR2VuZXJpYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwQ0Y5OUNBODFG
NzM4NDM3MDA3RUU3OTMgLyogQ29yZU1lZGlhU29mdExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRjQ3MjIxRjQyNzZGQzJFQjAwQjk4NEM3IC8qIENvcmVNTFNvZnRMaW5rLm1tIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9DTWFrZUxpc3RzLnR4dAppbmRleCA1ZmFhMmZmZjE4
MWE4ZjRlZDAzMDI2ZmQxMmU2MjdhNTViY2VmNWIyLi40MzZhNzU4NWVjNmJmMDQ2NWIxZjczNzhh
MDk1MGQzZGE0OWM2YjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvQ01ha2VMaXN0cy50eHQKQEAg
LTE2OSw2ICsxNjksOSBAQCBzZXQoUEFMX1BVQkxJQ19IRUFERVJTCiAgICAgc3lzdGVtL1NvdW5k
LmgKICAgICBzeXN0ZW0vU3lzdGVtU2xlZXBMaXN0ZW5lci5oCiAKKyAgICB0ZXh0L0JpZGlDb250
ZXh0LmgKKyAgICB0ZXh0L0JpZGlSZXNvbHZlci5oCisgICAgdGV4dC9CaWRpUnVuTGlzdC5oCiAg
ICAgdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAogICAgIHRleHQvRW5jb2RpbmdUYWJsZXMu
aAogICAgIHRleHQvS2lsbFJpbmcuaApAQCAtMTg2LDYgKzE4OSw3IEBAIHNldChQQUxfUFVCTElD
X0hFQURFUlMKICAgICB0ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yLmgKICAgICB0ZXh0L1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmgKICAgICB0ZXh0L1VuZW5jb2RhYmxlSGFuZGxpbmcuaAorICAgIHRl
eHQvVW5pY29kZUJpZGkuaAogKQogCiBzZXQoUEFMX1NPVVJDRVMKQEAgLTIyMiw2ICsyMjYsNyBA
QCBzZXQoUEFMX1NPVVJDRVMKICAgICBzeXN0ZW0vU2xlZXBEaXNhYmxlci5jcHAKICAgICBzeXN0
ZW0vU3lzdGVtU2xlZXBMaXN0ZW5lci5jcHAKIAorICAgIHRleHQvQmlkaUNvbnRleHQuY3BwCiAg
ICAgdGV4dC9FbmNvZGluZ1RhYmxlcy5jcHAKICAgICB0ZXh0L1RleHRDb2RlYy5jcHAKICAgICB0
ZXh0L1RleHRDb2RlY0NKSy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
TG9nZ2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0xvZ2dpbmcuY3BwCmluZGV4IDAw
YjdlZDg0NThiN2YzZWE4NTRjMWViYWFiYzZhMzQ2NDZlODBiY2EuLjE0MmU4ZmY2MTYxYThlYTRk
MzZiMjA2NmUyMmZkNzRmYmI2YTEzYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvTG9nZ2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dnaW5nLmNwcApA
QCAtNDgsNCArNDgsNCBAQCB2b2lkIHJlZ2lzdGVyTm90aWZ5Q2FsbGJhY2soY29uc3QgU3RyaW5n
JiBub3RpZnlJRCwgRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQogI2VuZGlmCiB9CiAKLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjU3NjdiYjFmZGRhYTBl
NjliZWMyZmQ4N2NkZjkzZTMzZmM2ZWZlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHly
aWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCisKKyNpbmNsdWRlIDxt
dXRleD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBQQUwgeworCitzdHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4gewor
ICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDE2OworICAgIHZvaWQqIHBhcmVudDsKK307CisKK0NP
TVBJTEVfQVNTRVJUKHNpemVvZihCaWRpQ29udGV4dCkgPT0gc2l6ZW9mKFNhbWVTaXplQXNCaWRp
Q29udGV4dCksIEJpZGlDb250ZXh0X3Nob3VsZF9zdGF5X3NtYWxsKTsKKworaW5saW5lIEJpZGlD
b250ZXh0OjpCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiBk
aXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlLCBCaWRp
Q29udGV4dCogcGFyZW50KQorICAgIDogbV9sZXZlbChsZXZlbCkKKyAgICAsIG1fZGlyZWN0aW9u
KGRpcmVjdGlvbikKKyAgICAsIG1fb3ZlcnJpZGUob3ZlcnJpZGUpCisgICAgLCBtX3NvdXJjZShz
b3VyY2UpCisgICAgLCBtX3BhcmVudChwYXJlbnQpCit7Cit9CisKK2lubGluZSBSZWY8QmlkaUNv
bnRleHQ+IEJpZGlDb250ZXh0OjpjcmVhdGVVbmNhY2hlZCh1bnNpZ25lZCBjaGFyIGxldmVsLCBV
Q2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3Vy
Y2Ugc291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEJpZGlDb250ZXh0KGxldmVsLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCBzb3VyY2UsIHBhcmVu
dCkpOworfQorCitSZWY8QmlkaUNvbnRleHQ+IEJpZGlDb250ZXh0OjpjcmVhdGUodW5zaWduZWQg
Y2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRp
RW1iZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKK3sKKyAgICBBU1NF
UlQoZGlyZWN0aW9uID09IChsZXZlbCAlIDIgPyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRfVE9f
UklHSFQpKTsKKworICAgIGlmIChwYXJlbnQpCisgICAgICAgIHJldHVybiBjcmVhdGVVbmNhY2hl
ZChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgc291cmNlLCBwYXJlbnQpOworCisgICAgQVNT
RVJUKGxldmVsIDw9IDEpOworICAgIGlmICghbGV2ZWwpIHsKKyAgICAgICAgaWYgKCFvdmVycmlk
ZSkgeworICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxCaWRpQ29udGV4
dD4+IGx0ckNvbnRleHQ7CisgICAgICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgbHRyQ29u
dGV4dE9uY2VGbGFnOworICAgICAgICAgICAgc3RkOjpjYWxsX29uY2UobHRyQ29udGV4dE9uY2VG
bGFnLCBbJl0oKSB7CisgICAgICAgICAgICAgICAgbHRyQ29udGV4dC5nZXQoKSA9IGNyZWF0ZVVu
Y2FjaGVkKDAsIFVfTEVGVF9UT19SSUdIVCwgZmFsc2UsIEZyb21TdHlsZU9yRE9NLCAwKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuICpsdHJDb250ZXh0LmdldCgpOworICAg
ICAgICB9CisKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxCaWRpQ29udGV4
dD4+IGx0ck92ZXJyaWRlQ29udGV4dDsKKyAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGx0
ck92ZXJyaWRlQ29udGV4dE9uY2VGbGFnOworICAgICAgICBzdGQ6OmNhbGxfb25jZShsdHJPdmVy
cmlkZUNvbnRleHRPbmNlRmxhZywgWyZdKCkgeworICAgICAgICAgICAgbHRyT3ZlcnJpZGVDb250
ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMCwgVV9MRUZUX1RPX1JJR0hULCB0cnVlLCBGcm9t
U3R5bGVPckRPTSwgMCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gKmx0ck92ZXJyaWRl
Q29udGV4dC5nZXQoKTsKKyAgICB9CisKKyAgICBpZiAoIW92ZXJyaWRlKSB7CisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8QmlkaUNvbnRleHQ+PiBydGxDb250ZXh0OworICAg
ICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgcnRsQ29udGV4dE9uY2VGbGFnOworICAgICAgICBz
dGQ6OmNhbGxfb25jZShydGxDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAgICAgIHJ0
bENvbnRleHQuZ2V0KCkgPSBjcmVhdGVVbmNhY2hlZCgxLCBVX1JJR0hUX1RPX0xFRlQsIGZhbHNl
LCBGcm9tU3R5bGVPckRPTSwgMCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gKnJ0bENv
bnRleHQuZ2V0KCk7CisgICAgfQorCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxC
aWRpQ29udGV4dD4+IHJ0bE92ZXJyaWRlQ29udGV4dDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgcnRsT3ZlcnJpZGVDb250ZXh0T25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UocnRsT3Zl
cnJpZGVDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAgcnRsT3ZlcnJpZGVDb250ZXh0
LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMSwgVV9SSUdIVF9UT19MRUZULCB0cnVlLCBGcm9tU3R5
bGVPckRPTSwgMCk7CisgICAgfSk7CisgICAgcmV0dXJuICpydGxPdmVycmlkZUNvbnRleHQuZ2V0
KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmPEJpZGlDb250ZXh0PiBjb3B5Q29udGV4dEFuZFJl
YmFzZWxpbmVMZXZlbChCaWRpQ29udGV4dCYgY29udGV4dCwgQmlkaUNvbnRleHQqIHBhcmVudCkK
K3sKKyAgICBhdXRvIG5ld0xldmVsID0gcGFyZW50ID8gcGFyZW50LT5sZXZlbCgpIDogMDsKKyAg
ICBpZiAoY29udGV4dC5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpCisgICAgICAgIG5ld0xldmVs
ID0gbmV4dEdyZWF0ZXJPZGRMZXZlbChuZXdMZXZlbCk7CisgICAgZWxzZSBpZiAocGFyZW50KQor
ICAgICAgICBuZXdMZXZlbCA9IG5leHRHcmVhdGVyRXZlbkxldmVsKG5ld0xldmVsKTsKKyAgICBy
ZXR1cm4gQmlkaUNvbnRleHQ6OmNyZWF0ZShuZXdMZXZlbCwgY29udGV4dC5kaXIoKSwgY29udGV4
dC5vdmVycmlkZSgpLCBjb250ZXh0LnNvdXJjZSgpLCBwYXJlbnQpOworfQorCisvLyBUaGUgQmlk
aUNvbnRleHQgc3RhY2sgbXVzdCBiZSBpbW11dGFibGUgLS0gdGhleSdyZSByZS11c2VkIGZvciBy
ZS1sYXlvdXQgYWZ0ZXIKKy8vIERPTSBtb2RpZmljYXRpb24vZWRpdGluZyAtLSBzbyB3ZSBjb3B5
IGFsbCB0aGUgbm9uLVVuaWNvZGUgY29udGV4dHMsIGFuZAorLy8gcmVjYWxjdWxhdGUgdGhlaXIg
bGV2ZWxzLgorUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y29weVN0YWNrUmVtb3ZpbmdV
bmljb2RlRW1iZWRkaW5nQ29udGV4dHMoKQoreworICAgIFZlY3RvcjxCaWRpQ29udGV4dCosIDY0
PiBjb250ZXh0czsKKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gdGhpczsgYW5jZXN0b3I7IGFu
Y2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChhbmNlc3Rvci0+c291
cmNlKCkgIT0gRnJvbVVuaWNvZGUpCisgICAgICAgICAgICBjb250ZXh0cy5hcHBlbmQoYW5jZXN0
b3IpOworICAgIH0KKyAgICBBU1NFUlQoY29udGV4dHMuc2l6ZSgpKTsKKyAgICBhdXRvIHRvcENv
bnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZlbCgqY29udGV4dHMubGFzdCgpLCBu
dWxscHRyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb250ZXh0cy5zaXplKCkgLSAxOyBpOyAt
LWkpCisgICAgICAgIHRvcENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZlbCgq
Y29udGV4dHNbaSAtIDFdLCB0b3BDb250ZXh0LnB0cigpKTsKKyAgICByZXR1cm4gdG9wQ29udGV4
dDsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlDb250ZXh0JiBjMSwgY29uc3QgQmlk
aUNvbnRleHQmIGMyKQoreworICAgIGlmICgmYzEgPT0gJmMyKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAoYzEubGV2ZWwoKSAhPSBjMi5sZXZlbCgpIHx8IGMxLm92ZXJyaWRlKCkgIT0g
YzIub3ZlcnJpZGUoKSB8fCBjMS5kaXIoKSAhPSBjMi5kaXIoKSB8fCBjMS5zb3VyY2UoKSAhPSBj
Mi5zb3VyY2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghYzEucGFyZW50KCkp
CisgICAgICAgIHJldHVybiAhYzIucGFyZW50KCk7CisgICAgcmV0dXJuIGMyLnBhcmVudCgpICYm
ICpjMS5wYXJlbnQoKSA9PSAqYzIucGFyZW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaUNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWVh
YzBjNWM0ZWIyZjA2YzVmMzk3MTdiMjQzMDBmNTFjZmJjOTBkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0LmgKQEAgLTAsMCArMSw2OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQor
ICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBQQUwgeworCitlbnVtIEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5bGVP
ckRPTSwgRnJvbVVuaWNvZGUgfTsKKworLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxpY2l0
IGVtYmVkZGluZ3MuCitjbGFzcyBCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxCaWRpQ29udGV4dD4geworcHVibGljOgorICAgIFBBTF9FWFBPUlQgc3RhdGljIFJlZjxC
aWRpQ29udGV4dD4gY3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBi
b29sIG92ZXJyaWRlID0gZmFsc2UsIEJpZGlFbWJlZGRpbmdTb3VyY2UgPSBGcm9tU3R5bGVPckRP
TSwgQmlkaUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOworCisgICAgQmlkaUNvbnRleHQqIHBh
cmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50LmdldCgpOyB9CisgICAgdW5zaWduZWQgY2hh
ciBsZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGV2ZWw7IH0KKyAgICBVQ2hhckRpcmVjdGlvbiBk
aXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4obV9kaXJlY3Rp
b24pOyB9CisgICAgYm9vbCBvdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGU7IH0K
KyAgICBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEJpZGlFbWJlZGRpbmdTb3VyY2U+KG1fc291cmNlKTsgfQorCisgICAgUEFMX0VYUE9SVCBS
ZWY8QmlkaUNvbnRleHQ+IGNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0NvbnRleHRz
KCk7CisKK3ByaXZhdGU6CisgICAgQmlkaUNvbnRleHQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNo
YXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2UsIEJpZGlDb250
ZXh0KiBwYXJlbnQpOworCisgICAgc3RhdGljIFJlZjxCaWRpQ29udGV4dD4gY3JlYXRlVW5jYWNo
ZWQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJp
ZGlFbWJlZGRpbmdTb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpOworCisgICAgdW5zaWduZWQg
bV9sZXZlbCA6IDY7IC8vIFRoZSBtYXhpbWl1bSBiaWRpIGxldmVsIGlzIDYyOiBodHRwOi8vdW5p
Y29kZS5vcmcvcmVwb3J0cy90cjkvI0V4cGxpY2l0X0xldmVsc19hbmRfRGlyZWN0aW9ucworICAg
IHVuc2lnbmVkIG1fZGlyZWN0aW9uIDogNTsgLy8gRGlyZWN0aW9uCisgICAgdW5zaWduZWQgbV9v
dmVycmlkZSA6IDE7CisgICAgdW5zaWduZWQgbV9zb3VyY2UgOiAxOyAvLyBCaWRpRW1iZWRkaW5n
U291cmNlCisgICAgUmVmUHRyPEJpZGlDb250ZXh0PiBtX3BhcmVudDsKK307CisKK2lubGluZSB1
bnNpZ25lZCBjaGFyIG5leHRHcmVhdGVyT2RkTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkKK3sK
KyAgICByZXR1cm4gKGxldmVsICsgMSkgfCAxOworfQorCitpbmxpbmUgdW5zaWduZWQgY2hhciBu
ZXh0R3JlYXRlckV2ZW5MZXZlbCh1bnNpZ25lZCBjaGFyIGxldmVsKQoreworICAgIHJldHVybiAo
bGV2ZWwgKyAyKSAmIH4xOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQmlkaUNvbnRleHQm
LCBjb25zdCBCaWRpQ29udGV4dCYpOworCit9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YWNjMGQyOTJhMDkx
NWFjM2RmZDFhNmE0OWRjZGNmNDQ1YTU1ZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC90ZXh0L0JpZGlSZXNvbHZlci5oCkBAIC0wLDAgKzEsOTY1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8cGFsL3Rl
eHQvQmlkaUNvbnRleHQuaD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9CaWRpUnVuTGlzdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgUEFMIHsKKworY2xhc3MgUmVuZGVyT2Jq
ZWN0OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gY2xhc3MgV2hpdGVzcGFjZUNvbGxh
cHNpbmdTdGF0ZSB7CitwdWJsaWM6CisgICAgdm9pZCByZXNldCgpCisgICAgeworICAgICAgICBt
X3RyYW5zaXRpb25zLmNsZWFyKCk7CisgICAgICAgIG1fY3VycmVudFRyYW5zaXRpb24gPSAwOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHN0YXJ0SWdub3JpbmdTcGFjZXMoY29uc3QgSXRlcmF0b3Im
IHRyYW5zaXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoIShtX3RyYW5zaXRpb25zLnNpemUo
KSAlIDIpKTsKKyAgICAgICAgbV90cmFuc2l0aW9ucy5hcHBlbmQodHJhbnNpdGlvbik7CisgICAg
fQorCisgICAgdm9pZCBzdG9wSWdub3JpbmdTcGFjZXMoY29uc3QgSXRlcmF0b3ImIHRyYW5zaXRp
b24pCisgICAgeworICAgICAgICBBU1NFUlQobV90cmFuc2l0aW9ucy5zaXplKCkgJSAyKTsKKyAg
ICAgICAgbV90cmFuc2l0aW9ucy5hcHBlbmQodHJhbnNpdGlvbik7CisgICAgfQorCisgICAgdm9p
ZCBkZWNyZW1lbnRUcmFuc2l0aW9uQXQoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgbV90
cmFuc2l0aW9uc1tpbmRleF0uZmFzdERlY3JlbWVudCgpOworICAgIH0KKworICAgIGNvbnN0IFZl
Y3RvcjxJdGVyYXRvcj4mIHRyYW5zaXRpb25zKCkgeyByZXR1cm4gbV90cmFuc2l0aW9uczsgfQor
ICAgIHNpemVfdCBudW1UcmFuc2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNpdGlvbnMu
c2l6ZSgpOyB9CisgICAgc2l6ZV90IGN1cnJlbnRUcmFuc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50VHJhbnNpdGlvbjsgfQorICAgIHZvaWQgc2V0Q3VycmVudFRyYW5zaXRpb24oc2l6
ZV90IGN1cnJlbnRUcmFuc2l0aW9uKSB7IG1fY3VycmVudFRyYW5zaXRpb24gPSBjdXJyZW50VHJh
bnNpdGlvbjsgfQorICAgIHZvaWQgaW5jcmVtZW50Q3VycmVudFRyYW5zaXRpb24oKSB7ICsrbV9j
dXJyZW50VHJhbnNpdGlvbjsgfQorICAgIHZvaWQgZGVjcmVtZW50TnVtVHJhbnNpdGlvbnMoKSB7
IG1fdHJhbnNpdGlvbnMuc2hyaW5rKG1fdHJhbnNpdGlvbnMuc2l6ZSgpIC0gMSk7IH0KKyAgICBi
b29sIGJldHdlZW5UcmFuc2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRyYW5zaXRp
b24gJSAyOyB9Citwcml2YXRlOgorICAgIFZlY3RvcjxJdGVyYXRvcj4gbV90cmFuc2l0aW9uczsK
KyAgICBzaXplX3QgbV9jdXJyZW50VHJhbnNpdGlvbiB7IDAgfTsKK307CisKKy8vIFRoZSBCaWRp
U3RhdHVzIGF0IGEgZ2l2ZW4gcG9zaXRpb24gKHR5cGljYWxseSB0aGUgZW5kIG9mIGEgbGluZSkg
Y2FuCisvLyBiZSBjYWNoZWQgYW5kIHRoZW4gdXNlZCB0byByZXN0YXJ0IGJpZGkgcmVzb2x1dGlv
biBhdCB0aGF0IHBvc2l0aW9uLgorc3RydWN0IEJpZGlTdGF0dXMgeworICAgIEJpZGlTdGF0dXMo
KSA9IGRlZmF1bHQ7CisKKyAgICAvLyBDcmVhdGVzIGEgQmlkaVN0YXR1cyByZXByZXNlbnRpbmcg
YSBuZXcgcGFyYWdyYXBoIHJvb3Qgd2l0aCBhIGRlZmF1bHQgZGlyZWN0aW9uLgorICAgIC8vIFVz
ZXMgVGV4dERpcmVjdGlvbiBhcyBpdCBvbmx5IGhhcyB0d28gcG9zc2liaWxpdGllcyBpbnN0ZWFk
IG9mIFVDaGFyRGlyZWN0aW9uIHdoaWNoIGhhcyBhdCBsZWFzdCAxOS4KKyAgICBCaWRpU3RhdHVz
KFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgaXNPdmVycmlkZSkKKyAgICAgICAg
OiBlb3IoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gVV9MRUZUX1RPX1JJ
R0hUIDogVV9SSUdIVF9UT19MRUZUKQorICAgICAgICAsIGxhc3RTdHJvbmcoZW9yKQorICAgICAg
ICAsIGxhc3QoZW9yKQorICAgICAgICAsIGNvbnRleHQoUEFMOjpCaWRpQ29udGV4dDo6Y3JlYXRl
KGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IDAgOiAxLCBlb3IsIGlzT3Zl
cnJpZGUpKQorICAgIHsKKyAgICB9CisKKyAgICBCaWRpU3RhdHVzKFVDaGFyRGlyZWN0aW9uIGVv
ciwgVUNoYXJEaXJlY3Rpb24gbGFzdFN0cm9uZywgVUNoYXJEaXJlY3Rpb24gbGFzdCwgUmVmUHRy
PFBBTDo6QmlkaUNvbnRleHQ+JiYgY29udGV4dCkKKyAgICAgICAgOiBlb3IoZW9yKQorICAgICAg
ICAsIGxhc3RTdHJvbmcobGFzdFN0cm9uZykKKyAgICAgICAgLCBsYXN0KGxhc3QpCisgICAgICAg
ICwgY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQorICAgIHsKKyAgICB9CisKKyAgICBVQ2hhckRp
cmVjdGlvbiBlb3IgeyBVX09USEVSX05FVVRSQUwgfTsKKyAgICBVQ2hhckRpcmVjdGlvbiBsYXN0
U3Ryb25nIHsgVV9PVEhFUl9ORVVUUkFMIH07CisgICAgVUNoYXJEaXJlY3Rpb24gbGFzdCB7IFVf
T1RIRVJfTkVVVFJBTCB9OworICAgIFJlZlB0cjxQQUw6OkJpZGlDb250ZXh0PiBjb250ZXh0Owor
fTsKKworc3RydWN0IEJpZGlFbWJlZGRpbmcgeworICAgIEJpZGlFbWJlZGRpbmcoVUNoYXJEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBQQUw6OkJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlKQorICAgICAg
ICA6IGRpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgICAgICwgc291cmNlKHNvdXJjZSkKKyAgICB7
CisgICAgfQorCisgICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIFBBTDo6QmlkaUVt
YmVkZGluZ1NvdXJjZSBzb3VyY2U7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEJpZGlTdGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCit7CisgICAg
cmV0dXJuIHN0YXR1czEuZW9yID09IHN0YXR1czIuZW9yICYmIHN0YXR1czEubGFzdCA9PSBzdGF0
dXMyLmxhc3QgJiYgc3RhdHVzMS5sYXN0U3Ryb25nID09IHN0YXR1czIubGFzdFN0cm9uZyAmJiAq
KHN0YXR1czEuY29udGV4dCkgPT0gKihzdGF0dXMyLmNvbnRleHQpOworfQorCitpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMm
IHN0YXR1czIpCit7CisgICAgcmV0dXJuICEoc3RhdHVzMSA9PSBzdGF0dXMyKTsKK30KKworc3Ry
dWN0IEJpZGlDaGFyYWN0ZXJSdW4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIEJpZGlDaGFyYWN0ZXJSdW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3As
IFBBTDo6QmlkaUNvbnRleHQqIGNvbnRleHQsIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbikKKyAg
ICAgICAgOiBtX3N0YXJ0KHN0YXJ0KQorICAgICAgICAsIG1fc3RvcChzdG9wKQorICAgICAgICAs
IG1fb3ZlcnJpZGUoY29udGV4dC0+b3ZlcnJpZGUoKSkKKyAgICB7CisgICAgICAgIGlmIChkaXJl
Y3Rpb24gPT0gVV9PVEhFUl9ORVVUUkFMKQorICAgICAgICAgICAgZGlyZWN0aW9uID0gY29udGV4
dC0+ZGlyKCk7CisKKyAgICAgICAgbV9sZXZlbCA9IGNvbnRleHQtPmxldmVsKCk7CisKKyAgICAg
ICAgLy8gYWRkIGxldmVsIG9mIHJ1biAoY2FzZXMgSTEgJiBJMikKKyAgICAgICAgaWYgKG1fbGV2
ZWwgJSAyKSB7CisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVCB8
fCBkaXJlY3Rpb24gPT0gVV9BUkFCSUNfTlVNQkVSIHx8IGRpcmVjdGlvbiA9PSBVX0VVUk9QRUFO
X05VTUJFUikKKyAgICAgICAgICAgICAgICBtX2xldmVsKys7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCkKKyAgICAgICAgICAg
ICAgICBtX2xldmVsKys7CisgICAgICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT0gVV9BUkFC
SUNfTlVNQkVSIHx8IGRpcmVjdGlvbiA9PSBVX0VVUk9QRUFOX05VTUJFUikKKyAgICAgICAgICAg
ICAgICBtX2xldmVsICs9IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+QmlkaUNoYXJhY3Rl
clJ1bigpCisgICAgeworICAgICAgICAvLyBEZWxldGUgdGhlIGxpbmtlZCBsaXN0IGluIGEgbG9v
cCB0byBwcmV2ZW50IGRlc3RydWN0b3IgcmVjdXJzaW9uLgorICAgICAgICBhdXRvIG5leHQgPSBX
VEZNb3ZlKG1fbmV4dCk7CisgICAgICAgIHdoaWxlIChuZXh0KQorICAgICAgICAgICAgbmV4dCA9
IFdURk1vdmUobmV4dC0+bV9uZXh0KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzdGFydCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KKyAgICB1bnNpZ25lZCBzdG9wKCkgY29uc3QgeyByZXR1
cm4gbV9zdG9wOyB9CisgICAgdW5zaWduZWQgY2hhciBsZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGV2ZWw7IH0KKyAgICBib29sIHJldmVyc2VkKGJvb2wgdmlzdWFsbHlPcmRlcmVkKSB7IHJldHVy
biBtX2xldmVsICUgMiAmJiAhdmlzdWFsbHlPcmRlcmVkOyB9CisgICAgYm9vbCBkaXJPdmVycmlk
ZShib29sIHZpc3VhbGx5T3JkZXJlZCkgeyByZXR1cm4gbV9vdmVycmlkZSB8fCB2aXN1YWxseU9y
ZGVyZWQ7IH0KKworICAgIEJpZGlDaGFyYWN0ZXJSdW4qIG5leHQoKSBjb25zdCB7IHJldHVybiBt
X25leHQuZ2V0KCk7IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaUNoYXJhY3RlclJ1bj4gdGFr
ZU5leHQoKSB7IHJldHVybiBXVEZNb3ZlKG1fbmV4dCk7IH0KKyAgICB2b2lkIHNldE5leHQoc3Rk
Ojp1bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+JiYgbmV4dCkgeyBtX25leHQgPSBXVEZNb3Zl
KG5leHQpOyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJS
dW4+IG1fbmV4dDsKKworcHVibGljOgorICAgIHVuc2lnbmVkIG1fc3RhcnQ7CisgICAgdW5zaWdu
ZWQgbV9zdG9wOworICAgIHVuc2lnbmVkIGNoYXIgbV9sZXZlbDsKKyAgICBib29sIG1fb3ZlcnJp
ZGUgOiAxOworICAgIGJvb2wgbV9oYXNIeXBoZW4gOiAxOyAvLyBVc2VkIGJ5IEJpZGlSdW4gc3Vi
Y2xhc3Mgd2hpY2ggaXMgYSBsYXllcmluZyB2aW9sYXRpb24gYnV0IGVuYWJsZXMgdXMgdG8gc2F2
ZSA4IGJ5dGVzIHBlciBvYmplY3Qgb24gNjQtYml0LgorfTsKKworZW51bSBjbGFzcyBWaXN1YWxE
aXJlY3Rpb25PdmVycmlkZSB7CisgICAgTm9WaXN1YWxPdmVycmlkZSwKKyAgICBWaXN1YWxMZWZ0
VG9SaWdodE92ZXJyaWRlLAorICAgIFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUKK307CisKKy8v
IEJpZGlSZXNvbHZlciBpcyBXZWJLaXQncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVW5pY29kZSBC
aWRpIEFsZ29yaXRobQorLy8gaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+
IGNsYXNzIEJpZGlSZXNvbHZlckJhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJpZGlS
ZXNvbHZlckJhc2UpOworcHVibGljOgorICAgIGNvbnN0IEl0ZXJhdG9yJiBwb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fY3VycmVudDsgfQorICAgIHZvaWQgc2V0UG9zaXRpb25JZ25vcmluZ05l
c3RlZElzb2xhdGVzKGNvbnN0IEl0ZXJhdG9yJiBwb3NpdGlvbikgeyBtX2N1cnJlbnQgPSBwb3Np
dGlvbjsgfQorICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgSXRlcmF0b3ImIHBvc2l0aW9uLCB1
bnNpZ25lZCBuZXN0ZWRJc29sYXRlZENvdW50KQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50ID0g
cG9zaXRpb247CisgICAgICAgIG1fbmVzdGVkSXNvbGF0ZUNvdW50ID0gbmVzdGVkSXNvbGF0ZWRD
b3VudDsKKyAgICB9CisKKyAgICB2b2lkIGluY3JlbWVudCgpIHsgc3RhdGljX2Nhc3Q8RGVyaXZl
ZENsYXNzJj4oKnRoaXMpLmluY3JlbWVudEludGVybmFsKCk7IH0KKworICAgIFBBTDo6QmlkaUNv
bnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1cy5jb250ZXh0LmdldCgpOyB9
CisgICAgdm9pZCBzZXRDb250ZXh0KFJlZlB0cjxQQUw6OkJpZGlDb250ZXh0PiYmIGNvbnRleHQp
IHsgbV9zdGF0dXMuY29udGV4dCA9IFdURk1vdmUoY29udGV4dCk7IH0KKworICAgIHZvaWQgc2V0
TGFzdERpcihVQ2hhckRpcmVjdGlvbiBsYXN0RGlyKSB7IG1fc3RhdHVzLmxhc3QgPSBsYXN0RGly
OyB9CisgICAgdm9pZCBzZXRMYXN0U3Ryb25nRGlyKFVDaGFyRGlyZWN0aW9uIGxhc3RTdHJvbmdE
aXIpIHsgbV9zdGF0dXMubGFzdFN0cm9uZyA9IGxhc3RTdHJvbmdEaXI7IH0KKyAgICB2b2lkIHNl
dEVvckRpcihVQ2hhckRpcmVjdGlvbiBlb3JEaXIpIHsgbV9zdGF0dXMuZW9yID0gZW9yRGlyOyB9
CisKKyAgICBVQ2hhckRpcmVjdGlvbiBkaXIoKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsg
fQorICAgIHZvaWQgc2V0RGlyKFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVjdGlv
biA9IGRpcmVjdGlvbjsgfQorCisgICAgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICB2b2lkIHNldFN0YXR1cyhCaWRpU3RhdHVzIHN0YXR1
cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorCisgICAgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0
ZTxJdGVyYXRvcj4mIHdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUoKSB7IHJldHVybiBtX3doaXRl
c3BhY2VDb2xsYXBzaW5nU3RhdGU7IH0KKworICAgIC8vIFRoZSBjdXJyZW50IGFsZ29yaXRobSBo
YW5kbGVzIG5lc3RlZCBpc29sYXRlcyBvbmUgbGF5ZXIgb2YgbmVzdGluZyBhdCBhIHRpbWUuCisg
ICAgLy8gQnV0IHdoZW4gd2UgbGF5b3V0IGVhY2ggaXNvbGF0ZWQgc3Bhbiwgd2Ugd2lsbCB3YWxr
IGludG8gKGFuZCBpZ25vcmUpIGFsbAorICAgIC8vIGNoaWxkIGlzb2xhdGVkIHNwYW5zLgorICAg
IHZvaWQgZW50ZXJJc29sYXRlKCkgeyBtX25lc3RlZElzb2xhdGVDb3VudCsrOyB9CisgICAgdm9p
ZCBleGl0SXNvbGF0ZSgpIHsgQVNTRVJUKG1fbmVzdGVkSXNvbGF0ZUNvdW50ID49IDEpOyBtX25l
c3RlZElzb2xhdGVDb3VudC0tOyB9CisgICAgYm9vbCBpbklzb2xhdGUoKSBjb25zdCB7IHJldHVy
biBtX25lc3RlZElzb2xhdGVDb3VudDsgfQorCisgICAgdm9pZCBlbWJlZChVQ2hhckRpcmVjdGlv
biwgUEFMOjpCaWRpRW1iZWRkaW5nU291cmNlKTsKKyAgICBib29sIGNvbW1pdEV4cGxpY2l0RW1i
ZWRkaW5nKCk7CisKKyAgICB2b2lkIGNyZWF0ZUJpZGlSdW5zRm9yTGluZShjb25zdCBJdGVyYXRv
ciYgZW5kLCBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSA9IFZpc3VhbERpcmVjdGlvbk92ZXJyaWRl
OjpOb1Zpc3VhbE92ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJlYWsgPSBmYWxzZSk7CisKKyAgICBQ
QUw6OkJpZGlSdW5MaXN0PFJ1bj4mIHJ1bnMoKSB7IHJldHVybiBtX3J1bnM7IH0KKworICAgIC8v
IEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgcGFydCBvZiBkZWxldGVSdW5zKCkgYnV0IHdhcyBhIGxh
eWVyaW5nIHZpb2xhdGlvbi4KKyAgICAvLyBJdCdzIHVuY2xlYXIgaWYgdGhpcyBpcyBzdGlsbCBu
ZWVkZWQuCisgICAgdm9pZCBtYXJrQ3VycmVudFJ1bkVtcHR5KCkgeyBtX2VtcHR5UnVuID0gdHJ1
ZTsgfQorCisgICAgdm9pZCBzZXRXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29s
YXRlZFJ1bihSdW4mLCBzaXplX3QpOworICAgIHVuc2lnbmVkIHdoaXRlc3BhY2VDb2xsYXBzaW5n
VHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYpOworCitwcm90ZWN0ZWQ6CisgICAgQmlkaVJl
c29sdmVyQmFzZSgpID0gZGVmYXVsdDsKKworICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIElubGlu
ZUJpZGlSZXNvbHZlcnMgc3ViY2xhc3NpbmcgdGhpcyBtZXRob2QsIHdlIHNob3VsZAorICAgIC8v
IHBhc3MgaW4gc29tZSBzb3J0IG9mIFRyYWl0cyBvYmplY3Qgd2hpY2gga25vd3MgaG93IHRvIGNy
ZWF0ZSBydW5zIGZvciBhcHBlbmRpbmcuCisgICAgdm9pZCBhcHBlbmRSdW4oKSB7IHN0YXRpY19j
YXN0PERlcml2ZWRDbGFzcyY+KCp0aGlzKS5hcHBlbmRSdW5JbnRlcm5hbCgpOyB9CisgICAgYm9v
bCBuZWVkc0NvbnRpbnVlUGFzdEVuZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IERlcml2ZWRDbGFzcyY+KCp0aGlzKS5uZWVkc0NvbnRpbnVlUGFzdEVuZEludGVybmFsKCk7IH0K
KworICAgIEl0ZXJhdG9yIG1fY3VycmVudDsKKyAgICAvLyBzb3IgYW5kIGVvciBhcmUgInN0YXJ0
IG9mIHJ1biIgYW5kICJlbmQgb2YgcnVuIiByZXNwZWN0aXZlbHkgYW5kIGNvcnJlcG9uZAorICAg
IC8vIHRvIGFicmV2aWF0aW9ucyB1c2VkIGluIFVCQSBzcGVjOiBodHRwOi8vdW5pY29kZS5vcmcv
cmVwb3J0cy90cjkvI0JENworICAgIEl0ZXJhdG9yIG1fc29yOyAvLyBQb2ludHMgdG8gdGhlIGZp
cnN0IGNoYXJhY3RlciBpbiB0aGUgY3VycmVudCBydW4uCisgICAgSXRlcmF0b3IgbV9lb3I7IC8v
IFBvaW50cyB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGN1cnJlbnQgcnVuLgorICAgIEl0
ZXJhdG9yIG1fbGFzdDsKKyAgICBCaWRpU3RhdHVzIG1fc3RhdHVzOworICAgIFVDaGFyRGlyZWN0
aW9uIG1fZGlyZWN0aW9uIHsgVV9PVEhFUl9ORVVUUkFMIH07CisgICAgSXRlcmF0b3IgZW5kT2ZM
aW5lOworICAgIGJvb2wgbV9yZWFjaGVkRW5kT2ZMaW5lIHsgZmFsc2UgfTsKKyAgICBJdGVyYXRv
ciBtX2xhc3RCZWZvcmVFVDsgLy8gQmVmb3JlIGEgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRP
UgorICAgIGJvb2wgbV9lbXB0eVJ1biB7IHRydWUgfTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBub3QgYmVsb25nIHRvIHRoZSByZXNvbHZlciwgYnV0IHJhdGhlciBiZSBwYXNzZWQKKyAg
ICAvLyBpbnRvIGNyZWF0ZUJpZGlSdW5zRm9yTGluZSBieSB0aGUgY2FsbGVyLgorICAgIFBBTDo6
QmlkaVJ1bkxpc3Q8UnVuPiBtX3J1bnM7CisKKyAgICBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRl
PEl0ZXJhdG9yPiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7CisKKyAgICB1bnNpZ25lZCBt
X25lc3RlZElzb2xhdGVDb3VudCB7IDAgfTsKKyAgICBIYXNoTWFwPFJ1biosIHVuc2lnbmVkPiBt
X3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuOworCitwcml2YXRl
OgorICAgIHZvaWQgcmFpc2VFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZy
b20sIFVDaGFyRGlyZWN0aW9uIHRvKTsKKyAgICB2b2lkIGxvd2VyRXhwbGljaXRFbWJlZGRpbmdM
ZXZlbChVQ2hhckRpcmVjdGlvbiBmcm9tKTsKKyAgICB2b2lkIGNoZWNrRGlyZWN0aW9uSW5Mb3dl
clJhaXNlRW1iZWRkaW5nTGV2ZWwoKTsKKworICAgIHZvaWQgdXBkYXRlU3RhdHVzTGFzdEZyb21D
dXJyZW50RGlyZWN0aW9uKFVDaGFyRGlyZWN0aW9uKTsKKyAgICB2b2lkIHJlb3JkZXJSdW5zRnJv
bUxldmVscygpOworICAgIHZvaWQgaW5jcmVtZW50SW50ZXJuYWwoKSB7IG1fY3VycmVudC5pbmNy
ZW1lbnQoKTsgfQorICAgIHZvaWQgYXBwZW5kUnVuSW50ZXJuYWwoKTsKKyAgICBib29sIG5lZWRz
Q29udGludWVQYXN0RW5kSW50ZXJuYWwoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBW
ZWN0b3I8QmlkaUVtYmVkZGluZywgOD4gbV9jdXJyZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5j
ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4+CitjbGFz
cyBCaWRpUmVzb2x2ZXIgOiBwdWJsaWMgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBC
aWRpUmVzb2x2ZXI8SXRlcmF0b3IsIFJ1bj4+IHsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIElzb2xhdGVSdW4+CitjbGFzcyBCaWRpUmVz
b2x2ZXJXaXRoSXNvbGF0ZSA6IHB1YmxpYyBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4s
IEJpZGlSZXNvbHZlcldpdGhJc29sYXRlPEl0ZXJhdG9yLCBSdW4sIElzb2xhdGVSdW4+PiB7Citw
dWJsaWM6CisgICAgfkJpZGlSZXNvbHZlcldpdGhJc29sYXRlKCk7CisKKyAgICB2b2lkIGluY3Jl
bWVudEludGVybmFsKCk7CisgICAgdm9pZCBhcHBlbmRSdW5JbnRlcm5hbCgpOworICAgIGJvb2wg
bmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5hbCgpIGNvbnN0OworICAgIFZlY3RvcjxJc29sYXRl
UnVuPiYgaXNvbGF0ZWRSdW5zKCkgeyByZXR1cm4gbV9pc29sYXRlZFJ1bnM7IH0KKworcHJpdmF0
ZToKKyAgICBWZWN0b3I8SXNvbGF0ZVJ1bj4gbV9pc29sYXRlZFJ1bnM7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBJc29sYXRlUnVuPgor
aW5saW5lIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlPEl0ZXJhdG9yLCBSdW4sIElzb2xhdGVSdW4+
Ojp+QmlkaVJlc29sdmVyV2l0aElzb2xhdGUoKQoreworICAgIC8vIFRoZSBvd25lciBvZiB0aGlz
IHJlc29sdmVyIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhlIGlzb2xhdGVkIHJ1bnMuCisgICAgQVNT
RVJUKG1faXNvbGF0ZWRSdW5zLmlzRW1wdHkoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KK3ZvaWQgQmlkaVJl
c29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+OjphcHBlbmRSdW5JbnRlcm5h
bCgpCit7CisgICAgaWYgKCFtX2VtcHR5UnVuICYmICFtX2Vvci5hdEVuZCgpKSB7CisgICAgICAg
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbV9zb3Iub2Zmc2V0KCk7CisgICAgICAgIHVuc2lnbmVk
IGVuZE9mZnNldCA9IG1fZW9yLm9mZnNldCgpOworCisgICAgICAgIGlmICghZW5kT2ZMaW5lLmF0
RW5kKCkgJiYgZW5kT2Zmc2V0ID49IGVuZE9mTGluZS5vZmZzZXQoKSkgeworICAgICAgICAgICAg
bV9yZWFjaGVkRW5kT2ZMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIGVuZE9mZnNldCA9IGVuZE9m
TGluZS5vZmZzZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbmRPZmZzZXQgPj0gc3Rh
cnRPZmZzZXQpCisgICAgICAgICAgICBtX3J1bnMuYXBwZW5kUnVuKG1ha2VVbmlxdWU8UnVuPihz
dGFydE9mZnNldCwgZW5kT2Zmc2V0ICsgMSwgY29udGV4dCgpLCBtX2RpcmVjdGlvbikpOworCisg
ICAgICAgIG1fZW9yLmluY3JlbWVudCgpOworICAgICAgICBtX3NvciA9IG1fZW9yOworICAgIH0K
KworICAgIG1fZGlyZWN0aW9uID0gVV9PVEhFUl9ORVVUUkFMOworICAgIG1fc3RhdHVzLmVvciA9
IFVfT1RIRVJfTkVVVFJBTDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVu
YW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0
ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmVtYmVkKFVDaGFyRGlyZWN0aW9uIGRpciwgUEFM
OjpCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSkKK3sKKyAgICAvLyBJc29sYXRlZCBzcGFucyBj
b21wdXRlIGJhc2UgZGlyZWN0aW9uYWxpdHkgZHVyaW5nIHRoZWlyIG93biBVQkEgcnVuLgorICAg
IC8vIERvIG5vdCBpbnNlcnQgZmFrZSBlbWJlZCBjaGFyYWN0ZXJzIG9uY2Ugd2UgZW50ZXIgYW4g
aXNvbGF0ZWQgc3Bhbi4KKyAgICBBU1NFUlQoIWluSXNvbGF0ZSgpKTsKKworICAgIEFTU0VSVChk
aXIgPT0gVV9QT1BfRElSRUNUSU9OQUxfRk9STUFUIHx8IGRpciA9PSBVX0xFRlRfVE9fUklHSFRf
RU1CRURESU5HIHx8IGRpciA9PSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUgfHwgZGlyID09IFVf
UklHSFRfVE9fTEVGVF9FTUJFRERJTkcgfHwgZGlyID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklE
RSk7CisgICAgbV9jdXJyZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZS5hcHBlbmQoQmlkaUVt
YmVkZGluZyhkaXIsIHNvdXJjZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwg
dHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJh
c2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFp
c2VFbWJlZGRpbmdMZXZlbCgpCit7CisgICAgQVNTRVJUKG1fc3RhdHVzLmVvciAhPSBVX09USEVS
X05FVVRSQUwgfHwgbV9lb3IuYXRFbmQoKSk7CisgICAgQVNTRVJUKG1fc3RhdHVzLmxhc3QgIT0g
VV9ESVJfTk9OX1NQQUNJTkdfTUFSSworICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfQk9V
TkRBUllfTkVVVFJBTAorICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfUklHSFRfVE9fTEVG
VF9FTUJFRERJTkcKKyAgICAgICAgJiYgbV9zdGF0dXMubGFzdCAhPSBVX0xFRlRfVE9fUklHSFRf
RU1CRURESU5HCisgICAgICAgICYmIG1fc3RhdHVzLmxhc3QgIT0gVV9SSUdIVF9UT19MRUZUX09W
RVJSSURFCisgICAgICAgICYmIG1fc3RhdHVzLmxhc3QgIT0gVV9MRUZUX1RPX1JJR0hUX09WRVJS
SURFCisgICAgICAgICYmIG1fc3RhdHVzLmxhc3QgIT0gVV9QT1BfRElSRUNUSU9OQUxfRk9STUFU
KTsKKyAgICBpZiAobV9kaXJlY3Rpb24gPT0gVV9PVEhFUl9ORVVUUkFMKQorICAgICAgICBtX2Rp
cmVjdGlvbiA9IG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUID8gVV9MRUZU
X1RPX1JJR0hUIDogVV9SSUdIVF9UT19MRUZUOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVy
YXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2b2lkIEJpZGlSZXNv
bHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6bG93ZXJFeHBsaWNpdEVtYmVk
ZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20pCit7CisgICAgaWYgKCFtX2VtcHR5UnVuICYm
IG1fZW9yICE9IG1fbGFzdCkgeworICAgICAgICBjaGVja0RpcmVjdGlvbkluTG93ZXJSYWlzZUVt
YmVkZGluZ0xldmVsKCk7CisgICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlk
aS5sYXN0IGVvcjsgbmVlZCB0byBhcHBlbmQgdGhlIGJpZGkuc29yLWJpZGkuZW9yIHJ1biBvciBl
eHRlbmQgaXQgdGhyb3VnaCBiaWRpLmxhc3QKKyAgICAgICAgaWYgKGZyb20gPT0gVV9MRUZUX1RP
X1JJR0hUKSB7CisgICAgICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGku
bGFzdCBMCisgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVS
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RP
X1JJR0hUKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9O
VU1CRVI7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJF
UikgeworICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9BUkFCSUNfTlVNQkVSOworICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1
cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgIGFwcGVu
ZFJ1bigpOworICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9MRUZUX1RPX1JJR0hUOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9Q
RUFOX05VTUJFUiB8fCBtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSIHx8IG1fc3RhdHVz
Lmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUKSB7CisgICAgICAgICAgICBhcHBlbmRSdW4o
KTsKKyAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICB9
CisgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgIH0KKworICAgIGFwcGVuZFJ1bigpOworICAg
IG1fZW1wdHlSdW4gPSB0cnVlOworCisgICAgLy8gc29yIGZvciB0aGUgbmV3IHJ1biBpcyBkZXRl
cm1pbmVkIGJ5IHRoZSBoaWdoZXIgbGV2ZWwgKHJ1bGUgWDEwKQorICAgIHNldExhc3REaXIoZnJv
bSk7CisgICAgc2V0TGFzdFN0cm9uZ0Rpcihmcm9tKTsKKyAgICBtX2VvciA9IEl0ZXJhdG9yKCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1l
IERlcml2ZWRDbGFzcz4KK3ZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJp
dmVkQ2xhc3M+OjpyYWlzZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJv
bSwgVUNoYXJEaXJlY3Rpb24gdG8pCit7CisgICAgaWYgKCFtX2VtcHR5UnVuICYmIG1fZW9yICE9
IG1fbGFzdCkgeworICAgICAgICBjaGVja0RpcmVjdGlvbkluTG93ZXJSYWlzZUVtYmVkZGluZ0xl
dmVsKCk7CisgICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IGVv
cjsgbmVlZCB0byBhcHBlbmQgdGhlIGJpZGkuc29yLWJpZGkuZW9yIHJ1biBvciBleHRlbmQgaXQg
dGhyb3VnaCBiaWRpLmxhc3QKKyAgICAgICAgaWYgKHRvID09IFVfTEVGVF9UT19SSUdIVCkgewor
ICAgICAgICAgICAgLy8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgTAorICAg
ICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgeworICAgICAg
ICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgewor
ICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOworICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsKKyAgICAg
ICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9u
ZyAhPSBVX0xFRlRfVE9fUklHSFQgJiYgZnJvbSA9PSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAg
ICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVf
TEVGVF9UT19SSUdIVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1
cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSCisgICAgICAgICAgICB8fCAobV9zdGF0dXMuZW9yID09
IFVfRVVST1BFQU5fTlVNQkVSICYmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19S
SUdIVCB8fCBmcm9tID09IFVfUklHSFRfVE9fTEVGVCkpCisgICAgICAgICAgICB8fCAobV9zdGF0
dXMuZW9yICE9IFVfRVVST1BFQU5fTlVNQkVSICYmIG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9M
RUZUX1RPX1JJR0hUICYmIGZyb20gPT0gVV9SSUdIVF9UT19MRUZUKSkgeworICAgICAgICAgICAg
YXBwZW5kUnVuKCk7CisgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsK
KyAgICAgICAgfQorICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAgICB9CisKKyAgICBhcHBlbmRS
dW4oKTsKKyAgICBtX2VtcHR5UnVuID0gdHJ1ZTsKKworICAgIHNldExhc3REaXIodG8pOworICAg
IHNldExhc3RTdHJvbmdEaXIodG8pOworICAgIG1fZW9yID0gSXRlcmF0b3IoKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENs
YXNzPgorYm9vbCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46
OmNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCkKK3sKKyAgICAvLyBXaGVuIHdlJ3JlICJpbklzb2xh
dGUoKSIgd2UncmUgcmVzb2x2aW5nIHRoZSBwYXJlbnQgY29udGV4dCB3aGljaAorICAgIC8vIGln
bm9yZXMgKHNraXBzIG92ZXIpIHRoZSBpc29sYXRlZCBjb250ZW50LCBpbmNsdWRpbmcgZW1iZWRk
aW5nIGxldmVscy4KKyAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYWNjcnVlIGVtYmVkZGluZyBsZXZl
bHMgd2hpbGUgc2tpcHBpbmcgb3ZlciBpc29sYXRlZCBjb250ZW50LgorICAgIEFTU0VSVCghaW5J
c29sYXRlKCkgfHwgbV9jdXJyZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZS5pc0VtcHR5KCkp
OworCisgICAgYXV0byBmcm9tTGV2ZWwgPSBjb250ZXh0KCktPmxldmVsKCk7CisgICAgUmVmUHRy
PFBBTDo6QmlkaUNvbnRleHQ+IHRvQ29udGV4dCA9IGNvbnRleHQoKTsKKworICAgIGZvciAoYXV0
byYgZW1iZWRkaW5nIDogbV9jdXJyZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZSkgeworICAg
ICAgICBpZiAoZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnRDb250ZXh0ID0gdG9Db250ZXh0LT5wYXJl
bnQoKSkKKyAgICAgICAgICAgICAgICB0b0NvbnRleHQgPSBwYXJlbnRDb250ZXh0OworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uID0gKGVtYmVk
ZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORyB8fCBlbWJlZGRpbmcu
ZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSkgPyBVX1JJR0hUX1RPX0xFRlQg
OiBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAgICBib29sIG92ZXJyaWRlID0gZW1iZWRkaW5n
LmRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUgfHwgZW1iZWRkaW5nLmRpcmVj
dGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREU7CisgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGxldmVsID0gdG9Db250ZXh0LT5sZXZlbCgpOworICAgICAgICAgICAgaWYgKGRpcmVjdGlv
biA9PSBVX1JJR0hUX1RPX0xFRlQpCisgICAgICAgICAgICAgICAgbGV2ZWwgPSBQQUw6Om5leHRH
cmVhdGVyT2RkTGV2ZWwobGV2ZWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGxldmVsID0gUEFMOjpuZXh0R3JlYXRlckV2ZW5MZXZlbChsZXZlbCk7CisgICAgICAgICAgICBp
ZiAobGV2ZWwgPCA2MSkKKyAgICAgICAgICAgICAgICB0b0NvbnRleHQgPSBQQUw6OkJpZGlDb250
ZXh0OjpjcmVhdGUobGV2ZWwsIGRpcmVjdGlvbiwgb3ZlcnJpZGUsIGVtYmVkZGluZy5zb3VyY2Us
IHRvQ29udGV4dC5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHRvTGV2ZWwg
PSB0b0NvbnRleHQtPmxldmVsKCk7CisKKyAgICBpZiAodG9MZXZlbCA+IGZyb21MZXZlbCkKKyAg
ICAgICAgcmFpc2VFeHBsaWNpdEVtYmVkZGluZ0xldmVsKGZyb21MZXZlbCAlIDIgPyBVX1JJR0hU
X1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQsIHRvTGV2ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZU
IDogVV9MRUZUX1RPX1JJR0hUKTsKKyAgICBlbHNlIGlmICh0b0xldmVsIDwgZnJvbUxldmVsKQor
ICAgICAgICBsb3dlckV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoZnJvbUxldmVsICUgMiA/IFVfUklH
SFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCk7CisKKyAgICBzZXRDb250ZXh0KFdURk1vdmUo
dG9Db250ZXh0KSk7CisKKyAgICBtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlLmNs
ZWFyKCk7CisKKyAgICByZXR1cm4gZnJvbUxldmVsICE9IHRvTGV2ZWw7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4K
K2lubGluZSB2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNz
Pjo6dXBkYXRlU3RhdHVzTGFzdEZyb21DdXJyZW50RGlyZWN0aW9uKFVDaGFyRGlyZWN0aW9uIGRp
ckN1cnJlbnQpCit7CisgICAgc3dpdGNoIChkaXJDdXJyZW50KSB7CisgICAgY2FzZSBVX0VVUk9Q
RUFOX05VTUJFUl9URVJNSU5BVE9SOgorICAgICAgICBpZiAobV9zdGF0dXMubGFzdCAhPSBVX0VV
Uk9QRUFOX05VTUJFUikKKyAgICAgICAgICAgIG1fc3RhdHVzLmxhc3QgPSBVX0VVUk9QRUFOX05V
TUJFUl9URVJNSU5BVE9SOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVfRVVST1BFQU5fTlVN
QkVSX1NFUEFSQVRPUjoKKyAgICBjYXNlIFVfQ09NTU9OX05VTUJFUl9TRVBBUkFUT1I6CisgICAg
Y2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgorICAgIGNhc2UgVV9XSElURV9TUEFDRV9ORVVUUkFM
OgorICAgIGNhc2UgVV9PVEhFUl9ORVVUUkFMOgorICAgICAgICBzd2l0Y2ggKG1fc3RhdHVzLmxh
c3QpIHsKKyAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6CisgICAgICAgIGNhc2UgVV9SSUdI
VF9UT19MRUZUOgorICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6CisgICAgICAg
IGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6CisgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgor
ICAgICAgICAgICAgbV9zdGF0dXMubGFzdCA9IGRpckN1cnJlbnQ7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fc3RhdHVzLmxhc3QgPSBVX09USEVS
X05FVVRSQUw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVX0RJUl9OT05f
U1BBQ0lOR19NQVJLOgorICAgIGNhc2UgVV9CT1VOREFSWV9ORVVUUkFMOgorICAgIGNhc2UgVV9S
SUdIVF9UT19MRUZUX0VNQkVERElORzoKKyAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9FTUJFRERJ
Tkc6CisgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREU6CisgICAgY2FzZSBVX0xFRlRf
VE9fUklHSFRfT1ZFUlJJREU6CisgICAgY2FzZSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQ6Cisg
ICAgICAgIC8vIGlnbm9yZSB0aGVzZQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFVfRVVST1BF
QU5fTlVNQkVSOgorICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBkZWZhdWx0OgorICAgICAgICBt
X3N0YXR1cy5sYXN0ID0gZGlyQ3VycmVudDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KK2lubGluZSB2
b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6cmVvcmRl
clJ1bnNGcm9tTGV2ZWxzKCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGxldmVsTG93ID0gMTI4Owor
ICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWxIaWdoID0gMDsKKyAgICBmb3IgKFJ1biogcnVuID0gbV9y
dW5zLmZpcnN0UnVuKCk7IHJ1bjsgcnVuID0gcnVuLT5uZXh0KCkpIHsKKyAgICAgICAgbGV2ZWxI
aWdoID0gc3RkOjptYXgocnVuLT5sZXZlbCgpLCBsZXZlbEhpZ2gpOworICAgICAgICBsZXZlbExv
dyA9IHN0ZDo6bWluKHJ1bi0+bGV2ZWwoKSwgbGV2ZWxMb3cpOworICAgIH0KKworICAgIC8vIFRo
aXMgaW1wbGVtZW50cyByZW9yZGVyaW5nIG9mIHRoZSBsaW5lIChMMiBhY2NvcmRpbmcgdG8gQmlk
aSBzcGVjKToKKyAgICAvLyBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkvI0wyCisgICAg
Ly8gTDIuIEZyb20gdGhlIGhpZ2hlc3QgbGV2ZWwgZm91bmQgaW4gdGhlIHRleHQgdG8gdGhlIGxv
d2VzdCBvZGQgbGV2ZWwgb24gZWFjaCBsaW5lLAorICAgIC8vIHJldmVyc2UgYW55IGNvbnRpZ3Vv
dXMgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCB0aGF0IGxldmVsIG9yIGhpZ2hl
ci4KKworICAgIC8vIFJldmVyc2luZyBpcyBvbmx5IGRvbmUgdXAgdG8gdGhlIGxvd2VzdCBvZGQg
bGV2ZWwuCisgICAgaWYgKCEobGV2ZWxMb3cgJSAyKSkKKyAgICAgICAgbGV2ZWxMb3crKzsKKwor
ICAgIHVuc2lnbmVkIGNvdW50ID0gbV9ydW5zLnJ1bkNvdW50KCkgLSAxOworCisgICAgd2hpbGUg
KGxldmVsSGlnaCA+PSBsZXZlbExvdykgeworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAg
ICAgUnVuKiBydW4gPSBtX3J1bnMuZmlyc3RSdW4oKTsKKyAgICAgICAgd2hpbGUgKGkgPCBjb3Vu
dCkgeworICAgICAgICAgICAgZm9yICg7aSA8IGNvdW50ICYmIHJ1biAmJiBydW4tPmxldmVsKCkg
PCBsZXZlbEhpZ2g7IGkrKykKKyAgICAgICAgICAgICAgICBydW4gPSBydW4tPm5leHQoKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gaTsKKyAgICAgICAgICAgIGZvciAoO2kgPD0gY291
bnQgJiYgcnVuICYmIHJ1bi0+bGV2ZWwoKSA+PSBsZXZlbEhpZ2g7IGkrKykKKyAgICAgICAgICAg
ICAgICBydW4gPSBydW4tPm5leHQoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IGkgLSAx
OworICAgICAgICAgICAgbV9ydW5zLnJldmVyc2VSdW5zKHN0YXJ0LCBlbmQpOworICAgICAgICB9
CisgICAgICAgIGxldmVsSGlnaC0tOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRl
cmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordm9pZCBCaWRpUmVz
b2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmNyZWF0ZUJpZGlSdW5zRm9y
TGluZShjb25zdCBJdGVyYXRvciYgZW5kLCBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlk
ZSwgYm9vbCBoYXJkTGluZUJyZWFrKQoreworICAgIEFTU0VSVChtX2RpcmVjdGlvbiA9PSBVX09U
SEVSX05FVVRSQUwpOworCisgICAgaWYgKG92ZXJyaWRlICE9IFZpc3VhbERpcmVjdGlvbk92ZXJy
aWRlOjpOb1Zpc3VhbE92ZXJyaWRlKSB7CisgICAgICAgIG1fZW1wdHlSdW4gPSBmYWxzZTsKKyAg
ICAgICAgbV9zb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgIG1fZW9yID0gSXRlcmF0b3IoKTsKKyAg
ICAgICAgd2hpbGUgKG1fY3VycmVudCAhPSBlbmQgJiYgIW1fY3VycmVudC5hdEVuZCgpKSB7Cisg
ICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKKyAgICAgICAgICAgIGluY3JlbWVudCgpOwor
ICAgICAgICB9CisgICAgICAgIG1fZGlyZWN0aW9uID0gb3ZlcnJpZGUgPT0gVmlzdWFsRGlyZWN0
aW9uT3ZlcnJpZGU6OlZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUgPyBVX0xFRlRfVE9fUklHSFQg
OiBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICBtX3J1bnMu
c2V0TG9naWNhbGx5TGFzdFJ1bihtX3J1bnMubGFzdFJ1bigpKTsKKyAgICAgICAgaWYgKG92ZXJy
aWRlID09IFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlOjpWaXN1YWxSaWdodFRvTGVmdE92ZXJyaWRl
ICYmIG1fcnVucy5ydW5Db3VudCgpKQorICAgICAgICAgICAgbV9ydW5zLnJldmVyc2VSdW5zKDAs
IG1fcnVucy5ydW5Db3VudCgpIC0gMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X2VtcHR5UnVuID0gdHJ1ZTsKKworICAgIG1fZW9yID0gSXRlcmF0b3IoKTsKKworICAgIG1fbGFz
dCA9IG1fY3VycmVudDsKKyAgICBib29sIHBhc3RFbmQgPSBmYWxzZTsKKyAgICBCaWRpUmVzb2x2
ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz4gc3RhdGVBdEVuZDsKKworICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIFVDaGFyRGlyZWN0aW9uIGRpckN1cnJlbnQ7CisgICAgICAg
IGlmIChwYXN0RW5kICYmIChoYXJkTGluZUJyZWFrIHx8IG1fY3VycmVudC5hdEVuZCgpKSkgewor
ICAgICAgICAgICAgUEFMOjpCaWRpQ29udGV4dCogYyA9IGNvbnRleHQoKTsKKyAgICAgICAgICAg
IGlmIChoYXJkTGluZUJyZWFrKSB7CisgICAgICAgICAgICAgICAgLy8gQSBkZXZpYXRpb24gZnJv
bSB0aGUgVW5pY29kZSBCaWRpIEFsZ29yaXRobSBpbiBvcmRlciB0byBtYXRjaAorICAgICAgICAg
ICAgICAgIC8vIFdpbklFIGFuZCB1c2VyIGV4cGVjdGF0aW9uczogaGFyZCBsaW5lIGJyZWFrcyBy
ZXNldCBiaWRpIHN0YXRlCisgICAgICAgICAgICAgICAgLy8gY29taW5nIGZyb20gdW5pY29kZSBi
aWRpIGNvbnRyb2wgY2hhcmFjdGVycywgYnV0IG5vdCB0aG9zZSBmcm9tCisgICAgICAgICAgICAg
ICAgLy8gRE9NIG5vZGVzIHdpdGggc3BlY2lmaWVkIGRpcmVjdGlvbmFsaXR5CisgICAgICAgICAg
ICAgICAgc3RhdGVBdEVuZC5zZXRDb250ZXh0KGMtPmNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVt
YmVkZGluZ0NvbnRleHRzKCkpOworCisgICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IHN0YXRl
QXRFbmQuY29udGV4dCgpLT5kaXIoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldEVv
ckRpcihkaXJDdXJyZW50KTsKKyAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldExhc3REaXIo
ZGlyQ3VycmVudCk7CisgICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5zZXRMYXN0U3Ryb25nRGly
KGRpckN1cnJlbnQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aGls
ZSAoYy0+cGFyZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGMgPSBjLT5wYXJlbnQoKTsKKyAg
ICAgICAgICAgICAgICBkaXJDdXJyZW50ID0gYy0+ZGlyKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkaXJDdXJyZW50ID0gbV9jdXJyZW50LmRpcmVjdGlv
bigpOworICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+b3ZlcnJpZGUoKQorICAgICAgICAgICAg
ICAgICYmIGRpckN1cnJlbnQgIT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORworICAgICAgICAg
ICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORworICAgICAg
ICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFCisgICAg
ICAgICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUKKyAg
ICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCkK
KyAgICAgICAgICAgICAgICBkaXJDdXJyZW50ID0gY29udGV4dCgpLT5kaXIoKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGRpckN1cnJlbnQgPT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFSSykKKyAgICAg
ICAgICAgICAgICBkaXJDdXJyZW50ID0gbV9zdGF0dXMubGFzdDsKKyAgICAgICAgfQorCisjaWYg
UExBVEZPUk0oV0lOKQorICAgICAgICAvLyBPdXIgV2luZG93cyBidWlsZCBoYXNuJ3QgdXBkYXRl
ZCBpdHMgaGVhZGVycyBmcm9tIElDVSA2LjEsIHdoaWNoIGRvZXNuJ3QgaGF2ZSB0aGVzZSBzeW1i
b2xzLgorICAgICAgICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX0ZJUlNUX1NUUk9OR19JU09MQVRF
ID0gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KDE5KTsKKyAgICAgICAgY29uc3QgVUNoYXJE
aXJlY3Rpb24gVV9MRUZUX1RPX1JJR0hUX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVj
dGlvbj4oMjApOworICAgICAgICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX1JJR0hUX1RPX0xFRlRf
SVNPTEFURSA9IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPigyMSk7CisgICAgICAgIGNvbnN0
IFVDaGFyRGlyZWN0aW9uIFVfUE9QX0RJUkVDVElPTkFMX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxV
Q2hhckRpcmVjdGlvbj4oMjIpOworI2VuZGlmCisgICAgICAgIC8vIFdlIGlnbm9yZSBhbGwgY2hh
cmFjdGVyIGRpcmVjdGlvbmFsaXR5IHdoaWxlIGluIHVuaWNvZGUtYmlkaTogaXNvbGF0ZSBzcGFu
cy4KKyAgICAgICAgLy8gV2UnbGwgaGFuZGxlIG9yZGVyaW5nIHRoZSBpc29sYXRlZCBjaGFyYWN0
ZXJzIGluIGEgc2Vjb25kIHBhc3MuCisgICAgICAgIGlmIChpbklzb2xhdGUoKSB8fCBkaXJDdXJy
ZW50ID09IFVfRklSU1RfU1RST05HX0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBVX0xFRlRfVE9f
UklHSFRfSVNPTEFURSB8fCBkaXJDdXJyZW50ID09IFVfUklHSFRfVE9fTEVGVF9JU09MQVRFIHx8
IGRpckN1cnJlbnQgPT0gVV9QT1BfRElSRUNUSU9OQUxfSVNPTEFURSkKKyAgICAgICAgICAgIGRp
ckN1cnJlbnQgPSBVX09USEVSX05FVVRSQUw7CisKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzLmVv
ciAhPSBVX09USEVSX05FVVRSQUwgfHwgbV9lb3IuYXRFbmQoKSk7CisgICAgICAgIHN3aXRjaCAo
ZGlyQ3VycmVudCkgeworCisgICAgICAgIC8vIGVtYmVkZGluZyBhbmQgb3ZlcnJpZGVzIChYMS1Y
OSBpbiB0aGUgQmlkaSBzcGVjcykKKyAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURE
SU5HOgorICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkc6CisgICAgICAgIGNh
c2UgVV9SSUdIVF9UT19MRUZUX09WRVJSSURFOgorICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdI
VF9PVkVSUklERToKKyAgICAgICAgY2FzZSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQ6CisgICAg
ICAgICAgICBlbWJlZChkaXJDdXJyZW50LCBQQUw6OkZyb21Vbmljb2RlKTsKKyAgICAgICAgICAg
IGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAvLyBzdHJvbmcgdHlwZXMKKyAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6CisgICAgICAg
ICAgICBzd2l0Y2ggKG1fc3RhdHVzLmxhc3QpIHsKKyAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9U
T19MRUZUOgorICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgorICAgICAg
ICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNf
TlVNQkVSOgorICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0ICE9IFVfRVVST1BFQU5f
TlVNQkVSIHx8IG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUKQorICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6CisgICAgICAgICAgICBj
YXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAgICBjYXNlIFVfQ09N
TU9OX05VTUJFUl9TRVBBUkFUT1I6CisgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJB
TDoKKyAgICAgICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6CisgICAgICAgICAgICBjYXNl
IFVfU0VHTUVOVF9TRVBBUkFUT1I6CisgICAgICAgICAgICBjYXNlIFVfV0hJVEVfU1BBQ0VfTkVV
VFJBTDoKKyAgICAgICAgICAgIGNhc2UgVV9PVEhFUl9ORVVUUkFMOgorICAgICAgICAgICAgICAg
IGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbnVtYmVycyBuZWVkIHRvIGJlIG9uIGEgaGlnaGVy
IGVtYmVkZGluZyBsZXZlbCwgc28gbGV0J3MgY2xvc2UgdGhhdCBydW4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0KCktPmRpcigpICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRoZSBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uLCB3aGlj
aCBpcyBSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gQXJhYmljIG51bWJlcnMgYXJlIGFsd2F5cyBvbiBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2
ZWwsIHNvIGxldCdzIGNsb3NlIHRoYXQgcnVuCisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0
aW9uID0gVV9BUkFCSUNfTlVNQkVSOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+ZGlyKCkgIT0gVV9MRUZUX1RPX1JJ
R0hUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV1dHJhbHMgdGFrZSB0aGUg
ZW1iZWRkaW5nIGRpcmVjdGlvbiwgd2hpY2ggaXMgUgorICAgICAgICAgICAgICAgICAgICAgICAg
bV9lb3IgPSBtX2xhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVf
UklHSFRfVE9fTEVGVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5s
YXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICAvLyBs
YXN0IHN0dWZmIHRha2VzIGVtYmVkZGluZyBkaXIKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQoKS0+ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2VvciA9IG1fbGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9u
ID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKKyAgICAgICAgICAgIG1f
c3RhdHVzLmVvciA9IFVfTEVGVF9UT19SSUdIVDsKKyAgICAgICAgICAgIG1fc3RhdHVzLmxhc3RT
dHJvbmcgPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfTEVG
VF9UT19SSUdIVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfUklHSFRfVE9f
TEVGVF9BUkFCSUM6CisgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUOgorICAgICAgICAgICAg
c3dpdGNoIChtX3N0YXR1cy5sYXN0KSB7CisgICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdI
VDoKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6CisgICAgICAgICAgICBjYXNl
IFVfQVJBQklDX05VTUJFUjoKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAg
ICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUOgor
ICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6Cisg
ICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAg
ICBjYXNlIFVfQ09NTU9OX05VTUJFUl9TRVBBUkFUT1I6CisgICAgICAgICAgICBjYXNlIFVfQk9V
TkRBUllfTkVVVFJBTDoKKyAgICAgICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6CisgICAg
ICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6CisgICAgICAgICAgICBjYXNlIFVfV0hJ
VEVfU1BBQ0VfTkVVVFJBTDoKKyAgICAgICAgICAgIGNhc2UgVV9PVEhFUl9ORVVUUkFMOgorICAg
ICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJ
R0hUICYmIGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9MRUZUX1RPX1JJR0hUKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1
bigpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklD
X05VTUJFUikKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9MRUZUX1RPX1JJR0hU
KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7CisgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKKyAgICAgICAgICAgIG1f
c3RhdHVzLmVvciA9IFVfUklHSFRfVE9fTEVGVDsKKyAgICAgICAgICAgIG1fc3RhdHVzLmxhc3RT
dHJvbmcgPSBkaXJDdXJyZW50OworICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RP
X0xFRlQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gd2VhayB0eXBlczoK
KworICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgorICAgICAgICAgICAgaWYgKG1fc3Rh
dHVzLmxhc3RTdHJvbmcgIT0gVV9SSUdIVF9UT19MRUZUX0FSQUJJQykgeworICAgICAgICAgICAg
ICAgIC8vIGlmIGxhc3Qgc3Ryb25nIHdhcyBBTCBjaGFuZ2UgRU4gdG8gQU4KKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG1fc3RhdHVzLmxhc3QpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFVfRVVS
T1BFQU5fTlVNQkVSOgorICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9f
TEVGVDoKKyAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6CisgICAg
ICAgICAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6CisgICAgICAgICAgICAgICAgICAgIG1f
ZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0VVUk9QRUFOX05VTUJFUjsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9T
RVBBUkFUT1I6CisgICAgICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9S
OgorICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVN
QkVSKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IEZBTExUSFJPVUdIOworICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVS
TUlOQVRPUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoKKyAgICAg
ICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAgICAgICAgICAgIGNhc2Ug
VV9TRUdNRU5UX1NFUEFSQVRPUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfV0hJVEVfU1BBQ0Vf
TkVVVFJBTDoKKyAgICAgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9SSUdIVF9U
T19MRUZUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRU5zIG9uIGJvdGggc2lk
ZXMgYmVoYXZlIGxpa2UgUnMsIHNvIHRoZSBuZXV0cmFscyBzaG91bGQgYmUgUi4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUZXJtaW5hdGUgdGhlIEVOIHJ1bi4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBNYWtlIGFuIFIgcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0g
bV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SID8gbV9sYXN0QmVm
b3JlRVQgOiBtX2xhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24g
PSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVnaW4gYSBuZXcgRU4gcnVuLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1C
RVI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGVybWluYXRlIHRoZSBBTiBydW4uCisgICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0
U3Ryb25nID09IFVfUklHSFRfVE9fTEVGVCB8fCBjb250ZXh0KCktPmRpcigpID09IFVfUklHSFRf
VE9fTEVGVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgYW4gUiBydW4u
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX3N0YXR1cy5sYXN0ID09IFVf
RVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IgPyBtX2xhc3RCZWZvcmVFVCA6IG1fbGFzdDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBCZWdpbiBhIG5ldyBFTiBydW4uCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0VVUk9QRUFOX05VTUJFUjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5sYXN0
U3Ryb25nID09IFVfUklHSFRfVE9fTEVGVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RXh0ZW5kIHRoZSBSIHJ1biB0byBpbmNsdWRlIHRoZSBuZXV0cmFscy4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9URVJN
SU5BVE9SID8gbV9sYXN0QmVmb3JlRVQgOiBtX2xhc3Q7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVnaW4gYSBuZXcgRU4g
cnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0VVUk9QRUFOX05V
TUJFUjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7CisgICAg
ICAgICAgICAgICAgbV9zdGF0dXMuZW9yID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAg
ICAgICAgaWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKKyAgICAgICAgICAgICAg
ICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgY2Fz
ZSBVX0FSQUJJQ19OVU1CRVI6CisgICAgICAgICAgICBkaXJDdXJyZW50ID0gVV9BUkFCSUNfTlVN
QkVSOworICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1cy5sYXN0KSB7CisgICAgICAgICAgICBj
YXNlIFVfTEVGVF9UT19SSUdIVDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dCgpLT5kaXIo
KSA9PSBVX0xFRlRfVE9fUklHSFQpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVG
VDoKKyAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJQzoKKyAgICAgICAgICAg
IGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6CisgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7
CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFVfQ09NTU9OX05VTUJFUl9TRVBBUkFUT1I6CisgICAgICAgICAgICAg
ICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICAgICAgY2Fz
ZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6CisgICAgICAgICAgICBjYXNlIFVfRVVST1BF
QU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJB
TDoKKyAgICAgICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6CisgICAgICAgICAgICBjYXNl
IFVfU0VHTUVOVF9TRVBBUkFUT1I6CisgICAgICAgICAgICBjYXNlIFVfV0hJVEVfU1BBQ0VfTkVV
VFJBTDoKKyAgICAgICAgICAgIGNhc2UgVV9PVEhFUl9ORVVUUkFMOgorICAgICAgICAgICAgICAg
IGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSCisgICAgICAgICAgICAgICAgICAg
IHx8IChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgKG1fc3RhdHVzLmxhc3RT
dHJvbmcgPT0gVV9SSUdIVF9UT19MRUZUIHx8IGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9SSUdIVF9U
T19MRUZUKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciAhPSBVX0VVUk9Q
RUFOX05VTUJFUiAmJiBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBj
b250ZXh0KCktPmRpcigpID09IFVfUklHSFRfVE9fTEVGVCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGVybWluYXRlIHRoZSBydW4gYmVmb3JlIHRoZSBuZXV0cmFscy4KKyAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgIC8vIEJlZ2luIGFuIFIg
cnVuIGZvciB0aGUgbmV1dHJhbHMuCisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0g
VV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kaXJlY3Rpb24g
PT0gVV9PVEhFUl9ORVVUUkFMKQorICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IG1f
c3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUID8gVV9MRUZUX1RPX1JJR0hUIDog
VV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fZW9yID0gbV9jdXJyZW50OworICAgICAgICAgICAgbV9zdGF0dXMuZW9yID0gVV9B
UkFCSUNfTlVNQkVSOworICAgICAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVV
VFJBTCkKKyAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRP
UjoKKyAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUjoKKyAgICAg
ICAgICAgIGlmIChtX3N0YXR1cy5sYXN0ID09IFVfRVVST1BFQU5fTlVNQkVSKSB7CisgICAgICAg
ICAgICAgICAgZGlyQ3VycmVudCA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAg
IG1fZW9yID0gbV9jdXJyZW50OworICAgICAgICAgICAgICAgIG1fc3RhdHVzLmVvciA9IGRpckN1
cnJlbnQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmxhc3QgIT0gVV9FVVJPUEVB
Tl9OVU1CRVJfVEVSTUlOQVRPUikKKyAgICAgICAgICAgICAgICBtX2xhc3RCZWZvcmVFVCA9IG1f
ZW1wdHlSdW4gPyBtX2VvciA6IG1fbGFzdDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IC8vIGJvdW5kYXJ5IG5ldXRyYWxzIHNob3VsZCBiZSBpZ25vcmVkCisgICAgICAgIGNhc2UgVV9C
T1VOREFSWV9ORVVUUkFMOgorICAgICAgICAgICAgaWYgKG1fZW9yID09IG1fbGFzdCkKKyAgICAg
ICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgLy8gbmV1dHJhbHMKKyAgICAgICAgY2FzZSBVX0JMT0NLX1NFUEFSQVRPUjoKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvIHdlIGRvIHdpdGggbmV3bGluZSBhbmQgcGFyYWdyYXBo
IHNlcGFyYXRvcnMgdGhhdCBjb21lIHRvIGhlcmU/CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgorICAgICAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBydWxlIEwxLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVV9XSElURV9T
UEFDRV9ORVVUUkFMOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVV9PVEhFUl9O
RVVUUkFMOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXN0RW5kICYmIChtX2VvciA9PSBt
X2N1cnJlbnQgfHwgIW5lZWRzQ29udGludWVQYXN0RW5kKCkpKSB7CisgICAgICAgICAgICBpZiAo
IW1fcmVhY2hlZEVuZE9mTGluZSkgeworICAgICAgICAgICAgICAgIG1fZW9yID0gZW5kT2ZMaW5l
OworICAgICAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMuZW9yKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6CisgICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RP
X0xFRlQ6CisgICAgICAgICAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6CisgICAgICAgICAg
ICAgICAgICAgIG1fZGlyZWN0aW9uID0gbV9zdGF0dXMuZW9yOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgorICAgICAg
ICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZU
X1RPX1JJR0hUID8gVV9MRUZUX1RPX1JJR0hUIDogVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbmV1dHJhbHMgaW4gdGhpcyBjYXNlLiBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDgxNworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2N1cnJlbnQgPSBlbmQ7CisgICAg
ICAgICAgICBtX3N0YXR1cyA9IHN0YXRlQXRFbmQubV9zdGF0dXM7CisgICAgICAgICAgICBtX3Nv
ciA9IHN0YXRlQXRFbmQubV9zb3I7CisgICAgICAgICAgICBtX2VvciA9IHN0YXRlQXRFbmQubV9l
b3I7CisgICAgICAgICAgICBtX2xhc3QgPSBzdGF0ZUF0RW5kLm1fbGFzdDsKKyAgICAgICAgICAg
IG1fcmVhY2hlZEVuZE9mTGluZSA9IHN0YXRlQXRFbmQubV9yZWFjaGVkRW5kT2ZMaW5lOworICAg
ICAgICAgICAgbV9sYXN0QmVmb3JlRVQgPSBzdGF0ZUF0RW5kLm1fbGFzdEJlZm9yZUVUOworICAg
ICAgICAgICAgbV9lbXB0eVJ1biA9IHN0YXRlQXRFbmQubV9lbXB0eVJ1bjsKKyAgICAgICAgICAg
IG1fZGlyZWN0aW9uID0gVV9PVEhFUl9ORVVUUkFMOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICB1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rpb24oZGly
Q3VycmVudCk7CisgICAgICAgIG1fbGFzdCA9IG1fY3VycmVudDsKKworICAgICAgICBpZiAobV9l
bXB0eVJ1bikgeworICAgICAgICAgICAgbV9zb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAgICBt
X2VtcHR5UnVuID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpbmNyZW1lbnQoKTsKKyAg
ICAgICAgaWYgKCFtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgYm9vbCBjb21taXR0ZWQgPSBjb21taXRFeHBsaWNpdEVtYmVkZGluZygp
OworICAgICAgICAgICAgaWYgKGNvbW1pdHRlZCAmJiBwYXN0RW5kKSB7CisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50ID0gZW5kOworICAgICAgICAgICAgICAgIG1fc3RhdHVzID0gc3RhdGVBdEVu
ZC5tX3N0YXR1czsKKyAgICAgICAgICAgICAgICBtX3NvciA9IHN0YXRlQXRFbmQubV9zb3I7Cisg
ICAgICAgICAgICAgICAgbV9lb3IgPSBzdGF0ZUF0RW5kLm1fZW9yOworICAgICAgICAgICAgICAg
IG1fbGFzdCA9IHN0YXRlQXRFbmQubV9sYXN0OworICAgICAgICAgICAgICAgIG1fcmVhY2hlZEVu
ZE9mTGluZSA9IHN0YXRlQXRFbmQubV9yZWFjaGVkRW5kT2ZMaW5lOworICAgICAgICAgICAgICAg
IG1fbGFzdEJlZm9yZUVUID0gc3RhdGVBdEVuZC5tX2xhc3RCZWZvcmVFVDsKKyAgICAgICAgICAg
ICAgICBtX2VtcHR5UnVuID0gc3RhdGVBdEVuZC5tX2VtcHR5UnVuOworICAgICAgICAgICAgICAg
IG1fZGlyZWN0aW9uID0gVV9PVEhFUl9ORVVUUkFMOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwYXN0RW5kICYmIChtX2N1
cnJlbnQgPT0gZW5kIHx8IG1fY3VycmVudC5hdEVuZCgpKSkgeworICAgICAgICAgICAgaWYgKG1f
ZW1wdHlSdW4pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBzdGF0ZUF0RW5k
Lm1fc3RhdHVzID0gbV9zdGF0dXM7CisgICAgICAgICAgICBzdGF0ZUF0RW5kLm1fc29yID0gbV9z
b3I7CisgICAgICAgICAgICBzdGF0ZUF0RW5kLm1fZW9yID0gbV9lb3I7CisgICAgICAgICAgICBz
dGF0ZUF0RW5kLm1fbGFzdCA9IG1fbGFzdDsKKyAgICAgICAgICAgIHN0YXRlQXRFbmQubV9yZWFj
aGVkRW5kT2ZMaW5lID0gbV9yZWFjaGVkRW5kT2ZMaW5lOworICAgICAgICAgICAgc3RhdGVBdEVu
ZC5tX2xhc3RCZWZvcmVFVCA9IG1fbGFzdEJlZm9yZUVUOworICAgICAgICAgICAgc3RhdGVBdEVu
ZC5tX2VtcHR5UnVuID0gbV9lbXB0eVJ1bjsKKyAgICAgICAgICAgIGVuZE9mTGluZSA9IG1fbGFz
dDsKKyAgICAgICAgICAgIHBhc3RFbmQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
bV9ydW5zLnNldExvZ2ljYWxseUxhc3RSdW4obV9ydW5zLmxhc3RSdW4oKSk7CisgICAgcmVvcmRl
clJ1bnNGcm9tTGV2ZWxzKCk7CisgICAgZW5kT2ZMaW5lID0gSXRlcmF0b3IoKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENs
YXNzPgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46
OnNldFdoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYgcnVu
LCBzaXplX3QgdHJhbnNpdGlvbikKK3sKKyAgICBBU1NFUlQoIW1fd2hpdGVzcGFjZUNvbGxhcHNp
bmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4uY29udGFpbnMoJnJ1bikpOworICAgIG1fd2hpdGVz
cGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4uYWRkKCZydW4sIHRyYW5zaXRp
b24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBl
bmFtZSBEZXJpdmVkQ2xhc3M+Cit1bnNpZ25lZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBS
dW4sIERlcml2ZWRDbGFzcz46OndoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xh
dGVkUnVuKFJ1biYgcnVuKQoreworICAgIHJldHVybiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nVHJh
bnNpdGlvbkZvcklzb2xhdGVkUnVuLnRha2UoJnJ1bik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBB
TApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlSdW5MaXN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaVJ1bkxpc3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
ZTQ0ODY5ZDljNWQ1ZGVmNmFkNmJkYTAxZGUxNTQxYjM4NDg5NmMzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlSdW5MaXN0LmgKQEAgLTAsMCArMSwy
MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodCByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
CituYW1lc3BhY2UgUEFMIHsKKwordGVtcGxhdGUgPGNsYXNzIFJ1bj4KK2NsYXNzIEJpZGlSdW5M
aXN0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCaWRpUnVuTGlzdCk7CitwdWJsaWM6Cisg
ICAgQmlkaVJ1bkxpc3QoKQorICAgICAgICA6IG1fbGFzdFJ1bihudWxscHRyKQorICAgICAgICAs
IG1fbG9naWNhbGx5TGFzdFJ1bihudWxscHRyKQorICAgICAgICAsIG1fcnVuQ291bnQoMCkKKyAg
ICB7CisgICAgfQorCisgICAgLy8gRklYTUU6IE9uY2UgQmlkaVJlc29sdmVyIG5vIGxvbmdlciBv
d25zIHRoZSBCaWRpUnVuTGlzdCwKKyAgICAvLyB0aGVuIH5CaWRpUnVuTGlzdCBzaG91bGQgY2Fs
bCBkZWxldGVSdW5zKCkgYXV0b21hdGljYWxseS4KKworICAgIFJ1biogZmlyc3RSdW4oKSBjb25z
dCB7IHJldHVybiBtX2ZpcnN0UnVuLmdldCgpOyB9CisgICAgUnVuKiBsYXN0UnVuKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXN0UnVuOyB9CisgICAgUnVuKiBsb2dpY2FsbHlMYXN0UnVuKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2dpY2FsbHlMYXN0UnVuOyB9CisgICAgdW5zaWduZWQgcnVuQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX3J1bkNvdW50OyB9CisKKyAgICB2b2lkIGFwcGVuZFJ1bihzdGQ6OnVu
aXF1ZV9wdHI8UnVuPiYmKTsKKyAgICB2b2lkIHByZXBlbmRSdW4oc3RkOjp1bmlxdWVfcHRyPFJ1
bj4mJik7CisKKyAgICB2b2lkIG1vdmVSdW5Ub0VuZChSdW4qKTsKKyAgICB2b2lkIG1vdmVSdW5U
b0JlZ2lubmluZyhSdW4qKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHJldmVyc2VS
dW5zKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpOworICAgIHZvaWQgcmVvcmRlclJ1bnNG
cm9tTGV2ZWxzKCk7CisKKyAgICB2b2lkIHNldExvZ2ljYWxseUxhc3RSdW4oUnVuKiBydW4pIHsg
bV9sb2dpY2FsbHlMYXN0UnVuID0gcnVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VSdW5XaXRoUnVu
cyhSdW4qIHRvUmVwbGFjZSwgQmlkaVJ1bkxpc3Q8UnVuPiYgbmV3UnVucyk7CisKK3ByaXZhdGU6
CisKKyAgICAvLyBUaGUgcnVucyBmb3JtIGEgc2luZ2x5LWxpbmtlZC1saXN0LCB3aGVyZSB0aGUg
bGlua3MgKFJ1bjo6bV9uZXh0KSBpbXBseSBvd25lcnNoaXAgKGFuZCBhcmUgb2YgdHlwZSBzdGQ6
OnVuaXF1ZV9wdHIpLgorICAgIC8vIFRoZSByYXcgcG9pbnRlcnMgYmVsb3cgcG9pbnQgaW50byB0
aGUgc2luZ2x5LWxpbmtlZC1saXN0LgorICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IG1fZmlyc3RS
dW47IC8vIFRoZSBoZWFkIG9mIHRoZSBsaXN0CisgICAgUnVuKiBtX2xhc3RSdW47CisgICAgUnVu
KiBtX2xvZ2ljYWxseUxhc3RSdW47CisgICAgdW5zaWduZWQgbV9ydW5Db3VudDsKK307CisKK3Rl
bXBsYXRlIDxjbGFzcyBSdW4+CitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+OjphcHBlbmRS
dW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJiBydW4pCit7CisgICAgaWYgKCFtX2ZpcnN0UnVuKSB7
CisgICAgICAgIG1fZmlyc3RSdW4gPSBXVEZNb3ZlKHJ1bik7CisgICAgICAgIG1fbGFzdFJ1biA9
IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9sYXN0UnVuLT5zZXRO
ZXh0KFdURk1vdmUocnVuKSk7CisgICAgICAgIG1fbGFzdFJ1biA9IG1fbGFzdFJ1bi0+bmV4dCgp
OworICAgIH0KKyAgICBtX3J1bkNvdW50Kys7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Citp
bmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+OjpwcmVwZW5kUnVuKHN0ZDo6dW5pcXVlX3B0cjxS
dW4+JiYgcnVuKQoreworICAgIEFTU0VSVCghcnVuLT5uZXh0KCkpOworCisgICAgaWYgKCFtX2xh
c3RSdW4pCisgICAgICAgIG1fbGFzdFJ1biA9IHJ1bi5nZXQoKTsKKyAgICBlbHNlCisgICAgICAg
IHJ1bi0+c2V0TmV4dChXVEZNb3ZlKG1fZmlyc3RSdW4pKTsKKyAgICBtX2ZpcnN0UnVuID0gV1RG
TW92ZShydW4pOworICAgIG1fcnVuQ291bnQrKzsKK30KKwordGVtcGxhdGUgPGNsYXNzIFJ1bj4K
K2lubGluZSB2b2lkIEJpZGlSdW5MaXN0PFJ1bj46Om1vdmVSdW5Ub0VuZChSdW4qIHJ1bikKK3sK
KyAgICBBU1NFUlQobV9maXJzdFJ1bik7CisgICAgQVNTRVJUKG1fbGFzdFJ1bik7CisgICAgQVNT
RVJUKHJ1bi0+bmV4dCgpKTsKKworICAgIFJ1biogcHJldmlvdXMgPSBudWxscHRyOworICAgIFJ1
biogY3VycmVudCA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgd2hpbGUgKGN1cnJlbnQgIT0gcnVu
KSB7CisgICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKKyAgICAgICAgY3VycmVudCA9IHByZXZp
b3VzLT5uZXh0KCk7CisgICAgfQorCisgICAgaWYgKCFwcmV2aW91cykgeworICAgICAgICBBU1NF
UlQobV9maXJzdFJ1bi5nZXQoKSA9PSBydW4pOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVu
PiBvcmlnaW5hbEZpcnN0UnVuID0gV1RGTW92ZShtX2ZpcnN0UnVuKTsKKyAgICAgICAgbV9maXJz
dFJ1biA9IG9yaWdpbmFsRmlyc3RSdW4tPnRha2VOZXh0KCk7CisgICAgICAgIG1fbGFzdFJ1bi0+
c2V0TmV4dChXVEZNb3ZlKG9yaWdpbmFsRmlyc3RSdW4pKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91cy0+dGFrZU5leHQoKTsKKyAg
ICAgICAgcHJldmlvdXMtPnNldE5leHQoY3VycmVudC0+dGFrZU5leHQoKSk7CisgICAgICAgIG1f
bGFzdFJ1bi0+c2V0TmV4dChXVEZNb3ZlKHRhcmdldCkpOworICAgIH0KK30KKwordGVtcGxhdGUg
PGNsYXNzIFJ1bj4KK2lubGluZSB2b2lkIEJpZGlSdW5MaXN0PFJ1bj46Om1vdmVSdW5Ub0JlZ2lu
bmluZyhSdW4qIHJ1bikKK3sKKyAgICBBU1NFUlQobV9maXJzdFJ1bik7CisgICAgQVNTRVJUKG1f
bGFzdFJ1bik7CisgICAgQVNTRVJUKHJ1biAhPSBtX2ZpcnN0UnVuLmdldCgpKTsKKworICAgIFJ1
biogcHJldmlvdXMgPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIFJ1biogY3VycmVudCA9IHByZXZp
b3VzLT5uZXh0KCk7CisgICAgd2hpbGUgKGN1cnJlbnQgIT0gcnVuKSB7CisgICAgICAgIHByZXZp
b3VzID0gY3VycmVudDsKKyAgICAgICAgY3VycmVudCA9IHByZXZpb3VzLT5uZXh0KCk7CisgICAg
fQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXMtPnRha2VOZXh0
KCk7CisgICAgcHJldmlvdXMtPnNldE5leHQocnVuLT50YWtlTmV4dCgpKTsKKyAgICBpZiAocnVu
ID09IG1fbGFzdFJ1bikKKyAgICAgICAgbV9sYXN0UnVuID0gcHJldmlvdXM7CisKKyAgICB0YXJn
ZXQtPnNldE5leHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7CisgICAgbV9maXJzdFJ1biA9IFdURk1v
dmUodGFyZ2V0KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFJ1bj4KK3ZvaWQgQmlkaVJ1bkxpc3Q8
UnVuPjo6cmVwbGFjZVJ1bldpdGhSdW5zKFJ1biogdG9SZXBsYWNlLCBCaWRpUnVuTGlzdDxSdW4+
JiBuZXdSdW5zKQoreworICAgIEFTU0VSVChuZXdSdW5zLnJ1bkNvdW50KCkpOworICAgIEFTU0VS
VChtX2ZpcnN0UnVuKTsKKyAgICBBU1NFUlQodG9SZXBsYWNlKTsKKworICAgIG1fcnVuQ291bnQg
Kz0gbmV3UnVucy5ydW5Db3VudCgpIC0gMTsgLy8gV2UgYXJlIGFkZGluZyB0aGUgbmV3IHJ1bnMg
YW5kIHJlbW92aW5nIHRvUmVwbGFjZS4KKworICAgIC8vIEZpeCB1cCBhbnkgcG9pbnRlcnMgd2hp
Y2ggbWF5IGVuZCB1cCBzdGFsZS4KKyAgICBpZiAobV9sYXN0UnVuID09IHRvUmVwbGFjZSkKKyAg
ICAgICAgbV9sYXN0UnVuID0gbmV3UnVucy5sYXN0UnVuKCk7CisgICAgaWYgKG1fbG9naWNhbGx5
TGFzdFJ1biA9PSB0b1JlcGxhY2UpCisgICAgICAgIG1fbG9naWNhbGx5TGFzdFJ1biA9IG5ld1J1
bnMubG9naWNhbGx5TGFzdFJ1bigpOworCisgICAgaWYgKG1fZmlyc3RSdW4uZ2V0KCkgPT0gdG9S
ZXBsYWNlKSB7CisgICAgICAgIG5ld1J1bnMubV9sYXN0UnVuLT5zZXROZXh0KG1fZmlyc3RSdW4t
PnRha2VOZXh0KCkpOworICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShuZXdSdW5zLm1fZmly
c3RSdW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZpbmQgdGhlIHJ1biBqdXN0IGJlZm9y
ZSAidG9SZXBsYWNlIiBpbiB0aGUgbGlzdCBvZiBydW5zLgorICAgICAgICBSdW4qIHByZXZpb3Vz
UnVuID0gbV9maXJzdFJ1bi5nZXQoKTsKKyAgICAgICAgd2hpbGUgKHByZXZpb3VzUnVuLT5uZXh0
KCkgIT0gdG9SZXBsYWNlKQorICAgICAgICAgICAgcHJldmlvdXNSdW4gPSBwcmV2aW91c1J1bi0+
bmV4dCgpOworICAgICAgICBBU1NFUlQocHJldmlvdXNSdW4pOworCisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxSdW4+IHRhcmdldCA9IHByZXZpb3VzUnVuLT50YWtlTmV4dCgpOworICAgICAgICBw
cmV2aW91c1J1bi0+c2V0TmV4dChXVEZNb3ZlKG5ld1J1bnMubV9maXJzdFJ1bikpOworICAgICAg
ICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0TmV4dCh0YXJnZXQtPnRha2VOZXh0KCkpOworICAgIH0K
KworICAgIG5ld1J1bnMuY2xlYXIoKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFJ1bj4KK3ZvaWQg
QmlkaVJ1bkxpc3Q8UnVuPjo6Y2xlYXIoKQoreworICAgIG1fZmlyc3RSdW4gPSBudWxscHRyOwor
ICAgIG1fbGFzdFJ1biA9IG51bGxwdHI7CisgICAgbV9sb2dpY2FsbHlMYXN0UnVuID0gbnVsbHB0
cjsKKyAgICBtX3J1bkNvdW50ID0gMDsKK30KKwordGVtcGxhdGUgPGNsYXNzIFJ1bj4KK3ZvaWQg
QmlkaVJ1bkxpc3Q8UnVuPjo6cmV2ZXJzZVJ1bnModW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVu
ZCkKK3sKKyAgICBpZiAoc3RhcnQgPj0gZW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBSRUxF
QVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGVuZCA8IG1fcnVuQ291bnQpOwor
CisgICAgLy8gR2V0IHRoZSBpdGVtIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIHJ1bnMgdG8gcmV2
ZXJzZSBhbmQgcHV0IGl0IGluCisgICAgLy8gfGJlZm9yZVN0YXJ0fC4gfGN1cnJ8IHNob3VsZCBw
b2ludCB0byB0aGUgZmlyc3QgcnVuIHRvIHJldmVyc2UuCisgICAgUnVuKiBjdXJyID0gbV9maXJz
dFJ1bi5nZXQoKTsKKyAgICBSdW4qIGJlZm9yZVN0YXJ0ID0gbnVsbHB0cjsKKyAgICB1bnNpZ25l
ZCBpID0gMDsKKyAgICBmb3IgKDsgaSA8IHN0YXJ0OyArK2kpIHsKKyAgICAgICAgYmVmb3JlU3Rh
cnQgPSBjdXJyOworICAgICAgICBjdXJyID0gY3Vyci0+bmV4dCgpOworICAgIH0KKyAgICBSdW4q
IHN0YXJ0UnVuID0gY3VycjsKKworICAgIGZvciAoOyBpIDwgZW5kOyArK2kpCisgICAgICAgIGN1
cnIgPSBjdXJyLT5uZXh0KCk7CisKKyAgICBpZiAoIWN1cnItPm5leHQoKSkKKyAgICAgICAgbV9s
YXN0UnVuID0gc3RhcnRSdW47CisKKyAgICAvLyBTdGFuZGFyZCAic2xpZGluZyB3aW5kb3ciIG9m
IDMgcG9pbnRlcnMKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBwcmV2aW91cyA9IGN1cnItPnRh
a2VOZXh0KCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gY3VycmVudCA9IGJlZm9yZVN0YXJ0
ID8gYmVmb3JlU3RhcnQtPnRha2VOZXh0KCkgOiBXVEZNb3ZlKG1fZmlyc3RSdW4pOworICAgIHdo
aWxlIChjdXJyZW50KSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IG5leHQgPSBjdXJy
ZW50LT50YWtlTmV4dCgpOworICAgICAgICBjdXJyZW50LT5zZXROZXh0KFdURk1vdmUocHJldmlv
dXMpKTsKKyAgICAgICAgcHJldmlvdXMgPSBXVEZNb3ZlKGN1cnJlbnQpOworICAgICAgICBjdXJy
ZW50ID0gV1RGTW92ZShuZXh0KTsKKyAgICB9CisKKyAgICBpZiAoYmVmb3JlU3RhcnQpCisgICAg
ICAgIGJlZm9yZVN0YXJ0LT5zZXROZXh0KFdURk1vdmUocHJldmlvdXMpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fZmlyc3RSdW4gPSBXVEZNb3ZlKHByZXZpb3VzKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVGV4dERpcmVj
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1RleHREaXJlY3Rpb24uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43ZWMxY2YzYjVjZTdlMjEzMjhlYTJmNTU1YWEwNzVjYTI0YTc3ZThhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1RleHREaXJlY3Rpb24uaApA
QCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBQ
QUwgeworCitlbnVtIGNsYXNzIFRleHREaXJlY3Rpb24gOiBib29sIHsgTFRSLCBSVEwgfTsKKwor
aW5saW5lIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bikKK3sKKyAgICByZXR1cm4gZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVW5pY29kZUJp
ZGkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9Vbmljb2RlQmlkaS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmMzNThlMWQ5MmNlMTkwZmViNzZiMTA4NWY0ZWYwZTQxMzZhYmQwY2QKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVW5pY29kZUJpZGkuaApAQCAtMCww
ICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dCByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBQQUwgeworCitlbnVtIGNsYXNzIEVVbmljb2RlQmlk
aSB7CisgICAgVUJOb3JtYWwsCisgICAgRW1iZWQsCisgICAgT3ZlcnJpZGUsCisgICAgSXNvbGF0
ZSwKKyAgICBQbGFpbnRleHQsCisgICAgSXNvbGF0ZU92ZXJyaWRlLAorfTsKKworaW5saW5lIGJv
b2wgaXNJc29sYXRlZChjb25zdCBFVW5pY29kZUJpZGkmIHVuaWNvZGVCaWRpKQoreworICAgIHJl
dHVybiB1bmljb2RlQmlkaSA9PSBFVW5pY29kZUJpZGk6Oklzb2xhdGUKKyAgICAgICAgfHwgdW5p
Y29kZUJpZGkgPT0gRVVuaWNvZGVCaWRpOjpJc29sYXRlT3ZlcnJpZGUKKyAgICAgICAgfHwgdW5p
Y29kZUJpZGkgPT0gRVVuaWNvZGVCaWRpOjpQbGFpbnRleHQ7Cit9CisKK2lubGluZSBib29sIGlz
T3ZlcnJpZGUoRVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpKQoreworICAgIHJldHVybiB1bmljb2Rl
QmlkaSA9PSBFVW5pY29kZUJpZGk6Ok92ZXJyaWRlCisgICAgICAgIHx8IHVuaWNvZGVCaWRpID09
IEVVbmljb2RlQmlkaTo6SXNvbGF0ZU92ZXJyaWRlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvaW9zL1RleHRFbmNvZGluZ1JlZ2lzdHJ5SU9TLm1tIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L2lvcy9UZXh0RW5jb2RpbmdSZWdpc3RyeUlPUy5t
bQppbmRleCAyYWFhNjhkN2NjYzU4ZDUxMmI3Zjk5NzMzYzJjY2FlYTJlYjNiYTMyLi40ZjRiNTNm
NGVhMWM2NWQxZTk3M2U4NTUzZGRlYTAyOGNmMmRiOWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvaW9zL1RleHRFbmNvZGluZ1JlZ2lzdHJ5SU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9pb3MvVGV4dEVuY29kaW5nUmVnaXN0cnlJT1MubW0K
QEAgLTY4LDYgKzY4LDYgQEAgQ0ZTdHJpbmdFbmNvZGluZyB3ZWJEZWZhdWx0Q0ZTdHJpbmdFbmNv
ZGluZygpCiAgICAgcmV0dXJuIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xOwogfQogCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBQQUwKIAogI2VuZGlmIC8vIFBMQVRG
T1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQv
bWFjL1RleHRFbmNvZGluZ1JlZ2lzdHJ5TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90
ZXh0L21hYy9UZXh0RW5jb2RpbmdSZWdpc3RyeU1hYy5tbQppbmRleCAzMDVmNDAzNWYwNGNlZjFi
ZTEzNGJlNzlmZDlmN2JhYmZkYTIzY2MwLi45NDQ2MzQxNzQ0MGExM2UxNjVlZmNhNjQ3MDAyNzIw
ODlkNzU1ZDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvbWFjL1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4
dC9tYWMvVGV4dEVuY29kaW5nUmVnaXN0cnlNYWMubW0KQEAgLTU0LDYgKzU0LDYgQEAgQ0ZTdHJp
bmdFbmNvZGluZyB3ZWJEZWZhdWx0Q0ZTdHJpbmdFbmNvZGluZygpCiAgICAgcmV0dXJuIGVuY29k
aW5nOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBQQUwKIAog
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYmQ1YTc0NzljYjM5ZTQ2
Y2M5MTA0MDBmNGVlMzg0OTMyNGM3NTMxZi4uMzc1ZjhjMWM3YWQ1MDE2OWIyYzg4M2Y0YmM4YWY3
MWVjOTIyYTFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIyNDgsNyArMjI0OCw2IEBAIHBsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5j
cHAKIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZS5jcHAKIHBsYXRm
b3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5jcHAKLXBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQu
Y3BwCiBwbGF0Zm9ybS90ZXh0L0RhdGVUaW1lRm9ybWF0LmNwcAogcGxhdGZvcm0vdGV4dC9Mb2Nh
bGVUb1NjcmlwdE1hcHBpbmcuY3BwCiBwbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGI2NjJiMDg3ZTcyZWRlNmVjN2M5MzVkZmE0N2YwN2UwZGM0ZDA3NmYuLjgxOWI4Y2E0NmZm
NzVmMzkwNTUzOWUwYTQwNzQ1OTYyZTFjZTFkN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM2MjcsNyArMzYyNyw2IEBACiAJ
CUE4NEQ4MkMxMTFEMzQ3NDgwMDk3Mjk5MCAvKiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NEQ4MkJGMTFE
MzQ3NDgwMDk3Mjk5MCAvKiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCAqLzsgfTsKIAkJQTg0
RUJEODMwQ0I4Qzk3NzAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NEVCRDgxMENCOEM5NzcwMDA3OTYw
OSAvKiBKU1N0eWxlU2hlZXRMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTg1MzEyM0QxMUQwNDcxQjAwRDREMDc3IC8qIEZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTg1MzEyM0MxMUQwNDcxQjAwRDREMDc3IC8qIEZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUE4NjNFMjAxMTM0MzQxMjAwMDI3NDkyNiAvKiBVbmljb2RlQmlkaS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2M0UyMDAxMzQzNDEyMDAwMjc0
OTI2IC8qIFVuaWNvZGVCaWRpLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQTg2NjI5Q0YwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2NjI5QzkwOURB
MkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovOyB9OwogCQlBODY2MjlEMTA5REEyQjQ4MDA5
NjMzQTUgLyogSlNNb3VzZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODY2MjlDQjA5REEyQjQ3MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50Lmgg
Ki87IH07CiAJCUE4NjYyOUQzMDlEQTJCNDgwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjYyOUNEMDlE
QTJCNDcwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuaCAqLzsgfTsKQEAgLTM2NjgsNyArMzY2
Nyw2IEBACiAJCUE4OTk0MzI4MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg5OTQzMjYwQjQyMzM4
NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTg5Q0NDNTMwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VO
b2RlV2l0aFNwYW5Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODlDQ0M1MTBGNDRFOTgxMDBCNURBMTAgLyogUmVwbGFjZU5vZGVXaXRoU3Bh
bkNvbW1hbmQuaCAqLzsgfTsKIAkJQThDMjI4QTExMUQ1NzIyRTAwRDVBN0QzIC8qIERlY29kZWRE
YXRhRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QzIyODlGMTFENTcyMkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50
UGFyc2VyLmggKi87IH07Ci0JCUE4QzQwMjkzMTM0OEIyMjIwMDYzRjFFNSAvKiBCaWRpUnVuTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDNDAy
OTIxMzQ4QjIyMjAwNjNGMUU1IC8qIEJpZGlSdW5MaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQThDNEE3RkQwOUQ1NjMyNzAwMDNBQzhEIC8q
IFN0eWxlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QzRBN0VCMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQThDNEE4MDcwOUQ1
NjMyNzAwMDNBQzhEIC8qIEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4QzRBN0Y1MDlENTYzMjcwMDAzQUM4RCAvKiBFbGVtZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQThDNEE4MEIw
OUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHJpYnV0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThDNEE3RjkwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHJpYnV0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0z
OTE3LDggKzM5MTUsNiBAQAogCQlCMkExRjJCMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHTWlzc2lu
Z0dseXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJBMUYyQTgwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdHbHlwaEVsZW1lbnQu
aCAqLzsgfTsKIAkJQjJBRkZDN0UwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
QUZGQzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJCMUY3MTcwRDAw
Q0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJCMUY3MTUwRDAwQ0FBODAwNEFFQTY0IC8q
IFBvaW50ZXJFdmVudHNIaXRSdWxlcy5oICovOyB9OwotCQlCMkMzREEyNDBEMDA2QzFEMDBFRjZG
MjYgLyogQmlkaUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyQzNEOUYzMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4dC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyQzNEQTI1MEQw
MDZDMUQwMEVGNkYyNiAvKiBCaWRpUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQzNEOUY0MEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpUmVz
b2x2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzRDlGRjBEMDA2QzFEMDBF
RjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBMzQwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCb3Vu
ZGFyaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkMzREEwNDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJvdW5kYXJpZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkMzREE0NTBEMDA2QzFEMDBF
RjZGMjYgLyogVGV4dEZsYWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMkMzREExNTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEZsYWdzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQxNDQsNyArNDE0
MCw2IEBACiAJCUJDNEE1MzM1MjU2MDVBNTYwMDI4QzU5MiAvKiBEYXRhRGV0ZWN0b3JUeXBlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzRBNTMzNDI1
NjA1QTU2MDAyOEM1OTIgLyogRGF0YURldGVjdG9yVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNEE1MzM3MjU2MDVBRTEwMDI4QzU5MiAv
KiBTdG9yYWdlQmxvY2tpbmdQb2xpY3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDNEE1MzM2MjU2MDVBRTEwMDI4QzU5MiAvKiBTdG9yYWdlQmxvY2tp
bmdQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlCQzRBNTMzOTI1NjA2Mzk4MDAyOEM1OTIgLyogRm9udFJlbmRlcmluZ01vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNEE1MzM4MjU2MDYz
OTgwMDI4QzU5MiAvKiBGb250UmVuZGVyaW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDNEE1MzNCMjU2MDY0RTEwMDI4QzU5MiAvKiBU
ZXh0RGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzRBNTMzQTI1NjA2NEUxMDAyOEM1OTIgLyogVGV4dERpcmVjdGlvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNERERDk2MjczRDk0
OTkwMDY2MEVCQiAvKiBTY2VuZUtpdE1vZGVsUGxheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzREREQ4RjI3M0Q4NEU3MDA2NjBFQkIgLyogU2Nl
bmVLaXRNb2RlbFBsYXllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUJDNERERDk3MjczRDk0QTgwMDY2MEVCQiAvKiBTY2VuZUtpdE1vZGVsTG9h
ZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzREREQ5MTI3M0Q4NEU3MDA2NjBFQkIgLyogU2NlbmVLaXRNb2RlbExvYWRlckNsaWVudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNTEx
NTZFMTJCMTc0OUMwMEM5Njc1NCAvKiBTY3JvbGxBbmltYXRvck1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTExNTZEMTJCMTc0OUMwMEM5Njc1
NCAvKiBTY3JvbGxBbmltYXRvck1hYy5tbSAqLzsgfTsKQEAgLTE0MDY1LDcgKzE0MDYwLDYgQEAK
IAkJQTg1MzEyM0MxMUQwNDcxQjAwRDREMDc3IC8qIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg1RDdBMkYwODc5RUJB
OTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBRdWFy
dHpDb3JlLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1F1YXJ0
ekNvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlBODVGMjIw
ODE0MzAzNzdEMDA3Q0M4ODQgLyogSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4NjNFMjAwMTM0MzQxMjAwMDI3NDkyNiAvKiBV
bmljb2RlQmlkaS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmljb2RlQmlk
aS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODY2MjlDOTA5REEyQjQ3MDA5NjMz
QTUgLyogSlNVSUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VJ
RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg2NjI5Q0EwOURBMkI0NzAw
OTYzM0E1IC8qIEpTVUlFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNVSUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg2NjI5
Q0IwOURBMkI0NzAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNNb3VzZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNDE0Nyw3ICsxNDE0MSw2IEBACiAJCUE4QzIyODBEMTFENEE1OTcwMEQ1QTdEMyAvKiBE
b2N1bWVudFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
b2N1bWVudFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzIyODlG
MTFENTcyMkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDMjI4QTAxMUQ1NzIyRTAwRDVBN0QzIC8qIERl
Y29kZWREYXRhRG9jdW1lbnRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUE4QzQwMjkyMTM0OEIyMjIwMDYzRjFFNSAvKiBCaWRpUnVuTGlzdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpUnVuTGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVkRWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEM0QTdFQzA5RDU2MzI3MDAwM0FDOEQg
LyogU3R5bGVkRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3R5bGVkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzRB
N0VFMDlENTYzMjcwMDAzQUM4RCAvKiBOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0
Nzk2LDkgKzE0Nzg5LDYgQEAKIAkJQjJBRkZDOEMwRDAwQTVERjAwMzAwNzREIC8qIFRleHRCb3Vu
ZGFyaWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRC
b3VuZGFyaWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkIxRjcxNDBEMDBD
QUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkIxRjcxNTBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2lu
dGVyRXZlbnRzSGl0UnVsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0Q5
RjIwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBCaWRpQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUIyQzNEOUYzMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmlkaUNvbnRleHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQjJDM0Q5RjQwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlSZXNvbHZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmlkaVJlc29sdmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNEOUZFMEQwMDZDMUQwMEVGNkYyNiAvKiBT
ZWdtZW50ZWRTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNlZ21lbnRlZFN0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzNE
OUZGMEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlZ21lbnRlZFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkMzREEwNDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJvdW5kYXJpZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTIzNSw3ICsxNTIyNSw2IEBACiAJCUJDNEE1MzM0
MjU2MDVBNTYwMDI4QzU5MiAvKiBEYXRhRGV0ZWN0b3JUeXBlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERh
dGFEZXRlY3RvclR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0QTUzMzYy
NTYwNUFFMTAwMjhDNTkyIC8qIFN0b3JhZ2VCbG9ja2luZ1BvbGljeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdG9yYWdlQmxvY2tpbmdQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkM0QTUzMzgyNTYwNjM5ODAwMjhDNTkyIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvbnRSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUJDNEE1MzNBMjU2MDY0RTEwMDI4QzU5MiAvKiBUZXh0RGlyZWN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRleHREaXJlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0RERE
OEIyNzNEODRFNzAwNjYwRUJCIC8qIFNjZW5lS2l0TW9kZWxMb2FkZXJVU0QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2NlbmVLaXRNb2RlbExvYWRlclVTRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzREREQ4QzI3M0Q4NEU3MDA2NjBFQkIgLyogU2NlbmVLaXRNb2RlbExvYWRlckNsaWVu
dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjZW5lS2l0TW9kZWxMb2FkZXJDbGllbnQubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNERERDhEMjczRDg0RTcwMDY2MEVCQiAv
KiBTY2VuZUtpdE1vZGVsUGxheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2NlbmVLaXRN
b2RlbFBsYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4OTczLDEwICsy
ODk2Miw2IEBACiAJCQkJQjJCMjY0NTkwRDAwQTc3RTAwMEFDQzFEIC8qIGNmICovLAogCQkJCTFD
MTY1RTRGMjNFQ0Y1NUUwMEIwRkNGQiAvKiBjb2NvYSAqLywKIAkJCQlCMkMzRDlGOTBEMDA2QzFE
MDBFRjZGMjYgLyogbWFjICovLAotCQkJCUIyQzNEOUYyMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRp
Q29udGV4dC5jcHAgKi8sCi0JCQkJQjJDM0Q5RjMwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250
ZXh0LmggKi8sCi0JCQkJQjJDM0Q5RjQwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlSZXNvbHZlci5o
ICovLAotCQkJCUE4QzQwMjkyMTM0OEIyMjIwMDYzRjFFNSAvKiBCaWRpUnVuTGlzdC5oICovLAog
CQkJCUM1NTkyRjc3MUE5MkFBMjgwMDFGODg2MiAvKiBDaGFyYWN0ZXJQcm9wZXJ0aWVzLmggKi8s
CiAJCQkJMEZEQTdDMjAxODgzMkJDQzAwQzk1NEI1IC8qIERhdGVUaW1lRm9ybWF0LmNwcCAqLywK
IAkJCQk0NTNFQjYzNTE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCAqLywKQEAg
LTI4OTk2LDEzICsyODk4MSwxMSBAQAogCQkJCUIyQzNEQTA0MEQwMDZDMUQwMEVGNkYyNiAvKiBU
ZXh0Qm91bmRhcmllcy5oICovLAogCQkJCUE3MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0
Q2hlY2tlckNsaWVudC5oICovLAogCQkJCUE3N0QwMDExMTMzQjBBRUIwMEQ2NjU4QyAvKiBUZXh0
Q2hlY2tpbmcuaCAqLywKLQkJCQlCQzRBNTMzQTI1NjA2NEUxMDAyOEM1OTIgLyogVGV4dERpcmVj
dGlvbi5oICovLAogCQkJCUMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdE
ZXRlY3Rvci5oICovLAogCQkJCUMxMDVEQTYxMEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0RW5jb2Rp
bmdEZXRlY3RvcklDVS5jcHAgKi8sCiAJCQkJQjJDM0RBMTgwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCAqLywKIAkJCQlCMkMzREExOTBEMDA2QzFEMDBFRjZGMjYg
LyogVGV4dEVuY29kaW5nUmVnaXN0cnkuaCAqLywKIAkJCQlCMkMzREExNTBEMDA2QzFEMDBFRjZG
MjYgLyogVGV4dEZsYWdzLmggKi8sCi0JCQkJQTg2M0UyMDAxMzQzNDEyMDAwMjc0OTI2IC8qIFVu
aWNvZGVCaWRpLmggKi8sCiAJCQkJMTQ0NzZBQTcxNURDNEJCMTAwMzA1REIyIC8qIFdyaXRpbmdN
b2RlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHRleHQ7CkBAIC0zMzQ2OSwxMCArMzM0NTIsNyBA
QAogCQkJCUJDOTQ2MkQ4MTA3QTdCNEMwMDg1NzE5MyAvKiBCZWZvcmVMb2FkRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFCMjNBMzI4MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwMzFCM0QwQTQ0RUZDNzAwRjk5MkUw
IC8qIEJlZm9yZVVubG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMkMzREEyNDBEMDA2
QzFEMDBFRjZGMjYgLyogQmlkaUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyQzNEQTI1
MEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RTc4OTg2MTEyMEU3QTYwMDYwRUNFNSAvKiBCaWRpUnVuLmggaW4gSGVhZGVycyAqLywKLQkJCQlB
OEM0MDI5MzEzNDhCMjIyMDA2M0YxRTUgLyogQmlkaVJ1bkxpc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJERDg3MTRCMjY1RjQzNjYwMDVGOTk3QyAvKiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjA4RDEyQjAyNkY3MDBDMUEzNTkgLyogQmlxdWFk
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAyNTEyQjAyNjc2MDBDMUEzNTkgLyogQmlxdWFk
RFNQS2VybmVsLmggaW4gSGVhZGVycyAqLywKQEAgLTM0NTA4LDYgKzM0NDg4LDcgQEAKIAkJCQlC
QzUzQzVGNTBEQTU2QjkyMDAyMUVCNUQgLyogR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMjI3OTY0MEQwMEJGMjIwMDcxQjc4MiAvKiBHcmFkaWVudEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMTlDREY0Mjc3MTA2MzkwMDUzRjczNCAvKiBHcmFkaWVudENvbG9yU3Rv
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMxOUNFMkIyNzcyQkY3QjAwNTNGNzM0IC8qIEdyYWRp
ZW50Q29sb3JTdG9wcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ0ODFGMDQxNDZCNUM2QjAwQUE3
ODM0IC8qIEdyYWRpZW50SW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTlDREYyMjc2RkZD
NkQwMDUzRjczNCAvKiBHcmFkaWVudFJlbmRlcmVyQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTdC
QjY4MEJBMjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0NoZWNrc01hYy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNzQ5Nyw3ICszNzQ3OCw2IEBACiAJCQkJMTQyQjk3Q0ExMzEzODk0MzAwOEJFRjRC
IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgyREUz
MjUxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUM3M0E3MTUyMTg1NzU4NzAwNENDRUE1IC8qIFRleHREZWNvcmF0aW9uVGhpY2tu
ZXNzLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzRBNTMzQjI1NjA2NEUxMDAyOEM1OTIgLyogVGV4
dERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0QTUzMjUyNTYwNTU1RjAwMjhDNTky
IC8qIFRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QkM4NEI0MTIzNzExODAwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3QkM4NDg0MTIzNkZEOTMwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnRQYXJz
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzc1NzMsNyArMzc1NTMsNiBAQAogCQkJCUJFOTEzRDgw
MTgxRUY5MjQwMERDQjA5RSAvKiBUcmFja1ByaXZhdGVCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDRDFGOUIxQzI3MDI0QkMyMDA2MTdFQjYgLyogVHJhY2tQcml2YXRlQmFzZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkZBQzMwRkUxODRGQjE0NTAwOEM0RjFFIC8qIFRyYWlsaW5nT2Jq
ZWN0cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxOUNFMkIyNzcyQkY3QjAwNTNGNzM0IC8qIEdy
YWRpZW50Q29sb3JTdG9wcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MDcxMzIxQkQ4MzA4QjAw
REJDNEYyIC8qIFRyYW5zYWN0aW9uT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNF
RUY0MTI1Nzk5RkQ5MDA2NTYzQkIgLyogVHJhbnNmZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDlFOTExQzQwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTM3NjAyLDcgKzM3NTgxLDYgQEAKIAkJCQkyRUNEQkFEODIxRDg5
MDYzMDBGMDBFQ0QgLyogVW5kb0l0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTJFQ0RCQUQxMjFE
ODkwMzQwMEYwMEVDRCAvKiBVbmRvTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUIyRDhB
NzkxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggaW4gSGVhZGVycyAqLywKLQkJCQlBODYz
RTIwMTEzNDM0MTIwMDAyNzQ5MjYgLyogVW5pY29kZUJpZGkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxODg2NEUxMUJCQUY1NzQwMEU1NDBDOSAvKiBVbmlxdWVJREJEYXRhYmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE5OEY3QTUxQkJEQjc5MzAwRTJDQzVGIC8qIFVuaXF1ZUlEQkRhdGFiYXNl
Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE5OEY3QTkxQkJERDM4NTAwRTJDQzVG
IC8qIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKaW5kZXggODQ3ZGUxNmRiNjIzMDE4OGYxYmI4N2VlMzJiMjY3MzFmNGU4Mzlk
Ni4uNTk1MzhjMDg0OTEzMDJlOWYyODA2MGUxOWE1N2Y3ZDE2ZTk1MTg3NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCkBAIC05MjQsNyArOTI0LDcgQEAgUGF0aCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjplbGVtZW50UGF0aCgpIGNvbnN0CiAKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcGF0aCBv
bmx5IGlmIHRoaXMgaXMgdGhlIGxhc3QgcGFydCBvZiBhIGxpbmUgZm9sbG93ZWQgYnkgdGhlIGJl
Z2lubmluZyBvZiB0aGUgbmV4dCBsaW5lLgogICAgICAgICBjb25zdCBhdXRvJiBzdHlsZSA9IG1f
cmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAgIGJvb2wgcmlnaHRUb0xlZnRUZXh0ID0gc3R5bGUu
ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMOworICAgICAgICBib29sIHJpZ2h0VG9M
ZWZ0VGV4dCA9IHN0eWxlLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOwog
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHhUb2xlcmFuY2UgPSA1OwogICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHlUb2xlcmFuY2UgPSA1OwogICAgICAgICBib29sIG5lZWRzUGF0aCA9IGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKaW5k
ZXggYTllNTY2MzI1YzhhZTY4MDRkMGY1NzUzYmM5NGQ0YTkxZWUzODQ2ZC4uMjFiOWJlMWI4MGMz
ZTkzYzMwYjcyMWZiOWVhMzgzMDRkY2FkNzIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCkBAIC00Myw4ICs0Myw4IEBACiAjaW5jbHVkZSAi
VGV4dEZsYWdzLmgiCiAjaW5jbHVkZSAiVGhlbWVUeXBlcy5oIgogI2luY2x1ZGUgIlRvdWNoQWN0
aW9uLmgiCi0jaW5jbHVkZSAiVW5pY29kZUJpZGkuaCIKICNpbmNsdWRlICJXcml0aW5nTW9kZS5o
IgorI2luY2x1ZGUgPHBhbC90ZXh0L1VuaWNvZGVCaWRpLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKQEAgLTI2MTMsNTggKzI2MTMs
NTggQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFRleHRU
cmFuc2Zvcm0oKSBjb25zdAogICAgIHJldHVybiBUZXh0VHJhbnNmb3JtOjpOb25lOwogfQogCi10
ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoRVVu
aWNvZGVCaWRpIGUpCit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJp
bWl0aXZlVmFsdWUoUEFMOjpFVW5pY29kZUJpZGkgZSkKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2
ZUNsYXNzKQogewogICAgIHNldFByaW1pdGl2ZVVuaXRUeXBlKENTU1VuaXRUeXBlOjpDU1NfVkFM
VUVfSUQpOwogICAgIHN3aXRjaCAoZSkgewotICAgIGNhc2UgVUJOb3JtYWw6CisgICAgY2FzZSBQ
QUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWw6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENT
U1ZhbHVlTm9ybWFsOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEVtYmVkOgorICAgIGNhc2Ug
UEFMOjpFVW5pY29kZUJpZGk6OkVtYmVkOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NW
YWx1ZUVtYmVkOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIE92ZXJyaWRlOgorICAgIGNhc2Ug
UEFMOjpFVW5pY29kZUJpZGk6Ok92ZXJyaWRlOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBD
U1NWYWx1ZUJpZGlPdmVycmlkZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJc29sYXRlOgor
ICAgIGNhc2UgUEFMOjpFVW5pY29kZUJpZGk6Oklzb2xhdGU6CiAgICAgICAgIG1fdmFsdWUudmFs
dWVJRCA9IENTU1ZhbHVlSXNvbGF0ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJc29sYXRl
T3ZlcnJpZGU6CisgICAgY2FzZSBQQUw6OkVVbmljb2RlQmlkaTo6SXNvbGF0ZU92ZXJyaWRlOgog
ICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUlzb2xhdGVPdmVycmlkZTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQbGFpbnRleHQ6CisgICAgY2FzZSBQQUw6OkVVbmljb2RlQmlk
aTo6UGxhaW50ZXh0OgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZVBsYWludGV4
dDsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6b3BlcmF0b3IgRVVuaWNvZGVCaWRpKCkgY29uc3QKK3RlbXBsYXRlPD4gaW5s
aW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6OkVVbmljb2RlQmlkaSgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGlzVmFsdWVJRCgpKTsKIAogICAgIHN3aXRjaCAobV92YWx1ZS52YWx1
ZUlEKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgcmV0dXJuIFVCTm9ybWFs
OworICAgICAgICByZXR1cm4gUEFMOjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsOwogICAgIGNhc2Ug
Q1NTVmFsdWVFbWJlZDoKLSAgICAgICAgcmV0dXJuIEVtYmVkOworICAgICAgICByZXR1cm4gUEFM
OjpFVW5pY29kZUJpZGk6OkVtYmVkOwogICAgIGNhc2UgQ1NTVmFsdWVCaWRpT3ZlcnJpZGU6Ci0g
ICAgICAgIHJldHVybiBPdmVycmlkZTsKKyAgICAgICAgcmV0dXJuIFBBTDo6RVVuaWNvZGVCaWRp
OjpPdmVycmlkZTsKICAgICBjYXNlIENTU1ZhbHVlSXNvbGF0ZToKICAgICBjYXNlIENTU1ZhbHVl
V2Via2l0SXNvbGF0ZToKLSAgICAgICAgcmV0dXJuIElzb2xhdGU7CisgICAgICAgIHJldHVybiBQ
QUw6OkVVbmljb2RlQmlkaTo6SXNvbGF0ZTsKICAgICBjYXNlIENTU1ZhbHVlSXNvbGF0ZU92ZXJy
aWRlOgogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRJc29sYXRlT3ZlcnJpZGU6Ci0gICAgICAgIHJl
dHVybiBJc29sYXRlT3ZlcnJpZGU7CisgICAgICAgIHJldHVybiBQQUw6OkVVbmljb2RlQmlkaTo6
SXNvbGF0ZU92ZXJyaWRlOwogICAgIGNhc2UgQ1NTVmFsdWVQbGFpbnRleHQ6CiAgICAgY2FzZSBD
U1NWYWx1ZVdlYmtpdFBsYWludGV4dDoKLSAgICAgICAgcmV0dXJuIFBsYWludGV4dDsKKyAgICAg
ICAgcmV0dXJuIFBBTDo6RVVuaWNvZGVCaWRpOjpQbGFpbnRleHQ7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIFVCTm9ybWFsOworICAgIHJldHVybiBQQUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWw7CiB9
CiAKIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1
ZShVc2VyRHJhZyBlKQpAQCAtMzAxNiwzNSArMzAxNiwzNSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBD
U1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgT3ZlcmZsb3dXcmFwKCkgY29uc3QKICAgICByZXR1
cm4gT3ZlcmZsb3dXcmFwOjpOb3JtYWw7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShUZXh0RGlyZWN0aW9uIGUpCit0ZW1wbGF0ZTw+
IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUEFMOjpUZXh0RGly
ZWN0aW9uIGUpCiAgICAgOiBDU1NWYWx1ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmlt
aXRpdmVVbml0VHlwZShDU1NVbml0VHlwZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKGUp
IHsKLSAgICBjYXNlIFRleHREaXJlY3Rpb246OkxUUjoKKyAgICBjYXNlIFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUx0cjsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0RGlyZWN0aW9uOjpSVEw6CisgICAgY2FzZSBQQUw6OlRl
eHREaXJlY3Rpb246OlJUTDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVSdGw7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0
aXZlVmFsdWU6Om9wZXJhdG9yIFRleHREaXJlY3Rpb24oKSBjb25zdAordGVtcGxhdGU8PiBpbmxp
bmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6VGV4dERpcmVjdGlvbigpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGlzVmFsdWVJRCgpKTsKIAogICAgIHN3aXRjaCAobV92YWx1ZS52YWx1
ZUlEKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUx0cjoKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rp
b246OkxUUjsKKyAgICAgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIGNh
c2UgQ1NTVmFsdWVSdGw6Ci0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAg
ICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
VGV4dERpcmVjdGlvbjo6TFRSOworICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsK
IH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZh
bHVlKFdyaXRpbmdNb2RlIGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5oCmluZGV4IGJiMDdmNzdl
YTZmZjU4N2QwNDBkNzcwOWYwMzEzNzQ5YjgwM2Q0ODQuLjIyOGRkYmMzMDFhNzAwY2I1MTdhNTc3
ZGE5YjBmZDljNjc4MmM2NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9w
ZXJ0eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5oCkBAIC03Niw3ICs3
Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd3JhcFZhbHVlSW5Db21tYVNlcGFyYXRlZExpc3Qo
KTsKIAotICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUlEIHJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQsIFRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlKTsKKyAgICBzdGF0
aWMgQ1NTUHJvcGVydHlJRCByZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlELCBQQUw6OlRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBp
c0luaGVyaXRlZFByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwogICAgIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBhbGlhc2VzRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAgICAgc3RhdGljIGJvb2wg
aXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsIGIvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9w
LnBsCmluZGV4IGY5NDE5MTc0ZjVhMDllNWQwZmE5ZmU1ZDZkZTZlYmFjNTA0MmJiODAuLjMwNjE5
NDFjMWYzMjNmMGYxMTY2NzUxNWFmMWZjMTdhNTM4MWRmNjUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3Au
cGwKQEAgLTcxNSw3ICs3MTUsNyBAQCBwcmludCBHUEVSRiA8PCAiRU9GIjsKICAgICB9CiB9CiAK
LUNTU1Byb3BlcnR5SUQgQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlKQorQ1NTUHJvcGVydHlJRCBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURp
cmVjdGlvbkF3YXJlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBQQUw6OlRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICBjb25z
dCBUZXh0RmxvdyYgdGV4dGZsb3cgPSBtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlv
bik7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRl
eCA0MmRhY2QyZGQ1Y2UzZTVmNjIzMzNhMjE2MmNjMzc2NzQ2ZThmYjg5Li4zOGE2MTk3YTdmOWFh
OTU1YjY2MmU3NDdjZjllMDA2MjgwZjdjYmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAg
LTE3NTQsNyArMTc1NCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVRpdGxlRnJvbVRpdGxlRWxl
bWVudCgpCiAgICAgICAgIHVwZGF0ZVRpdGxlKGRvd25jYXN0PEhUTUxUaXRsZUVsZW1lbnQ+KCpt
X3RpdGxlRWxlbWVudCkudGV4dFdpdGhEaXJlY3Rpb24oKSk7CiAgICAgZWxzZSBpZiAoaXM8U1ZH
VGl0bGVFbGVtZW50PigqbV90aXRsZUVsZW1lbnQpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBEb2Vz
IHRoZSBTVkcgdGl0bGUgZWxlbWVudCBoYXZlIGEgdGV4dCBkaXJlY3Rpb24/Ci0gICAgICAgIHVw
ZGF0ZVRpdGxlKHsgZG93bmNhc3Q8U1ZHVGl0bGVFbGVtZW50PigqbV90aXRsZUVsZW1lbnQpLnRl
eHRDb250ZW50KCksIFRleHREaXJlY3Rpb246OkxUUiB9KTsKKyAgICAgICAgdXBkYXRlVGl0bGUo
eyBkb3duY2FzdDxTVkdUaXRsZUVsZW1lbnQ+KCptX3RpdGxlRWxlbWVudCkudGV4dENvbnRlbnQo
KSwgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcAppbmRleCA5YTUxMmVmZTdjOWMwMWVmODIwMTJjYjQzZjliNjExNTU4OTY3YTJhLi45
NmFkNmMyOWM5MDRiNTA3NTk2ODY2MjkwNWNjNTFlZDg5YzMxYjE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5jcHAKQEAgLTEyMDEsNyArMTIwMSw3IEBAIHN0YXRpYyBQb3NpdGlvbiB1cHN0cmVhbUln
bm9yaW5nRWRpdGluZ0JvdW5kYXJpZXMoUG9zaXRpb24gcG9zaXRpb24pCiAgICAgcmV0dXJuIHBv
c2l0aW9uOwogfQogCi1JbmxpbmVSdW5BbmRPZmZzZXQgUG9zaXRpb246OmlubGluZVJ1bkFuZE9m
ZnNldChBZmZpbml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKSBj
b25zdAorSW5saW5lUnVuQW5kT2Zmc2V0IFBvc2l0aW9uOjppbmxpbmVSdW5BbmRPZmZzZXQoQWZm
aW5pdHkgYWZmaW5pdHksIFBBTDo6VGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKSBjb25z
dAogewogICAgIGF1dG8gY2FyZXRPZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAKQEAgLTEzNzcsMTMgKzEzNzcsMTMgQEAgSW5saW5lUnVu
QW5kT2Zmc2V0IFBvc2l0aW9uOjppbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHkgYWZmaW5pdHks
IFRleHREaXJlY3Rpb24KICAgICByZXR1cm4geyBydW4sIGNhcmV0T2Zmc2V0IH07CiB9CiAKLVRl
eHREaXJlY3Rpb24gUG9zaXRpb246OnByaW1hcnlEaXJlY3Rpb24oKSBjb25zdAorUEFMOjpUZXh0
RGlyZWN0aW9uIFBvc2l0aW9uOjpwcmltYXJ5RGlyZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAo
IW1fYW5jaG9yTm9kZSB8fCAhbV9hbmNob3JOb2RlLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1
cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFI7CiAgICAgaWYgKGF1dG8qIGJsb2NrRmxvdyA9IGxpbmVhZ2VPZlR5cGU8UmVuZGVyQmxv
Y2tGbG93PigqbV9hbmNob3JOb2RlLT5yZW5kZXJlcigpKS5maXJzdCgpKQogICAgICAgICByZXR1
cm4gYmxvY2tGbG93LT5zdHlsZSgpLmRpcmVjdGlvbigpOwotICAgIHJldHVybiBUZXh0RGlyZWN0
aW9uOjpMVFI7CisgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogfQogCiAjaWYg
RU5BQkxFKFRSRUVfREVCVUdHSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaAppbmRleCA5Yzk5NGMwOTc4
YzZhNDg3ZDdlMjJiYTBiZDZlMGE0ODhjNTRiYzFlLi5kZGNiYzcxM2UxYzYwOGEyZTcwOGM1NWM0
MTI2MGM3ODYxNzUwMTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaApAQCAtMTcxLDkgKzE3MSw5IEBA
IHB1YmxpYzoKICAgICBib29sIHJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW9uKGNvbnN0IFBvc2l0
aW9uJikgY29uc3Q7CiAKICAgICBJbmxpbmVSdW5BbmRPZmZzZXQgaW5saW5lUnVuQW5kT2Zmc2V0
KEFmZmluaXR5KSBjb25zdDsKLSAgICBJbmxpbmVSdW5BbmRPZmZzZXQgaW5saW5lUnVuQW5kT2Zm
c2V0KEFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0OworICAg
IElubGluZVJ1bkFuZE9mZnNldCBpbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHksIFBBTDo6VGV4
dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKSBjb25zdDsKIAotICAgIFRleHREaXJlY3Rpb24g
cHJpbWFyeURpcmVjdGlvbigpIGNvbnN0OworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBwcmltYXJ5
RGlyZWN0aW9uKCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9zaXRp
b25zIHRoYXQgZXhpc3QgYmV0d2VlbiB0d28gcG9zaXRpb25zLgogICAgIHN0YXRpYyB1bnNpZ25l
ZCBwb3NpdGlvbkNvdW50QmV0d2VlblBvc2l0aW9ucyhjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBv
c2l0aW9uJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCA5ODBkZGU4NTFmMTA3
MjNkNzhmNjYxOTg0MjczMjQ4ZjdhMGZhNWM0Li40MDk5M2IzNjhjMzY4NDg4Yzc5NjQ0MjVlZTIz
ZDQyZTY5YTBkNGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTMyNSwxNCAr
MzI1LDE0IEBAIEVsZW1lbnQqIGVuY2xvc2luZ0Jsb2NrKE5vZGUqIG5vZGUsIEVkaXRpbmdCb3Vu
ZGFyeUNyb3NzaW5nUnVsZSBydWxlKQogICAgIHJldHVybiBpczxFbGVtZW50PihlbmNsb3NpbmdO
b2RlKSA/IGRvd25jYXN0PEVsZW1lbnQ+KGVuY2xvc2luZ05vZGUpIDogbnVsbHB0cjsKIH0KIAot
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvbikKK1BBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBhdXRvIGJsb2NrID0gZW5jbG9zaW5nQmxv
Y2socG9zaXRpb24uY29udGFpbmVyTm9kZSgpKTsKICAgICBpZiAoIWJsb2NrKQotICAgICAgICBy
ZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFI7CiAgICAgYXV0byByZW5kZXJlciA9IGJsb2NrLT5yZW5kZXJlcigpOwogICAgIGlm
ICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAg
IHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICByZXR1cm4gcmVuZGVyZXItPnN0
eWxlKCkuZGlyZWN0aW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmgKaW5kZXggOTZj
ZWM5N2NmN2UzYjE2Y2UwZjFjMDViZTc0ZDcyMDhjY2M0ZGFiOS4uY2FjNjFiNWI1YzQ2NGRhZDkw
MDYyYzhjNzAwYzU4YmJmMzQzN2UwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmgKQEAgLTEz
Myw3ICsxMzMsNyBAQCBib29sIGlzQXRVbnNwbGl0dGFibGVFbGVtZW50KGNvbnN0IFBvc2l0aW9u
Jik7CiB1bnNpZ25lZCBudW1FbmNsb3NpbmdNYWlsQmxvY2txdW90ZXMoY29uc3QgUG9zaXRpb24m
KTsKIHZvaWQgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChQb3NpdGlvbiYsIE5vZGUmKTsK
IAotV0VCQ09SRV9FWFBPUlQgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2Nr
KGNvbnN0IFBvc2l0aW9uJik7CitXRUJDT1JFX0VYUE9SVCBQQUw6OlRleHREaXJlY3Rpb24gZGly
ZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYpOwogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAvLyBWaXNpYmxlUG9zaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRl
eCA0MGM3ODRjM2UzOGI4ZGE4OTIxMmJiODk4MDJkY2M5MmU2YjgzYTA2Li4zNDM0OGM3OTE5MTll
MWI4NmFkNjI1YzkxMmY2MDcyNTBiYTNiYzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CkBAIC0xOTYzLDkgKzE5NjMsOSBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6YmFzZVdyaXRp
bmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiAgICAgfQogCiAgICAgc3dpdGNo
IChyZW5kZXJlci0+c3R5bGUoKS5kaXJlY3Rpb24oKSkgewotICAgIGNhc2UgVGV4dERpcmVjdGlv
bjo6TFRSOgorICAgIGNhc2UgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI6CiAgICAgICAgIHJldHVy
biBXcml0aW5nRGlyZWN0aW9uOjpMZWZ0VG9SaWdodDsKLSAgICBjYXNlIFRleHREaXJlY3Rpb246
OlJUTDoKKyAgICBjYXNlIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOgogICAgICAgICByZXR1cm4g
V3JpdGluZ0RpcmVjdGlvbjo6UmlnaHRUb0xlZnQ7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBkYjE2MmE0YzU4OThmZTJlOTQyODlm
MGM5Njg1MDAwMzc2YTNmYjBjLi5jNjA1YmNiNWVkZWUwN2U3MmQ4ODNjZjRhZjMxYmRmNWQ4N2Iy
YzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNjU0
LDEyICs2NTQsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dGV4dFdhc1JlcGxhY2VkKENoYXJh
Y3RlckRhdGEqIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWcKICAgICB9CiB9CiAKLVRleHRE
aXJlY3Rpb24gRnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKQorUEFM
OjpUZXh0RGlyZWN0aW9uIEZyYW1lU2VsZWN0aW9uOjpkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2Nr
KCkKIHsKICAgICByZXR1cm4gV2ViQ29yZTo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhtX3Nl
bGVjdGlvbi5leHRlbnQoKSk7CiB9CiAKLVRleHREaXJlY3Rpb24gRnJhbWVTZWxlY3Rpb246OmRp
cmVjdGlvbk9mU2VsZWN0aW9uKCkKK1BBTDo6VGV4dERpcmVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6
ZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKQogewogICAgIC8vIEdldCBib3QgVmlzaWJsZVBvc2l0aW9u
cyBmaXJzdCBiZWNhdXNlIHZpc2libGVTdGFydCgpIGFuZCB2aXNpYmxlRW5kKCkKICAgICAvLyBj
YW4gY2F1c2UgbGF5b3V0LCB3aGljaCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnZhbGlkYXRlIGxp
bmVib3hlcy4KQEAgLTY5Myw3ICs2OTMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp3aWxsQmVN
b2RpZmllZChFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdAogICAg
IH0gZWxzZSB7CiAgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgICAgIGNhc2UgU2Vs
ZWN0aW9uRGlyZWN0aW9uOjpSaWdodDoKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb25PZlNlbGVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgICAgIGlmIChkaXJlY3Rpb25P
ZlNlbGVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgICAg
IGJhc2VJc1N0YXJ0ID0gdHJ1ZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBi
YXNlSXNTdGFydCA9IGZhbHNlOwpAQCAtNzAyLDcgKzcwMiw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OndpbGxCZU1vZGlmaWVkKEVBbHRlcmF0aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24g
ZGlyZWN0CiAgICAgICAgICAgICBiYXNlSXNTdGFydCA9IHRydWU7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBTZWxlY3Rpb25EaXJlY3Rpb246OkxlZnQ6Ci0gICAgICAgICAgICBp
ZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAg
ICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxU
UikKICAgICAgICAgICAgICAgICBiYXNlSXNTdGFydCA9IGZhbHNlOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGJhc2VJc1N0YXJ0ID0gdHJ1ZTsKQEAgLTc3NiwyMyArNzc2LDIz
IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQo
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5CiAgICAgLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biBtb2RpZnlFeHRlbmRpbmdSaWdodCBhbmQgbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCBpczoKICAg
ICAvLyBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkIGFsd2F5cyBleHRlbmRzIGZvcndhcmQgbG9naWNh
bGx5LgogICAgIC8vIG1vZGlmeUV4dGVuZGluZ1JpZ2h0IGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9k
aWZ5RXh0ZW5kaW5nRm9yd2FyZCBleGNlcHQgZm9yIGV4dGVuZGluZyBjaGFyYWN0ZXIgb3Igd29y
ZCwKLSAgICAvLyBpdCBleHRlbmRzIGZvcndhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3Npbmcg
YmxvY2sgaXMgVGV4dERpcmVjdGlvbjo6TFRSLAotICAgIC8vIGJ1dCBpdCBleHRlbmRzIGJhY2t3
YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFRleHREaXJlY3Rpb246OlJU
TC4KKyAgICAvLyBpdCBleHRlbmRzIGZvcndhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3Npbmcg
YmxvY2sgaXMgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsCisgICAgLy8gYnV0IGl0IGV4dGVuZHMg
YmFja3dhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMgUEFMOjpUZXh0RGly
ZWN0aW9uOjpSVEwuCiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewogICAgIGNhc2UgVGV4dEdy
YW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eToKLSAgICAgICAgaWYgKGRpcmVjdGlvbk9m
RW5jbG9zaW5nQmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChkaXJl
Y3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAg
ICAgICAgICBwb3MgPSBwb3MubmV4dChDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cyhDYW5ub3RDcm9zc0VkaXRp
bmdCb3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpX
b3JkR3JhbnVsYXJpdHk6Ci0gICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkg
PT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdC
bG9jaygpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgcG9zID0gbmV4
dFdvcmRQb3NpdGlvbkZvclBsYXRmb3JtKHBvcyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHBvcyA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHBvcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgVGV4dEdyYW51bGFyaXR5OjpMaW5lQm91bmRhcnk6Ci0gICAgICAgIGlmIChkaXJlY3Rpb25P
ZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAoZGly
ZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAg
ICAgICAgICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChncmFudWxhcml0eSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKGdyYW51
bGFyaXR5KTsKQEAgLTgxMCw3ICs4MTAsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rp
b246Om1vZGlmeUV4dGVuZGluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGFk
anVzdFBvc2l0aW9uRm9yVXNlclNlbGVjdEFsbChwb3MsIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxv
Y2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpOworICAgIGFkanVzdFBvc2l0aW9uRm9yVXNlclNl
bGVjdEFsbChwb3MsIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUik7CiAgICAgcmV0dXJuIHBvczsKIH0KIApAQCAtODUzLDcgKzg1Myw3IEBAIFZp
c2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpCiAgICAgICAgICAgICBwb3MgPSBlbmRPZkRvY3VtZW50KHBv
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBhZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxl
Y3RBbGwocG9zLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6
TFRSKTsKKyAgICBhZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCBkaXJlY3Rpb25P
ZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpOwogICAgIHJldHVy
biBwb3M7CiB9CiAKQEAgLTg2NSw3ICs4NjUsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxl
Y3Rpb246Om1vZGlmeU1vdmluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYgog
ICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hh
cmFjdGVyR3JhbnVsYXJpdHk6CiAgICAgICAgIGlmIChpc1JhbmdlKCkpIHsKLSAgICAgICAgICAg
IGlmIChkaXJlY3Rpb25PZlNlbGVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAg
ICAgICAgIGlmIChkaXJlY3Rpb25PZlNlbGVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSKQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5l
bmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2Vs
ZWN0aW9uLmFmZmluaXR5KCkpOwpAQCAtOTg5LDIzICs5ODksMjMgQEAgVmlzaWJsZVBvc2l0aW9u
IEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBncmFu
dWxhcml0eSkKICAgICAvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG1vZGlmeUV4dGVuZGluZ0xl
ZnQgYW5kIG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkIGlzOgogICAgIC8vIG1vZGlmeUV4dGVuZGlu
Z0JhY2t3YXJkIGFsd2F5cyBleHRlbmRzIGJhY2t3YXJkIGxvZ2ljYWxseS4KICAgICAvLyBtb2Rp
ZnlFeHRlbmRpbmdMZWZ0IGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9kaWZ5RXh0ZW5kaW5nQmFja3dh
cmQgZXhjZXB0IGZvciBleHRlbmRpbmcgY2hhcmFjdGVyIG9yIHdvcmQsCi0gICAgLy8gaXQgZXh0
ZW5kcyBiYWNrd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9jayBpcyBUZXh0RGly
ZWN0aW9uOjpMVFIsCi0gICAgLy8gYnV0IGl0IGV4dGVuZHMgZm9yd2FyZCBsb2dpY2FsbHkgaWYg
dGhlIGVuY2xvc2luZyBibG9jayBpcyBUZXh0RGlyZWN0aW9uOjpSVEwuCisgICAgLy8gaXQgZXh0
ZW5kcyBiYWNrd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9jayBpcyBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUiwKKyAgICAvLyBidXQgaXQgZXh0ZW5kcyBmb3J3YXJkIGxvZ2ljYWxs
eSBpZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLgogICAg
IHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFj
dGVyR3JhbnVsYXJpdHk6Ci0gICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkg
PT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdC
bG9jaygpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgcG9zID0gcG9z
LnByZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcG9zID0gcG9zLm5leHQoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5Ogot
ICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246
OkxUUikKKyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzV29yZFBvc2l0aW9u
KHBvcyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb25G
b3JQbGF0Zm9ybShwb3MpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0
eTo6TGluZUJvdW5kYXJ5OgotICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygp
ID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5n
QmxvY2soKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgIHBvcyA9IG1v
ZGlmeUV4dGVuZGluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChncmFudWxhcml0eSk7CkBAIC0xMDIy
LDcgKzEwMjIsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVu
ZGluZ0xlZnQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGFkanVzdFBvc2l0aW9uRm9y
VXNlclNlbGVjdEFsbChwb3MsICEoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRleHRE
aXJlY3Rpb246OkxUUikpOworICAgIGFkanVzdFBvc2l0aW9uRm9yVXNlclNlbGVjdEFsbChwb3Ms
ICEoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
KSk7CiAgICAgcmV0dXJuIHBvczsKIH0KICAgICAgICAKQEAgLTEwNzAsNyArMTA3MCw3IEBAIFZp
c2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nQmFja3dhcmQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgYWRqdXN0UG9zaXRpb25Gb3JVc2VyU2VsZWN0QWxsKHBv
cywgIShkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKSk7
CisgICAgYWRqdXN0UG9zaXRpb25Gb3JVc2VyU2VsZWN0QWxsKHBvcywgIShkaXJlY3Rpb25PZkVu
Y2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpKTsKICAgICByZXR1cm4g
cG9zOwogfQogCkBAIC0xMDgyLDcgKzEwODIsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxl
Y3Rpb246Om1vZGlmeU1vdmluZ0xlZnQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBibwog
ICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hh
cmFjdGVyR3JhbnVsYXJpdHk6CiAgICAgICAgIGlmIChpc1JhbmdlKCkpCi0gICAgICAgICAgICBp
ZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAg
ICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxU
UikKICAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3Rh
cnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmVuZCgpLCBtX3NlbGVj
dGlvbi5hZmZpbml0eSgpKTsKQEAgLTEyMDQsNyArMTIwNCw3IEBAIEFYVGV4dFN0YXRlQ2hhbmdl
SW50ZW50IEZyYW1lU2VsZWN0aW9uOjp0ZXh0U2VsZWN0aW9uSW50ZW50KEVBbHRlcmF0aW9uIGFs
dGVyLCBTCiAgICAgYm9vbCBmbGlwID0gZmFsc2U7CiAgICAgaWYgKGFsdGVyID09IEZyYW1lU2Vs
ZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSkgewogICAgICAgICBpbnRlbnQudHlwZSA9IEFYVGV4dFN0
YXRlQ2hhbmdlVHlwZVNlbGVjdGlvbk1vdmU7Ci0gICAgICAgIGZsaXAgPSBpc1JhbmdlKCkgJiYg
ZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgIGZs
aXAgPSBpc1JhbmdlKCkgJiYgZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OlJUTDsKICAgICB9IGVsc2UKICAgICAgICAgaW50ZW50LnR5cGUgPSBBWFRleHRTdGF0
ZUNoYW5nZVR5cGVTZWxlY3Rpb25FeHRlbmQ7CiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewpA
QCAtMTQzMyw4ICsxNDMzLDggQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0
aW9uIGFsdGVyLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBUZXgKICAgICAgICAgaWYg
KCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFs
d2F5c0dyb3dTZWxlY3Rpb25XaGVuRXh0ZW5kaW5nVG9Cb3VuZGFyeSgpIHx8IG1fc2VsZWN0aW9u
LmlzQ2FyZXQoKSB8fCAhaXNCb3VuZGFyeShncmFudWxhcml0eSkpCiAgICAgICAgICAgICBzZXRF
eHRlbnQocG9zaXRpb24sIHVzZXJUcmlnZ2VyZWQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxv
Y2soKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gU2VsZWN0aW9uRGlyZWN0aW9uOjpG
b3J3YXJkIHx8ICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiAmJiBkaXJlY3Rp
b24gPT0gU2VsZWN0aW9uRGlyZWN0aW9uOjpSaWdodCkgfHwgKHRleHREaXJlY3Rpb24gPT0gVGV4
dERpcmVjdGlvbjo6UlRMICYmIGRpcmVjdGlvbiA9PSBTZWxlY3Rpb25EaXJlY3Rpb246OkxlZnQp
KQorICAgICAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rp
b25PZkVuY2xvc2luZ0Jsb2NrKCk7CisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFNlbGVj
dGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCB8fCAodGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUiAmJiBkaXJlY3Rpb24gPT0gU2VsZWN0aW9uRGlyZWN0aW9uOjpSaWdodCkgfHwg
KHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgJiYgZGlyZWN0aW9uID09
IFNlbGVjdGlvbkRpcmVjdGlvbjo6TGVmdCkpCiAgICAgICAgICAgICAgICAgc2V0RW5kKHBvc2l0
aW9uLCB1c2VyVHJpZ2dlcmVkKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBz
ZXRTdGFydChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmgKaW5kZXggZWRhY2I2M2NiZWJkM2EzZTkzZDNkMGYxZjk3MzllYWJhZjdm
NzY1Mi4uMDFmY2EyOWQ1Zjc5MzlmOTY0NjM5YjBmMmE0YzQ1OGM0OWZmNGE0YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMjcxLDggKzI3MSw4IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8U2V0U2VsZWN0aW9uT3B0aW9uPiwgQ3Vyc29y
QWxpZ25PblNjcm9sbCwgVGV4dEdyYW51bGFyaXR5KTsKIAogICAgIHZvaWQgcmVzcG9uZFRvTm9k
ZU1vZGlmaWNhdGlvbihOb2RlJiwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vbCBleHRlbnRSZW1vdmVk
LCBib29sIHN0YXJ0UmVtb3ZlZCwgYm9vbCBlbmRSZW1vdmVkKTsKLSAgICBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKTsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bk9mU2VsZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9z
aW5nQmxvY2soKTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZTZWxlY3Rpb24o
KTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBsYXRmb3JtKGJvb2wgaXNHZXRT
dGFydCkgY29uc3Q7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0Rm9yUGxhdGZvcm0oKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAppbmRleCAyYzNl
MDc4YTMyYTJmZWYyMWRhNGZlY2Y5ZGRhZGI3MTQyYWVmMzMzLi5hYjk2OTVjZDQzN2ZjZDNiMTNi
YTcxMjgyOGI2N2Y2NzY5MTM0NTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
UG9zaXRpb24uY3BwCkBAIC0xMjAsMTQgKzEyMCwxNCBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRp
b246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgcmV0dXJu
IFBvc2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRvd25zdHJl
YW0oKTsKLSAgICBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24gPSBwLnByaW1hcnlEaXJl
Y3Rpb24oKTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiA9IHAucHJp
bWFyeURpcmVjdGlvbigpOwogCiAgICAgSW5saW5lSXRlcmF0b3I6OkxpbmVMb2dpY2FsT3JkZXJD
YWNoZSBvcmRlckNhY2hlOwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byBbcnVu
LCBvZmZzZXRdID0gcC5pbmxpbmVSdW5BbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVj
dGlvbik7CiAgICAgICAgIGlmICghcnVuKQotICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlEaXJl
Y3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2Fu
ZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1f
ZGVlcFBvc2l0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBv
c2l0aW9uKTsKIAogICAgICAgICBhdXRvKiByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7CiAK
QEAgLTEzOCw3ICsxMzgsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgIGlmICghcmVuZGVyZXItPm5v
ZGUoKSkgewogICAgICAgICAgICAgICAgIHJ1bi50cmF2ZXJzZVByZXZpb3VzT25MaW5lKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFydW4pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmlt
YXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRp
ZGF0ZShtX2RlZXBQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmltYXJ5
RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2Fu
ZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZydW4t
PnJlbmRlcmVyKCk7CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcnVuLT5yaWdodG1vc3RDYXJl
dE9mZnNldCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTU3LDcgKzE1Nyw3IEBA
IFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUo
KSBjb25zdAogICAgICAgICAgICAgICAgIC8vIE92ZXJzaG90IHRvIHRoZSBsZWZ0LgogICAgICAg
ICAgICAgICAgIGF1dG8gcHJldmlvdXNSdW4gPSBydW4tPnByZXZpb3VzT25MaW5lSWdub3JpbmdM
aW5lQnJlYWsoKTsKICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUnVuKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uT25MZWZ0ID0gcHJpbWFyeURpcmVjdGlvbiA9
PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUo
bV9kZWVwUG9zaXRpb24pIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9z
aXRpb24pOworICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBwb3NpdGlvbk9uTGVmdCA9IHBy
aW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBwcmV2aW91c1Zpc3Vh
bGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogbmV4dFZpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICBhdXRvIHJ1
bk9uTGVmdCA9IHBvc2l0aW9uT25MZWZ0LmlubGluZVJ1bkFuZE9mZnNldChtX2FmZmluaXR5LCBw
cmltYXJ5RGlyZWN0aW9uKS5ydW47CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5PbkxlZnQg
JiYgcnVuT25MZWZ0LT5saW5lKCkgPT0gcnVuLT5saW5lKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUG9zaXRpb24oKTsKQEAgLTE3NiwxMyArMTc2LDEzIEBAIFBvc2l0aW9uIFZp
c2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogCiAg
ICAgICAgICAgICBpZiAocnVuLT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9uKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c1J1bikgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGxvZ2ljYWxTdGFydCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRS
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbFN0YXJ0ID0gcHJpbWFyeURpcmVjdGlv
biA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUgogICAgICAgICAgICAgICAgICAgICAgICAgPyBJ
bmxpbmVJdGVyYXRvcjo6Zmlyc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXJXaXRoTm9kZShydW4t
PmxpbmUoKSwgb3JkZXJDYWNoZSkKICAgICAgICAgICAgICAgICAgICAgICAgIDogSW5saW5lSXRl
cmF0b3I6Omxhc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXJXaXRoTm9kZShydW4tPmxpbmUoKSwg
b3JkZXJDYWNoZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsU3RhcnQpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJ1biA9IGxvZ2ljYWxTdGFydDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8g
cnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWF4aW11bUNhcmV0T2Zmc2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSID8gcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWF4
aW11bUNhcmV0T2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjQzLDcgKzI0Myw3IEBAIFBvc2l0
aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25z
dAogICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IHJ1bi0+YmlkaUxldmVsKCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsK
LSAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rp
b246OkxUUiA/IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCkgOiBydW4tPm1heGltdW1DYXJldE9m
ZnNldCgpOworICAgICAgICAgICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBydW4tPm1pbmltdW1DYXJldE9mZnNldCgpIDogcnVuLT5t
YXhpbXVtQ2FyZXRPZmZzZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0yODYsMTQgKzI4NiwxNCBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246
OnJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBQ
b3NpdGlvbigpOwogCiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFt
KCk7Ci0gICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uID0gcC5wcmltYXJ5RGlyZWN0
aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24gPSBwLnByaW1h
cnlEaXJlY3Rpb24oKTsKIAogICAgIElubGluZUl0ZXJhdG9yOjpMaW5lTG9naWNhbE9yZGVyQ2Fj
aGUgb3JkZXJDYWNoZTsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8gW3J1biwg
b2Zmc2V0XSA9IHAuaW5saW5lUnVuQW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rp
b24pOwogICAgICAgICBpZiAoIXJ1bikKLSAgICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0
aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2Rl
ZXBQb3NpdGlvbik7CisgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVl
cFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3Np
dGlvbik7CiAKICAgICAgICAgYXV0byogcmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJlcigpOwogCkBA
IC0zMDQsNyArMzA0LDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5
RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogICAgICAgICAgICAgaWYgKCFyZW5kZXJlci0+bm9k
ZSgpKSB7CiAgICAgICAgICAgICAgICAgcnVuLnRyYXZlcnNlTmV4dE9uTGluZSgpOwogICAgICAg
ICAgICAgICAgIGlmICghcnVuKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURp
cmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRp
ZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUo
bV9kZWVwUG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVj
dGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2Fu
ZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0
ZShtX2RlZXBQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgcmVuZGVyZXIgPSAmcnVuLT5yZW5k
ZXJlcigpOwogICAgICAgICAgICAgICAgIG9mZnNldCA9IHJ1bi0+bGVmdG1vc3RDYXJldE9mZnNl
dCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzIzLDcgKzMyMyw3IEBAIFBvc2l0
aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29u
c3QKICAgICAgICAgICAgICAgICAvLyBPdmVyc2hvdCB0byB0aGUgcmlnaHQuCiAgICAgICAgICAg
ICAgICAgYXV0byBuZXh0UnVuID0gcnVuLT5uZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsK
ICAgICAgICAgICAgICAgICBpZiAoIW5leHRSdW4pIHsKLSAgICAgICAgICAgICAgICAgICAgUG9z
aXRpb24gcG9zaXRpb25PblJpZ2h0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBw
cmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOworICAgICAg
ICAgICAgICAgICAgICBQb3NpdGlvbiBwb3NpdGlvbk9uUmlnaHQgPSBwcmltYXJ5RGlyZWN0aW9u
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRh
dGUobV9kZWVwUG9zaXRpb24pIDogcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1f
ZGVlcFBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBydW5PblJpZ2h0ID0gcG9z
aXRpb25PblJpZ2h0LmlubGluZVJ1bkFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0
aW9uKS5ydW47CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5PblJpZ2h0ICYmIHJ1bk9uUmln
aHQtPmxpbmUoKSA9PSBydW4tPmxpbmUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBQb3NpdGlvbigpOwpAQCAtMzQyLDE0ICszNDIsMTQgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0
aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogCiAgICAgICAgICAg
ICBpZiAocnVuLT5kaXJlY3Rpb24oKSA9PSBwcmltYXJ5RGlyZWN0aW9uKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKCFuZXh0UnVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gbG9naWNhbEVu
ZCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSCisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gbG9naWNhbEVuZCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIKICAgICAgICAgICAgICAgICAgICAgICAgID8gSW5saW5lSXRlcmF0b3I6Omxh
c3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXJXaXRoTm9kZShydW4tPmxpbmUoKSwgb3JkZXJDYWNo
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIDogSW5saW5lSXRlcmF0b3I6OmZpcnN0TGVhZk9u
TGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUocnVuLT5saW5lKCksIG9yZGVyQ2FjaGUpOwogCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsRW5kKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBydW4gPSBsb2dpY2FsRW5kOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIg
PSAmcnVuLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJp
bWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBydW4tPm1heGltdW1DYXJldE9m
ZnNldCgpIDogcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIg
PyBydW4tPm1heGltdW1DYXJldE9mZnNldCgpIDogcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQoKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CkBAIC00MTMsNyArNDEzLDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9u
OjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogICAgICAgICAgICAgICAg
ICAgICBsZXZlbCA9IHJ1bi0+YmlkaUxldmVsKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IHJ1bi0+bWF4
aW11bUNhcmV0T2Zmc2V0KCkgOiBydW4tPm1pbmltdW1DYXJldE9mZnNldCgpOworICAgICAgICAg
ICAgICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFIgPyBydW4tPm1heGltdW1DYXJldE9mZnNldCgpIDogcnVuLT5taW5pbXVtQ2FyZXRPZmZzZXQo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02MzYs
NyArNjM2LDcgQEAgSW5saW5lUnVuQW5kT2Zmc2V0IFZpc2libGVQb3NpdGlvbjo6aW5saW5lUnVu
QW5kT2Zmc2V0KCkgY29uc3QKICAgICByZXR1cm4gbV9kZWVwUG9zaXRpb24uaW5saW5lUnVuQW5k
T2Zmc2V0KG1fYWZmaW5pdHkpOwogfQogCi1JbmxpbmVSdW5BbmRPZmZzZXQgVmlzaWJsZVBvc2l0
aW9uOjppbmxpbmVSdW5BbmRPZmZzZXQoVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKSBj
b25zdAorSW5saW5lUnVuQW5kT2Zmc2V0IFZpc2libGVQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zm
c2V0KFBBTDo6VGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKSBjb25zdAogewogICAgIHJl
dHVybiBtX2RlZXBQb3NpdGlvbi5pbmxpbmVSdW5BbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFy
eURpcmVjdGlvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaApp
bmRleCBhOTJjYTgxYmNlZmUzZTQ3NmM0YzU0NjYwZDk3MjA4NGVlZWNmYWM2Li5jYjk4NDMwM2Jk
ZDE1YTUxYjRkZWQ5MzVjMzlmNzRiMzg1MzhhNjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIEVsZW1lbnQq
IHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbi5pc05v
dE51bGwoKSA/IG1fZGVlcFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSA6IDA7IH0KIAogICAgIElubGluZVJ1bkFuZE9mZnNldCBpbmxpbmVSdW5BbmRPZmZz
ZXQoKSBjb25zdDsKLSAgICBJbmxpbmVSdW5BbmRPZmZzZXQgaW5saW5lUnVuQW5kT2Zmc2V0KFRl
eHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3Q7CisgICAgSW5saW5lUnVuQW5kT2Zm
c2V0IGlubGluZVJ1bkFuZE9mZnNldChQQUw6OlRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlv
bikgY29uc3Q7CiAKICAgICBzdHJ1Y3QgTG9jYWxDYXJldFJlY3QgewogICAgICAgICBMYXlvdXRS
ZWN0IHJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKaW5kZXggYzY4
MmU4Mjg5NmEwNWQyYTc4NDMzODc3M2NiMzBkY2ZkNTFjMjQ1MC4uOWMzNGM5MjE0MTAyY2NmMzVl
NjUwZTgwZjRiZmE0MDY4NTNlNjc4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlVW5pdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVu
aXRzLmNwcApAQCAtMzE3LDcgKzMxNyw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzdWFs
V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uCiAKICAg
ICB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIFRleHREaXJlY3Rpb24gYmxvY2tE
aXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKHZpc2libGVQb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpKTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gYmxvY2tEaXJlY3Rpb24gPSBk
aXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
KTsKICAgICBJbmxpbmVJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yIHByZXZpb3VzbHlWaXNpdGVk
UnVuOwogICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50ID0gdmlzaWJsZVBvc2l0aW9uOwogICAg
IHN0ZDo6b3B0aW9uYWw8VmlzaWJsZVBvc2l0aW9uPiBwcmV2aW91c1Bvc2l0aW9uOwpAQCAtMzY2
LDcgKzM2Niw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzdWFsV29yZFBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uCiAKICAgICAgICAgYm9vbCBpc1dv
cmRCcmVhazsKICAgICAgICAgYm9vbCBib3hIYXNTYW1lRGlyZWN0aW9uYWxpdHlBc0Jsb2NrID0g
cnVuLT5kaXJlY3Rpb24oKSA9PSBibG9ja0RpcmVjdGlvbjsKLSAgICAgICAgYm9vbCBtb3ZpbmdC
YWNrd2FyZCA9IChkaXJlY3Rpb24gPT0gTW92ZUxlZnQgJiYgcnVuLT5kaXJlY3Rpb24oKSA9PSBU
ZXh0RGlyZWN0aW9uOjpMVFIpIHx8IChkaXJlY3Rpb24gPT0gTW92ZVJpZ2h0ICYmIHJ1bi0+ZGly
ZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKTsKKyAgICAgICAgYm9vbCBtb3ZpbmdCYWNr
d2FyZCA9IChkaXJlY3Rpb24gPT0gTW92ZUxlZnQgJiYgcnVuLT5kaXJlY3Rpb24oKSA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUikgfHwgKGRpcmVjdGlvbiA9PSBNb3ZlUmlnaHQgJiYgcnVuLT5k
aXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCk7CiAgICAgICAgIGlmICgoc2tp
cHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCAmJiBib3hIYXNTYW1lRGlyZWN0aW9uYWxpdHlBc0Jsb2Nr
KQogICAgICAgICAgICAgfHwgKCFza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ICYmIG1vdmluZ0Jh
Y2t3YXJkKSkgewogICAgICAgICAgICAgYm9vbCBsb2dpY2FsU3RhcnRJblJlbmRlcmVyID0gb2Zm
c2V0SW5SdW4gPT0gdGV4dFJ1bi0+c3RhcnQoKSAmJiBwcmV2aW91c1J1bkluRGlmZmVyZW50TGlu
ZTsKQEAgLTM5Niw4ICszOTYsOCBAQCBWaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgYm9vbCBzawogICAgIAogICAg
IC8vIEZJWE1FOiBIb3cgc2hvdWxkIHdlIGhhbmRsZSBhIG5vbi1lZGl0YWJsZSBwb3NpdGlvbj8K
ICAgICBpZiAobGVmdFdvcmRCcmVhay5pc051bGwoKSAmJiBpc0VkaXRhYmxlUG9zaXRpb24odmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpKSB7Ci0gICAgICAgIFRleHREaXJlY3Rpb24g
YmxvY2tEaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKHZpc2libGVQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICAgICAgbGVmdFdvcmRCcmVhayA9IGJsb2NrRGlyZWN0
aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJs
ZVBvc2l0aW9uKSA6IGVuZE9mRWRpdGFibGVDb250ZW50KHZpc2libGVQb3NpdGlvbik7CisgICAg
ICAgIFBBTDo6VGV4dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9z
aW5nQmxvY2sodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOworICAgICAgICBsZWZ0
V29yZEJyZWFrID0gYmxvY2tEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBz
dGFydE9mRWRpdGFibGVDb250ZW50KHZpc2libGVQb3NpdGlvbikgOiBlbmRPZkVkaXRhYmxlQ29u
dGVudCh2aXNpYmxlUG9zaXRpb24pOwogICAgIH0KICAgICByZXR1cm4gbGVmdFdvcmRCcmVhazsK
IH0KQEAgLTQwOSw4ICs0MDksOCBAQCBWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGJvb2wgcwogCiAgICAgLy8g
RklYTUU6IEhvdyBzaG91bGQgd2UgaGFuZGxlIGEgbm9uLWVkaXRhYmxlIHBvc2l0aW9uPwogICAg
IGlmIChyaWdodFdvcmRCcmVhay5pc051bGwoKSAmJiBpc0VkaXRhYmxlUG9zaXRpb24odmlzaWJs
ZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpKSB7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gYmxv
Y2tEaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKHZpc2libGVQb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpKTsKLSAgICAgICAgcmlnaHRXb3JkQnJlYWsgPSBibG9ja0RpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBlbmRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxlUG9z
aXRpb24pIDogc3RhcnRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxlUG9zaXRpb24pOworICAgICAg
ICBQQUw6OlRleHREaXJlY3Rpb24gYmxvY2tEaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2lu
Z0Jsb2NrKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICAgICAgcmlnaHRX
b3JkQnJlYWsgPSBibG9ja0RpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IGVu
ZE9mRWRpdGFibGVDb250ZW50KHZpc2libGVQb3NpdGlvbikgOiBzdGFydE9mRWRpdGFibGVDb250
ZW50KHZpc2libGVQb3NpdGlvbik7CiAgICAgfQogICAgIHJldHVybiByaWdodFdvcmRCcmVhazsK
IH0KQEAgLTE0NjcsMTQgKzE0NjcsMTQgQEAgYm9vbCBpc0VuZE9mRWRpdGFibGVPck5vbkVkaXRh
YmxlQ29udGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHApCiAgICAgcmV0dXJuIHAuaXNOb3RO
dWxsKCkgJiYgcC5uZXh0KCkuaXNOdWxsKCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBsZWZ0Qm91
bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5KQorVmlzaWJsZVBvc2l0aW9uIGxlZnRCb3VuZGFy
eU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSkKIHsKLSAgICByZXR1cm4gZGlyZWN0aW9uID09
IFRleHREaXJlY3Rpb246OkxUUiA/IGxvZ2ljYWxTdGFydE9mTGluZShjLCByZWFjaGVkQm91bmRh
cnkpIDogbG9naWNhbEVuZE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpOworICAgIHJldHVybiBk
aXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBsb2dpY2FsU3RhcnRPZkxpbmUo
YywgcmVhY2hlZEJvdW5kYXJ5KSA6IGxvZ2ljYWxFbmRPZkxpbmUoYywgcmVhY2hlZEJvdW5kYXJ5
KTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIHJpZ2h0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBjLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCogcmVhY2hlZEJvdW5k
YXJ5KQorVmlzaWJsZVBvc2l0aW9uIHJpZ2h0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBjLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91
bmRhcnkpCiB7Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBs
b2dpY2FsRW5kT2ZMaW5lKGMsIHJlYWNoZWRCb3VuZGFyeSkgOiBsb2dpY2FsU3RhcnRPZkxpbmUo
YywgcmVhY2hlZEJvdW5kYXJ5KTsKKyAgICByZXR1cm4gZGlyZWN0aW9uID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSID8gbG9naWNhbEVuZE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpIDogbG9n
aWNhbFN0YXJ0T2ZMaW5lKGMsIHJlYWNoZWRCb3VuZGFyeSk7CiB9CiAKIHN0YXRpYyBib29sIGRp
cmVjdGlvbklzRG93bnN0cmVhbShTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKaW5kZXggYTZkZTQyMTUyNmQ0NmUyODJmZjQwNzU0
ZjcwOTM4NmJkOTMzMTBmMy4uMmY5ODBhMjViNWJiMGI1OWFjMGFlYTIzZjcxZTlmNDY5ZWUwZjdi
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCkBAIC02Myw4ICs2Myw4IEBA
IFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
CiBWaXNpYmxlUG9zaXRpb24gbG9naWNhbFN0YXJ0T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSA9IG51bGxwdHIpOwogVmlzaWJsZVBvc2l0aW9uIGxv
Z2ljYWxFbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCogcmVhY2hlZEJvdW5k
YXJ5ID0gbnVsbHB0cik7CiBib29sIGlzTG9naWNhbEVuZE9mTGluZShjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKLVZpc2libGVQb3NpdGlvbiBsZWZ0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgVGV4dERpcmVjdGlvbiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5KTsKLVZpc2li
bGVQb3NpdGlvbiByaWdodEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRl
eHREaXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSk7CitWaXNpYmxlUG9zaXRpb24gbGVm
dEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFBBTDo6VGV4dERpcmVjdGlv
biwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5KTsKK1Zpc2libGVQb3NpdGlvbiByaWdodEJvdW5kYXJ5
T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFBBTDo6VGV4dERpcmVjdGlvbiwgYm9vbCog
cmVhY2hlZEJvdW5kYXJ5KTsKIAogLy8gcGFyYWdyYXBocyAocGVyaGFwcyBhIG1pc25vbWVyLCBj
YW4gYmUgZGl2aWRlZCBieSBsaW5lIGJyZWFrIGVsZW1lbnRzKQogV0VCQ09SRV9FWFBPUlQgVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgRWRp
dGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCmlu
ZGV4IDZjMzgxYWE3MDFjOTQwNzI2NjFjZTBlMTUyZjI1OTFiNTQ3MTQ5OTEuLmM1MjM2MjhlMjhl
MzkzNmJlZTJlMmIwMTdjODg3OWU1NjQyYjA3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKQEAgLTU0NCw3ICs1NDQsNyBAQCBib29s
IEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c2V0dXBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJz
KERhdGVUaW1lQ2hvb3NlclBhcgogICAgIHBhcmFtZXRlcnMuY3VycmVudFZhbHVlID0gZWxlbWVu
dC52YWx1ZSgpOwogCiAgICAgYXV0byogY29tcHV0ZWRTdHlsZSA9IGVsZW1lbnQuY29tcHV0ZWRT
dHlsZSgpOwotICAgIHBhcmFtZXRlcnMuaXNBbmNob3JFbGVtZW50UlRMID0gY29tcHV0ZWRTdHls
ZS0+ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMOworICAgIHBhcmFtZXRlcnMuaXNB
bmNob3JFbGVtZW50UlRMID0gY29tcHV0ZWRTdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpSVEw7CiAgICAgcGFyYW1ldGVycy51c2VEYXJrQXBwZWFyYW5jZSA9IGRvY3Vt
ZW50LnVzZURhcmtBcHBlYXJhbmNlKGNvbXB1dGVkU3R5bGUpOwogCiAgICAgYXV0byBkYXRlID0g
cGFyc2VUb0RhdGVDb21wb25lbnRzKGVsZW1lbnQudmFsdWUoKSkudmFsdWVfb3IoRGF0ZUNvbXBv
bmVudHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IDJhZGZmOGZlODVk
OTM2NzgwMjk1YzIzOTVjZTM1MTllMzgxODQ0MWMuLjZhYWU2N2YyMDg2ZWFhODNlNWFmMjEyNmE2
ZmQ3NjMyODg0MmE3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC03NzQs
MTggKzc3NCwxOCBAQCBib29sIEhUTUxFbGVtZW50OjpoYXNEaXJlY3Rpb25BdXRvKCkgY29uc3QK
ICAgICByZXR1cm4gKGhhc1RhZ05hbWUoYmRpVGFnKSAmJiBkaXJlY3Rpb24uaXNOdWxsKCkpIHx8
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGRpcmVjdGlvbiwgImF1dG8iKTsKIH0KIAot
VGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRy
aWJ1dGUoYm9vbCYgaXNBdXRvKSBjb25zdAorUEFMOjpUZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50
OjpkaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShib29sJiBpc0F1dG8pIGNvbnN0
CiB7CiAgICAgaWYgKCEoc2VsZk9yQW5jZXN0b3JIYXNEaXJBdXRvQXR0cmlidXRlKCkgJiYgaGFz
RGlyZWN0aW9uQXV0bygpKSkgewogICAgICAgICBpc0F1dG8gPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSOwogICAgIH0KIAogICAgIGlzQXV0byA9IHRydWU7CiAgICAgcmV0dXJuIGRpcmVjdGlv
bmFsaXR5KCk7CiB9CiAKLVRleHREaXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5
KE5vZGUqKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKSBjb25zdAorUEFMOjpUZXh0RGly
ZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9u
YWxpdHlUZXh0Tm9kZSkgY29uc3QKIHsKICAgICBpZiAoaXNUZXh0RmllbGQoKSkgewogICAgICAg
ICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYgdGV4dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudD4oY29uc3RfY2FzdDxIVE1MRWxlbWVudCY+KCp0aGlzKSk7
CkBAIC03OTMsNyArNzkzLDcgQEAgVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9u
YWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpIGMKICAgICAgICAgVUNo
YXJEaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRleHRFbGVtZW50LnZhbHVlKCkuZGVmYXVsdFdy
aXRpbmdEaXJlY3Rpb24oJmhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KTsKICAgICAgICAgaWYgKHN0
cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpCiAgICAgICAgICAgICAqc3Ryb25nRGlyZWN0aW9u
YWxpdHlUZXh0Tm9kZSA9IGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5ID8gJnRleHRFbGVtZW50IDog
bnVsbHB0cjsKLSAgICAgICAgcmV0dXJuICh0ZXh0RGlyZWN0aW9uID09IFVfTEVGVF9UT19SSUdI
VCkgPyBUZXh0RGlyZWN0aW9uOjpMVFIgOiBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgIHJl
dHVybiAodGV4dERpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFQpID8gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgOiBQQUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAgICB9CiAKICAgICBSZWZQdHI8
Tm9kZT4gbm9kZSA9IGZpcnN0Q2hpbGQoKTsKQEAgLTgyMCwxNCArODIwLDE0IEBAIFRleHREaXJl
Y3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rpb25h
bGl0eVRleHROb2RlKSBjCiAgICAgICAgICAgICBpZiAoaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkp
IHsKICAgICAgICAgICAgICAgICBpZiAoc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkKICAg
ICAgICAgICAgICAgICAgICAgKnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUgPSBub2RlLmdl
dCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAodGV4dERpcmVjdGlvbiA9PSBVX0xFRlRfVE9f
UklHSFQpID8gVGV4dERpcmVjdGlvbjo6TFRSIDogVGV4dERpcmVjdGlvbjo6UlRMOworICAgICAg
ICAgICAgICAgIHJldHVybiAodGV4dERpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFQpID8gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIgOiBQQUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9k
ZSwgdGhpcyk7CiAgICAgfQogICAgIGlmIChzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKQog
ICAgICAgICAqc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSA9IG51bGxwdHI7Ci0gICAgcmV0
dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFI7CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnQ6OmRpckF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRv
bVN0cmluZyYgdmFsdWUpCkBAIC04NDUsNyArODQ1LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6YWRq
dXN0RGlyZWN0aW9uYWxpdHlJZk5lZWRlZEFmdGVyQ2hpbGRBdHRyaWJ1dGVDaGFuZ2VkKEVsZW1l
bnQKIHsKICAgICBBU1NFUlQoc2VsZk9yQW5jZXN0b3JIYXNEaXJBdXRvQXR0cmlidXRlKCkpOwog
ICAgIE5vZGUqIHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGU7Ci0gICAgVGV4dERpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uYWxpdHkoJnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4
dE5vZGUpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9u
YWxpdHkoJnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpOwogICAgIHNldEhhc0RpckF1dG9G
bGFnUmVjdXJzaXZlbHkoY2hpbGQsIGZhbHNlKTsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgcmVu
ZGVyZXIoKS0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSB0ZXh0RGlyZWN0aW9uKQogICAgICAgICBy
ZXR1cm47CkBAIC04NjAsNyArODYwLDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6YWRqdXN0RGlyZWN0
aW9uYWxpdHlJZk5lZWRlZEFmdGVyQ2hpbGRBdHRyaWJ1dGVDaGFuZ2VkKEVsZW1lbnQKIHZvaWQg
SFRNTEVsZW1lbnQ6OmNhbGN1bGF0ZUFuZEFkanVzdERpcmVjdGlvbmFsaXR5KCkKIHsKICAgICBO
b2RlKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlOwotICAgIFRleHREaXJlY3Rpb24gdGV4
dERpcmVjdGlvbiA9IGRpcmVjdGlvbmFsaXR5KCZzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2Rl
KTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbmFsaXR5
KCZzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKTsKICAgICBzZXRIYXNEaXJBdXRvRmxhZ1Jl
Y3Vyc2l2ZWx5KHRoaXMsIHRydWUsIHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpOwogICAg
IGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCkuZGlyZWN0aW9uKCkgIT0gdGV4
dERpcmVjdGlvbikKICAgICAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5oCmluZGV4IDJiM2E3ZWJmMDE4NGE1Yzc2ZmEzNWI5NmRlOGFjZTA0
NTdmYzhiNzguLmQ3NzhmYmU1N2EwNmMyZjQ4ODNjNTkyNGVjNmM5NmEwYWFjMzBkYWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbGVtZW50LmgKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0RGlyKGNvbnN0IEF0b21TdHJpbmcmKTsKIAogICAgIGJvb2wg
aGFzRGlyZWN0aW9uQXV0bygpIGNvbnN0OwotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uYWxp
dHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoYm9vbCYgaXNBdXRvKSBjb25zdDsKKyAgICBQQUw6OlRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoYm9vbCYgaXNB
dXRvKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRDb250cm9sSW5uZXJUZXh0RWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0x
NzIsNyArMTcyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpckF0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgQXRvbVN0cmluZyYpOwogICAgIHZvaWQgYWRqdXN0RGlyZWN0aW9uYWxpdHlJZk5lZWRlZEFm
dGVyQ2hpbGRBdHRyaWJ1dGVDaGFuZ2VkKEVsZW1lbnQqIGNoaWxkKTsKICAgICB2b2lkIGFkanVz
dERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkcmVuQ2hhbmdlZChFbGVtZW50KiBiZWZv
cmVDaGFuZ2UsIENoaWxkQ2hhbmdlOjpUeXBlKTsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlPSAwKSBjb25zdDsKKyAg
ICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uYWxpdHkoTm9kZSoqIHN0cm9uZ0RpcmVjdGlv
bmFsaXR5VGV4dE5vZGU9IDApIGNvbnN0OwogCiAgICAgZW51bSBjbGFzcyBBbGxvd1BlcmNlbnRh
Z2UgOiBib29sIHsgTm8sIFllcyB9OwogICAgIGVudW0gY2xhc3MgVXNlQ1NTUFhBc1VuaXRUeXBl
IDogYm9vbCB7IE5vLCBZZXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggMTdjMWYzZTA1Yzk5YmQ2YWQ0YWRjZjY3OGQ4
M2ZjYWI1NzNmNThiZC4uMWU4OGEwZDIxZTVhOTE1MmY0MTIyODYzNjNiMGI2NmU5M2E5MDEyOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKQEAgLTc2OCwxOCArNzY4LDE4IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6ZGlyZWN0aW9uRm9yRm9ybURhdGEoKSBjb25zdAogICAgICAgICBmb3IgKGF1dG8mIGVs
ZW1lbnQgOiBsaW5lYWdlT2ZUeXBlPEhUTUxFbGVtZW50PigqdGhpcykpIHsKICAgICAgICAgICAg
IGF1dG8mIHZhbHVlID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRp
ckF0dHIpOwogICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLCAicnRsIikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OlJUTDsK
KyAgICAgICAgICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgICAg
ICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJsdHIiKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICAgICAgICAg
IHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImF1dG8iKSkgewogICAgICAgICAgICAgICAg
IGJvb2wgaXNBdXRvOwogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmRpcmVjdGlvbmFs
aXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0dXJuIFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIH0oKTsKIAotICAgIHJldHVybiBkaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSID8gImx0ciJfcyA6ICJydGwiX3M7CisgICAgcmV0dXJuIGRp
cmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/ICJsdHIiX3MgOiAicnRsIl9zOwog
fQogCiBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0TWF4
TGVuZ3RoKGludCBtYXhMZW5ndGgpCkBAIC04MzcsNyArODM3LDcgQEAgdm9pZCBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDo6YWRqdXN0SW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
IHBhcmVudFMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgdGV4dEJs
b2NrU3R5bGUuc2V0RGlyZWN0aW9uKFRleHREaXJlY3Rpb246OkxUUik7CisgICAgICAgIHRleHRC
bG9ja1N0eWxlLnNldERpcmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb246OkxUUik7CiAgICAgfQog
I2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAppbmRleCA0
ZTk4NTE3MGMyODM2ZTYyZjI0MmJkYTM4NDAxNDg1YWMwNzlkMTQ3Li41NTI5MjI3N2Q5NWViZjMz
YzA5ZmEyZTUwODM0OTIwZjI0ODU0ZDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUaXRsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxl
RWxlbWVudC5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgU3RyaW5nIEhUTUxUaXRsZUVsZW1lbnQ6OnRl
eHQoKSBjb25zdAogCiBTdHJpbmdXaXRoRGlyZWN0aW9uIEhUTUxUaXRsZUVsZW1lbnQ6OmNvbXB1
dGVkVGV4dFdpdGhEaXJlY3Rpb24oKQogewotICAgIGF1dG8gZGlyZWN0aW9uID0gVGV4dERpcmVj
dGlvbjo6TFRSOworICAgIGF1dG8gZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7
CiAgICAgaWYgKGF1dG8qIGNvbXB1dGVkU3R5bGUgPSB0aGlzLT5jb21wdXRlZFN0eWxlKCkpCiAg
ICAgICAgIGRpcmVjdGlvbiA9IGNvbXB1dGVkU3R5bGUtPmRpcmVjdGlvbigpOwogICAgIGVsc2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCmluZGV4IDRkNTk1MGUwY2MyYmNjZTRhYTMyZGIyN2RhM2Q4MDdhMDEwOTdk
OTUuLjZlOWU1MTQ0MGQxNGVmYWI4YzA1ZTVjNjdjMjJkODM1NzA5ODliZDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcApAQCAtMTU3LDI4ICsxNTcsMjggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldEZvbnRXaXRob3V0VXBkYXRpbmdTdHlsZShjb25zdCBTdHJpbmcmIG5ld0ZvbnQKICAgICBB
U1NFUlQoc3RhdGUoKS5mb250LmlzUG9wdWxhdGVkKCkpOwogfQogCi1pbmxpbmUgVGV4dERpcmVj
dGlvbiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvVGV4dERpcmVjdGlvbihEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5bGUpIGNvbnN0Citpbmxp
bmUgUEFMOjpUZXh0RGlyZWN0aW9uIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9UZXh0RGly
ZWN0aW9uKERpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiogY29tcHV0ZWRT
dHlsZSkgY29uc3QKIHsKICAgICBhdXRvKiBzdHlsZSA9IGNvbXB1dGVkU3R5bGUgfHwgZGlyZWN0
aW9uID09IERpcmVjdGlvbjo6SW5oZXJpdCA/IGNhbnZhcygpLmV4aXN0aW5nQ29tcHV0ZWRTdHls
ZSgpIDogbnVsbHB0cjsKICAgICBpZiAoY29tcHV0ZWRTdHlsZSkKICAgICAgICAgKmNvbXB1dGVk
U3R5bGUgPSBzdHlsZTsKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRGlyZWN0
aW9uOjpJbmhlcml0OgotICAgICAgICByZXR1cm4gc3R5bGUgPyBzdHlsZS0+ZGlyZWN0aW9uKCkg
OiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIHJldHVybiBzdHlsZSA/IHN0eWxlLT5kaXJl
Y3Rpb24oKSA6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIGNhc2UgRGlyZWN0aW9uOjpS
dGw6Ci0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgIHJldHVybiBQ
QUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAgICBjYXNlIERpcmVjdGlvbjo6THRyOgotICAgICAg
ICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFI7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
OwogfQogCiBDYW52YXNEaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaXJlY3Rp
b24oKSBjb25zdAogewogICAgIGlmIChzdGF0ZSgpLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb246Oklu
aGVyaXQpCiAgICAgICAgIGNhbnZhcygpLmRvY3VtZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgp
OwotICAgIHJldHVybiB0b1RleHREaXJlY3Rpb24oc3RhdGUoKS5kaXJlY3Rpb24pID09IFRleHRE
aXJlY3Rpb246OlJUTCA/IENhbnZhc0RpcmVjdGlvbjo6UnRsIDogQ2FudmFzRGlyZWN0aW9uOjpM
dHI7CisgICAgcmV0dXJuIHRvVGV4dERpcmVjdGlvbihzdGF0ZSgpLmRpcmVjdGlvbikgPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpSVEwgPyBDYW52YXNEaXJlY3Rpb246OlJ0bCA6IENhbnZhc0RpcmVj
dGlvbjo6THRyOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBkb3VibGUgeCwgZG91YmxlIHksIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiBtYXhXaWR0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmgKaW5kZXggNmI0OGU4Y2NmNTg4N2YxODliNWJhNjZkYTVm
YjM3ZTM3NjEzNDQxNC4uOGQ4NDFmZmY4ODEwYjU1MGRiNWQ3YmJlOGM0ZjE0OGMzYmJkZjUzZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd0Zv
Y3VzSWZOZWVkZWRJbnRlcm5hbChjb25zdCBQYXRoJiwgRWxlbWVudCYpOwogCi0gICAgVGV4dERp
cmVjdGlvbiB0b1RleHREaXJlY3Rpb24oQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6RGly
ZWN0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5bGUgPSBudWxscHRyKSBjb25z
dDsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdG9UZXh0RGlyZWN0aW9uKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OkRpcmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0
eWxlID0gbnVsbHB0cikgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwCmluZGV4IDZkZWZlYjgxMmMzNzIyYzM4ZWEyZmM4ZDA3OTFmYWUyOWIx
NjBkNmUuLjI3ZTBlZjk0Y2M1YTZiYjRhZjY0OWRmZTUyNGI2N2E2NDI1ZWRhYzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwCkBAIC0yMzk4LDcgKzIzOTgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmRyYXdUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgZG91YmxlIHgsIGRv
dWJsZQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgbm9ybWFsaXplZFRleHQgPSBub3Jt
YWxpemVTcGFjZXModGV4dCk7Ci0gICAgYXV0byBkaXJlY3Rpb24gPSAoc3RhdGUoKS5kaXJlY3Rp
b24gPT0gRGlyZWN0aW9uOjpSdGwpID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlv
bjo6TFRSOworICAgIGF1dG8gZGlyZWN0aW9uID0gKHN0YXRlKCkuZGlyZWN0aW9uID09IERpcmVj
dGlvbjo6UnRsKSA/IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFI7CiAgICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAwLCBBbGxvd1Jp
Z2h0RXhwYW5zaW9uLCBkaXJlY3Rpb24sIGZhbHNlLCB0cnVlKTsKICAgICBkcmF3VGV4dFVuY2hl
Y2tlZCh0ZXh0UnVuLCB4LCB5LCBmaWxsLCBtYXhXaWR0aCk7CiB9CkBAIC0yNTIwLDcgKzI1MjAs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2Vk
KGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGRvdQogUmVmPFRleHRNZXRyaWNzPiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjptZWFzdXJlVGV4dEludGVybmFsKGNvbnN0IFN0cmluZyYgdGV4
dCkKIHsKICAgICBTdHJpbmcgbm9ybWFsaXplZFRleHQgPSBub3JtYWxpemVTcGFjZXModGV4dCk7
Ci0gICAgYXV0byBkaXJlY3Rpb24gPSAoc3RhdGUoKS5kaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpS
dGwpID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOworICAgIGF1dG8g
ZGlyZWN0aW9uID0gKHN0YXRlKCkuZGlyZWN0aW9uID09IERpcmVjdGlvbjo6UnRsKSA/IFBBTDo6
VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgVGV4dFJ1
biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAwLCBBbGxvd1JpZ2h0RXhwYW5zaW9uLCBkaXJl
Y3Rpb24sIGZhbHNlLCB0cnVlKTsKICAgICByZXR1cm4gbWVhc3VyZVRleHRJbnRlcm5hbCh0ZXh0
UnVuKTsKIH0KQEAgLTI1NTUsNyArMjU1NSw3IEBAIFJlZjxUZXh0TWV0cmljcz4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6bWVhc3VyZVRleHRJbnRlcm5hbChjb25zdCBUZXh0UnVuCiAg
ICAgcmV0dXJuIG1ldHJpY3M7CiB9CiAKLUZsb2F0UG9pbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6dGV4dE9mZnNldChmbG9hdCB3aWR0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24p
CitGbG9hdFBvaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRPZmZzZXQoZmxv
YXQgd2lkdGgsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgYXV0byYgZm9u
dE1ldHJpY3MgPSBmb250UHJveHkoKS0+Zm9udE1ldHJpY3MoKTsKICAgICBGbG9hdFBvaW50IG9m
ZnNldDsKQEAgLTI1NzcsNyArMjU3Nyw3IEBAIEZsb2F0UG9pbnQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6dGV4dE9mZnNldChmbG9hdCB3aWR0aCwgVGV4dERpcmVjdGlvbiBkCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAotICAgIGJvb2wgaXNSVEwgPSBkaXJlY3Rpb24gPT0gVGV4dERp
cmVjdGlvbjo6UlRMOworICAgIGJvb2wgaXNSVEwgPSBkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpSVEw7CiAgICAgYXV0byBhbGlnbiA9IHN0YXRlKCkudGV4dEFsaWduOwogICAgIGlm
IChhbGlnbiA9PSBTdGFydFRleHRBbGlnbikKICAgICAgICAgYWxpZ24gPSBpc1JUTCA/IFJpZ2h0
VGV4dEFsaWduIDogTGVmdFRleHRBbGlnbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAppbmRleCBkNGFlMGU0
MTBjYzk1M2U5YjZhODdlNDI2YzNlOWYzZWZmMzQyNDQ2Li44MTg4YTcwMzM5ZTZjNzI4ZWFiNjUz
OWE0ZDk2M2U5ODM2ZDNmMjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCkBAIC0zOTYsNyArMzk2LDcg
QEAgcHJpdmF0ZToKICAgICAvLyBUaGVyZWZvcmUsIGFsbCBmb250IG9wZXJhdGlvbnMgbXVzdCBw
YXNzIHRocm91Z2ggdGhlIHByb3h5LgogICAgIHZpcnR1YWwgY29uc3QgRm9udFByb3h5KiBmb250
UHJveHkoKSB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICBGbG9hdFBvaW50IHRleHRPZmZzZXQo
ZmxvYXQgd2lkdGgsIFRleHREaXJlY3Rpb24pOworICAgIEZsb2F0UG9pbnQgdGV4dE9mZnNldChm
bG9hdCB3aWR0aCwgUEFMOjpUZXh0RGlyZWN0aW9uKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgTWF4U2F2ZUNvdW50ID0gMTAyNCAqIDE2OwogICAgIFZlY3RvcjxTdGF0ZSwgMT4g
bV9zdGF0ZVN0YWNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRo
dW1iRWxlbWVudC5jcHAKaW5kZXggYzMwNzcwN2YzYTcyNGQ2MjA4MDMzNjA4MmNjOGRlNTg3NWE3
MGI5Zi4uNGZkNjI2YWZlOGE3ZWUxZjkyNTBmZjBlZGE2ODc1ZGFmNWM2NDdkZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCkBAIC0x
NjksMTIgKzE2OSwxMiBAQCB2b2lkIFJlbmRlclNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KCkKICAg
ICBhdXRvJiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KCktPnNo
YWRvd0hvc3QoKSk7CiAgICAgYm9vbCBpc1ZlcnRpY2FsID0gaGFzVmVydGljYWxBcHBlYXJhbmNl
KGlucHV0KTsKICAgICBtdXRhYmxlU3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVydGljYWwg
PyBGbGV4RGlyZWN0aW9uOjpDb2x1bW4gOiBGbGV4RGlyZWN0aW9uOjpSb3cpOwotICAgIFRleHRE
aXJlY3Rpb24gb2xkVGV4dERpcmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgUEFM
OjpUZXh0RGlyZWN0aW9uIG9sZFRleHREaXJlY3Rpb24gPSBzdHlsZSgpLmRpcmVjdGlvbigpOwog
ICAgIGlmIChpc1ZlcnRpY2FsKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXb3JrIGFyb3VuZCByb3Vu
ZGluZyBpc3N1ZXMgaW4gUlRMIHZlcnRpY2FsIHNsaWRlcnMuIFdlIHdhbnQgdGhlbSB0bwogICAg
ICAgICAvLyByZW5kZXIgaWRlbnRpY2FsbHkgdG8gTFRSIHZlcnRpY2FsIHNsaWRlcnMuIFdlIGNh
biByZW1vdmUgdGhpcyB3b3JrIGFyb3VuZCB3aGVuCiAgICAgICAgIC8vIHN1YnBpeGVsIHJlbmRl
cmluZyBpcyBlbmFibGVkIG9uIGFsbCBwb3J0cy4KLSAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0
RGlyZWN0aW9uKFRleHREaXJlY3Rpb246OkxUUik7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNl
dERpcmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb246OkxUUik7CiAgICAgfQogCiAgICAgUmVuZGVy
Qm94KiB0aHVtYiA9IGlucHV0LnNsaWRlclRodW1iRWxlbWVudCgpID8gaW5wdXQuc2xpZGVyVGh1
bWJFbGVtZW50KCktPnJlbmRlckJveCgpIDogbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCmluZGV4IDVi
OWEyZDM5MjA0NzkxMGU3OTUyZjNlNjMyOTJkNzdhOGY5ZmIxZmMuLjYxMTBmNDk2MzI3NmZjMTFh
YjAzZmY1N2RkYzllOWRjNjUyNGEzNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcApAQCAtMTExLDcgKzExMSw3
IEBAIHN0ZDo6b3B0aW9uYWw8U3R5bGU6OkVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjCiAgICAgbmV3U3R5bGUtPnNldEZsZXhHcm93KDEp
OwogICAgIG5ld1N0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGggeyAwLCBMZW5ndGhUeXBlOjpGaXhl
ZCB9KTsgLy8gTmVlZGVkIGZvciBjb3JyZWN0IHNocmlua2luZy4KICAgICBuZXdTdHlsZS0+c2V0
RGlzcGxheShEaXNwbGF5VHlwZTo6QmxvY2spOwotICAgIG5ld1N0eWxlLT5zZXREaXJlY3Rpb24o
VGV4dERpcmVjdGlvbjo6TFRSKTsKKyAgICBuZXdTdHlsZS0+c2V0RGlyZWN0aW9uKFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSKTsKICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBzaGFkb3cgRE9NIHRv
IGJlIGVkaXRhYmxlLCBzbyB3ZSBzZXQgdGhpcyBibG9jayB0byByZWFkLW9ubHkgaW4gY2FzZSB0
aGUgaW5wdXQgaXRzZWxmIGlzIGVkaXRhYmxlLgogICAgIG5ld1N0eWxlLT5zZXRVc2VyTW9kaWZ5
KFVzZXJNb2RpZnk6OlJlYWRPbmx5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lSXRlbXNCdWlsZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUl0ZW1z
QnVpbGRlci5jcHAKaW5kZXggNGJmNDA5OWE3ZThiM2YyYTA4ZDkxNWU5MDk2YTVlYjNkNTQzZDll
MS4uZGNhNWQ1ZTAwMjRhM2Y0NDY4YzgyMjIwYmM1N2Q2MDM3ODFjOTNlOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lSXRl
bXNCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS9JbmxpbmVJdGVtc0J1aWxkZXIuY3BwCkBAIC0xNzIsMzAgKzE3MiwzMCBAQCBz
dGF0aWMgdm9pZCByZXBsYWNlTm9uUHJlc2VydmVkTmV3TGluZUNoYXJhY3RlcnNBbmRBcHBlbmQo
Y29uc3QgSW5saW5lVGV4dEJveCYgaQogfQogCiBzdHJ1Y3QgQmlkaUNvbnRleHQgewotICAgIEVV
bmljb2RlQmlkaSB1bmljb2RlQmlkaTsKKyAgICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlk
aTsKICAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24geyBmYWxzZSB9OwogfTsKIHVzaW5n
IEJpZGlDb250ZXh0U3RhY2sgPSBWZWN0b3I8QmlkaUNvbnRleHQ+Owotc3RhdGljIGlubGluZSB2
b2lkIGhhbmRsZUVudGVyRXhpdEJpZGlDb250ZXh0KFN0cmluZ0J1aWxkZXImIHBhcmFncmFwaENv
bnRlbnRCdWlsZGVyLCBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGksIGJvb2wgaXNMVFIsIGJvb2wg
aXNFbnRlcmluZ0JpZGksIEJpZGlDb250ZXh0U3RhY2smIGJpZGlDb250ZXh0U3RhY2spCitzdGF0
aWMgaW5saW5lIHZvaWQgaGFuZGxlRW50ZXJFeGl0QmlkaUNvbnRleHQoU3RyaW5nQnVpbGRlciYg
cGFyYWdyYXBoQ29udGVudEJ1aWxkZXIsIFBBTDo6RVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpLCBi
b29sIGlzTFRSLCBib29sIGlzRW50ZXJpbmdCaWRpLCBCaWRpQ29udGV4dFN0YWNrJiBiaWRpQ29u
dGV4dFN0YWNrKQogewogICAgIHN3aXRjaCAodW5pY29kZUJpZGkpIHsKLSAgICBjYXNlIEVVbmlj
b2RlQmlkaTo6VUJOb3JtYWw6CisgICAgY2FzZSBQQUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWw6
CiAgICAgICAgIC8vIFRoZSBib3ggZG9lcyBub3Qgb3BlbiBhbiBhZGRpdGlvbmFsIGxldmVsIG9m
IGVtYmVkZGluZyB3aXRoIHJlc3BlY3QgdG8gdGhlIGJpZGlyZWN0aW9uYWwgYWxnb3JpdGhtLgog
ICAgICAgICAvLyBGb3IgaW5saW5lIGJveGVzLCBpbXBsaWNpdCByZW9yZGVyaW5nIHdvcmtzIGFj
cm9zcyBib3ggYm91bmRhcmllcy4KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFVW5pY29kZUJp
ZGk6OkVtYmVkOgorICAgIGNhc2UgUEFMOjpFVW5pY29kZUJpZGk6OkVtYmVkOgogICAgICAgICBw
YXJhZ3JhcGhDb250ZW50QnVpbGRlci5hcHBlbmQoaXNFbnRlcmluZ0JpZGkgPyAoaXNMVFIgPyBs
ZWZ0VG9SaWdodEVtYmVkIDogcmlnaHRUb0xlZnRFbWJlZCkgOiBwb3BEaXJlY3Rpb25hbEZvcm1h
dHRpbmcpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEVVbmljb2RlQmlkaTo6T3ZlcnJpZGU6
CisgICAgY2FzZSBQQUw6OkVVbmljb2RlQmlkaTo6T3ZlcnJpZGU6CiAgICAgICAgIHBhcmFncmFw
aENvbnRlbnRCdWlsZGVyLmFwcGVuZChpc0VudGVyaW5nQmlkaSA/IChpc0xUUiA/IGxlZnRUb1Jp
Z2h0T3ZlcnJpZGUgOiByaWdodFRvTGVmdE92ZXJyaWRlKSA6IHBvcERpcmVjdGlvbmFsRm9ybWF0
dGluZyk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRVVuaWNvZGVCaWRpOjpJc29sYXRlOgor
ICAgIGNhc2UgUEFMOjpFVW5pY29kZUJpZGk6Oklzb2xhdGU6CiAgICAgICAgIHBhcmFncmFwaENv
bnRlbnRCdWlsZGVyLmFwcGVuZChpc0VudGVyaW5nQmlkaSA/IChpc0xUUiA/IGxlZnRUb1JpZ2h0
SXNvbGF0ZSA6IHJpZ2h0VG9MZWZ0SXNvbGF0ZSkgOiBwb3BEaXJlY3Rpb25hbElzb2xhdGUpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEVVbmljb2RlQmlkaTo6UGxhaW50ZXh0OgorICAgIGNh
c2UgUEFMOjpFVW5pY29kZUJpZGk6OlBsYWludGV4dDoKICAgICAgICAgcGFyYWdyYXBoQ29udGVu
dEJ1aWxkZXIuYXBwZW5kKGlzRW50ZXJpbmdCaWRpID8gZmlyc3RTdHJvbmdJc29sYXRlIDogcG9w
RGlyZWN0aW9uYWxJc29sYXRlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFVW5pY29kZUJp
ZGk6Oklzb2xhdGVPdmVycmlkZToKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRl
T3ZlcnJpZGU6CiAgICAgICAgIGlmIChpc0VudGVyaW5nQmlkaSkgewogICAgICAgICAgICAgcGFy
YWdyYXBoQ29udGVudEJ1aWxkZXIuYXBwZW5kKGZpcnN0U3Ryb25nSXNvbGF0ZSk7CiAgICAgICAg
ICAgICBwYXJhZ3JhcGhDb250ZW50QnVpbGRlci5hcHBlbmQoaXNMVFIgPyBsZWZ0VG9SaWdodE92
ZXJyaWRlIDogcmlnaHRUb0xlZnRPdmVycmlkZSk7CkBAIC0yNDEsNyArMjQxLDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGJ1aWxkQmlkaVBhcmFncmFwaChjb25zdCBSZW5kZXJTdHlsZSYgcm9vdFN0
eWxlLCBjb25zdCBJbmxpbmUKICAgICAgICAgfSBlbHNlIGlmIChpbmxpbmVJdGVtLmlzSW5saW5l
Qm94U3RhcnQoKSB8fCBpbmxpbmVJdGVtLmlzSW5saW5lQm94RW5kKCkpIHsKICAgICAgICAgICAg
IC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3Mtd3JpdGluZy1tb2Rlcy8jdW5pY29kZS1i
aWRpCiAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9IGlubGluZUl0ZW0uc3R5bGUoKTsKLSAgICAg
ICAgICAgIGF1dG8gaW5pdGlhdGVzQ29udHJvbENoYXJhY3RlciA9IHN0eWxlLnJ0bE9yZGVyaW5n
KCkgPT0gT3JkZXI6OkxvZ2ljYWwgJiYgc3R5bGUudW5pY29kZUJpZGkoKSAhPSBFVW5pY29kZUJp
ZGk6OlVCTm9ybWFsOworICAgICAgICAgICAgYXV0byBpbml0aWF0ZXNDb250cm9sQ2hhcmFjdGVy
ID0gc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6TG9naWNhbCAmJiBzdHlsZS51bmljb2Rl
QmlkaSgpICE9IFBBTDo6RVVuaWNvZGVCaWRpOjpVQk5vcm1hbDsKICAgICAgICAgICAgIGlmICgh
aW5pdGlhdGVzQ29udHJvbENoYXJhY3RlcikgewogICAgICAgICAgICAgICAgIC8vIE9wYXF1ZSBp
dGVtcyBkbyBub3QgaGF2ZSBwb3NpdGlvbiBpbiB0aGUgYmlkaSBwYXJhZ3JhcGguIFRoZXkgaW5o
ZXJpdCB0aGVpciBiaWRpIGxldmVsIGZyb20gdGhlIG5leHQgaW5saW5lIGl0ZW0uCiAgICAgICAg
ICAgICAgICAgaW5saW5lSXRlbU9mZnNldExpc3QudW5jaGVja2VkQXBwZW5kKHsgfSk7CkBAIC0z
MDYsNyArMzA2LDcgQEAgdm9pZCBJbmxpbmVJdGVtc0J1aWxkZXI6OmJyZWFrQW5kQ29tcHV0ZUJp
ZGlMZXZlbHMoSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQogICAgIH0pOwogCiAgICAgVUJpRGlM
ZXZlbCByb290QmlkaUxldmVsID0gVUJJRElfREVGQVVMVF9MVFI7Ci0gICAgYm9vbCB1c2VIZXVy
aXN0aWNCYXNlRGlyZWN0aW9uID0gcm9vdCgpLnN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBFVW5p
Y29kZUJpZGk6OlBsYWludGV4dDsKKyAgICBib29sIHVzZUhldXJpc3RpY0Jhc2VEaXJlY3Rpb24g
PSByb290KCkuc3R5bGUoKS51bmljb2RlQmlkaSgpID09IFBBTDo6RVVuaWNvZGVCaWRpOjpQbGFp
bnRleHQ7CiAgICAgaWYgKCF1c2VIZXVyaXN0aWNCYXNlRGlyZWN0aW9uKQogICAgICAgICByb290
QmlkaUxldmVsID0gcm9vdCgpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVUJJ
RElfTFRSIDogVUJJRElfUlRMOwogCkBAIC01MjQsMTQgKzUyNCwxNCBAQCB2b2lkIElubGluZUl0
ZW1zQnVpbGRlcjo6aGFuZGxlSW5saW5lQm94U3RhcnQoY29uc3QgQm94JiBpbmxpbmVCb3gsIElu
bGluZUl0ZW1zJgogewogICAgIGlubGluZUl0ZW1zLmFwcGVuZCh7IGlubGluZUJveCwgSW5saW5l
SXRlbTo6VHlwZTo6SW5saW5lQm94U3RhcnQgfSk7CiAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVC
b3guc3R5bGUoKTsKLSAgICBtX25lZWRzVmlzdWFsUmVvcmRlcmluZyA9IG1fbmVlZHNWaXN1YWxS
ZW9yZGVyaW5nIHx8ICFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgfHwgKHN0eWxlLnJ0
bE9yZGVyaW5nKCkgPT0gT3JkZXI6OkxvZ2ljYWwgJiYgc3R5bGUudW5pY29kZUJpZGkoKSAhPSBF
VW5pY29kZUJpZGk6OlVCTm9ybWFsKTsKKyAgICBtX25lZWRzVmlzdWFsUmVvcmRlcmluZyA9IG1f
bmVlZHNWaXN1YWxSZW9yZGVyaW5nIHx8ICFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
fHwgKHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gT3JkZXI6OkxvZ2ljYWwgJiYgc3R5bGUudW5pY29k
ZUJpZGkoKSAhPSBQQUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWwpOwogfQogCiB2b2lkIElubGlu
ZUl0ZW1zQnVpbGRlcjo6aGFuZGxlSW5saW5lQm94RW5kKGNvbnN0IEJveCYgaW5saW5lQm94LCBJ
bmxpbmVJdGVtcyYgaW5saW5lSXRlbXMpCiB7CiAgICAgaW5saW5lSXRlbXMuYXBwZW5kKHsgaW5s
aW5lQm94LCBJbmxpbmVJdGVtOjpUeXBlOjpJbmxpbmVCb3hFbmQgfSk7CiAgICAgLy8gSW5saW5l
IGJveCBlbmQgaXRlbSBpdHNlbGYgY2FuIG5vdCB0cmlnZ2VyIGJpZGkgY29udGVudC4KLSAgICBB
U1NFUlQobmVlZHNWaXN1YWxSZW9yZGVyaW5nKCkgfHwgaW5saW5lQm94LnN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpIHx8IGlubGluZUJveC5zdHlsZSgpLnJ0bE9yZGVyaW5nKCkgPT0g
T3JkZXI6OlZpc3VhbCB8fCBpbmxpbmVCb3guc3R5bGUoKS51bmljb2RlQmlkaSgpID09IEVVbmlj
b2RlQmlkaTo6VUJOb3JtYWwpOworICAgIEFTU0VSVChuZWVkc1Zpc3VhbFJlb3JkZXJpbmcoKSB8
fCBpbmxpbmVCb3guc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgfHwgaW5saW5lQm94
LnN0eWxlKCkucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6VmlzdWFsIHx8IGlubGluZUJveC5zdHls
ZSgpLnVuaWNvZGVCaWRpKCkgPT0gUEFMOjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsKTsKIH0KIAog
dm9pZCBJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUxldmVsQm94KGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmggYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5l
LmgKaW5kZXggNDBmOTVhYjc1NGRlYTY5YWQ1OWI4MjJlMTYyYjAzMGMwM2VmYjM1My4uY2ZmZmE5
Y2QwNDRmOTlhZTcwMTE3YThmMDMyODMxOTVmOGFkNDZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxp
bmUuaApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgSW5saW5lTGF5b3V0VW5p
dCB0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGg7IH0KIAogICAgICAgICBib29sIHNob3VsZFRyYWlsaW5nV2hpdGVzcGFjZUhh
bmcoKSBjb25zdDsKLSAgICAgICAgVGV4dERpcmVjdGlvbiBpbmxpbmVEaXJlY3Rpb24oKSBjb25z
dDsKKyAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGlubGluZURpcmVjdGlvbigpIGNvbnN0Owog
ICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxldHRlclNwYWNpbmcoKSBjb25zdDsKICAgICAgICAg
Ym9vbCBoYXNUZXh0Q29tYmluZSgpIGNvbnN0OwogCkBAIC0xNTQsNyArMTU0LDcgQEAgcHVibGlj
OgogICAgICAgICBJbmxpbmVEaXNwbGF5OjpCb3g6OkV4cGFuc2lvbiBtX2V4cGFuc2lvbjsKICAg
ICAgICAgc3RydWN0IFN0eWxlIHsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkVHJhaWxpbmdXaGl0
ZXNwYWNlSGFuZyB7IGZhbHNlIH07Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIGlubGluZURp
cmVjdGlvbiB7IFRleHREaXJlY3Rpb246OlJUTCB9OworICAgICAgICAgICAgUEFMOjpUZXh0RGly
ZWN0aW9uIGlubGluZURpcmVjdGlvbiB7IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIH07CiAgICAg
ICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxldHRlclNwYWNpbmcgeyAwIH07CiAgICAgICAgICAg
ICBib29sIGhhc1RleHRDb21iaW5lIHsgZmFsc2UgfTsKICAgICAgICAgfTsKQEAgLTI2OCw3ICsy
NjgsNyBAQCBpbmxpbmUgYm9vbCBMaW5lOjpSdW46OnNob3VsZFRyYWlsaW5nV2hpdGVzcGFjZUhh
bmcoKSBjb25zdAogICAgIHJldHVybiBtX3N0eWxlLnNob3VsZFRyYWlsaW5nV2hpdGVzcGFjZUhh
bmc7CiB9CiAKLWlubGluZSBUZXh0RGlyZWN0aW9uIExpbmU6OlJ1bjo6aW5saW5lRGlyZWN0aW9u
KCkgY29uc3QKK2lubGluZSBQQUw6OlRleHREaXJlY3Rpb24gTGluZTo6UnVuOjppbmxpbmVEaXJl
Y3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBtX3N0eWxlLmlubGluZURpcmVjdGlvbjsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvckJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJh
dG9yQm94LmgKaW5kZXggODEzZjViMGU2NTkwMzQxM2ZmNDYyZTQ5ZTFmODkzNzgxODYzNmM3ZS4u
NjJkMWZhOTk5ZmM2OTU0MDA0ZTUzZTQ2ZWU4MjA2NGIwY2JmM2JiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94LmgKQEAg
LTc4LDggKzc4LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHJpZ2h0bW9zdENhcmV0T2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4aW11bUNhcmV0
T2Zmc2V0KCkgOiBtaW5pbXVtQ2FyZXRPZmZzZXQoKTsgfQogCiAgICAgdW5zaWduZWQgY2hhciBi
aWRpTGV2ZWwoKSBjb25zdDsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIGJpZGlMZXZlbCgpICUgMiA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rp
b246OkxUUjsgfQotICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUjsgfQorICAgIFBBTDo6VGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBQQUw6
OlRleHREaXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOyB9CisgICAgYm9v
bCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aW9uKCkgPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0KIAogICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0
aC5oCmluZGV4IDI1MmFhYjhmMzQ0MTE4NzRlMzFmYzI3MjM0ODQ3NGQ3ZGE0ZTcyOWYuLjRkZDNi
YTdhZGEyYzNhNjczNGZkNjI4ZWM0MDk3YjI5MmVlZWZhZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hN
b2Rlcm5QYXRoLmgKQEAgLTI2Nyw3ICsyNjcsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IExheW91
dEludGVncmF0aW9uOjpMaW5lJiBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50
LT5saW5lRm9yQm94KGJveCgpKTsgfQogCiAgICAgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyVGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKCkpOyB9Ci0g
ICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBiaWRpTGV2ZWwoKSAl
IDIgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBQQUw6
OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVsKCkgJSAy
ID8gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsgfQog
CiAgICAgUmVmUHRyPGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50PiBtX2lu
bGluZUNvbnRlbnQ7CiAgICAgc2l6ZV90IG1fYm94SW5kZXggeyAwIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JUZXh0Qm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRC
b3guY3BwCmluZGV4IDI2MGNkOTk4ZDUyZDJhYWY0ZDkyNTUyZjBjMmU2ZDIyYTYxNDc4MDAuLjA2
ZWY2NGNjYzJhMGIwZjhlYmU0YmUzYzQ4ZDZhYzVmMDAxMzRkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRC
b3guY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIGZsb2F0IFRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0
KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0KCk7CiAK
ICAgICBhdXRvIFtzdGFydE9mZnNldCwgZW5kT2Zmc2V0XSA9IFsmXSB7Ci0gICAgICAgIGlmIChk
aXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGlmIChkaXJlY3Rpb24o
KSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkKICAgICAgICAgICAgIHJldHVybiBzdGQ6OnBh
aXIgeyBzZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcChvZmZzZXQpLCBsZW5ndGgoKSB9OwogICAgICAg
ICByZXR1cm4gc3RkOjpwYWlyIHsgMHUsIHNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKG9mZnNldCkg
fTsKICAgICB9KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5jcHAKaW5kZXggNmUzMDM0NTE3
MzRmYzA4NzdjMzU5OTg0OGQ4N2Q4M2Q0NTZkMjA1OC4uMTIxOTA3ZmVhM2IzMjAxNmYyZTI5ODJi
ZGI2YWMxYWY2NGQ1MzRkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcApAQCAtNDM0
LDcgKzQzNCw3IEBAIHN0YXRpYyBPcHRpb25TZXQ8QXZvaWRhbmNlUmVhc29uPiBjYW5Vc2VGb3JT
dHlsZShjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwKICAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzT3ZlcmZsb3dOb3RWaXNpYmxlLCByZWFzb25zLCBp
bmNsdWRlUmVhc29ucyk7CiAgICAgaWYgKHN0eWxlLnRleHRPdmVyZmxvdygpID09IFRleHRPdmVy
Zmxvdzo6RWxsaXBzaXMpCiAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
Rmxvd0hhc1RleHRPdmVyZmxvdywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmICgh
c3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8IChpczxSZW5kZXJCbG9ja0Zsb3c+KHJl
bmRlcmVyKSAmJiBzdHlsZS51bmljb2RlQmlkaSgpID09IEVVbmljb2RlQmlkaTo6UGxhaW50ZXh0
KSkKKyAgICBpZiAoIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSB8fCAoaXM8UmVuZGVy
QmxvY2tGbG93PihyZW5kZXJlcikgJiYgc3R5bGUudW5pY29kZUJpZGkoKSA9PSBQQUw6OkVVbmlj
b2RlQmlkaTo6UGxhaW50ZXh0KSkKICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93TWF5Tm90QmVMVFIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICBpZiAo
c3R5bGUud3JpdGluZ01vZGUoKSAhPSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20pCiAgICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0lzTm90VG9wVG9Cb3R0b20sIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApp
bmRleCBjZDVmMjhmMTQ2MWU4YTJlNmFkYmMwZDAwZTU4ZGVlNTZkNGQwNzM4Li4wOTkxOTk0YWRl
MjE1MjljMDY3YjJjNDQzY2ZiMmIyMjUwM2MxMTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oCkBAIC0xMjMsNyArMTIzLDcgQEAgY2xhc3MgRW1wdHlDaHJvbWVDbGllbnQgOiBw
dWJsaWMgQ2hyb21lQ2xpZW50IHsKICAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUm
LCBjb25zdCBJbnRTaXplJikgY29uc3QgZmluYWwgeyB9CiAgICAgdm9pZCBpbnRyaW5zaWNDb250
ZW50c1NpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmKSBjb25zdCBmaW5hbCB7IH0KIAotICAgIHZv
aWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVk
LCBjb25zdCBTdHJpbmcmLCBUZXh0RGlyZWN0aW9uKSBmaW5hbCB7IH0KKyAgICB2b2lkIG1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCwgY29uc3Qg
U3RyaW5nJiwgUEFMOjpUZXh0RGlyZWN0aW9uKSBmaW5hbCB7IH0KIAogICAgIHZvaWQgcHJpbnQo
RnJhbWUmLCBjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJikgZmluYWwgeyB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmNwcAppbmRleCAyMmIwMGRkOTRkYWZhZjI1NTE4ODk5OTk2NmYxZjNiZmYzNDAwNDgw
Li43Njc4NGNjZThmNDVmMmIyY2FkOTM4NjVlMzYxNmIxNWNlYjRhNzZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuY3BwCkBAIC0zNDAsMTQgKzM0MCwxNCBAQCB2b2lkIENocm9tZTo6bW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBtb2RpZgog
ICAgICAgICBtX3BhZ2UubWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMo
cmVzdWx0LmFic29sdXRlTGlua1VSTCgpLmhvc3QoKS50b1N0cmluZygpKTsKIAogICAgIFN0cmlu
ZyB0b29sVGlwOwotICAgIFRleHREaXJlY3Rpb24gdG9vbFRpcERpcmVjdGlvbjsKKyAgICBQQUw6
OlRleHREaXJlY3Rpb24gdG9vbFRpcERpcmVjdGlvbjsKICAgICBnZXRUb29sVGlwKHJlc3VsdCwg
dG9vbFRpcCwgdG9vbFRpcERpcmVjdGlvbik7CiAgICAgbV9jbGllbnQubW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQocmVzdWx0LCBtb2RpZmllckZsYWdzLCB0b29sVGlwLCB0b29sVGlwRGlyZWN0aW9u
KTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQobV9wYWdlLCByZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOwogfQogCi12b2lkIENocm9tZTo6Z2V0
VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIFN0cmluZyYgdG9vbFRpcCwgVGV4
dERpcmVjdGlvbiYgdG9vbFRpcERpcmVjdGlvbikKK3ZvaWQgQ2hyb21lOjpnZXRUb29sVGlwKGNv
bnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgU3RyaW5nJiB0b29sVGlwLCBQQUw6OlRleHREaXJl
Y3Rpb24mIHRvb2xUaXBEaXJlY3Rpb24pCiB7CiAgICAgLy8gRmlyc3QgcHJpb3JpdHkgaXMgYSBw
b3RlbnRpYWwgdG9vbFRpcCByZXByZXNlbnRpbmcgYSBzcGVsbGluZyBvciBncmFtbWFyIGVycm9y
CiAgICAgdG9vbFRpcCA9IHJlc3VsdC5zcGVsbGluZ1Rvb2xUaXAodG9vbFRpcERpcmVjdGlvbik7
CkBAIC0zNjQsNyArMzY0LDcgQEAgdm9pZCBDaHJvbWU6OmdldFRvb2xUaXAoY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJlY3QKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChmb3JtLT5yZW5kZXJlcigpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBmb3JtLT5yZW5kZXJlcigpLT5zdHlsZSgpLmRpcmVj
dGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQpAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgQ2hyb21lOjpnZXRUb29sVGlwKGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0CiAgICAg
ICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBwYXNzIHRoaXMgVVJMIHRocm91Z2ggdXNlclZpc2li
bGVTdHJpbmcgb25jZSB0aGF0J3MgaW4gV2ViQ29yZQogICAgICAgICAgICAgdG9vbFRpcCA9IHJl
c3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKTsKICAgICAgICAgICAgIC8vIFVSTCBhbHdh
eXMgZGlzcGxheSBhcyBMVFIuCi0gICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gVGV4dERp
cmVjdGlvbjo6TFRSOworICAgICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zOTcsNyArMzk3LDcgQEAgdm9p
ZCBDaHJvbWU6OmdldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBTdHJpbmcm
IHRvb2xUaXAsIFRleHREaXJlY3QKICAgICAgICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbnMg
ZG9uJ3QgdXNlIHRleHQgZGlyZWN0aW9uIGluZm9ybWF0aW9uIGZvcgogICAgICAgICAgICAgICAg
IC8vIENocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQuIFdlJ2xsIHdvcmsgb24g
dG9vbHRpcCB0ZXh0CiAgICAgICAgICAgICAgICAgLy8gZGlyZWN0aW9uIGR1cmluZyBiaWRpIGNs
ZWFudXAgaW4gZm9ybSBpbnB1dHMuCi0gICAgICAgICAgICAgICAgdG9vbFRpcERpcmVjdGlvbiA9
IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuaAppbmRleCAxMjQzOWMxMGNjM2ZjMjYyODQ5Yzc3OGZlYTY5NmU4ZmQ0
MjkzNTUzLi44MWQ1N2NhYjA2OWQ4MDEwNTQ4MjU3MGZlMzlkN2VhOTc5ZWU2MTFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lLmgKQEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZv
aWQgbm90aWZ5UG9wdXBPcGVuaW5nT2JzZXJ2ZXJzKCkgY29uc3Q7CiAKLSAgICB2b2lkIGdldFRv
b2xUaXAoY29uc3QgSGl0VGVzdFJlc3VsdCYsIFN0cmluZyYsIFRleHREaXJlY3Rpb24mKTsKKyAg
ICB2b2lkIGdldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlc3VsdCYsIFN0cmluZyYsIFBBTDo6VGV4
dERpcmVjdGlvbiYpOwogCiAgICAgUGFnZSYgbV9wYWdlOwogICAgIENocm9tZUNsaWVudCYgbV9j
bGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCAzNTJlMDNmMGM0MTZiNjM4
MDBlNzE0MjllOGMyOGFlM2NkYzI2MDkzLi5jOGE4MDE3Y2JlYTZhMjY2NGE3Yjk2OWY4MTRhNTYz
M2E1YjE3Y2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTI0NCw3ICsyNDQs
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVW5hdmFpbGFibGVQbHVnaW5N
ZXNzYWdlQmVCdXR0b24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5
UmVhc29uKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCB1bmF2YWls
YWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoRWxlbWVudCYsIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQ
bHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2Rp
ZmllckZsYWdzLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJlY3Rpb24pID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3Vs
dCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgUEFMOjpU
ZXh0RGlyZWN0aW9uKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoRnJhbWUmLCBjb25z
dCBTdHJpbmdXaXRoRGlyZWN0aW9uJikgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
aW5kZXggMDYzN2YyZDlhNzljMGY5NDE3MjNkNzFkY2MxNzEzNmY0Yjc1YWM4NC4uMDM2NDI4YmE5
ODkzMDAzMmFmMWMzNmMyNWIxNTU0MDE4NjAyYTQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcApAQCAtMTY3LDE0ICsxNjcsMTQgQEAgUGFnaW5hdGlvbjo6TW9kZSBwYWdpbmF0aW9uTW9k
ZUZvclJlbmRlclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICAgICAgcmV0dXJu
IFBhZ2luYXRpb246OlVucGFnaW5hdGVkOwogCiAgICAgYm9vbCBpc0hvcml6b250YWxXcml0aW5n
TW9kZSA9IHN0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgVGV4dERpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uID0gc3R5bGUuZGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0
aW9uIHRleHREaXJlY3Rpb24gPSBzdHlsZS5kaXJlY3Rpb24oKTsKICAgICBXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSA9IHN0eWxlLndyaXRpbmdNb2RlKCk7CiAKICAgICAvLyBwYWdlZC14IGFsd2F5
cyBjb3JyZXNwb25kcyB0byBMZWZ0VG9SaWdodFBhZ2luYXRlZCBvciBSaWdodFRvTGVmdFBhZ2lu
YXRlZC4gSWYgdGhlIFdyaXRpbmdNb2RlCiAgICAgLy8gaXMgaG9yaXpvbnRhbCwgdGhlbiB3ZSB1
c2UgVGV4dERpcmVjdGlvbiB0byBjaG9vc2UgYmV0d2VlbiB0aG9zZSBvcHRpb25zLiBJZiB0aGUg
V3JpdGluZ01vZGUKICAgICAvLyBpcyB2ZXJ0aWNhbCwgdGhlbiB0aGUgZGlyZWN0aW9uIG9mIHRo
ZSB2ZXJ0aWNhbGl0eSBkaWN0YXRlcyB0aGUgY2hvaWNlLgogICAgIGlmIChvdmVyZmxvdyA9PSBP
dmVyZmxvdzo6UGFnZWRYKSB7Ci0gICAgICAgIGlmICgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUg
JiYgdGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHx8IHdyaXRpbmdNb2RlID09
IFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCkKKyAgICAgICAgaWYgKChpc0hvcml6b250YWxXcml0
aW5nTW9kZSAmJiB0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB8fCB3
cml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQpCiAgICAgICAgICAgICByZXR1
cm4gUGFnaW5hdGlvbjo6TGVmdFRvUmlnaHRQYWdpbmF0ZWQ7CiAgICAgICAgIHJldHVybiBQYWdp
bmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRlZDsKICAgICB9CkBAIC0xODIsNyArMTgyLDcgQEAg
UGFnaW5hdGlvbjo6TW9kZSBwYWdpbmF0aW9uTW9kZUZvclJlbmRlclN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSkKICAgICAvLyBwYWdlZC15IGFsd2F5cyBjb3JyZXNwb25kcyB0byBUb3BU
b0JvdHRvbVBhZ2luYXRlZCBvciBCb3R0b21Ub1RvcFBhZ2luYXRlZC4gSWYgdGhlIFdyaXRpbmdN
b2RlCiAgICAgLy8gaXMgaG9yaXpvbnRhbCwgdGhlbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBob3Jp
em9udGFsaXR5IGRpY3RhdGVzIHRoZSBjaG9pY2UuIElmIHRoZSBXcml0aW5nTW9kZQogICAgIC8v
IGlzIHZlcnRpY2FsLCB0aGVuIHdlIHVzZSBUZXh0RGlyZWN0aW9uIHRvIGNob29zZSBiZXR3ZWVu
IHRob3NlIG9wdGlvbnMuIAotICAgIGlmICh3cml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6VG9w
VG9Cb3R0b20gfHwgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSAmJiB0ZXh0RGlyZWN0aW9uID09
IFRleHREaXJlY3Rpb246OlJUTCkpCisgICAgaWYgKHdyaXRpbmdNb2RlID09IFdyaXRpbmdNb2Rl
OjpUb3BUb0JvdHRvbSB8fCAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlICYmIHRleHREaXJlY3Rp
b24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpKQogICAgICAgICByZXR1cm4gUGFnaW5hdGlv
bjo6VG9wVG9Cb3R0b21QYWdpbmF0ZWQ7CiAgICAgcmV0dXJuIFBhZ2luYXRpb246OkJvdHRvbVRv
VG9wUGFnaW5hdGVkOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy55YW1sIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1sCmluZGV4IDJhZTcwY2Ix
ZGE4NGU4Y2FkM2VjY2MwYzlmZmVmNDM2ZjhlODlmNjAuLjViMjFkZGU3ZGI1YmM0NDc4ZTUzYTVl
NGYxOTU0ODFlZGQ5ODYwZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MueWFtbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLnlhbWwKQEAgLTUxNiw3
ICs1MTYsNyBAQCBTeXN0ZW1MYXlvdXREaXJlY3Rpb246CiAgIHJlZmluZWRUeXBlOiBUZXh0RGly
ZWN0aW9uCiAgIGRlZmF1bHRWYWx1ZToKICAgICBXZWJDb3JlOgotICAgICAgZGVmYXVsdDogVGV4
dERpcmVjdGlvbjo6TFRSCisgICAgICBkZWZhdWx0OiBQQUw6OlRleHREaXJlY3Rpb246OkxUUgog
CiBUZXh0QXV0b3NpemluZ1dpbmRvd1NpemVPdmVycmlkZUhlaWdodDoKICAgdHlwZTogdWludDMy
X3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCmluZGV4IDQwZGRiOGE3ZjdhZjg0NWQ0YjY1
ZTYzMGZiN2FiMmU2NTRiYTFjOTIuLjg0MjJhYmMzY2FjZDgwNTMyM2FjOGI1MzYwM2MwM2MyZDJi
MGNlZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaApAQCAtNDAsMTEgKzQwLDExIEBA
CiAjaW5jbHVkZSAiUERGSW1hZ2VDYWNoaW5nUG9saWN5LmgiCiAjaW5jbHVkZSAiU3RvcmFnZUJs
b2NraW5nUG9saWN5LmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgotI2luY2x1ZGUgIlRleHRE
aXJlY3Rpb24uaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2
aW9yLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJVc2VySW50ZXJmYWNlRGlyZWN0
aW9uUG9saWN5LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUnVudGltZUZsYWdzLmg+Cisj
aW5jbHVkZSA8cGFsL3RleHQvVGV4dERpcmVjdGlvbi5oPgogI2luY2x1ZGUgPHVuaWNvZGUvdXNj
cmlwdC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29u
ZHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNu
YXBPZmZzZXRzSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxT
bmFwT2Zmc2V0c0luZm8uY3BwCmluZGV4IDY4YzU3NjMwOThhODY5NzZiMWRjYTU4ZTMzN2MwYWQ3
NjUxNzc4MzMuLjJlNjYyZTI4MDNiOGEzOWRkMGMxYzg5MWNkYWYyN2Q3NTkzZTM1MzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5m
by5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmNwcApAQCAtMjY3LDE3ICsyNjcsMTcgQEAgc3RhdGljIExheW91dFVuaXQgY29tcHV0
ZVNjcm9sbFNuYXBBbGlnbk9mZnNldChMYXlvdXRVbml0IG1pbkxvY2F0aW9uLCBMYXlvdXRVbmkK
ICAgICB9CiB9CiAKLXN0YXRpYyBzdGQ6OnBhaXI8Ym9vbCwgYm9vbD4gYXhlc0ZsaXBwZWRGb3JX
cml0aW5nTW9kZUFuZERpcmVjdGlvbihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVj
dGlvbiB0ZXh0RGlyZWN0aW9uKQorc3RhdGljIHN0ZDo6cGFpcjxib29sLCBib29sPiBheGVzRmxp
cHBlZEZvcldyaXRpbmdNb2RlQW5kRGlyZWN0aW9uKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQ
QUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKIHsKICAgICAvLyB0ZXh0LWRpcmVjdGlv
biBmbGlwcyB0aGUgaW5saW5lIGF4aXMgYW5kIHdyaXRpbmctbW9kZSBjYW4gZmxpcCB0aGUgYmxv
Y2sgYXhpcy4gV2hldGhlciBvcgogICAgIC8vIG5vdCB0aGUgd3JpdGluZy1tb2RlIGlzIHZlcnRp
Y2FsIGRldGVybWluZXMgdGhlIHBoeXNpY2FsIG9yaWVudGF0aW9uIG9mIHRoZSBibG9jayBhbmQg
aW5saW5lIGF4ZXMuCiAgICAgYm9vbCBoYXNWZXJ0aWNhbFdyaXRpbmdNb2RlID0gaXNWZXJ0aWNh
bFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsKICAgICBib29sIGJsb2NrQXhpc0ZsaXBwZWQgPSBp
c0ZsaXBwZWRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7Ci0gICAgYm9vbCBpbmxpbmVBeGlzRmxp
cHBlZCA9IHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMOworICAgIGJvb2wgaW5s
aW5lQXhpc0ZsaXBwZWQgPSB0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRM
OwogICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihoYXNWZXJ0aWNhbFdyaXRpbmdNb2RlID8gYmxv
Y2tBeGlzRmxpcHBlZCA6IGlubGluZUF4aXNGbGlwcGVkLCBoYXNWZXJ0aWNhbFdyaXRpbmdNb2Rl
ID8gaW5saW5lQXhpc0ZsaXBwZWQgOiBibG9ja0F4aXNGbGlwcGVkKTsKIH0KIAotdm9pZCB1cGRh
dGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxl
QXJlYSwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBjb25zdCBSZW5kZXJT
dHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdEluQm9y
ZGVyQm94Q29vcmRpbmF0ZXMsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9u
IHRleHREaXJlY3Rpb24pCit2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEo
U2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhLCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGlu
Z0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExh
eW91dFJlY3Qgdmlld3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRlcywgV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQogewogICAgIGF1
dG8gc2Nyb2xsU25hcFR5cGUgPSBzY3JvbGxpbmdFbGVtZW50U3R5bGUuc2Nyb2xsU25hcFR5cGUo
KTsKICAgICBjb25zdCBhdXRvJiBib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zID0gc2Nyb2xs
aW5nRWxlbWVudEJveC52aWV3KCkuYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJ
bmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8uaAppbmRleCA3YTk0YmE4NGI4YWFjNTMxYWM0YWQ5NDM2YTJkODBiYmRiMzBhNWQ4Li5hYzRj
MDI4N2JkYTY0Y2Y3NDU5NThjMDJhNmFkNTk5NThmOTVhODJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaApAQCAtOTcs
NyArOTcsNyBAQCBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8TGF5b3V0VW5pdCwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4+IExheW91dFNjcm9sbFNuYXBPZgogLy8gVXBkYXRlIHRoZSBzbmFwIG9m
ZnNldHMgZm9yIHRoaXMgc2Nyb2xsYWJsZSBhcmVhLCBnaXZlbiB0aGUgUmVuZGVyQm94IG9mIHRo
ZSBzY3JvbGwgY29udGFpbmVyLCB0aGUgUmVuZGVyU3R5bGUKIC8vIHdoaWNoIGRlZmluZXMgdGhl
IHNjcm9sbC1zbmFwIHByb3BlcnRpZXMsIGFuZCB0aGUgdmlld3BvcnQgcmVjdGFuZ2xlIHdpdGgg
dGhlIG9yaWdpbiBhdCB0aGUgdG9wIGxlZnQgb2YKIC8vIHRoZSBzY3JvbGxpbmcgY29udGFpbmVy
J3MgYm9yZGVyIGJveC4KLXZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShT
Y3JvbGxhYmxlQXJlYSYsIGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJveCwgY29u
c3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5b3V0UmVjdCB2aWV3cG9y
dFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzLCBXcml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbik7
Cit2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEm
LCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRlclN0eWxl
JiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmlld3BvcnRSZWN0SW5Cb3JkZXJC
b3hDb29yZGluYXRlcywgV3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbik7CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiB0cywgU25hcE9mZnNldDxUPiBvZmZzZXQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UG9wdXBNZW51U3R5bGUuaAppbmRleCBkYmRmM2M3NGIxOTVhNTk2YmY0OTQzMmZhZTliMzIwZjBi
NDMwM2I1Li42ZGVjYTQ5NjU2MjkwODk1YTY2ODM0Nzg0YTI4ODQyMzlmZjExZTA3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgfTsKIAotICAgIFBvcHVwTWVudVN0eWxlKGNvbnN0IENvbG9yJiBm
b3JlZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgRm9udENhc2NhZGUmIGZv
bnQsIGJvb2wgdmlzaWJsZSwgYm9vbCBpc0Rpc3BsYXlOb25lLCBib29sIGhhc0RlZmF1bHRBcHBl
YXJhbmNlLCBMZW5ndGggdGV4dEluZGVudCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBi
b29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENvbG9yVHlwZSBiYWNrZ3Jv
dW5kQ29sb3JUeXBlID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9wdXBNZW51VHlwZSBtZW51
VHlwZSA9IFNlbGVjdFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXplID0gUG9wdXBNZW51U2l6
ZU5vcm1hbCkKKyAgICBQb3B1cE1lbnVTdHlsZShjb25zdCBDb2xvciYgZm9yZWdyb3VuZCwgY29u
c3QgQ29sb3ImIGJhY2tncm91bmQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBib29sIHZpc2li
bGUsIGJvb2wgaXNEaXNwbGF5Tm9uZSwgYm9vbCBoYXNEZWZhdWx0QXBwZWFyYW5jZSwgTGVuZ3Ro
IHRleHRJbmRlbnQsIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBib29sIGhhc1Rl
eHREaXJlY3Rpb25PdmVycmlkZSwgQmFja2dyb3VuZENvbG9yVHlwZSBiYWNrZ3JvdW5kQ29sb3JU
eXBlID0gRGVmYXVsdEJhY2tncm91bmRDb2xvciwgUG9wdXBNZW51VHlwZSBtZW51VHlwZSA9IFNl
bGVjdFBvcHVwLCBQb3B1cE1lbnVTaXplIG1lbnVTaXplID0gUG9wdXBNZW51U2l6ZU5vcm1hbCkK
ICAgICAgICAgOiBtX2ZvcmVncm91bmRDb2xvcihmb3JlZ3JvdW5kKQogICAgICAgICAsIG1fYmFj
a2dyb3VuZENvbG9yKGJhY2tncm91bmQpCiAgICAgICAgICwgbV9mb250KGZvbnQpCkBAIC02OCw3
ICs2OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGlzcGxheU5vbmUoKSBjb25zdCB7IHJldHVy
biBtX2lzRGlzcGxheU5vbmU7IH0KICAgICBib29sIGhhc0RlZmF1bHRBcHBlYXJhbmNlKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNEZWZhdWx0QXBwZWFyYW5jZTsgfQogICAgIExlbmd0aCB0ZXh0SW5k
ZW50KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0SW5kZW50OyB9Ci0gICAgVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RGlyZWN0aW9uOyB9CisgICAgUEFM
OjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHREaXJl
Y3Rpb247IH0KICAgICBib29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlOyB9CiAgICAgQmFja2dyb3VuZENvbG9yVHlw
ZSBiYWNrZ3JvdW5kQ29sb3JUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3JU
eXBlOyB9CiAgICAgUG9wdXBNZW51VHlwZSBtZW51VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVu
dVR5cGU7IH0KQEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNEaXNwbGF5
Tm9uZTsKICAgICBib29sIG1faGFzRGVmYXVsdEFwcGVhcmFuY2U7CiAgICAgTGVuZ3RoIG1fdGV4
dEluZGVudDsKLSAgICBUZXh0RGlyZWN0aW9uIG1fdGV4dERpcmVjdGlvbjsKKyAgICBQQUw6OlRl
eHREaXJlY3Rpb24gbV90ZXh0RGlyZWN0aW9uOwogICAgIGJvb2wgbV9oYXNUZXh0RGlyZWN0aW9u
T3ZlcnJpZGU7CiAgICAgQmFja2dyb3VuZENvbG9yVHlwZSBtX2JhY2tncm91bmRDb2xvclR5cGU7
CiAgICAgUG9wdXBNZW51VHlwZSBtX21lbnVUeXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUmVjdEVkZ2VzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SZWN0RWRn
ZXMuaAppbmRleCAwZTEyMzAxOTMzNjM1NGQ3Y2VmMjdkMWZkZjdhNzMyMzYwNTE5ZmFhLi4zMjhh
ODJkMTRlN2ZiMjRjNjEzOGUzOTc1NDJiOTZkOTFjYTg1NGI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9SZWN0RWRnZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9SZWN0RWRnZXMuaApAQCAtNzUsMTggKzc1LDE4IEBAIHB1YmxpYzoKIAogICAgIFQmIGJlZm9y
ZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1Bo
eXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgTG9naWNhbEJveFNpZGU6OkJsb2NrU3RhcnQpKTsgfQog
ICAgIFQmIGFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IHJldHVybiBhdChtYXBMb2dp
Y2FsU2lkZVRvUGh5c2ljYWxTaWRlKHdyaXRpbmdNb2RlLCBMb2dpY2FsQm94U2lkZTo6QmxvY2tF
bmQpKTsgfQotICAgIFQmIHN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUikgeyByZXR1cm4gYXQobWFwTG9naWNh
bFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiks
IExvZ2ljYWxCb3hTaWRlOjpJbmxpbmVTdGFydCkpOyB9Ci0gICAgVCYgZW5kKFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxU
UikgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3co
d3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIExvZ2ljYWxCb3hTaWRlOjpJbmxpbmVFbmQpKTsgfQor
ICAgIFQmIHN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsgcmV0dXJuIGF0KG1hcExvZ2lj
YWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24p
LCBMb2dpY2FsQm94U2lkZTo6SW5saW5lU3RhcnQpKTsgfQorICAgIFQmIGVuZChXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSKSB7IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1h
a2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgTG9naWNhbEJveFNpZGU6OklubGlu
ZUVuZCkpOyB9CiAKICAgICBjb25zdCBUJiBiZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUp
IGNvbnN0IHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3JpdGluZ01v
ZGUsIExvZ2ljYWxCb3hTaWRlOjpCbG9ja1N0YXJ0KSk7IH0KICAgICBjb25zdCBUJiBhZnRlcihX
cml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVU
b1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgTG9naWNhbEJveFNpZGU6OkJsb2NrRW5kKSk7IH0K
LSAgICBjb25zdCBUJiBzdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFIpIGNvbnN0IHsgcmV0dXJuIGF0KG1hcExv
Z2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rp
b24pLCBMb2dpY2FsQm94U2lkZTo6SW5saW5lU3RhcnQpKTsgfQotICAgIGNvbnN0IFQmIGVuZChX
cml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBUZXh0RGly
ZWN0aW9uOjpMVFIpIGNvbnN0IHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNp
ZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBMb2dpY2FsQm94U2lkZTo6
SW5saW5lRW5kKSk7IH0KKyAgICBjb25zdCBUJiBzdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
KSBjb25zdCB7IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0
Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgTG9naWNhbEJveFNpZGU6OklubGluZVN0YXJ0
KSk7IH0KKyAgICBjb25zdCBUJiBlbmQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgY29uc3QgeyBy
ZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGlu
Z01vZGUsIGRpcmVjdGlvbiksIExvZ2ljYWxCb3hTaWRlOjpJbmxpbmVFbmQpKTsgfQogCiAgICAg
dm9pZCBzZXRCZWZvcmUoY29uc3QgVCYgYmVmb3JlLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkg
eyB0aGlzLT5iZWZvcmUod3JpdGluZ01vZGUpID0gYmVmb3JlOyB9CiAgICAgdm9pZCBzZXRBZnRl
cihjb25zdCBUJiBhZnRlciwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgdGhpcy0+YWZ0ZXIo
d3JpdGluZ01vZGUpID0gYWZ0ZXI7IH0KLSAgICB2b2lkIHNldFN0YXJ0KGNvbnN0IFQmIHN0YXJ0
LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBUZXh0
RGlyZWN0aW9uOjpMVFIpIHsgdGhpcy0+c3RhcnQod3JpdGluZ01vZGUsIGRpcmVjdGlvbikgPSBz
dGFydDsgfQotICAgIHZvaWQgc2V0RW5kKGNvbnN0IFQmIGVuZCwgV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSKSB7IHRo
aXMtPmVuZCh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSA9IGVuZDsgfQorICAgIHZvaWQgc2V0U3Rh
cnQoY29uc3QgVCYgc3RhcnQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsgdGhpcy0+c3RhcnQo
d3JpdGluZ01vZGUsIGRpcmVjdGlvbikgPSBzdGFydDsgfQorICAgIHZvaWQgc2V0RW5kKGNvbnN0
IFQmIGVuZCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgeyB0aGlzLT5lbmQod3JpdGluZ01vZGUs
IGRpcmVjdGlvbikgPSBlbmQ7IH0KIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWN0RWRn
ZXMmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3NpZGVzID09IG90aGVyLm1fc2lkZXM7IH0KICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVjdEVkZ2VzJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
bV9zaWRlcyAhPSBvdGhlci5tX3NpZGVzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAppbmRleCBmZDYw
MmYzZDUzZmNiYjQwMWJhZDQyYzkwMTc3YmQyMWRkODUwMjcxLi5lNGIwMGQ5M2MwZWUxZDQxOTMx
ZmFmN2Q2YzMwYjhlMDUxZGNjMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAgLTEwNSw3ICsx
MDUsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9y
dHVuaXR5KCkKICAgICBpZiAoIW1fZXhwYW5zaW9uKQogICAgICAgICBtX2V4cGFuc2lvblBlck9w
cG9ydHVuaXR5ID0gMDsKICAgICBlbHNlIHsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudCA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1f
cnVuLnRleHQoKSwgbV9ydW4ubHRyKCkgPyBUZXh0RGlyZWN0aW9uOjpMVFIgOiBUZXh0RGlyZWN0
aW9uOjpSVEwsIG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkpLmZpcnN0OworICAgICAgICB1bnNp
Z25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwsIG1fcnVuLmV4cGFuc2lvbkJlaGF2
aW9yKCkpLmZpcnN0OwogCiAgICAgICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkK
ICAgICAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IDgyZWJhNzNiYWM0Yzc2ZmVhMGJiNjBlYmE0
NDM2ODJkMjJjN2ZlMWIuLjNmZThkOWY0MDA2ZWM2MDA1ZGJjYmUyYTlkODJjYWVhYzEyYmFjMTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTE5MCw3ICsxOTAs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgY2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBzaXplX3QpIGNvbnN0OwotICAgIEdseXBoQnVmZmVy
QWR2YW5jZSBhcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBiZWdpbm5pbmdH
bHlwaEluZGV4LCB1bnNpZ25lZCBiZWdpbm5pbmdTdHJpbmdJbmRleCwgYm9vbCBlbmFibGVLZXJu
aW5nLCBib29sIHJlcXVpcmVzU2hhcGluZywgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlLCBTdHJp
bmdWaWV3IHRleHQsIFRleHREaXJlY3Rpb24pIGNvbnN0OworICAgIEdseXBoQnVmZmVyQWR2YW5j
ZSBhcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBiZWdpbm5pbmdHbHlwaElu
ZGV4LCB1bnNpZ25lZCBiZWdpbm5pbmdTdHJpbmdJbmRleCwgYm9vbCBlbmFibGVLZXJuaW5nLCBi
b29sIHJlcXVpcmVzU2hhcGluZywgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlLCBTdHJpbmdWaWV3
IHRleHQsIFBBTDo6VGV4dERpcmVjdGlvbikgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIG51bGxv
cHQgaWYgbm9uZSBvZiB0aGUgZ2x5cGhzIGFyZSBPVC1TVkcgZ2x5cGhzLgogICAgIHN0ZDo6b3B0
aW9uYWw8Qml0VmVjdG9yPiBmaW5kT1RTVkdHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJHbHlwaCos
IHVuc2lnbmVkIGNvdW50KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCAyYTc2MTM2MmM4M2ZhNjg1YjUxYzZlZTA1MmM2
YjEzNWMwMjVmOWEwLi43MGEzMmE5NjVhMTFiNmNkNTllZDdjMzMxOTgwNTQzODA3ZTljMDllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CkBAIC0zMDIsNyArMzAyLDcgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6d2lkdGhGb3JTaW1wbGVUZXh0KFN0cmlu
Z1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKSBjb25zdAorZmxvYXQgRm9u
dENhc2NhZGU6OndpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdWaWV3IHRleHQsIFBBTDo6VGV4dERp
cmVjdGlvbiB0ZXh0RGlyZWN0aW9uKSBjb25zdAogewogICAgIGlmICh0ZXh0LmlzTnVsbCgpIHx8
IHRleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTk2NSw3ICs5NjUsNyBAQCBi
b29sIEZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIgYykKICAgICBy
ZXR1cm4gaXNDSktJZGVvZ3JhcGgoYyk7CiB9CiAKLXN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4g
Rm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwg
RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCitzdGQ6OnBhaXI8dW5zaWduZWQs
IGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29u
c3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUEFMOjpUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCiB7CiAgICAg
dW5zaWduZWQgY291bnQgPSAwOwogICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IChleHBhbnNp
b25CZWhhdmlvciAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWZ0RXhwYW5zaW9uOwpA
QCAtOTczLDcgKzk3Myw3IEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6
OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMCiAgICAgICAgICsrY291
bnQ7CiAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwogICAgIH0KLSAgICBpZiAoZGly
ZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikgeworICAgIGlmIChkaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcnNb
aV0pKSB7CiAgICAgICAgICAgICAgICAgY291bnQrKzsKQEAgLTEwMDEsNyArMTAwMSw3IEBAIHN0
ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnRJbnRlcm5hbChjb25zdCBMCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvdW50LCBp
c0FmdGVyRXhwYW5zaW9uKTsKIH0KIAotc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2Fz
Y2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBFeHBhbnNp
b25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKK3N0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4g
Rm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0
aW9uLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKIHsKICAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7CiAgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gKGV4cGFuc2lvbkJlaGF2
aW9yICYgTGVmdEV4cGFuc2lvbk1hc2spID09IEZvcmJpZExlZnRFeHBhbnNpb247CkBAIC0xMDA5
LDcgKzEwMDksNyBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVQogICAgICAgICArK2NvdW50Owog
ICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKGRpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2ld
OwogICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7CkBAIC0xMDYzLDcg
KzEwNjMsNyBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVQogICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihjb3VudCwgaXNBZnRlckV4cGFuc2lvbik7CiB9CiAKLXN0ZDo6cGFpcjx1bnNpZ25lZCwg
Ym9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoU3RyaW5nVmlldyBz
dHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uQmVoYXZpb3IpCitzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgUEFMOjpUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3Ip
CiB7CiAgICAgLy8gRm9yIGVhY2ggY2hhcmFjdGVyLCBpdGVyYXRpbmcgZnJvbSBsZWZ0IHRvIHJp
Z2h0OgogICAgIC8vICAgSWYgaXQgaXMgcmVjb2duaXplZCBhcyBhIHNwYWNlLCBpbnNlcnQgYW4g
b3Bwb3J0dW5pdHkgYWZ0ZXIgaXQKQEAgLTEwNzQsMTMgKzEwNzQsMTMgQEAgc3RkOjpwYWlyPHVu
c2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChTdHJp
bmdWaWV3IHN0cmkKICAgICByZXR1cm4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFs
KHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlv
biwgZXhwYW5zaW9uQmVoYXZpb3IpOwogfQogCi1ib29sIEZvbnRDYXNjYWRlOjpsZWZ0RXhwYW5z
aW9uT3Bwb3J0dW5pdHkoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbikKK2Jvb2wgRm9udENhc2NhZGU6OmxlZnRFeHBhbnNpb25PcHBvcnR1bml0eShTdHJpbmdW
aWV3IHN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgaWYg
KCFzdHJpbmdWaWV3Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBVQ2hh
cjMyIGluaXRpYWxDaGFyYWN0ZXI7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIpIHsKKyAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7
CiAgICAgICAgIGluaXRpYWxDaGFyYWN0ZXIgPSBzdHJpbmdWaWV3WzBdOwogICAgICAgICBpZiAo
VTE2X0lTX0xFQUQoaW5pdGlhbENoYXJhY3RlcikgJiYgc3RyaW5nVmlldy5sZW5ndGgoKSA+IDEg
JiYgVTE2X0lTX1RSQUlMKHN0cmluZ1ZpZXdbMV0pKQogICAgICAgICAgICAgaW5pdGlhbENoYXJh
Y3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShpbml0aWFsQ2hhcmFjdGVyLCBzdHJpbmdWaWV3
WzFdKTsKQEAgLTEwOTMsMTMgKzEwOTMsMTMgQEAgYm9vbCBGb250Q2FzY2FkZTo6bGVmdEV4cGFu
c2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbgogICAg
IHJldHVybiBjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpICYmIGlzQ0pL
SWRlb2dyYXBoT3JTeW1ib2woaW5pdGlhbENoYXJhY3Rlcik7CiB9CiAKLWJvb2wgRm9udENhc2Nh
ZGU6OnJpZ2h0RXhwYW5zaW9uT3Bwb3J0dW5pdHkoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbikKK2Jvb2wgRm9udENhc2NhZGU6OnJpZ2h0RXhwYW5zaW9uT3Bw
b3J0dW5pdHkoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKQogewogICAgIGlmICghc3RyaW5nVmlldy5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgVUNoYXIzMiBmaW5hbENoYXJhY3RlcjsKLSAgICBpZiAoZGlyZWN0aW9uID09
IFRleHREaXJlY3Rpb246OkxUUikgeworICAgIGlmIChkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIpIHsKICAgICAgICAgZmluYWxDaGFyYWN0ZXIgPSBzdHJpbmdWaWV3W3N0cmlu
Z1ZpZXcubGVuZ3RoKCkgLSAxXTsKICAgICAgICAgaWYgKFUxNl9JU19UUkFJTChmaW5hbENoYXJh
Y3RlcikgJiYgc3RyaW5nVmlldy5sZW5ndGgoKSA+IDEgJiYgVTE2X0lTX0xFQUQoc3RyaW5nVmll
d1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0gMl0pKQogICAgICAgICAgICAgZmluYWxDaGFyYWN0ZXIg
PSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoc3RyaW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0g
Ml0sIGZpbmFsQ2hhcmFjdGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5oCmluZGV4IGMzNDU2ODAxN2ZjZGU5ODNlNmY1YWM3MGVlMTc4M2E5Zjcz
ZTkwNTMuLmEyMDk5MzFhOWQ4YTIxNmYzNGNjNzgyZTY4MjgzOTYxODMwYmY5OTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaApAQCAtMTMxLDcg
KzEzMSw3IEBAIHB1YmxpYzoKIAogICAgIGZsb2F0IHdpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4
dFJ1biYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiog
ZmFsbGJhY2tGb250cyA9IDAsIGZsb2F0KiBvdXRXaWR0aEJlZm9yZVJhbmdlID0gbnVsbHB0ciwg
ZmxvYXQqIG91dFdpZHRoQWZ0ZXJSYW5nZSA9IG51bGxwdHIpIGNvbnN0OwogICAgIFdFQkNPUkVf
RVhQT1JUIGZsb2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiog
ZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7Ci0gICAgZmxvYXQg
d2lkdGhGb3JTaW1wbGVUZXh0KFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbiA9IFRleHRE
aXJlY3Rpb246OkxUUikgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGb3JTaW1wbGVUZXh0KFN0cmlu
Z1ZpZXcgdGV4dCwgUEFMOjpUZXh0RGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIp
IGNvbnN0OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQsIFRleHRMYXlvdXREZWxl
dGVyPiBjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCYsIGZsb2F0IHhQb3MsIGJvb2wgY29sbGFwc2VX
aGl0ZVNwYWNlKSBjb25zdDsKICAgICBzdGF0aWMgZmxvYXQgd2lkdGgoVGV4dExheW91dCYsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNr
Rm9udHMgPSAwKTsKQEAgLTE4NSwxMiArMTg1LDEyIEBAIHB1YmxpYzoKIAogICAgIC8vIFJldHVy
bnMgKHRoZSBudW1iZXIgb2Ygb3Bwb3J0dW5pdGllcywgd2hldGhlciB0aGUgbGFzdCBleHBhbnNp
b24gaXMgYSB0cmFpbGluZyBleHBhbnNpb24pCiAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG9wcG9y
dHVuaXRpZXMsIHRoZSBib29sIHdpbGwgYmUgdHJ1ZSBpZmYgd2UgYXJlIGZvcmJpZGRpbmcgbGVh
ZGluZyBleHBhbnNpb25zLgotICAgIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoU3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiwgRXhwYW5z
aW9uQmVoYXZpb3IpOworICAgIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IGV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQoU3RyaW5nVmlldywgUEFMOjpUZXh0RGlyZWN0aW9uLCBFeHBh
bnNpb25CZWhhdmlvcik7CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBhbiBleHBh
bnNpb24gb3Bwb3J0dW5pdHkganVzdCBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlcgogICAgIC8v
IE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHRha2UgYSBpc0FmdGVyRXhwYW5zaW9uIGZsYWc7IHRo
aXMgYXNzdW1lcyB0aGF0IGlzQWZ0ZXJFeHBhbnNpb24gaXMgZmFsc2UKLSAgICBzdGF0aWMgYm9v
bCBsZWZ0RXhwYW5zaW9uT3Bwb3J0dW5pdHkoU3RyaW5nVmlldywgVGV4dERpcmVjdGlvbik7Ci0g
ICAgc3RhdGljIGJvb2wgcmlnaHRFeHBhbnNpb25PcHBvcnR1bml0eShTdHJpbmdWaWV3LCBUZXh0
RGlyZWN0aW9uKTsKKyAgICBzdGF0aWMgYm9vbCBsZWZ0RXhwYW5zaW9uT3Bwb3J0dW5pdHkoU3Ry
aW5nVmlldywgUEFMOjpUZXh0RGlyZWN0aW9uKTsKKyAgICBzdGF0aWMgYm9vbCByaWdodEV4cGFu
c2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbik7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKCk7CkBAIC0y
MzcsOCArMjM3LDggQEAgcHJpdmF0ZToKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0OwogICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCB0bykgY29uc3Q7CiAKLSAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVk
LCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqLCB1
bnNpZ25lZCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yKTsKLSAgICBz
dGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
SW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIEV4
cGFuc2lvbkJlaGF2aW9yKTsKKyAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqLCB1bnNpZ25lZCBs
ZW5ndGgsIFBBTDo6VGV4dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IpOworICAgIHN0YXRp
YyBzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgUEFMOjpUZXh0RGlyZWN0aW9uLCBF
eHBhbnNpb25CZWhhdmlvcik7CiAKICAgICBmcmllbmQgc3RydWN0IFdpZHRoSXRlcmF0b3I7CiAg
ICAgZnJpZW5kIGNsYXNzIENvbXBsZXhUZXh0Q29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDQ5NDg4
YzU5OTYzMjFmYmY2NTIyMjc3YmEwYzk2OWU1MDcwZmQ1ZGQuLjE2YzEwZTJkYmJmZTIzNDZhYzM0
MGM4MmExMTFiZjZhZTBlMTdmMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCi0jaW5jbHVkZSAi
QmlkaVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1
ZGUgIk51bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTUyMSwyNCArNTIxLDI0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJr
cyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pCiB7Ci0gICAgQmlkaVJl
c29sdmVyPFRleHRCb3hJdGVyYXRvciwgQmlkaUNoYXJhY3RlclJ1bj4gYmlkaVJlc29sdmVyOwot
ICAgIGJpZGlSZXNvbHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyhydW4uZGlyZWN0aW9uKCksIHJ1
bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCkpKTsKKyAgICBQQUw6OkJpZGlSZXNvbHZlcjxUZXh0Qm94
SXRlcmF0b3IsIFBBTDo6QmlkaUNoYXJhY3RlclJ1bj4gYmlkaVJlc29sdmVyOworICAgIGJpZGlS
ZXNvbHZlci5zZXRTdGF0dXMoUEFMOjpCaWRpU3RhdHVzKHJ1bi5kaXJlY3Rpb24oKSwgcnVuLmRp
cmVjdGlvbmFsT3ZlcnJpZGUoKSkpOwogICAgIGJpZGlSZXNvbHZlci5zZXRQb3NpdGlvbklnbm9y
aW5nTmVzdGVkSXNvbGF0ZXMoVGV4dEJveEl0ZXJhdG9yKCZydW4sIDApKTsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIG93bmVyc2hpcCBzaG91bGQgYmUgcmV2ZXJzZWQuIFdlIHNob3VsZCBwYXNzIEJp
ZGlSdW5MaXN0CiAgICAgLy8gdG8gQmlkaVJlc29sdmVyIGluIGNyZWF0ZUJpZGlSdW5zRm9yTGlu
ZS4KLSAgICBCaWRpUnVuTGlzdDxCaWRpQ2hhcmFjdGVyUnVuPiYgYmlkaVJ1bnMgPSBiaWRpUmVz
b2x2ZXIucnVucygpOworICAgIFBBTDo6QmlkaVJ1bkxpc3Q8UEFMOjpCaWRpQ2hhcmFjdGVyUnVu
PiYgYmlkaVJ1bnMgPSBiaWRpUmVzb2x2ZXIucnVucygpOwogICAgIGJpZGlSZXNvbHZlci5jcmVh
dGVCaWRpUnVuc0ZvckxpbmUoVGV4dEJveEl0ZXJhdG9yKCZydW4sIHJ1bi5sZW5ndGgoKSkpOwog
CiAgICAgaWYgKCFiaWRpUnVucy5ydW5Db3VudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBG
bG9hdFBvaW50IGN1cnJQb2ludCA9IHBvaW50OwotICAgIEJpZGlDaGFyYWN0ZXJSdW4qIGJpZGlS
dW4gPSBiaWRpUnVucy5maXJzdFJ1bigpOworICAgIFBBTDo6QmlkaUNoYXJhY3RlclJ1biogYmlk
aVJ1biA9IGJpZGlSdW5zLmZpcnN0UnVuKCk7CiAgICAgd2hpbGUgKGJpZGlSdW4pIHsKICAgICAg
ICAgVGV4dFJ1biBzdWJydW4gPSBydW4uc3ViUnVuKGJpZGlSdW4tPnN0YXJ0KCksIGJpZGlSdW4t
PnN0b3AoKSAtIGJpZGlSdW4tPnN0YXJ0KCkpOwogICAgICAgICBib29sIGlzUlRMID0gYmlkaVJ1
bi0+bGV2ZWwoKSAlIDI7Ci0gICAgICAgIHN1YnJ1bi5zZXREaXJlY3Rpb24oaXNSVEwgPyBUZXh0
RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFIpOworICAgICAgICBzdWJydW4uc2V0
RGlyZWN0aW9uKGlzUlRMID8gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUik7CiAgICAgICAgIHN1YnJ1bi5zZXREaXJlY3Rpb25hbE92ZXJyaWRlKGJpZGlS
dW4tPmRpck92ZXJyaWRlKGZhbHNlKSk7CiAKICAgICAgICAgYXV0byBhZHZhbmNlID0gZm9udC5k
cmF3VGV4dCgqdGhpcywgc3VicnVuLCBjdXJyUG9pbnQsIDAsIHN0ZDo6bnVsbG9wdCwgY3VzdG9t
Rm9udE5vdFJlYWR5QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKaW5kZXggYjk3OTlhNGQxMDYxZWQyMGExYjUwZWQ1MDY4
NjUxYzVmZWE0NjZhNC4uZmVkYTg4MmYxMjUyYTY2NTJmNGZjYjNmOTY1ZDI0YjgwOTVkYjg4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGll
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGll
cy5jcHAKQEAgLTQ5NSw3ICs0OTUsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IHJlY3RGcm9tUG9seWdvbihjb25zdCBGbG9hdFBvaW50R3JhcGg6OlBvbHlnb24mCiB9CiAKIFBh
dGggUGF0aFV0aWxpdGllczo6cGF0aFdpdGhTaHJpbmtXcmFwcGVkUmVjdHNGb3JPdXRsaW5lKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyRGF0
YSwKLSAgICBmbG9hdCBvdXRsaW5lT2Zmc2V0LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQorICAgIGZsb2F0
IG91dGxpbmVPZmZzZXQsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKICAgICBBU1NFUlQoYm9y
ZGVyRGF0YS5oYXNCb3JkZXJSYWRpdXMoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAppbmRleCA1MDAwNDFhMmQ2NDE4YzgwNDc1YjE3
NTYxNDc2OGZjYmZhNjQzZTI0Li4xYmVlYzYyNDE1OGRlMTViOTU3ZTI0OTQzZDQ3NmY4OGRhODlh
NjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRp
bGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxp
dGllcy5oCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUGF0aCBwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGZsb2F0IHJhZGl1cyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3Rv
cjxQYXRoPiBwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RzLCBmbG9hdCByYWRpdXMpOwogCi0gICAgc3RhdGljIFBhdGggcGF0aFdpdGhTaHJp
bmtXcmFwcGVkUmVjdHNGb3JPdXRsaW5lKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgY29uc3Qg
Qm9yZGVyRGF0YSYsIGZsb2F0IG91dGxpbmVPZmZzZXQsIFRleHREaXJlY3Rpb24sIFdyaXRpbmdN
b2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgc3RhdGljIFBhdGggcGF0aFdpdGhT
aHJpbmtXcmFwcGVkUmVjdHNGb3JPdXRsaW5lKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgY29u
c3QgQm9yZGVyRGF0YSYsIGZsb2F0IG91dGxpbmVPZmZzZXQsIFBBTDo6VGV4dERpcmVjdGlvbiwg
V3JpdGluZ01vZGUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAppbmRleCAxZDQ3ZDY1ZDY4MjQ2MjZl
MTU5Mjg4MDBmNDY5N2MyNzZjYjI3NjM0Li5iYjQ2MzgwMzcxYTNhNzdlOGVkNTY2MjYyMWMwZTNm
NjljYTk0YjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9U
ZXh0UnVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5o
CkBAIC00Myw3ICs0Myw3IEBAIHN0cnVjdCBHbHlwaERhdGE7CiBjbGFzcyBUZXh0UnVuIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0UnVu
KGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeHBvcyA9IDAsIGZsb2F0IGV4cGFuc2lvbiA9IDAs
IEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gRGVmYXVsdEV4cGFuc2lvbiwg
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFIsIGJvb2wgZGlyZWN0
aW9uYWxPdmVycmlkZSA9IGZhbHNlLCBib29sIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRy
dWUpCisgICAgZXhwbGljaXQgVGV4dFJ1bihjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHhwb3Mg
PSAwLCBmbG9hdCBleHBhbnNpb24gPSAwLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhh
dmlvciA9IERlZmF1bHRFeHBhbnNpb24sIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2Us
IGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gdHJ1ZSkKICAgICAgICAgOiBtX3RleHQo
dGV4dCkKICAgICAgICAgLCBtX3RhYlNpemUoMCkKICAgICAgICAgLCBtX3hwb3MoeHBvcykKQEAg
LTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoIW1fdGV4dC5pc051bGwoKSk7
CiAgICAgfQogCi0gICAgZXhwbGljaXQgVGV4dFJ1bihTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIGZs
b2F0IHhwb3MgPSAwLCBmbG9hdCBleHBhbnNpb24gPSAwLCBFeHBhbnNpb25CZWhhdmlvciBleHBh
bnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNpb24sIFRleHREaXJlY3Rpb24gZGlyZWN0aW9u
ID0gVGV4dERpcmVjdGlvbjo6TFRSLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwg
Ym9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVlKQorICAgIGV4cGxpY2l0IFRleHRS
dW4oU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9u
ID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZhdWx0RXhwYW5z
aW9uLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFIsIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IGZhbHNlLCBib29sIGNoYXJhY3RlclNjYW5G
b3JDb2RlUGF0aCA9IHRydWUpCiAgICAgICAgIDogVGV4dFJ1bihzdHJpbmdWaWV3LnRvU3RyaW5n
V2l0aG91dENvcHlpbmcoKSwgeHBvcywgZXhwYW5zaW9uLCBleHBhbnNpb25CZWhhdmlvciwgZGly
ZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlLCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgpCiAg
ICAgewogICAgIH0KQEAgLTEwMiwxNSArMTAyLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFhQ
b3MoZmxvYXQgeFBvcykgeyBtX3hwb3MgPSB4UG9zOyB9CiAgICAgZmxvYXQgZXhwYW5zaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9leHBhbnNpb247IH0KICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBh
bnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uQmVoYXZpb3I7IH0KLSAg
ICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRl
eHREaXJlY3Rpb24+KG1fZGlyZWN0aW9uKTsgfQotICAgIGJvb2wgcnRsKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8VGV4dERpcmVjdGlvbj4obV9kaXJlY3Rpb24pID09IFRleHREaXJlY3Rp
b246OlJUTDsgfQotICAgIGJvb2wgbHRyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4
dERpcmVjdGlvbj4obV9kaXJlY3Rpb24pID09IFRleHREaXJlY3Rpb246OkxUUjsgfQorICAgIFBB
TDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQ
QUw6OlRleHREaXJlY3Rpb24+KG1fZGlyZWN0aW9uKTsgfQorICAgIGJvb2wgcnRsKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpUZXh0RGlyZWN0aW9uPihtX2RpcmVjdGlvbikgPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7IH0KKyAgICBib29sIGx0cigpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PFBBTDo6VGV4dERpcmVjdGlvbj4obV9kaXJlY3Rpb24pID09IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSOyB9CiAgICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXJlY3Rpb25hbE92ZXJyaWRlOyB9CiAgICAgYm9vbCBjaGFyYWN0ZXJTY2Fu
Rm9yQ29kZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aDsg
fQogICAgIGJvb2wgc3BhY2luZ0Rpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlU3Bh
Y2luZzsgfQogCiAgICAgdm9pZCBkaXNhYmxlU3BhY2luZygpIHsgbV9kaXNhYmxlU3BhY2luZyA9
IHRydWU7IH0KLSAgICB2b2lkIHNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikg
eyBtX2RpcmVjdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkaXJlY3Rpb24pOyB9CisgICAg
dm9pZCBzZXREaXJlY3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVj
dGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkaXJlY3Rpb24pOyB9CiAgICAgdm9pZCBzZXRE
aXJlY3Rpb25hbE92ZXJyaWRlKGJvb2wgb3ZlcnJpZGUpIHsgbV9kaXJlY3Rpb25hbE92ZXJyaWRl
ID0gb3ZlcnJpZGU7IH0KICAgICB2b2lkIHNldENoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aChib29s
IHNjYW4pIHsgbV9jaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSBzY2FuOyB9CiAgICAgU3RyaW5n
VmlldyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCmluZGV4IGE1YWUxYWMwMDBk
YTViOTUyY2MyMzQyNzdiYmY2OGIxM2RjYTE4NzYuLmEzYzYzYWUwZjAxNTAzOWM1N2EyNzZiNmQ1
M2I4MzFiOWEwOTYwZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1dpZHRoSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1dpZHRoSXRlcmF0b3IuY3BwCkBAIC01Miw3ICs1Miw3IEBAIFdpZHRoSXRlcmF0b3I6Oldp
ZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNlCiAgICAgaWYgKCFtX2V4cGFuc2lvbikKICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBv
cnR1bml0eSA9IDA7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1
bi50ZXh0KCksIG1fcnVuLmx0cigpID8gVGV4dERpcmVjdGlvbjo6TFRSIDogVGV4dERpcmVjdGlv
bjo6UlRMLCBydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSkuZmlyc3Q7CisgICAgICAgIHVuc2lnbmVk
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFIgOiBQQUw6OlRleHREaXJlY3Rpb246OlJUTCwgcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkp
LmZpcnN0OwogCiAgICAgICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKICAgICAg
ICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwpAQCAtMTg0LDE0ICsxODQsMTQg
QEAgdm9pZCBXaWR0aEl0ZXJhdG9yOjphcHBseUluaXRpYWxBZHZhbmNlKEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgR2x5cGhCdWZmZXJBZHYKIAogICAgIEFTU0VSVChsYXN0R2x5cGhDb3VudCB8
fCAoIXdpZHRoKG1fbGVmdG92ZXJJbml0aWFsQWR2YW5jZSkgJiYgIWhlaWdodChtX2xlZnRvdmVy
SW5pdGlhbEFkdmFuY2UpKSk7CiAKLSAgICBpZiAobV9ydW4uZGlyZWN0aW9uKCkgPT0gVGV4dERp
cmVjdGlvbjo6UlRMICYmIGxhc3RHbHlwaENvdW50KSB7CisgICAgaWYgKG1fcnVuLmRpcmVjdGlv
bigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMICYmIGxhc3RHbHlwaENvdW50KSB7CiAgICAg
ICAgIGF1dG8mIHZpc3VhbGx5TGFzdEFkdmFuY2UgPSAqZ2x5cGhCdWZmZXIuYWR2YW5jZXMobGFz
dEdseXBoQ291bnQpOwogICAgICAgICBleHBhbmRXaXRoSW5pdGlhbEFkdmFuY2UodmlzdWFsbHlM
YXN0QWR2YW5jZSwgbV9sZWZ0b3ZlckluaXRpYWxBZHZhbmNlKTsKICAgICAgICAgbV9ydW5XaWR0
aFNvRmFyICs9IHdpZHRoKG1fbGVmdG92ZXJJbml0aWFsQWR2YW5jZSk7CiAgICAgICAgIG1fbGVm
dG92ZXJJbml0aWFsQWR2YW5jZSA9IG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2UoKTsKICAgICB9CiAK
LSAgICBpZiAobV9ydW4uZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgIGlm
IChtX3J1bi5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkKICAgICAgICAg
bV9sZWZ0b3ZlckluaXRpYWxBZHZhbmNlID0gaW5pdGlhbEFkdmFuY2U7CiAgICAgZWxzZSB7CiAg
ICAgICAgIGlmIChsYXN0R2x5cGhDb3VudCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKaW5kZXggMzZk
ZDcwY2I1YTZkMjRlZGM5NzI4MGE3NjQxNDdkNTg1OWM0MmQ1Ny4uZDU0MmEyOWQzYTQ1NTNiM2M1
NjNlOThkN2I5ZWZjNGM1YjM2OGQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCkBAIC01OTMsNyAr
NTkzLDcgQEAgZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBj
b25zdAogCiAjZW5kaWYKIAotR2x5cGhCdWZmZXJBZHZhbmNlIEZvbnQ6OmFwcGx5VHJhbnNmb3Jt
cyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGJlZ2lubmluZ0dseXBoSW5kZXgs
IHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4LCBib29sIGVuYWJsZUtlcm5pbmcsIGJvb2wg
cmVxdWlyZXNTaGFwaW5nLCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGUsIFN0cmluZ1ZpZXcgdGV4
dCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKSBjb25zdAorR2x5cGhCdWZmZXJBZHZhbmNl
IEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVk
IGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4LCBib29s
IGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25zdCBBdG9tU3RyaW5nJiBs
b2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24p
IGNvbnN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7CiAKQEAgLTYyNCw3
ICs2MjQsNyBAQCBHbHlwaEJ1ZmZlckFkdmFuY2UgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVnaQogICAgIC8vIEZJWE1FOiBFbmFibGUg
a2VybmluZyBmb3Igc2luZ2xlIGdseXBocyB3aGVuIHJkYXI6Ly84MjE5NTQwNSBpcyBmaXhlZAog
ICAgIENURm9udFNoYXBlT3B0aW9ucyBvcHRpb25zID0ga0NURm9udFNoYXBlV2l0aENsdXN0ZXJD
b21wb3NpdGlvbgogICAgICAgICB8IChlbmFibGVLZXJuaW5nICYmIG51bWJlck9mSW5wdXRHbHlw
aHMgPyBrQ1RGb250U2hhcGVXaXRoS2VybmluZyA6IDApCi0gICAgICAgIHwgKHRleHREaXJlY3Rp
b24gPT0gVGV4dERpcmVjdGlvbjo6UlRMID8ga0NURm9udFNoYXBlUmlnaHRUb0xlZnQgOiAwKTsK
KyAgICAgICAgfCAodGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA/IGtD
VEZvbnRTaGFwZVJpZ2h0VG9MZWZ0IDogMCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleDsgKytpKQogICAgICAg
ICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRleClbaV0gLT0g
YmVnaW5uaW5nU3RyaW5nSW5kZXg7CkBAIC03MjEsNyArNzIxLDcgQEAgR2x5cGhCdWZmZXJBZHZh
bmNlIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2ln
bmVkIGJlZ2kKICAgICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgQ1RGb250U2hhcGVHbHlwaHMoKSBh
Y2NlcHRzIHRoZSBidWZmZXIgaW4gbG9naWNhbCBvcmRlciBidXQgcmV0dXJucyBpdCBpbiBwaHlz
aWNhbAogICAgIC8vIG9yZGVyLCB3aGljaCBtZWFucyB0aGUgc2Vjb25kIHJldmVyc2UoKSBpbiB0
aGlzIGZ1bmN0aW9uIHN0aWxsIG5lZWRzIHRvIGV4ZWN1dGUgd2hlbgogICAgIC8vIENURm9udFNo
YXBlR2x5cGhzKCkgaXMgYmVpbmcgdXNlZC4KLSAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpSVEwpCisgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpSVEwpCiAgICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRl
eCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCk7CiAKICAgICBDVEZv
bnRUcmFuc2Zvcm1PcHRpb25zIG9wdGlvbnMgPSAoZW5hYmxlS2VybmluZyA/IGtDVEZvbnRUcmFu
c2Zvcm1BcHBseVBvc2l0aW9uaW5nIDogMCkgfCBrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5n
OwpAQCAtNzMxLDcgKzczMSw3IEBAIEdseXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRyYW5z
Zm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpCiAjZW5kaWYKIAog
ICAgIC8vIFNlZSB0aGUgY29tbWVudCBhYm92ZSBpbiB0aGlzIGZ1bmN0aW9uIHdoZXJlIHRoZSBv
dGhlciBjYWxsIHRvIHJldmVyc2UoKSBpcy4KLSAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpSVEwpCisgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpSVEwpCiAgICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRl
eCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCk7CiAKICAgICByZXR1
cm4gaW5pdGlhbEFkdmFuY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvU2VsZWN0aW9uR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Nl
bGVjdGlvbkdlb21ldHJ5LmNwcAppbmRleCAzZGQ5N2MxM2VkNzRkMGEyN2I2YjNmMTE4N2NkZThh
NDA3Y2MxYzM0Li5jYTFlNzc0YzcxZDg4ZmE1YTY0OWNjMjM2MjM5NzFhZGRjMzIwMDkyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9uR2VvbWV0cnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5jcHAK
QEAgLTQwLDcgKzQwLDcgQEAgU2VsZWN0aW9uR2VvbWV0cnk6OlNlbGVjdGlvbkdlb21ldHJ5KGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCwgU2VsZWN0aW9uUmVuZGVyaW5nQmUKIH0KIAogLy8gRklYTUU6
IFdlIHNob3VsZCBtb3ZlIHNvbWUgb2YgdGhlc2UgYXJndW1lbnRzIHRvIGFuIGF1eGlsbGFyeSBz
dHJ1Y3QuCi1TZWxlY3Rpb25HZW9tZXRyeTo6U2VsZWN0aW9uR2VvbWV0cnkoY29uc3QgRmxvYXRR
dWFkJiBxdWFkLCBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvciBiZWhhdmlvciwgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIGludCBtaW5YLCBpbnQgbWF4WCwgaW50IG1heFksIGludCBsaW5lTnVt
YmVyLCBib29sIGlzTGluZUJyZWFrLCBib29sIGlzRmlyc3RPbkxpbmUsIGJvb2wgaXNMYXN0T25M
aW5lLCBib29sIGNvbnRhaW5zU3RhcnQsIGJvb2wgY29udGFpbnNFbmQsIGJvb2wgaXNIb3Jpem9u
dGFsLCBib29sIGlzSW5GaXhlZFBvc2l0aW9uLCBib29sIGlzUnVieVRleHQsIGludCBwYWdlTnVt
YmVyKQorU2VsZWN0aW9uR2VvbWV0cnk6OlNlbGVjdGlvbkdlb21ldHJ5KGNvbnN0IEZsb2F0UXVh
ZCYgcXVhZCwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IgYmVoYXZpb3IsIFBBTDo6VGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24sIGludCBtaW5YLCBpbnQgbWF4WCwgaW50IG1heFksIGludCBsaW5l
TnVtYmVyLCBib29sIGlzTGluZUJyZWFrLCBib29sIGlzRmlyc3RPbkxpbmUsIGJvb2wgaXNMYXN0
T25MaW5lLCBib29sIGNvbnRhaW5zU3RhcnQsIGJvb2wgY29udGFpbnNFbmQsIGJvb2wgaXNIb3Jp
em9udGFsLCBib29sIGlzSW5GaXhlZFBvc2l0aW9uLCBib29sIGlzUnVieVRleHQsIGludCBwYWdl
TnVtYmVyKQogICAgIDogbV9xdWFkKHF1YWQpCiAgICAgLCBtX2JlaGF2aW9yKGJlaGF2aW9yKQog
ICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvU2VsZWN0aW9uR2VvbWV0cnkuaAppbmRleCBjOGE0YjFlYThhMTI4Njc0NDE3ODU2YTJj
MGM1Yjg0N2Y5NGFlNjcwLi4zNzI1NmI4ZWE4YzAzOWY2NzY3ZTA0MmFlNzA2MjA4ZDVkNmM2ZjA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9uR2VvbWV0
cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9uR2VvbWV0cnku
aApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQg
U2VsZWN0aW9uR2VvbWV0cnkoY29uc3QgRmxvYXRRdWFkJiwgU2VsZWN0aW9uUmVuZGVyaW5nQmVo
YXZpb3IsIGJvb2wgaXNIb3Jpem9udGFsLCBpbnQgY29sdW1uTnVtYmVyKTsKIAogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbW92ZSBzb21lIG9mIHRoZXNlIGFyZ3VtZW50cyB0byBhbiBhdXhpbGxh
cnkgc3RydWN0LgotICAgIFNlbGVjdGlvbkdlb21ldHJ5KGNvbnN0IEZsb2F0UXVhZCYsIFNlbGVj
dGlvblJlbmRlcmluZ0JlaGF2aW9yLCBUZXh0RGlyZWN0aW9uLCBpbnQsIGludCwgaW50LCBpbnQs
IGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsIGludCk7Cisg
ICAgU2VsZWN0aW9uR2VvbWV0cnkoY29uc3QgRmxvYXRRdWFkJiwgU2VsZWN0aW9uUmVuZGVyaW5n
QmVoYXZpb3IsIFBBTDo6VGV4dERpcmVjdGlvbiwgaW50LCBpbnQsIGludCwgaW50LCBib29sLCBi
b29sLCBib29sLCBib29sLCBib29sLCBib29sLCBib29sLCBib29sLCBpbnQpOwogICAgIFNlbGVj
dGlvbkdlb21ldHJ5KCkgPSBkZWZhdWx0OwogICAgIH5TZWxlY3Rpb25HZW9tZXRyeSgpID0gZGVm
YXVsdDsKIApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgaW50IGxvZ2ljYWxUb3AoKSBj
b25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/IHJlY3QoKS55KCkgOiByZWN0KCkueCgpOyB9
CiAgICAgaW50IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbCA/
IHJlY3QoKS5oZWlnaHQoKSA6IHJlY3QoKS53aWR0aCgpOyB9CiAKLSAgICBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisgICAgUEFMOjpUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CiAgICAg
aW50IG1pblgoKSBjb25zdCB7IHJldHVybiBtX21pblg7IH0KICAgICBpbnQgbWF4WCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWF4WDsgfQogICAgIGludCBtYXhZKCkgY29uc3QgeyByZXR1cm4gbV9tYXhZ
OyB9CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExvZ2ljYWxUb3AoaW50
KTsKICAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoaW50KTsKIAotICAgIHZvaWQgc2V0RGlyZWN0
aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKSB7IG1fZGlyZWN0aW9uID0gZGlyZWN0aW9uOyB9
CisgICAgdm9pZCBzZXREaXJlY3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgeyBt
X2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsgfQogICAgIHZvaWQgc2V0TWluWChpbnQgbWluWCkgeyBt
X21pblggPSBtaW5YOyB9CiAgICAgdm9pZCBzZXRNYXhYKGludCBtYXhYKSB7IG1fbWF4WCA9IG1h
eFg7IH0KICAgICB2b2lkIHNldE1heFkoaW50IG1heFkpIHsgbV9tYXhZID0gbWF4WTsgfQpAQCAt
OTMsNyArOTMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZsb2F0UXVhZCBtX3F1YWQ7CiAg
ICAgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IgbV9iZWhhdmlvciB7IFNlbGVjdGlvblJlbmRl
cmluZ0JlaGF2aW9yOjpDb2FsZXNjZUJvdW5kaW5nUmVjdHMgfTsKLSAgICBUZXh0RGlyZWN0aW9u
IG1fZGlyZWN0aW9uIHsgVGV4dERpcmVjdGlvbjo6TFRSIH07CisgICAgUEFMOjpUZXh0RGlyZWN0
aW9uIG1fZGlyZWN0aW9uIHsgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgfTsKICAgICBpbnQgbV9t
aW5YIHsgMCB9OwogICAgIGludCBtX21heFggeyAwIH07CiAgICAgaW50IG1fbWF4WSB7IDAgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1Y2QxMGJmMzQ4NjJjOGVlZWEyYjg0MWM3NWM3ZmRkYTk2
ZjlkZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHQgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQmlkaUNv
bnRleHQuaCIKLQotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFNhbWVTaXplQXNCaWRpQ29udGV4dD4gewotICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDE2Owot
ICAgIHZvaWQqIHBhcmVudDsKLX07Ci0KLUNPTVBJTEVfQVNTRVJUKHNpemVvZihCaWRpQ29udGV4
dCkgPT0gc2l6ZW9mKFNhbWVTaXplQXNCaWRpQ29udGV4dCksIEJpZGlDb250ZXh0X3Nob3VsZF9z
dGF5X3NtYWxsKTsKLQotaW5saW5lIEJpZGlDb250ZXh0OjpCaWRpQ29udGV4dCh1bnNpZ25lZCBj
aGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlF
bWJlZGRpbmdTb3VyY2Ugc291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KQotICAgIDogbV9sZXZl
bChsZXZlbCkKLSAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAsIG1fb3ZlcnJpZGUo
b3ZlcnJpZGUpCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3BhcmVudChwYXJlbnQp
Ci17Ci19Ci0KLWlubGluZSBSZWY8QmlkaUNvbnRleHQ+IEJpZGlDb250ZXh0OjpjcmVhdGVVbmNh
Y2hlZCh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wg
b3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJpZGlDb250ZXh0KGxldmVsLCBkaXJlY3Rp
b24sIG92ZXJyaWRlLCBzb3VyY2UsIHBhcmVudCkpOwotfQotCi1SZWY8QmlkaUNvbnRleHQ+IEJp
ZGlDb250ZXh0OjpjcmVhdGUodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGly
ZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNv
bnRleHQqIHBhcmVudCkKLXsKLSAgICBBU1NFUlQoZGlyZWN0aW9uID09IChsZXZlbCAlIDIgPyBV
X1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQpKTsKLQotICAgIGlmIChwYXJlbnQpCi0g
ICAgICAgIHJldHVybiBjcmVhdGVVbmNhY2hlZChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwg
c291cmNlLCBwYXJlbnQpOwotCi0gICAgQVNTRVJUKGxldmVsIDw9IDEpOwotICAgIGlmICghbGV2
ZWwpIHsKLSAgICAgICAgaWYgKCFvdmVycmlkZSkgewotICAgICAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJlZlB0cjxCaWRpQ29udGV4dD4+IGx0ckNvbnRleHQ7Ci0gICAgICAgICAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgbHRyQ29udGV4dE9uY2VGbGFnOwotICAgICAgICAgICAgc3Rk
OjpjYWxsX29uY2UobHRyQ29udGV4dE9uY2VGbGFnLCBbJl0oKSB7Ci0gICAgICAgICAgICAgICAg
bHRyQ29udGV4dC5nZXQoKSA9IGNyZWF0ZVVuY2FjaGVkKDAsIFVfTEVGVF9UT19SSUdIVCwgZmFs
c2UsIEZyb21TdHlsZU9yRE9NLCAwKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0
dXJuICpsdHJDb250ZXh0LmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJlZlB0cjxCaWRpQ29udGV4dD4+IGx0ck92ZXJyaWRlQ29udGV4dDsKLSAgICAg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGx0ck92ZXJyaWRlQ29udGV4dE9uY2VGbGFnOwotICAg
ICAgICBzdGQ6OmNhbGxfb25jZShsdHJPdmVycmlkZUNvbnRleHRPbmNlRmxhZywgWyZdKCkgewot
ICAgICAgICAgICAgbHRyT3ZlcnJpZGVDb250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMCwg
VV9MRUZUX1RPX1JJR0hULCB0cnVlLCBGcm9tU3R5bGVPckRPTSwgMCk7Ci0gICAgICAgIH0pOwot
ICAgICAgICByZXR1cm4gKmx0ck92ZXJyaWRlQ29udGV4dC5nZXQoKTsKLSAgICB9Ci0KLSAgICBp
ZiAoIW92ZXJyaWRlKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8Qmlk
aUNvbnRleHQ+PiBydGxDb250ZXh0OwotICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgcnRs
Q29udGV4dE9uY2VGbGFnOwotICAgICAgICBzdGQ6OmNhbGxfb25jZShydGxDb250ZXh0T25jZUZs
YWcsIFsmXSgpIHsKLSAgICAgICAgICAgIHJ0bENvbnRleHQuZ2V0KCkgPSBjcmVhdGVVbmNhY2hl
ZCgxLCBVX1JJR0hUX1RPX0xFRlQsIGZhbHNlLCBGcm9tU3R5bGVPckRPTSwgMCk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm4gKnJ0bENvbnRleHQuZ2V0KCk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxCaWRpQ29udGV4dD4+IHJ0bE92ZXJyaWRlQ29udGV4
dDsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgcnRsT3ZlcnJpZGVDb250ZXh0T25jZUZsYWc7
Ci0gICAgc3RkOjpjYWxsX29uY2UocnRsT3ZlcnJpZGVDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsK
LSAgICAgICAgcnRsT3ZlcnJpZGVDb250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMSwgVV9S
SUdIVF9UT19MRUZULCB0cnVlLCBGcm9tU3R5bGVPckRPTSwgMCk7Ci0gICAgfSk7Ci0gICAgcmV0
dXJuICpydGxPdmVycmlkZUNvbnRleHQuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmPEJp
ZGlDb250ZXh0PiBjb3B5Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZlbChCaWRpQ29udGV4dCYgY29u
dGV4dCwgQmlkaUNvbnRleHQqIHBhcmVudCkKLXsKLSAgICBhdXRvIG5ld0xldmVsID0gcGFyZW50
ID8gcGFyZW50LT5sZXZlbCgpIDogMDsKLSAgICBpZiAoY29udGV4dC5kaXIoKSA9PSBVX1JJR0hU
X1RPX0xFRlQpCi0gICAgICAgIG5ld0xldmVsID0gbmV4dEdyZWF0ZXJPZGRMZXZlbChuZXdMZXZl
bCk7Ci0gICAgZWxzZSBpZiAocGFyZW50KQotICAgICAgICBuZXdMZXZlbCA9IG5leHRHcmVhdGVy
RXZlbkxldmVsKG5ld0xldmVsKTsKLSAgICByZXR1cm4gQmlkaUNvbnRleHQ6OmNyZWF0ZShuZXdM
ZXZlbCwgY29udGV4dC5kaXIoKSwgY29udGV4dC5vdmVycmlkZSgpLCBjb250ZXh0LnNvdXJjZSgp
LCBwYXJlbnQpOwotfQotCi0vLyBUaGUgQmlkaUNvbnRleHQgc3RhY2sgbXVzdCBiZSBpbW11dGFi
bGUgLS0gdGhleSdyZSByZS11c2VkIGZvciByZS1sYXlvdXQgYWZ0ZXIKLS8vIERPTSBtb2RpZmlj
YXRpb24vZWRpdGluZyAtLSBzbyB3ZSBjb3B5IGFsbCB0aGUgbm9uLVVuaWNvZGUgY29udGV4dHMs
IGFuZAotLy8gcmVjYWxjdWxhdGUgdGhlaXIgbGV2ZWxzLgotUmVmPEJpZGlDb250ZXh0PiBCaWRp
Q29udGV4dDo6Y29weVN0YWNrUmVtb3ZpbmdVbmljb2RlRW1iZWRkaW5nQ29udGV4dHMoKQotewot
ICAgIFZlY3RvcjxCaWRpQ29udGV4dCosIDY0PiBjb250ZXh0czsKLSAgICBmb3IgKGF1dG8qIGFu
Y2VzdG9yID0gdGhpczsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpKSB7
Ci0gICAgICAgIGlmIChhbmNlc3Rvci0+c291cmNlKCkgIT0gRnJvbVVuaWNvZGUpCi0gICAgICAg
ICAgICBjb250ZXh0cy5hcHBlbmQoYW5jZXN0b3IpOwotICAgIH0KLSAgICBBU1NFUlQoY29udGV4
dHMuc2l6ZSgpKTsKLSAgICBhdXRvIHRvcENvbnRleHQgPSBjb3B5Q29udGV4dEFuZFJlYmFzZWxp
bmVMZXZlbCgqY29udGV4dHMubGFzdCgpLCBudWxscHRyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBjb250ZXh0cy5zaXplKCkgLSAxOyBpOyAtLWkpCi0gICAgICAgIHRvcENvbnRleHQgPSBjb3B5
Q29udGV4dEFuZFJlYmFzZWxpbmVMZXZlbCgqY29udGV4dHNbaSAtIDFdLCB0b3BDb250ZXh0LnB0
cigpKTsKLSAgICByZXR1cm4gdG9wQ29udGV4dDsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEJpZGlDb250ZXh0JiBjMSwgY29uc3QgQmlkaUNvbnRleHQmIGMyKQotewotICAgIGlmICgmYzEg
PT0gJmMyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoYzEubGV2ZWwoKSAhPSBjMi5s
ZXZlbCgpIHx8IGMxLm92ZXJyaWRlKCkgIT0gYzIub3ZlcnJpZGUoKSB8fCBjMS5kaXIoKSAhPSBj
Mi5kaXIoKSB8fCBjMS5zb3VyY2UoKSAhPSBjMi5zb3VyY2UoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghYzEucGFyZW50KCkpCi0gICAgICAgIHJldHVybiAhYzIucGFyZW50KCk7
Ci0gICAgcmV0dXJuIGMyLnBhcmVudCgpICYmICpjMS5wYXJlbnQoKSA9PSAqYzIucGFyZW50KCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQmlkaUNvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE4ZDkwOWVl
YTkxYjYxOWU1Mzk0NjlmZGFjZmM0ZjNhMjYwM2Q3MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlD
b250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1lbnVtIEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJvbVVuaWNv
ZGUgfTsKLQotLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGluZ3MuCi1j
bGFzcyBCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCaWRpQ29udGV4
dD4gewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+
IGNyZWF0ZSh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlk
ZSA9IGZhbHNlLCBCaWRpRW1iZWRkaW5nU291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250
ZXh0KiBwYXJlbnQgPSBudWxscHRyKTsKLQotICAgIEJpZGlDb250ZXh0KiBwYXJlbnQoKSBjb25z
dCB7IHJldHVybiBtX3BhcmVudC5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwoKSBj
b25zdCB7IHJldHVybiBtX2xldmVsOyB9Ci0gICAgVUNoYXJEaXJlY3Rpb24gZGlyKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fZGlyZWN0aW9uKTsgfQotICAg
IGJvb2wgb3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlOyB9Ci0gICAgQmlkaUVt
YmVkZGluZ1NvdXJjZSBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxCaWRpRW1i
ZWRkaW5nU291cmNlPihtX3NvdXJjZSk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxCaWRp
Q29udGV4dD4gY29weVN0YWNrUmVtb3ZpbmdVbmljb2RlRW1iZWRkaW5nQ29udGV4dHMoKTsKLQot
cHJpdmF0ZToKLSAgICBCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVj
dGlvbiwgYm9vbCBvdmVycmlkZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSwgQmlkaUNvbnRleHQqIHBh
cmVudCk7Ci0KLSAgICBzdGF0aWMgUmVmPEJpZGlDb250ZXh0PiBjcmVhdGVVbmNhY2hlZCh1bnNp
Z25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSwgQmlkaUVtYmVk
ZGluZ1NvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCk7Ci0KLSAgICB1bnNpZ25lZCBtX2xldmVs
IDogNjsgLy8gVGhlIG1heGltaXVtIGJpZGkgbGV2ZWwgaXMgNjI6IGh0dHA6Ly91bmljb2RlLm9y
Zy9yZXBvcnRzL3RyOS8jRXhwbGljaXRfTGV2ZWxzX2FuZF9EaXJlY3Rpb25zCi0gICAgdW5zaWdu
ZWQgbV9kaXJlY3Rpb24gOiA1OyAvLyBEaXJlY3Rpb24KLSAgICB1bnNpZ25lZCBtX292ZXJyaWRl
IDogMTsKLSAgICB1bnNpZ25lZCBtX3NvdXJjZSA6IDE7IC8vIEJpZGlFbWJlZGRpbmdTb3VyY2UK
LSAgICBSZWZQdHI8QmlkaUNvbnRleHQ+IG1fcGFyZW50OwotfTsKLQotaW5saW5lIHVuc2lnbmVk
IGNoYXIgbmV4dEdyZWF0ZXJPZGRMZXZlbCh1bnNpZ25lZCBjaGFyIGxldmVsKQotewotICAgIHJl
dHVybiAobGV2ZWwgKyAxKSB8IDE7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBjaGFyIG5leHRHcmVh
dGVyRXZlbkxldmVsKHVuc2lnbmVkIGNoYXIgbGV2ZWwpCi17Ci0gICAgcmV0dXJuIChsZXZlbCAr
IDIpICYgfjE7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBCaWRpQ29udGV4dCYsIGNvbnN0
IEJpZGlDb250ZXh0Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2OWQ5ZTQ2ZTA4NjU2OGRjOTA3YWI1ODRkYzQyNjY4NTcwNWZkY2YwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvQmlkaVJlc29sdmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NzQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJCaWRpQ29udGV4dC5oIgotI2luY2x1ZGUgIkJp
ZGlSdW5MaXN0LmgiCi0jaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJPYmplY3Q7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiBjbGFzcyBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRl
IHsKLXB1YmxpYzoKLSAgICB2b2lkIHJlc2V0KCkKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNpdGlv
bnMuY2xlYXIoKTsKLSAgICAgICAgbV9jdXJyZW50VHJhbnNpdGlvbiA9IDA7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc3RhcnRJZ25vcmluZ1NwYWNlcyhjb25zdCBJdGVyYXRvciYgdHJhbnNpdGlv
bikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghKG1fdHJhbnNpdGlvbnMuc2l6ZSgpICUgMikpOwot
ICAgICAgICBtX3RyYW5zaXRpb25zLmFwcGVuZCh0cmFuc2l0aW9uKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHN0b3BJZ25vcmluZ1NwYWNlcyhjb25zdCBJdGVyYXRvciYgdHJhbnNpdGlvbikKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChtX3RyYW5zaXRpb25zLnNpemUoKSAlIDIpOwotICAgICAgICBtX3Ry
YW5zaXRpb25zLmFwcGVuZCh0cmFuc2l0aW9uKTsKLSAgICB9Ci0KLSAgICAvLyBXaGVuIGlnbm9y
aW5nIHNwYWNlcywgdGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBuZWVk
IGxpbmUgYm94ZXMgc3VjaCBhcyBSZW5kZXJJbmxpbmVzIG9yCi0gICAgLy8gaGFyZCBsaW5lIGJy
ZWFrcyB0byBlbnN1cmUgdGhhdCB0aGV5J3JlIG5vdCBpZ25vcmVkLgotICAgIHZvaWQgZW5zdXJl
TGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKLSAgICB7
Ci0gICAgICAgIEl0ZXJhdG9yIHRyYW5zaXRpb24oMCwgJnJlbmRlcmVyLCAwKTsKLSAgICAgICAg
c3RvcElnbm9yaW5nU3BhY2VzKHRyYW5zaXRpb24pOwotICAgICAgICBzdGFydElnbm9yaW5nU3Bh
Y2VzKHRyYW5zaXRpb24pOwotICAgIH0KLQotICAgIHZvaWQgZGVjcmVtZW50VHJhbnNpdGlvbkF0
KHNpemVfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIG1fdHJhbnNpdGlvbnNbaW5kZXhdLmZhc3RE
ZWNyZW1lbnQoKTsKLSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8SXRlcmF0b3I+JiB0cmFuc2l0
aW9ucygpIHsgcmV0dXJuIG1fdHJhbnNpdGlvbnM7IH0KLSAgICBzaXplX3QgbnVtVHJhbnNpdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zaXRpb25zLnNpemUoKTsgfQotICAgIHNpemVfdCBj
dXJyZW50VHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRyYW5zaXRpb247IH0K
LSAgICB2b2lkIHNldEN1cnJlbnRUcmFuc2l0aW9uKHNpemVfdCBjdXJyZW50VHJhbnNpdGlvbikg
eyBtX2N1cnJlbnRUcmFuc2l0aW9uID0gY3VycmVudFRyYW5zaXRpb247IH0KLSAgICB2b2lkIGlu
Y3JlbWVudEN1cnJlbnRUcmFuc2l0aW9uKCkgeyArK21fY3VycmVudFRyYW5zaXRpb247IH0KLSAg
ICB2b2lkIGRlY3JlbWVudE51bVRyYW5zaXRpb25zKCkgeyBtX3RyYW5zaXRpb25zLnNocmluayht
X3RyYW5zaXRpb25zLnNpemUoKSAtIDEpOyB9Ci0gICAgYm9vbCBiZXR3ZWVuVHJhbnNpdGlvbnMo
KSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUcmFuc2l0aW9uICUgMjsgfQotcHJpdmF0ZToKLSAg
ICBWZWN0b3I8SXRlcmF0b3I+IG1fdHJhbnNpdGlvbnM7Ci0gICAgc2l6ZV90IG1fY3VycmVudFRy
YW5zaXRpb24geyAwIH07Ci19OwotCi0vLyBUaGUgQmlkaVN0YXR1cyBhdCBhIGdpdmVuIHBvc2l0
aW9uICh0eXBpY2FsbHkgdGhlIGVuZCBvZiBhIGxpbmUpIGNhbgotLy8gYmUgY2FjaGVkIGFuZCB0
aGVuIHVzZWQgdG8gcmVzdGFydCBiaWRpIHJlc29sdXRpb24gYXQgdGhhdCBwb3NpdGlvbi4KLXN0
cnVjdCBCaWRpU3RhdHVzIHsKLSAgICBCaWRpU3RhdHVzKCkgPSBkZWZhdWx0OwotCi0gICAgLy8g
Q3JlYXRlcyBhIEJpZGlTdGF0dXMgcmVwcmVzZW50aW5nIGEgbmV3IHBhcmFncmFwaCByb290IHdp
dGggYSBkZWZhdWx0IGRpcmVjdGlvbi4KLSAgICAvLyBVc2VzIFRleHREaXJlY3Rpb24gYXMgaXQg
b25seSBoYXMgdHdvIHBvc3NpYmlsaXRpZXMgaW5zdGVhZCBvZiBVQ2hhckRpcmVjdGlvbiB3aGlj
aCBoYXMgYXQgbGVhc3QgMTkuCi0gICAgQmlkaVN0YXR1cyhUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
biwgYm9vbCBpc092ZXJyaWRlKQotICAgICAgICA6IGVvcihkaXJlY3Rpb24gPT0gVGV4dERpcmVj
dGlvbjo6TFRSID8gVV9MRUZUX1RPX1JJR0hUIDogVV9SSUdIVF9UT19MRUZUKQotICAgICAgICAs
IGxhc3RTdHJvbmcoZW9yKQotICAgICAgICAsIGxhc3QoZW9yKQotICAgICAgICAsIGNvbnRleHQo
QmlkaUNvbnRleHQ6OmNyZWF0ZShkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMCA6
IDEsIGVvciwgaXNPdmVycmlkZSkpCi0gICAgewotICAgIH0KLQotICAgIEJpZGlTdGF0dXMoVUNo
YXJEaXJlY3Rpb24gZW9yLCBVQ2hhckRpcmVjdGlvbiBsYXN0U3Ryb25nLCBVQ2hhckRpcmVjdGlv
biBsYXN0LCBSZWZQdHI8QmlkaUNvbnRleHQ+JiYgY29udGV4dCkKLSAgICAgICAgOiBlb3IoZW9y
KQotICAgICAgICAsIGxhc3RTdHJvbmcobGFzdFN0cm9uZykKLSAgICAgICAgLCBsYXN0KGxhc3Qp
Ci0gICAgICAgICwgY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBVQ2hhckRpcmVjdGlvbiBlb3IgeyBVX09USEVSX05FVVRSQUwgfTsKLSAgICBVQ2hhckRpcmVj
dGlvbiBsYXN0U3Ryb25nIHsgVV9PVEhFUl9ORVVUUkFMIH07Ci0gICAgVUNoYXJEaXJlY3Rpb24g
bGFzdCB7IFVfT1RIRVJfTkVVVFJBTCB9OwotICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gY29udGV4
dDsKLX07Ci0KLXN0cnVjdCBCaWRpRW1iZWRkaW5nIHsKLSAgICBCaWRpRW1iZWRkaW5nKFVDaGFy
RGlyZWN0aW9uIGRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCi0gICAgICAg
IDogZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAgICAgLCBzb3VyY2Uoc291cmNlKQotICAgIHsK
LSAgICB9Ci0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgQmlkaUVtYmVkZGlu
Z1NvdXJjZSBzb3VyY2U7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlT
dGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czIpCi17Ci0gICAgcmV0dXJu
IHN0YXR1czEuZW9yID09IHN0YXR1czIuZW9yICYmIHN0YXR1czEubGFzdCA9PSBzdGF0dXMyLmxh
c3QgJiYgc3RhdHVzMS5sYXN0U3Ryb25nID09IHN0YXR1czIubGFzdFN0cm9uZyAmJiAqKHN0YXR1
czEuY29udGV4dCkgPT0gKihzdGF0dXMyLmNvbnRleHQpOwotfQotCi1pbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1
czIpCi17Ci0gICAgcmV0dXJuICEoc3RhdHVzMSA9PSBzdGF0dXMyKTsKLX0KLQotc3RydWN0IEJp
ZGlDaGFyYWN0ZXJSdW4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIEJpZGlDaGFyYWN0ZXJSdW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3AsIEJpZGlD
b250ZXh0KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24pCi0gICAgICAgIDogbV9z
dGFydChzdGFydCkKLSAgICAgICAgLCBtX3N0b3Aoc3RvcCkKLSAgICAgICAgLCBtX292ZXJyaWRl
KGNvbnRleHQtPm92ZXJyaWRlKCkpCi0gICAgewotICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVf
T1RIRVJfTkVVVFJBTCkKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IGNvbnRleHQtPmRpcigpOwot
Ci0gICAgICAgIG1fbGV2ZWwgPSBjb250ZXh0LT5sZXZlbCgpOwotCi0gICAgICAgIC8vIGFkZCBs
ZXZlbCBvZiBydW4gKGNhc2VzIEkxICYgSTIpCi0gICAgICAgIGlmIChtX2xldmVsICUgMikgewot
ICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFQgfHwgZGlyZWN0aW9u
ID09IFVfQVJBQklDX05VTUJFUiB8fCBkaXJlY3Rpb24gPT0gVV9FVVJPUEVBTl9OVU1CRVIpCi0g
ICAgICAgICAgICAgICAgbV9sZXZlbCsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlQpCi0gICAgICAgICAgICAgICAgbV9sZXZl
bCsrOwotICAgICAgICAgICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IFVfQVJBQklDX05VTUJFUiB8
fCBkaXJlY3Rpb24gPT0gVV9FVVJPUEVBTl9OVU1CRVIpCi0gICAgICAgICAgICAgICAgbV9sZXZl
bCArPSAyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgfkJpZGlDaGFyYWN0ZXJSdW4oKQotICAg
IHsKLSAgICAgICAgLy8gRGVsZXRlIHRoZSBsaW5rZWQgbGlzdCBpbiBhIGxvb3AgdG8gcHJldmVu
dCBkZXN0cnVjdG9yIHJlY3Vyc2lvbi4KLSAgICAgICAgYXV0byBuZXh0ID0gV1RGTW92ZShtX25l
eHQpOwotICAgICAgICB3aGlsZSAobmV4dCkKLSAgICAgICAgICAgIG5leHQgPSBXVEZNb3ZlKG5l
eHQtPm1fbmV4dCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0OyB9Ci0gICAgdW5zaWduZWQgc3RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcDsg
fQotICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xldmVsOyB9Ci0g
ICAgYm9vbCByZXZlcnNlZChib29sIHZpc3VhbGx5T3JkZXJlZCkgeyByZXR1cm4gbV9sZXZlbCAl
IDIgJiYgIXZpc3VhbGx5T3JkZXJlZDsgfQotICAgIGJvb2wgZGlyT3ZlcnJpZGUoYm9vbCB2aXN1
YWxseU9yZGVyZWQpIHsgcmV0dXJuIG1fb3ZlcnJpZGUgfHwgdmlzdWFsbHlPcmRlcmVkOyB9Ci0K
LSAgICBCaWRpQ2hhcmFjdGVyUnVuKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgp
OyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+IHRha2VOZXh0KCkgeyBy
ZXR1cm4gV1RGTW92ZShtX25leHQpOyB9Ci0gICAgdm9pZCBzZXROZXh0KHN0ZDo6dW5pcXVlX3B0
cjxCaWRpQ2hhcmFjdGVyUnVuPiYmIG5leHQpIHsgbV9uZXh0ID0gV1RGTW92ZShuZXh0KTsgfQot
Ci1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiBtX25leHQ7
Ci0KLXB1YmxpYzoKLSAgICB1bnNpZ25lZCBtX3N0YXJ0OwotICAgIHVuc2lnbmVkIG1fc3RvcDsK
LSAgICB1bnNpZ25lZCBjaGFyIG1fbGV2ZWw7Ci0gICAgYm9vbCBtX292ZXJyaWRlIDogMTsKLSAg
ICBib29sIG1faGFzSHlwaGVuIDogMTsgLy8gVXNlZCBieSBCaWRpUnVuIHN1YmNsYXNzIHdoaWNo
IGlzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIGJ1dCBlbmFibGVzIHVzIHRvIHNhdmUgOCBieXRlcyBw
ZXIgb2JqZWN0IG9uIDY0LWJpdC4KLX07Ci0KLWVudW0gVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUg
ewotICAgIE5vVmlzdWFsT3ZlcnJpZGUsCi0gICAgVmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSwK
LSAgICBWaXN1YWxSaWdodFRvTGVmdE92ZXJyaWRlCi19OwotCi0vLyBCaWRpUmVzb2x2ZXIgaXMg
V2ViS2l0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0KLS8v
IGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0
b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPiBjbGFzcyBCaWRpUmVzb2x2
ZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCaWRpUmVzb2x2ZXJCYXNlKTsKLXB1
YmxpYzoKLSAgICBjb25zdCBJdGVyYXRvciYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2N1
cnJlbnQ7IH0KLSAgICB2b2lkIHNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhjb25z
dCBJdGVyYXRvciYgcG9zaXRpb24pIHsgbV9jdXJyZW50ID0gcG9zaXRpb247IH0KLSAgICB2b2lk
IHNldFBvc2l0aW9uKGNvbnN0IEl0ZXJhdG9yJiBwb3NpdGlvbiwgdW5zaWduZWQgbmVzdGVkSXNv
bGF0ZWRDb3VudCkKLSAgICB7Ci0gICAgICAgIG1fY3VycmVudCA9IHBvc2l0aW9uOwotICAgICAg
ICBtX25lc3RlZElzb2xhdGVDb3VudCA9IG5lc3RlZElzb2xhdGVkQ291bnQ7Ci0gICAgfQotCi0g
ICAgdm9pZCBpbmNyZW1lbnQoKSB7IHN0YXRpY19jYXN0PERlcml2ZWRDbGFzcyY+KCp0aGlzKS5p
bmNyZW1lbnRJbnRlcm5hbCgpOyB9Ci0KLSAgICBCaWRpQ29udGV4dCogY29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdHVzLmNvbnRleHQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldENvbnRleHQo
UmVmUHRyPEJpZGlDb250ZXh0PiYmIGNvbnRleHQpIHsgbV9zdGF0dXMuY29udGV4dCA9IFdURk1v
dmUoY29udGV4dCk7IH0KLQotICAgIHZvaWQgc2V0TGFzdERpcihVQ2hhckRpcmVjdGlvbiBsYXN0
RGlyKSB7IG1fc3RhdHVzLmxhc3QgPSBsYXN0RGlyOyB9Ci0gICAgdm9pZCBzZXRMYXN0U3Ryb25n
RGlyKFVDaGFyRGlyZWN0aW9uIGxhc3RTdHJvbmdEaXIpIHsgbV9zdGF0dXMubGFzdFN0cm9uZyA9
IGxhc3RTdHJvbmdEaXI7IH0KLSAgICB2b2lkIHNldEVvckRpcihVQ2hhckRpcmVjdGlvbiBlb3JE
aXIpIHsgbV9zdGF0dXMuZW9yID0gZW9yRGlyOyB9Ci0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXIo
KSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQotICAgIHZvaWQgc2V0RGlyKFVDaGFyRGly
ZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsgfQotCi0gICAgY29u
c3QgQmlkaVN0YXR1cyYgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KLSAgICB2
b2lkIHNldFN0YXR1cyhCaWRpU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQot
Ci0gICAgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTxJdGVyYXRvcj4mIHdoaXRlc3BhY2VDb2xs
YXBzaW5nU3RhdGUoKSB7IHJldHVybiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7IH0KLQot
ICAgIC8vIFRoZSBjdXJyZW50IGFsZ29yaXRobSBoYW5kbGVzIG5lc3RlZCBpc29sYXRlcyBvbmUg
bGF5ZXIgb2YgbmVzdGluZyBhdCBhIHRpbWUuCi0gICAgLy8gQnV0IHdoZW4gd2UgbGF5b3V0IGVh
Y2ggaXNvbGF0ZWQgc3Bhbiwgd2Ugd2lsbCB3YWxrIGludG8gKGFuZCBpZ25vcmUpIGFsbAotICAg
IC8vIGNoaWxkIGlzb2xhdGVkIHNwYW5zLgotICAgIHZvaWQgZW50ZXJJc29sYXRlKCkgeyBtX25l
c3RlZElzb2xhdGVDb3VudCsrOyB9Ci0gICAgdm9pZCBleGl0SXNvbGF0ZSgpIHsgQVNTRVJUKG1f
bmVzdGVkSXNvbGF0ZUNvdW50ID49IDEpOyBtX25lc3RlZElzb2xhdGVDb3VudC0tOyB9Ci0gICAg
Ym9vbCBpbklzb2xhdGUoKSBjb25zdCB7IHJldHVybiBtX25lc3RlZElzb2xhdGVDb3VudDsgfQot
Ci0gICAgdm9pZCBlbWJlZChVQ2hhckRpcmVjdGlvbiwgQmlkaUVtYmVkZGluZ1NvdXJjZSk7Ci0g
ICAgYm9vbCBjb21taXRFeHBsaWNpdEVtYmVkZGluZygpOwotCi0gICAgdm9pZCBjcmVhdGVCaWRp
UnVuc0ZvckxpbmUoY29uc3QgSXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUg
PSBOb1Zpc3VhbE92ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJlYWsgPSBmYWxzZSk7Ci0KLSAgICBC
aWRpUnVuTGlzdDxSdW4+JiBydW5zKCkgeyByZXR1cm4gbV9ydW5zOyB9Ci0KLSAgICAvLyBGSVhN
RTogVGhpcyB1c2VkIHRvIGJlIHBhcnQgb2YgZGVsZXRlUnVucygpIGJ1dCB3YXMgYSBsYXllcmlu
ZyB2aW9sYXRpb24uCi0gICAgLy8gSXQncyB1bmNsZWFyIGlmIHRoaXMgaXMgc3RpbGwgbmVlZGVk
LgotICAgIHZvaWQgbWFya0N1cnJlbnRSdW5FbXB0eSgpIHsgbV9lbXB0eVJ1biA9IHRydWU7IH0K
LQotICAgIHZvaWQgc2V0V2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRS
dW4oUnVuJiwgc2l6ZV90KTsKLSAgICB1bnNpZ25lZCB3aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5z
aXRpb25Gb3JJc29sYXRlZFJ1bihSdW4mKTsKLQotcHJvdGVjdGVkOgotICAgIEJpZGlSZXNvbHZl
ckJhc2UoKSA9IGRlZmF1bHQ7Ci0KLSAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBJbmxpbmVCaWRp
UmVzb2x2ZXJzIHN1YmNsYXNzaW5nIHRoaXMgbWV0aG9kLCB3ZSBzaG91bGQKLSAgICAvLyBwYXNz
IGluIHNvbWUgc29ydCBvZiBUcmFpdHMgb2JqZWN0IHdoaWNoIGtub3dzIGhvdyB0byBjcmVhdGUg
cnVucyBmb3IgYXBwZW5kaW5nLgotICAgIHZvaWQgYXBwZW5kUnVuKCkgeyBzdGF0aWNfY2FzdDxE
ZXJpdmVkQ2xhc3MmPigqdGhpcykuYXBwZW5kUnVuSW50ZXJuYWwoKTsgfQotICAgIGJvb2wgbmVl
ZHNDb250aW51ZVBhc3RFbmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBEZXJp
dmVkQ2xhc3MmPigqdGhpcykubmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5hbCgpOyB9Ci0KLSAg
ICBJdGVyYXRvciBtX2N1cnJlbnQ7Ci0gICAgLy8gc29yIGFuZCBlb3IgYXJlICJzdGFydCBvZiBy
dW4iIGFuZCAiZW5kIG9mIHJ1biIgcmVzcGVjdGl2ZWx5IGFuZCBjb3JyZXBvbmQKLSAgICAvLyB0
byBhYnJldmlhdGlvbnMgdXNlZCBpbiBVQkEgc3BlYzogaHR0cDovL3VuaWNvZGUub3JnL3JlcG9y
dHMvdHI5LyNCRDcKLSAgICBJdGVyYXRvciBtX3NvcjsgLy8gUG9pbnRzIHRvIHRoZSBmaXJzdCBj
aGFyYWN0ZXIgaW4gdGhlIGN1cnJlbnQgcnVuLgotICAgIEl0ZXJhdG9yIG1fZW9yOyAvLyBQb2lu
dHMgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBjdXJyZW50IHJ1bi4KLSAgICBJdGVyYXRv
ciBtX2xhc3Q7Ci0gICAgQmlkaVN0YXR1cyBtX3N0YXR1czsKLSAgICBVQ2hhckRpcmVjdGlvbiBt
X2RpcmVjdGlvbiB7IFVfT1RIRVJfTkVVVFJBTCB9OwotICAgIEl0ZXJhdG9yIGVuZE9mTGluZTsK
LSAgICBib29sIG1fcmVhY2hlZEVuZE9mTGluZSB7IGZhbHNlIH07Ci0gICAgSXRlcmF0b3IgbV9s
YXN0QmVmb3JlRVQ7IC8vIEJlZm9yZSBhIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IKLSAg
ICBib29sIG1fZW1wdHlSdW4geyB0cnVlIH07Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
bm90IGJlbG9uZyB0byB0aGUgcmVzb2x2ZXIsIGJ1dCByYXRoZXIgYmUgcGFzc2VkCi0gICAgLy8g
aW50byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUgYnkgdGhlIGNhbGxlci4KLSAgICBCaWRpUnVuTGlz
dDxSdW4+IG1fcnVuczsKLQotICAgIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU8SXRlcmF0b3I+
IG1fd2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsKLQotICAgIHVuc2lnbmVkIG1fbmVzdGVkSXNv
bGF0ZUNvdW50IHsgMCB9OwotICAgIEhhc2hNYXA8UnVuKiwgdW5zaWduZWQ+IG1fd2hpdGVzcGFj
ZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW47Ci0KLXByaXZhdGU6Ci0gICAgdm9p
ZCByYWlzZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSwgVUNoYXJE
aXJlY3Rpb24gdG8pOwotICAgIHZvaWQgbG93ZXJFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFy
RGlyZWN0aW9uIGZyb20pOwotICAgIHZvaWQgY2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJl
ZGRpbmdMZXZlbCgpOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJl
Y3Rpb24oVUNoYXJEaXJlY3Rpb24pOwotICAgIHZvaWQgcmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCk7
Ci0gICAgdm9pZCBpbmNyZW1lbnRJbnRlcm5hbCgpIHsgbV9jdXJyZW50LmluY3JlbWVudCgpOyB9
Ci0gICAgdm9pZCBhcHBlbmRSdW5JbnRlcm5hbCgpOwotICAgIGJvb2wgbmVlZHNDb250aW51ZVBh
c3RFbmRJbnRlcm5hbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFZlY3RvcjxCaWRp
RW1iZWRkaW5nLCA4PiBtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1bj4KLWNsYXNzIEJpZGlSZXNv
bHZlciA6IHB1YmxpYyBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIEJpZGlSZXNvbHZl
cjxJdGVyYXRvciwgUnVuPj4gewotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5
cGVuYW1lIFJ1biwgdHlwZW5hbWUgSXNvbGF0ZVJ1bj4KLWNsYXNzIEJpZGlSZXNvbHZlcldpdGhJ
c29sYXRlIDogcHVibGljIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgQmlkaVJlc29s
dmVyV2l0aElzb2xhdGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj4+IHsKLXB1YmxpYzoKLSAg
ICB+QmlkaVJlc29sdmVyV2l0aElzb2xhdGUoKTsKLQotICAgIHZvaWQgaW5jcmVtZW50SW50ZXJu
YWwoKTsKLSAgICB2b2lkIGFwcGVuZFJ1bkludGVybmFsKCk7Ci0gICAgYm9vbCBuZWVkc0NvbnRp
bnVlUGFzdEVuZEludGVybmFsKCkgY29uc3Q7Ci0gICAgVmVjdG9yPElzb2xhdGVSdW4+JiBpc29s
YXRlZFJ1bnMoKSB7IHJldHVybiBtX2lzb2xhdGVkUnVuczsgfQotCi1wcml2YXRlOgotICAgIFZl
Y3RvcjxJc29sYXRlUnVuPiBtX2lzb2xhdGVkUnVuczsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIElzb2xhdGVSdW4+Ci1pbmxpbmUgQmlk
aVJlc29sdmVyV2l0aElzb2xhdGU8SXRlcmF0b3IsIFJ1biwgSXNvbGF0ZVJ1bj46On5CaWRpUmVz
b2x2ZXJXaXRoSXNvbGF0ZSgpCi17Ci0gICAgLy8gVGhlIG93bmVyIG9mIHRoaXMgcmVzb2x2ZXIg
c2hvdWxkIGhhdmUgaGFuZGxlZCB0aGUgaXNvbGF0ZWQgcnVucy4KLSAgICBBU1NFUlQobV9pc29s
YXRlZFJ1bnMuaXNFbXB0eSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5
cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNl
PEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmFwcGVuZFJ1bkludGVybmFsKCkKLXsKLSAg
ICBpZiAoIW1fZW1wdHlSdW4gJiYgIW1fZW9yLmF0RW5kKCkpIHsKLSAgICAgICAgdW5zaWduZWQg
c3RhcnRPZmZzZXQgPSBtX3Nvci5vZmZzZXQoKTsKLSAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0
ID0gbV9lb3Iub2Zmc2V0KCk7Ci0KLSAgICAgICAgaWYgKCFlbmRPZkxpbmUuYXRFbmQoKSAmJiBl
bmRPZmZzZXQgPj0gZW5kT2ZMaW5lLm9mZnNldCgpKSB7Ci0gICAgICAgICAgICBtX3JlYWNoZWRF
bmRPZkxpbmUgPSB0cnVlOwotICAgICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kT2ZMaW5lLm9mZnNl
dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVuZE9mZnNldCA+PSBzdGFydE9mZnNldCkK
LSAgICAgICAgICAgIG1fcnVucy5hcHBlbmRSdW4obWFrZVVuaXF1ZTxSdW4+KHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQgKyAxLCBjb250ZXh0KCksIG1fZGlyZWN0aW9uKSk7Ci0KLSAgICAgICAgbV9l
b3IuaW5jcmVtZW50KCk7Ci0gICAgICAgIG1fc29yID0gbV9lb3I7Ci0gICAgfQotCi0gICAgbV9k
aXJlY3Rpb24gPSBVX09USEVSX05FVVRSQUw7Ci0gICAgbV9zdGF0dXMuZW9yID0gVV9PVEhFUl9O
RVVUUkFMOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0
eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1
biwgRGVyaXZlZENsYXNzPjo6ZW1iZWQoVUNoYXJEaXJlY3Rpb24gZGlyLCBCaWRpRW1iZWRkaW5n
U291cmNlIHNvdXJjZSkKLXsKLSAgICAvLyBJc29sYXRlZCBzcGFucyBjb21wdXRlIGJhc2UgZGly
ZWN0aW9uYWxpdHkgZHVyaW5nIHRoZWlyIG93biBVQkEgcnVuLgotICAgIC8vIERvIG5vdCBpbnNl
cnQgZmFrZSBlbWJlZCBjaGFyYWN0ZXJzIG9uY2Ugd2UgZW50ZXIgYW4gaXNvbGF0ZWQgc3Bhbi4K
LSAgICBBU1NFUlQoIWluSXNvbGF0ZSgpKTsKLQotICAgIEFTU0VSVChkaXIgPT0gVV9QT1BfRElS
RUNUSU9OQUxfRk9STUFUIHx8IGRpciA9PSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIHx8IGRp
ciA9PSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUgfHwgZGlyID09IFVfUklHSFRfVE9fTEVGVF9F
TUJFRERJTkcgfHwgZGlyID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSk7Ci0gICAgbV9jdXJy
ZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZS5hcHBlbmQoQmlkaUVtYmVkZGluZyhkaXIsIHNv
dXJjZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0
eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1
biwgRGVyaXZlZENsYXNzPjo6Y2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZl
bCgpCi17Ci0gICAgQVNTRVJUKG1fc3RhdHVzLmVvciAhPSBVX09USEVSX05FVVRSQUwgfHwgbV9l
b3IuYXRFbmQoKSk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzLmxhc3QgIT0gVV9ESVJfTk9OX1NQQUNJ
TkdfTUFSSwotICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfQk9VTkRBUllfTkVVVFJBTAot
ICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcKLSAg
ICAgICAgJiYgbV9zdGF0dXMubGFzdCAhPSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HCi0gICAg
ICAgICYmIG1fc3RhdHVzLmxhc3QgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFIAotICAgICAg
ICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERQotICAgICAgICAm
JiBtX3N0YXR1cy5sYXN0ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCk7Ci0gICAgaWYgKG1f
ZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKLSAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0
YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVf
UklHSFRfVE9fTEVGVDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1l
IFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJh
dG9yLCBSdW4sIERlcml2ZWRDbGFzcz46Omxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hh
ckRpcmVjdGlvbiBmcm9tKQotewotICAgIGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xh
c3QpIHsKLSAgICAgICAgY2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgp
OwotICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5l
ZWQgdG8gYXBwZW5kIHRoZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91
Z2ggYmlkaS5sYXN0Ci0gICAgICAgIGlmIChmcm9tID09IFVfTEVGVF9UT19SSUdIVCkgewotICAg
ICAgICAgICAgLy8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgTAotICAgICAg
ICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgewotICAgICAgICAg
ICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgewotICAg
ICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsKLSAgICAgICAg
ICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKLSAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAh
PSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAg
ICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfTEVGVF9UT19SSUdIVDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIgfHwg
bV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25nID09
IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgfQotICAgICAgICBtX2Vv
ciA9IG1fbGFzdDsKLSAgICB9Ci0KLSAgICBhcHBlbmRSdW4oKTsKLSAgICBtX2VtcHR5UnVuID0g
dHJ1ZTsKLQotICAgIC8vIHNvciBmb3IgdGhlIG5ldyBydW4gaXMgZGV0ZXJtaW5lZCBieSB0aGUg
aGlnaGVyIGxldmVsIChydWxlIFgxMCkKLSAgICBzZXRMYXN0RGlyKGZyb20pOwotICAgIHNldExh
c3RTdHJvbmdEaXIoZnJvbSk7Ci0gICAgbV9lb3IgPSBJdGVyYXRvcigpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+
Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6cmFp
c2VFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20sIFVDaGFyRGlyZWN0
aW9uIHRvKQotewotICAgIGlmICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKLSAg
ICAgICAgY2hlY2tEaXJlY3Rpb25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOwotICAgICAg
ICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBw
ZW5kIHRoZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5s
YXN0Ci0gICAgICAgIGlmICh0byA9PSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgIC8v
IGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IEwKLSAgICAgICAgICAgIGlmICht
X3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9kaXJlY3Rpb24gPSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlm
IChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgbV9k
aXJlY3Rpb24gPSBVX0FSQUJJQ19OVU1CRVI7Ci0gICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RP
X1JJR0hUICYmIGZyb20gPT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJB
QklDX05VTUJFUgotICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05V
TUJFUiAmJiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQgfHwgZnJvbSA9
PSBVX1JJR0hUX1RPX0xFRlQpKQotICAgICAgICAgICAgfHwgKG1fc3RhdHVzLmVvciAhPSBVX0VV
Uk9QRUFOX05VTUJFUiAmJiBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAm
JiBmcm9tID09IFVfUklHSFRfVE9fTEVGVCkpIHsKLSAgICAgICAgICAgIGFwcGVuZFJ1bigpOwot
ICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgfQotCi0gICAgYXBwZW5kUnVuKCk7Ci0gICAgbV9l
bXB0eVJ1biA9IHRydWU7Ci0KLSAgICBzZXRMYXN0RGlyKHRvKTsKLSAgICBzZXRMYXN0U3Ryb25n
RGlyKHRvKTsKLSAgICBtX2VvciA9IEl0ZXJhdG9yKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KLWJvb2wgQmlk
aVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojpjb21taXRFeHBsaWNp
dEVtYmVkZGluZygpCi17Ci0gICAgLy8gV2hlbiB3ZSdyZSAiaW5Jc29sYXRlKCkiIHdlJ3JlIHJl
c29sdmluZyB0aGUgcGFyZW50IGNvbnRleHQgd2hpY2gKLSAgICAvLyBpZ25vcmVzIChza2lwcyBv
dmVyKSB0aGUgaXNvbGF0ZWQgY29udGVudCwgaW5jbHVkaW5nIGVtYmVkZGluZyBsZXZlbHMuCi0g
ICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGFjY3J1ZSBlbWJlZGRpbmcgbGV2ZWxzIHdoaWxlIHNraXBw
aW5nIG92ZXIgaXNvbGF0ZWQgY29udGVudC4KLSAgICBBU1NFUlQoIWluSXNvbGF0ZSgpIHx8IG1f
Y3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2UuaXNFbXB0eSgpKTsKLQotICAgIGF1dG8g
ZnJvbUxldmVsID0gY29udGV4dCgpLT5sZXZlbCgpOwotICAgIFJlZlB0cjxCaWRpQ29udGV4dD4g
dG9Db250ZXh0ID0gY29udGV4dCgpOwotCi0gICAgZm9yIChhdXRvJiBlbWJlZGRpbmcgOiBtX2N1
cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlKSB7Ci0gICAgICAgIGlmIChlbWJlZGRpbmcu
ZGlyZWN0aW9uID09IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCkgewotICAgICAgICAgICAgaWYg
KGF1dG8qIHBhcmVudENvbnRleHQgPSB0b0NvbnRleHQtPnBhcmVudCgpKQotICAgICAgICAgICAg
ICAgIHRvQ29udGV4dCA9IHBhcmVudENvbnRleHQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24gPSAoZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBV
X1JJR0hUX1RPX0xFRlRfRU1CRURESU5HIHx8IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdI
VF9UT19MRUZUX09WRVJSSURFKSA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVDsK
LSAgICAgICAgICAgIGJvb2wgb3ZlcnJpZGUgPSBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfTEVG
VF9UT19SSUdIVF9PVkVSUklERSB8fCBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfUklHSFRfVE9f
TEVGVF9PVkVSUklERTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwgPSB0b0NvbnRl
eHQtPmxldmVsKCk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVG
VCkKLSAgICAgICAgICAgICAgICBsZXZlbCA9IG5leHRHcmVhdGVyT2RkTGV2ZWwobGV2ZWwpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxldmVsID0gbmV4dEdyZWF0ZXJFdmVu
TGV2ZWwobGV2ZWwpOwotICAgICAgICAgICAgaWYgKGxldmVsIDwgNjEpCi0gICAgICAgICAgICAg
ICAgdG9Db250ZXh0ID0gQmlkaUNvbnRleHQ6OmNyZWF0ZShsZXZlbCwgZGlyZWN0aW9uLCBvdmVy
cmlkZSwgZW1iZWRkaW5nLnNvdXJjZSwgdG9Db250ZXh0LmdldCgpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGF1dG8gdG9MZXZlbCA9IHRvQ29udGV4dC0+bGV2ZWwoKTsKLQotICAgIGlmICh0
b0xldmVsID4gZnJvbUxldmVsKQotICAgICAgICByYWlzZUV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwo
ZnJvbUxldmVsICUgMiA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCwgdG9MZXZl
bCAlIDIgPyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQpOwotICAgIGVsc2UgaWYg
KHRvTGV2ZWwgPCBmcm9tTGV2ZWwpCi0gICAgICAgIGxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZl
bChmcm9tTGV2ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hUKTsKLQot
ICAgIHNldENvbnRleHQoV1RGTW92ZSh0b0NvbnRleHQpKTsKLQotICAgIG1fY3VycmVudEV4cGxp
Y2l0RW1iZWRkaW5nU2VxdWVuY2UuY2xlYXIoKTsKLQotICAgIHJldHVybiBmcm9tTGV2ZWwgIT0g
dG9MZXZlbDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwg
dHlwZW5hbWUgRGVyaXZlZENsYXNzPgotaW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVy
YXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojp1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJl
Y3Rpb24oVUNoYXJEaXJlY3Rpb24gZGlyQ3VycmVudCkKLXsKLSAgICBzd2l0Y2ggKGRpckN1cnJl
bnQpIHsKLSAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6Ci0gICAgICAgIGlm
IChtX3N0YXR1cy5sYXN0ICE9IFVfRVVST1BFQU5fTlVNQkVSKQotICAgICAgICAgICAgbV9zdGF0
dXMubGFzdCA9IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgIGNhc2UgVV9DT01NT05f
TlVNQkVSX1NFUEFSQVRPUjoKLSAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6Ci0gICAgY2Fz
ZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6Ci0gICAgY2FzZSBVX09USEVSX05FVVRSQUw6Ci0gICAg
ICAgIHN3aXRjaCAobV9zdGF0dXMubGFzdCkgewotICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdI
VDoKLSAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6Ci0gICAgICAgIGNhc2UgVV9SSUdIVF9U
T19MRUZUX0FSQUJJQzoKLSAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAg
Y2FzZSBVX0FSQUJJQ19OVU1CRVI6Ci0gICAgICAgICAgICBtX3N0YXR1cy5sYXN0ID0gZGlyQ3Vy
cmVudDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
bV9zdGF0dXMubGFzdCA9IFVfT1RIRVJfTkVVVFJBTDsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFVfRElSX05PTl9TUEFDSU5HX01BUks6Ci0gICAgY2FzZSBVX0JPVU5EQVJZ
X05FVVRSQUw6Ci0gICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HOgotICAgIGNhc2Ug
VV9MRUZUX1RPX1JJR0hUX0VNQkVERElORzoKLSAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9PVkVS
UklERToKLSAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9PVkVSUklERToKLSAgICBjYXNlIFVfUE9Q
X0RJUkVDVElPTkFMX0ZPUk1BVDoKLSAgICAgICAgLy8gaWdub3JlIHRoZXNlCi0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6Ci0gICAgICAgIEZBTExUSFJPVUdIOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fc3RhdHVzLmxhc3QgPSBkaXJDdXJyZW50OwotICAgIH0K
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUg
RGVyaXZlZENsYXNzPgotaW5saW5lIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVu
LCBEZXJpdmVkQ2xhc3M+OjpyZW9yZGVyUnVuc0Zyb21MZXZlbHMoKQotewotICAgIHVuc2lnbmVk
IGNoYXIgbGV2ZWxMb3cgPSAxMjg7Ci0gICAgdW5zaWduZWQgY2hhciBsZXZlbEhpZ2ggPSAwOwot
ICAgIGZvciAoUnVuKiBydW4gPSBtX3J1bnMuZmlyc3RSdW4oKTsgcnVuOyBydW4gPSBydW4tPm5l
eHQoKSkgewotICAgICAgICBsZXZlbEhpZ2ggPSBzdGQ6Om1heChydW4tPmxldmVsKCksIGxldmVs
SGlnaCk7Ci0gICAgICAgIGxldmVsTG93ID0gc3RkOjptaW4ocnVuLT5sZXZlbCgpLCBsZXZlbExv
dyk7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBpbXBsZW1lbnRzIHJlb3JkZXJpbmcgb2YgdGhlIGxp
bmUgKEwyIGFjY29yZGluZyB0byBCaWRpIHNwZWMpOgotICAgIC8vIGh0dHA6Ly91bmljb2RlLm9y
Zy9yZXBvcnRzL3RyOS8jTDIKLSAgICAvLyBMMi4gRnJvbSB0aGUgaGlnaGVzdCBsZXZlbCBmb3Vu
ZCBpbiB0aGUgdGV4dCB0byB0aGUgbG93ZXN0IG9kZCBsZXZlbCBvbiBlYWNoIGxpbmUsCi0gICAg
Ly8gcmV2ZXJzZSBhbnkgY29udGlndW91cyBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJl
IGF0IHRoYXQgbGV2ZWwgb3IgaGlnaGVyLgotCi0gICAgLy8gUmV2ZXJzaW5nIGlzIG9ubHkgZG9u
ZSB1cCB0byB0aGUgbG93ZXN0IG9kZCBsZXZlbC4KLSAgICBpZiAoIShsZXZlbExvdyAlIDIpKQot
ICAgICAgICBsZXZlbExvdysrOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBtX3J1bnMucnVuQ291
bnQoKSAtIDE7Ci0KLSAgICB3aGlsZSAobGV2ZWxIaWdoID49IGxldmVsTG93KSB7Ci0gICAgICAg
IHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBSdW4qIHJ1biA9IG1fcnVucy5maXJzdFJ1bigpOwot
ICAgICAgICB3aGlsZSAoaSA8IGNvdW50KSB7Ci0gICAgICAgICAgICBmb3IgKDtpIDwgY291bnQg
JiYgcnVuICYmIHJ1bi0+bGV2ZWwoKSA8IGxldmVsSGlnaDsgaSsrKQotICAgICAgICAgICAgICAg
IHJ1biA9IHJ1bi0+bmV4dCgpOwotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBpOwotICAg
ICAgICAgICAgZm9yICg7aSA8PSBjb3VudCAmJiBydW4gJiYgcnVuLT5sZXZlbCgpID49IGxldmVs
SGlnaDsgaSsrKQotICAgICAgICAgICAgICAgIHJ1biA9IHJ1bi0+bmV4dCgpOwotICAgICAgICAg
ICAgdW5zaWduZWQgZW5kID0gaSAtIDE7Ci0gICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1bnMo
c3RhcnQsIGVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgbGV2ZWxIaWdoLS07Ci0gICAgfQotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJp
dmVkQ2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENs
YXNzPjo6Y3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGNvbnN0IEl0ZXJhdG9yJiBlbmQsIFZpc3VhbERp
cmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRlLCBib29sIGhhcmRMaW5lQnJlYWspCi17Ci0gICAgQVNT
RVJUKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCk7Ci0KLSAgICBpZiAob3ZlcnJpZGUg
IT0gTm9WaXN1YWxPdmVycmlkZSkgewotICAgICAgICBtX2VtcHR5UnVuID0gZmFsc2U7Ci0gICAg
ICAgIG1fc29yID0gbV9jdXJyZW50OwotICAgICAgICBtX2VvciA9IEl0ZXJhdG9yKCk7Ci0gICAg
ICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gZW5kICYmICFtX2N1cnJlbnQuYXRFbmQoKSkgewotICAg
ICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBpbmNyZW1lbnQoKTsKLSAg
ICAgICAgfQotICAgICAgICBtX2RpcmVjdGlvbiA9IG92ZXJyaWRlID09IFZpc3VhbExlZnRUb1Jp
Z2h0T3ZlcnJpZGUgPyBVX0xFRlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAg
IGFwcGVuZFJ1bigpOwotICAgICAgICBtX3J1bnMuc2V0TG9naWNhbGx5TGFzdFJ1bihtX3J1bnMu
bGFzdFJ1bigpKTsKLSAgICAgICAgaWYgKG92ZXJyaWRlID09IFZpc3VhbFJpZ2h0VG9MZWZ0T3Zl
cnJpZGUgJiYgbV9ydW5zLnJ1bkNvdW50KCkpCi0gICAgICAgICAgICBtX3J1bnMucmV2ZXJzZVJ1
bnMoMCwgbV9ydW5zLnJ1bkNvdW50KCkgLSAxKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fZW1wdHlSdW4gPSB0cnVlOwotCi0gICAgbV9lb3IgPSBJdGVyYXRvcigpOwotCi0gICAg
bV9sYXN0ID0gbV9jdXJyZW50OwotICAgIGJvb2wgcGFzdEVuZCA9IGZhbHNlOwotICAgIEJpZGlS
ZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPiBzdGF0ZUF0RW5kOwotCi0g
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgVUNoYXJEaXJlY3Rpb24gZGlyQ3VycmVudDsKLSAg
ICAgICAgaWYgKHBhc3RFbmQgJiYgKGhhcmRMaW5lQnJlYWsgfHwgbV9jdXJyZW50LmF0RW5kKCkp
KSB7Ci0gICAgICAgICAgICBCaWRpQ29udGV4dCogYyA9IGNvbnRleHQoKTsKLSAgICAgICAgICAg
IGlmIChoYXJkTGluZUJyZWFrKSB7Ci0gICAgICAgICAgICAgICAgLy8gQSBkZXZpYXRpb24gZnJv
bSB0aGUgVW5pY29kZSBCaWRpIEFsZ29yaXRobSBpbiBvcmRlciB0byBtYXRjaAotICAgICAgICAg
ICAgICAgIC8vIFdpbklFIGFuZCB1c2VyIGV4cGVjdGF0aW9uczogaGFyZCBsaW5lIGJyZWFrcyBy
ZXNldCBiaWRpIHN0YXRlCi0gICAgICAgICAgICAgICAgLy8gY29taW5nIGZyb20gdW5pY29kZSBi
aWRpIGNvbnRyb2wgY2hhcmFjdGVycywgYnV0IG5vdCB0aG9zZSBmcm9tCi0gICAgICAgICAgICAg
ICAgLy8gRE9NIG5vZGVzIHdpdGggc3BlY2lmaWVkIGRpcmVjdGlvbmFsaXR5Ci0gICAgICAgICAg
ICAgICAgc3RhdGVBdEVuZC5zZXRDb250ZXh0KGMtPmNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVt
YmVkZGluZ0NvbnRleHRzKCkpOwotCi0gICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IHN0YXRl
QXRFbmQuY29udGV4dCgpLT5kaXIoKTsKLSAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldEVv
ckRpcihkaXJDdXJyZW50KTsKLSAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLnNldExhc3REaXIo
ZGlyQ3VycmVudCk7Ci0gICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5zZXRMYXN0U3Ryb25nRGly
KGRpckN1cnJlbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aGls
ZSAoYy0+cGFyZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGMgPSBjLT5wYXJlbnQoKTsKLSAg
ICAgICAgICAgICAgICBkaXJDdXJyZW50ID0gYy0+ZGlyKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkaXJDdXJyZW50ID0gbV9jdXJyZW50LmRpcmVjdGlv
bigpOwotICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+b3ZlcnJpZGUoKQotICAgICAgICAgICAg
ICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcKLSAgICAg
ICAgICAgICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5H
Ci0gICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9SSUdIVF9UT19MRUZUX09W
RVJSSURFCi0gICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9MRUZUX1RPX1JJ
R0hUX09WRVJSSURFCi0gICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9QT1Bf
RElSRUNUSU9OQUxfRk9STUFUKQotICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBjb250ZXh0
KCktPmRpcigpOwotICAgICAgICAgICAgZWxzZSBpZiAoZGlyQ3VycmVudCA9PSBVX0RJUl9OT05f
U1BBQ0lOR19NQVJLKQotICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBtX3N0YXR1cy5sYXN0
OwotICAgICAgICB9Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgICAgIC8vIE91ciBXaW5kb3dz
IGJ1aWxkIGhhc24ndCB1cGRhdGVkIGl0cyBoZWFkZXJzIGZyb20gSUNVIDYuMSwgd2hpY2ggZG9l
c24ndCBoYXZlIHRoZXNlIHN5bWJvbHMuCi0gICAgICAgIGNvbnN0IFVDaGFyRGlyZWN0aW9uIFVf
RklSU1RfU1RST05HX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4oMTkpOwot
ICAgICAgICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX0xFRlRfVE9fUklHSFRfSVNPTEFURSA9IHN0
YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPigyMCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyRGlyZWN0
aW9uIFVfUklHSFRfVE9fTEVGVF9JU09MQVRFID0gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+
KDIxKTsKLSAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rpb24gVV9QT1BfRElSRUNUSU9OQUxfSVNP
TEFURSA9IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPigyMik7Ci0jZW5kaWYKLSAgICAgICAg
Ly8gV2UgaWdub3JlIGFsbCBjaGFyYWN0ZXIgZGlyZWN0aW9uYWxpdHkgd2hpbGUgaW4gdW5pY29k
ZS1iaWRpOiBpc29sYXRlIHNwYW5zLgotICAgICAgICAvLyBXZSdsbCBoYW5kbGUgb3JkZXJpbmcg
dGhlIGlzb2xhdGVkIGNoYXJhY3RlcnMgaW4gYSBzZWNvbmQgcGFzcy4KLSAgICAgICAgaWYgKGlu
SXNvbGF0ZSgpIHx8IGRpckN1cnJlbnQgPT0gVV9GSVJTVF9TVFJPTkdfSVNPTEFURSB8fCBkaXJD
dXJyZW50ID09IFVfTEVGVF9UT19SSUdIVF9JU09MQVRFIHx8IGRpckN1cnJlbnQgPT0gVV9SSUdI
VF9UT19MRUZUX0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBVX1BPUF9ESVJFQ1RJT05BTF9JU09M
QVRFKQotICAgICAgICAgICAgZGlyQ3VycmVudCA9IFVfT1RIRVJfTkVVVFJBTDsKLQotICAgICAg
ICBBU1NFUlQobV9zdGF0dXMuZW9yICE9IFVfT1RIRVJfTkVVVFJBTCB8fCBtX2Vvci5hdEVuZCgp
KTsKLSAgICAgICAgc3dpdGNoIChkaXJDdXJyZW50KSB7Ci0KLSAgICAgICAgLy8gZW1iZWRkaW5n
IGFuZCBvdmVycmlkZXMgKFgxLVg5IGluIHRoZSBCaWRpIHNwZWNzKQotICAgICAgICBjYXNlIFVf
UklHSFRfVE9fTEVGVF9FTUJFRERJTkc6Ci0gICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUX0VN
QkVERElORzoKLSAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREU6Ci0gICAgICAg
IGNhc2UgVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFOgotICAgICAgICBjYXNlIFVfUE9QX0RJUkVD
VElPTkFMX0ZPUk1BVDoKLSAgICAgICAgICAgIGVtYmVkKGRpckN1cnJlbnQsIEZyb21Vbmljb2Rl
KTsKLSAgICAgICAgICAgIGNvbW1pdEV4cGxpY2l0RW1iZWRkaW5nKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAvLyBzdHJvbmcgdHlwZXMKLSAgICAgICAgY2FzZSBVX0xFRlRfVE9f
UklHSFQ6Ci0gICAgICAgICAgICBzd2l0Y2gobV9zdGF0dXMubGFzdCkgewotICAgICAgICAgICAg
ICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUOgotICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9U
T19MRUZUX0FSQUJJQzoKLSAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgot
ICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9zdGF0dXMubGFzdCAhPSBVX0VVUk9QRUFOX05VTUJFUiB8fCBtX3N0YXR1cy5sYXN0
U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IFVfTEVGVF9UT19SSUdIVDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgotICAgICAgICAgICAgICAgIGNhc2Ug
VV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRB
UllfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgotICAg
ICAgICAgICAgICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBj
YXNlIFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfT1RIRVJf
TkVVVFJBTDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9Q
RUFOX05VTUJFUikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3RT
dHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIG51bWJlcnMgbmVlZCB0byBiZSBvbiBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2ZWwsIHNv
IGxldCdzIGNsb3NlIHRoYXQgcnVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJl
Y3Rpb24gPSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCgpLT5k
aXIoKSAhPSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24sIHdoaWNoIGlz
IFIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZU
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXJhYmljIG51bWJlcnMgYXJlIGFsd2F5cyBv
biBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2ZWwsIHNvIGxldCdzIGNsb3NlIHRoYXQgcnVuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQoKS0+ZGlyKCkgIT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhlIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rp
b24sIHdoaWNoIGlzIFIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFz
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9f
TEVGVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1
cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy9sYXN0IHN0dWZmIHRha2VzIGVtYmVkZGluZyBkaXIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0KCktPmRpcigpID09IFVfUklHSFRfVE9fTEVGVCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OyAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBV
X0xFRlRfVE9fUklHSFQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gVV9MRUZU
X1RPX1JJR0hUOwotICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgot
ICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKLSAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0
dXMubGFzdCkgewotICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAgICAg
ICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBV
X0FSQUJJQ19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAg
ICAgICAgICAgICAgICBGQUxMVEhST1VHSDsKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRf
VE9fTEVGVDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVB
Tl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVJfVEVSTUlOQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQ09NTU9OX05VTUJFUl9TRVBB
UkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBVX0JMT0NLX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVf
U0VHTUVOVF9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05F
VVRSQUw6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX09USEVSX05FVVRSQUw6Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19S
SUdIVCAmJiBjb250ZXh0KCktPmRpcigpID09IFVfTEVGVF9UT19SSUdIVCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVv
ciA9PSBVX0FSQUJJQ19OVU1CRVIpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4o
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBV
X0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCkt
PmRpcigpID09IFVfTEVGVF9UT19SSUdIVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2VvciA9IG1fbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5l
b3IgPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgICAgICBtX3N0YXR1cy5sYXN0U3Ryb25nID0g
ZGlyQ3VycmVudDsKLSAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vIHdlYWsgdHlwZXM6Ci0KLSAgICAg
ICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0
U3Ryb25nICE9IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMpIHsKLSAgICAgICAgICAgICAgICAvLyBp
ZiBsYXN0IHN0cm9uZyB3YXMgQUwgY2hhbmdlIEVOIHRvIEFOCi0gICAgICAgICAgICAgICAgc3dp
dGNoIChtX3N0YXR1cy5sYXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVB
Tl9OVU1CRVI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9S
SUdIVF9UT19MRUZUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9B
UkFCSUM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9F
VVJPUEVBTl9OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGQUxM
VEhST1VHSDsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJN
SU5BVE9SOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBVX0JMT0NLX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX09USEVS
X05FVVRSQUw6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVf
RVVST1BFQU5fTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3Rh
dHVzLmxhc3RTdHJvbmcgPT0gVV9SSUdIVF9UT19MRUZUKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEVOcyBvbiBib3RoIHNpZGVzIGJlaGF2ZSBsaWtlIFJzLCBzbyB0aGUg
bmV1dHJhbHMgc2hvdWxkIGJlIFIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRlcm1pbmF0ZSB0aGUgRU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhbiBS
IHJ1bi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX3N0YXR1cy5s
YXN0ID09IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IgPyBtX2xhc3RCZWZvcmVFVCA6IG1f
bGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJ
R0hUX1RPX0xFRlQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWdpbiBhIG5ldyBFTiBydW4u
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVB
Tl9OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGVybWluYXRlIHRoZSBBTiBydW4uCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9SSUdIVF9UT19MRUZUIHx8IGNv
bnRleHQoKS0+ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE1ha2UgYW4gUiBydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5B
VE9SID8gbV9sYXN0QmVmb3JlRVQgOiBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQmVnaW4gYSBuZXcgRU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFz
dFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBFeHRlbmQgdGhlIFIgcnVuIHRvIGluY2x1ZGUgdGhlIG5ldXRyYWxzLgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05V
TUJFUl9URVJNSU5BVE9SID8gbV9sYXN0QmVmb3JlRVQgOiBtX2xhc3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQmVnaW4gYSBuZXcgRU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgICAgICBtX3N0
YXR1cy5lb3IgPSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICBpZiAobV9kaXJl
Y3Rpb24gPT0gVV9PVEhFUl9ORVVUUkFMKQotICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlv
biA9IFVfTEVGVF9UT19SSUdIVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIEZBTExUSFJPVUdIOwotICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJF
UjoKLSAgICAgICAgICAgIGRpckN1cnJlbnQgPSBVX0FSQUJJQ19OVU1CRVI7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG1fc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFVfTEVGVF9U
T19SSUdIVDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9M
RUZUX1RPX1JJR0hUKQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVN
QkVSOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFVf
UklHSFRfVE9fTEVGVDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFC
SUM6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgICAg
ICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFVfQ09N
TU9OX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5l
b3IgPT0gVV9BUkFCSUNfTlVNQkVSKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIEZBTExUSFJPVUdIOwotICAgICAgICAgICAgICAgIGNhc2UgVV9F
VVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVB
Tl9OVU1CRVJfVEVSTUlOQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVV
VFJBTDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgotICAgICAgICAg
ICAgICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVf
V0hJVEVfU1BBQ0VfTkVVVFJBTDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJB
TDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1C
RVIKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVB
Tl9OVU1CRVIgJiYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9SSUdIVF9UT19MRUZUIHx8IGNv
bnRleHQoKS0+ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IChtX3N0YXR1cy5lb3IgIT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgbV9zdGF0dXMubGFz
dFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQgJiYgY29udGV4dCgpLT5kaXIoKSA9PSBVX1JJR0hU
X1RPX0xFRlQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXJtaW5hdGUgdGhlIHJ1
biBiZWZvcmUgdGhlIG5ldXRyYWxzLgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWdpbiBhbiBSIHJ1biBmb3IgdGhlIG5l
dXRyYWxzLgotICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RP
X0xFRlQ7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kaXJlY3Rpb24gPT0gVV9P
VEhFUl9ORVVUUkFMKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0
YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVf
UklHSFRfVE9fTEVGVDsKLSAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OwotICAgICAgICAgICAg
bV9zdGF0dXMuZW9yID0gVV9BUkFCSUNfTlVNQkVSOwotICAgICAgICAgICAgaWYgKG1fZGlyZWN0
aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKLSAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVf
QVJBQklDX05VTUJFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVfRVVST1BF
QU5fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJB
VE9SOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJf
VEVSTUlOQVRPUjoKLSAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0ID09IFVfRVVST1BFQU5f
TlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IFVfRVVST1BFQU5fTlVNQkVS
OwotICAgICAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OwotICAgICAgICAgICAgICAgIG1f
c3RhdHVzLmVvciA9IGRpckN1cnJlbnQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVz
Lmxhc3QgIT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUikKLSAgICAgICAgICAgICAgICBt
X2xhc3RCZWZvcmVFVCA9IG1fZW1wdHlSdW4gPyBtX2VvciA6IG1fbGFzdDsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIC8vIGJvdW5kYXJ5IG5ldXRyYWxzIHNob3VsZCBiZSBpZ25vcmVk
Ci0gICAgICAgIGNhc2UgVV9CT1VOREFSWV9ORVVUUkFMOgotICAgICAgICAgICAgaWYgKG1fZW9y
ID09IG1fbGFzdCkKLSAgICAgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gbmV1dHJhbHMKLSAgICAgICAgY2FzZSBVX0JMT0NL
X1NFUEFSQVRPUjoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvIHdlIGRvIHdpdGggbmV3
bGluZSBhbmQgcGFyYWdyYXBoIHNlcGFyYXRvcnMgdGhhdCBjb21lIHRvIGhlcmU/Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgotICAgICAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBydWxlIEwxLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgVV9XSElURV9TUEFDRV9ORVVUUkFMOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgVV9PVEhFUl9ORVVUUkFMOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXN0
RW5kICYmIChtX2VvciA9PSBtX2N1cnJlbnQgfHwgIW5lZWRzQ29udGludWVQYXN0RW5kKCkpKSB7
Ci0gICAgICAgICAgICBpZiAoIW1fcmVhY2hlZEVuZE9mTGluZSkgewotICAgICAgICAgICAgICAg
IG1fZW9yID0gZW5kT2ZMaW5lOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMuZW9y
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBVX0FSQUJJQ19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9
IG1fc3RhdHVzLmVvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/
IFVfTEVGVF9UT19SSUdIVCA6IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG5ldXRyYWxzIGluIHRoaXMgY2FzZS4gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4MTcKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY3VycmVudCA9IGVuZDsK
LSAgICAgICAgICAgIG1fc3RhdHVzID0gc3RhdGVBdEVuZC5tX3N0YXR1czsKLSAgICAgICAgICAg
IG1fc29yID0gc3RhdGVBdEVuZC5tX3NvcjsgCi0gICAgICAgICAgICBtX2VvciA9IHN0YXRlQXRF
bmQubV9lb3I7Ci0gICAgICAgICAgICBtX2xhc3QgPSBzdGF0ZUF0RW5kLm1fbGFzdDsKLSAgICAg
ICAgICAgIG1fcmVhY2hlZEVuZE9mTGluZSA9IHN0YXRlQXRFbmQubV9yZWFjaGVkRW5kT2ZMaW5l
OwotICAgICAgICAgICAgbV9sYXN0QmVmb3JlRVQgPSBzdGF0ZUF0RW5kLm1fbGFzdEJlZm9yZUVU
OwotICAgICAgICAgICAgbV9lbXB0eVJ1biA9IHN0YXRlQXRFbmQubV9lbXB0eVJ1bjsKLSAgICAg
ICAgICAgIG1fZGlyZWN0aW9uID0gVV9PVEhFUl9ORVVUUkFMOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICB1cGRhdGVTdGF0dXNMYXN0RnJvbUN1cnJlbnREaXJlY3Rp
b24oZGlyQ3VycmVudCk7Ci0gICAgICAgIG1fbGFzdCA9IG1fY3VycmVudDsKLQotICAgICAgICBp
ZiAobV9lbXB0eVJ1bikgewotICAgICAgICAgICAgbV9zb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAg
ICAgICBtX2VtcHR5UnVuID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmNyZW1lbnQo
KTsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgYm9vbCBjb21taXR0ZWQgPSBjb21taXRFeHBsaWNpdEVtYmVk
ZGluZygpOwotICAgICAgICAgICAgaWYgKGNvbW1pdHRlZCAmJiBwYXN0RW5kKSB7Ci0gICAgICAg
ICAgICAgICAgbV9jdXJyZW50ID0gZW5kOwotICAgICAgICAgICAgICAgIG1fc3RhdHVzID0gc3Rh
dGVBdEVuZC5tX3N0YXR1czsKLSAgICAgICAgICAgICAgICBtX3NvciA9IHN0YXRlQXRFbmQubV9z
b3I7IAotICAgICAgICAgICAgICAgIG1fZW9yID0gc3RhdGVBdEVuZC5tX2VvcjsKLSAgICAgICAg
ICAgICAgICBtX2xhc3QgPSBzdGF0ZUF0RW5kLm1fbGFzdDsKLSAgICAgICAgICAgICAgICBtX3Jl
YWNoZWRFbmRPZkxpbmUgPSBzdGF0ZUF0RW5kLm1fcmVhY2hlZEVuZE9mTGluZTsKLSAgICAgICAg
ICAgICAgICBtX2xhc3RCZWZvcmVFVCA9IHN0YXRlQXRFbmQubV9sYXN0QmVmb3JlRVQ7Ci0gICAg
ICAgICAgICAgICAgbV9lbXB0eVJ1biA9IHN0YXRlQXRFbmQubV9lbXB0eVJ1bjsKLSAgICAgICAg
ICAgICAgICBtX2RpcmVjdGlvbiA9IFVfT1RIRVJfTkVVVFJBTDsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcGFzdEVuZCAm
JiAobV9jdXJyZW50ID09IGVuZCB8fCBtX2N1cnJlbnQuYXRFbmQoKSkpIHsKLSAgICAgICAgICAg
IGlmIChtX2VtcHR5UnVuKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc3Rh
dGVBdEVuZC5tX3N0YXR1cyA9IG1fc3RhdHVzOwotICAgICAgICAgICAgc3RhdGVBdEVuZC5tX3Nv
ciA9IG1fc29yOwotICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2VvciA9IG1fZW9yOwotICAgICAg
ICAgICAgc3RhdGVBdEVuZC5tX2xhc3QgPSBtX2xhc3Q7Ci0gICAgICAgICAgICBzdGF0ZUF0RW5k
Lm1fcmVhY2hlZEVuZE9mTGluZSA9IG1fcmVhY2hlZEVuZE9mTGluZTsKLSAgICAgICAgICAgIHN0
YXRlQXRFbmQubV9sYXN0QmVmb3JlRVQgPSBtX2xhc3RCZWZvcmVFVDsKLSAgICAgICAgICAgIHN0
YXRlQXRFbmQubV9lbXB0eVJ1biA9IG1fZW1wdHlSdW47Ci0gICAgICAgICAgICBlbmRPZkxpbmUg
PSBtX2xhc3Q7Ci0gICAgICAgICAgICBwYXN0RW5kID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIG1fcnVucy5zZXRMb2dpY2FsbHlMYXN0UnVuKG1fcnVucy5sYXN0UnVuKCkpOwotICAg
IHJlb3JkZXJSdW5zRnJvbUxldmVscygpOwotICAgIGVuZE9mTGluZSA9IEl0ZXJhdG9yKCk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERl
cml2ZWRDbGFzcz4KLXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVk
Q2xhc3M+OjpzZXRXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bihS
dW4mIHJ1biwgc2l6ZV90IHRyYW5zaXRpb24pCi17Ci0gICAgQVNTRVJUKCFtX3doaXRlc3BhY2VD
b2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLmNvbnRhaW5zKCZydW4pKTsKLSAgICBt
X3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLmFkZCgmcnVuLCB0
cmFuc2l0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1
biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdW5zaWduZWQgQmlkaVJlc29sdmVyQmFzZTxJdGVy
YXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojp3aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25G
b3JJc29sYXRlZFJ1bihSdW4mIHJ1bikKLXsKLSAgICByZXR1cm4gbV93aGl0ZXNwYWNlQ29sbGFw
c2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bi50YWtlKCZydW4pOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Jp
ZGlSdW5MaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSdW5MaXN0LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ODM4YTI1MmM1YzMyNGRkMzA3ZmQ4ZmU1
YjYyY2Q0OTM5OTJiZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHQgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBC
aWRpUnVuTGlzdF9oCi0jZGVmaW5lIEJpZGlSdW5MaXN0X2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBSdW4+
Ci1jbGFzcyBCaWRpUnVuTGlzdCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmlkaVJ1bkxp
c3QpOwotcHVibGljOgotICAgIEJpZGlSdW5MaXN0KCkKLSAgICAgICAgOiBtX2xhc3RSdW4obnVs
bHB0cikKLSAgICAgICAgLCBtX2xvZ2ljYWxseUxhc3RSdW4obnVsbHB0cikKLSAgICAgICAgLCBt
X3J1bkNvdW50KDApCi0gICAgewotICAgIH0KLQotICAgIC8vIEZJWE1FOiBPbmNlIEJpZGlSZXNv
bHZlciBubyBsb25nZXIgb3ducyB0aGUgQmlkaVJ1bkxpc3QsCi0gICAgLy8gdGhlbiB+QmlkaVJ1
bkxpc3Qgc2hvdWxkIGNhbGwgZGVsZXRlUnVucygpIGF1dG9tYXRpY2FsbHkuCi0KLSAgICBSdW4q
IGZpcnN0UnVuKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFJ1bi5nZXQoKTsgfQotICAgIFJ1biog
bGFzdFJ1bigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJ1bjsgfQotICAgIFJ1biogbG9naWNhbGx5
TGFzdFJ1bigpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbGx5TGFzdFJ1bjsgfQotICAgIHVuc2ln
bmVkIHJ1bkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ydW5Db3VudDsgfQotCi0gICAgdm9pZCBh
cHBlbmRSdW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJik7Ci0gICAgdm9pZCBwcmVwZW5kUnVuKHN0
ZDo6dW5pcXVlX3B0cjxSdW4+JiYpOwotCi0gICAgdm9pZCBtb3ZlUnVuVG9FbmQoUnVuKik7Ci0g
ICAgdm9pZCBtb3ZlUnVuVG9CZWdpbm5pbmcoUnVuKik7Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0g
ICAgdm9pZCByZXZlcnNlUnVucyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKLSAgICB2
b2lkIHJlb3JkZXJSdW5zRnJvbUxldmVscygpOwotCi0gICAgdm9pZCBzZXRMb2dpY2FsbHlMYXN0
UnVuKFJ1biogcnVuKSB7IG1fbG9naWNhbGx5TGFzdFJ1biA9IHJ1bjsgfQotCi0gICAgdm9pZCBy
ZXBsYWNlUnVuV2l0aFJ1bnMoUnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4mIG5ld1J1
bnMpOwotCi1wcml2YXRlOgotCi0gICAgLy8gVGhlIHJ1bnMgZm9ybSBhIHNpbmdseS1saW5rZWQt
bGlzdCwgd2hlcmUgdGhlIGxpbmtzIChSdW46Om1fbmV4dCkgaW1wbHkgb3duZXJzaGlwIChhbmQg
YXJlIG9mIHR5cGUgc3RkOjp1bmlxdWVfcHRyKS4KLSAgICAvLyBUaGUgcmF3IHBvaW50ZXJzIGJl
bG93IHBvaW50IGludG8gdGhlIHNpbmdseS1saW5rZWQtbGlzdC4KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UnVuPiBtX2ZpcnN0UnVuOyAvLyBUaGUgaGVhZCBvZiB0aGUgbGlzdAotICAgIFJ1biogbV9s
YXN0UnVuOwotICAgIFJ1biogbV9sb2dpY2FsbHlMYXN0UnVuOwotICAgIHVuc2lnbmVkIG1fcnVu
Q291bnQ7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotaW5saW5lIHZvaWQgQmlkaVJ1bkxp
c3Q8UnVuPjo6YXBwZW5kUnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYgcnVuKQotewotICAgIGlm
ICghbV9maXJzdFJ1bikgewotICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShydW4pOwotICAg
ICAgICBtX2xhc3RSdW4gPSBtX2ZpcnN0UnVuLmdldCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1fbGFzdFJ1bi0+c2V0TmV4dChXVEZNb3ZlKHJ1bikpOwotICAgICAgICBtX2xhc3RSdW4gPSBt
X2xhc3RSdW4tPm5leHQoKTsKLSAgICB9Ci0gICAgbV9ydW5Db3VudCsrOwotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgUnVuPgotaW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bihz
dGQ6OnVuaXF1ZV9wdHI8UnVuPiYmIHJ1bikKLXsKLSAgICBBU1NFUlQoIXJ1bi0+bmV4dCgpKTsK
LQotICAgIGlmICghbV9sYXN0UnVuKQotICAgICAgICBtX2xhc3RSdW4gPSBydW4uZ2V0KCk7Ci0g
ICAgZWxzZQotICAgICAgICBydW4tPnNldE5leHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7Ci0gICAg
bV9maXJzdFJ1biA9IFdURk1vdmUocnVuKTsKLSAgICBtX3J1bkNvdW50Kys7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBSdW4+Ci1pbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9F
bmQoUnVuKiBydW4pCi17Ci0gICAgQVNTRVJUKG1fZmlyc3RSdW4pOwotICAgIEFTU0VSVChtX2xh
c3RSdW4pOwotICAgIEFTU0VSVChydW4tPm5leHQoKSk7Ci0KLSAgICBSdW4qIHByZXZpb3VzID0g
bnVsbHB0cjsKLSAgICBSdW4qIGN1cnJlbnQgPSBtX2ZpcnN0UnVuLmdldCgpOwotICAgIHdoaWxl
IChjdXJyZW50ICE9IHJ1bikgewotICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7Ci0gICAgICAg
IGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4dCgpOwotICAgIH0KLQotICAgIGlmICghcHJldmlvdXMp
IHsKLSAgICAgICAgQVNTRVJUKG1fZmlyc3RSdW4uZ2V0KCkgPT0gcnVuKTsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJ1bj4gb3JpZ2luYWxGaXJzdFJ1biA9IFdURk1vdmUobV9maXJzdFJ1bik7
Ci0gICAgICAgIG1fZmlyc3RSdW4gPSBvcmlnaW5hbEZpcnN0UnVuLT50YWtlTmV4dCgpOwotICAg
ICAgICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZShvcmlnaW5hbEZpcnN0UnVuKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXMt
PnRha2VOZXh0KCk7Ci0gICAgICAgIHByZXZpb3VzLT5zZXROZXh0KGN1cnJlbnQtPnRha2VOZXh0
KCkpOwotICAgICAgICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZSh0YXJnZXQpKTsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSdW4+Ci1pbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+
Ojptb3ZlUnVuVG9CZWdpbm5pbmcoUnVuKiBydW4pCi17Ci0gICAgQVNTRVJUKG1fZmlyc3RSdW4p
OwotICAgIEFTU0VSVChtX2xhc3RSdW4pOwotICAgIEFTU0VSVChydW4gIT0gbV9maXJzdFJ1bi5n
ZXQoKSk7Ci0KLSAgICBSdW4qIHByZXZpb3VzID0gbV9maXJzdFJ1bi5nZXQoKTsKLSAgICBSdW4q
IGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4dCgpOwotICAgIHdoaWxlIChjdXJyZW50ICE9IHJ1bikg
ewotICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7Ci0gICAgICAgIGN1cnJlbnQgPSBwcmV2aW91
cy0+bmV4dCgpOwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9IHBy
ZXZpb3VzLT50YWtlTmV4dCgpOwotICAgIHByZXZpb3VzLT5zZXROZXh0KHJ1bi0+dGFrZU5leHQo
KSk7Ci0gICAgaWYgKHJ1biA9PSBtX2xhc3RSdW4pCi0gICAgICAgIG1fbGFzdFJ1biA9IHByZXZp
b3VzOwotCi0gICAgdGFyZ2V0LT5zZXROZXh0KFdURk1vdmUobV9maXJzdFJ1bikpOwotICAgIG1f
Zmlyc3RSdW4gPSBXVEZNb3ZlKHRhcmdldCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSdW4+Ci12
b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyhSdW4qIHRvUmVwbGFjZSwg
QmlkaVJ1bkxpc3Q8UnVuPiYgbmV3UnVucykKLXsKLSAgICBBU1NFUlQobmV3UnVucy5ydW5Db3Vu
dCgpKTsKLSAgICBBU1NFUlQobV9maXJzdFJ1bik7Ci0gICAgQVNTRVJUKHRvUmVwbGFjZSk7Ci0K
LSAgICBtX3J1bkNvdW50ICs9IG5ld1J1bnMucnVuQ291bnQoKSAtIDE7IC8vIFdlIGFyZSBhZGRp
bmcgdGhlIG5ldyBydW5zIGFuZCByZW1vdmluZyB0b1JlcGxhY2UuCi0KLSAgICAvLyBGaXggdXAg
YW55IHBvaW50ZXJzIHdoaWNoIG1heSBlbmQgdXAgc3RhbGUuCi0gICAgaWYgKG1fbGFzdFJ1biA9
PSB0b1JlcGxhY2UpCi0gICAgICAgIG1fbGFzdFJ1biA9IG5ld1J1bnMubGFzdFJ1bigpOwotICAg
IGlmIChtX2xvZ2ljYWxseUxhc3RSdW4gPT0gdG9SZXBsYWNlKQotICAgICAgICBtX2xvZ2ljYWxs
eUxhc3RSdW4gPSBuZXdSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKLQotICAgIGlmIChtX2ZpcnN0
UnVuLmdldCgpID09IHRvUmVwbGFjZSkgewotICAgICAgICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0
TmV4dChtX2ZpcnN0UnVuLT50YWtlTmV4dCgpKTsKLSAgICAgICAgbV9maXJzdFJ1biA9IFdURk1v
dmUobmV3UnVucy5tX2ZpcnN0UnVuKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGaW5kIHRo
ZSBydW4ganVzdCBiZWZvcmUgInRvUmVwbGFjZSIgaW4gdGhlIGxpc3Qgb2YgcnVucy4KLSAgICAg
ICAgUnVuKiBwcmV2aW91c1J1biA9IG1fZmlyc3RSdW4uZ2V0KCk7Ci0gICAgICAgIHdoaWxlIChw
cmV2aW91c1J1bi0+bmV4dCgpICE9IHRvUmVwbGFjZSkKLSAgICAgICAgICAgIHByZXZpb3VzUnVu
ID0gcHJldmlvdXNSdW4tPm5leHQoKTsKLSAgICAgICAgQVNTRVJUKHByZXZpb3VzUnVuKTsKLQot
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91c1J1bi0+dGFrZU5l
eHQoKTsKLSAgICAgICAgcHJldmlvdXNSdW4tPnNldE5leHQoV1RGTW92ZShuZXdSdW5zLm1fZmly
c3RSdW4pKTsKLSAgICAgICAgbmV3UnVucy5tX2xhc3RSdW4tPnNldE5leHQodGFyZ2V0LT50YWtl
TmV4dCgpKTsKLSAgICB9Ci0KLSAgICBuZXdSdW5zLmNsZWFyKCk7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBSdW4+Ci12b2lkIEJpZGlSdW5MaXN0PFJ1bj46OmNsZWFyKCkKLXsKLSAgICBtX2ZpcnN0
UnVuID0gbnVsbHB0cjsKLSAgICBtX2xhc3RSdW4gPSBudWxscHRyOwotICAgIG1fbG9naWNhbGx5
TGFzdFJ1biA9IG51bGxwdHI7Ci0gICAgbV9ydW5Db3VudCA9IDA7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBSdW4+Ci12b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnJldmVyc2VSdW5zKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQpCi17Ci0gICAgaWYgKHN0YXJ0ID49IGVuZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZW5kIDwgbV9ydW5D
b3VudCk7Ci0KLSAgICAvLyBHZXQgdGhlIGl0ZW0gYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgcnVu
cyB0byByZXZlcnNlIGFuZCBwdXQgaXQgaW4KLSAgICAvLyB8YmVmb3JlU3RhcnR8LiB8Y3Vycnwg
c2hvdWxkIHBvaW50IHRvIHRoZSBmaXJzdCBydW4gdG8gcmV2ZXJzZS4KLSAgICBSdW4qIGN1cnIg
PSBtX2ZpcnN0UnVuLmdldCgpOwotICAgIFJ1biogYmVmb3JlU3RhcnQgPSBudWxscHRyOwotICAg
IHVuc2lnbmVkIGkgPSAwOwotICAgIGZvciAoOyBpIDwgc3RhcnQ7ICsraSkgewotICAgICAgICBi
ZWZvcmVTdGFydCA9IGN1cnI7Ci0gICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0KCk7Ci0gICAgfQot
ICAgIFJ1biogc3RhcnRSdW4gPSBjdXJyOwotCi0gICAgZm9yICg7IGkgPCBlbmQ7ICsraSkKLSAg
ICAgICAgY3VyciA9IGN1cnItPm5leHQoKTsKLQotICAgIGlmICghY3Vyci0+bmV4dCgpKQotICAg
ICAgICBtX2xhc3RSdW4gPSBzdGFydFJ1bjsKLQotICAgIC8vIFN0YW5kYXJkICJzbGlkaW5nIHdp
bmRvdyIgb2YgMyBwb2ludGVycwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHByZXZpb3VzID0g
Y3Vyci0+dGFrZU5leHQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBjdXJyZW50ID0gYmVm
b3JlU3RhcnQgPyBiZWZvcmVTdGFydC0+dGFrZU5leHQoKSA6IFdURk1vdmUobV9maXJzdFJ1bik7
Ci0gICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gbmV4
dCA9IGN1cnJlbnQtPnRha2VOZXh0KCk7Ci0gICAgICAgIGN1cnJlbnQtPnNldE5leHQoV1RGTW92
ZShwcmV2aW91cykpOwotICAgICAgICBwcmV2aW91cyA9IFdURk1vdmUoY3VycmVudCk7Ci0gICAg
ICAgIGN1cnJlbnQgPSBXVEZNb3ZlKG5leHQpOwotICAgIH0KLQotICAgIGlmIChiZWZvcmVTdGFy
dCkKLSAgICAgICAgYmVmb3JlU3RhcnQtPnNldE5leHQoV1RGTW92ZShwcmV2aW91cykpOwotICAg
IGVsc2UKLSAgICAgICAgbV9maXJzdFJ1biA9IFdURk1vdmUocHJldmlvdXMpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBCaWRpUnVuTGlzdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaAppbmRleCAwMmY0
NDgyMDBjOTQ0YzRhZTE0ZjEyOThjMzhiMjkxMTg3MzVkMTM5Li5jYWMwMTRhYzJkY2JlMGMyOWIw
Mjk1Y2VkNDI3NDI2N2JkNjRhMDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1N0cmluZ1dpdGhEaXJlY3Rpb24uaApAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0cnVjdCBTdHJpbmdXaXRoRGlyZWN0aW9uIHsKICAgICBTdHJpbmcgc3Ry
aW5nOwotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uIHsgVGV4dERpcmVjdGlvbjo6TFRSIH07
CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiB7IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSIH07CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ1dpdGhEaXJl
Y3Rpb24mIGEsIGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIGIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHREaXJlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dERpcmVjdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4NWZlOTdkZWEwYTViMGJlNDg3ZmI4MmIxZGIyNTdkM2U5MDMzMTRlLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dERpcmVjdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0g
Y2xhc3MgVGV4dERpcmVjdGlvbiA6IGJvb2wgeyBMVFIsIFJUTCB9OwotCi1pbmxpbmUgYm9vbCBp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIHJl
dHVybiBkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSOwotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVCaWRpLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVCaWRpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDcyNDljZmVmZTY2YzRjY2YzNzIzYTAyMzU5ZDQ1NzA1NzAwMWUyNjMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9Vbmljb2RlQmlkaS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
VW5pY29kZUJpZGlfaAotI2RlZmluZSBVbmljb2RlQmlkaV9oCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotZW51bSBFVW5pY29kZUJpZGkgewotICAgIFVCTm9ybWFsLAotICAgIEVtYmVkLAotICAg
IE92ZXJyaWRlLAotICAgIElzb2xhdGUsCi0gICAgUGxhaW50ZXh0LAotICAgIElzb2xhdGVPdmVy
cmlkZSwKLX07IAotCi1pbmxpbmUgYm9vbCBpc0lzb2xhdGVkKGNvbnN0IEVVbmljb2RlQmlkaSYg
dW5pY29kZUJpZGkpCi17Ci0gICAgcmV0dXJuIHVuaWNvZGVCaWRpID09IElzb2xhdGUgfHwgdW5p
Y29kZUJpZGkgPT0gSXNvbGF0ZU92ZXJyaWRlIHx8IHVuaWNvZGVCaWRpID09IFBsYWludGV4dDsK
LX0KLQotaW5saW5lIGJvb2wgaXNPdmVycmlkZShFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkpCi17
Ci0gICAgcmV0dXJuIHVuaWNvZGVCaWRpID09IE92ZXJyaWRlIHx8IHVuaWNvZGVCaWRpID09IElz
b2xhdGVPdmVycmlkZTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvV3JpdGluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvV3JpdGluZ01vZGUuaAppbmRleCBlMjA3YTM3NDg0NjFmZDlmMTk2ZjhjMzc5MmY0ODk1
OTU1ODBiMmY0Li40NWUyMzRmZmE0MGYyMDNhNDYxOTgwMDJhYTNjNTQ3MTc2M2M1NjA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Xcml0aW5nTW9kZS5oCkBAIC0zMSw4ICszMSw4
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgogI2luY2x1
ZGUgPGFycmF5PgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHREaXJlY3Rpb24uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0Myw3IEBAIGVudW0gY2xhc3MgV3JpdGluZ01vZGUg
OiB1aW50OF90IHsKICAgICBSaWdodFRvTGVmdCA9IDMsIC8vIHZlcnRpY2FsLXJsCiB9OwogCi1j
b25zdGV4cHIgdW5zaWduZWQgbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCitjb25zdGV4cHIgdW5zaWduZWQgbWFr
ZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdy
aXRpbmdNb2RlKSA8PCAxIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRpcmVjdGlvbik7CiB9CkBA
IC01MSwxNyArNTEsMTcgQEAgY29uc3RleHByIHVuc2lnbmVkIG1ha2VUZXh0Rmxvd0luaXRhbGl6
ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24KIC8vIERlZmluZSB0aGUg
dGV4dCBmbG93IGluIHRlcm1zIG9mIHRoZSB3cml0aW5nIG1vZGUgYW5kIHRoZSB0ZXh0IGRpcmVj
dGlvbi4gVGhlIGZpcnN0CiAvLyBwYXJ0IGlzIHRoZSBsaW5lIGdyb3dpbmcgZGlyZWN0aW9uIGFu
ZCB0aGUgc2Vjb25kIHBhcnQgaXMgdGhlIGJsb2NrIGdyb3dpbmcgZGlyZWN0aW9uLgogZW51bSBU
ZXh0RmxvdyB7Ci0gICAgSW5saW5lRWFzdEJsb2NrU291dGggPSBtYWtlVGV4dEZsb3dJbml0YWxp
emVyKFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSwgVGV4dERpcmVjdGlvbjo6TFRSKSwKLSAgICBJ
bmxpbmVXZXN0QmxvY2tTb3V0aCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6
OlRvcFRvQm90dG9tLCBUZXh0RGlyZWN0aW9uOjpSVEwpLAotICAgIElubGluZUVhc3RCbG9ja05v
cnRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3AsIFRl
eHREaXJlY3Rpb246OkxUUiksCi0gICAgSW5saW5lV2VzdEJsb2NrTm9ydGggPSBtYWtlVGV4dEZs
b3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCwgVGV4dERpcmVjdGlvbjo6UlRM
KSwKLSAgICBJbmxpbmVTb3V0aEJsb2NrRWFzdCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3Jp
dGluZ01vZGU6OkxlZnRUb1JpZ2h0LCBUZXh0RGlyZWN0aW9uOjpMVFIpLAotICAgIElubGluZVNv
dXRoQmxvY2tXZXN0ID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6TGVmdFRv
UmlnaHQsIFRleHREaXJlY3Rpb246OlJUTCksCi0gICAgSW5saW5lTm9ydGhCbG9ja0Vhc3QgPSBt
YWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCwgVGV4dERpcmVj
dGlvbjo6TFRSKSwKLSAgICBJbmxpbmVOb3J0aEJsb2NrV2VzdCA9IG1ha2VUZXh0Rmxvd0luaXRh
bGl6ZXIoV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0LCBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAg
SW5saW5lRWFzdEJsb2NrU291dGggPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2Rl
OjpUb3BUb0JvdHRvbSwgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpLAorICAgIElubGluZVdlc3RC
bG9ja1NvdXRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6VG9wVG9Cb3R0
b20sIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKSwKKyAgICBJbmxpbmVFYXN0QmxvY2tOb3J0aCA9
IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wLCBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUiksCisgICAgSW5saW5lV2VzdEJsb2NrTm9ydGggPSBtYWtlVGV4dEZs
b3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCwgUEFMOjpUZXh0RGlyZWN0aW9u
OjpSVEwpLAorICAgIElubGluZVNvdXRoQmxvY2tFYXN0ID0gbWFrZVRleHRGbG93SW5pdGFsaXpl
cihXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQsIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSwKKyAg
ICBJbmxpbmVTb3V0aEJsb2NrV2VzdCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01v
ZGU6OkxlZnRUb1JpZ2h0LCBQQUw6OlRleHREaXJlY3Rpb246OlJUTCksCisgICAgSW5saW5lTm9y
dGhCbG9ja0Vhc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpSaWdodFRv
TGVmdCwgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpLAorICAgIElubGluZU5vcnRoQmxvY2tXZXN0
ID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQsIFBBTDo6
VGV4dERpcmVjdGlvbjo6UlRMKQogfTsKIAotY29uc3RleHByIGlubGluZSBUZXh0RmxvdyBtYWtl
VGV4dEZsb3coV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9u
KQorY29uc3RleHByIGlubGluZSBUZXh0RmxvdyBtYWtlVGV4dEZsb3coV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFRleHRGbG93PihtYWtlVGV4dEZsb3dJbml0YWxpemVyKHdyaXRpbmdNb2RlLCBk
aXJlY3Rpb24pKTsKIH0KQEAgLTkzLDEzICs5MywxMyBAQCBjb25zdGV4cHIgaW5saW5lIGJvb2wg
aXNGbGlwcGVkTGluZXNUZXh0RmxvdyhUZXh0RmxvdyB0ZXh0ZmxvdykKIC8vIExpbmVzIGhhdmUg
dmVydGljYWwgb3JpZW50YXRpb247IG1vZGVzIHZlcnRpY2FsLWxyIG9yIHZlcnRpY2FsLXJsLgog
Y29uc3RleHByIGlubGluZSBib29sIGlzVmVydGljYWxXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkKIHsKLSAgICByZXR1cm4gaXNWZXJ0aWNhbFRleHRGbG93KG1ha2VUZXh0Rmxv
dyh3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbjo6TFRSKSk7CisgICAgcmV0dXJuIGlzVmVydGlj
YWxUZXh0RmxvdyhtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSKSk7CiB9CiAKIC8vIEJsb2NrIHByb2dyZXNzaW9uIGluY3JlYXNlcyBpbiB0aGUgb3Bwb3Np
dGUgZGlyZWN0aW9uIHRvIG5vcm1hbDsgbW9kZXMgdmVydGljYWwtcmwgb3IgaG9yaXpvbnRhbC1i
dC4KIGNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0ZsaXBwZWRXcml0aW5nTW9kZShXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkKIHsKLSAgICByZXR1cm4gaXNGbGlwcGVkVGV4dEZsb3cobWFrZVRleHRG
bG93KHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uOjpMVFIpKTsKKyAgICByZXR1cm4gaXNGbGlw
cGVkVGV4dEZsb3cobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb246
OkxUUikpOwogfQogCiAvLyBMaW5lcyBoYXZlIGhvcml6b250YWwgb3JpZW50YXRpb247IG1vZGVz
IGhvcml6b250YWwtdGIgb3IgaG9yaXpvbnRhbC1idC4KQEAgLTExMSw3ICsxMTEsNyBAQCBjb25z
dGV4cHIgaW5saW5lIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUpCiAvLyBCb3R0b20gb2YgdGhlIGxpbmUgb2NjdXJzIGVhcmxpZXIgaW4gdGhlIGJs
b2NrOyBtb2RlcyB2ZXJ0aWNhbC1sciBvciBob3Jpem9udGFsLWJ0LgogY29uc3RleHByIGlubGlu
ZSBib29sIGlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUp
CiB7Ci0gICAgcmV0dXJuIGlzRmxpcHBlZExpbmVzVGV4dEZsb3cobWFrZVRleHRGbG93KHdyaXRp
bmdNb2RlLCBUZXh0RGlyZWN0aW9uOjpMVFIpKTsKKyAgICByZXR1cm4gaXNGbGlwcGVkTGluZXNU
ZXh0RmxvdyhtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
KSk7CiB9CiAKIGVudW0gY2xhc3MgTG9naWNhbEJveFNpZGUgOiB1aW50OF90IHsKQEAgLTE5MSw3
ICsxOTEsNyBAQCBjb25zdGV4cHIgaW5saW5lIEJveFNpZGUgbWFwTG9naWNhbFNpZGVUb1BoeXNp
Y2FsU2lkZShUZXh0RmxvdyB0ZXh0ZmxvdywgTG9naWNhbAogY29uc3RleHByIGlubGluZSBCb3hT
aWRlIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUs
IExvZ2ljYWxCb3hTaWRlIGxvZ2ljYWxTaWRlKQogewogICAgIC8vIFNldCB0aGUgZGlyZWN0aW9u
IHN1Y2ggdGhhdCBzaWRlIGlzIG1pcnJvcmVkIGlmIGlzRmxpcHBlZFdyaXRpbmdNb2RlKCkgaXMg
dHJ1ZQotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gaXNGbGlwcGVkV3JpdGluZ01vZGUo
d3JpdGluZ01vZGUpID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOwor
ICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBpc0ZsaXBwZWRXcml0aW5nTW9kZSh3
cml0aW5nTW9kZSkgPyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSOwogICAgIHJldHVybiBtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0
Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgbG9naWNhbFNpZGUpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQmlkaVJ1bi5jcHAKaW5kZXggNjFhZmVlZTM0NGJiOWExMzdhZDY3ZTA4YjA3
OTVjZmVmNDg5NzE2MS4uYzkzMzNiZDJmZTFjODNiNDc2ODUxNTI1ODBmZGEwOTljYmE0MTY0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmNwcApAQCAtMzEsOCArMzEsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIERFRklORV9ERUJVR19PTkxZX0dMT0JBTChXVEY6OlJlZkNvdW50
ZWRMZWFrQ291bnRlciwgYmlkaVJ1bkNvdW50ZXIsICgiQmlkaVJ1biIpKTsKIAotQmlkaVJ1bjo6
QmlkaVJ1bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgc3RvcCwgUmVuZGVyT2JqZWN0JiByZW5k
ZXJlciwgQmlkaUNvbnRleHQqIGNvbnRleHQsIFVDaGFyRGlyZWN0aW9uIGRpcikKLSAgICA6IEJp
ZGlDaGFyYWN0ZXJSdW4oc3RhcnQsIHN0b3AsIGNvbnRleHQsIGRpcikKK0JpZGlSdW46OkJpZGlS
dW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3AsIFJlbmRlck9iamVjdCYgcmVuZGVyZXIs
IFBBTDo6QmlkaUNvbnRleHQqIGNvbnRleHQsIFVDaGFyRGlyZWN0aW9uIGRpcikKKyAgICA6IFBB
TDo6QmlkaUNoYXJhY3RlclJ1bihzdGFydCwgc3RvcCwgY29udGV4dCwgZGlyKQogICAgICwgbV9y
ZW5kZXJlcihyZW5kZXJlcikKICAgICAsIG1fYm94KG51bGxwdHIpCiB7CkBAIC01Myw4ICs1Myw4
IEBAIEJpZGlSdW46On5CaWRpUnVuKCkKIAogc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+IEJpZGlS
dW46OnRha2VOZXh0KCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaUNoYXJhY3RlclJ1bj4g
bmV4dCA9IEJpZGlDaGFyYWN0ZXJSdW46OnRha2VOZXh0KCk7Ci0gICAgQmlkaUNoYXJhY3RlclJ1
biogcmF3ID0gbmV4dC5yZWxlYXNlKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBBTDo6QmlkaUNo
YXJhY3RlclJ1bj4gbmV4dCA9IFBBTDo6QmlkaUNoYXJhY3RlclJ1bjo6dGFrZU5leHQoKTsKKyAg
ICBQQUw6OkJpZGlDaGFyYWN0ZXJSdW4qIHJhdyA9IG5leHQucmVsZWFzZSgpOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxCaWRpUnVuPiByZXN1bHQgPSBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4oc3Rh
dGljX2Nhc3Q8QmlkaVJ1bio+KHJhdykpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0JpZGlSdW4uaAppbmRleCBlZDc3NDVkN2QxZmEwZjRlYjM2NWRhNTJiNmVkODBi
ZmVlZGE1NjFmLi44OTY3MDU4MGE2ZjBlMjY5MzFkZGM1YWZmOWY3YTg1NTdmY2VlODEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmgKQEAgLTIzLDIwICsyMywyMyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPHBhbC90ZXh0L0JpZGlSZXNvbHZlci5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKKworbmFtZXNwYWNl
IFBBTCB7CitjbGFzcyBCaWRpQ29udGV4dDsKK30KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBCaWRpQ29udGV4dDsKIGNsYXNzIExlZ2FjeUlubGluZUJveDsKIGNsYXNzIFJlbmRlck9i
amVjdDsKIAotc3RydWN0IEJpZGlSdW4gOiBCaWRpQ2hhcmFjdGVyUnVuIHsKLSAgICBCaWRpUnVu
KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBzdG9wLCBSZW5kZXJPYmplY3QmLCBCaWRpQ29udGV4
dCosIFVDaGFyRGlyZWN0aW9uKTsKK3N0cnVjdCBCaWRpUnVuIDogUEFMOjpCaWRpQ2hhcmFjdGVy
UnVuIHsKKyAgICBCaWRpUnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBzdG9wLCBSZW5kZXJP
YmplY3QmLCBQQUw6OkJpZGlDb250ZXh0KiwgVUNoYXJEaXJlY3Rpb24pOwogICAgIH5CaWRpUnVu
KCk7CiAKLSAgICBCaWRpUnVuKiBuZXh0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlkaVJ1bio+
KEJpZGlDaGFyYWN0ZXJSdW46Om5leHQoKSk7IH0KKyAgICBCaWRpUnVuKiBuZXh0KCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8QmlkaVJ1bio+KFBBTDo6QmlkaUNoYXJhY3RlclJ1bjo6bmV4dCgpKTsg
fQogICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpUnVuPiB0YWtlTmV4dCgpOwogICAgIFJlbmRlck9i
amVjdCYgcmVuZGVyZXIoKSB7IHJldHVybiBtX3JlbmRlcmVyOyB9CiAgICAgTGVnYWN5SW5saW5l
Qm94KiBib3goKSB7IHJldHVybiBtX2JveDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCmluZGV4IGY2YjExZDlkNjI5YWNmYmZiODc4NjBjYjdiOGNkMjhjZWJj
MWIxOGIuLjU0NDM5YjNmNDk5NzY5MzZmY2ZkZDA0MzAwZTBlZWMwYTRlYWE5NmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTIyNyw5ICsyMjcsOSBA
QCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKICAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKIH0KIAotU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNwZWxsaW5nVG9vbFRp
cChUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CitTdHJpbmcgSGl0VGVzdFJlc3VsdDo6c3BlbGxp
bmdUb29sVGlwKFBBTDo6VGV4dERpcmVjdGlvbiYgZGlyKSBjb25zdAogewotICAgIGRpciA9IFRl
eHREaXJlY3Rpb246OkxUUjsKKyAgICBkaXIgPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAg
ICAvLyBSZXR1cm4gdGhlIHRvb2wgdGlwIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb2lu
dCwgaWYgYW55LiBPbmx5IG1hcmtlcnMgYXNzb2NpYXRlZCB3aXRoIGJhZCBncmFtbWFyCiAgICAg
Ly8gY3VycmVudGx5IHN1cHBseSBzdHJpbmdzLCBidXQgbWF5YmUgc29tZWRheSBtYXJrZXJzIGFz
c29jaWF0ZWQgd2l0aCBtaXNzcGVsbGVkIHdvcmRzIHdpbGwgYWxzby4KICAgICBpZiAoIW1faW5u
ZXJOb25TaGFyZWROb2RlKQpAQCAtMjU4LDkgKzI1OCw5IEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0
OjpyZXBsYWNlZFN0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIG1hcmtlci0+ZGVzY3JpcHRpb24o
KTsKIH0gICAgCiAgICAgCi1TdHJpbmcgSGl0VGVzdFJlc3VsdDo6dGl0bGUoVGV4dERpcmVjdGlv
biYgZGlyKSBjb25zdAorU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFBBTDo6VGV4dERpcmVj
dGlvbiYgZGlyKSBjb25zdAogewotICAgIGRpciA9IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICBk
aXIgPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAvLyBGaW5kIHRoZSB0aXRsZSBpbiB0
aGUgbmVhcmVzdCBlbmNsb3NpbmcgRE9NIG5vZGUuCiAgICAgLy8gRm9yIDxhcmVhPiB0YWdzIGlu
IGltYWdlIG1hcHMsIHdhbGsgdGhlIHRyZWUgZm9yIHRoZSA8YXJlYT4sIG5vdCB0aGUgPGltZz4g
dXNpbmcgaXQuCiAgICAgZm9yIChOb2RlKiB0aXRsZU5vZGUgPSBtX2lubmVyTm9kZS5nZXQoKTsg
dGl0bGVOb2RlOyB0aXRsZU5vZGUgPSB0aXRsZU5vZGUtPnBhcmVudEluQ29tcG9zZWRUcmVlKCkp
IHsKQEAgLTI3Nyw3ICsyNzcsNyBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6dGl0bGUoVGV4dERp
cmVjdGlvbiYgZGlyKSBjb25zdAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIEhp
dFRlc3RSZXN1bHQ6OmlubmVyVGV4dElmVHJ1bmNhdGVkKFRleHREaXJlY3Rpb24mIGRpcikgY29u
c3QKK1N0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5lclRleHRJZlRydW5jYXRlZChQQUw6OlRleHRE
aXJlY3Rpb24mIGRpcikgY29uc3QKIHsKICAgICBmb3IgKE5vZGUqIHRydW5jYXRlZE5vZGUgPSBt
X2lubmVyTm9kZS5nZXQoKTsgdHJ1bmNhdGVkTm9kZTsgdHJ1bmNhdGVkTm9kZSA9IHRydW5jYXRl
ZE5vZGUtPnBhcmVudEluQ29tcG9zZWRUcmVlKCkpIHsKICAgICAgICAgaWYgKCFpczxFbGVtZW50
PigqdHJ1bmNhdGVkTm9kZSkpCkBAIC0yOTksNyArMjk5LDcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1
bHQ6OmlubmVyVGV4dElmVHJ1bmNhdGVkKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGRpciA9IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICBkaXIgPSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IDM1YWE4MGI3NDQwOGIzMDA0
MmZjYjM0NWYyZTRkMTk0MmUyMjU5MTcuLjQ0MWJkN2Y2Mjk1MGQwZjgzNjhiMzYzMmQ3MzMwOGI2
MDM3YTM2ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVz
dWx0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaApAQCAt
OTQsMTAgKzk0LDEwIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZSogdGFyZ2V0
RnJhbWUoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzU2VsZWN0ZWQoKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNwZWxsaW5nVG9vbFRpcChUZXh0RGlyZWN0aW9uJikgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNwZWxsaW5nVG9vbFRpcChQQUw6OlRleHRE
aXJlY3Rpb24mKSBjb25zdDsKICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcoKSBjb25zdDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdGl0bGUoVGV4dERpcmVjdGlvbiYpIGNvbnN0OwotICAg
IFN0cmluZyBpbm5lclRleHRJZlRydW5jYXRlZChUZXh0RGlyZWN0aW9uJikgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRpdGxlKFBBTDo6VGV4dERpcmVjdGlvbiYpIGNvbnN0Owor
ICAgIFN0cmluZyBpbm5lclRleHRJZlRydW5jYXRlZChQQUw6OlRleHREaXJlY3Rpb24mKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgYWx0RGlzcGxheVN0cmluZygpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0aXRsZURpc3BsYXlTdHJpbmcoKSBjb25zdDsKICAg
ICBXRUJDT1JFX0VYUE9SVCBJbWFnZSogaW1hZ2UoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmNwcAppbmRleCA1YzE5YzkzMDA2MDBlMzc3ZDky
ZWQ2M2YxZThiOWVhNGU2YmNiNmVmLi41YWFkMWJmYjE2OGQ2OGYzZDI5MjE4NWEwNWE3OWY2ZTBk
ODNlMTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFp
bnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIu
Y3BwCkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBJbmxpbmVCb3hQYWludGVyOjpwYWludEZpbGxM
YXllcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IEZpbGxMYXllciYgZmlsbEwKICAgICAvLyB0
aGUgcHJldmlvdXMgbGluZSBsZWZ0IG9mZi4KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXRP
bkxpbmU7CiAgICAgTGF5b3V0VW5pdCB0b3RhbExvZ2ljYWxXaWR0aDsKLSAgICBpZiAocmVuZGVy
ZXIoKS5zdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUikgeworICAgIGlm
IChyZW5kZXJlcigpLnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFIpIHsKICAgICAgICAgZm9yIChhdXRvIGJveCA9IG1faW5saW5lQm94LnByZXZpb3VzSW5saW5l
Qm94KCk7IGJveDsgYm94LnRyYXZlcnNlUHJldmlvdXNJbmxpbmVCb3goKSkKICAgICAgICAgICAg
IGxvZ2ljYWxPZmZzZXRPbkxpbmUgKz0gYm94LT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAgdG90
YWxMb2dpY2FsV2lkdGggPSBsb2dpY2FsT2Zmc2V0T25MaW5lOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUlubGluZUJveC5oCmluZGV4IGE5MjRmNmEyYTIwOWM1NDQ4NmFlNzExZTMy
NjgxODJhNjEyYTEzNDYuLmU2MDBmNDRiY2JkNjZkMzE2NmI0Zjk5ZDQ3NDY5NDExN2EwZWQ2NDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVCb3guaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmgKQEAgLTIwOCw4
ICsyMDgsOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZlbCgpIGNvbnN0
IHsgcmV0dXJuIG1fYml0ZmllbGRzLmJpZGlFbWJlZGRpbmdMZXZlbCgpOyB9CiAgICAgdm9pZCBz
ZXRCaWRpTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkgeyBtX2JpdGZpZWxkcy5zZXRCaWRpRW1i
ZWRkaW5nTGV2ZWwobGV2ZWwpOyB9Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGly
ZWN0aW9uOjpMVFI7IH0KLSAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBkaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBQQUw6OlRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVsKCkgJSAyID8g
UEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsgfQorICAg
IGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGlvbigp
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOyB9CiAgICAgaW50IGNhcmV0TGVmdG1vc3RPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjYXJldE1pbk9m
ZnNldCgpIDogY2FyZXRNYXhPZmZzZXQoKTsgfQogICAgIGludCBjYXJldFJpZ2h0bW9zdE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNhcmV0TWF4T2Zm
c2V0KCkgOiBjYXJldE1pbk9mZnNldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUlubGluZUl0ZXJhdG9yLmgKaW5kZXggN2M0YjY3YjkxMWMxNjg3YzgwNmNkZjk0
NzZkYWJjNGM3MTg5NDYzMC4uNzRjZTMzMTk3OGRiZDZiMmM2MzM1ZDg4MzA0MGMxNjAzZWNiOTU5
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUl0ZXJh
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUl0ZXJhdG9y
LmgKQEAgLTE0MCwxMSArMTQwLDExIEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGVn
YWN5SW5saW5lSXRlcmF0b3ImIGl0MSwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0CiAgICAgcmV0
dXJuIGl0MS5vZmZzZXQoKSAhPSBpdDIub2Zmc2V0KCkgfHwgaXQxLnJlbmRlcmVyKCkgIT0gaXQy
LnJlbmRlcmVyKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgVUNoYXJEaXJlY3Rpb24gZW1iZWRDaGFy
RnJvbURpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRVVuaWNvZGVCaWRpIHVuaWNv
ZGVCaWRpKQorc3RhdGljIGlubGluZSBVQ2hhckRpcmVjdGlvbiBlbWJlZENoYXJGcm9tRGlyZWN0
aW9uKFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFBBTDo6RVVuaWNvZGVCaWRpIHVuaWNv
ZGVCaWRpKQogewotICAgIGlmICh1bmljb2RlQmlkaSA9PSBFbWJlZCkKLSAgICAgICAgcmV0dXJu
IGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hUX1RPX0xFRlRfRU1CRURE
SU5HIDogVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORzsKLSAgICByZXR1cm4gZGlyZWN0aW9uID09
IFRleHREaXJlY3Rpb246OlJUTCA/IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSA6IFVfTEVGVF9U
T19SSUdIVF9PVkVSUklERTsKKyAgICBpZiAodW5pY29kZUJpZGkgPT0gUEFMOjpFVW5pY29kZUJp
ZGk6OkVtYmVkKQorICAgICAgICByZXR1cm4gZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6UlRMID8gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORyA6IFVfTEVGVF9UT19SSUdIVF9FTUJF
RERJTkc7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA/
IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSA6IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERTsKIH0K
IAogdGVtcGxhdGUgPGNsYXNzIE9ic2VydmVyPgpAQCAtMTU0LDggKzE1NCw4IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBub3RpZnlPYnNlcnZlckVudGVyZWRPYmplY3QoT2JzZXJ2ZXIqIG9ic2VydmVy
LCBSZW5kZXJPYmplY3QqCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLSAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkg
PSBzdHlsZS51bmljb2RlQmlkaSgpOwotICAgIGlmICh1bmljb2RlQmlkaSA9PSBVQk5vcm1hbCkg
eworICAgIFBBTDo6RVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpID0gc3R5bGUudW5pY29kZUJpZGko
KTsKKyAgICBpZiAodW5pY29kZUJpZGkgPT0gUEFMOjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsKSB7
CiAgICAgICAgIC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtd3JpdGluZy1tb2Rlcy8j
dW5pY29kZS1iaWRpCiAgICAgICAgIC8vICJUaGUgZWxlbWVudCBkb2VzIG5vdCBvcGVuIGFuIGFk
ZGl0aW9uYWwgbGV2ZWwgb2YgZW1iZWRkaW5nIHdpdGggcmVzcGVjdCB0byB0aGUgYmlkaXJlY3Rp
b25hbCBhbGdvcml0aG0uIgogICAgICAgICAvLyBUaHVzIHdlIGlnbm9yZSBhbnkgcG9zc2libGUg
ZGlyPSBhdHRyaWJ1dGUgb24gdGhlIHNwYW4uCkBAIC0xNzEsNyArMTcxLDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIG5vdGlmeU9ic2VydmVyRW50ZXJlZE9iamVjdChPYnNlcnZlciogb2JzZXJ2ZXIs
IFJlbmRlck9iamVjdCoKICAgICB9CiAKICAgICBpZiAoIW9ic2VydmVyLT5pbklzb2xhdGUoKSkK
LSAgICAgICAgb2JzZXJ2ZXItPmVtYmVkKGVtYmVkQ2hhckZyb21EaXJlY3Rpb24oc3R5bGUuZGly
ZWN0aW9uKCksIHVuaWNvZGVCaWRpKSwgRnJvbVN0eWxlT3JET00pOworICAgICAgICBvYnNlcnZl
ci0+ZW1iZWQoZW1iZWRDaGFyRnJvbURpcmVjdGlvbihzdHlsZS5kaXJlY3Rpb24oKSwgdW5pY29k
ZUJpZGkpLCBQQUw6OkZyb21TdHlsZU9yRE9NKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIE9ic2Vy
dmVyPgpAQCAtMTgwLDggKzE4MCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlPYnNlcnZl
cldpbGxFeGl0T2JqZWN0KE9ic2VydmVyKiBvYnNlcnZlciwgUmVuZGVyT2JqZWN0CiAgICAgaWYg
KCFvYnNlcnZlciB8fCAhb2JqZWN0IHx8ICFvYmplY3QtPmlzUmVuZGVySW5saW5lKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSA9IG9iamVjdC0+c3R5
bGUoKS51bmljb2RlQmlkaSgpOwotICAgIGlmICh1bmljb2RlQmlkaSA9PSBVQk5vcm1hbCkKKyAg
ICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSA9IG9iamVjdC0+c3R5bGUoKS51bmljb2Rl
QmlkaSgpOworICAgIGlmICh1bmljb2RlQmlkaSA9PSBQQUw6OkVVbmljb2RlQmlkaTo6VUJOb3Jt
YWwpCiAgICAgICAgIHJldHVybjsgLy8gTm90aGluZyB0byBkbyBmb3IgdW5pY29kZS1iaWRpOiBu
b3JtYWwKICAgICBpZiAoaXNJc29sYXRlZCh1bmljb2RlQmlkaSkpIHsKICAgICAgICAgb2JzZXJ2
ZXItPmV4aXRJc29sYXRlKCk7CkBAIC0xOTAsNyArMTkwLDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IG5vdGlmeU9ic2VydmVyV2lsbEV4aXRPYmplY3QoT2JzZXJ2ZXIqIG9ic2VydmVyLCBSZW5kZXJP
YmplY3QKIAogICAgIC8vIE90aGVyd2lzZSB3ZSBwb3AgYW55IGVtYmVkL292ZXJyaWRlIGNoYXJh
Y3RlciB3ZSBhZGRlZCB3aGVuIHdlIG9wZW5lZCB0aGlzIHRhZy4KICAgICBpZiAoIW9ic2VydmVy
LT5pbklzb2xhdGUoKSkKLSAgICAgICAgb2JzZXJ2ZXItPmVtYmVkKFVfUE9QX0RJUkVDVElPTkFM
X0ZPUk1BVCwgRnJvbVN0eWxlT3JET00pOworICAgICAgICBvYnNlcnZlci0+ZW1iZWQoVV9QT1Bf
RElSRUNUSU9OQUxfRk9STUFULCBQQUw6OkZyb21TdHlsZU9yRE9NKTsKIH0KIAogc3RhdGljIGlu
bGluZSBib29sIGlzSXRlcmF0b3JUYXJnZXQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCkBAIC0zNzEs
MTIgKzM3MSw2IEBAIEFMV0FZU19JTkxJTkUgVUNoYXJEaXJlY3Rpb24gTGVnYWN5SW5saW5lSXRl
cmF0b3I6OmRpcmVjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIFVfT1RIRVJfTkVVVFJBTDsKIH0K
IAotdGVtcGxhdGU8PgotaW5saW5lIHZvaWQgSW5saW5lQmlkaVJlc29sdmVyOjppbmNyZW1lbnRJ
bnRlcm5hbCgpCi17Ci0gICAgbV9jdXJyZW50LmluY3JlbWVudCh0aGlzKTsKLX0KLQogc3RhdGlj
IGlubGluZSBib29sIGlzSXNvbGF0ZWRJbmxpbmUoUmVuZGVyT2JqZWN0JiBvYmplY3QpCiB7CiAg
ICAgcmV0dXJuIG9iamVjdC5pc1JlbmRlcklubGluZSgpICYmIGlzSXNvbGF0ZWQob2JqZWN0LnN0
eWxlKCkudW5pY29kZUJpZGkoKSk7CkBAIC00MTUsNiArNDA5LDE2IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBhZGRQbGFjZWhvbGRlclJ1bkZvcklzb2xhdGVkSW5saW5lKElubGluZUJpZGlSZXNvbHZl
ciYgcmVzb2x2CiAgICAgcmVzb2x2ZXIucnVucygpLmFwcGVuZFJ1bihXVEZNb3ZlKGlzb2xhdGVk
UnVuKSk7CiB9CiAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFBBTCB7CisK
K3RlbXBsYXRlPD4KK2lubGluZSB2b2lkIFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6aW5j
cmVtZW50SW50ZXJuYWwoKQoreworICAgIG1fY3VycmVudC5pbmNyZW1lbnQodGhpcyk7Cit9CisK
IGNsYXNzIElzb2xhdGVUcmFja2VyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBJc29sYXRlVHJh
Y2tlcih1bnNpZ25lZCBuZXN0ZWRJc29sYXRlQ291bnQpCkBAIC00MzQsMjQgKzQzOCwyNCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpbklzb2xhdGUoKSBjb25zdCB7IHJldHVybiBtX25lc3RlZElzb2xh
dGVDb3VudDsgfQogCiAgICAgLy8gV2UgZG9uJ3QgY2FyZSBpZiB3ZSBlbmNvdW50ZXIgYmlkaSBk
aXJlY3Rpb25hbCBvdmVycmlkZXMuCi0gICAgdm9pZCBlbWJlZChVQ2hhckRpcmVjdGlvbiwgQmlk
aUVtYmVkZGluZ1NvdXJjZSkgeyB9CisgICAgdm9pZCBlbWJlZChVQ2hhckRpcmVjdGlvbiwgUEFM
OjpCaWRpRW1iZWRkaW5nU291cmNlKSB7IH0KICAgICB2b2lkIGNvbW1pdEV4cGxpY2l0RW1iZWRk
aW5nKCkgeyB9CiAKLSAgICB2b2lkIGFkZEZha2VSdW5JZk5lY2Vzc2FyeShSZW5kZXJPYmplY3Qm
IG9iaiwgdW5zaWduZWQgcG9zLCB1bnNpZ25lZCBlbmQsIFJlbmRlckVsZW1lbnQmIHJvb3QsIElu
bGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCisgICAgdm9pZCBhZGRGYWtlUnVuSWZOZWNlc3Nh
cnkoV2ViQ29yZTo6UmVuZGVyT2JqZWN0JiBvYmosIHVuc2lnbmVkIHBvcywgdW5zaWduZWQgZW5k
LCBXZWJDb3JlOjpSZW5kZXJFbGVtZW50JiByb290LCBXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2
ZXImIHJlc29sdmVyKQogICAgIHsKICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGFkZCBhIGZh
a2UgcnVuIGZvciBhIGdpdmVuIGlzb2xhdGVkIHNwYW4gb25jZSBkdXJpbmcgZWFjaCBjYWxsIHRv
IGNyZWF0ZUJpZGlSdW5zRm9yTGluZS4KICAgICAgICAgLy8gV2UnbGwgYmUgY2FsbGVkIGZvciBl
dmVyeSBzcGFuIGluc2lkZSB0aGUgaXNvbGF0ZWQgc3BhbiBzbyB3ZSBqdXN0IGlnbm9yZSBzdWJz
ZXF1ZW50IGNhbGxzLgogICAgICAgICAvLyBXZSBhbHNvIGF2b2lkIGNyZWF0aW5nIGEgZmFrZSBy
dW4gdW50aWwgd2UgaGl0IGEgY2hpbGQgdGhhdCB3YXJyYW50cyBvbmUsIGUuZy4gd2Ugc2tpcCBm
bG9hdHMuCi0gICAgICAgIGlmIChSZW5kZXJCbG9jazo6c2hvdWxkU2tpcENyZWF0aW5nUnVuc0Zv
ck9iamVjdChvYmopKQorICAgICAgICBpZiAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNob3VsZFNr
aXBDcmVhdGluZ1J1bnNGb3JPYmplY3Qob2JqKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgaWYgKCFtX2hhdmVBZGRlZEZha2VSdW5Gb3JSb290SXNvbGF0ZSkgewogICAgICAgICAgICAg
Ly8gb2JqIGFuZCBwb3MgdG9nZXRoZXIgZGVub3RlIGEgc2luZ2xlIHBvc2l0aW9uIGluIHRoZSBp
bmxpbmUsIGZyb20gd2hpY2ggdGhlIHBhcnNpbmcgb2YgdGhlIGlzb2xhdGUgd2lsbCBzdGFydC4K
ICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gbWFyayB0aGUgZW5kIG9mIHRoZSBydW4g
YmVjYXVzZSB0aGlzIGlzIGltcGxpY2l0OiBpdCBpcyBlaXRoZXIgZW5kT2ZMaW5lIG9yIHRoZSBl
bmQgb2YgdGhlCiAgICAgICAgICAgICAvLyBpc29sYXRlLCB3aGVuIHdlIGNhbGwgY3JlYXRlQmlk
aVJ1bnNGb3JMaW5lIGl0IHdpbGwgc3RvcCBhdCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCi0gICAg
ICAgICAgICBhZGRQbGFjZWhvbGRlclJ1bkZvcklzb2xhdGVkSW5saW5lKHJlc29sdmVyLCBvYmos
IHBvcywgcm9vdCk7CisgICAgICAgICAgICBXZWJDb3JlOjphZGRQbGFjZWhvbGRlclJ1bkZvcklz
b2xhdGVkSW5saW5lKHJlc29sdmVyLCBvYmosIHBvcywgcm9vdCk7CiAgICAgICAgIH0KICAgICAg
ICAgbV9oYXZlQWRkZWRGYWtlUnVuRm9yUm9vdElzb2xhdGUgPSB0cnVlOwotICAgICAgICBMZWdh
Y3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0KG51bGxwdHIsIHBvcywgZW5kLCBvYmos
IHJlc29sdmVyKTsKKyAgICAgICAgV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVu
c0Zvck9iamVjdChudWxscHRyLCBwb3MsIGVuZCwgb2JqLCByZXNvbHZlcik7CiAgICAgfQogCiBw
cml2YXRlOgpAQCAtNDYwLDcgKzQ2NCw3IEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTw+Ci1p
bmxpbmUgdm9pZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKCkKK2lubGlu
ZSB2b2lkIFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6YXBwZW5kUnVuSW50ZXJuYWwoKQog
ewogICAgIGlmICghbV9lbXB0eVJ1biAmJiAhbV9lb3IuYXRFbmQoKSAmJiAhbV9yZWFjaGVkRW5k
T2ZMaW5lKSB7CiAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hlbiB3ZSBlbnRlci9sZWF2ZSAi
dW5pY29kZS1iaWRpOiBpc29sYXRlIiBpbmxpbmVzLgpAQCAtNDY4LDE1ICs0NzIsMTUgQEAgaW5s
aW5lIHZvaWQgSW5saW5lQmlkaVJlc29sdmVyOjphcHBlbmRSdW5JbnRlcm5hbCgpCiAgICAgICAg
IC8vIEZJWE1FOiBDb3VsZCB0aGlzIGluaXRpYWxpemUgZnJvbSB0aGlzLT5pbklzb2xhdGUoKSBp
bnN0ZWFkIG9mIHdhbGtpbmcgdXAgdGhlIHJlbmRlciB0cmVlPwogICAgICAgICBJc29sYXRlVHJh
Y2tlciBpc29sYXRlVHJhY2tlcihudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMobV9zb3IpKTsKICAg
ICAgICAgaW50IHN0YXJ0ID0gbV9zb3Iub2Zmc2V0KCk7Ci0gICAgICAgIFJlbmRlck9iamVjdCog
b2JqID0gbV9zb3IucmVuZGVyZXIoKTsKKyAgICAgICAgV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiBv
YmogPSBtX3Nvci5yZW5kZXJlcigpOwogICAgICAgICB3aGlsZSAob2JqICYmIG9iaiAhPSBtX2Vv
ci5yZW5kZXJlcigpICYmIG9iaiAhPSBlbmRPZkxpbmUucmVuZGVyZXIoKSkgewogICAgICAgICAg
ICAgaWYgKGlzb2xhdGVUcmFja2VyLmluSXNvbGF0ZSgpKQogICAgICAgICAgICAgICAgIGlzb2xh
dGVUcmFja2VyLmFkZEZha2VSdW5JZk5lY2Vzc2FyeSgqb2JqLCBzdGFydCwgb2JqLT5sZW5ndGgo
KSwgKm1fc29yLnJvb3QoKSwgKnRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIExlZ2FjeUxpbmVMYXlvdXQ6OmFwcGVuZFJ1bnNGb3JPYmplY3QoJm1fcnVucywgc3RhcnQs
IG9iai0+bGVuZ3RoKCksICpvYmosICp0aGlzKTsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpM
ZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0KCZtX3J1bnMsIHN0YXJ0LCBvYmot
Pmxlbmd0aCgpLCAqb2JqLCAqdGhpcyk7CiAgICAgICAgICAgICAvLyBGSVhNRTogc3RhcnQvb2Jq
IHNob3VsZCBiZSBhbiBMZWdhY3lJbmxpbmVJdGVyYXRvciBpbnN0ZWFkIG9mIHR3byBzZXBhcmF0
ZSB2YXJpYWJsZXMuCiAgICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgICAgICBvYmogPSBu
ZXh0SW5saW5lUmVuZGVyZXJTa2lwcGluZ0VtcHR5KCptX3Nvci5yb290KCksIG9iaiwgJmlzb2xh
dGVUcmFja2VyKTsKKyAgICAgICAgICAgIG9iaiA9IFdlYkNvcmU6Om5leHRJbmxpbmVSZW5kZXJl
clNraXBwaW5nRW1wdHkoKm1fc29yLnJvb3QoKSwgb2JqLCAmaXNvbGF0ZVRyYWNrZXIpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChvYmopIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IG9i
aiA9PSBtX2Vvci5yZW5kZXJlcigpID8gbV9lb3Iub2Zmc2V0KCkgOiBVSU5UX01BWDsKQEAgLTQ4
OSw3ICs0OTMsNyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bklu
dGVybmFsKCkKICAgICAgICAgICAgIGlmIChpc29sYXRlVHJhY2tlci5pbklzb2xhdGUoKSkKICAg
ICAgICAgICAgICAgICBpc29sYXRlVHJhY2tlci5hZGRGYWtlUnVuSWZOZWNlc3NhcnkoKm9iaiwg
c3RhcnQsIG9iai0+bGVuZ3RoKCksICptX3Nvci5yb290KCksICp0aGlzKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2Jq
ZWN0KCZtX3J1bnMsIHN0YXJ0LCBlbmQsICpvYmosICp0aGlzKTsKKyAgICAgICAgICAgICAgICBX
ZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0KCZtX3J1bnMsIHN0
YXJ0LCBlbmQsICpvYmosICp0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fZW9yLmluY3Jl
bWVudCgpOwpAQCAtNTAxLDEwICs1MDUsMTAgQEAgaW5saW5lIHZvaWQgSW5saW5lQmlkaVJlc29s
dmVyOjphcHBlbmRSdW5JbnRlcm5hbCgpCiB9CiAKIHRlbXBsYXRlPD4KLWlubGluZSBib29sIElu
bGluZUJpZGlSZXNvbHZlcjo6bmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5hbCgpIGNvbnN0Citp
bmxpbmUgYm9vbCBXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6Om5lZWRzQ29udGludWVQYXN0
RW5kSW50ZXJuYWwoKSBjb25zdAogewogICAgIC8vIFdlIGRvbid0IGNvbGxlY3QgcnVucyBiZXlv
bmQgdGhlIGVuZE9mTGluZSByZW5kZXJlci4gU3RvcCB0cmF2ZXJzaW5nIHdoZW4gdGhlIGl0ZXJh
dG9yIG1vdmVzIHRvIHRoZSBuZXh0IHJlbmRlcmVyIHRvIHByZXZlbnQgTyhuXjIpLgogICAgIHJl
dHVybiBtX2N1cnJlbnQucmVuZGVyZXIoKSA9PSBlbmRPZkxpbmUucmVuZGVyZXIoKTsKIH0KIAot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgUEFMCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHAKaW5kZXggOGNlOGYxZjczYzJjYWYx
MGIyN2RkMDc5ZWVhMzBkODBiOTkzMjI0NC4uOThjNTgzYzBhNzVkMDgzYmY1YTU5ODkxNDI5YzIz
MGQ4NTMwYTVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxp
bmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5
b3V0LmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkxlZ2FjeUxpbmVMYXlvdXQuaCIK
IAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJCcmVha2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudElubGluZXMu
aCIKICNpbmNsdWRlICJGbG9hdGluZ09iamVjdHMuaCIKQEAgLTUzLDYgKzUyLDcgQEAKICNpbmNs
dWRlICJTVkdSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRl
ICJWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9CaWRpUmVzb2x2
ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTcwLDcgKzcwLDcgQEAgTGVnYWN5TGluZUxheW91dDo6fkxlZ2FjeUxpbmVMYXlvdXQo
KQogICAgIGxpbmVCb3hlcygpLmRlbGV0ZUxpbmVCb3hUcmVlKCk7CiB9OwogCi1zdGF0aWMgdm9p
ZCBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShUZXh0RGlyZWN0aW9uJiBkaXIsIExlZ2FjeUlubGlu
ZUl0ZXJhdG9yIGl0ZXIpCitzdGF0aWMgdm9pZCBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShQQUw6
OlRleHREaXJlY3Rpb24mIGRpciwgTGVnYWN5SW5saW5lSXRlcmF0b3IgaXRlcikKIHsKICAgICB3
aGlsZSAoIWl0ZXIuYXRFbmQoKSkgewogICAgICAgICBpZiAoaXRlci5hdFBhcmFncmFwaFNlcGFy
YXRvcigpKQpAQCAtNzgsMTEgKzc4LDExIEBAIHN0YXRpYyB2b2lkIGRldGVybWluZURpcmVjdGlv
bmFsaXR5KFRleHREaXJlY3Rpb24mIGRpciwgTGVnYWN5SW5saW5lSXRlcmF0b3IgaXRlCiAgICAg
ICAgIGlmIChVQ2hhciBjdXJyZW50ID0gaXRlci5jdXJyZW50KCkpIHsKICAgICAgICAgICAgIFVD
aGFyRGlyZWN0aW9uIGNoYXJEaXJlY3Rpb24gPSB1X2NoYXJEaXJlY3Rpb24oY3VycmVudCk7CiAg
ICAgICAgICAgICBpZiAoY2hhckRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAg
ICAgICAgICAgICBkaXIgPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgICAgICAgICAgZGly
ID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNoYXJEaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19M
RUZUIHx8IGNoYXJEaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX0FSQUJJQykgewotICAgICAg
ICAgICAgICAgIGRpciA9IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAgICAgICAgICAgICBkaXIg
PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTk1LDcgKzk1LDcgQEAgaW5saW5lIHN0ZDo6dW5pcXVl
X3B0cjxCaWRpUnVuPiBjcmVhdGVSdW4oaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJPYmplY3Qm
IG9iaiwKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxCaWRpUnVuPihzdGFydCwgZW5kLCBvYmosIHJl
c29sdmVyLmNvbnRleHQoKSwgcmVzb2x2ZXIuZGlyKCkpOwogfQogCi12b2lkIExlZ2FjeUxpbmVM
YXlvdXQ6OmFwcGVuZFJ1bnNGb3JPYmplY3QoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4qIHJ1bnMsIGlu
dCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosIElubGluZUJpZGlSZXNvbHZlciYg
cmVzb2x2ZXIpCit2b2lkIExlZ2FjeUxpbmVMYXlvdXQ6OmFwcGVuZFJ1bnNGb3JPYmplY3QoUEFM
OjpCaWRpUnVuTGlzdDxCaWRpUnVuPiogcnVucywgaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJP
YmplY3QmIG9iaiwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKIHsKICAgICBpZiAoc3Rh
cnQgPiBlbmQgfHwgUmVuZGVyQmxvY2s6OnNob3VsZFNraXBDcmVhdGluZ1J1bnNGb3JPYmplY3Qo
b2JqKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjc4LDcgKzI3OCw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBlbmRzV2l0aEhUTUxTcGFjZXMo
Y29uc3QgQ2hhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIHJlYWNoZWRFbmRP
ZlRleHRSZW5kZXJlcihjb25zdCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMpCitzdGF0
aWMgYm9vbCByZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIoY29uc3QgUEFMOjpCaWRpUnVuTGlzdDxC
aWRpUnVuPiYgYmlkaVJ1bnMpCiB7CiAgICAgQmlkaVJ1biogcnVuID0gYmlkaVJ1bnMubG9naWNh
bGx5TGFzdFJ1bigpOwogICAgIGlmICghcnVuKQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBi
b29sIHJlYWNoZWRFbmRPZlRleHRSZW5kZXJlcihjb25zdCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYg
YmlkaVJ1bnMpCiAgICAgcmV0dXJuIGVuZHNXaXRoSFRNTFNwYWNlcyh0ZXh0LmNoYXJhY3RlcnMx
NigpLCBwb3NpdGlvbiwgbGVuZ3RoKTsKIH0KIAotTGVnYWN5Um9vdElubGluZUJveCogTGVnYWN5
TGluZUxheW91dDo6Y29uc3RydWN0TGluZShCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMs
IGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbykKK0xlZ2FjeVJvb3RJbmxpbmVCb3gqIExlZ2FjeUxp
bmVMYXlvdXQ6OmNvbnN0cnVjdExpbmUoUEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1
bnMsIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbykKIHsKICAgICBBU1NFUlQoYmlkaVJ1bnMuZmly
c3RSdW4oKSk7CiAKQEAgLTM2Myw3ICszNjMsNyBAQCBUZXh0QWxpZ25Nb2RlIExlZ2FjeUxpbmVM
YXlvdXQ6OnRleHRBbGlnbm1lbnRGb3JMaW5lKGJvb2wgZW5kc1dpdGhTb2Z0QnJlYWspIGNvbgog
I2lmIEVOQUJMRShDU1MzX1RFWFQpCiAgICAgVGV4dEp1c3RpZnkgdGV4dEp1c3RpZnkgPSBzdHls
ZSgpLnRleHRKdXN0aWZ5KCk7CiAgICAgaWYgKGFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpK
dXN0aWZ5ICYmIHRleHRKdXN0aWZ5ID09IFRleHRKdXN0aWZ5OjpOb25lKQotICAgICAgICByZXR1
cm4gc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBUZXh0QWxpZ25N
b2RlOjpMZWZ0IDogVGV4dEFsaWduTW9kZTo6UmlnaHQ7CisgICAgICAgIHJldHVybiBzdHlsZSgp
LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gVGV4dEFsaWduTW9kZTo6
TGVmdCA6IFRleHRBbGlnbk1vZGU6OlJpZ2h0OwogI2VuZGlmCiAKICAgICBpZiAoZW5kc1dpdGhT
b2Z0QnJlYWspCkBAIC02MzEsOCArNjMxLDggQEAgdm9pZCBMZWdhY3lMaW5lTGF5b3V0Ojpjb21w
dXRlRXhwYW5zaW9uRm9ySnVzdGlmaWVkVGV4dChCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVIKIAog
dm9pZCBMZWdhY3lMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoUmVu
ZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBUZXh0QWxpZ25Nb2RlJiB0ZXh0QWxpZ24sIGNvbnN0
IExlZ2FjeVJvb3RJbmxpbmVCb3gqIHJvb3RJbmxpbmVCb3gsIEJpZGlSdW4qIHRyYWlsaW5nU3Bh
Y2VSdW4sIGZsb2F0JiBsb2dpY2FsTGVmdCwgZmxvYXQmIHRvdGFsTG9naWNhbFdpZHRoLCBmbG9h
dCYgYXZhaWxhYmxlTG9naWNhbFdpZHRoLCBpbnQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkK
IHsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKLSAgICBpZiAocm9vdElubGluZUJveCAm
JiBmbG93LnN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQbGFpbnRleHQpCisgICAgUEFMOjpUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICBpZiAocm9vdElubGluZUJveCAmJiBmbG93LnN0eWxl
KCkudW5pY29kZUJpZGkoKSA9PSBQQUw6OkVVbmljb2RlQmlkaTo6UGxhaW50ZXh0KQogICAgICAg
ICBkaXJlY3Rpb24gPSByb290SW5saW5lQm94LT5kaXJlY3Rpb24oKTsKICAgICBlbHNlCiAgICAg
ICAgIGRpcmVjdGlvbiA9IGZsb3cuc3R5bGUoKS5kaXJlY3Rpb24oKTsKQEAgLTY2NywxMyArNjY3
LDEzIEBAIHZvaWQgTGVnYWN5TGluZUxheW91dDo6dXBkYXRlTG9naWNhbFdpZHRoRm9yQWxpZ25t
ZW50KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uCiAgICAgICAgIH0KICAgICAgICAgRkFMTFRI
Uk9VR0g7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgaWYgKGRpcmVj
dGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICB1cGRhdGVMb2dpY2FsV2lkdGhGb3JM
ZWZ0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24sIHRyYWlsaW5nU3BhY2VSdW4s
IGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yUmlnaHRBbGln
bmVkQmxvY2soaXNMZWZ0VG9SaWdodERpcmVjdGlvbiwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNh
bExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAgaWYgKGRpcmVj
dGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICB1cGRhdGVMb2dpY2FsV2lkdGhGb3JS
aWdodEFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uLCB0cmFpbGluZ1NwYWNlUnVu
LCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckxlZnRBbGln
bmVkQmxvY2soaXNMZWZ0VG9SaWdodERpcmVjdGlvbiwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNh
bExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwpAQCAtODk3
LDcgKzg5Nyw3IEBAIEJpZGlSdW4qIExlZ2FjeUxpbmVMYXlvdXQ6OmNvbXB1dGVJbmxpbmVEaXJl
Y3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KExlZ2FjeVJvb3RJCiAgICAgQmlkaVJ1biogcHJldmlv
dXNSdW4gPSBudWxscHRyOwogICAgIGZvciAoOyBydW47IHJ1biA9IHJ1bi0+bmV4dCgpKSB7CiAg
ICAgICAgIGF1dG8gY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgPSBbJmV4cGFuc2lvbk9w
cG9ydHVuaXRpZXMsICZleHBhbnNpb25PcHBvcnR1bml0eUNvdW50LCB0ZXh0QWxpZ24sICZpc0Fm
dGVyRXhwYW5zaW9uXSAoUmVuZGVyQmxvY2tGbG93JiBibG9jaywKLSAgICAgICAgICAgIExlZ2Fj
eUlubGluZVRleHRCb3gmIHRleHRCb3gsIEJpZGlSdW4qIHByZXZpb3VzUnVuLCBCaWRpUnVuKiBu
ZXh0UnVuLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQor
ICAgICAgICAgICAgTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgQmlkaVJ1biogcHJldmlv
dXNSdW4sIEJpZGlSdW4qIG5leHRSdW4sIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgUEFMOjpUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHN0cmluZ1Zp
ZXcuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRW1wdHkgcnVucyBzaG91bGQgc3Rp
bGwgcHJvZHVjZSBhbiBlbnRyeSBpbiBleHBhbnNpb25PcHBvcnR1bml0aWVzIGxpc3Qgc28gdGhh
dCB0aGUgbnVtYmVyIG9mIGl0ZW1zIG1hdGNoZXMgdGhlIG51bWJlciBvZiBydW5zLgpAQCAtMTA5
MSw3ICsxMDkxLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBmaW5kRmlyc3RUcmFpbGluZ1Nw
YWNlKGNvbnN0IFJlbmRlclRleHQmIGxhc3RUZXh0LCBjb25zdAogICAgIHJldHVybiBmaXJzdFNw
YWNlOwogfQogCi1pbmxpbmUgQmlkaVJ1biogTGVnYWN5TGluZUxheW91dDo6aGFuZGxlVHJhaWxp
bmdTcGFjZXMoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBCaWRpQ29udGV4dCogY3Vy
cmVudENvbnRleHQpCitpbmxpbmUgQmlkaVJ1biogTGVnYWN5TGluZUxheW91dDo6aGFuZGxlVHJh
aWxpbmdTcGFjZXMoUEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIFBBTDo6Qmlk
aUNvbnRleHQqIGN1cnJlbnRDb250ZXh0KQogewogICAgIGlmICghYmlkaVJ1bnMucnVuQ291bnQo
KQogICAgICAgICB8fCAhYmlkaVJ1bnMubG9naWNhbGx5TGFzdFJ1bigpLT5yZW5kZXJlcigpLnN0
eWxlKCkuYnJlYWtPbmx5QWZ0ZXJXaGl0ZVNwYWNlKCkKQEAgLTExMTMsMTcgKzExMTMsMTcgQEAg
aW5saW5lIEJpZGlSdW4qIExlZ2FjeUxpbmVMYXlvdXQ6OmhhbmRsZVRyYWlsaW5nU3BhY2VzKEJp
ZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWQKICAgICBpZiAoZmlyc3RTcGFjZSA9PSB0cmFpbGluZ1Nw
YWNlUnVuLT5zdG9wKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24gPSBzdHlsZSgpLmRpcmVjdGlvbigpOwotICAgIGJvb2wgc2hvdWxkUmVv
cmRlciA9IHRyYWlsaW5nU3BhY2VSdW4gIT0gKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpM
VFIgPyBiaWRpUnVucy5sYXN0UnVuKCkgOiBiaWRpUnVucy5maXJzdFJ1bigpKTsKKyAgICBQQUw6
OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rpb24oKTsKKyAgICBib29s
IHNob3VsZFJlb3JkZXIgPSB0cmFpbGluZ1NwYWNlUnVuICE9IChkaXJlY3Rpb24gPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBiaWRpUnVucy5sYXN0UnVuKCkgOiBiaWRpUnVucy5maXJzdFJ1
bigpKTsKICAgICBpZiAoZmlyc3RTcGFjZSAhPSB0cmFpbGluZ1NwYWNlUnVuLT5zdGFydCgpKSB7
Ci0gICAgICAgIEJpZGlDb250ZXh0KiBiYXNlQ29udGV4dCA9IGN1cnJlbnRDb250ZXh0OwotICAg
ICAgICB3aGlsZSAoQmlkaUNvbnRleHQqIHBhcmVudCA9IGJhc2VDb250ZXh0LT5wYXJlbnQoKSkK
KyAgICAgICAgUEFMOjpCaWRpQ29udGV4dCogYmFzZUNvbnRleHQgPSBjdXJyZW50Q29udGV4dDsK
KyAgICAgICAgd2hpbGUgKFBBTDo6QmlkaUNvbnRleHQqIHBhcmVudCA9IGJhc2VDb250ZXh0LT5w
YXJlbnQoKSkKICAgICAgICAgICAgIGJhc2VDb250ZXh0ID0gcGFyZW50OwogCiAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxCaWRpUnVuPiBuZXdUcmFpbGluZ1J1biA9IG1ha2VVbmlxdWU8QmlkaVJ1
bj4oZmlyc3RTcGFjZSwgdHJhaWxpbmdTcGFjZVJ1bi0+bV9zdG9wLCB0cmFpbGluZ1NwYWNlUnVu
LT5yZW5kZXJlcigpLCBiYXNlQ29udGV4dCwgVV9PVEhFUl9ORVVUUkFMKTsKICAgICAgICAgdHJh
aWxpbmdTcGFjZVJ1bi0+bV9zdG9wID0gZmlyc3RTcGFjZTsKICAgICAgICAgdHJhaWxpbmdTcGFj
ZVJ1biA9IG5ld1RyYWlsaW5nUnVuLmdldCgpOwotICAgICAgICBpZiAoZGlyZWN0aW9uID09IFRl
eHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUikKICAgICAgICAgICAgIGJpZGlSdW5zLmFwcGVuZFJ1bihXVEZNb3ZlKG5ld1Ry
YWlsaW5nUnVuKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGJpZGlSdW5zLnByZXBlbmRS
dW4oV1RGTW92ZShuZXdUcmFpbGluZ1J1bikpOwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgaW5saW5l
IEJpZGlSdW4qIExlZ2FjeUxpbmVMYXlvdXQ6OmhhbmRsZVRyYWlsaW5nU3BhY2VzKEJpZGlSdW5M
aXN0PEJpZGlSdW4+JiBiaWQKICAgICBpZiAoIXNob3VsZFJlb3JkZXIpCiAgICAgICAgIHJldHVy
biB0cmFpbGluZ1NwYWNlUnVuOwogCi0gICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIpIHsKKyAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7
CiAgICAgICAgIGJpZGlSdW5zLm1vdmVSdW5Ub0VuZCh0cmFpbGluZ1NwYWNlUnVuKTsKICAgICAg
ICAgdHJhaWxpbmdTcGFjZVJ1bi0+bV9sZXZlbCA9IDA7CiAgICAgfSBlbHNlIHsKQEAgLTExNzAs
NyArMTE3MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRVcFJlc29sdmVyVG9SZXN1bWVJbklz
b2xhdGUoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwKIH0KIAogLy8gRklYTUU6IEJpZGlS
ZXNvbHZlciBzaG91bGQgaGF2ZSB0aGlzIGxvZ2ljLgotc3RhdGljIGlubGluZSB2b2lkIGNvbnN0
cnVjdEJpZGlSdW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLCBC
aWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9y
JiBlbmRPZlJ1bnMsIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRlLCBib29sIHByZXZp
b3VzTGluZUJyb2tlQ2xlYW5seSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVu
c0ZvclNlZ21lbnQoSW5saW5lQmlkaVJlc29sdmVyJiB0b3BSZXNvbHZlciwgUEFMOjpCaWRpUnVu
TGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRP
ZlJ1bnMsIFBBTDo6VmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUsIGJvb2wgcHJldmlv
dXNMaW5lQnJva2VDbGVhbmx5KQogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcGFzcyBhIEJp
ZGlSdW5MaXN0IGludG8gY3JlYXRlQmlkaVJ1bnNGb3JMaW5lIGluc3RlYWQKICAgICAvLyBvZiB0
aGUgcmVzb2x2ZXIgb3duaW5nIHRoZSBydW5zLgpAQCAtMTE5NiwxNSArMTE5NiwxNSBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElubGluZUJpZGlSZXNv
bHZlciYgdG9wUmVzb2x2ZXIsCiAgICAgICAgIEFTU0VSVChpc29sYXRlZElubGluZSk7CiAKICAg
ICAgICAgSW5saW5lQmlkaVJlc29sdmVyIGlzb2xhdGVkUmVzb2x2ZXI7Ci0gICAgICAgIEVVbmlj
b2RlQmlkaSB1bmljb2RlQmlkaSA9IGlzb2xhdGVkSW5saW5lLT5zdHlsZSgpLnVuaWNvZGVCaWRp
KCk7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwotICAgICAgICBpZiAodW5pY29k
ZUJpZGkgPT0gUGxhaW50ZXh0KQorICAgICAgICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlk
aSA9IGlzb2xhdGVkSW5saW5lLT5zdHlsZSgpLnVuaWNvZGVCaWRpKCk7CisgICAgICAgIFBBTDo6
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb247CisgICAgICAgIGlmICh1bmljb2RlQmlkaSA9PSBQQUw6
OkVVbmljb2RlQmlkaTo6UGxhaW50ZXh0KQogICAgICAgICAgICAgZGV0ZXJtaW5lRGlyZWN0aW9u
YWxpdHkoZGlyZWN0aW9uLCBMZWdhY3lJbmxpbmVJdGVyYXRvcihpc29sYXRlZElubGluZSwgJmlz
b2xhdGVkUnVuLm9iamVjdCwgMCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VS
VCh1bmljb2RlQmlkaSA9PSBJc29sYXRlIHx8IHVuaWNvZGVCaWRpID09IElzb2xhdGVPdmVycmlk
ZSk7CisgICAgICAgICAgICBBU1NFUlQodW5pY29kZUJpZGkgPT0gUEFMOjpFVW5pY29kZUJpZGk6
Oklzb2xhdGUgfHwgdW5pY29kZUJpZGkgPT0gUEFMOjpFVW5pY29kZUJpZGk6Oklzb2xhdGVPdmVy
cmlkZSk7CiAgICAgICAgICAgICBkaXJlY3Rpb24gPSBpc29sYXRlZElubGluZS0+c3R5bGUoKS5k
aXJlY3Rpb24oKTsKICAgICAgICAgfQotICAgICAgICBpc29sYXRlZFJlc29sdmVyLnNldFN0YXR1
cyhCaWRpU3RhdHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZSh1bmljb2RlQmlkaSkpKTsKKyAgICAg
ICAgaXNvbGF0ZWRSZXNvbHZlci5zZXRTdGF0dXMoUEFMOjpCaWRpU3RhdHVzKGRpcmVjdGlvbiwg
aXNPdmVycmlkZSh1bmljb2RlQmlkaSkpKTsKIAogICAgICAgICBzZXRVcFJlc29sdmVyVG9SZXN1
bWVJbklzb2xhdGUoaXNvbGF0ZWRSZXNvbHZlciwgdG9wUmVzb2x2ZXIsIGlzb2xhdGVkUnVuLnJ1
blRvUmVwbGFjZSwgaXNvbGF0ZWRJbmxpbmUsICZzdGFydE9iamVjdCk7CiAKQEAgLTEyMTcsNyAr
MTIxNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQo
SW5saW5lQmlkaVJlc29sdmVyJiB0b3BSZXNvbHZlciwKICAgICAgICAgLy8gV2Ugc3RvcCBhdCB0
aGUgbmV4dCBlbmQgb2YgbGluZTsgd2UgbWF5IHJlLWVudGVyIHRoaXMgaXNvbGF0ZSBpbiB0aGUg
bmV4dCBjYWxsIHRvIGNvbnN0cnVjdEJpZGlSdW5zKCkuCiAgICAgICAgIC8vIEZJWE1FOiBXaGF0
IHNob3VsZCBlbmQgYW5kIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSBiZT8KICAgICAgICAgLy8g
cm5pd2Egc2F5cyBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkgaXMganVzdCBhIFdpbklFIGhhY2sg
YW5kIGNvdWxkIGFsd2F5cyBiZSBmYWxzZSBoZXJlPwotICAgICAgICBpc29sYXRlZFJlc29sdmVy
LmNyZWF0ZUJpZGlSdW5zRm9yTGluZShlbmRPZlJ1bnMsIE5vVmlzdWFsT3ZlcnJpZGUsIHByZXZp
b3VzTGluZUJyb2tlQ2xlYW5seSk7CisgICAgICAgIGlzb2xhdGVkUmVzb2x2ZXIuY3JlYXRlQmlk
aVJ1bnNGb3JMaW5lKGVuZE9mUnVucywgUEFMOjpWaXN1YWxEaXJlY3Rpb25PdmVycmlkZTo6Tm9W
aXN1YWxPdmVycmlkZSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKICAgICAgICAgLy8gTm90
ZSB0aGF0IHdlIGRvIG5vdCBkZWxldGUgdGhlIHJ1bnMgZnJvbSB0aGUgcmVzb2x2ZXIuCiAgICAg
ICAgIC8vIFdlJ3JlIG5vdCBndWFyYW50ZWVkIHRvIGdldCBhbnkgQmlkaVJ1bnMgaW4gdGhlIHBy
ZXZpb3VzIHN0ZXAuIElmIHdlIGRvbid0LCB3ZSBhbGxvdyB0aGUgcGxhY2Vob2xkZXIKICAgICAg
ICAgLy8gaXRzZWxmIHRvIGJlIHR1cm5lZCBpbnRvIGFuIElubGluZUJveC4gV2UgY2FuJ3QgcmVt
b3ZlIGl0IGhlcmUgd2l0aG91dCBwb3RlbnRpYWxseSBsb3NpbmcgdHJhY2sgb2YKQEAgLTEyMzcs
NyArMTIzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21l
bnQoSW5saW5lQmlkaVJlc29sdmVyJiB0b3BSZXNvbHZlciwKIH0KIAogLy8gVGhpcyBmdW5jdGlv
biBjb25zdHJ1Y3RzIGxpbmUgYm94ZXMgZm9yIGFsbCBvZiB0aGUgdGV4dCBydW5zIGluIHRoZSBy
ZXNvbHZlciBhbmQgY29tcHV0ZXMgdGhlaXIgcG9zaXRpb24uCi1MZWdhY3lSb290SW5saW5lQm94
KiBMZWdhY3lMaW5lTGF5b3V0OjpjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnModW5zaWduZWQg
YmlkaUxldmVsLCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IExlZ2FjeUlu
bGluZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiBsaW5lSW5mbywgVmVydGljYWxQb3NpdGlvbkNh
Y2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIFdv
cmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCitMZWdhY3lSb290SW5saW5lQm94KiBM
ZWdhY3lMaW5lTGF5b3V0OjpjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnModW5zaWduZWQgYmlk
aUxldmVsLCBQQUw6OkJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGVnYWN5
SW5saW5lSXRlcmF0b3ImIGVuZCwgTGluZUluZm8mIGxpbmVJbmZvLCBWZXJ0aWNhbFBvc2l0aW9u
Q2FjaGUmIHZlcnRpY2FsUG9zaXRpb25DYWNoZSwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwg
V29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cykKIHsKICAgICBpZiAoIWJpZGlSdW5z
LnJ1bkNvdW50KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTMzOCw3ICsxMzM4LDcg
QEAgdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGEKICAgICAvLyBXZSBhbHNvIGZpbmQgdGhlIGZpcnN0
IGNsZWFuIGxpbmUgYW5kIGV4dHJhY3QgdGhlc2UgbGluZXMuIFdlIHdpbGwgYWRkIHRoZW0gYmFj
awogICAgIC8vIGlmIHdlIGRldGVybWluZSB0aGF0IHdlJ3JlIGFibGUgdG8gc3luY2hyb25pemUg
YWZ0ZXIgaGFuZGxpbmcgYWxsIG91ciBkaXJ0eSBsaW5lcy4KICAgICBMZWdhY3lJbmxpbmVJdGVy
YXRvciBjbGVhbkxpbmVTdGFydDsKLSAgICBCaWRpU3RhdHVzIGNsZWFuTGluZUJpZGlTdGF0dXM7
CisgICAgUEFMOjpCaWRpU3RhdHVzIGNsZWFuTGluZUJpZGlTdGF0dXM7CiAgICAgaWYgKCFsYXlv
dXRTdGF0ZS5pc0Z1bGxMYXlvdXQoKSAmJiBzdGFydExpbmUpCiAgICAgICAgIGRldGVybWluZUVu
ZFBvc2l0aW9uKGxheW91dFN0YXRlLCBzdGFydExpbmUsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxp
bmVCaWRpU3RhdHVzKTsKIApAQCAtMTM3OCw3ICsxMzc4LDcgQEAgaW5saW5lIGNvbnN0IExlZ2Fj
eUlubGluZUl0ZXJhdG9yJiBMZWdhY3lMaW5lTGF5b3V0OjpyZXN0YXJ0TGF5b3V0UnVuc0FuZEZs
b2F0c0kKICAgICByZXR1cm4gb2xkRW5kOwogfQogCi12b2lkIExlZ2FjeUxpbmVMYXlvdXQ6Omxh
eW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElu
bGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBj
bGVhbkxpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgdW5z
aWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpCit2b2lkIExlZ2FjeUxpbmVMYXlvdXQ6
OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUs
IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9y
JiBjbGVhbkxpbmVTdGFydCwgY29uc3QgUEFMOjpCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3Rh
dHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcykKIHsKICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgYm9vbCBwYWdpbmF0ZWQgPSBs
YXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKSAmJiBsYXlvdXRDb250ZXh0KCkubGF5b3V0U3Rh
dGUoKS0+aXNQYWdpbmF0ZWQoKTsKQEAgLTE0MzEsMTUgKzE0MzEsMTUgQEAgdm9pZCBMZWdhY3lM
aW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxh
eW91dFN0YXRlLAogICAgICAgICAgICAgaWYgKGxhc3RSb290Qm94KCkpCiAgICAgICAgICAgICAg
ICAgbGFzdFJvb3RCb3goKS0+c2V0TGluZUJyZWFrSW5mbyhlbmQucmVuZGVyZXIoKSwgZW5kLm9m
ZnNldCgpLCByZXNvbHZlci5zdGF0dXMoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlkZSA9IChzdHlsZVRvVXNlLnJ0bE9yZGVy
aW5nKCkgPT0gT3JkZXI6OlZpc3VhbCA/IChzdHlsZVRvVXNlLmRpcmVjdGlvbigpID09IFRleHRE
aXJlY3Rpb246OkxUUiA/IFZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUgOiBWaXN1YWxSaWdodFRv
TGVmdE92ZXJyaWRlKSA6IE5vVmlzdWFsT3ZlcnJpZGUpOworICAgICAgICAgICAgUEFMOjpWaXN1
YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlkZSA9IChzdHlsZVRvVXNlLnJ0bE9yZGVyaW5nKCkg
PT0gT3JkZXI6OlZpc3VhbCA/IChzdHlsZVRvVXNlLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSID8gUEFMOjpWaXN1YWxEaXJlY3Rpb25PdmVycmlkZTo6VmlzdWFsTGVmdFRv
UmlnaHRPdmVycmlkZSA6IFBBTDo6VmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGU6OlZpc3VhbFJpZ2h0
VG9MZWZ0T3ZlcnJpZGUpIDogUEFMOjpWaXN1YWxEaXJlY3Rpb25PdmVycmlkZTo6Tm9WaXN1YWxP
dmVycmlkZSk7CiAKLSAgICAgICAgICAgIGlmIChpc05ld1VCQVBhcmFncmFwaCAmJiBzdHlsZVRv
VXNlLnVuaWNvZGVCaWRpKCkgPT0gUGxhaW50ZXh0ICYmICFyZXNvbHZlci5jb250ZXh0KCktPnBh
cmVudCgpKSB7Ci0gICAgICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdHls
ZVRvVXNlLmRpcmVjdGlvbigpOworICAgICAgICAgICAgaWYgKGlzTmV3VUJBUGFyYWdyYXBoICYm
IHN0eWxlVG9Vc2UudW5pY29kZUJpZGkoKSA9PSBQQUw6OkVVbmljb2RlQmlkaTo6UGxhaW50ZXh0
ICYmICFyZXNvbHZlci5jb250ZXh0KCktPnBhcmVudCgpKSB7CisgICAgICAgICAgICAgICAgUEFM
OjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0eWxlVG9Vc2UuZGlyZWN0aW9uKCk7CiAgICAg
ICAgICAgICAgICAgZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkoZGlyZWN0aW9uLCByZXNvbHZlci5w
b3NpdGlvbigpKTsKLSAgICAgICAgICAgICAgICByZXNvbHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1
cyhkaXJlY3Rpb24sIGlzT3ZlcnJpZGUoc3R5bGVUb1VzZS51bmljb2RlQmlkaSgpKSkpOworICAg
ICAgICAgICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhQQUw6OkJpZGlTdGF0dXMoZGlyZWN0aW9u
LCBpc092ZXJyaWRlKHN0eWxlVG9Vc2UudW5pY29kZUJpZGkoKSkpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG93bmVyc2hpcCBpcyByZXZlcnNlZC4gV2Ugc2hv
dWxkIG93biB0aGUgQmlkaVJ1bkxpc3QgYW5kIHBhc3MgaXQgdG8gY3JlYXRlQmlkaVJ1bnNGb3JM
aW5lLgotICAgICAgICAgICAgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zID0gcmVzb2x2
ZXIucnVucygpOworICAgICAgICAgICAgUEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1
bnMgPSByZXNvbHZlci5ydW5zKCk7CiAgICAgICAgICAgICBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNl
Z21lbnQocmVzb2x2ZXIsIGJpZGlSdW5zLCBlbmQsIG92ZXJyaWRlLCBsYXlvdXRTdGF0ZS5saW5l
SW5mbygpLnByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSgpKTsKICAgICAgICAgICAgIEFTU0VSVChy
ZXNvbHZlci5wb3NpdGlvbigpID09IGVuZCk7CiAKQEAgLTE5NjMsMTcgKzE5NjMsMTcgQEAgTGVn
YWN5Um9vdElubGluZUJveCogTGVnYWN5TGluZUxheW91dDo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlv
bihMaW5lTGF5b3V0U3RhdGUmIGwKICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oaXRlciwg
bnVtYmVyT2ZJc29sYXRlQW5jZXN0b3JzKGl0ZXIpKTsKICAgICAgICAgcmVzb2x2ZXIuc2V0U3Rh
dHVzKGxhc3RMaW5lLT5saW5lQnJlYWtCaWRpU3RhdHVzKCkpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rpb24oKTsKLSAgICAg
ICAgaWYgKHN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQbGFpbnRleHQpCisgICAgICAgIFBBTDo6
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdHlsZSgpLmRpcmVjdGlvbigpOworICAgICAgICBp
ZiAoc3R5bGUoKS51bmljb2RlQmlkaSgpID09IFBBTDo6RVVuaWNvZGVCaWRpOjpQbGFpbnRleHQp
CiAgICAgICAgICAgICBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShkaXJlY3Rpb24sIExlZ2FjeUlu
bGluZUl0ZXJhdG9yKCZtX2Zsb3csIGZpcnN0SW5saW5lUmVuZGVyZXJTa2lwcGluZ0VtcHR5KG1f
ZmxvdyksIDApKTsKLSAgICAgICAgcmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMoZGlyZWN0
aW9uLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJpZGkoKSkpKTsKKyAgICAgICAgcmVzb2x2
ZXIuc2V0U3RhdHVzKFBBTDo6QmlkaVN0YXR1cyhkaXJlY3Rpb24sIGlzT3ZlcnJpZGUoc3R5bGUo
KS51bmljb2RlQmlkaSgpKSkpOwogICAgICAgICBMZWdhY3lJbmxpbmVJdGVyYXRvciBpdGVyID0g
TGVnYWN5SW5saW5lSXRlcmF0b3IoJm1fZmxvdywgZmlyc3RJbmxpbmVSZW5kZXJlclNraXBwaW5n
RW1wdHkobV9mbG93LCAmcmVzb2x2ZXIpLCAwKTsKICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRp
b24oaXRlciwgbnVtYmVyT2ZJc29sYXRlQW5jZXN0b3JzKGl0ZXIpKTsKICAgICB9CiAgICAgcmV0
dXJuIGN1cnJlbnRMaW5lOwogfQogCi12b2lkIExlZ2FjeUxpbmVMYXlvdXQ6OmRldGVybWluZUVu
ZFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIExlZ2FjeVJvb3RJbmxpbmVC
b3gqIHN0YXJ0TGluZSwgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBCaWRp
U3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKQordm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpkZXRl
cm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBMZWdhY3lSb290
SW5saW5lQm94KiBzdGFydExpbmUsIExlZ2FjeUlubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFy
dCwgUEFMOjpCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKQogewogICAgIGF1dG8gaXRl
cmF0b3JGb3JGaXJzdERpcnR5RmxvYXQgPSBbXShMaW5lTGF5b3V0U3RhdGU6OkZsb2F0TGlzdCYg
ZmxvYXRzKSB7CiAgICAgICAgIGF1dG8gbGFzdENsZWFuRmxvYXQgPSBmbG9hdHMubGFzdENsZWFu
RmxvYXQoKTsKQEAgLTIwODUsNyArMjA4NSw3IEBAIGJvb2wgTGVnYWN5TGluZUxheW91dDo6bGlu
ZVdpZHRoRm9yUGFnaW5hdGVkTGluZUNoYW5nZWQoTGVnYWN5Um9vdElubGluZUJveCogcm9vCiAg
ICAgcmV0dXJuIHJvb3RCb3gtPnBhZ2luYXRlZExpbmVXaWR0aCgpICE9IG1fZmxvdy5hdmFpbGFi
bGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KGN1cnJlbnRGcmFnbWVudCk7CiB9CiAKLWJvb2wgTGVn
YWN5TGluZUxheW91dDo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0
ZSwgY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgY29uc3QgTGVnYWN5SW5saW5l
SXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1cykK
K2Jvb2wgTGVnYWN5TGluZUxheW91dDo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgY29uc3QgTGVn
YWN5SW5saW5lSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgUEFMOjpCaWRpU3RhdHVzJiBl
bmRMaW5lU3RhdHVzKQogewogICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpID09IGVuZExpbmVT
dGFydCkgewogICAgICAgICBpZiAocmVzb2x2ZXIuc3RhdHVzKCkgIT0gZW5kTGluZVN0YXR1cykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5oCmluZGV4IDEyYWQ3
Yzk1ODAzNmYzNTUxMjQ3Y2Y1NTBiMjIwMjc2ZDNjNmU3YzguLmE1NzQ5NWRjZTYzNGVlMmRlMDE0
OTcyNzA0MjVmZmVjOTJiZGFkNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MZWdhY3lMaW5lTGF5b3V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2Fj
eUxpbmVMYXlvdXQuaApAQCAtMzEsOSArMzEsMTQgQEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNv
bnN0YW50cy5oIgogI2luY2x1ZGUgIlRyYWlsaW5nT2JqZWN0cy5oIgogCituYW1lc3BhY2UgUEFM
IHsKK3RlbXBsYXRlIDxjbGFzcyBSdW4+IGNsYXNzIEJpZGlSdW5MaXN0OworY2xhc3MgQmlkaUNv
bnRleHQ7CitzdHJ1Y3QgQmlkaVN0YXR1czsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBCaWRpQ29udGV4dDsKIGNsYXNzIEZsb2F0aW5nT2JqZWN0OwogY2xhc3MgRmxvYXRXaXRo
UmVjdDsKIGNsYXNzIEZyYW1lVmlld0xheW91dENvbnRleHQ7CkBAIC00NiwxMCArNTEsOCBAQCBj
bGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJSdWJ5UnVuOwogY2xhc3MgTGVnYWN5Um9v
dElubGluZUJveDsKIGNsYXNzIFZlcnRpY2FsUG9zaXRpb25DYWNoZTsKLXN0cnVjdCBCaWRpU3Rh
dHVzOwogc3RydWN0IFdvcmRNZWFzdXJlbWVudDsKIAotdGVtcGxhdGUgPGNsYXNzIFJ1bj4gY2xh
c3MgQmlkaVJ1bkxpc3Q7CiB0eXBlZGVmIFZlY3RvcjxXb3JkTWVhc3VyZW1lbnQsIDY0PiBXb3Jk
TWVhc3VyZW1lbnRzOwogCiBjbGFzcyBMZWdhY3lMaW5lTGF5b3V0IHsKQEAgLTY2LDE0ICs2OSwx
NCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGxheW91dExpbmVCb3hlcyhib29sIHJlbGF5b3V0Q2hp
bGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50
TG9naWNhbEJvdHRvbSk7CiAKLSAgICBMZWdhY3lSb290SW5saW5lQm94KiBjb25zdHJ1Y3RMaW5l
KEJpZGlSdW5MaXN0PEJpZGlSdW4+JiwgY29uc3QgTGluZUluZm8mKTsKKyAgICBMZWdhY3lSb290
SW5saW5lQm94KiBjb25zdHJ1Y3RMaW5lKFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mLCBjb25z
dCBMaW5lSW5mbyYpOwogICAgIGJvb2wgcG9zaXRpb25OZXdGbG9hdE9uTGluZShjb25zdCBGbG9h
dGluZ09iamVjdCYgbmV3RmxvYXQsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlv
dXNMaW5lLCBMaW5lSW5mbyYsIExpbmVXaWR0aCYpOwogICAgIHZvaWQgYWRkT3ZlcmZsb3dGcm9t
SW5saW5lQ2hpbGRyZW4oKTsKIAogICAgIHNpemVfdCBsaW5lQ291bnQoKSBjb25zdDsKICAgICBz
aXplX3QgbGluZUNvdW50VW50aWwoY29uc3QgTGVnYWN5Um9vdElubGluZUJveCopIGNvbnN0Owog
Ci0gICAgc3RhdGljIHZvaWQgYXBwZW5kUnVuc0Zvck9iamVjdChCaWRpUnVuTGlzdDxCaWRpUnVu
PiosIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiwgSW5saW5lQmlkaVJlc29sdmVy
Jik7CisgICAgc3RhdGljIHZvaWQgYXBwZW5kUnVuc0Zvck9iamVjdChQQUw6OkJpZGlSdW5MaXN0
PEJpZGlSdW4+KiwgaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJPYmplY3QmLCBJbmxpbmVCaWRp
UmVzb2x2ZXImKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1l
bnQoUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgVGV4dEFsaWduTW9kZSYsIGNvbnN0IExlZ2FjeVJv
b3RJbmxpbmVCb3gqLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9naWNhbExl
ZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2ljYWxXaWR0
aCwgaW50IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpOwogCiBwcml2YXRlOgpAQCAtODksMjAg
KzkyLDIwIEBAIHByaXZhdGU6CiAgICAgQmlkaVJ1biogY29tcHV0ZUlubGluZURpcmVjdGlvblBv
c2l0aW9uc0ZvclNlZ21lbnQoTGVnYWN5Um9vdElubGluZUJveCosIGNvbnN0IExpbmVJbmZvJiwg
VGV4dEFsaWduTW9kZSwgZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgYXZhaWxhYmxlTG9naWNh
bFdpZHRoLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgR2x5
cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmLCBX
b3JkTWVhc3VyZW1lbnRzJik7CiAgICAgdm9pZCByZW1vdmVJbmxpbmVCb3goQmlkaVJ1biYsIGNv
bnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gmKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVCbG9ja0Rp
cmVjdGlvblBvc2l0aW9uc0ZvckxpbmUoTGVnYWN5Um9vdElubGluZUJveCosIEJpZGlSdW4qIGZp
cnN0UnVuLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXAs
IFZlcnRpY2FsUG9zaXRpb25DYWNoZSYpOwotICAgIGlubGluZSBCaWRpUnVuKiBoYW5kbGVUcmFp
bGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIEJpZGlDb250ZXh0KiBj
dXJyZW50Q29udGV4dCk7CisgICAgaW5saW5lIEJpZGlSdW4qIGhhbmRsZVRyYWlsaW5nU3BhY2Vz
KFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBQQUw6OkJpZGlDb250ZXh0KiBj
dXJyZW50Q29udGV4dCk7CiAgICAgdm9pZCBhcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUo
RmxvYXRpbmdPYmplY3QmKTsKLSAgICBMZWdhY3lSb290SW5saW5lQm94KiBjcmVhdGVMaW5lQm94
ZXNGcm9tQmlkaVJ1bnModW5zaWduZWQgYmlkaUxldmVsLCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYg
YmlkaVJ1bnMsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiwgVmVy
dGljYWxQb3NpdGlvbkNhY2hlJiwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgV29yZE1lYXN1
cmVtZW50cyYpOworICAgIExlZ2FjeVJvb3RJbmxpbmVCb3gqIGNyZWF0ZUxpbmVCb3hlc0Zyb21C
aWRpUnVucyh1bnNpZ25lZCBiaWRpTGV2ZWwsIFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJp
ZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgZW5kLCBMaW5lSW5mbyYsIFZlcnRp
Y2FsUG9zaXRpb25DYWNoZSYsIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIFdvcmRNZWFzdXJl
bWVudHMmKTsKICAgICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiwg
Ym9vbCBoYXNJbmxpbmVDaGlsZCk7CiAgICAgaW5saW5lIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJh
dG9yJiByZXN0YXJ0TGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGF5b3V0VW5pdCBvbGRMb2dp
Y2FsSGVpZ2h0LCBMYXlvdXRVbml0IG5ld0xvZ2ljYWxIZWlnaHQsIEZsb2F0aW5nT2JqZWN0KiBs
YXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCAgY29uc3QgTGVn
YWN5SW5saW5lSXRlcmF0b3ImIG9sZEVuZCk7Ci0gICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRz
SW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBMZWdh
Y3lJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFu
TGluZUJpZGlTdGF0dXMsIHVuc2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzKTsKKyAg
ICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYsIElubGlu
ZUJpZGlSZXNvbHZlciYsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFy
dCwgY29uc3QgUEFMOjpCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBj
b25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcyk7CiAgICAgdm9pZCByZWF0dGFjaENsZWFuTGluZUZs
b2F0cyhMZWdhY3lSb290SW5saW5lQm94JiBjbGVhbkxpbmUsIExheW91dFVuaXQgZGVsdGEsIGJv
b2wgaXNGaXJzdENsZWFuTGluZSk7CiAgICAgdm9pZCBsaW5rVG9FbmRMaW5lSWZOZWVkZWQoTGlu
ZUxheW91dFN0YXRlJik7CiAgICAgdm9pZCBjaGVja0Zsb2F0SW5DbGVhbkxpbmUoTGVnYWN5Um9v
dElubGluZUJveCYgY2xlYW5MaW5lLCBSZW5kZXJCb3gmIGZsb2F0Qm94T25DbGVhbkxpbmUsIEZs
b2F0V2l0aFJlY3QmIG1hdGNoaW5nRmxvYXRXaXRoUmVjdCwgYm9vbCYgZW5jb3VudGVyZWROZXdG
bG9hdCwgYm9vbCYgZGlydGllZEJ5RmxvYXQpOwogICAgIExlZ2FjeVJvb3RJbmxpbmVCb3gqIGRl
dGVybWluZVN0YXJ0UG9zaXRpb24oTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlkaVJlc29sdmVy
Jik7Ci0gICAgdm9pZCBkZXRlcm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmLCBMZWdh
Y3lSb290SW5saW5lQm94KiBzdGFydExpbmUsIExlZ2FjeUlubGluZUl0ZXJhdG9yJiBjbGVhbkxp
bmVTdGFydCwgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cyk7CisgICAgdm9pZCBkZXRl
cm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmLCBMZWdhY3lSb290SW5saW5lQm94KiBz
dGFydExpbmUsIExlZ2FjeUlubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgUEFMOjpCaWRp
U3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKTsKICAgICBib29sIGNoZWNrUGFnaW5hdGlvbkFu
ZEZsb2F0c0F0RW5kTGluZShMaW5lTGF5b3V0U3RhdGUmKTsKICAgICBib29sIGxpbmVXaWR0aEZv
clBhZ2luYXRlZExpbmVDaGFuZ2VkKExlZ2FjeVJvb3RJbmxpbmVCb3gqIHJvb3RCb3gsIExheW91
dFVuaXQgbGluZURlbHRhLCBSZW5kZXJGcmFnbWVudGVkRmxvdyopIGNvbnN0OwotICAgIGJvb2wg
bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiwgY29uc3QgSW5saW5lQmlkaVJlc29sdmVy
JiwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgQmlkaVN0
YXR1cyYgZW5kTGluZVN0YXR1cyk7CisgICAgYm9vbCBtYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0
U3RhdGUmLCBjb25zdCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVy
YXRvciYgZW5kTGluZVN0YXJ0LCBjb25zdCBQQUw6OkJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMp
OwogICAgIHZvaWQgZGVsZXRlRWxsaXBzaXNMaW5lQm94ZXMoKTsKICAgICB2b2lkIGNoZWNrTGlu
ZXNGb3JUZXh0T3ZlcmZsb3coKTsKICAgICB2b2lkIHVwZGF0ZUZyYWdtZW50Rm9yTGluZShMZWdh
Y3lSb290SW5saW5lQm94KikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5Um9vdElubGluZUJveC5jcHAKaW5kZXggOGUxYTBmYmVmNTZjZjYxMGVkMTdmYWQ3YzVl
ODRjYTY0Yzc1ZDAyYi4uNzVhZTRhZjc1ZDQ4MDQ3NmJiNDU5MGJiNzM0NTE5ZmM0OTIzOGE2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lSb290SW5saW5lQm94LmNw
cApAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxlZ2Fj
eVJvb3RJbmxpbmVCb3guaCIKIAotI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgogI2luY2x1ZGUg
IkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyUnVieVRleHQuaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiVmVydGljYWxQb3NpdGlvbkNhY2hlLmgiCisj
aW5jbHVkZSA8cGFsL3RleHQvQmlkaVJlc29sdmVyLmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTk5LDEwICsxOTksMTAgQEAg
dm9pZCBMZWdhY3lSb290SW5saW5lQm94OjphZGp1c3RQb3NpdGlvbihmbG9hdCBkeCwgZmxvYXQg
ZHkpCiB2b2lkIExlZ2FjeVJvb3RJbmxpbmVCb3g6OmNoaWxkUmVtb3ZlZChMZWdhY3lJbmxpbmVC
b3gqIGJveCkKIHsKICAgICBpZiAoJmJveC0+cmVuZGVyZXIoKSA9PSBtX2xpbmVCcmVha09iaikK
LSAgICAgICAgc2V0TGluZUJyZWFrSW5mbyhudWxscHRyLCAwLCBCaWRpU3RhdHVzKCkpOworICAg
ICAgICBzZXRMaW5lQnJlYWtJbmZvKG51bGxwdHIsIDAsIFBBTDo6QmlkaVN0YXR1cygpKTsKIAog
ICAgIGZvciAoYXV0byogcHJldiA9IHByZXZSb290Qm94KCk7IHByZXYgJiYgcHJldi0+bGluZUJy
ZWFrT2JqKCkgPT0gJmJveC0+cmVuZGVyZXIoKTsgcHJldiA9IHByZXYtPnByZXZSb290Qm94KCkp
IHsKLSAgICAgICAgcHJldi0+c2V0TGluZUJyZWFrSW5mbyhudWxscHRyLCAwLCBCaWRpU3RhdHVz
KCkpOworICAgICAgICBwcmV2LT5zZXRMaW5lQnJlYWtJbmZvKG51bGxwdHIsIDAsIFBBTDo6Qmlk
aVN0YXR1cygpKTsKICAgICAgICAgcHJldi0+bWFya0RpcnR5KCk7CiAgICAgfQogfQpAQCAtNTk4
LDEyICs1OTgsMTIgQEAgUmVuZGVyQmxvY2tGbG93JiBMZWdhY3lSb290SW5saW5lQm94OjpibG9j
a0Zsb3coKSBjb25zdAogICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KHJlbmRl
cmVyKCkpOwogfQogCi1CaWRpU3RhdHVzIExlZ2FjeVJvb3RJbmxpbmVCb3g6OmxpbmVCcmVha0Jp
ZGlTdGF0dXMoKSBjb25zdAorUEFMOjpCaWRpU3RhdHVzIExlZ2FjeVJvb3RJbmxpbmVCb3g6Omxp
bmVCcmVha0JpZGlTdGF0dXMoKSBjb25zdAogeyAKICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxV
Q2hhckRpcmVjdGlvbj4obV9saW5lQnJlYWtCaWRpU3RhdHVzRW9yKSwgc3RhdGljX2Nhc3Q8VUNo
YXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1c0xhc3RTdHJvbmcpLCBzdGF0aWNfY2Fz
dDxVQ2hhckRpcmVjdGlvbj4obV9saW5lQnJlYWtCaWRpU3RhdHVzTGFzdCksIG1fbGluZUJyZWFr
Q29udGV4dC5jb3B5UmVmKCkgfTsKIH0KIAotdm9pZCBMZWdhY3lSb290SW5saW5lQm94OjpzZXRM
aW5lQnJlYWtJbmZvKFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBicmVha1Bvc2l0aW9u
LCBjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMpCit2b2lkIExlZ2FjeVJvb3RJbmxpbmVCb3g6OnNl
dExpbmVCcmVha0luZm8oUmVuZGVyT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIGJyZWFrUG9zaXRp
b24sIGNvbnN0IFBBTDo6QmlkaVN0YXR1cyYgc3RhdHVzKQogewogICAgIG1fbGluZUJyZWFrT2Jq
ID0gb2JqZWN0OwogICAgIG1fbGluZUJyZWFrUG9zID0gYnJlYWtQb3NpdGlvbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lSb290SW5saW5lQm94LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5oCmluZGV4IGVjZWUyNjRk
YjVjMzI5ZjU0ZmRkMDhlZjE5YWFjMDZlMDgwNDM2ZTUuLmU1OWI2NDYyZTg4MjliNWY2NWVjOTk3
NjUxNmFiMjU1NDBmYzM0MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
ZWdhY3lSb290SW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2Fj
eVJvb3RJbmxpbmVCb3guaApAQCAtMjAsMTEgKzIwLDE1IEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiQmlkaUNvbnRleHQuaCIKICNpbmNsdWRlICJMZWdhY3lJbmxpbmVGbG93Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQmlkaUNvbnRleHQu
aD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCituYW1lc3BhY2UgUEFMIHsKK3N0cnVjdCBC
aWRpU3RhdHVzOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhpdFRlc3RSZXN1
bHQ7CkBAIC0zMyw3ICszNyw2IEBAIGNsYXNzIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXM7
CiBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiBjbGFzcyBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjsK
IAotc3RydWN0IEJpZGlTdGF0dXM7CiBzdHJ1Y3QgR2FwUmVjdHM7CiAKIGNsYXNzIExlZ2FjeVJv
b3RJbmxpbmVCb3ggOiBwdWJsaWMgTGVnYWN5SW5saW5lRmxvd0JveCwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPExlZ2FjeVJvb3RJbmxpbmVCb3g+IHsKQEAgLTkxLDggKzk0LDggQEAgcHVibGljOgog
ICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogbGluZUJyZWFrT2JqKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lQnJlYWtPYmouZ2V0KCk7IH0KLSAgICBCaWRpU3RhdHVzIGxpbmVCcmVha0JpZGlTdGF0
dXMoKSBjb25zdDsKLSAgICB2b2lkIHNldExpbmVCcmVha0luZm8oUmVuZGVyT2JqZWN0KiwgdW5z
aWduZWQgYnJlYWtQb3MsIGNvbnN0IEJpZGlTdGF0dXMmKTsKKyAgICBQQUw6OkJpZGlTdGF0dXMg
bGluZUJyZWFrQmlkaVN0YXR1cygpIGNvbnN0OworICAgIHZvaWQgc2V0TGluZUJyZWFrSW5mbyhS
ZW5kZXJPYmplY3QqLCB1bnNpZ25lZCBicmVha1BvcywgY29uc3QgUEFMOjpCaWRpU3RhdHVzJik7
CiAKICAgICB1bnNpZ25lZCBsaW5lQnJlYWtQb3MoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCcmVh
a1BvczsgfQogICAgIHZvaWQgc2V0TGluZUJyZWFrUG9zKHVuc2lnbmVkIHApIHsgbV9saW5lQnJl
YWtQb3MgPSBwOyB9CkBAIC0yMDIsNyArMjA1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBXaGVyZSB0
aGlzIGxpbmUgZW5kZWQuIFRoZSBleGFjdCBvYmplY3QgYW5kIHRoZSBwb3NpdGlvbiB3aXRoaW4g
dGhhdCBvYmplY3QgYXJlIHN0b3JlZCBzbyB0aGF0CiAgICAgLy8gd2UgY2FuIGNyZWF0ZSBhbiBM
ZWdhY3lJbmxpbmVJdGVyYXRvciBiZWdpbm5pbmcganVzdCBhZnRlciB0aGUgZW5kIG9mIHRoaXMg
bGluZS4KICAgICBXZWFrUHRyPFJlbmRlck9iamVjdD4gbV9saW5lQnJlYWtPYmo7Ci0gICAgUmVm
UHRyPEJpZGlDb250ZXh0PiBtX2xpbmVCcmVha0NvbnRleHQ7CisgICAgUmVmUHRyPFBBTDo6Qmlk
aUNvbnRleHQ+IG1fbGluZUJyZWFrQ29udGV4dDsKIAogICAgIExheW91dFVuaXQgbV9saW5lVG9w
OwogICAgIExheW91dFVuaXQgbV9saW5lQm90dG9tOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKaW5kZXggODNjODEwNDEwYWEyYWQ3YTc2MTM4OWVmYmM0YjA4NDNhYjRj
MDlkMy4uZjY1OWUxNTViOTc5Nzg2NjA5NzQ0NGFhZGU2ZjI5ZTczNGQxNGMwNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0zMDg4LDcgKzMwODgsNyBAQCBj
b25zdCBjaGFyKiBSZW5kZXJCbG9jazo6cmVuZGVyTmFtZSgpIGNvbnN0CiAKIFRleHRSdW4gUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZs
YWdzIGZsYWdzKQogewotICAgIGF1dG8gdGV4dERpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxU
UjsKKyAgICBhdXRvIHRleHREaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAg
ICBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBzdHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVy
OjpWaXN1YWw7CiAgICAgaWYgKGZsYWdzICE9IERlZmF1bHRUZXh0UnVuRmxhZ3MpIHsKICAgICAg
ICAgaWYgKGZsYWdzICYgUmVzcGVjdERpcmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKaW5kZXggYmM0YzMxMGU4YWNjNGMwYzI5OGEzMzg0M2ZhNTIwY2YyYThiMzE1
Zi4uNTY1MTg3NDIxYTJhZmEyYWRlMmM5NTQ2N2JkOTBiZWQ0OTA2MDc4NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTc5LDEwICs3OSwxMCBAQAogI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHls
ZVNjcm9sbFNuYXBQb2ludHMuaCIKLSNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiVHJhbnNmb3JtU3RhdGUuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8bWF0
aC5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHREaXJlY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAKQEAgLTM3
NzcsMTQgKzM3NzcsMTQgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNl
KExlbmd0aCYgbG9naWNhbExlZnQsIExlbmd0aCYgbG9naWNhbFJpZ2gKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSBjaGlsZC0+cGFyZW50KCk7Ci0gICAgVGV4
dERpcmVjdGlvbiBwYXJlbnREaXJlY3Rpb24gPSBwYXJlbnQtPnN0eWxlKCkuZGlyZWN0aW9uKCk7
CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHBhcmVudERpcmVjdGlvbiA9IHBhcmVudC0+c3R5bGUo
KS5kaXJlY3Rpb24oKTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzaW5nIGVuY2xvc2luZ0Jv
eCgpIHdoaWNoIGlzIHdyb25nIGZvciBhYnNvbHV0ZWx5CiAgICAgLy8gcG9zaXRpb25lZCBncmlk
IGl0ZW1zLCBhcyB0aGV5IHJlbHkgb24gdGhlIGdyaWQgYXJlYS4gU28gZm9yIGdyaWQgaXRlbXMg
aWYKICAgICAvLyBib3RoICJsZWZ0IiBhbmQgInJpZ2h0IiBwcm9wZXJ0aWVzIGFyZSAiYXV0byIs
IHdlIGNhbiBjb25zaWRlciB0aGF0IG9uZSBvZgogICAgIC8vIHRoZW0gKGRlcGVuZGluZyBvbiB0
aGUgZGlyZWN0aW9uKSBpcyBzaW1wbHkgIjAiLgogICAgIGlmIChwYXJlbnQtPmlzUmVuZGVyR3Jp
ZCgpICYmIHBhcmVudCA9PSBjaGlsZC0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgaWYg
KHBhcmVudERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChwYXJl
bnREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBsb2dp
Y2FsTGVmdC5zZXRWYWx1ZShMZW5ndGhUeXBlOjpGaXhlZCwgMCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGxvZ2ljYWxSaWdodC5zZXRWYWx1ZShMZW5ndGhUeXBlOjpGaXhlZCwgMCk7CkBA
IC0zNzkyLDcgKzM3OTIsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFu
Y2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3RoJiBsb2dpY2FsUmlnaAogICAgIH0KIAogICAg
IC8vIEZvciBvcnRob2dvbmFsIGZsb3dzIHdlIGRvbid0IGNhcmUgd2hldGhlciB0aGUgcGFyZW50
IGlzIExUUiBvciBSVEwgYmVjYXVzZSBpdCBkb2VzIG5vdCBhZmZlY3QgdGhlIHBvc2l0aW9uIGlu
IG91ciBpbmxpbmUgYXhpcy4KLSAgICBpZiAocGFyZW50RGlyZWN0aW9uID09IFRleHREaXJlY3Rp
b246OkxUUiB8fCBpc09ydGhvZ29uYWwoKmNoaWxkLCAqcGFyZW50KSkgeworICAgIGlmIChwYXJl
bnREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgfHwgaXNPcnRob2dvbmFsKCpj
aGlsZCwgKnBhcmVudCkpIHsKICAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNQb3NpdGlvbiA9IGlz
T3J0aG9nb25hbCgqY2hpbGQsICpwYXJlbnQpID8gY2hpbGQtPmxheWVyKCktPnN0YXRpY0Jsb2Nr
UG9zaXRpb24oKSAtIGNvbnRhaW5lckJsb2NrLmJvcmRlckJlZm9yZSgpIDogY2hpbGQtPmxheWVy
KCktPnN0YXRpY0lubGluZVBvc2l0aW9uKCkgLSBjb250YWluZXJCbG9jay5ib3JkZXJMb2dpY2Fs
TGVmdCgpOwogICAgICAgICBmb3IgKGF1dG8qIGN1cnJlbnQgPSBwYXJlbnQ7IGN1cnJlbnQgJiYg
Y3VycmVudCAhPSAmY29udGFpbmVyQmxvY2s7IGN1cnJlbnQgPSBjdXJyZW50LT5jb250YWluZXIo
KSkgewogICAgICAgICAgICAgaWYgKCFpczxSZW5kZXJCb3g+KCpjdXJyZW50KSkKQEAgLTM4ODEs
NyArMzg4MSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0
aChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1CiAgICAgLy8gVXNlIHRoZSBjb250
YWluZXIgYmxvY2sncyBkaXJlY3Rpb24gZXhjZXB0IHdoZW4gY2FsY3VsYXRpbmcgdGhlIHN0YXRp
YyBkaXN0YW5jZQogICAgIC8vIFRoaXMgY29uZm9ybXMgd2l0aCB0aGUgcmVmZXJlbmNlIHJlc3Vs
dHMgZm9yIGFic3Bvcy1yZXBsYWNlZC13aWR0aC1tYXJnaW4tMDAwLmh0bQogICAgIC8vIG9mIHRo
ZSBDU1MgMi4xIHRlc3Qgc3VpdGUKLSAgICBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlv
biA9IGNvbnRhaW5lckJsb2NrLnN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGly
ZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IGNvbnRhaW5lckJsb2NrLnN0eWxlKCkuZGlyZWN0
aW9uKCk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCk7CiAgICAgY29uc3QgTGF5b3V0VW5pdCBib3JkZXJzUGx1c1BhZGRpbmcgPSBib3JkZXJBbmRQ
YWRkaW5nTG9naWNhbFdpZHRoKCk7CkBAIC00MDE0LDcgKzQwMTQsNyBAQCBzdGF0aWMgdm9pZCBj
b21wdXRlTG9naWNhbExlZnRQb3NpdGlvbmVkT2Zmc2V0KExheW91dFVuaXQmIGxvZ2ljYWxMZWZ0
UG9zLCBjb25zdAogICAgICAgICBsb2dpY2FsTGVmdFBvcyArPSAoY2hpbGQtPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBjb250YWluZXJCbG9jay5ib3JkZXJMZWZ0KCkgOiBjb250YWluZXJC
bG9jay5ib3JkZXJUb3AoKSk7CiB9CiAKLXZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25l
ZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlIHdpZHRoVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0
aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNvbnRhaW5lckJsb2NrLCBUZXh0RGlyZWN0
aW9uIGNvbnRhaW5lckRpcmVjdGlvbiwKK3ZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25l
ZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlIHdpZHRoVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0
aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNvbnRhaW5lckJsb2NrLCBQQUw6OlRleHRE
aXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGgs
IExheW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIGxvZ2ljYWxMZWZ0LCBMZW5ndGggbG9n
aWNhbFJpZ2h0LCBMZW5ndGggbWFyZ2luTG9naWNhbExlZnQsIExlbmd0aCBtYXJnaW5Mb2dpY2Fs
UmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzKSBjb25zdApAQCAt
NDA3OCw3ICs0MDc4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNh
bFdpZHRoVXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndGggbG8KICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgZGly
ZWN0aW9uIHJhdGhlciB0aGFuIHRoZSBwYXJlbnQgYmxvY2sncwogICAgICAgICAgICAgICAgIC8v
IHBlciBDU1MgMi4xIHJlZmVyZW5jZSB0ZXN0IGFic3Bvcy1ub24tcmVwbGFjZWQtd2lkdGgtbWFy
Z2luLTAwMC4KLSAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyRGlyZWN0aW9uID09IFRleHRE
aXJlY3Rpb246OkxUUikgeworICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJEaXJlY3Rpb24g
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsKICAgICAgICAgICAgICAgICAgICAgbWFyZ2lu
TG9naWNhbExlZnRWYWx1ZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxvZ2ljYWxS
aWdodFZhbHVlID0gYXZhaWxhYmxlU3BhY2U7IC8vIHdpbGwgYmUgbmVnYXRpdmUKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewpAQCAtNDEwMSw3ICs0MTAxLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNv
bXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5n
dGggbG8KIAogICAgICAgICAgICAgLy8gVXNlIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgZGlyZWN0
aW9uIHJhdGhlciB0aGFuIHRoZSBwYXJlbnQgYmxvY2sncwogICAgICAgICAgICAgLy8gcGVyIENT
UyAyLjEgcmVmZXJlbmNlIHRlc3QgYWJzcG9zLW5vbi1yZXBsYWNlZC13aWR0aC1tYXJnaW4tMDAw
LgotICAgICAgICAgICAgaWYgKCFpc09ydGhvZ29uYWwoKnRoaXMsIGNvbnRhaW5lckJsb2NrKSAm
JiBjb250YWluZXJEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgICAgICAgICAg
aWYgKCFpc09ydGhvZ29uYWwoKnRoaXMsIGNvbnRhaW5lckJsb2NrKSAmJiBjb250YWluZXJEaXJl
Y3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAgICAgICAgbG9naWNh
bExlZnRWYWx1ZSA9IChhdmFpbGFibGVTcGFjZSArIGxvZ2ljYWxMZWZ0VmFsdWUpIC0gbWFyZ2lu
TG9naWNhbExlZnRWYWx1ZSAtIG1hcmdpbkxvZ2ljYWxSaWdodFZhbHVlOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKQEAgLTQyMzEsNyArNDIzMSw3IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVCbG9j
a1N0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNhbFRvcCwgTGVuZ3RoJiBsb2dpY2FsQm90dG9t
CiAKICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIFJUTCB0aGVuIHdlIG5lZWQgdG8gZmxpcCB0aGUg
Y29vcmRpbmF0ZSBieSBzZXR0aW5nIHRoZSBsb2dpY2FsIGJvdHRvbSBpbnN0ZWFkIG9mIHRoZSBs
b2dpY2FsIHRvcC4gVGhhdCBvbmx5IG5lZWRzCiAgICAgLy8gdG8gYmUgZG9uZSBpbiBjYXNlIG9m
IG9ydGhvZ29uYWwgd3JpdGluZyBtb2RlcywgZm9yIGhvcml6b250YWwgb25lcyB0aGUgdGV4dCBk
aXJlY3Rpb24gb2YgdGhlIHBhcmVudCBkb2VzIG5vdCBhZmZlY3QgdGhlIGJsb2NrIHBvc2l0aW9u
LgotICAgIGlmIChwYXJlbnQtPnN0eWxlKCkuZGlyZWN0aW9uKCkgIT0gVGV4dERpcmVjdGlvbjo6
TFRSICYmIGlzT3J0aG9nb25hbCgqY2hpbGQsICpwYXJlbnQpKQorICAgIGlmIChwYXJlbnQtPnN0
eWxlKCkuZGlyZWN0aW9uKCkgIT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgJiYgaXNPcnRob2dv
bmFsKCpjaGlsZCwgKnBhcmVudCkpCiAgICAgICAgIGxvZ2ljYWxCb3R0b20uc2V0VmFsdWUoTGVu
Z3RoVHlwZTo6Rml4ZWQsIHN0YXRpY0xvZ2ljYWxUb3ApOwogICAgIGVsc2UKICAgICAgICAgbG9n
aWNhbFRvcC5zZXRWYWx1ZShMZW5ndGhUeXBlOjpGaXhlZCwgc3RhdGljTG9naWNhbFRvcCk7CkBA
IC00NTM2LDcgKzQ1MzYsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dp
Y2FsV2lkdGhSZXBsYWNlZChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZQogCiAgICAgLy8gVG8g
bWF0Y2ggV2luSUUsIGluIHF1aXJrcyBtb2RlIHVzZSB0aGUgcGFyZW50J3MgJ2RpcmVjdGlvbicg
cHJvcGVydHkKICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBjb250YWluZXIgYmxvY2sncy4KLSAgICBU
ZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IGNvbnRhaW5lckJsb2NrLnN0eWxlKCku
ZGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9
IGNvbnRhaW5lckJsb2NrLnN0eWxlKCkuZGlyZWN0aW9uKCk7CiAKICAgICAvLyBWYXJpYWJsZXMg
dG8gc29sdmUuCiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpOwpAQCAtNDYwMiw3ICs0NjAyLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlv
bmVkTG9naWNhbFdpZHRoUmVwbGFjZWQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWUKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFVzZSB0aGUgY29udGFpbmluZyBibG9jaydzIGRp
cmVjdGlvbiByYXRoZXIgdGhhbiB0aGUgcGFyZW50IGJsb2NrJ3MKICAgICAgICAgICAgIC8vIHBl
ciBDU1MgMi4xIHJlZmVyZW5jZSB0ZXN0IGFic3Bvcy1yZXBsYWNlZC13aWR0aC1tYXJnaW4tMDAw
LgotICAgICAgICAgICAgaWYgKGNvbnRhaW5lckRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpM
VFIpIHsKKyAgICAgICAgICAgIGlmIChjb250YWluZXJEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIpIHsKICAgICAgICAgICAgICAgICBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0g
MDsKICAgICAgICAgICAgICAgICBtYXJnaW5Mb2dpY2FsUmlnaHRBbGlhcyA9IGRpZmZlcmVuY2U7
IC8vIHdpbGwgYmUgbmVnYXRpdmUKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00NjUwLDcgKzQ2
NTAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBs
YWNlZChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZQogICAgICAgICBsb2dpY2FsUmlnaHRWYWx1
ZSA9IHZhbHVlRm9yTGVuZ3RoKGxvZ2ljYWxSaWdodCwgY29udGFpbmVyTG9naWNhbFdpZHRoKTsK
ICAgICAgICAgbG9naWNhbExlZnRWYWx1ZSA9IHZhbHVlRm9yTGVuZ3RoKGxvZ2ljYWxMZWZ0LCBj
b250YWluZXJMb2dpY2FsV2lkdGgpOwogICAgICAgICAvLyBJZiB0aGUgY29udGFpbmluZyBibG9j
ayBpcyByaWdodC10by1sZWZ0LCB0aGVuIHB1c2ggdGhlIGxlZnQgcG9zaXRpb24gYXMgZmFyIHRv
IHRoZSByaWdodCBhcyBwb3NzaWJsZQotICAgICAgICBpZiAoY29udGFpbmVyRGlyZWN0aW9uID09
IFRleHREaXJlY3Rpb246OlJUTCkgeworICAgICAgICBpZiAoY29udGFpbmVyRGlyZWN0aW9uID09
IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKSB7CiAgICAgICAgICAgICBpbnQgdG90YWxMb2dpY2Fs
V2lkdGggPSBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCArIGxvZ2ljYWxMZWZ0VmFsdWUgKyBsb2dp
Y2FsUmlnaHRWYWx1ZSArICBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzICsgbWFyZ2luTG9naWNhbFJp
Z2h0QWxpYXM7CiAgICAgICAgICAgICBsb2dpY2FsTGVmdFZhbHVlID0gY29udGFpbmVyTG9naWNh
bFdpZHRoIC0gKHRvdGFsTG9naWNhbFdpZHRoIC0gbG9naWNhbExlZnRWYWx1ZSk7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBiMjI1YTdiMjZlNjM0MGVj
MDY0NTM1MWUxYzg3OTBlODA0MDA0NjViLi45YjNhNGUwZGQzMzE5MTg2ODEyMTJiOGQ1OTEwYzVh
YTkyNTFkZjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC03NTcsNyAr
NzU3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHJlcGFpbnRMYXllclJlY3RzRm9ySW1hZ2UoV3Jh
cHBlZEltYWdlUHRyLCBjb25zdCBGaWxsTGF5ZXImIGxheWVycywgYm9vbCBkcmF3aW5nQmFja2dy
b3VuZCk7CiAKICAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodChMb2dpY2Fs
RXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdDsKLSAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVk
TG9naWNhbFdpZHRoVXNpbmcoU2l6ZVR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgsIGNvbnN0IFJl
bmRlckJveE1vZGVsT2JqZWN0JiBjb250YWluZXJCbG9jaywgVGV4dERpcmVjdGlvbiBjb250YWlu
ZXJEaXJlY3Rpb24sCisgICAgdm9pZCBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5n
KFNpemVUeXBlLCBMZW5ndGggbG9naWNhbFdpZHRoLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVj
dCYgY29udGFpbmVyQmxvY2ssIFBBTDo6VGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQg
Y29udGFpbmVyTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGJvcmRlcnNQbHVzUGFkZGluZywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIGxvZ2ljYWxM
ZWZ0LCBMZW5ndGggbG9naWNhbFJpZ2h0LCBMZW5ndGggbWFyZ2luTG9naWNhbExlZnQsIExlbmd0
aCBtYXJnaW5Mb2dpY2FsUmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94
LmNwcAppbmRleCA3ZTE4ZmYwYTZlNWZlYTQyZDYzNmE0OGUxMTA3MmM2MzYzMjc0YjhiLi5lYTM0
MTg4NjQ3ZTM5ZGNjZjJiODAxY2QzYWRhYzU4NzEwZGRlZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcApA
QCAtMTA0Myw3ICsxMDQzLDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmFw
cGx5TGluZUNsYW1wKEZsZXhCb3hJdGVyYXRvciYgaXRlcmF0b3IsIGJvb2wKICAgICAgICAgY2hp
bGQtPmxheW91dElmTmVlZGVkKCk7CiAKICAgICAgICAgLy8gRklYTUU6IEZvciBub3cgZG9uJ3Qg
c3VwcG9ydCBSVEwuCi0gICAgICAgIGlmIChzdHlsZSgpLmRpcmVjdGlvbigpICE9IFRleHREaXJl
Y3Rpb246OkxUUikKKyAgICAgICAgaWYgKHN0eWxlKCkuZGlyZWN0aW9uKCkgIT0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBHZXQg
dGhlIGxhc3QgbGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZyYWdtZW50ZWRGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFn
bWVudGVkRmxvdy5jcHAKaW5kZXggMjY1Yjg5NGYzM2YyYTEzYTQyY2RkODUwMjg5YzY4ODBjZjk0
YWU5Yy4uZGM4MTg1OTc5NzIyMGEzMzEwNGM5MjcwYmRkZTNjNDZlOTUyMDU0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCkBAIC0x
NjcsNyArMTY3LDcgQEAgdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6dXBkYXRlTG9naWNhbFdp
ZHRoKCkKICAgICAvLyBJZiB0aGUgZnJhZ21lbnRzIGhhdmUgbm9uLXVuaWZvcm0gbG9naWNhbCB3
aWR0aHMsIHRoZW4gaW5zZXJ0IGluc2V0IGluZm9ybWF0aW9uIGZvciB0aGUgUmVuZGVyRnJhZ21l
bnRlZEZsb3cuCiAgICAgZm9yIChhdXRvJiBmcmFnbWVudCA6IG1fZnJhZ21lbnRMaXN0KSB7CiAg
ICAgICAgIExheW91dFVuaXQgZnJhZ21lbnRMb2dpY2FsV2lkdGggPSBmcmFnbWVudC0+cGFnZUxv
Z2ljYWxXaWR0aCgpOwotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gc3R5bGUoKS5k
aXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyAwX2x1IDogbG9naWNhbFdpZHRoIC0g
ZnJhZ21lbnRMb2dpY2FsV2lkdGg7CisgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnQgPSBz
dHlsZSgpLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxv
Z2ljYWxXaWR0aCAtIGZyYWdtZW50TG9naWNhbFdpZHRoOwogICAgICAgICBmcmFnbWVudC0+c2V0
UmVuZGVyQm94RnJhZ21lbnRJbmZvKHRoaXMsIGxvZ2ljYWxMZWZ0LCBmcmFnbWVudExvZ2ljYWxX
aWR0aCwgZmFsc2UpOwogICAgIH0KIH0KQEAgLTg0Miw3ICs4NDIsNyBAQCB2b2lkIFJlbmRlckZy
YWdtZW50ZWRGbG93Ojp1cGRhdGVGcmFnbWVudHNGcmFnbWVudGVkRmxvd1BvcnRpb25SZWN0KCkK
ICAgICAgICAgTGF5b3V0VW5pdCBmcmFnbWVudExvZ2ljYWxXaWR0aCA9IGZyYWdtZW50LT5wYWdl
TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgZnJhZ21lbnRMb2dpY2FsSGVpZ2h0
ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oUmVuZGVyRnJhZ21lbnRlZEZsb3c6Om1heExvZ2ljYWxI
ZWlnaHQoKSAtIGxvZ2ljYWxIZWlnaHQsIGZyYWdtZW50LT5sb2dpY2FsSGVpZ2h0T2ZBbGxGcmFn
bWVudGVkRmxvd0NvbnRlbnQoKSk7CiAKLSAgICAgICAgTGF5b3V0UmVjdCBmcmFnbWVudFJlY3Qo
c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyAwX2x1IDogbG9naWNh
bFdpZHRoKCkgLSBmcmFnbWVudExvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCwgZnJhZ21lbnRM
b2dpY2FsV2lkdGgsIGZyYWdtZW50TG9naWNhbEhlaWdodCk7CisgICAgICAgIExheW91dFJlY3Qg
ZnJhZ21lbnRSZWN0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFIgPyAwX2x1IDogbG9naWNhbFdpZHRoKCkgLSBmcmFnbWVudExvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCwgZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGZyYWdtZW50TG9naWNhbEhlaWdodCk7CiAK
ICAgICAgICAgZnJhZ21lbnQtPnNldEZyYWdtZW50ZWRGbG93UG9ydGlvblJlY3QoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGZyYWdtZW50UmVjdCA6IGZyYWdtZW50UmVjdC50cmFuc3Bvc2Vk
UmVjdCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
TW9kZWxPYmplY3QuY3BwCmluZGV4IGYyOTUwNGEyZjMyZTg1YWQ1ODMyN2Y2NmEzNGIxOTEyOGI2
ZDY4NzguLjlhNGYzOTkzNmEzOWJhYmE2OTUwNDQyN2EyYmI5NmY5MWY1Y2ZhMzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAK
QEAgLTE4Miw3ICsxODIsNyBAQCBib29sIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnNob3VsZFBs
YWNlVmVydGljYWxTY3JvbGxiYXJPbkxlZnQoKSBjb25zdAogICAgIGNhc2UgVXNlckludGVyZmFj
ZURpcmVjdGlvblBvbGljeTo6Q29udGVudDoKICAgICAgICAgcmV0dXJuIHN0eWxlKCkuc2hvdWxk
UGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uTGVmdCgpOwogICAgIGNhc2UgVXNlckludGVyZmFjZURp
cmVjdGlvblBvbGljeTo6U3lzdGVtOgotICAgICAgICByZXR1cm4gc2V0dGluZ3MoKS5zeXN0ZW1M
YXlvdXREaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgIHJldHVybiBz
ZXR0aW5ncygpLnN5c3RlbUxheW91dERpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
UlRMOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gc3R5bGUo
KS5zaG91bGRQbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25MZWZ0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAppbmRleCBhZTI4MjJjNmVkZWE2OTZjMDhkNmIz
OTE1NTVmN2M1MjM2YjY0MmY4Li5mZTM3NzNkY2FiZGY1NWUxNzRiZjEzMDhhZmU1ZDk1ZTUwYzY0
MWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKQEAg
LTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKLSNpbmNsdWRl
ICJVbmljb2RlQmlkaS5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L1VuaWNvZGVCaWRpLmg+CiAjaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTc3LDcgKzc3LDcgQEAgUmVuZGVy
U3R5bGUgUmVuZGVyTGlzdEl0ZW06OmNvbXB1dGVNYXJrZXJTdHlsZSgpIGNvbnN0CiAgICAgZm9u
dERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljU3BhY2luZyhGb250VmFyaWFudE51bWVyaWNT
cGFjaW5nOjpUYWJ1bGFyTnVtYmVycyk7CiAgICAgbWFya2VyU3R5bGUuc2V0Rm9udERlc2NyaXB0
aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiAgICAgbWFya2VyU3R5bGUuZm9udENhc2Nh
ZGUoKS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwotICAgIG1hcmtlclN0eWxl
LnNldFVuaWNvZGVCaWRpKEVVbmljb2RlQmlkaTo6SXNvbGF0ZSk7CisgICAgbWFya2VyU3R5bGUu
c2V0VW5pY29kZUJpZGkoUEFMOjpFVW5pY29kZUJpZGk6Oklzb2xhdGUpOwogICAgIG1hcmtlclN0
eWxlLnNldFdoaXRlU3BhY2UoV2hpdGVTcGFjZTo6UHJlKTsKICAgICBtYXJrZXJTdHlsZS5zZXRU
ZXh0VHJhbnNmb3JtKFRleHRUcmFuc2Zvcm06Ok5vbmUpOwogICAgIHJldHVybiBtYXJrZXJTdHls
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAppbmRleCBiMTM0
NmExMDViNzMyOGU1OGY1ZmJhN2U5ODA5MjZjYTE5OTgxZTkwLi5lNGQwMzRmNTBjODllNzVjMzM3
NWI0YjkyMzQ5MDIxMzliNTQxZDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1hcnF1ZWUuY3BwCkBAIC0xMDMsMTMgKzEwMywxMyBAQCBNYXJxdWVlRGlyZWN0aW9uIFJlbmRl
ck1hcnF1ZWU6OmRpcmVjdGlvbigpIGNvbnN0CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGhlIENT
UzMgImF1dG8iIHZhbHVlIGZvciBkZXRlcm1pbmluZyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBtYXJx
dWVlLgogICAgIC8vIEZvciBub3cganVzdCBtYXAgTWFycXVlZURpcmVjdGlvbjo6QXV0byB0byBN
YXJxdWVlRGlyZWN0aW9uOjpCYWNrd2FyZAogICAgIE1hcnF1ZWVEaXJlY3Rpb24gcmVzdWx0ID0g
bV9sYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVEaXJlY3Rpb24oKTsKLSAgICBUZXh0
RGlyZWN0aW9uIGRpciA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5kaXJlY3Rpb24oKTsK
KyAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyID0gbV9sYXllci0+cmVuZGVyZXIoKS5zdHlsZSgp
LmRpcmVjdGlvbigpOwogICAgIGlmIChyZXN1bHQgPT0gTWFycXVlZURpcmVjdGlvbjo6QXV0bykK
ICAgICAgICAgcmVzdWx0ID0gTWFycXVlZURpcmVjdGlvbjo6QmFja3dhcmQ7CiAgICAgaWYgKHJl
c3VsdCA9PSBNYXJxdWVlRGlyZWN0aW9uOjpGb3J3YXJkKQotICAgICAgICByZXN1bHQgPSAoZGly
ID09IFRleHREaXJlY3Rpb246OkxUUikgPyBNYXJxdWVlRGlyZWN0aW9uOjpSaWdodCA6IE1hcnF1
ZWVEaXJlY3Rpb246OkxlZnQ7CisgICAgICAgIHJlc3VsdCA9IChkaXIgPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIpID8gTWFycXVlZURpcmVjdGlvbjo6UmlnaHQgOiBNYXJxdWVlRGlyZWN0aW9u
OjpMZWZ0OwogICAgIGlmIChyZXN1bHQgPT0gTWFycXVlZURpcmVjdGlvbjo6QmFja3dhcmQpCi0g
ICAgICAgIHJlc3VsdCA9IChkaXIgPT0gVGV4dERpcmVjdGlvbjo6TFRSKSA/IE1hcnF1ZWVEaXJl
Y3Rpb246OkxlZnQgOiBNYXJxdWVlRGlyZWN0aW9uOjpSaWdodDsKKyAgICAgICAgcmVzdWx0ID0g
KGRpciA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgPyBNYXJxdWVlRGlyZWN0aW9uOjpMZWZ0
IDogTWFycXVlZURpcmVjdGlvbjo6UmlnaHQ7CiAgICAgCiAgICAgLy8gTm93IHdlIGhhdmUgdGhl
IHJlYWwgZGlyZWN0aW9uLiAgTmV4dCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGluY3JlbWVudCBp
cyBuZWdhdGl2ZS4KICAgICAvLyBJZiBzbywgdGhlbiB3ZSByZXZlcnNlIHRoZSBkaXJlY3Rpb24u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAppbmRleCA0MDU2
MWYxZDFmZmM0YzIzMDY0YTQ1M2E3OTUxMDRiZjJhYjk1MjI3Li4zNzUzMjVkOTI4ZWU1OTNkODJi
ZDkyODI4OWM1N2MzMDQyODJkZjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZW51TGlzdC5jcHAKQEAgLTEzMiwxNiArMTMyLDE2IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6
OmFkanVzdElubmVyU3R5bGUoKQogICAgICAgICAvLyBJdGVtcyBpbiB0aGUgcG9wdXAgd2lsbCBu
b3QgcmVzcGVjdCB0aGUgQ1NTIHRleHQtYWxpZ24gYW5kIGRpcmVjdGlvbiBwcm9wZXJ0aWVzLAog
ICAgICAgICAvLyBzbyB3ZSBtdXN0IGFkanVzdCBvdXIgb3duIHN0eWxlIHRvIG1hdGNoLgogICAg
ICAgICBpbm5lclN0eWxlLnNldFRleHRBbGlnbihUZXh0QWxpZ25Nb2RlOjpMZWZ0KTsKLSAgICAg
ICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSAobV9idXR0b25UZXh0ICYmIG1fYnV0dG9uVGV4
dC0+dGV4dCgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCkgPT0gVV9SSUdIVF9UT19MRUZUKSA/
IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgUEFMOjpU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IChtX2J1dHRvblRleHQgJiYgbV9idXR0b25UZXh0LT50
ZXh0KCkuZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKSA9PSBVX1JJR0hUX1RPX0xFRlQpID8gUEFM
OjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAg
aW5uZXJTdHlsZS5zZXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLnNlbGVjdEl0
ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdyaXRpbmdEaXJlY3Rpb24oKSkgewotICAgICAgICBpbm5l
clN0eWxlLnNldFRleHRBbGlnbihzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246
OkxUUiA/IFRleHRBbGlnbk1vZGU6OkxlZnQgOiBUZXh0QWxpZ25Nb2RlOjpSaWdodCk7Ci0gICAg
ICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwotICAgICAgICBFVW5pY29kZUJpZGkgdW5pY29k
ZUJpZGk7CisgICAgICAgIGlubmVyU3R5bGUuc2V0VGV4dEFsaWduKHN0eWxlKCkuZGlyZWN0aW9u
KCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBUZXh0QWxpZ25Nb2RlOjpMZWZ0IDogVGV4
dEFsaWduTW9kZTo6UmlnaHQpOworICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9u
OworICAgICAgICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaTsKICAgICAgICAgaWYgKG11
bHRpcGxlKCkgJiYgc2VsZWN0ZWRPcHRpb25Db3VudCgqdGhpcykgIT0gMSkgewotICAgICAgICAg
ICAgZGlyZWN0aW9uID0gKG1fYnV0dG9uVGV4dCAmJiBtX2J1dHRvblRleHQtPnRleHQoKS5kZWZh
dWx0V3JpdGluZ0RpcmVjdGlvbigpID09IFVfUklHSFRfVE9fTEVGVCkgPyBUZXh0RGlyZWN0aW9u
OjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7Ci0gICAgICAgICAgICB1bmljb2RlQmlkaSA9IFVC
Tm9ybWFsOworICAgICAgICAgICAgZGlyZWN0aW9uID0gKG1fYnV0dG9uVGV4dCAmJiBtX2J1dHRv
blRleHQtPnRleHQoKS5kZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigpID09IFVfUklHSFRfVE9fTEVG
VCkgPyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwor
ICAgICAgICAgICAgdW5pY29kZUJpZGkgPSBQQUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWw7CiAg
ICAgICAgIH0gZWxzZSBpZiAobV9vcHRpb25TdHlsZSkgewogICAgICAgICAgICAgZGlyZWN0aW9u
ID0gbV9vcHRpb25TdHlsZS0+ZGlyZWN0aW9uKCk7CiAgICAgICAgICAgICB1bmljb2RlQmlkaSA9
IG1fb3B0aW9uU3R5bGUtPnVuaWNvZGVCaWRpKCk7CkBAIC01NzQsNyArNTc0LDcgQEAgY29uc3Qg
aW50IGVuZE9mTGluZVBhZGRpbmcgPSAyOwogCiBMYXlvdXRVbml0IFJlbmRlck1lbnVMaXN0Ojpj
bGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0CiB7Ci0gICAgaWYgKChzdHlsZSgpLmVmZmVjdGl2ZUFw
cGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgfHwgc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNl
KCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSAmJiBzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHRE
aXJlY3Rpb246OlJUTCkgeworICAgIGlmICgoc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkg
PT0gTWVudWxpc3RQYXJ0IHx8IHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0QnV0dG9uUGFydCkgJiYgc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rp
b246OlJUTCkgewogICAgICAgICAvLyBGb3IgdGhlc2UgYXBwZWFyYW5jZSB2YWx1ZXMsIHRoZSB0
aGVtZSBhcHBsaWVzIHBhZGRpbmcgdG8gbGVhdmUgcm9vbSBmb3IgdGhlCiAgICAgICAgIC8vIGRy
b3AtZG93biBidXR0b24uIEJ1dCBsZWF2aW5nIHJvb20gZm9yIHRoZSBidXR0b24gaW5zaWRlIHRo
ZSBwb3B1cCBtZW51IGl0c2VsZgogICAgICAgICAvLyBsb29rcyBzdHJhbmdlLCBzbyB3ZSByZXR1
cm4gYSBzbWFsbCBkZWZhdWx0IHBhZGRpbmcgdG8gYXZvaWQgaGF2aW5nIGEgbGFyZ2UgZW1wdHkK
QEAgLTU4OCw3ICs1ODgsNyBAQCBMYXlvdXRVbml0IFJlbmRlck1lbnVMaXN0OjpjbGllbnRQYWRk
aW5nTGVmdCgpIGNvbnN0CiAKIExheW91dFVuaXQgUmVuZGVyTWVudUxpc3Q6OmNsaWVudFBhZGRp
bmdSaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKChzdHlsZSgpLmVmZmVjdGl2ZUFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQgfHwgc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RCdXR0b25QYXJ0KSAmJiBzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246
OkxUUikKKyAgICBpZiAoKHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
UGFydCB8fCBzdHlsZSgpLmVmZmVjdGl2ZUFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBh
cnQpICYmIHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAg
ICAgICAgIHJldHVybiBlbmRPZkxpbmVQYWRkaW5nOwogCiAgICAgcmV0dXJuIHBhZGRpbmdSaWdo
dCgpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nUmlnaHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggYmZhZmJlNDdhNzkzZGM0ZWM4ZTY2ODgyM2NiNjVl
Y2UzODhkN2E2NS4uNmZkZTU3NTAwMzA1MDg1NTNlYTQzZTAwNWYxMWRhOWUxMzdhNjliMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTIzMjAsNyArMjMy
MCw3IEBAIGF1dG8gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0cmllc0ludGVy
bmFsKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICAgICAgaWYgKGdlb21ldHJpZXNbal0u
YmVoYXZpb3IoKSA9PSBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6VXNlSW5kaXZpZHVhbFF1
YWRzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGF1dG8mIHByZXZpb3VzUmVjdCA9
IGdlb21ldHJpZXNbaiAtIDFdOwotICAgICAgICBib29sIHByZXZpb3VzUmVjdE1heU5vdFJlYWNo
UmlnaHRFZGdlID0gKHByZXZpb3VzUmVjdC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpM
VFIgJiYgcHJldmlvdXNSZWN0LmNvbnRhaW5zRW5kKCkpIHx8IChwcmV2aW91c1JlY3QuZGlyZWN0
aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMICYmIHByZXZpb3VzUmVjdC5jb250YWluc1N0YXJ0
KCkpOworICAgICAgICBib29sIHByZXZpb3VzUmVjdE1heU5vdFJlYWNoUmlnaHRFZGdlID0gKHBy
ZXZpb3VzUmVjdC5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiAmJiBwcmV2
aW91c1JlY3QuY29udGFpbnNFbmQoKSkgfHwgKHByZXZpb3VzUmVjdC5kaXJlY3Rpb24oKSA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OlJUTCAmJiBwcmV2aW91c1JlY3QuY29udGFpbnNTdGFydCgpKTsK
ICAgICAgICAgaWYgKHByZXZpb3VzUmVjdE1heU5vdFJlYWNoUmlnaHRFZGdlKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGludCBhZGp1c3RlZFdpZHRoID0gZ2VvbWV0cmllc1tqXS5s
b2dpY2FsTGVmdCgpIC0gcHJldmlvdXNSZWN0LmxvZ2ljYWxMZWZ0KCk7CkBAIC0yMzM3LDEwICsy
MzM3LDEwIEBAIGF1dG8gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uR2VvbWV0cmllc0lu
dGVybmFsKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBpZiAoc2VsZWN0aW9uR2VvbWV0cnkuYmVoYXZpb3IoKSA9PSBTZWxlY3Rpb25SZW5k
ZXJpbmdCZWhhdmlvcjo6VXNlSW5kaXZpZHVhbFF1YWRzKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmIChzZWxlY3Rpb25HZW9tZXRyeS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0
aW9uOjpSVEwgJiYgc2VsZWN0aW9uR2VvbWV0cnkuaXNGaXJzdE9uTGluZSgpKSB7CisgICAgICAg
IGlmIChzZWxlY3Rpb25HZW9tZXRyeS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246
OlJUTCAmJiBzZWxlY3Rpb25HZW9tZXRyeS5pc0ZpcnN0T25MaW5lKCkpIHsKICAgICAgICAgICAg
IHNlbGVjdGlvbkdlb21ldHJ5LnNldExvZ2ljYWxXaWR0aChzZWxlY3Rpb25HZW9tZXRyeS5sb2dp
Y2FsV2lkdGgoKSArIHNlbGVjdGlvbkdlb21ldHJ5LmxvZ2ljYWxMZWZ0KCkgLSBzZWxlY3Rpb25H
ZW9tZXRyeS5taW5YKCkpOwogICAgICAgICAgICAgc2VsZWN0aW9uR2VvbWV0cnkuc2V0TG9naWNh
bExlZnQoc2VsZWN0aW9uR2VvbWV0cnkubWluWCgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChzZWxl
Y3Rpb25HZW9tZXRyeS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgJiYgc2VsZWN0
aW9uR2VvbWV0cnkuaXNMYXN0T25MaW5lKCkpCisgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9u
R2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgJiYgc2VsZWN0
aW9uR2VvbWV0cnkuaXNMYXN0T25MaW5lKCkpCiAgICAgICAgICAgICBzZWxlY3Rpb25HZW9tZXRy
eS5zZXRMb2dpY2FsV2lkdGgoc2VsZWN0aW9uR2VvbWV0cnkubWF4WCgpIC0gc2VsZWN0aW9uR2Vv
bWV0cnkubG9naWNhbExlZnQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW0KaW5kZXggZDc1ZjU5ZmVjNzU4Yjg0MzBlYjRjNzBkMGJkMTM3MTVm
M2Y0MGVmMi4uYTZlZWMxNzEzZjA1OThiZWE3YWE5MjgyYWUyOWMzYWViYjAwNjZiZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtNzA1LDcgKzcwNSw3
IEBAIExlbmd0aEJveCBSZW5kZXJUaGVtZUlPUzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3goY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zCiAgICAgfQogCiAgICAgaWYgKHN0eWxlLmVmZmVj
dGl2ZUFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpIHsKLSAgICAgICAgaWYgKHN0
eWxlLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICAgICAgaWYgKHN0eWxl
LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAgICAgICAgcmV0
dXJuIHsgMCwgMCwgMCwgc3RhdGljX2Nhc3Q8aW50PihwYWRkaW5nICsgc3R5bGUuYm9yZGVyVG9w
V2lkdGgoKSkgfTsKICAgICAgICAgcmV0dXJuIHsgMCwgc3RhdGljX2Nhc3Q8aW50PihwYWRkaW5n
ICsgc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSksIDAsIDAgfTsKICAgICB9CkBAIC04NDcsNyArODQ3
LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25z
KGNvbnN0IFJlbmRlckJveCYgYm94LCBjb25zdAogI2VuZGlmCiAKICAgICBhdXRvJiBzdHlsZSA9
IGJveC5zdHlsZSgpOwotICAgIGJvb2wgaXNSVEwgPSBzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0
RGlyZWN0aW9uOjpSVEw7CisgICAgYm9vbCBpc1JUTCA9IHN0eWxlLmRpcmVjdGlvbigpID09IFBB
TDo6VGV4dERpcmVjdGlvbjo6UlRMOwogICAgIGZsb2F0IGJvcmRlclRvcFdpZHRoID0gc3R5bGUu
Ym9yZGVyVG9wV2lkdGgoKTsKICAgICBGbG9hdFJlY3QgY2xpcChyZWN0LngoKSArIHN0eWxlLmJv
cmRlckxlZnRXaWR0aCgpLCByZWN0LnkoKSArIHN0eWxlLmJvcmRlclRvcFdpZHRoKCksIHJlY3Qu
d2lkdGgoKSAtIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpIC0gc3R5bGUuYm9yZGVyUmlnaHRXaWR0
aCgpLCByZWN0LmhlaWdodCgpIC0gc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSAtIHN0eWxlLmJvcmRl
ckJvdHRvbVdpZHRoKCkpOwogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwYWludEluZm8u
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCmluZGV4IDk2NDg1NjEwYWZhMDJjMWNlYjUxOGE1MmViMzIwMTcxMWI5
OGU2MDcuLjExMTM3MTYwOGEwM2Q2NTQ0ZTdjNWVlZTJjY2MxODMwZDdlNDc2NDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTE1NDIsNyArMTU0Miw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoY29u
c3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQCiAKIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGJv
b2wgaXNSVEwgPSByZW5kZXJlci5zdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246
OlJUTDsKKyAgICBib29sIGlzUlRMID0gcmVuZGVyZXIuc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAgICBJbnRSZWN0IGJvdW5kcyA9IEludFJlY3QocmVj
dC54KCkgKyByZW5kZXJlci5zdHlsZSgpLmJvcmRlckxlZnRXaWR0aCgpLAogICAgICAgICByZWN0
LnkoKSArIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyVG9wV2lkdGgoKSwKICAgICAgICAgcmVjdC53
aWR0aCgpIC0gcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSAtIHJlbmRlcmVyLnN0
eWxlKCkuYm9yZGVyUmlnaHRXaWR0aCgpLApAQCAtMTY1MCw3ICsxNjUwLDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEVsZW1lbnQqIGUpIGMKIExlbmd0aEJveCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTZXR0aW5ncyYpIGNvbnN0
CiB7CiAgICAgaWYgKHN0eWxlLmVmZmVjdGl2ZUFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQp
IHsKLSAgICAgICAgY29uc3QgaW50KiBwYWRkaW5nID0gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRy
b2xTaXplRm9yRm9udChzdHlsZSksIHN0eWxlLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246
OlJUTCk7CisgICAgICAgIGNvbnN0IGludCogcGFkZGluZyA9IHBvcHVwQnV0dG9uUGFkZGluZyhj
b250cm9sU2l6ZUZvckZvbnQoc3R5bGUpLCBzdHlsZS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OlJUTCk7CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PGludD4ocGFkZGlu
Z1t0b3BQYWRkaW5nXSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSksCiAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KHBhZGRpbmdbcmlnaHRQYWRkaW5nXSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20o
KSksCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHBhZGRpbmdbYm90dG9tUGFkZGluZ10g
KiBzdHlsZS5lZmZlY3RpdmVab29tKCkpLApAQCAtMTY2MSw3ICsxNjYxLDcgQEAgTGVuZ3RoQm94
IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0JveChjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnMKICAgICAgICAgZmxvYXQgYXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRo
ICogKHN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpIC8gYmFzZUZvbnRTaXplKTsKICAgICAg
ICAgZmxvYXQgcmlnaHRQYWRkaW5nID0gY2VpbGYoYXJyb3dXaWR0aCArIChhcnJvd1BhZGRpbmdC
ZWZvcmUgKyBhcnJvd1BhZGRpbmdBZnRlciArIHBhZGRpbmdCZWZvcmVTZXBhcmF0b3IpICogc3R5
bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgZmxvYXQgbGVmdFBhZGRpbmcgPSBzdHlsZWRQ
b3B1cFBhZGRpbmdMZWZ0ICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBpZiAoc3R5
bGUuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgICAgICBpZiAoc3R5bGUu
ZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAgICBzdGQ6
OnN3YXAocmlnaHRQYWRkaW5nLCBsZWZ0UGFkZGluZyk7CiAgICAgICAgIHJldHVybiB7IHN0YXRp
Y19jYXN0PGludD4oc3R5bGVkUG9wdXBQYWRkaW5nVG9wICogc3R5bGUuZWZmZWN0aXZlWm9vbSgp
KSwKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocmlnaHRQYWRkaW5nKSwKQEAgLTE3MTIs
NyArMTcxMiw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFBvcHVwQnV0dG9uQ2VsbFN0YXRl
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgSW50U2l6CiAgICAgLy8gU2V0IHRoZSBjb250
cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUgcGFpbnRpbmcgaW50by4KICAg
ICBzZXRDb250cm9sU2l6ZShwb3B1cEJ1dHRvbiwgcG9wdXBCdXR0b25TaXplcygpLCBidXR0b25T
aXplLCBvLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKIAotICAgIHBvcHVwQnV0dG9uLnVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gPSBvLnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERp
cmVjdGlvbjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQg
OiBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdDsKKyAgICBwb3B1cEJ1
dHRvbi51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uID0gby5zdHlsZSgpLmRpcmVjdGlvbigp
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVm
dDsKIAogICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAg
ICB1cGRhdGVDaGVja2VkU3RhdGUocG9wdXBCdXR0b24sIG8pOwpAQCAtMjEzMCw3ICsyMTMwLDcg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29u
c3QgUmVuZGVyQm94JiBib3gsIGNvbnN0IFAKICAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBh
ZGp1c3RlZFJlc3VsdEJ1dHRvblJlY3QoW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRz
Ok5TUmVjdChzbmFwcGVkSW50UmVjdChpbnB1dEJveC5jb250ZW50Qm94UmVjdCgpKSldKTsKICAg
ICAvLyBBZGp1c3QgcG9zaXRpb24gYmFzZWQgb24gdGhlIGNvbnRlbnQgZGlyZWN0aW9uLgogICAg
IGZsb2F0IGFkanVzdGVkWFBvc2l0aW9uOwotICAgIGlmIChib3guc3R5bGUoKS5kaXJlY3Rpb24o
KSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgaWYgKGJveC5zdHlsZSgpLmRpcmVjdGlvbigp
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAgICBhZGp1c3RlZFhQb3NpdGlvbiA9
IGlucHV0Qm94LmNvbnRlbnRCb3hSZWN0KCkubWF4WCgpIC0gbG9jYWxCb3VuZHMuc2l6ZSgpLndp
ZHRoKCk7CiAgICAgZWxzZQogICAgICAgICBhZGp1c3RlZFhQb3NpdGlvbiA9IGlucHV0Qm94LmNv
bnRlbnRCb3hSZWN0KCkueCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRCb3hQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFp
bnRlci5jcHAKaW5kZXggMTEyYmIxOTQ2MTg3YWQ2ZGRjZTQ5MjJlODBjMWQ1NDc1ZTBjMzQxMS4u
Zjc1ZWIyYTJmYTg1YTQ3NTAzMzYzOGFmZmQ0ZDQ2YWZlNTI2ZDI1OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgdm9p
ZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kQW5kRGVjb3JhdGlvbnMoKQogICAgICAg
ICAgICAgaWYgKCF0ZXh0Qm94KCkuaXNIb3Jpem9udGFsKCkpIHsKICAgICAgICAgICAgICAgICB0
ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0Lm1vdmUoMCwgbG9naWNhbFdpZHRoQmVm
b3JlUmFuZ2UpOwogICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91
dFJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKHRleHRCb3goKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpIHsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAodGV4dEJveCgpLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6UlRMKSB7CiAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25D
bGlwT3V0UmVjdC5tb3ZlKGxvZ2ljYWxXaWR0aEFmdGVyUmFuZ2UsIDApOwogICAgICAgICAgICAg
ICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3Quc2V0V2lkdGgobG9naWNhbFNl
bGVjdGlvbldpZHRoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00MzUsOSArNDM1LDkgQEAg
dm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoKQogICAgIH0K
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1pcnJvclJUTFNlZ21lbnQoZmxvYXQgbG9naWNhbFdp
ZHRoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgZmxvYXQmIHN0YXJ0LCBmbG9hdCB3aWR0aCkK
K3N0YXRpYyBpbmxpbmUgdm9pZCBtaXJyb3JSVExTZWdtZW50KGZsb2F0IGxvZ2ljYWxXaWR0aCwg
UEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgZmxvYXQmIHN0YXJ0LCBmbG9hdCB3aWR0aCkK
IHsKLSAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICBpZiAoZGly
ZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICByZXR1cm47CiAgICAg
c3RhcnQgPSBsb2dpY2FsV2lkdGggLSB3aWR0aCAtIHN0YXJ0OwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaAppbmRleCBiMDA3Y2I4ZjI5ZDc1
ZmJhYWYyYzgyMzQ4MDNiMTE2MTUxODFmOTVlLi45ZjQxZWZhMjJkYjg5YTRjZmFkY2VlMjk4NTc0
OTU5OGJjYjRhYjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9C
cmVha2luZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVh
a2luZ0NvbnRleHQuaApAQCAtMjQzLDYgKzI0MywxNSBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0Nv
bnRleHQ6OmluY3JlbWVudCgpCiAgICAgbV9hdFN0YXJ0ID0gZmFsc2U7CiB9CiAKKy8vIFdoZW4g
aWdub3Jpbmcgc3BhY2VzLCB0aGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0
IG5lZWQgbGluZSBib3hlcyBzdWNoIGFzIFJlbmRlcklubGluZXMgb3IKKy8vIGhhcmQgbGluZSBi
cmVha3MgdG8gZW5zdXJlIHRoYXQgdGhleSdyZSBub3QgaWdub3JlZC4KK2lubGluZSB2b2lkIGVu
c3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKExpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0
YXRlJiBzdGF0ZSwgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKK3sKKyAgICBMZWdhY3lJbmxpbmVJ
dGVyYXRvciB0cmFuc2l0aW9uKDAsICZyZW5kZXJlciwgMCk7CisgICAgc3RhdGUuc3RvcElnbm9y
aW5nU3BhY2VzKHRyYW5zaXRpb24pOworICAgIHN0YXRlLnN0YXJ0SWdub3JpbmdTcGFjZXModHJh
bnNpdGlvbik7Cit9CisKIGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlQlIoVXNl
ZENsZWFyJiB1c2VkQ2xlYXIpCiB7CiAgICAgaWYgKGZpdHNPbkxpbmVPckhhbmdzQXRFbmQoKSkg
ewpAQCAtMjY0LDcgKzI3Myw3IEBAIGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxl
QlIoVXNlZENsZWFyJiB1c2VkQ2xlYXIpCiAgICAgICAgIC8vIG5lZWQgdG8gY2hlY2sgZm9yIGZs
b2F0cyB0byBjbGVhciAtIHNvIGlmIHdlJ3JlIGlnbm9yaW5nIHNwYWNlcywgc3RvcCBpZ25vcmlu
ZyB0aGVtIGFuZCBhZGQgYQogICAgICAgICAvLyBydW4gZm9yIHRoaXMgb2JqZWN0LgogICAgICAg
ICBpZiAobV9pZ25vcmluZ1NwYWNlcyAmJiBSZW5kZXJTdHlsZTo6dXNlZENsZWFyKGJyKSAhPSBV
c2VkQ2xlYXI6Ok5vbmUpCi0gICAgICAgICAgICBtX2xpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0
YXRlLmVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKGJyKTsKKyAgICAgICAgICAgIGVu
c3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKG1fbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5n
U3RhdGUsIGJyKTsKICAgICAgICAgLy8gSWYgd2Ugd2VyZSBwcmVjZWRlZCBieSBjb2xsYXBzaW5n
IHNwYWNlIGFuZCBhcmUgaW4gYSByaWdodC1hbGlnbmVkIGNvbnRhaW5lciB3ZSBuZWVkIHRvIGVu
c3VyZSB0aGUgc3BhY2UgZ2V0cwogICAgICAgICAvLyBjb2xsYXBzZWQgYXdheSBzbyB0aGF0IGl0
IGRvZXNuJ3QgcHVzaCB0aGUgdGV4dCBvdXQgZnJvbSB0aGUgY29udGFpbmVyJ3MgcmlnaHQtaGFu
ZCBlZGdlLgogICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyByZWdhcmRsZXNzIG9mIHRoZSBjb250
YWluZXIncyBhbGlnbm1lbnQgLSB3aWxsIHJlcXVpcmUgcmViYXNlbGluaW5nIGEgbG90IG9mIHRl
c3QgcmVzdWx0cy4KQEAgLTM0Nyw3ICszNTYsNyBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRl
eHQ6OmhhbmRsZU91dE9mRmxvd1Bvc2l0aW9uZWQoVmVjdG9yPFJlbmRlckJveCo+JiBwb3NpdAog
ICAgIC8vIHRoZW4gc3RhcnQgaWdub3Jpbmcgc3BhY2VzIGFnYWluLgogICAgIGlmIChpc0lubGlu
ZVR5cGUgfHwgYm94LmNvbnRhaW5lcigpLT5pc1JlbmRlcklubGluZSgpKSB7CiAgICAgICAgIGlm
IChtX2lnbm9yaW5nU3BhY2VzKQotICAgICAgICAgICAgbV9saW5lV2hpdGVzcGFjZUNvbGxhcHNp
bmdTdGF0ZS5lbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhib3gpOworICAgICAgICAg
ICAgZW5zdXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMobV9saW5lV2hpdGVzcGFjZUNvbGxh
cHNpbmdTdGF0ZSwgYm94KTsKICAgICAgICAgbV90cmFpbGluZ09iamVjdHMuYXBwZW5kQm94SWZO
ZWVkZWQoYm94KTsKICAgICB9IGVsc2UKICAgICAgICAgcG9zaXRpb25lZE9iamVjdHMuYXBwZW5k
KCZib3gpOwpAQCAtNDE1LDcgKzQyNCw3IEBAIGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6
aGFuZGxlRW1wdHlJbmxpbmUoKQogICAgICAgICAgICAgbV9saW5lSW5mby5zZXRFbXB0eShmYWxz
ZSwgJm1fYmxvY2ssICZtX3dpZHRoKTsKICAgICAgICAgaWYgKG1faWdub3JpbmdTcGFjZXMpIHsK
ICAgICAgICAgICAgIG1fdHJhaWxpbmdPYmplY3RzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX2xp
bmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLmVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3Bh
Y2VzKCptX2N1cnJlbnQucmVuZGVyZXIoKSk7CisgICAgICAgICAgICBlbnN1cmVMaW5lQm94SW5z
aWRlSWdub3JlZFNwYWNlcyhtX2xpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLCAqbV9jdXJy
ZW50LnJlbmRlcmVyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKG1fYmxvY2tTdHlsZS5jb2xsYXBz
ZVdoaXRlU3BhY2UoKSAmJiBtX3Jlc29sdmVyLnBvc2l0aW9uKCkucmVuZGVyZXIoKSA9PSBtX2N1
cnJlbnQucmVuZGVyZXIoKQogICAgICAgICAgICAgJiYgc2hvdWxkU2tpcFdoaXRlc3BhY2VBZnRl
clN0YXJ0T2JqZWN0KG1fYmxvY2ssIG1fY3VycmVudC5yZW5kZXJlcigpLCBtX2xpbmVXaGl0ZXNw
YWNlQ29sbGFwc2luZ1N0YXRlKSkgewogICAgICAgICAgICAgLy8gTGlrZSB3aXRoIGxpc3QgbWFy
a2Vycywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHAKaW5k
ZXggYmUyZmVhMTU0NWFmYTRhNjU1MjZiOWFmNjdiYjQ4OWIzNDQxYjY3NS4uNTgwMDBlZWM1YTQ0
ZWU1OWI2MGQ3YmVhMDIyYWI5YTU2ZDBiNWU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQg
VHJhaWxpbmdPYmplY3RzOjp1cGRhdGVXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25zRm9y
VHJhaWxpbmdCb3hlcyhMaW5lCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ib3hl
cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRUcmFuc2l0aW9uID49IGxp
bmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLm51bVRyYW5zaXRpb25zKCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgdHJhbnNpdGlvbiBmb3IgdGhpcyBib3ggeWV0Lgot
ICAgICAgICAgICAgICAgIGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLmVuc3VyZUxpbmVC
b3hJbnNpZGVJZ25vcmVkU3BhY2VzKG1fYm94ZXNbaV0pOworICAgICAgICAgICAgICAgIGVuc3Vy
ZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRl
LCBtX2JveGVzW2ldKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLnRyYW5zaXRpb25zKClbY3VycmVudFRy
YW5zaXRpb25dLnJlbmRlcmVyKCkgPT0gJihtX2JveGVzW2ldLmdldCgpKSk7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLnRyYW5zaXRpb25zKClb
Y3VycmVudFRyYW5zaXRpb24gKyAxXS5yZW5kZXJlcigpID09ICYobV9ib3hlc1tpXS5nZXQoKSkp
OwpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFRyYWlsaW5nT2JqZWN0czo6dXBkYXRlV2hpdGVzcGFj
ZUNvbGxhcHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMoTGluZQogICAgICAgICBMZWdh
Y3lJbmxpbmVJdGVyYXRvciBlbmRNaWQoMCwgbV93aGl0ZXNwYWNlLCBwb3MpOwogICAgICAgICBs
aW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5zdGFydElnbm9yaW5nU3BhY2VzKGVuZE1pZCk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ib3hlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgIGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLmVuc3VyZUxpbmVCb3hJbnNp
ZGVJZ25vcmVkU3BhY2VzKG1fYm94ZXNbaV0pOworICAgICAgICAgICAgZW5zdXJlTGluZUJveElu
c2lkZUlnbm9yZWRTcGFjZXMobGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUsIG1fYm94ZXNb
aV0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xp
bmUvVHJhaWxpbmdPYmplY3RzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9UcmFp
bGluZ09iamVjdHMuaAppbmRleCAzNmVhM2JiN2U4ZTgyYjI1MmRkMTUwYTMwNjdiYThkMDdlNDc3
YzJjLi5jMmJlOTNiNTU0NjY0NjQxMDcyNmU4ZTI0ZTAwODRjYjEzNTE4ZDNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuaApAQCAtMjYsNiAr
MjYsMTIgQEAKIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorbmFtZXNwYWNlIFBBTCB7Cit0
ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1bj4gY2xhc3MgQmlkaVJlc29sdmVyOwor
dGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4sIGNsYXNzIElzb2xhdGVSdW4+IGNs
YXNzIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlOwordGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yPiBj
bGFzcyBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIExlZ2FjeUlubGluZUl0ZXJhdG9yOwpAQCAtMzUsMTEgKzQxLDggQEAgY2xhc3Mg
UmVuZGVyVGV4dDsKIHN0cnVjdCBCaWRpUnVuOwogc3RydWN0IEJpZGlJc29sYXRlZFJ1bjsKIAot
dGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4+IGNsYXNzIEJpZGlSZXNvbHZlcjsK
LXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuLCBjbGFzcyBJc29sYXRlUnVuPiBj
bGFzcyBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTsKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4g
Y2xhc3MgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsKLXR5cGVkZWYgQmlkaVJlc29sdmVyV2l0
aElzb2xhdGU8TGVnYWN5SW5saW5lSXRlcmF0b3IsIEJpZGlSdW4sIEJpZGlJc29sYXRlZFJ1bj4g
SW5saW5lQmlkaVJlc29sdmVyOwotdHlwZWRlZiBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlPExl
Z2FjeUlubGluZUl0ZXJhdG9yPiBMaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsKK3VzaW5n
IElubGluZUJpZGlSZXNvbHZlciA9IFBBTDo6QmlkaVJlc29sdmVyV2l0aElzb2xhdGU8TGVnYWN5
SW5saW5lSXRlcmF0b3IsIEJpZGlSdW4sIEJpZGlJc29sYXRlZFJ1bj47Cit1c2luZyBMaW5lV2hp
dGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSA9IFBBTDo6V2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTxM
ZWdhY3lJbmxpbmVJdGVyYXRvcj47CiAKIGNsYXNzIFRyYWlsaW5nT2JqZWN0cyB7CiBwdWJsaWM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwCmluZGV4IGVkOGYyMGY5ODViYWEyNTQ3NDg0MWIyNjhhNDU0OTc5NjRlZjJlYmUu
LmIyZGI0OGNkYjg2MzU4Y2M5NDJkYzFhN2M3OTY2OWQ2ZTg3ZTY3NGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCkBA
IC04OSw3ICs4OSw3IEBAIExheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6Om1hdGhBeGlzSGVp
Z2h0KCkgY29uc3QKIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6bWlycm9ySWZOZWVk
ZWQoTGF5b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0LCBMYXlvdXRVbml0IGJveFdpZHRoKSBjb25z
dAogewotICAgIGlmIChzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCkK
KyAgICBpZiAoc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkK
ICAgICAgICAgcmV0dXJuIGxvZ2ljYWxXaWR0aCgpIC0gYm94V2lkdGggLSBob3Jpem9udGFsT2Zm
c2V0OwogCiAgICAgcmV0dXJuIGhvcml6b250YWxPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCmluZGV4
IGFhMWZlNTUyYTE4M2FhZDMyMmJjYjM0ZDEwOGZlMWFhYzEzMzUxNTAuLmFhMzk0YmUyNGExNWVh
ODVkOGRlZTkxNWYzMmU2NjYxNzI1ZjI2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC0yMzcsNyAr
MjM3LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bGF5b3V0QmxvY2soYm9vbCByZWxh
eW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2cKICAgICAgICAgc2V0TG9naWNhbFdpZHRo
KHdpZHRoKTsKIAogICAgICAgICAvLyBXZSB0aGVuIG1vdmUgdGhlIGNoaWxkcmVuIHRvIHRha2Ug
c3BhY2luZyBpbnRvIGFjY291bnQuCi0gICAgICAgIExheW91dFBvaW50IGhvcml6b250YWxTaGlm
dChzdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IGxlYWRpbmdTcGFj
ZVZhbHVlIDogLWxlYWRpbmdTcGFjZVZhbHVlLCAwX2x1KTsKKyAgICAgICAgTGF5b3V0UG9pbnQg
aG9yaXpvbnRhbFNoaWZ0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFIgPyBsZWFkaW5nU3BhY2VWYWx1ZSA6IC1sZWFkaW5nU3BhY2VWYWx1ZSwgMF9sdSk7CiAg
ICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKQogICAgICAgICAgICAgY2hpbGQtPnNldExvY2F0aW9u
KGNoaWxkLT5sb2NhdGlvbigpICsgaG9yaXpvbnRhbFNoaWZ0KTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCAyOGZlMzlhOTZh
MDZjYTZhYmRmYWVkZmRkMDQzMzljYzdmMjkyMWEzLi40NGVkNDg2ZTc0NjU3NGQ4Yzc1ZGRjOGY2
OWE0YjEzZDkxODZjNWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCBSZW5kZXJTdHlsZTo6UmVuZGVyU3R5
bGUoQ3JlYXRlRGVmYXVsdFN0eWxlVGFnKQogICAgIG1fbm9uSW5oZXJpdGVkRmxhZ3MudmVydGlj
YWxBbGlnbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbml0aWFsVmVydGljYWxBbGlnbigpKTsK
ICAgICBtX25vbkluaGVyaXRlZEZsYWdzLmNsZWFyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlu
aXRpYWxDbGVhcigpKTsKICAgICBtX25vbkluaGVyaXRlZEZsYWdzLnBvc2l0aW9uID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGluaXRpYWxQb3NpdGlvbigpKTsKLSAgICBtX25vbkluaGVyaXRlZEZs
YWdzLnVuaWNvZGVCaWRpID0gaW5pdGlhbFVuaWNvZGVCaWRpKCk7CisgICAgbV9ub25Jbmhlcml0
ZWRGbGFncy51bmljb2RlQmlkaSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbml0aWFsVW5pY29k
ZUJpZGkoKSk7CiAgICAgbV9ub25Jbmhlcml0ZWRGbGFncy5mbG9hdGluZyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbml0aWFsRmxvYXRpbmcoKSk7CiAgICAgbV9ub25Jbmhlcml0ZWRGbGFncy50
YWJsZUxheW91dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbml0aWFsVGFibGVMYXlvdXQoKSk7
CiAgICAgbV9ub25Jbmhlcml0ZWRGbGFncy5oYXNFeHBsaWNpdGx5U2V0Qm9yZGVyUmFkaXVzID0g
ZmFsc2U7CkBAIC0yODA2LDcgKzI4MDYsNyBAQCBVc2VkQ2xlYXIgUmVuZGVyU3R5bGU6OnVzZWRD
bGVhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogICAgIGNhc2UgQ2xlYXI6OklubGlu
ZVN0YXJ0OgogICAgIGNhc2UgQ2xlYXI6OklubGluZUVuZDoKICAgICAgICAgYXV0byBjb250YWlu
aW5nQmxvY2tEaXJlY3Rpb24gPSByZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS5k
aXJlY3Rpb24oKTsKLSAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9ja0RpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGlmIChjb250YWluaW5nQmxvY2tEaXJlY3Rpb24gPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRWYWx1
ZSA9PSBDbGVhcjo6SW5saW5lU3RhcnQgPyBVc2VkQ2xlYXI6OlJpZ2h0IDogVXNlZENsZWFyOjpM
ZWZ0OwogICAgICAgICByZXR1cm4gY29tcHV0ZWRWYWx1ZSA9PSBDbGVhcjo6SW5saW5lU3RhcnQg
PyBVc2VkQ2xlYXI6OkxlZnQgOiBVc2VkQ2xlYXI6OlJpZ2h0OwogICAgIH0KQEAgLTI4MjcsNyAr
MjgyNyw3IEBAIFVzZWRGbG9hdCBSZW5kZXJTdHlsZTo6dXNlZEZsb2F0KGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIpCiAgICAgY2FzZSBGbG9hdDo6SW5saW5lU3RhcnQ6CiAgICAgY2FzZSBG
bG9hdDo6SW5saW5lRW5kOgogICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0RpcmVjdGlvbiA9
IHJlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLmRpcmVjdGlvbigpOwotICAgICAg
ICBpZiAoY29udGFpbmluZ0Jsb2NrRGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAg
ICAgICAgaWYgKGNvbnRhaW5pbmdCbG9ja0RpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246
OlJUTCkKICAgICAgICAgICAgIHJldHVybiBjb21wdXRlZFZhbHVlID09IEZsb2F0OjpJbmxpbmVT
dGFydCA/IFVzZWRGbG9hdDo6UmlnaHQgOiBVc2VkRmxvYXQ6OkxlZnQ7CiAgICAgICAgIHJldHVy
biBjb21wdXRlZFZhbHVlID09IEZsb2F0OjpJbmxpbmVTdGFydCA/IFVzZWRGbG9hdDo6TGVmdCA6
IFVzZWRGbG9hdDo6UmlnaHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaAppbmRleCAyNzJhMTk2ZWVjZmJkZTAwOGE5OTg0ZTBhNDUyOTMyYTkw
MGU5MjI4Li41MTFiZmJiYWE4NjY1NjViZWEzZDQ0N2MzODA0NWY2MjIyYTYwNTAxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtNzAsOCArNzAs
OCBAQAogI2luY2x1ZGUgIlRvdWNoQWN0aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1
ZGUgIlVuaWNvZGVCaWRpLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHBhbC90ZXh0
L1VuaWNvZGVCaWRpLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFSZWYuaD4KICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtMzQ4LDcgKzM0
OCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBMZW5ndGhCb3gmIGNsaXAoKSBjb25zdCB7IHJldHVy
biBtX3Zpc3VhbERhdGEtPmNsaXA7IH0KICAgICBib29sIGhhc0NsaXAoKSBjb25zdCB7IHJldHVy
biBtX3Zpc3VhbERhdGEtPmhhc0NsaXA7IH0KIAotICAgIEVVbmljb2RlQmlkaSB1bmljb2RlQmlk
aSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVVbmljb2RlQmlkaT4obV9ub25Jbmhlcml0
ZWRGbGFncy51bmljb2RlQmlkaSk7IH0KKyAgICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlk
aSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6RVVuaWNvZGVCaWRpPihtX25vbklu
aGVyaXRlZEZsYWdzLnVuaWNvZGVCaWRpKTsgfQogCiAgICAgQ2xlYXIgY2xlYXIoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxDbGVhcj4obV9ub25Jbmhlcml0ZWRGbGFncy5jbGVhcik7IH0K
ICAgICBzdGF0aWMgVXNlZENsZWFyIHVzZWRDbGVhcihjb25zdCBSZW5kZXJPYmplY3QmKTsKQEAg
LTM5NCw4ICszOTQsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgVGV4dFpvb20gdGV4dFpvb20oKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0Wm9vbT4obV9yYXJlSW5oZXJpdGVkRGF0YS0+
dGV4dFpvb20pOyB9CiAKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHREaXJlY3Rpb24+KG1faW5oZXJpdGVkRmxhZ3MuZGlyZWN0aW9u
KTsgfQotICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRp
cmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUjsgfQorICAgIFBBTDo6VGV4dERpcmVjdGlv
biBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OlRleHREaXJlY3Rp
b24+KG1faW5oZXJpdGVkRmxhZ3MuZGlyZWN0aW9uKTsgfQorICAgIGJvb2wgaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSOyB9CiAgICAgYm9vbCBoYXNFeHBsaWNpdGx5U2V0RGlyZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9ub25Jbmhlcml0ZWRGbGFncy5oYXNFeHBsaWNpdGx5U2V0RGlyZWN0aW9uOyB9
CiAKICAgICBjb25zdCBMZW5ndGgmIHNwZWNpZmllZExpbmVIZWlnaHQoKSBjb25zdDsKQEAgLTk2
NSw3ICs5NjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGlwKExlbmd0aCYmIHRvcCwgTGVu
Z3RoJiYgcmlnaHQsIExlbmd0aCYmIGJvdHRvbSwgTGVuZ3RoJiYgbGVmdCk7CiAgICAgdm9pZCBz
ZXRDbGlwKExlbmd0aEJveCYmIGJveCkgeyBTRVRfVkFSKG1fdmlzdWFsRGF0YSwgY2xpcCwgV1RG
TW92ZShib3gpKTsgfQogCi0gICAgdm9pZCBzZXRVbmljb2RlQmlkaShFVW5pY29kZUJpZGkgdikg
eyBtX25vbkluaGVyaXRlZEZsYWdzLnVuaWNvZGVCaWRpID0gdjsgfQorICAgIHZvaWQgc2V0VW5p
Y29kZUJpZGkoUEFMOjpFVW5pY29kZUJpZGkgdikgeyBtX25vbkluaGVyaXRlZEZsYWdzLnVuaWNv
ZGVCaWRpID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHYpOyB9CiAKICAgICB2b2lkIHNldENsZWFy
KENsZWFyIHYpIHsgbV9ub25Jbmhlcml0ZWRGbGFncy5jbGVhciA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPih2KTsgfQogICAgIHZvaWQgc2V0VGFibGVMYXlvdXQoVGFibGVMYXlvdXRUeXBlIHYpIHsg
bV9ub25Jbmhlcml0ZWRGbGFncy50YWJsZUxheW91dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2
KTsgfQpAQCAtOTkzLDcgKzk5Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHRVbmRlcmxp
bmVQb3NpdGlvbihUZXh0VW5kZXJsaW5lUG9zaXRpb24gcG9zaXRpb24pIHsgU0VUX1ZBUihtX3Jh
cmVJbmhlcml0ZWREYXRhLCB0ZXh0VW5kZXJsaW5lUG9zaXRpb24sIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihwb3NpdGlvbikpOyB9CiAgICAgdm9pZCBzZXRUZXh0VW5kZXJsaW5lT2Zmc2V0KFRleHRV
bmRlcmxpbmVPZmZzZXQgdGV4dFVuZGVybGluZU9mZnNldCkgeyBTRVRfVkFSKG1fcmFyZUluaGVy
aXRlZERhdGEsIHRleHRVbmRlcmxpbmVPZmZzZXQsIHRleHRVbmRlcmxpbmVPZmZzZXQpOyB9CiAg
ICAgdm9pZCBzZXRUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyhUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cyB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcykgeyBTRVRfVkFSKG1fcmFyZUluaGVyaXRlZERhdGEs
IHRleHREZWNvcmF0aW9uVGhpY2tuZXNzLCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyk7IH0KLSAg
ICB2b2lkIHNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIHYpIHsgbV9pbmhlcml0ZWRGbGFncy5k
aXJlY3Rpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odik7IH0KKyAgICB2b2lkIHNldERpcmVj
dGlvbihQQUw6OlRleHREaXJlY3Rpb24gdikgeyBtX2luaGVyaXRlZEZsYWdzLmRpcmVjdGlvbiA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2KTsgfQogICAgIHZvaWQgc2V0SGFzRXhwbGljaXRseVNl
dERpcmVjdGlvbihib29sIHYpIHsgbV9ub25Jbmhlcml0ZWRGbGFncy5oYXNFeHBsaWNpdGx5U2V0
RGlyZWN0aW9uID0gdjsgfQogICAgIHZvaWQgc2V0TGluZUhlaWdodChMZW5ndGgmJik7CiAgICAg
Ym9vbCBzZXRab29tKGZsb2F0KTsKQEAgLTE1NTksNyArMTU1OSw3IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBDbGVhciBpbml0aWFsQ2xlYXIoKSB7IHJldHVybiBDbGVhcjo6Tm9uZTsgfQogICAg
IHN0YXRpYyBEaXNwbGF5VHlwZSBpbml0aWFsRGlzcGxheSgpIHsgcmV0dXJuIERpc3BsYXlUeXBl
OjpJbmxpbmU7IH0KLSAgICBzdGF0aWMgRVVuaWNvZGVCaWRpIGluaXRpYWxVbmljb2RlQmlkaSgp
IHsgcmV0dXJuIFVCTm9ybWFsOyB9CisgICAgc3RhdGljIFBBTDo6RVVuaWNvZGVCaWRpIGluaXRp
YWxVbmljb2RlQmlkaSgpIHsgcmV0dXJuIFBBTDo6RVVuaWNvZGVCaWRpOjpVQk5vcm1hbDsgfQog
ICAgIHN0YXRpYyBQb3NpdGlvblR5cGUgaW5pdGlhbFBvc2l0aW9uKCkgeyByZXR1cm4gUG9zaXRp
b25UeXBlOjpTdGF0aWM7IH0KICAgICBzdGF0aWMgVmVydGljYWxBbGlnbiBpbml0aWFsVmVydGlj
YWxBbGlnbigpIHsgcmV0dXJuIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOyB9CiAgICAgc3RhdGlj
IEZsb2F0IGluaXRpYWxGbG9hdGluZygpIHsgcmV0dXJuIEZsb2F0OjpOb25lOyB9CkBAIC0xNTc1
LDcgKzE1NzUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENhcHRpb25TaWRlIGluaXRpYWxDYXB0
aW9uU2lkZSgpIHsgcmV0dXJuIENhcHRpb25TaWRlOjpUb3A7IH0KICAgICBzdGF0aWMgQ29sdW1u
QXhpcyBpbml0aWFsQ29sdW1uQXhpcygpIHsgcmV0dXJuIENvbHVtbkF4aXM6OkF1dG87IH0KICAg
ICBzdGF0aWMgQ29sdW1uUHJvZ3Jlc3Npb24gaW5pdGlhbENvbHVtblByb2dyZXNzaW9uKCkgeyBy
ZXR1cm4gQ29sdW1uUHJvZ3Jlc3Npb246Ok5vcm1hbDsgfQotICAgIHN0YXRpYyBUZXh0RGlyZWN0
aW9uIGluaXRpYWxEaXJlY3Rpb24oKSB7IHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAg
ICBzdGF0aWMgUEFMOjpUZXh0RGlyZWN0aW9uIGluaXRpYWxEaXJlY3Rpb24oKSB7IHJldHVybiBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUjsgfQogICAgIHN0YXRpYyBXcml0aW5nTW9kZSBpbml0aWFs
V3JpdGluZ01vZGUoKSB7IHJldHVybiBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b207IH0KICAgICBz
dGF0aWMgVGV4dENvbWJpbmUgaW5pdGlhbFRleHRDb21iaW5lKCkgeyByZXR1cm4gVGV4dENvbWJp
bmU6Ok5vbmU7IH0KICAgICBzdGF0aWMgVGV4dE9yaWVudGF0aW9uIGluaXRpYWxUZXh0T3JpZW50
YXRpb24oKSB7IHJldHVybiBUZXh0T3JpZW50YXRpb246Ok1peGVkOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKaW5kZXggZmVmYTQ4NWNhZmJmNGJi
Yzg0YmU5NWY0NTlhNzk5ZTI3NjhkNjVmNS4uNzM2YjIwZGE0NTI1NzkxMjBjZTdjMmIwZDFjMjU2
NDk3MDk2MDViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvRWxlbWVudFJ1bGVD
b2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0VsZW1lbnRSdWxlQ29sbGVj
dG9yLmNwcApAQCAtNTQxLDcgKzU0MSw3IEBAIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1h
dGNoQWxsUnVsZXMoYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMsIGJvb2wgaW5jCiAgICAg
ICAgIGlmIChpczxIVE1MRWxlbWVudD4oc3R5bGVkRWxlbWVudCkpIHsKICAgICAgICAgICAgIGJv
b2wgaXNBdXRvOwogICAgICAgICAgICAgYXV0byB0ZXh0RGlyZWN0aW9uID0gZG93bmNhc3Q8SFRN
TEVsZW1lbnQ+KHN0eWxlZEVsZW1lbnQpLmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmli
dXRlKGlzQXV0byk7Ci0gICAgICAgICAgICBhdXRvJiBwcm9wZXJ0aWVzID0gdGV4dERpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdo
dFRvTGVmdERlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICBhdXRvJiBwcm9wZXJ0aWVzID0gdGV4
dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IGxlZnRUb1JpZ2h0RGVjbGFy
YXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKTsKICAgICAgICAgICAgIGlmIChpc0F1
dG8pCiAgICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMoeyAmcHJvcGVydGllcyB9
LCBEZWNsYXJhdGlvbk9yaWdpbjo6QXV0aG9yKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IDIyOTlmOGM2Mzc5YjUwOTQ5MmExYTFm
ZmE1MjMwNmExYWExNjg5YjQuLjI4YjJjNDc4ODE5NTg5M2Y0NjZjMjA2ZGQxNGNlNWU0Yzc3ZDRi
MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKQEAgLTQz
LDcgKzQzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVQYWdlUnVsZXMoY29uc3QgU3R5
bGVSdWxlUGFnZSogcjEsIGNvbnN0IFN0eWxlUnVsZVBhZ2UKIAogYm9vbCBQYWdlUnVsZUNvbGxl
Y3Rvcjo6aXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAogewotICAgIGJvb2wgaXNGaXJz
dFBhZ2VMZWZ0ID0gbV9yb290RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICBi
b29sIGlzRmlyc3RQYWdlTGVmdCA9IG1fcm9vdERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rp
b246OlJUTDsKICAgICByZXR1cm4gKHBhZ2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAxIDog
MCkpICUgMjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVD
b2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmgKaW5k
ZXggZTQ1MmM3NDRhNjA0YjRlMjc0MTE3ZjU2YTdkYzkxMDE2ZjdiOGU2NS4uNWU0Y2YwYjVkMGM5
MGY1NWYzYTQwZWE4MTkwNWJmN2JkOGZjZjZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdl
UnVsZUNvbGxlY3Rvci5oCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBTdHlsZSB7CiAKIGNs
YXNzIFBhZ2VSdWxlQ29sbGVjdG9yIHsKIHB1YmxpYzoKLSAgICBQYWdlUnVsZUNvbGxlY3RvcihT
Y29wZVJ1bGVTZXRzJiBydWxlU2V0cywgVGV4dERpcmVjdGlvbiByb290RGlyZWN0aW9uKQorICAg
IFBhZ2VSdWxlQ29sbGVjdG9yKFNjb3BlUnVsZVNldHMmIHJ1bGVTZXRzLCBQQUw6OlRleHREaXJl
Y3Rpb24gcm9vdERpcmVjdGlvbikKICAgICAgICAgOiBtX3J1bGVTZXRzKHJ1bGVTZXRzKQogICAg
ICAgICAsIG1fcm9vdERpcmVjdGlvbihyb290RGlyZWN0aW9uKQogICAgIHsgfQpAQCAtNTEsNyAr
NTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxT
dHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2Uq
PiYgcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5n
JiBwYWdlTmFtZSk7CiAKICAgICBTY29wZVJ1bGVTZXRzJiBtX3J1bGVTZXRzOwotICAgIFRleHRE
aXJlY3Rpb24gbV9yb290RGlyZWN0aW9uOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBtX3Jvb3RE
aXJlY3Rpb247CiAKICAgICBNYXRjaFJlc3VsdCBtX3Jlc3VsdDsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1Byb3BlcnR5Q2FzY2FkZS5oCmluZGV4IDUwNjRmNzgxYjM0ZTcwNjU4NDAxMzAyNWY4Yjk1
ZWM2ODFhNzY4NGEuLmRiYmVkNDFmYzc0ZGMwYmNjYWQzNTU5ZjcwMjIzNzNhNWM5ZGY3NjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5oCkBAIC00MSw3ICs0MSw3IEBAIHB1
YmxpYzoKICAgICBlbnVtIEluY2x1ZGVkUHJvcGVydGllcyB7IEFsbCwgSW5oZXJpdGVkT25seSB9
OwogCiAgICAgc3RydWN0IERpcmVjdGlvbiB7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gdGV4dERp
cmVjdGlvbjsKKyAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb247CiAgICAg
ICAgIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IGM4OTg2ODdiMjI2Y2NlNGI0
ZjNiOGIxYTg1Y2JlYzc5NThiNjdhYjYuLmEwZDNhMDg5YWNlYjQwYWI2OGZiYTYyNzVjMTlkYjMz
ZTQyNDkwOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcApAQCAtMTMxNiw3ICsxMzE2LDcgQEAgc3RkOjpvcHRpb25hbDxTZWxlY3Rpb25HZW9t
ZXRyeT4gQXJndW1lbnRDb2RlcjxTZWxlY3Rpb25HZW9tZXRyeT46OmRlY29kZShEZWNvZGUKICAg
ICB1aW50MzJfdCBkaXJlY3Rpb247CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkaXJlY3Rpb24p
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHNlbGVjdGlvbkdlb21ldHJ5LnNl
dERpcmVjdGlvbigoVGV4dERpcmVjdGlvbilkaXJlY3Rpb24pOworICAgIHNlbGVjdGlvbkdlb21l
dHJ5LnNldERpcmVjdGlvbigoUEFMOjpUZXh0RGlyZWN0aW9uKWRpcmVjdGlvbik7CiAKICAgICBp
bnQgaW50VmFsdWU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbnRWYWx1ZSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0uY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViUG9wdXBJdGVtLmNwcAppbmRleCBmMDA0NTRlYjcyOTYzNzAwYzEyM2NiZDE0
NDg2ZTNmMjlhZjM4ZDAyLi5jMDI5OWM3N2VjM2VlNjE3MDk5NTc5Mzk1NDJhNjExMDk1M2EyNGMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYlBvcHVwSXRlbTo6V2ViUG9wdXBJdGVtKCkKICAgICA6
IG1fdHlwZShUeXBlOjpJdGVtKQotICAgICwgbV90ZXh0RGlyZWN0aW9uKFdlYkNvcmU6OlRleHRE
aXJlY3Rpb246OkxUUikKKyAgICAsIG1fdGV4dERpcmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb246
OkxUUikKICAgICAsIG1faGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlKGZhbHNlKQogICAgICwgbV9p
c0VuYWJsZWQodHJ1ZSkKICAgICAsIG1faXNTZWxlY3RlZChmYWxzZSkKQEAgLTQyLDcgKzQyLDcg
QEAgV2ViUG9wdXBJdGVtOjpXZWJQb3B1cEl0ZW0oKQogCiBXZWJQb3B1cEl0ZW06OldlYlBvcHVw
SXRlbShUeXBlIHR5cGUpCiAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fdGV4dERpcmVjdGlv
bihXZWJDb3JlOjpUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgLCBtX3RleHREaXJlY3Rpb24oUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgLCBtX2hhc1RleHREaXJlY3Rpb25PdmVycmlkZShm
YWxzZSkKICAgICAsIG1faXNFbmFibGVkKHRydWUpCiAgICAgLCBtX2lzTGFiZWwoZmFsc2UpCkBA
IC01MCw3ICs1MCw3IEBAIFdlYlBvcHVwSXRlbTo6V2ViUG9wdXBJdGVtKFR5cGUgdHlwZSkKIHsK
IH0KIAotV2ViUG9wdXBJdGVtOjpXZWJQb3B1cEl0ZW0oVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IHRleHQsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiwgYm9vbCBoYXNUZXh0
RGlyZWN0aW9uT3ZlcnJpZGUsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgY29uc3QgU3RyaW5nJiBh
Y2Nlc3NpYmlsaXR5VGV4dCwgYm9vbCBpc0VuYWJsZWQsIGJvb2wgaXNMYWJlbCwgYm9vbCBpc1Nl
bGVjdGVkKQorV2ViUG9wdXBJdGVtOjpXZWJQb3B1cEl0ZW0oVHlwZSB0eXBlLCBjb25zdCBTdHJp
bmcmIHRleHQsIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBib29sIGhhc1RleHRE
aXJlY3Rpb25PdmVycmlkZSwgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBjb25zdCBTdHJpbmcmIGFj
Y2Vzc2liaWxpdHlUZXh0LCBib29sIGlzRW5hYmxlZCwgYm9vbCBpc0xhYmVsLCBib29sIGlzU2Vs
ZWN0ZWQpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fdGV4dCh0ZXh0KQogICAgICwgbV90
ZXh0RGlyZWN0aW9uKHRleHREaXJlY3Rpb24pCkBAIC04Niw3ICs4Niw3IEBAIHN0ZDo6b3B0aW9u
YWw8V2ViUG9wdXBJdGVtPiBXZWJQb3B1cEl0ZW06OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29k
ZXIpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0ZXh0KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICAKLSAgICBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb247
CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb247CiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZSh0ZXh0RGlyZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUG9wdXBJdGVtLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0uaAppbmRleCAyYzM3NTQ1ZWNjNmM3MmY4ZGZmYjNi
MDgxYWU1OWVlNmI3OTI1N2QzLi45YjhiNDY0OWFlMjQ2NGQyYzAzNDNiMTU2OTlkMmVhODFhZWI3
NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0uaApAQCAtNDQsMTQgKzQ0LDE0IEBA
IHN0cnVjdCBXZWJQb3B1cEl0ZW0gewogCiAgICAgV2ViUG9wdXBJdGVtKCk7CiAgICAgV2ViUG9w
dXBJdGVtKFR5cGUpOwotICAgIFdlYlBvcHVwSXRlbShUeXBlLCBjb25zdCBTdHJpbmcmIHRleHQs
IFdlYkNvcmU6OlRleHREaXJlY3Rpb24sIGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBj
b25zdCBTdHJpbmcmIHRvb2xUaXAsIGNvbnN0IFN0cmluZyYgYWNjZXNzaWJpbGl0eVRleHQsIGJv
b2wgaXNFbmFibGVkLCBib29sIGlzTGFiZWwsIGJvb2wgaXNTZWxlY3RlZCk7CisgICAgV2ViUG9w
dXBJdGVtKFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgUEFMOjpUZXh0RGlyZWN0aW9uLCBib29s
IGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBjb25zdCBT
dHJpbmcmIGFjY2Vzc2liaWxpdHlUZXh0LCBib29sIGlzRW5hYmxlZCwgYm9vbCBpc0xhYmVsLCBi
b29sIGlzU2VsZWN0ZWQpOwogCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7
CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViUG9wdXBJdGVtPiBkZWNvZGUoSVBDOjpEZWNv
ZGVyJik7CiAKICAgICBUeXBlIG1fdHlwZTsKICAgICBTdHJpbmcgbV90ZXh0OwotICAgIFdlYkNv
cmU6OlRleHREaXJlY3Rpb24gbV90ZXh0RGlyZWN0aW9uOworICAgIFBBTDo6VGV4dERpcmVjdGlv
biBtX3RleHREaXJlY3Rpb247CiAgICAgYm9vbCBtX2hhc1RleHREaXJlY3Rpb25PdmVycmlkZTsK
ICAgICBTdHJpbmcgbV90b29sVGlwOwogICAgIFN0cmluZyBtX2FjY2Vzc2liaWxpdHlUZXh0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXgg
NTJkNjM5NWYwMDYzYjZhOWNjYjA2MDRiYWIyZjhjNDEyOGNiYmU4Yy4uNDkzM2VjMTFmYTUwY2Rh
ZmI1NmQ4MDhjNTgxZGFhYjEyYTlkNzZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC01MDcsNyArNTA3LDcgQEAgc3RhdGljIHZvaWQg
aGFyZHdhcmVLZXlib2FyZEF2YWlsYWJpbGl0eUNoYW5nZWRDYWxsYmFjayhDRk5vdGlmaWNhdGlv
bkNlbnRlclJlZiwKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZXMoKS0+c2V0SW5s
aW5lTWVkaWFQbGF5YmFja1JlcXVpcmVzUGxheXNJbmxpbmVBdHRyaWJ1dGUoISFbX2NvbmZpZ3Vy
YXRpb24gX2lubGluZU1lZGlhUGxheWJhY2tSZXF1aXJlc1BsYXlzSW5saW5lQXR0cmlidXRlXSk7
CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnByZWZlcmVuY2VzKCktPnNldEFsbG93c1BpY3R1cmVJ
blBpY3R1cmVNZWRpYVBsYXliYWNrKCEhW19jb25maWd1cmF0aW9uIGFsbG93c1BpY3R1cmVJblBp
Y3R1cmVNZWRpYVBsYXliYWNrXSAmJiBzaG91bGRBbGxvd1BpY3R1cmVJblBpY3R1cmVNZWRpYVBs
YXliYWNrKCkpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5wcmVmZXJlbmNlcygpLT5zZXRVc2Vy
SW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5KHN0YXRpY19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpV
c2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5OjpDb250ZW50KSk7Ci0gICAgcGFnZUNvbmZpZ3Vy
YXRpb24tPnByZWZlcmVuY2VzKCktPnNldFN5c3RlbUxheW91dERpcmVjdGlvbihzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oV2ViQ29yZTo6VGV4dERpcmVjdGlvbjo6TFRSKSk7CisgICAgcGFnZUNvbmZp
Z3VyYXRpb24tPnByZWZlcmVuY2VzKCktPnNldFN5c3RlbUxheW91dERpcmVjdGlvbihzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpKTsKICAgICBwYWdlQ29uZmln
dXJhdGlvbi0+cHJlZmVyZW5jZXMoKS0+c2V0QWxsb3dTZXR0aW5nQW55WEhSSGVhZGVyRnJvbUZp
bGVVUkxzKHNob3VsZEFsbG93U2V0dGluZ0FueVhIUkhlYWRlckZyb21GaWxlVVJMcygpKTsKICAg
ICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZXMoKS0+c2V0U2hvdWxkRGVjaWRlUG9saWN5
QmVmb3JlTG9hZGluZ1F1aWNrTG9va1ByZXZpZXcoISFbX2NvbmZpZ3VyYXRpb24gX3Nob3VsZERl
Y2lkZVBvbGljeUJlZm9yZUxvYWRpbmdRdWlja0xvb2tQcmV2aWV3XSk7CiAjaWYgRU5BQkxFKERF
VklDRV9PUklFTlRBVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CmluZGV4IGI3OTAzMjk1MjIxZDcxZDk3OWY0OGI2ZDY2ZjZmYWE3NzUxMjdiMDIuLjJiYTUyNDdk
ZjBhMzUxYTI0NGZkNGQ1NGQyYWUxZGM0YmI3ZWNkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNjg3Niw3ICs2ODc2LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnNob3dQb3B1cE1lbnUoY29uc3QgSW50UmVjdCYgcmVjdCwgdWludDY0X3QgdGV4dERpcmVj
dGlvbiwgY28KIAogICAgIC8vIFNob3dpbmcgYSBwb3B1cCBtZW51IHJ1bnMgYSBuZXN0ZWQgcnVu
bG9vcCwgd2hpY2ggY2FuIGhhbmRsZSBtZXNzYWdlcyB0aGF0IGNhdXNlIHx0aGlzfCB0byBnZXQg
Y2xvc2VkLgogICAgIFJlZjxXZWJQYWdlUHJveHk+IHByb3RlY3QoKnRoaXMpOwotICAgIG1fYWN0
aXZlUG9wdXBNZW51LT5zaG93UG9wdXBNZW51KHJlY3QsIHN0YXRpY19jYXN0PFRleHREaXJlY3Rp
b24+KHRleHREaXJlY3Rpb24pLCBtX3BhZ2VTY2FsZUZhY3RvciwgaXRlbXMsIGRhdGEsIHNlbGVj
dGVkSW5kZXgpOworICAgIG1fYWN0aXZlUG9wdXBNZW51LT5zaG93UG9wdXBNZW51KHJlY3QsIHN0
YXRpY19jYXN0PFBBTDo6VGV4dERpcmVjdGlvbj4odGV4dERpcmVjdGlvbiksIG1fcGFnZVNjYWxl
RmFjdG9yLCBpdGVtcywgZGF0YSwgc2VsZWN0ZWRJbmRleCk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpoaWRlUG9wdXBNZW51KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBvcHVwTWVudVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQb3B1cE1l
bnVQcm94eS5oCmluZGV4IDYxZGVlMmU0YjY2ODBhNGE3YjY4OWE0MGQwNzRjM2UyMjBjNjEyMWIu
LmVkMjkzOWUyZmYyNmE1MGM2YjAwNTgzMTc3NTk4ODhjMmRkYzE3ZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBvcHVwTWVudVByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUG9wdXBNZW51UHJveHkuaApAQCAtNjEsNyArNjEsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBzaG93UG9wdXBNZW51KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHJlY3QsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24sIGRvdWJsZSBw
YWdlU2NhbGVGYWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgY29uc3Qg
UGxhdGZvcm1Qb3B1cE1lbnVEYXRhJiwgaW50MzJfdCBzZWxlY3RlZEluZGV4KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNob3dQb3B1cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBBTDo6
VGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBv
cHVwSXRlbT4mIGl0ZW1zLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNl
bGVjdGVkSW5kZXgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZVBvcHVwTWVudSgpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsVHJhY2tpbmcoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5k
ZXggNWEzYjBkN2VlMWVkMDRlOTc4YjQ4NWZjNDFlMTVhZmFjZGJjNmVlNi4uZGRlZWJhODNkZjFj
MWM2OWMzY2RhMjgyOGU2OWZmNDBkMjRmNTBhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0zMDM2LDcg
KzMwMzYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTYW1lUGFpcihVSUdlc3R1cmVSZWNvZ25p
emVyICphLCBVSUdlc3R1cmVSZWNvZ25pemVyICpiLCBVSQogICAgIHJldHVybiBjcmVhdGVOU0Fy
cmF5KHNlbGVjdGlvbkdlb21ldHJpZXMsIFtdIChhdXRvJiBnZW9tZXRyeSkgewogICAgICAgICBh
dXRvIHdlYlJlY3QgPSBbV2ViU2VsZWN0aW9uUmVjdCBzZWxlY3Rpb25SZWN0XTsKICAgICAgICAg
d2ViUmVjdC5yZWN0ID0gZ2VvbWV0cnkucmVjdCgpOwotICAgICAgICB3ZWJSZWN0LndyaXRpbmdE
aXJlY3Rpb24gPSBnZW9tZXRyeS5kaXJlY3Rpb24oKSA9PSBXZWJDb3JlOjpUZXh0RGlyZWN0aW9u
OjpMVFIgPyBXS1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA6IFdLV3JpdGluZ0RpcmVjdGlv
blJpZ2h0VG9MZWZ0OworICAgICAgICB3ZWJSZWN0LndyaXRpbmdEaXJlY3Rpb24gPSBnZW9tZXRy
eS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAg
IHdlYlJlY3QuaXNMaW5lQnJlYWsgPSBnZW9tZXRyeS5pc0xpbmVCcmVhaygpOwogICAgICAgICB3
ZWJSZWN0LmlzRmlyc3RPbkxpbmUgPSBnZW9tZXRyeS5pc0ZpcnN0T25MaW5lKCk7CiAgICAgICAg
IHdlYlJlY3QuaXNMYXN0T25MaW5lID0gZ2VvbWV0cnkuaXNMYXN0T25MaW5lKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tUZXh0U2VsZWN0aW9uUmVjdC5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1RleHRTZWxlY3Rpb25SZWN0Lm1tCmluZGV4
IGUzMWRjODA1MmUyZjAyYjcwODAzYzM5ZmUwZjExMWIzODgzZTE3NTEuLjAxNDAxODA3YjY1Y2Fj
ODkxYTAxYzVlMDc1NDY4YzgwN2RkMjg2ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS1RleHRTZWxlY3Rpb25SZWN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS1RleHRTZWxlY3Rpb25SZWN0Lm1tCkBAIC0xMzgsNyArMTM4LDcgQEAKIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAtIChVSVRleHRXcml0aW5nRGlyZWN0
aW9uKXdyaXRpbmdEaXJlY3Rpb24KIHsKLSAgICByZXR1cm4gX3NlbGVjdGlvbkdlb21ldHJ5LmRp
cmVjdGlvbigpID09IFdlYkNvcmU6OlRleHREaXJlY3Rpb246OkxUUiA/IFVJVGV4dFdyaXRpbmdE
aXJlY3Rpb25MZWZ0VG9SaWdodCA6IFVJVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsK
KyAgICByZXR1cm4gX3NlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSID8gVUlUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogVUlUZXh0
V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwogfQogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQ
b3B1cE1lbnVQcm94eU1hYy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBvcHVw
TWVudVByb3h5TWFjLmgKaW5kZXggMDkwZTE0OTgyNTQxM2JkMDgzYzdiNDIyMzhmZTBmY2E4ODJj
YzQ1Zi4uMGM3MDc4MGQxZjZhZGUyNzQ2NDQyNmYzOWI0ZGQ5NDE1MzI5MTIwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLmgKQEAg
LTQ2LDE0ICs0NiwxNCBAQCBwdWJsaWM6CiAgICAgfQogICAgIH5XZWJQb3B1cE1lbnVQcm94eU1h
YygpOwogCi0gICAgdm9pZCBzaG93UG9wdXBNZW51KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBX
ZWJDb3JlOjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0
b3I8V2ViUG9wdXBJdGVtPiYsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYsIGludDMyX3Qg
c2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzaG93UG9wdXBNZW51KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBQQUw6OlRleHREaXJlY3Rpb24sIGRvdWJsZSBwYWdlU2NhbGVGYWN0
b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiwgY29uc3QgUGxhdGZvcm1Qb3B1cE1lbnVE
YXRhJiwgaW50MzJfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKICAgICB2b2lkIGhpZGVQb3B1
cE1lbnUoKSBvdmVycmlkZTsKICAgICB2b2lkIGNhbmNlbFRyYWNraW5nKCkgb3ZlcnJpZGU7CiAK
IHByaXZhdGU6CiAgICAgV2ViUG9wdXBNZW51UHJveHlNYWMoTlNWaWV3ICosIFdlYlBvcHVwTWVu
dVByb3h5OjpDbGllbnQmKTsKIAotICAgIHZvaWQgcG9wdWxhdGUoY29uc3QgVmVjdG9yPFdlYlBv
cHVwSXRlbT4mLCBOU0ZvbnQgKiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbik7CisgICAgdm9pZCBw
b3B1bGF0ZShjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYsIE5TRm9udCAqLCBQQUw6OlRleHRE
aXJlY3Rpb24pOwogCiAgICAgUmV0YWluUHRyPE5TUG9wVXBCdXR0b25DZWxsPiBtX3BvcHVwOwog
ICAgIE5TVmlldyAqbV93ZWJWaWV3OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLm1tCmluZGV4IDhlZjNjMGQ3ZmE3NWYyMmRiOWExNGQy
MDhkY2VlNzdkNjk5Y2Y0Y2MuLjU0ZTdiNTFkNzVmZGZiNmJiN2QwNDk4MTliYWJiNTZjNjkwZmQ5
MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQ
cm94eU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51
UHJveHlNYWMubW0KQEAgLTU1LDcgKzU1LDcgQEAgV2ViUG9wdXBNZW51UHJveHlNYWM6On5XZWJQ
b3B1cE1lbnVQcm94eU1hYygpCiAgICAgICAgIFttX3BvcHVwIHNldENvbnRyb2xWaWV3Om5pbF07
CiB9CiAKLXZvaWQgV2ViUG9wdXBNZW51UHJveHlNYWM6OnBvcHVsYXRlKGNvbnN0IFZlY3RvcjxX
ZWJQb3B1cEl0ZW0+JiBpdGVtcywgTlNGb250ICpmb250LCBUZXh0RGlyZWN0aW9uIG1lbnVUZXh0
RGlyZWN0aW9uKQordm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6cG9wdWxhdGUoY29uc3QgVmVj
dG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBOU0ZvbnQgKmZvbnQsIFBBTDo6VGV4dERpcmVjdGlv
biBtZW51VGV4dERpcmVjdGlvbikKIHsKICAgICBpZiAobV9wb3B1cCkKICAgICAgICAgW21fcG9w
dXAgcmVtb3ZlQWxsSXRlbXNdOwpAQCAtNzUsOSArNzUsOSBAQCB2b2lkIFdlYlBvcHVwTWVudVBy
b3h5TWFjOjpwb3B1bGF0ZShjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIE5TRm9u
dCAqZgogICAgICAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSBbbV9wb3B1cCBsYXN0SXRl
bV07CiAKICAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVQYXJhZ3JhcGhTdHlsZT4gcGFy
YWdyYXBoU3R5bGUgPSBhZG9wdE5TKFtbTlNQYXJhZ3JhcGhTdHlsZSBkZWZhdWx0UGFyYWdyYXBo
U3R5bGVdIG11dGFibGVDb3B5XSk7Ci0gICAgICAgICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3Jp
dGluZ0RpcmVjdGlvbiA9IGl0ZW1zW2ldLm1fdGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIgPyBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TV3JpdGluZ0RpcmVjdGlv
blJpZ2h0VG9MZWZ0OworICAgICAgICAgICAgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJl
Y3Rpb24gPSBpdGVtc1tpXS5tX3RleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpM
VFIgPyBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TV3JpdGluZ0RpcmVjdGlvblJp
Z2h0VG9MZWZ0OwogICAgICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldEJhc2VXcml0aW5nRGly
ZWN0aW9uOndyaXRpbmdEaXJlY3Rpb25dOwotICAgICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNl
dEFsaWdubWVudDptZW51VGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1Rl
eHRBbGlnbm1lbnRMZWZ0IDogTlNUZXh0QWxpZ25tZW50UmlnaHRdOworICAgICAgICAgICAgW3Bh
cmFncmFwaFN0eWxlIHNldEFsaWdubWVudDptZW51VGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUiA/IE5TVGV4dEFsaWdubWVudExlZnQgOiBOU1RleHRBbGlnbm1lbnRSaWdo
dF07CiAgICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRl
cyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNB
bmRLZXlzOgogICAgICAgICAgICAgICAgIHBhcmFncmFwaFN0eWxlLmdldCgpLCBOU1BhcmFncmFw
aFN0eWxlQXR0cmlidXRlTmFtZSwKICAgICAgICAgICAgICAgICBmb250LCBOU0ZvbnRBdHRyaWJ1
dGVOYW1lLApAQCAtOTksNyArOTksNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5TWFjOjpwb3B1
bGF0ZShjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIE5TRm9udCAqZgogICAgIH0K
IH0KIAotdm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6c2hvd1BvcHVwTWVudShjb25zdCBJbnRS
ZWN0JiByZWN0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24sIGRvdWJsZSBwYWdlU2NhbGVG
YWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgY29uc3QgUGxhdGZvcm1Q
b3B1cE1lbnVEYXRhJiBkYXRhLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFdlYlBvcHVw
TWVudVByb3h5TWFjOjpzaG93UG9wdXBNZW51KGNvbnN0IEludFJlY3QmIHJlY3QsIFBBTDo6VGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBW
ZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYg
ZGF0YSwgaW50MzJfdCBzZWxlY3RlZEluZGV4KQogewogICAgIEFTU0VSVChoYXNQcm9jZXNzUHJp
dmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6OkNhbkNvbW11bmljYXRlV2l0aFdpbmRvd1NlcnZlcikp
OwogICAgIE5TRm9udCAqZm9udDsKQEAgLTEyMywxMCArMTIzLDEwIEBAIHZvaWQgV2ViUG9wdXBN
ZW51UHJveHlNYWM6OnNob3dQb3B1cE1lbnUoY29uc3QgSW50UmVjdCYgcmVjdCwgVGV4dERpcmVj
dGlvbiB0ZXh0CiAKICAgICBbbV9wb3B1cCBhdHRhY2hQb3BVcFdpdGhGcmFtZTpyZWN0IGluVmll
dzptX3dlYlZpZXddOwogICAgIFttX3BvcHVwIHNlbGVjdEl0ZW1BdEluZGV4OnNlbGVjdGVkSW5k
ZXhdOwotICAgIFttX3BvcHVwIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERp
cmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9M
ZWZ0XTsKKyAgICBbbV9wb3B1cCBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHRE
aXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJp
Z2h0VG9MZWZ0XTsKIAogICAgIE5TTWVudSAqbWVudSA9IFttX3BvcHVwIG1lbnVdOwotICAgIFtt
ZW51IHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdo
dCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKKyAgICBbbWVu
dSBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9S
aWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKIAogICAg
IC8vIFRoZXNlIHZhbHVlcyB3ZXJlIGJvcnJvd2VkIGZyb20gQXBwS2l0IHRvIG1hdGNoIHRoZWly
IHBsYWNlbWVudCBvZiB0aGUgbWVudS4KICAgICBjb25zdCBpbnQgcG9wT3Zlckhvcml6b250YWxB
ZGp1c3QgPSAtMTM7CkBAIC0xNDEsMTggKzE0MSwxOCBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5
TWFjOjpzaG93UG9wdXBNZW51KGNvbnN0IEludFJlY3QmIHJlY3QsIFRleHREaXJlY3Rpb24gdGV4
dAogICAgICAgICBpZiAodGl0bGVGcmFtZS5zaXplLndpZHRoIDw9IDAgfHwgdGl0bGVGcmFtZS5z
aXplLmhlaWdodCA8PSAwKQogICAgICAgICAgICAgdGl0bGVGcmFtZSA9IHJlY3Q7CiAgICAgICAg
IGZsb2F0IHZlcnRpY2FsT2Zmc2V0ID0gcm91bmRmKChOU01heFkocmVjdCkgLSBOU01heFkodGl0
bGVGcmFtZSkpICsgTlNIZWlnaHQodGl0bGVGcmFtZSkpICsgMTsKLSAgICAgICAgaWYgKHRleHRE
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAodGV4dERpcmVjdGlv
biA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgIGxvY2F0aW9uID0gTlNN
YWtlUG9pbnQoTlNNaW5YKHJlY3QpICsgcG9wT3Zlckhvcml6b250YWxBZGp1c3QsIE5TTWF4WShy
ZWN0KSAtIHZlcnRpY2FsT2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9jYXRp
b24gPSBOU01ha2VQb2ludChOU01heFgocmVjdCkgLSBwb3BPdmVySG9yaXpvbnRhbEFkanVzdCwg
TlNNYXhZKHJlY3QpIC0gdmVydGljYWxPZmZzZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
ICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKHRleHRE
aXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBsb2NhdGlv
biA9IE5TTWFrZVBvaW50KE5TTWluWChyZWN0KSArIHBvcFVuZGVySG9yaXpvbnRhbEFkanVzdCwg
TlNNYXhZKHJlY3QpICsgcG9wVW5kZXJWZXJ0aWNhbEFkanVzdCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGxvY2F0aW9uID0gTlNNYWtlUG9pbnQoTlNNYXhYKHJlY3QpIC0gcG9wVW5kZXJI
b3Jpem9udGFsQWRqdXN0LCBOU01heFkocmVjdCkgKyBwb3BVbmRlclZlcnRpY2FsQWRqdXN0KTsK
ICAgICB9CiAgICAgUmV0YWluUHRyPE5TVmlldz4gZHVtbXlWaWV3ID0gYWRvcHROUyhbW05TVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpyZWN0XSk7Ci0gICAgW2R1bW15Vmlldy5nZXQoKSBzZXRV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlv
bjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1Vz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CisgICAgW2R1bW15Vmlldy5n
ZXQoKSBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0
VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKICAg
ICBbbV93ZWJWaWV3IGFkZFN1YnZpZXc6ZHVtbXlWaWV3LmdldCgpXTsKICAgICBsb2NhdGlvbiA9
IFtkdW1teVZpZXcgY29udmVydFBvaW50OmxvY2F0aW9uIGZyb21WaWV3Om1fd2ViVmlld107CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggYzdjZjU4NzVjOTQzYjc5MTkyYWViZDI4NjIzYjJi
MWJjNzQ3ZGNjNS4uMjcyMTA1ZTIzOTQ3ZDM4ZTgyY2Y1MTc3ODUzYTBhOGI2MzNmNzE3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTcxMSw3ICs3MTEsNyBAQCB2b2lkIFdlYkNocm9tZUNs
aWVudDo6dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKEVsZW1lbnQmIGVsZW1lbnQsIFJl
bmRlckVtYgogICAgIFVOVVNFRF9QQVJBTShwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbik7CiB9
CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBI
aXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25z
dCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJlY3Rpb24pCit2b2lkIFdlYkNocm9tZUNsaWVudDo6
bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3Vs
dCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBQQUw6OlRl
eHREaXJlY3Rpb24pCiB7CiAgICAgUmVmUHRyPEFQSTo6T2JqZWN0PiB1c2VyRGF0YTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oCmluZGV4IGRhNWFjZDEzOTVjYzkyNDA4ZmZkY2MyYTAyYjgzMTEyODY4Zjk2
N2UuLjgwYTY1ZmE3NzNlZDU0MjY1YTg4MWJlOGQ0YzI3Yzc4YjkzMWY5M2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmgKQEAgLTE0MSw3ICsxNDEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkVW5h
dmFpbGFibGVQbHVnaW5NZXNzYWdlQmVCdXR0b24oV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHVu
YXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChXZWJDb3JlOjpFbGVtZW50JiwgV2ViQ29yZTo6
UmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSBjb25zdCBm
aW5hbDsKIAotICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9v
bFRpcCwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbikgZmluYWw7CisgICAgdm9pZCBtb3VzZURpZE1v
dmVPdmVyRWxlbWVudChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9k
aWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBQQUw6OlRleHREaXJlY3Rpb24pIGZp
bmFsOwogCiAgICAgdm9pZCBwcmludChXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlN0
cmluZ1dpdGhEaXJlY3Rpb24mKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA5NDJlZGM2MjNhNGU2NTNiYjE4OGFlZTA1MDY0NGEz
ZjRhMDMyZTg5Li5iNjUzYzExYjIxYmQ5MmI5YjM5NjNmYjE1MjYzY2VhMmI0ZDQyZWFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzk2NSw3
ICszOTY1LDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVm
ZXJlbmNlc1N0b3JlJiBzdG9yZSkKICAgICBzZXR0aW5ncy5zZXRWaWRlb1BsYXliYWNrUmVxdWly
ZXNVc2VyR2VzdHVyZShyZXF1aXJlc1VzZXJHZXN0dXJlRm9yTWVkaWEgfHwgc3RvcmUuZ2V0Qm9v
bFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpyZXF1aXJlc1VzZXJHZXN0dXJlRm9yVmlk
ZW9QbGF5YmFja0tleSgpKSk7CiAgICAgc2V0dGluZ3Muc2V0QXVkaW9QbGF5YmFja1JlcXVpcmVz
VXNlckdlc3R1cmUocmVxdWlyZXNVc2VyR2VzdHVyZUZvck1lZGlhIHx8IHN0b3JlLmdldEJvb2xW
YWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6cmVxdWlyZXNVc2VyR2VzdHVyZUZvckF1ZGlv
UGxheWJhY2tLZXkoKSkpOwogICAgIHNldHRpbmdzLnNldFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Q
b2xpY3koc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeT4o
c3RvcmUuZ2V0VUludDMyVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnVzZXJJbnRlcmZh
Y2VEaXJlY3Rpb25Qb2xpY3lLZXkoKSkpKTsKLSAgICBzZXR0aW5ncy5zZXRTeXN0ZW1MYXlvdXRE
aXJlY3Rpb24oc3RhdGljX2Nhc3Q8VGV4dERpcmVjdGlvbj4oc3RvcmUuZ2V0VUludDMyVmFsdWVG
b3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnN5c3RlbUxheW91dERpcmVjdGlvbktleSgpKSkpOwor
ICAgIHNldHRpbmdzLnNldFN5c3RlbUxheW91dERpcmVjdGlvbihzdGF0aWNfY2FzdDxQQUw6OlRl
eHREaXJlY3Rpb24+KHN0b3JlLmdldFVJbnQzMlZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5
OjpzeXN0ZW1MYXlvdXREaXJlY3Rpb25LZXkoKSkpKTsKICAgICBzZXR0aW5ncy5zZXRKYXZhU2Ny
aXB0UnVudGltZUZsYWdzKHN0YXRpY19jYXN0PFJ1bnRpbWVGbGFncz4oc3RvcmUuZ2V0VUludDMy
VmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmphdmFTY3JpcHRSdW50aW1lRmxhZ3NLZXko
KSkpKTsKICAgICBzZXR0aW5ncy5zZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koc3RhdGljX2Nhc3Q8
U3RvcmFnZUJsb2NraW5nUG9saWN5PihzdG9yZS5nZXRVSW50MzJWYWx1ZUZvcktleShXZWJQcmVm
ZXJlbmNlc0tleTo6c3RvcmFnZUJsb2NraW5nUG9saWN5S2V5KCkpKSk7CiAgICAgc2V0dGluZ3Mu
c2V0RnJhbWVGbGF0dGVuaW5nKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNl
c0tleTo6ZnJhbWVGbGF0dGVuaW5nRW5hYmxlZEtleSgpKSA/IFdlYkNvcmU6OkZyYW1lRmxhdHRl
bmluZzo6RnVsbHlFbmFibGVkIDogV2ViQ29yZTo6RnJhbWVGbGF0dGVuaW5nOjpEaXNhYmxlZCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCmluZGV4IDA2ZDU1ZjEwODdjYTQwMmM5NTVlYTViNTgyMTQ3MzQwMjExNDAwZjAuLmE1Yjlk
OTg5MTQxNWZlYzJhNjgyNzAyNTdmYmFkODcxNmMyZDYzYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0zMjc2LDcgKzMy
NzYsNyBAQCBzdGQ6Om9wdGlvbmFsPEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24+IFdlYlBhZ2U6
OmZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24oKQogICAgICAgICBib29sIGluRml4ZWQgPSBmYWxz
ZTsKICAgICAgICAgcmVuZGVyZXItPmxvY2FsVG9Db250YWluZXJQb2ludChGbG9hdFBvaW50KCks
IG51bGxwdHIsIFVzZVRyYW5zZm9ybXMsICZpbkZpeGVkKTsKICAgICAgICAgaW5mb3JtYXRpb24u
aW5zaWRlRml4ZWRQb3NpdGlvbiA9IGluRml4ZWQ7Ci0gICAgICAgIGluZm9ybWF0aW9uLmlzUlRM
ID0gcmVuZGVyZXItPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMOwor
ICAgICAgICBpbmZvcm1hdGlvbi5pc1JUTCA9IHJlbmRlcmVyLT5zdHlsZSgpLmRpcmVjdGlvbigp
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOwogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggMjE0ZTU3MWMwNzU4NmQzMjIyZTlhODZm
YjhmZjQ4Y2FhNjkwMTVjNy4uY2JlZDAyMGZlYjA4Y2U4ZjIyY2ZiZmM1NDY0NGZiMjlkYThjMjIx
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVJT1MubW0KQEAgLTIwOSw3ICsyMDksNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rp
b25HZW9tZXRyaWVzKHJhbmdlKSwgW10gKGF1dG8mIGdlb21ldHJ5KSB7CiAgICAgICAgIGF1dG8g
d2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVjdGlvblJlY3RdOwogICAgICAgICB3ZWJS
ZWN0LnJlY3QgPSBnZW9tZXRyeS5yZWN0KCk7Ci0gICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVj
dGlvbiA9IGdlb21ldHJ5LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IFdLV3Jp
dGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7
CisgICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGdlb21ldHJ5LmRpcmVjdGlvbigp
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmln
aHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKICAgICAgICAgd2ViUmVjdC5pc0xp
bmVCcmVhayA9IGdlb21ldHJ5LmlzTGluZUJyZWFrKCk7CiAgICAgICAgIHdlYlJlY3QuaXNGaXJz
dE9uTGluZSA9IGdlb21ldHJ5LmlzRmlyc3RPbkxpbmUoKTsKICAgICAgICAgd2ViUmVjdC5pc0xh
c3RPbkxpbmUgPSBnZW9tZXRyeS5pc0xhc3RPbkxpbmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5t
bQppbmRleCAyM2M3ZDMzOTY1OWNlNTM2NjkwYWJjMGZjY2M5YTVmZGFhNDJmMWEzLi4xOTUyMzU5
OTE0YTExYWRiM2IzNmMwNmM4NTExMzM1MDc4MTRjMTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9u
Lm1tCkBAIC0xMjcsMTAgKzEyNywxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIH0KIAog
Ci0tIChUZXh0RGlyZWN0aW9uKXRleHREaXJlY3Rpb24KKy0gKFBBTDo6VGV4dERpcmVjdGlvbil0
ZXh0RGlyZWN0aW9uCiB7CiAgICAgLy8gVE9ETzogaW1wbGVtZW50Ci0gICAgcmV0dXJuIFRleHRE
aXJlY3Rpb246OkxUUjsKKyAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiB9CiAK
IC0gKEJPT0wpZGlyZWN0aW9uSXNEb3duc3RyZWFtOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlv
bilkaXJlY3Rpb24KQEAgLTE0Miw3ICsxNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
ICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAKICAgICAKLSAgICBpZiAoW3NlbGYgdGV4dERpcmVj
dGlvbl0gPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgIGlmIChbc2VsZiB0ZXh0RGlyZWN0aW9u
XSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgcmV0dXJuIChkaXJlY3Rpb24g
PT0gV2ViVGV4dEFkanVzdG1lbnRSaWdodCk7CiAgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gV2Vi
VGV4dEFkanVzdG1lbnRMZWZ0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
aW9zL1dlYlZpZXcvV2ViUERGVmlld0lPUy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dl
YlZpZXcvV2ViUERGVmlld0lPUy5tbQppbmRleCAzZWQ0MmRkMGM1M2Y2NzNhZTQ1ZjJlNzQxYTE3
NjQ2MzQwMzBhNjYxLi5iY2RkZDMyOTZiMmU3NjhkNGNlMWE4ZjA4ZWQ1MDg3YmJiZmM2OTA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJWaWV3L1dlYlBERlZpZXdJT1Mu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViVmlldy9XZWJQREZWaWV3SU9TLm1t
CkBAIC0yOTcsNyArMjk3LDcgQEAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjcmVhdGVD
R0NvbG9yV2l0aERldmljZVdoaXRlKENHRmxvYXQgd2hpdGUsIENHRmxvYXQKIAogICAgIGlmICh0
aXRsZSAmJiBDRlN0cmluZ0dldExlbmd0aCh0aXRsZS5nZXQoKSkpIHsKICAgICAgICAgX3RpdGxl
ID0gKE5TU3RyaW5nICopdGl0bGUuZ2V0KCk7Ci0gICAgICAgIGNvcmUoW3NlbGYgX2ZyYW1lXSkt
PmxvYWRlcigpLmNsaWVudCgpLmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKHsgX3RpdGxlLmdldCgp
LCBUZXh0RGlyZWN0aW9uOjpMVFIgfSk7CisgICAgICAgIGNvcmUoW3NlbGYgX2ZyYW1lXSktPmxv
YWRlcigpLmNsaWVudCgpLmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKHsgX3RpdGxlLmdldCgpLCBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUiB9KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tCmluZGV4IDAyNjRi
NTdjMjNlMmI3Y2M4ODdiOWQ2MGEyNTZmMTc3OGEzYWI0ZmMuLmE5NWZjYzljNjFhMGI3ZTE0N2Vj
YzNhNjRiMGViZTVmMTQzZTQ3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L01pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbQpAQCAtMTk5LDcgKzE5OSw3IEBAIHN0YXRp
YyBOU1N0cmluZyogTlNTdHJpbmdPck5pbChTdHJpbmcgY29yZVN0cmluZykKIAogLSAoTlNTdHJp
bmcgKilfc3BlbGxpbmdUb29sVGlwCiB7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXI7CisgICAgUEFM
OjpUZXh0RGlyZWN0aW9uIGRpcjsKICAgICByZXR1cm4gTlNTdHJpbmdPck5pbChfcmVzdWx0LT5z
cGVsbGluZ1Rvb2xUaXAoZGlyKSk7CiB9CiAKQEAgLTIzNiw3ICsyMzYsNyBAQCBzdGF0aWMgTlNT
dHJpbmcqIE5TU3RyaW5nT3JOaWwoU3RyaW5nIGNvcmVTdHJpbmcpCiAKIC0gKE5TU3RyaW5nICop
X3RpdGxlCiB7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXI7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9u
IGRpcjsKICAgICByZXR1cm4gTlNTdHJpbmdPck5pbChfcmVzdWx0LT50aXRsZShkaXIpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvUG9w
dXBNZW51TWFjLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvUG9w
dXBNZW51TWFjLm1tCmluZGV4IDNkZWIxMjVmNzkzZDhjMjZiOGU4MGIzZjgzN2I0ZjZjMDNiZWRj
NTMuLjZmYzExZjhmYWM0OTgzODgwZTNhYzBlOGVjNzEzYTgzOGUxNGI3ZmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMu
bW0KQEAgLTY4LDggKzY4LDggQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnBvcHVsYXRlKCkKICAgICBp
ZiAoIW1fY2xpZW50LT5zaG91bGRQb3BPdmVyKCkpCiAgICAgICAgIFttX3BvcHVwIGFkZEl0ZW1X
aXRoVGl0bGU6QCIiXTsKIAotICAgIFRleHREaXJlY3Rpb24gbWVudVRleHREaXJlY3Rpb24gPSBt
X2NsaWVudC0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpOwotICAgIFttX3BvcHVwIHNldFVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246bWVudVRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVj
dGlvbjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBO
U1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CisgICAgUEFMOjpUZXh0
RGlyZWN0aW9uIG1lbnVUZXh0RGlyZWN0aW9uID0gbV9jbGllbnQtPm1lbnVTdHlsZSgpLnRleHRE
aXJlY3Rpb24oKTsKKyAgICBbbV9wb3B1cCBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
Om1lbnVUZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb25SaWdodFRvTGVmdF07CiAKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGludCBz
aXplID0gbV9jbGllbnQtPmxpc3RTaXplKCk7CkBAIC05Miw4ICs5Miw4IEBAIHZvaWQgUG9wdXBN
ZW51TWFjOjpwb3B1bGF0ZSgpCiAgICAgICAgIH0KIAogICAgICAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlUGFyYWdyYXBoU3R5bGU+IHBhcmFncmFwaFN0eWxlID0gYWRvcHROUyhbW05TUGFyYWdyYXBo
U3R5bGUgZGVmYXVsdFBhcmFncmFwaFN0eWxlXSBtdXRhYmxlQ29weV0pOwotICAgICAgICBbcGFy
YWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Om1lbnVUZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rp
b246OkxUUiA/IE5TVGV4dEFsaWdubWVudExlZnQgOiBOU1RleHRBbGlnbm1lbnRSaWdodF07Ci0g
ICAgICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uID0gc3R5bGUudGV4dERp
cmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRU
b1JpZ2h0IDogTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAgICAgIFtwYXJhZ3Jh
cGhTdHlsZSBzZXRBbGlnbm1lbnQ6bWVudVRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgPyBOU1RleHRBbGlnbm1lbnRMZWZ0IDogTlNUZXh0QWxpZ25tZW50UmlnaHRdOwor
ICAgICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlvbiA9IHN0eWxlLnRleHRE
aXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5TV3JpdGluZ0RpcmVjdGlv
bkxlZnRUb1JpZ2h0IDogTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAgIFtw
YXJhZ3JhcGhTdHlsZSBzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjp3cml0aW5nRGlyZWN0aW9uXTsK
ICAgICAgICAgaWYgKHN0eWxlLmhhc1RleHREaXJlY3Rpb25PdmVycmlkZSgpKSB7CiAgICAgICAg
ICAgICBSZXRhaW5QdHI8TlNOdW1iZXI+IHdyaXRpbmdEaXJlY3Rpb25WYWx1ZSA9IGFkb3B0TlMo
W1tOU051bWJlciBhbGxvY10gaW5pdFdpdGhJbnRlZ2VyOndyaXRpbmdEaXJlY3Rpb24gKyBOU1dy
aXRpbmdEaXJlY3Rpb25PdmVycmlkZV0pOwpAQCAtMTQzLDE0ICsxNDMsMTQgQEAgdm9pZCBQb3B1
cE1lbnVNYWM6OnNob3coY29uc3QgSW50UmVjdCYgciwgRnJhbWVWaWV3KiB2LCBpbnQgc2VsZWN0
ZWRJbmRleCkKIAogICAgIE5TVmlldyogdmlldyA9IHYtPmRvY3VtZW50VmlldygpOwogCi0gICAg
VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gbV9jbGllbnQtPm1lbnVTdHlsZSgpLnRleHRE
aXJlY3Rpb24oKTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IG1fY2xp
ZW50LT5tZW51U3R5bGUoKS50ZXh0RGlyZWN0aW9uKCk7CiAKICAgICBbbV9wb3B1cCBhdHRhY2hQ
b3BVcFdpdGhGcmFtZTpyIGluVmlldzp2aWV3XTsKICAgICBbbV9wb3B1cCBzZWxlY3RJdGVtQXRJ
bmRleDpzZWxlY3RlZEluZGV4XTsKLSAgICBbbV9wb3B1cCBzZXRVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb25SaWdodFRvTGVmdF07CisgICAgW21fcG9wdXAgc2V0VXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CiAKICAgICBOU01lbnUgKm1lbnUgPSBbbV9wb3B1
cCBtZW51XTsKLSAgICBbbWVudSBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHRE
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRv
TGVmdF07CisgICAgW21lbnUgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGly
ZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdo
dFRvTGVmdF07CiAKICAgICBOU1BvaW50IGxvY2F0aW9uOwogICAgIENURm9udFJlZiBmb250ID0g
bV9jbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwpA
QCAtMTY4LDEyICsxNjgsMTIgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnNob3coY29uc3QgSW50UmVj
dCYgciwgRnJhbWVWaWV3KiB2LCBpbnQgc2VsZWN0ZWRJbmRleCkKICAgICAgICAgYXV0byBkZWZh
dWx0Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlVUlGb250Rm9yTGFuZ3VhZ2Uoa0NURm9udFVJ
Rm9udFN5c3RlbSwgQ1RGb250R2V0U2l6ZShmb250KSwgbmlsKSk7CiAgICAgICAgIHZlcnRPZmZz
ZXQgKz0gQ1RGb250R2V0RGVzY2VudChmb250KSAtIENURm9udEdldERlc2NlbnQoZGVmYXVsdEZv
bnQuZ2V0KCkpOwogICAgICAgICB2ZXJ0T2Zmc2V0ID0gZm1pbmYoTlNIZWlnaHQociksIHZlcnRP
ZmZzZXQpOwotICAgICAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIp
CisgICAgICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQog
ICAgICAgICAgICAgbG9jYXRpb24gPSBOU01ha2VQb2ludChOU01pblgocikgKyBwb3BPdmVySG9y
aXpvbnRhbEFkanVzdCwgTlNNYXhZKHIpIC0gdmVydE9mZnNldCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGxvY2F0aW9uID0gTlNNYWtlUG9pbnQoTlNNYXhYKHIpIC0gcG9wT3Zlckhvcml6
b250YWxBZGp1c3QsIE5TTWF4WShyKSAtIHZlcnRPZmZzZXQpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYg
KHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBs
b2NhdGlvbiA9IE5TTWFrZVBvaW50KE5TTWluWChyKSArIHBvcFVuZGVySG9yaXpvbnRhbEFkanVz
dCwgTlNNYXhZKHIpICsgcG9wVW5kZXJWZXJ0aWNhbEFkanVzdCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGxvY2F0aW9uID0gTlNNYWtlUG9pbnQoTlNNYXhYKHIpIC0gcG9wVW5kZXJIb3Jp
em9udGFsQWRqdXN0LCBOU01heFkocikgKyBwb3BVbmRlclZlcnRpY2FsQWRqdXN0KTsKQEAgLTE4
Niw3ICsxODYsNyBAQCB2b2lkIFBvcHVwTWVudU1hYzo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBG
cmFtZVZpZXcqIHYsIGludCBzZWxlY3RlZEluZGV4KQogICAgIFJlZjxQb3B1cE1lbnVNYWM+IHBy
b3RlY3RvcigqdGhpcyk7CiAKICAgICBSZXRhaW5QdHI8TlNWaWV3PiBkdW1teVZpZXcgPSBhZG9w
dE5TKFtbTlNWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnJdKTsKLSAgICBbZHVtbXlWaWV3Lmdl
dCgpIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBUZXh0
RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdo
dCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKKyAgICBbZHVt
bXlWaWV3LmdldCgpIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlv
biA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xl
ZnRdOwogICAgIFt2aWV3IGFkZFN1YnZpZXc6ZHVtbXlWaWV3LmdldCgpXTsKICAgICBsb2NhdGlv
biA9IFtkdW1teVZpZXcgY29udmVydFBvaW50OmxvY2F0aW9uIGZyb21WaWV3OnZpZXddOwogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAppbmRleCA4MjIzNzhmNDA2M2YwYmFmMzA0OGNkMzAwY2E2NDIyMjgz
ZGU4MGI5Li5kYWY1MzJkMGVkY2IxMDY4YjcwOGQzYzU2YmI0YWI4MmQ2ZTU3YjJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaApAQCAtMTE4LDcgKzExOCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3Vs
ZFVuYXZhaWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVk
T2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgZmluYWw7CiAgICAgdm9p
ZCB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoV2ViQ29yZTo6RWxlbWVudCYsIFdlYkNv
cmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29u
c3QgZmluYWw7Ci0gICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiwg
V2ViQ29yZTo6VGV4dERpcmVjdGlvbikgZmluYWw7CisgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVy
RWxlbWVudChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJG
bGFncywgY29uc3QgU3RyaW5nJiwgUEFMOjpUZXh0RGlyZWN0aW9uKSBmaW5hbDsKIAogICAgIHZv
aWQgc2V0VG9vbFRpcChjb25zdCBTdHJpbmcmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4IDM2
MzRmN2E2MDIxNDYxOWVjZmVhZjBhZWQ5ZWJmY2U3MjEwZjFhMWEuLjQ5ZTM3YWZkMDVhYmYxZjUw
OWZhZjY5ODZmM2JkMGYzZTIxMzA5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTYzNCw3ICs2
MzQsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlj
a2VkKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlckVtYgogICAgIENhbGxVSURlbGVnYXRlKG1fd2Vi
VmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkUHJlc3NNaXNzaW5nUGx1Z2luQnV0dG9uOiksIGtp
dCgmZWxlbWVudCkpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllckZs
YWdzLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJlY3Rpb24pCit2b2lkIFdlYkNocm9t
ZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIFBBTDo6
VGV4dERpcmVjdGlvbikKIHsKICAgICBhdXRvIGVsZW1lbnQgPSBhZG9wdE5TKFtbV2ViRWxlbWVu
dERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpyZXN1bHRdKTsKICAgICBb
bV93ZWJWaWV3IF9tb3VzZURpZE1vdmVPdmVyRWxlbWVudDplbGVtZW50LmdldCgpIG1vZGlmaWVy
RmxhZ3M6bW9kaWZpZXJGbGFnc107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCmluZGV4IDQz
ZTYzZjQ1NjM0NWVjZjFjOTI0ZTViNzcyYTZmNTQxNzNhOTE0MmIuLmMzYjRmYzBmNDMyMzQ0Nzdm
Y2MxMTkzNTI0YzcwNTYzY2IzZWNlNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCkBA
IC0xNDY1LDcgKzE0NjUsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9u
VG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKICAgICAvLyBsaWtlIHRoZSBvbmVzIHRoYXQgU2FmYXJp
IHVzZXMgZm9yIGJvb2ttYXJrcyBpdCBpcyB0aGUgb25seSB3YXkgdGhlIERvY3VtZW50TG9hZGVy
CiAgICAgLy8gd2lsbCBnZXQgdGhlIHByb3BlciB0aXRsZS4KICAgICBpZiAoYXV0byBkb2N1bWVu
dExvYWRlciA9IFtkYXRhU291cmNlIF9kb2N1bWVudExvYWRlcl0pCi0gICAgICAgIGRvY3VtZW50
TG9hZGVyLT5zZXRUaXRsZSh7IFtkYXRhU291cmNlIHBhZ2VUaXRsZV0sIFdlYkNvcmU6OlRleHRE
aXJlY3Rpb246OkxUUiB9KTsKKyAgICAgICAgZG9jdW1lbnRMb2FkZXItPnNldFRpdGxlKHsgW2Rh
dGFTb3VyY2UgcGFnZVRpdGxlXSwgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgfSk7CiAKICAgICBp
ZiAoYXV0byogb3duZXJFbGVtZW50ID0gY29yZUZyYW1lLT5vd25lckVsZW1lbnQoKSkKICAgICAg
ICAgY29yZUZyYW1lLT52aWV3KCktPnNldENhbkhhdmVTY3JvbGxiYXJzKG93bmVyRWxlbWVudC0+
c2Nyb2xsaW5nTW9kZSgpICE9IFdlYkNvcmU6OlNjcm9sbGJhck1vZGU6OkFsd2F5c09mZik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAwZTA1YjE4
ZDY5NjM5ODI4ZDQzM2M0NmQ3OTIxY2Y3MGRlN2RmOWQxLi45NjEyYmJiYjQ1NmE1M2MxN2FhMzdh
ODQ2ZGRlZjJhNTE2Nzk3MGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KQEAgLTIyNzIsNyArMjI3Miw3IEBAIHN0YXRpYyBXZWJGcmFtZUxvYWRUeXBl
IHRvV2ViRnJhbWVMb2FkVHlwZShXZWJDb3JlOjpGcmFtZUxvYWRUeXBlIGZyYW1lTG9hZFR5cGUp
CiAgICAgYXV0byBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmICghY29y
ZUZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgY29yZUZyYW1lLT5sb2FkZXIoKS5jbGllbnQo
KS5kaXNwYXRjaERpZFJlY2VpdmVUaXRsZSh7IHRpdGxlLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9u
OjpMVFIgfSk7CisgICAgY29yZUZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaXNwYXRjaERpZFJl
Y2VpdmVUaXRsZSh7IHRpdGxlLCBQQUw6OlRleHREaXJlY3Rpb246OkxUUiB9KTsKIH0KIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmUwZTYyMDQ2YTY0NzZhMWYyNTJkZTk5ZTRmNDcxMDA3
YmRiOTRhNS4uYjg2ZWQzOWRmMDgzZDQ3NjlhMzc3NmE2ZTU2NzZkYTIzNDIzYTYzMiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDIxLTEyLTI3ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBCaWRpUmVzb2x2ZXIgdG8gUEFMCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ3MTcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5OgorICAgICAgICAoY2hlY2tfbGFuZ3VhZ2UpOgorICAgICAgICAoY2hlY2tf
aWRlbnRpZmllcl9uYW1lX2luX2RlY2xhcmF0aW9uKToKKwogMjAyMS0xMi0yNiAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bYTExeV0g
U3RvcCBzZXR0aW5nIG1hbmFnZXMtZGVzY2VuZGFudHMgb24gd2ViIHByb2Nlc3Mgcm9vdCBvYmpl
Y3Qgd2l0aCBBVFNQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2Vycy9jcHAucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2Nw
cC5weQppbmRleCA0ZGZlNzc5YTcwMTM0ZjZiYzJjZmJiNTE5Y2Y2NDY2MzAyM2M1ZDRhLi5jNWU3
NDhmNGNkZjllNWY1NTVlMGM1Mjg1OTFkMzhkY2JmNmRkMTlmIDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQpAQCAtMjUwMyw3ICsyNTAzLDcgQEAgZGVm
IGNoZWNrX25hbWVzcGFjZV9pbmRlbnRhdGlvbihjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZp
bGVfZXh0ZW5zaW9uLCBmaWxlX3MKIAogCiAjIEVudW0gZGVjbGFyYXRpb24gYWxsb3dsaXN0Ci1f
QUxMT1dfQUxMX1VQUEVSQ0FTRV9FTlVNID0gWydKU1Rva2VuVHlwZScsICdNZXJpZGllbSddCitf
QUxMT1dfQUxMX1VQUEVSQ0FTRV9FTlVNID0gWydKU1Rva2VuVHlwZScsICdNZXJpZGllbScsICdU
ZXh0RGlyZWN0aW9uJ10KIAogCiBkZWYgY2hlY2tfZW51bV9jYXNpbmcoY2xlYW5fbGluZXMsIGxp
bmVfbnVtYmVyLCBlbnVtX3N0YXRlLCBlcnJvcik6CkBAIC0zOTU1LDcgKzM5NTUsNyBAQCBkZWYg
Y2hlY2tfbGFuZ3VhZ2UoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9l
eHRlbnNpb24sIGluY2x1ZGVfcwogICAgIG1hdGNoZWQgPSByZS5tYXRjaChyJ1xzKigoY29uc3R8
bXV0YWJsZSlccyspPyhbYS16QS1aX11bYS16QS1aMC05X10qKVxzK1thLXpBLVpfXVthLXpBLVow
LTlfXSpccyo6XHMqXGQrXHMqOycsIGxpbmUpCiAgICAgaWYgbWF0Y2hlZDoKICAgICAgICAgIyBN
YWtlIHN1cmUgdGhlIHR5cGUgaXMgYW4gZW51bSBhbmQgbm90IGFuIGludGVncmFsIHR5cGUKLSAg
ICAgICAgaWYgbm90IG1hdGNoKHInYm9vbHxjaGFyfChzaG9ydChccytpbnQpPyl8aW50fGxvbmco
XHMrKGxvbmd8aW50KSl8KHNpZ25lZHx1bnNpZ25lZCkoXHMraW50KT8nLCBtYXRjaGVkLmdyb3Vw
KDMpKToKKyAgICAgICAgaWYgbm90IG1hdGNoKHInYm9vbHxjaGFyfChzaG9ydChccytpbnQpPyl8
aW50fHU/aW50KDh8MTZ8MzJ8NjQpX3R8bG9uZyhccysobG9uZ3xpbnQpKXwoc2lnbmVkfHVuc2ln
bmVkKShccytpbnQpPycsIG1hdGNoZWQuZ3JvdXAoMykpOgogICAgICAgICAgICAgZXJyb3IobGlu
ZV9udW1iZXIsICdydW50aW1lL2VudW1fYml0ZmllbGRzJywgNSwKICAgICAgICAgICAgICAgICAg
ICdQbGVhc2UgZGVjbGFyZSBlbnVtIGJpdGZpZWxkcyBhcyB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBl
cy4nKQogCkBAIC00MTIwLDYgKzQxMjAsMTAgQEAgZGVmIGNoZWNrX2lkZW50aWZpZXJfbmFtZV9p
bl9kZWNsYXJhdGlvbihmaWxlbmFtZSwgbGluZV9udW1iZXIsIGxpbmUsIGZpbGVfc3RhdGUKICAg
ICAgICAgICAgICAgICBhbmQgbm90IG1vZGlmaWVkX2lkZW50aWZpZXIgPT0gIkRGR19PUEVSQVRJ
T04iCiAgICAgICAgICAgICAgICAgYW5kIG5vdCBtb2RpZmllZF9pZGVudGlmaWVyID09ICJMT0df
Q0hBTk5FTCIKICAgICAgICAgICAgICAgICBhbmQgbm90IG1vZGlmaWVkX2lkZW50aWZpZXIgPT0g
IldURl9HVUFSREVEX0JZX0xPQ0siCisgICAgICAgICAgICAgICAgYW5kIG5vdCBtb2RpZmllZF9p
ZGVudGlmaWVyID09ICJVX0ZJUlNUX1NUUk9OR19JU09MQVRFIgorICAgICAgICAgICAgICAgIGFu
ZCBub3QgbW9kaWZpZWRfaWRlbnRpZmllciA9PSAiVV9MRUZUX1RPX1JJR0hUX0lTT0xBVEUiCisg
ICAgICAgICAgICAgICAgYW5kIG5vdCBtb2RpZmllZF9pZGVudGlmaWVyID09ICJVX1JJR0hUX1RP
X0xFRlRfSVNPTEFURSIKKyAgICAgICAgICAgICAgICBhbmQgbm90IG1vZGlmaWVkX2lkZW50aWZp
ZXIgPT0gIlVfUE9QX0RJUkVDVElPTkFMX0lTT0xBVEUiCiAgICAgICAgICAgICAgICAgYW5kIG5v
dCBtb2RpZmllZF9pZGVudGlmaWVyLmZpbmQoJ2Nocm9ub19saXRlcmFscycpID49IDApOgogICAg
ICAgICAgICAgICAgIGVycm9yKGxpbmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvbmFtaW5nL3VuZGVy
c2NvcmVzJywgNCwgaWRlbnRpZmllciArICIgaXMgaW5jb3JyZWN0bHkgbmFtZWQuIERvbid0IHVz
ZSB1bmRlcnNjb3JlcyBpbiB5b3VyIGlkZW50aWZpZXIgbmFtZXMuIikKIAo=
</data>
<flag name="commit-queue"
          id="473820"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448033</attachid>
            <date>2021-12-27 22:11:17 -0800</date>
            <delta_ts>2021-12-28 08:27:53 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-234717-20211227221116.patch</filename>
            <type>text/plain</type>
            <size>404642</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhmMzI4OGU4ODRmODcw
M2EyMjNmOGVjZDQ5N2Y0N2ViNGFhZDVkZS4uMWQyYzc2OGFiYmQ1YzE4NjIyYTE4NmRmOTIyOTEz
YzcwNGYwMzk0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5NSBAQAorMjAyMS0xMi0yNyAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQmlk
aVJlc29sdmVyIHRvIFBBTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM0NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdl
LgorCisgICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZWxl
bWVudFBhdGggY29uc3QpOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6
RVVuaWNvZGVCaWRpIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVl
OjpvcGVyYXRvciBQQUw6OlRleHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEVVbmljb2RlQmlkaSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgVGV4dERpcmVj
dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5Lmg6CisgICAg
ICAgICogY3NzL21ha2Vwcm9wLnBsOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlVGl0bGVGcm9tVGl0bGVFbGVtZW50KToKKyAg
ICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Omlu
bGluZVJ1bkFuZE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJp
bWFyeURpcmVjdGlvbiBjb25zdCk6CisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6CisgICAgICAg
ICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpcmVjdGlvbk9mRW5j
bG9zaW5nQmxvY2spOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YmFzZVdyaXRpbmdE
aXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6ZGlyZWN0
aW9uT2ZFbmNsb3NpbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
ZGlyZWN0aW9uT2ZTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OndpbGxCZU1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2Rp
ZnlFeHRlbmRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5RXh0ZW5kaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
bW9kaWZ5TW92aW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1v
ZGlmeUV4dGVuZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1v
ZGlmeUV4dGVuZGluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
Ojptb2RpZnlNb3ZpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp0
ZXh0U2VsZWN0aW9uSW50ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpt
b2RpZnkpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9z
aXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zm
c2V0IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oOgorICAgICAg
ICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc3VhbFdv
cmRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0V29yZFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJpZ2h0V29yZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmxlZnRC
b3VuZGFyeU9mTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpyaWdodEJvdW5kYXJ5T2ZMaW5lKToK
KyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5oOgorICAgICAgICAqIGh0bWwvQmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGlt
ZUlucHV0VHlwZTo6c2V0dXBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpkaXJl
Y3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Y2FsY3VsYXRlQW5k
QWRqdXN0RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXJlY3Rpb25Gb3JGb3JtRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6YWRq
dXN0SW5uZXJUZXh0U3R5bGUgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50Ojpjb21wdXRlZFRleHRX
aXRoRGlyZWN0aW9uKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0
b1RleHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6bWVhc3VyZVRleHRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjp0ZXh0T2Zmc2V0KToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg6CisgICAgICAgICogaHRt
bC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJbm5l
ckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lSXRlbXNCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6aGFuZGxlRW50ZXJFeGl0QmlkaUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpidWlsZEJpZGlQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtc0J1aWxkZXI6OmJyZWFrQW5kQ29tcHV0ZUJpZGlMZXZlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUJveFN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbXNCdWlsZGVyOjpoYW5k
bGVJbmxpbmVCb3hFbmQpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5s
aW5lL0lubGluZUxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6UnVuOjpp
bmxpbmVEaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9Jbmxp
bmVJdGVyYXRvckJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6
ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6
OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAq
IGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0IGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9yU3R5
bGUpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0No
cm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6Om1vdXNlRGlkTW92ZU92ZXJFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6Z2V0VG9vbFRpcCk6CisgICAgICAgICog
cGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhZ2luYXRpb25Nb2RlRm9y
UmVuZGVyU3R5bGUpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MueWFtbDoKKyAgICAgICAgKiBw
YWdlL1NldHRpbmdzQmFzZS5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBP
ZmZzZXRzSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpheGVzRmxpcHBlZEZvcldyaXRpbmdN
b2RlQW5kRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNuYXBPZmZzZXRzRm9y
U2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5oOgorICAgICAgICAqIHBsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmg6CisgICAgICAg
IChXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UG9wdXBNZW51U3R5bGU6OnRleHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL1JlY3RFZGdlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzdGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWN0RWRnZXM6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6ZW5k
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6c2V0U3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzZXRFbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0eSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjp3aWR0aEZvclNp
bXBsZVRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2Fk
ZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZTo6bGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlOjpyaWdodEV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdC
aWRpVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRS
ZWN0c0Zvck91dGxpbmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRp
ZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0UnVuOjpUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OmRp
cmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpydGwgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6bHRyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRSdW46OnNldERpcmVjdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFwcGx5SW5pdGlhbEFk
dmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjphcHBseVRyYW5zZm9ybXMgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeTo6U2VsZWN0aW9uR2VvbWV0cnkpOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uR2VvbWV0cnk6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25HZW9tZXRyeTo6c2V0RGlyZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0
cmluZ1dpdGhEaXJlY3Rpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2Rl
Lmg6CisgICAgICAgIChXZWJDb3JlOjptYWtlVGV4dEZsb3dJbml0YWxpemVyKToKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VUZXh0Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjppc1ZlcnRpY2FsV3Jp
dGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNGbGlwcGVkV3JpdGluZ01vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJD
b3JlOjptYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
QmlkaVJ1bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuOjpCaWRpUnVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZGlSdW46OnRha2VOZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQmlk
aVJ1bi5oOgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1bjo6bmV4dCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dDo6c3BlbGxpbmdUb29sVGlwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1
bHQ6OnRpdGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmlubmVy
VGV4dElmVHJ1bmNhdGVkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUJveFBhaW50ZXI6OnBhaW50RmlsbExheWVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxp
bmVCb3g6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVC
b3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lJbmxpbmVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6ZW1iZWRDaGFyRnJvbURp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlPYnNlcnZlckVudGVyZWRPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5T2JzZXJ2ZXJXaWxsRXhpdE9iamVjdCk6CisgICAg
ICAgIChQQUw6OldlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6aW5jcmVtZW50SW50ZXJuYWwp
OgorICAgICAgICAoUEFMOjpJc29sYXRlVHJhY2tlcjo6ZW1iZWQpOgorICAgICAgICAoUEFMOjpJ
c29sYXRlVHJhY2tlcjo6YWRkRmFrZVJ1bklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFBBTDo6V2Vi
Q29yZTo6SW5saW5lQmlkaVJlc29sdmVyOjphcHBlbmRSdW5JbnRlcm5hbCk6CisgICAgICAgIChQ
QUw6OldlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6bmVlZHNDb250aW51ZVBhc3RFbmRJbnRl
cm5hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6OmluY3Jl
bWVudEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVUcmFja2Vy
OjpJc29sYXRlVHJhY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlVHJh
Y2tlcjo6ZW50ZXJJc29sYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVU
cmFja2VyOjpleGl0SXNvbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6aW5Jc29sYXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklz
b2xhdGVUcmFja2VyOjplbWJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SXNvbGF0ZVRyYWNrZXI6OmFkZEZha2VSdW5JZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6bmVlZHNDb250
aW51ZVBhc3RFbmRJbnRlcm5hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L0xlZ2FjeUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lRGlyZWN0
aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVu
c0Zvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpyZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y29uc3RydWN0TGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojp0ZXh0QWxpZ25tZW50Rm9yTGluZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2Fs
V2lkdGhGb3JBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6
Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5TGluZUxheW91dDo6aGFuZGxlVHJhaWxpbmdTcGFjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkxlZ2FjeUxpbmVMYXlvdXQ6OmNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmRldGVybWluZVN0YXJ0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6ZGV0ZXJtaW5lRW5k
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6bWF0Y2hlZEVu
ZExpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5Um9vdElubGluZUJveDo6Y2hpbGRSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeVJvb3RJbmxpbmVCb3g6OmxpbmVCcmVha0JpZGlTdGF0dXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6c2V0TGluZUJyZWFrSW5mbyk6CisgICAgICAg
ICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lk
dGhSZXBsYWNlZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZyYWdtZW50ZWRGbG93Ojp1cGRhdGVMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRlZEZsb3c6OnVwZGF0ZUZyYWdtZW50c0ZyYWdt
ZW50ZWRGbG93UG9ydGlvblJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnNob3VsZFBsYWNlVmVydGljYWxTY3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
SXRlbTo6Y29tcHV0ZU1hcmtlclN0eWxlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpkaXJlY3Rp
b24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSk6CisgICAgICAg
IChSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQgY29uc3QpOgorICAgICAgICAoUmVu
ZGVyTWVudUxpc3Q6OmNsaWVudFBhZGRpbmdSaWdodCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNv
bGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzSW50ZXJuYWwpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwb3B1
cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1pcnJvclJUTFNlZ21lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5l
L0JyZWFraW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlTGluZUJveEluc2lk
ZUlnbm9yZWRTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0OjpoYW5k
bGVCUik6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZU91dE9mRmxv
d1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVF
bXB0eUlubGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWlsaW5nT2JqZWN0czo6dXBkYXRlV2hpdGVzcGFjZUNv
bGxhcHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6
Om1pcnJvcklmTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJh
dG9yOjpsYXlvdXRCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpSZW5kZXJTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6dXNlZENsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN0eWxlOjp1c2VkRmxvYXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnVuaWNvZGVCaWRpIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpkaXJlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldFVuaWNvZGVCaWRpKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXREaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6OmluaXRpYWxVbmljb2RlQmlkaSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTdHlsZTo6aW5pdGlhbERpcmVjdGlvbik6CisgICAgICAgICogc3R5bGUvRWxlbWVu
dFJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkVsZW1lbnRSdWxl
Q29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVsZUNvbGxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0b3I6Omlz
TGVmdFBhZ2UgY29uc3QpOgorICAgICAgICAqIHN0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0b3I6OlBhZ2VSdWxlQ29sbGVj
dG9yKToKKyAgICAgICAgKiBzdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaDoKKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFsU2V0dGluZ3MuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvb2xUaXBGcm9tRWxlbWVudCBjb25zdCk6
CisKIDIwMjEtMTItMjcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgRWxlbWVudDo6Ym91bmRpbmdBYnNvbHV0ZVJlY3RXaXRob3V0TGF5b3V0KCkgc2hv
dWxkIGJlIG1hcmtlZCBgY29uc3RgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCA0NTEyNGMzY2Y0OTlk
MzM5NTQ4Nzk3YWJlYjJkNjhmYjBmNDY5OTJkLi5iZmQyMGYxYjMwZTJhYjQ0MWM0M2VlMjk1ZTZh
ZTIyZTZiMjdiODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAyMS0x
Mi0yNyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAg
IE1vdmUgQmlkaVJlc29sdmVyIHRvIFBBTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBQQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBwYWwvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogcGFsL0xvZ2dpbmcuY3BwOgorICAg
ICAgICAqIHBhbC90ZXh0L0JpZGlDb250ZXh0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwLgorICAgICAgICAqIHBhbC90ZXh0L0Jp
ZGlDb250ZXh0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Jp
ZGlDb250ZXh0LmguCisgICAgICAgICogcGFsL3RleHQvQmlkaVJlc29sdmVyLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oLgorICAgICAg
ICAoUEFMOjpCaWRpU3RhdHVzOjpCaWRpU3RhdHVzKToKKyAgICAgICAgKFBBTDo6QmlkaUVtYmVk
ZGluZzo6QmlkaUVtYmVkZGluZyk6CisgICAgICAgIChQQUw6OkJpZGlDaGFyYWN0ZXJSdW46OkJp
ZGlDaGFyYWN0ZXJSdW4pOgorICAgICAgICAoUEFMOjpCaWRpUmVzb2x2ZXJCYXNlOjpjb250ZXh0
IGNvbnN0KToKKyAgICAgICAgKFBBTDo6QmlkaVJlc29sdmVyQmFzZTo6c2V0Q29udGV4dCk6Cisg
ICAgICAgIChQQUw6OkJpZGlSZXNvbHZlckJhc2U6OnJ1bnMpOgorICAgICAgICAoUEFMOjpEZXJp
dmVkQ2xhc3M+OjplbWJlZCk6CisgICAgICAgIChQQUw6OkRlcml2ZWRDbGFzcz46OmNoZWNrRGly
ZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwpOgorICAgICAgICAoUEFMOjpEZXJpdmVk
Q2xhc3M+Ojpjb21taXRFeHBsaWNpdEVtYmVkZGluZyk6CisgICAgICAgIChQQUw6OkRlcml2ZWRD
bGFzcz46OmNyZWF0ZUJpZGlSdW5zRm9yTGluZSk6CisgICAgICAgICogcGFsL3RleHQvQmlkaVJ1
bkxpc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJ1
bkxpc3QuaC4KKyAgICAgICAgKFBBTDo6QmlkaVJ1bkxpc3Q8UnVuPjo6cmV2ZXJzZVJ1bnMpOgor
ICAgICAgICAqIHBhbC90ZXh0L1RleHREaXJlY3Rpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERpcmVjdGlvbi5oLgorICAgICAgICAoUEFMOjppc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWwvdGV4dC9Vbmljb2RlQmlkaS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlQmlkaS5oLgor
ICAgICAgICAoUEFMOjppc0lzb2xhdGVkKToKKyAgICAgICAgKFBBTDo6aXNPdmVycmlkZSk6Cisg
ICAgICAgICogcGFsL3RleHQvaW9zL1RleHRFbmNvZGluZ1JlZ2lzdHJ5SU9TLm1tOgorICAgICAg
ICAqIHBhbC90ZXh0L21hYy9UZXh0RW5jb2RpbmdSZWdpc3RyeU1hYy5tbToKKwogMjAyMS0xMi0y
MSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yIHByZW11bHRpcGxpZWQgYWxwaGEgaW50ZXJwb2xhdGVkIGdyYWRpZW50cyBhbmQgZGVmYXVs
dGVkIG9mZiBvcHRpb24gdG8gdXNlIHRoZW0gZm9yIENTUyBHcmFkaWVudHMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
Y2UyN2UxNGM2OWZkMjQ0YWU3YjI0NDVlM2U0OTg3YzZmNzFiYjI4My4uNzU3OWEzZDZjZmNjZmVm
OWJlNmVkYjM4ODBiZGMwYzMzZGE1ZTQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAy
MS0xMi0yNyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAg
ICAgIE1vdmUgQmlkaVJlc29sdmVyIHRvIFBBTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoK
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTZWxlY3Rpb25HZW9tZXRyeT46OmRlY29kZSk6
CisgICAgICAgICogU2hhcmVkL1dlYlBvcHVwSXRlbS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBvcHVwSXRlbTo6V2ViUG9wdXBJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBJdGVt
OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQb3B1cEl0ZW0uaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXR1cFBhZ2VDb25maWd1cmF0aW9uOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dQb3B1cE1lbnUpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQb3B1cE1lbnVQcm94eS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IHdlYlNlbGVjdGlvblJlY3RzRm9yU2VsZWN0aW9uR2VvbWV0cmllczpdKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW06CisgICAgICAgICgtW1dL
VGV4dFNlbGVjdGlvblJlY3Qgd3JpdGluZ0RpcmVjdGlvbl0pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dl
YlBvcHVwTWVudVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94
eU1hYzo6cG9wdWxhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eU1hYzo6
c2hvd1BvcHVwTWVudSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6Om1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6Zm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbik6CisKIDIwMjEtMTItMjYg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgV2ViS2l0
L0NvY29hQ29sb3IuaCB3aXRoIFdlYkNvcmUvQ29sb3JDb2NvYS5oLCBub3QgY29uZnVzaW5nIGF0
IGFsbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IGY3NzEzMGZmNzllZTdmMmNmNDRh
YjIyZWEwZmMxMjc0NzQwOWVhMTIuLjJkODE5YjM4ZjkxOGMxNzNlMWE2NjM5MzI5YjdkYmQ1NzA3
MWQ5YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAy
MS0xMi0yNyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAg
ICAgIE1vdmUgQmlkaVJlc29sdmVyIHRvIFBBTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbToKKyAg
ICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6XSk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tOgorICAgICAgICAoLVtXZWJW
aXNpYmxlUG9zaXRpb24gdGV4dERpcmVjdGlvbl0pOgorICAgICAgICAoLVtXZWJWaXNpYmxlUG9z
aXRpb24gZGlyZWN0aW9uSXNEb3duc3RyZWFtOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViUERG
Vmlld0lPUy5tbToKKyAgICAgICAgKC1bV2ViUERGVmlldyBfY2hlY2tQREZUaXRsZV0pOgorCiAy
MDIxLTEwLTIyICBJYW4gQW5kZXJzb24gIDxpYW5hQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
YSBtb2R1bGUgbWFwIGZpbGUgZm9yIFByaXZhdGVGcmFtZXdvcmtzL1dlYktpdExlZ2FjeQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGVmOTQ5ZGU2MDY4OTZjYTk5M2VkZjhmMzRkOWMx
YjMwYTViNjU0YWIuLjczYTMxMGMyZmIxZDliNTRhNzBiMWIyNjJhYWI4N2NhYzAwMGM4OTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMS0xMi0yNyAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUg
QmlkaVJlc29sdmVyIHRvIFBBTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM0NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBNaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tOgorICAgICAgICAoLVtX
ZWJFbGVtZW50RGljdGlvbmFyeSBfc3BlbGxpbmdUb29sVGlwXSk6CisgICAgICAgICgtW1dlYkVs
ZW1lbnREaWN0aW9uYXJ5IF90aXRsZV0pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BvcHVw
TWVudU1hYy5tbToKKyAgICAgICAgKFBvcHVwTWVudU1hYzo6cG9wdWxhdGUpOgorICAgICAgICAo
UG9wdXBNZW51TWFjOjpzaG93KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06Cisg
ICAgICAgIChXZWJDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbToKKyAgICAgICAgKFdl
YkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKToKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfZGlzcGF0
Y2hEaWRSZWNlaXZlVGl0bGU6XSk6CisKIDIwMjEtMTItMjIgIE1pY2hhZWwgU2Fib2ZmICA8bXNh
Ym9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IFdlYktpdCBCdWlsZCBpc3N1ZXMgd2hlbiB1
c2luZyBzeXN0ZW0gY29udGVudCBwYXRoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgKaW5kZXggYTA3MzQxM2ZhZThiZTNiMDE3YjQ5
MDdlOWFiMWNmYmFkZGFhMmFjNy4uNWQ2M2EzNTc3MDlhZDY4MThiYjUzYmU2NzA5MmNmYzQyZDg5
Yzg5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05v
dGlmaWNhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb24uaApAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5n
JiB0YWcoKSBjb25zdCB7IHJldHVybiBtX3RhZzsgfQogICAgIGNvbnN0IFVSTCYgaWNvbigpIGNv
bnN0IHsgcmV0dXJuIG1faWNvbjsgfQogCi0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2RpcmVjdGlvbiA9PSBEaXJlY3Rpb246OlJ0bCA/IFRleHREaXJlY3Rp
b246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsgfQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbiA9PSBEaXJlY3Rpb246OlJ0bCA/
IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hDbGlja0V2ZW50KCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkaXNwYXRjaENsb3NlRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzZjExMmFhYTBmZDU1OWMx
MzkzMmVjMzk1ZTExNDBjMzQwZTMyNGIxLi4wNDk4NzQxMGRkNzkzY2I4MTRkYWY0M2JjOTQzNDY5
YWViODQ1MzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xNTQsNiArMTU0LDEwIEBACiAJCTFDNUM1N0U5Mjc1NzMxOEUwMDNC
NTQwRCAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUM1N0U4Mjc1NzMxOEQwMDNCNTQwRCAvKiBUZXh0
RW5jb2RpbmdSZWdpc3RyeU1hYy5tbSAqLzsgfTsKIAkJMUM3N0M4QzkyNUQ3OTcyMDAwNjM1RTBD
IC8qIENvcmVUZXh0U29mdExpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUM3N0M4QzcyNUQ3OTcyMDAwNjM1RTBDIC8qIENvcmVUZXh0U29mdExp
bmsuY3BwICovOyB9OwogCQkxQzc3QzhDRTI1RDdBNEEzMDA2MzVFMEMgLyogT1RTVkdUYWJsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzc3QzhD
RDI1RDdBNEEzMDA2MzVFMEMgLyogT1RTVkdUYWJsZS5jcHAgKi87IH07CisJCTFDQjBDQUQ2Mjc3
QUExMzYwMDlCNUJGMCAvKiBCaWRpUnVuTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUNCMENBRDUyNzdBQTEyNTAwOUI1QkYwIC8qIEJpZGlSdW5M
aXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MUNCMENBREEyNzdBQTQ3NzAwOUI1QkYwIC8qIEJpZGlDb250ZXh0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQjBDQUQ4Mjc3QUE0NzcwMDlCNUJG
MCAvKiBCaWRpQ29udGV4dC5jcHAgKi87IH07CisJCTFDQjBDQURCMjc3QUE0NzcwMDlCNUJGMCAv
KiBCaWRpQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUNCMENBRDkyNzdBQTQ3NzAwOUI1QkYwIC8qIEJpZGlDb250ZXh0LmggKi87IH07CisJ
CTFDQjBDQUREMjc3QUI4M0MwMDlCNUJGMCAvKiBVbmljb2RlQmlkaS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNCMENBREMyNzdBQjgxODAwOUI1QkYw
IC8qIFVuaWNvZGVCaWRpLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMUNDM0FDRTgyMkJEN0VDNTAwRjM2MEYwIC8qIE1ldGFsU1BJLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0MzQUNFNzIyQkQ3RUI4
MDBGMzYwRjAgLyogTWV0YWxTUEkuaCAqLzsgfTsKIAkJMUNDRUU0RjUyMEQ4NzE5MzAwNDdCMDk3
IC8qIENvcmVVSVNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUNDRUU0RjQyMEQ4NzE5MzAwNDdCMDk3IC8qIENvcmVVSVNQSS5oICovOyB9OwogCQkx
Q0NFRTRGNzIwRDg3NDNGMDA0N0IwOTcgLyogTlNBcHBlYXJhbmNlU1BJLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0NFRTRGNjIwRDg3NDNGMDA0N0Iw
OTcgLyogTlNBcHBlYXJhbmNlU1BJLmggKi87IH07CkBAIC01OTIsNiArNTk2LDEyIEBACiAJCTFD
NzdDOEM4MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4dFNvZnRMaW5rLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvcmVUZXh0U29mdExpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM3
N0M4Q0IyNUQ3OUI2QzAwNjM1RTBDIC8qIE9UU1ZHVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1RT
VkdUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzc3QzhDRDI1RDdBNEEz
MDA2MzVFMEMgLyogT1RTVkdUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPVFNWR1RhYmxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCMENBRDUyNzdBQTEyNTAwOUI1
QkYwIC8qIEJpZGlSdW5MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZGlSdW5MaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjBDQUQ4Mjc3QUE0NzcwMDlCNUJGMCAvKiBCaWRp
Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaWRpQ29udGV4dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjBDQUQ5Mjc3QUE0NzcwMDlCNUJGMCAvKiBCaWRpQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQ0IwQ0FEQzI3N0FCODE4MDA5QjVCRjAgLyogVW5pY29kZUJpZGkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVW5pY29kZUJpZGkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUNCMENBREUyNzdBQzFEMzAwOUI1QkYwIC8qIEJpZGlSZXNvbHZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCaWRpUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCMENBREYy
NzdBQzVBRDAwOUI1QkYwIC8qIFRleHREaXJlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dERp
cmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0MzQUNFNzIyQkQ3RUI4
MDBGMzYwRjAgLyogTWV0YWxTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0YWxTUEkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNDNUU0MTMyNzM3NDkyQzAwNkY2RkY0IC8qIFdlYkdQ
VVN0b3JhZ2VUZXh0dXJlQmluZGluZ0xheW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVTdG9y
YWdlVGV4dHVyZUJpbmRpbmdMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUNDNUU0MTQyNzM3NDkyQzAwNkY2RkY0IC8qIFdlYkdQVVRleHR1cmVWaWV3RGVzY3JpcHRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJHUFVUZXh0dXJlVmlld0Rlc2NyaXB0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MTEsNiArMTQyMSwxMCBAQAogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJMUM1QzU3RTUyNzU3MzEwNTAwM0I1NDBEIC8qIGlvcyAqLywKIAkJCQlBMzBENDEyMzFG
MEREMTA1MDBCNzE5NTQgLyogbWFjICovLAorCQkJCTFDQjBDQUQ4Mjc3QUE0NzcwMDlCNUJGMCAv
KiBCaWRpQ29udGV4dC5jcHAgKi8sCisJCQkJMUNCMENBRDkyNzdBQTQ3NzAwOUI1QkYwIC8qIEJp
ZGlDb250ZXh0LmggKi8sCisJCQkJMUNCMENBREUyNzdBQzFEMzAwOUI1QkYwIC8qIEJpZGlSZXNv
bHZlci5oICovLAorCQkJCTFDQjBDQUQ1Mjc3QUExMjUwMDlCNUJGMCAvKiBCaWRpUnVuTGlzdC5o
ICovLAogCQkJCTFDNUM1N0UxMjc1NzFDQjEwMDNCNTQwRCAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5j
ZXMuaCAqLywKIAkJCQkxQzVDNTdEMjI3NTcxNjIyMDAzQjU0MEQgLyogRW5jb2RpbmdUYWJsZXMu
Y3BwICovLAogCQkJCTFDNUM1N0QzMjc1NzE2MjUwMDNCNTQwRCAvKiBFbmNvZGluZ1RhYmxlcy5o
ICovLApAQCAtMTQzNSw2ICsxNDQ5LDcgQEAKIAkJCQkxQzVDNTdDNDI3NTcxNTJDMDAzQjU0MEQg
LyogVGV4dENvZGVjVVRGMTYuaCAqLywKIAkJCQkxQzVDNTdDMzI3NTcxNTJBMDAzQjU0MEQgLyog
VGV4dENvZGVjVVRGOC5jcHAgKi8sCiAJCQkJMUM1QzU3QzgyNzU3MTUzMTAwM0I1NDBEIC8qIFRl
eHRDb2RlY1VURjguaCAqLywKKwkJCQkxQ0IwQ0FERjI3N0FDNUFEMDA5QjVCRjAgLyogVGV4dERp
cmVjdGlvbi5oICovLAogCQkJCTFDNUM1N0RBMjc1NzE2OEUwMDNCNTQwRCAvKiBUZXh0RW5jb2Rp
bmcuY3BwICovLAogCQkJCTFDNUM1N0Q4Mjc1NzE2ODgwMDNCNTQwRCAvKiBUZXh0RW5jb2Rpbmcu
aCAqLywKIAkJCQkxQzVDNTdEOTI3NTcxNjhCMDAzQjU0MEQgLyogVGV4dEVuY29kaW5nRGV0ZWN0
b3IuaCAqLywKQEAgLTE0NDIsNiArMTQ1Nyw3IEBACiAJCQkJMUM1QzU3RDYyNzU3MTY4MzAwM0I1
NDBEIC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCAqLywKIAkJCQkxQzVDNTdENzI3NTcxNjg1
MDAzQjU0MEQgLyogVGV4dEVuY29kaW5nUmVnaXN0cnkuaCAqLywKIAkJCQk5M0U1OTA5QzFGOTNC
RjFFMDA2N0Y4Q0YgLyogVW5lbmNvZGFibGVIYW5kbGluZy5oICovLAorCQkJCTFDQjBDQURDMjc3
QUI4MTgwMDlCNUJGMCAvKiBVbmljb2RlQmlkaS5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0ZXh0
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE1MTcsNiArMTUzMyw4IEBACiAJCQkJ
MEMyREExM0UxRjNCRUI0OTAwREJDMzE3IC8qIEFWS2l0U1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MUI5OUU0NjI1REQ3MDE2MDAwNzgyOUEgLyogQVZTdHJlYW1EYXRhUGFyc2VyU1BJLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyOUNERUJBNjI1NDhENTdGMDA3QzA3QjcgLyogQVhTcGVlY2hNYW5h
Z2VyU1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQ0IwQ0FEQjI3N0FBNDc3MDA5QjVCRjAgLyog
QmlkaUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTFDQjBDQUQ2Mjc3QUExMzYwMDlCNUJG
MCAvKiBCaWRpUnVuTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGOTExMTMyMjBFNEVFQzAw
MUVBMzlFIC8qIENlbGVzdGlhbFNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEMyREEwNkQxRjMz
Q0E4NDAwREJDMzE3IC8qIENGTG9jYWxlU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQzJEQTA2
RTFGMzNDQTg0MDBEQkMzMTcgLyogQ0ZOZXR3b3JrQ29ubmVjdGlvbkNhY2hlU1BJLmggaW4gSGVh
ZGVycyAqLywKQEAgLTE2NjIsNiArMTY4MCw3IEBACiAJCQkJMEM3Nzg1QTExRjQ1MTMwRjAwRjRF
QkI2IC8qIFRlbGVwaG9ueVV0aWxpdGllc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUxMzQy
Q0MyMTVBQTEwQTAwNzE5OUQyIC8qIFVJS2l0U29mdExpbmsuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBDNUFGOTIyMUY0M0E0QzcwMDJFQUMwMiAvKiBVSUtpdFNQSS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMUNCMENBREQyNzdBQjgzQzAwOUI1QkYwIC8qIFVuaWNvZGVCaWRpLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwQzJEQTE0NzFGM0JFQjQ5MDBEQkMzMTcgLyogVVJMRm9ybWF0dGluZ1NQSS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDc2MTFEQjYyNDNGQTVCRjAwRDgwNzA0IC8qIFVzYWdlVHJhY2tp
bmdTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ2QjhDNEYyNjc0MEFEODAwN0E2NTU0
IC8qIFZpc2lvbktpdENvcmVTUEkuaCBpbiBIZWFkZXJzICovLApAQCAtMTg4OSw2ICsxOTA4LDcg
QEAKIAkJCQk1N0ZEMzE4QTIyQjM1OTNFMDA4RDBFOEIgLyogQXBwU1NPU29mdExpbmsubW0gaW4g
U291cmNlcyAqLywKIAkJCQk0MTZFOTk1MzIzREFFNkJFMDBFODcxQ0IgLyogQXVkaW9Ub29sYm94
U29mdExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc3RTg3QjEyMjZBNDYwMjAwQTJBRkYw
IC8qIEFWRm91bmRhdGlvblNvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUNCMENBREEy
NzdBQTQ3NzAwOUI1QkYwIC8qIEJpZGlDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFE
MkI0MTM0MjVGMDVFMzUwMEEzRjcwQSAvKiBDbG9ja0dlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMENGOTlDQTgxRjczODQzNzAwN0VFNzkzIC8qIENvcmVNZWRpYVNvZnRMaW5rLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUY0NzIyMUY0Mjc2RkMyRUIwMEI5ODRDNyAvKiBDb3JlTUxTb2Z0
TGluay5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvQ01ha2VMaXN0cy50eHQK
aW5kZXggNWZhYTJmZmYxODFhOGY0ZWQwMzAyNmZkMTJlNjI3YTU1YmNlZjViMi4uNDM2YTc1ODVl
YzZiZjA0NjViMWY3Mzc4YTA5NTBkM2RhNDljNmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0NN
YWtlTGlzdHMudHh0CkBAIC0xNjksNiArMTY5LDkgQEAgc2V0KFBBTF9QVUJMSUNfSEVBREVSUwog
ICAgIHN5c3RlbS9Tb3VuZC5oCiAgICAgc3lzdGVtL1N5c3RlbVNsZWVwTGlzdGVuZXIuaAogCisg
ICAgdGV4dC9CaWRpQ29udGV4dC5oCisgICAgdGV4dC9CaWRpUmVzb2x2ZXIuaAorICAgIHRleHQv
QmlkaVJ1bkxpc3QuaAogICAgIHRleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgKICAgICB0ZXh0
L0VuY29kaW5nVGFibGVzLmgKICAgICB0ZXh0L0tpbGxSaW5nLmgKQEAgLTE4Niw2ICsxODksNyBA
QCBzZXQoUEFMX1BVQkxJQ19IRUFERVJTCiAgICAgdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvci5o
CiAgICAgdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5oCiAgICAgdGV4dC9VbmVuY29kYWJsZUhh
bmRsaW5nLmgKKyAgICB0ZXh0L1VuaWNvZGVCaWRpLmgKICkKIAogc2V0KFBBTF9TT1VSQ0VTCkBA
IC0yMjIsNiArMjI2LDcgQEAgc2V0KFBBTF9TT1VSQ0VTCiAgICAgc3lzdGVtL1NsZWVwRGlzYWJs
ZXIuY3BwCiAgICAgc3lzdGVtL1N5c3RlbVNsZWVwTGlzdGVuZXIuY3BwCiAKKyAgICB0ZXh0L0Jp
ZGlDb250ZXh0LmNwcAogICAgIHRleHQvRW5jb2RpbmdUYWJsZXMuY3BwCiAgICAgdGV4dC9UZXh0
Q29kZWMuY3BwCiAgICAgdGV4dC9UZXh0Q29kZWNDSksuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL0xvZ2dpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dn
aW5nLmNwcAppbmRleCAwMGI3ZWQ4NDU4YjdmM2VhODU0YzFlYmFhYmM2YTM0NjQ2ZTgwYmNhLi4x
NDJlOGZmNjE2MWE4ZWE0ZDM2YjIwNjZlMjJmZDc0ZmJiNmExM2FjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL0xvZ2dpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvTG9nZ2luZy5jcHAKQEAgLTQ4LDQgKzQ4LDQgQEAgdm9pZCByZWdpc3Rlck5vdGlmeUNhbGxi
YWNrKGNvbnN0IFN0cmluZyYgbm90aWZ5SUQsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjYWxsYmFjaykK
ICNlbmRpZgogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBQQUwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaUNvbnRleHQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI1NzY3YmIxZmRkYWEwZTY5YmVjMmZkODdjZGY5M2UzM2ZjNmVmZTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaUNvbnRleHQuY3BwCkBAIC0wLDAg
KzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodCBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaWRpQ29udGV4dC5o
IgorCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgUEFMIHsKKworc3RydWN0IFNhbWVT
aXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1lU2l6ZUFz
QmlkaUNvbnRleHQ+IHsKKyAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAxNjsKKyAgICB2b2lkKiBw
YXJlbnQ7Cit9OworCitDT01QSUxFX0FTU0VSVChzaXplb2YoQmlkaUNvbnRleHQpID09IHNpemVv
ZihTYW1lU2l6ZUFzQmlkaUNvbnRleHQpLCBCaWRpQ29udGV4dF9zaG91bGRfc3RheV9zbWFsbCk7
CisKK2lubGluZSBCaWRpQ29udGV4dDo6QmlkaUNvbnRleHQodW5zaWduZWQgY2hhciBsZXZlbCwg
VUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291
cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKKyAgICA6IG1fbGV2ZWwobGV2ZWwpCisg
ICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgLCBtX292ZXJyaWRlKG92ZXJyaWRlKQor
ICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV9wYXJlbnQocGFyZW50KQoreworfQorCitp
bmxpbmUgUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y3JlYXRlVW5jYWNoZWQodW5zaWdu
ZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBC
aWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBCaWRpQ29udGV4dChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlk
ZSwgc291cmNlLCBwYXJlbnQpKTsKK30KKworUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6
Y3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9v
bCBvdmVycmlkZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJl
bnQpCit7CisgICAgQVNTRVJUKGRpcmVjdGlvbiA9PSAobGV2ZWwgJSAyID8gVV9SSUdIVF9UT19M
RUZUIDogVV9MRUZUX1RPX1JJR0hUKSk7CisKKyAgICBpZiAocGFyZW50KQorICAgICAgICByZXR1
cm4gY3JlYXRlVW5jYWNoZWQobGV2ZWwsIGRpcmVjdGlvbiwgb3ZlcnJpZGUsIHNvdXJjZSwgcGFy
ZW50KTsKKworICAgIEFTU0VSVChsZXZlbCA8PSAxKTsKKyAgICBpZiAoIWxldmVsKSB7CisgICAg
ICAgIGlmICghb3ZlcnJpZGUpIHsKKyAgICAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxS
ZWZQdHI8QmlkaUNvbnRleHQ+PiBsdHJDb250ZXh0OworICAgICAgICAgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGx0ckNvbnRleHRPbmNlRmxhZzsKKyAgICAgICAgICAgIHN0ZDo6Y2FsbF9vbmNl
KGx0ckNvbnRleHRPbmNlRmxhZywgWyZdKCkgeworICAgICAgICAgICAgICAgIGx0ckNvbnRleHQu
Z2V0KCkgPSBjcmVhdGVVbmNhY2hlZCgwLCBVX0xFRlRfVE9fUklHSFQsIGZhbHNlLCBGcm9tU3R5
bGVPckRPTSwgMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiAqbHRyQ29u
dGV4dC5nZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxS
ZWZQdHI8QmlkaUNvbnRleHQ+PiBsdHJPdmVycmlkZUNvbnRleHQ7CisgICAgICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBsdHJPdmVycmlkZUNvbnRleHRPbmNlRmxhZzsKKyAgICAgICAgc3RkOjpj
YWxsX29uY2UobHRyT3ZlcnJpZGVDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAgICAg
IGx0ck92ZXJyaWRlQ29udGV4dC5nZXQoKSA9IGNyZWF0ZVVuY2FjaGVkKDAsIFVfTEVGVF9UT19S
SUdIVCwgdHJ1ZSwgRnJvbVN0eWxlT3JET00sIDApOworICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuICpsdHJPdmVycmlkZUNvbnRleHQuZ2V0KCk7CisgICAgfQorCisgICAgaWYgKCFvdmVycmlk
ZSkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPEJpZGlDb250ZXh0Pj4g
cnRsQ29udGV4dDsKKyAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHJ0bENvbnRleHRPbmNl
RmxhZzsKKyAgICAgICAgc3RkOjpjYWxsX29uY2UocnRsQ29udGV4dE9uY2VGbGFnLCBbJl0oKSB7
CisgICAgICAgICAgICBydGxDb250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMSwgVV9SSUdI
VF9UT19MRUZULCBmYWxzZSwgRnJvbVN0eWxlT3JET00sIDApOworICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuICpydGxDb250ZXh0LmdldCgpOworICAgIH0KKworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxSZWZQdHI8QmlkaUNvbnRleHQ+PiBydGxPdmVycmlkZUNvbnRleHQ7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIHJ0bE92ZXJyaWRlQ29udGV4dE9uY2VGbGFnOworICAgIHN0ZDo6
Y2FsbF9vbmNlKHJ0bE92ZXJyaWRlQ29udGV4dE9uY2VGbGFnLCBbJl0oKSB7CisgICAgICAgIHJ0
bE92ZXJyaWRlQ29udGV4dC5nZXQoKSA9IGNyZWF0ZVVuY2FjaGVkKDEsIFVfUklHSFRfVE9fTEVG
VCwgdHJ1ZSwgRnJvbVN0eWxlT3JET00sIDApOworICAgIH0pOworICAgIHJldHVybiAqcnRsT3Zl
cnJpZGVDb250ZXh0LmdldCgpOworfQorCitzdGF0aWMgaW5saW5lIFJlZjxCaWRpQ29udGV4dD4g
Y29weUNvbnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwoQmlkaUNvbnRleHQmIGNvbnRleHQsIEJpZGlD
b250ZXh0KiBwYXJlbnQpCit7CisgICAgYXV0byBuZXdMZXZlbCA9IHBhcmVudCA/IHBhcmVudC0+
bGV2ZWwoKSA6IDA7CisgICAgaWYgKGNvbnRleHQuZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKQor
ICAgICAgICBuZXdMZXZlbCA9IG5leHRHcmVhdGVyT2RkTGV2ZWwobmV3TGV2ZWwpOworICAgIGVs
c2UgaWYgKHBhcmVudCkKKyAgICAgICAgbmV3TGV2ZWwgPSBuZXh0R3JlYXRlckV2ZW5MZXZlbChu
ZXdMZXZlbCk7CisgICAgcmV0dXJuIEJpZGlDb250ZXh0OjpjcmVhdGUobmV3TGV2ZWwsIGNvbnRl
eHQuZGlyKCksIGNvbnRleHQub3ZlcnJpZGUoKSwgY29udGV4dC5zb3VyY2UoKSwgcGFyZW50KTsK
K30KKworLy8gVGhlIEJpZGlDb250ZXh0IHN0YWNrIG11c3QgYmUgaW1tdXRhYmxlIC0tIHRoZXkn
cmUgcmUtdXNlZCBmb3IgcmUtbGF5b3V0IGFmdGVyCisvLyBET00gbW9kaWZpY2F0aW9uL2VkaXRp
bmcgLS0gc28gd2UgY29weSBhbGwgdGhlIG5vbi1Vbmljb2RlIGNvbnRleHRzLCBhbmQKKy8vIHJl
Y2FsY3VsYXRlIHRoZWlyIGxldmVscy4KK1JlZjxCaWRpQ29udGV4dD4gQmlkaUNvbnRleHQ6OmNv
cHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0NvbnRleHRzKCkKK3sKKyAgICBWZWN0b3I8
QmlkaUNvbnRleHQqLCA2ND4gY29udGV4dHM7CisgICAgZm9yIChhdXRvKiBhbmNlc3RvciA9IHRo
aXM7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkgeworICAgICAgICBp
ZiAoYW5jZXN0b3ItPnNvdXJjZSgpICE9IEZyb21Vbmljb2RlKQorICAgICAgICAgICAgY29udGV4
dHMuYXBwZW5kKGFuY2VzdG9yKTsKKyAgICB9CisgICAgQVNTRVJUKGNvbnRleHRzLnNpemUoKSk7
CisgICAgYXV0byB0b3BDb250ZXh0ID0gY29weUNvbnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwoKmNv
bnRleHRzLmxhc3QoKSwgbnVsbHB0cik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gY29udGV4dHMu
c2l6ZSgpIC0gMTsgaTsgLS1pKQorICAgICAgICB0b3BDb250ZXh0ID0gY29weUNvbnRleHRBbmRS
ZWJhc2VsaW5lTGV2ZWwoKmNvbnRleHRzW2kgLSAxXSwgdG9wQ29udGV4dC5wdHIoKSk7CisgICAg
cmV0dXJuIHRvcENvbnRleHQ7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBCaWRpQ29udGV4
dCYgYzEsIGNvbnN0IEJpZGlDb250ZXh0JiBjMikKK3sKKyAgICBpZiAoJmMxID09ICZjMikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGMxLmxldmVsKCkgIT0gYzIubGV2ZWwoKSB8fCBj
MS5vdmVycmlkZSgpICE9IGMyLm92ZXJyaWRlKCkgfHwgYzEuZGlyKCkgIT0gYzIuZGlyKCkgfHwg
YzEuc291cmNlKCkgIT0gYzIuc291cmNlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWMxLnBhcmVudCgpKQorICAgICAgICByZXR1cm4gIWMyLnBhcmVudCgpOworICAgIHJldHVy
biBjMi5wYXJlbnQoKSAmJiAqYzEucGFyZW50KCkgPT0gKmMyLnBhcmVudCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9C
aWRpQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmFlYWMwYzVjNGViMmYwNmM1ZjM5NzE3YjI0MzAwZjUxY2ZiYzkwZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5o
CkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx1bmljb2RlL3Vj
aGFyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBCaWRpRW1iZWRkaW5nU291
cmNlIHsgRnJvbVN0eWxlT3JET00sIEZyb21Vbmljb2RlIH07CisKKy8vIFVzZWQgdG8ga2VlcCB0
cmFjayBvZiBleHBsaWNpdCBlbWJlZGRpbmdzLgorY2xhc3MgQmlkaUNvbnRleHQgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKK3B1YmxpYzoKKyAgICBQQUxfRVhQ
T1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZSh1bnNpZ25lZCBjaGFyIGxldmVsLCBV
Q2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZhbHNlLCBCaWRpRW1iZWRkaW5nU291cmNl
ID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBwYXJlbnQgPSBudWxscHRyKTsKKworICAg
IEJpZGlDb250ZXh0KiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudC5nZXQoKTsgfQor
ICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xldmVsOyB9CisgICAg
VUNoYXJEaXJlY3Rpb24gZGlyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VUNoYXJEaXJl
Y3Rpb24+KG1fZGlyZWN0aW9uKTsgfQorICAgIGJvb2wgb3ZlcnJpZGUoKSBjb25zdCB7IHJldHVy
biBtX292ZXJyaWRlOyB9CisgICAgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxCaWRpRW1iZWRkaW5nU291cmNlPihtX3NvdXJjZSk7IH0KKwor
ICAgIFBBTF9FWFBPUlQgUmVmPEJpZGlDb250ZXh0PiBjb3B5U3RhY2tSZW1vdmluZ1VuaWNvZGVF
bWJlZGRpbmdDb250ZXh0cygpOworCitwcml2YXRlOgorICAgIEJpZGlDb250ZXh0KHVuc2lnbmVk
IGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5n
U291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KTsKKworICAgIHN0YXRpYyBSZWY8QmlkaUNvbnRl
eHQ+IGNyZWF0ZVVuY2FjaGVkKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBi
b29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KTsK
KworICAgIHVuc2lnbmVkIG1fbGV2ZWwgOiA2OyAvLyBUaGUgbWF4aW1pdW0gYmlkaSBsZXZlbCBp
cyA2MjogaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5LyNFeHBsaWNpdF9MZXZlbHNfYW5k
X0RpcmVjdGlvbnMKKyAgICB1bnNpZ25lZCBtX2RpcmVjdGlvbiA6IDU7IC8vIERpcmVjdGlvbgor
ICAgIHVuc2lnbmVkIG1fb3ZlcnJpZGUgOiAxOworICAgIHVuc2lnbmVkIG1fc291cmNlIDogMTsg
Ly8gQmlkaUVtYmVkZGluZ1NvdXJjZQorICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gbV9wYXJlbnQ7
Cit9OworCitpbmxpbmUgdW5zaWduZWQgY2hhciBuZXh0R3JlYXRlck9kZExldmVsKHVuc2lnbmVk
IGNoYXIgbGV2ZWwpCit7CisgICAgcmV0dXJuIChsZXZlbCArIDEpIHwgMTsKK30KKworaW5saW5l
IHVuc2lnbmVkIGNoYXIgbmV4dEdyZWF0ZXJFdmVuTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkK
K3sKKyAgICByZXR1cm4gKGxldmVsICsgMikgJiB+MTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEJpZGlDb250ZXh0JiwgY29uc3QgQmlkaUNvbnRleHQmKTsKKworfSAvLyBuYW1lc3BhY2Ug
UEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaVJlc29sdmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaVJlc29sdmVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWFjYzBkMjkyYTA5MTVhYzNkZmQxYTZhNDlkY2RjZjQ0NWE1NWRjOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaApAQCAtMCww
ICsxLDk2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgor
I2luY2x1ZGUgPHBhbC90ZXh0L0JpZGlDb250ZXh0Lmg+CisjaW5jbHVkZSA8cGFsL3RleHQvQmlk
aVJ1bkxpc3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFBBTCB7CisK
K2NsYXNzIFJlbmRlck9iamVjdDsKKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IGNsYXNz
IFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUgeworcHVibGljOgorICAgIHZvaWQgcmVzZXQoKQor
ICAgIHsKKyAgICAgICAgbV90cmFuc2l0aW9ucy5jbGVhcigpOworICAgICAgICBtX2N1cnJlbnRU
cmFuc2l0aW9uID0gMDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdGFydElnbm9yaW5nU3BhY2Vz
KGNvbnN0IEl0ZXJhdG9yJiB0cmFuc2l0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEobV90
cmFuc2l0aW9ucy5zaXplKCkgJSAyKSk7CisgICAgICAgIG1fdHJhbnNpdGlvbnMuYXBwZW5kKHRy
YW5zaXRpb24pOworICAgIH0KKworICAgIHZvaWQgc3RvcElnbm9yaW5nU3BhY2VzKGNvbnN0IEl0
ZXJhdG9yJiB0cmFuc2l0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHJhbnNpdGlvbnMu
c2l6ZSgpICUgMik7CisgICAgICAgIG1fdHJhbnNpdGlvbnMuYXBwZW5kKHRyYW5zaXRpb24pOwor
ICAgIH0KKworICAgIHZvaWQgZGVjcmVtZW50VHJhbnNpdGlvbkF0KHNpemVfdCBpbmRleCkKKyAg
ICB7CisgICAgICAgIG1fdHJhbnNpdGlvbnNbaW5kZXhdLmZhc3REZWNyZW1lbnQoKTsKKyAgICB9
CisKKyAgICBjb25zdCBWZWN0b3I8SXRlcmF0b3I+JiB0cmFuc2l0aW9ucygpIHsgcmV0dXJuIG1f
dHJhbnNpdGlvbnM7IH0KKyAgICBzaXplX3QgbnVtVHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX3RyYW5zaXRpb25zLnNpemUoKTsgfQorICAgIHNpemVfdCBjdXJyZW50VHJhbnNpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIHNldEN1cnJl
bnRUcmFuc2l0aW9uKHNpemVfdCBjdXJyZW50VHJhbnNpdGlvbikgeyBtX2N1cnJlbnRUcmFuc2l0
aW9uID0gY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIGluY3JlbWVudEN1cnJlbnRUcmFu
c2l0aW9uKCkgeyArK21fY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIGRlY3JlbWVudE51
bVRyYW5zaXRpb25zKCkgeyBtX3RyYW5zaXRpb25zLnNocmluayhtX3RyYW5zaXRpb25zLnNpemUo
KSAtIDEpOyB9CisgICAgYm9vbCBiZXR3ZWVuVHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVybiBt
X2N1cnJlbnRUcmFuc2l0aW9uICUgMjsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8SXRlcmF0b3I+
IG1fdHJhbnNpdGlvbnM7CisgICAgc2l6ZV90IG1fY3VycmVudFRyYW5zaXRpb24geyAwIH07Cit9
OworCisvLyBUaGUgQmlkaVN0YXR1cyBhdCBhIGdpdmVuIHBvc2l0aW9uICh0eXBpY2FsbHkgdGhl
IGVuZCBvZiBhIGxpbmUpIGNhbgorLy8gYmUgY2FjaGVkIGFuZCB0aGVuIHVzZWQgdG8gcmVzdGFy
dCBiaWRpIHJlc29sdXRpb24gYXQgdGhhdCBwb3NpdGlvbi4KK3N0cnVjdCBCaWRpU3RhdHVzIHsK
KyAgICBCaWRpU3RhdHVzKCkgPSBkZWZhdWx0OworCisgICAgLy8gQ3JlYXRlcyBhIEJpZGlTdGF0
dXMgcmVwcmVzZW50aW5nIGEgbmV3IHBhcmFncmFwaCByb290IHdpdGggYSBkZWZhdWx0IGRpcmVj
dGlvbi4KKyAgICAvLyBVc2VzIFRleHREaXJlY3Rpb24gYXMgaXQgb25seSBoYXMgdHdvIHBvc3Np
YmlsaXRpZXMgaW5zdGVhZCBvZiBVQ2hhckRpcmVjdGlvbiB3aGljaCBoYXMgYXQgbGVhc3QgMTku
CisgICAgQmlkaVN0YXR1cyhQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIGlzT3Zl
cnJpZGUpCisgICAgICAgIDogZW9yKGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxU
UiA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVCkKKyAgICAgICAgLCBsYXN0U3Ry
b25nKGVvcikKKyAgICAgICAgLCBsYXN0KGVvcikKKyAgICAgICAgLCBjb250ZXh0KFBBTDo6Qmlk
aUNvbnRleHQ6OmNyZWF0ZShkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyAw
IDogMSwgZW9yLCBpc092ZXJyaWRlKSkKKyAgICB7CisgICAgfQorCisgICAgQmlkaVN0YXR1cyhV
Q2hhckRpcmVjdGlvbiBlb3IsIFVDaGFyRGlyZWN0aW9uIGxhc3RTdHJvbmcsIFVDaGFyRGlyZWN0
aW9uIGxhc3QsIFJlZlB0cjxQQUw6OkJpZGlDb250ZXh0PiYmIGNvbnRleHQpCisgICAgICAgIDog
ZW9yKGVvcikKKyAgICAgICAgLCBsYXN0U3Ryb25nKGxhc3RTdHJvbmcpCisgICAgICAgICwgbGFz
dChsYXN0KQorICAgICAgICAsIGNvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKKyAgICB7CisgICAg
fQorCisgICAgVUNoYXJEaXJlY3Rpb24gZW9yIHsgVV9PVEhFUl9ORVVUUkFMIH07CisgICAgVUNo
YXJEaXJlY3Rpb24gbGFzdFN0cm9uZyB7IFVfT1RIRVJfTkVVVFJBTCB9OworICAgIFVDaGFyRGly
ZWN0aW9uIGxhc3QgeyBVX09USEVSX05FVVRSQUwgfTsKKyAgICBSZWZQdHI8UEFMOjpCaWRpQ29u
dGV4dD4gY29udGV4dDsKK307CisKK3N0cnVjdCBCaWRpRW1iZWRkaW5nIHsKKyAgICBCaWRpRW1i
ZWRkaW5nKFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiwgUEFMOjpCaWRpRW1iZWRkaW5nU291cmNl
IHNvdXJjZSkKKyAgICAgICAgOiBkaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICAgICAsIHNvdXJj
ZShzb3VyY2UpCisgICAgeworICAgIH0KKworICAgIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbjsK
KyAgICBQQUw6OkJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlOworfTsKKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMxLCBjb25zdCBCaWRpU3RhdHVzJiBz
dGF0dXMyKQoreworICAgIHJldHVybiBzdGF0dXMxLmVvciA9PSBzdGF0dXMyLmVvciAmJiBzdGF0
dXMxLmxhc3QgPT0gc3RhdHVzMi5sYXN0ICYmIHN0YXR1czEubGFzdFN0cm9uZyA9PSBzdGF0dXMy
Lmxhc3RTdHJvbmcgJiYgKihzdGF0dXMxLmNvbnRleHQpID09ICooc3RhdHVzMi5jb250ZXh0KTsK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMxLCBj
b25zdCBCaWRpU3RhdHVzJiBzdGF0dXMyKQoreworICAgIHJldHVybiAhKHN0YXR1czEgPT0gc3Rh
dHVzMik7Cit9CisKK3N0cnVjdCBCaWRpQ2hhcmFjdGVyUnVuIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCaWRpQ2hhcmFjdGVyUnVuKHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBzdG9wLCBQQUw6OkJpZGlDb250ZXh0KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlv
biBkaXJlY3Rpb24pCisgICAgICAgIDogbV9zdGFydChzdGFydCkKKyAgICAgICAgLCBtX3N0b3Ao
c3RvcCkKKyAgICAgICAgLCBtX292ZXJyaWRlKGNvbnRleHQtPm92ZXJyaWRlKCkpCisgICAgewor
ICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKKyAgICAgICAgICAgIGRp
cmVjdGlvbiA9IGNvbnRleHQtPmRpcigpOworCisgICAgICAgIG1fbGV2ZWwgPSBjb250ZXh0LT5s
ZXZlbCgpOworCisgICAgICAgIC8vIGFkZCBsZXZlbCBvZiBydW4gKGNhc2VzIEkxICYgSTIpCisg
ICAgICAgIGlmIChtX2xldmVsICUgMikgeworICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBV
X0xFRlRfVE9fUklHSFQgfHwgZGlyZWN0aW9uID09IFVfQVJBQklDX05VTUJFUiB8fCBkaXJlY3Rp
b24gPT0gVV9FVVJPUEVBTl9OVU1CRVIpCisgICAgICAgICAgICAgICAgbV9sZXZlbCsrOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xF
RlQpCisgICAgICAgICAgICAgICAgbV9sZXZlbCsrOworICAgICAgICAgICAgZWxzZSBpZiAoZGly
ZWN0aW9uID09IFVfQVJBQklDX05VTUJFUiB8fCBkaXJlY3Rpb24gPT0gVV9FVVJPUEVBTl9OVU1C
RVIpCisgICAgICAgICAgICAgICAgbV9sZXZlbCArPSAyOworICAgICAgICB9CisgICAgfQorCisg
ICAgfkJpZGlDaGFyYWN0ZXJSdW4oKQorICAgIHsKKyAgICAgICAgLy8gRGVsZXRlIHRoZSBsaW5r
ZWQgbGlzdCBpbiBhIGxvb3AgdG8gcHJldmVudCBkZXN0cnVjdG9yIHJlY3Vyc2lvbi4KKyAgICAg
ICAgYXV0byBuZXh0ID0gV1RGTW92ZShtX25leHQpOworICAgICAgICB3aGlsZSAobmV4dCkKKyAg
ICAgICAgICAgIG5leHQgPSBXVEZNb3ZlKG5leHQtPm1fbmV4dCk7CisgICAgfQorCisgICAgdW5z
aWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgdW5zaWduZWQgc3Rv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcDsgfQorICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwoKSBj
b25zdCB7IHJldHVybiBtX2xldmVsOyB9CisgICAgYm9vbCByZXZlcnNlZChib29sIHZpc3VhbGx5
T3JkZXJlZCkgeyByZXR1cm4gbV9sZXZlbCAlIDIgJiYgIXZpc3VhbGx5T3JkZXJlZDsgfQorICAg
IGJvb2wgZGlyT3ZlcnJpZGUoYm9vbCB2aXN1YWxseU9yZGVyZWQpIHsgcmV0dXJuIG1fb3ZlcnJp
ZGUgfHwgdmlzdWFsbHlPcmRlcmVkOyB9CisKKyAgICBCaWRpQ2hhcmFjdGVyUnVuKiBuZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlD
aGFyYWN0ZXJSdW4+IHRha2VOZXh0KCkgeyByZXR1cm4gV1RGTW92ZShtX25leHQpOyB9CisgICAg
dm9pZCBzZXROZXh0KHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiYmIG5leHQpIHsg
bV9uZXh0ID0gV1RGTW92ZShuZXh0KTsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVlX3B0
cjxCaWRpQ2hhcmFjdGVyUnVuPiBtX25leHQ7CisKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBtX3N0
YXJ0OworICAgIHVuc2lnbmVkIG1fc3RvcDsKKyAgICB1bnNpZ25lZCBjaGFyIG1fbGV2ZWw7Cisg
ICAgYm9vbCBtX292ZXJyaWRlIDogMTsKKyAgICBib29sIG1faGFzSHlwaGVuIDogMTsgLy8gVXNl
ZCBieSBCaWRpUnVuIHN1YmNsYXNzIHdoaWNoIGlzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIGJ1dCBl
bmFibGVzIHVzIHRvIHNhdmUgOCBieXRlcyBwZXIgb2JqZWN0IG9uIDY0LWJpdC4KK307CisKK2Vu
dW0gY2xhc3MgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgeworICAgIE5vVmlzdWFsT3ZlcnJpZGUs
CisgICAgVmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSwKKyAgICBWaXN1YWxSaWdodFRvTGVmdE92
ZXJyaWRlCit9OworCisvLyBCaWRpUmVzb2x2ZXIgaXMgV2ViS2l0J3MgaW1wbGVtZW50YXRpb24g
b2YgdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0KKy8vIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBv
cnRzL3RyOQordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5h
bWUgRGVyaXZlZENsYXNzPiBjbGFzcyBCaWRpUmVzb2x2ZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShCaWRpUmVzb2x2ZXJCYXNlKTsKK3B1YmxpYzoKKyAgICBjb25zdCBJdGVyYXRv
ciYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICB2b2lkIHNldFBv
c2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhjb25zdCBJdGVyYXRvciYgcG9zaXRpb24pIHsg
bV9jdXJyZW50ID0gcG9zaXRpb247IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEl0ZXJh
dG9yJiBwb3NpdGlvbiwgdW5zaWduZWQgbmVzdGVkSXNvbGF0ZWRDb3VudCkKKyAgICB7CisgICAg
ICAgIG1fY3VycmVudCA9IHBvc2l0aW9uOworICAgICAgICBtX25lc3RlZElzb2xhdGVDb3VudCA9
IG5lc3RlZElzb2xhdGVkQ291bnQ7CisgICAgfQorCisgICAgdm9pZCBpbmNyZW1lbnQoKSB7IHN0
YXRpY19jYXN0PERlcml2ZWRDbGFzcyY+KCp0aGlzKS5pbmNyZW1lbnRJbnRlcm5hbCgpOyB9CisK
KyAgICBQQUw6OkJpZGlDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMu
Y29udGV4dC5nZXQoKTsgfQorICAgIHZvaWQgc2V0Q29udGV4dChSZWZQdHI8UEFMOjpCaWRpQ29u
dGV4dD4mJiBjb250ZXh0KSB7IG1fc3RhdHVzLmNvbnRleHQgPSBXVEZNb3ZlKGNvbnRleHQpOyB9
CisKKyAgICB2b2lkIHNldExhc3REaXIoVUNoYXJEaXJlY3Rpb24gbGFzdERpcikgeyBtX3N0YXR1
cy5sYXN0ID0gbGFzdERpcjsgfQorICAgIHZvaWQgc2V0TGFzdFN0cm9uZ0RpcihVQ2hhckRpcmVj
dGlvbiBsYXN0U3Ryb25nRGlyKSB7IG1fc3RhdHVzLmxhc3RTdHJvbmcgPSBsYXN0U3Ryb25nRGly
OyB9CisgICAgdm9pZCBzZXRFb3JEaXIoVUNoYXJEaXJlY3Rpb24gZW9yRGlyKSB7IG1fc3RhdHVz
LmVvciA9IGVvckRpcjsgfQorCisgICAgVUNoYXJEaXJlY3Rpb24gZGlyKCkgY29uc3QgeyByZXR1
cm4gbV9kaXJlY3Rpb247IH0KKyAgICB2b2lkIHNldERpcihVQ2hhckRpcmVjdGlvbiBkaXJlY3Rp
b24pIHsgbV9kaXJlY3Rpb24gPSBkaXJlY3Rpb247IH0KKworICAgIGNvbnN0IEJpZGlTdGF0dXMm
IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgdm9pZCBzZXRTdGF0dXMo
QmlkaVN0YXR1cyBzdGF0dXMpIHsgbV9zdGF0dXMgPSBzdGF0dXM7IH0KKworICAgIFdoaXRlc3Bh
Y2VDb2xsYXBzaW5nU3RhdGU8SXRlcmF0b3I+JiB3aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlKCkg
eyByZXR1cm4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOyB9CisKKyAgICAvLyBUaGUgY3Vy
cmVudCBhbGdvcml0aG0gaGFuZGxlcyBuZXN0ZWQgaXNvbGF0ZXMgb25lIGxheWVyIG9mIG5lc3Rp
bmcgYXQgYSB0aW1lLgorICAgIC8vIEJ1dCB3aGVuIHdlIGxheW91dCBlYWNoIGlzb2xhdGVkIHNw
YW4sIHdlIHdpbGwgd2FsayBpbnRvIChhbmQgaWdub3JlKSBhbGwKKyAgICAvLyBjaGlsZCBpc29s
YXRlZCBzcGFucy4KKyAgICB2b2lkIGVudGVySXNvbGF0ZSgpIHsgbV9uZXN0ZWRJc29sYXRlQ291
bnQrKzsgfQorICAgIHZvaWQgZXhpdElzb2xhdGUoKSB7IEFTU0VSVChtX25lc3RlZElzb2xhdGVD
b3VudCA+PSAxKTsgbV9uZXN0ZWRJc29sYXRlQ291bnQtLTsgfQorICAgIGJvb2wgaW5Jc29sYXRl
KCkgY29uc3QgeyByZXR1cm4gbV9uZXN0ZWRJc29sYXRlQ291bnQ7IH0KKworICAgIHZvaWQgZW1i
ZWQoVUNoYXJEaXJlY3Rpb24sIFBBTDo6QmlkaUVtYmVkZGluZ1NvdXJjZSk7CisgICAgYm9vbCBj
b21taXRFeHBsaWNpdEVtYmVkZGluZygpOworCisgICAgdm9pZCBjcmVhdGVCaWRpUnVuc0Zvckxp
bmUoY29uc3QgSXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgPSBWaXN1YWxE
aXJlY3Rpb25PdmVycmlkZTo6Tm9WaXN1YWxPdmVycmlkZSwgYm9vbCBoYXJkTGluZUJyZWFrID0g
ZmFsc2UpOworCisgICAgUEFMOjpCaWRpUnVuTGlzdDxSdW4+JiBydW5zKCkgeyByZXR1cm4gbV9y
dW5zOyB9CisKKyAgICAvLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIHBhcnQgb2YgZGVsZXRlUnVu
cygpIGJ1dCB3YXMgYSBsYXllcmluZyB2aW9sYXRpb24uCisgICAgLy8gSXQncyB1bmNsZWFyIGlm
IHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorICAgIHZvaWQgbWFya0N1cnJlbnRSdW5FbXB0eSgpIHsg
bV9lbXB0eVJ1biA9IHRydWU7IH0KKworICAgIHZvaWQgc2V0V2hpdGVzcGFjZUNvbGxhcHNpbmdU
cmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVuJiwgc2l6ZV90KTsKKyAgICB1bnNpZ25lZCB3aGl0
ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bihSdW4mKTsKKworcHJvdGVj
dGVkOgorICAgIEJpZGlSZXNvbHZlckJhc2UoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBGSVhNRTog
SW5zdGVhZCBvZiBJbmxpbmVCaWRpUmVzb2x2ZXJzIHN1YmNsYXNzaW5nIHRoaXMgbWV0aG9kLCB3
ZSBzaG91bGQKKyAgICAvLyBwYXNzIGluIHNvbWUgc29ydCBvZiBUcmFpdHMgb2JqZWN0IHdoaWNo
IGtub3dzIGhvdyB0byBjcmVhdGUgcnVucyBmb3IgYXBwZW5kaW5nLgorICAgIHZvaWQgYXBwZW5k
UnVuKCkgeyBzdGF0aWNfY2FzdDxEZXJpdmVkQ2xhc3MmPigqdGhpcykuYXBwZW5kUnVuSW50ZXJu
YWwoKTsgfQorICAgIGJvb2wgbmVlZHNDb250aW51ZVBhc3RFbmQoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBEZXJpdmVkQ2xhc3MmPigqdGhpcykubmVlZHNDb250aW51ZVBhc3RF
bmRJbnRlcm5hbCgpOyB9CisKKyAgICBJdGVyYXRvciBtX2N1cnJlbnQ7CisgICAgLy8gc29yIGFu
ZCBlb3IgYXJlICJzdGFydCBvZiBydW4iIGFuZCAiZW5kIG9mIHJ1biIgcmVzcGVjdGl2ZWx5IGFu
ZCBjb3JyZXBvbmQKKyAgICAvLyB0byBhYnJldmlhdGlvbnMgdXNlZCBpbiBVQkEgc3BlYzogaHR0
cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5LyNCRDcKKyAgICBJdGVyYXRvciBtX3NvcjsgLy8g
UG9pbnRzIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIGN1cnJlbnQgcnVuLgorICAgIEl0
ZXJhdG9yIG1fZW9yOyAvLyBQb2ludHMgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBjdXJy
ZW50IHJ1bi4KKyAgICBJdGVyYXRvciBtX2xhc3Q7CisgICAgQmlkaVN0YXR1cyBtX3N0YXR1czsK
KyAgICBVQ2hhckRpcmVjdGlvbiBtX2RpcmVjdGlvbiB7IFVfT1RIRVJfTkVVVFJBTCB9OworICAg
IEl0ZXJhdG9yIGVuZE9mTGluZTsKKyAgICBib29sIG1fcmVhY2hlZEVuZE9mTGluZSB7IGZhbHNl
IH07CisgICAgSXRlcmF0b3IgbV9sYXN0QmVmb3JlRVQ7IC8vIEJlZm9yZSBhIFVfRVVST1BFQU5f
TlVNQkVSX1RFUk1JTkFUT1IKKyAgICBib29sIG1fZW1wdHlSdW4geyB0cnVlIH07CisKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJlbG9uZyB0byB0aGUgcmVzb2x2ZXIsIGJ1dCByYXRo
ZXIgYmUgcGFzc2VkCisgICAgLy8gaW50byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUgYnkgdGhlIGNh
bGxlci4KKyAgICBQQUw6OkJpZGlSdW5MaXN0PFJ1bj4gbV9ydW5zOworCisgICAgV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZTxJdGVyYXRvcj4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOwor
CisgICAgdW5zaWduZWQgbV9uZXN0ZWRJc29sYXRlQ291bnQgeyAwIH07CisgICAgSGFzaE1hcDxS
dW4qLCB1bnNpZ25lZD4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRl
ZFJ1bjsKKworcHJpdmF0ZToKKyAgICB2b2lkIHJhaXNlRXhwbGljaXRFbWJlZGRpbmdMZXZlbChV
Q2hhckRpcmVjdGlvbiBmcm9tLCBVQ2hhckRpcmVjdGlvbiB0byk7CisgICAgdm9pZCBsb3dlckV4
cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSk7CisgICAgdm9pZCBjaGVj
a0RpcmVjdGlvbkluTG93ZXJSYWlzZUVtYmVkZGluZ0xldmVsKCk7CisKKyAgICB2b2lkIHVwZGF0
ZVN0YXR1c0xhc3RGcm9tQ3VycmVudERpcmVjdGlvbihVQ2hhckRpcmVjdGlvbik7CisgICAgdm9p
ZCByZW9yZGVyUnVuc0Zyb21MZXZlbHMoKTsKKyAgICB2b2lkIGluY3JlbWVudEludGVybmFsKCkg
eyBtX2N1cnJlbnQuaW5jcmVtZW50KCk7IH0KKyAgICB2b2lkIGFwcGVuZFJ1bkludGVybmFsKCk7
CisgICAgYm9vbCBuZWVkc0NvbnRpbnVlUGFzdEVuZEludGVybmFsKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgVmVjdG9yPEJpZGlFbWJlZGRpbmcsIDg+IG1fY3VycmVudEV4cGxpY2l0
RW1iZWRkaW5nU2VxdWVuY2U7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlw
ZW5hbWUgUnVuPgorY2xhc3MgQmlkaVJlc29sdmVyIDogcHVibGljIEJpZGlSZXNvbHZlckJhc2U8
SXRlcmF0b3IsIFJ1biwgQmlkaVJlc29sdmVyPEl0ZXJhdG9yLCBSdW4+PiB7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBJc29sYXRlUnVu
PgorY2xhc3MgQmlkaVJlc29sdmVyV2l0aElzb2xhdGUgOiBwdWJsaWMgQmlkaVJlc29sdmVyQmFz
ZTxJdGVyYXRvciwgUnVuLCBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxJdGVyYXRvciwgUnVuLCBJ
c29sYXRlUnVuPj4geworcHVibGljOgorICAgIH5CaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZSgpOwor
CisgICAgdm9pZCBpbmNyZW1lbnRJbnRlcm5hbCgpOworICAgIHZvaWQgYXBwZW5kUnVuSW50ZXJu
YWwoKTsKKyAgICBib29sIG5lZWRzQ29udGludWVQYXN0RW5kSW50ZXJuYWwoKSBjb25zdDsKKyAg
ICBWZWN0b3I8SXNvbGF0ZVJ1bj4mIGlzb2xhdGVkUnVucygpIHsgcmV0dXJuIG1faXNvbGF0ZWRS
dW5zOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPElzb2xhdGVSdW4+IG1faXNvbGF0ZWRSdW5z
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5h
bWUgSXNvbGF0ZVJ1bj4KK2lubGluZSBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxJdGVyYXRvciwg
UnVuLCBJc29sYXRlUnVuPjo6fkJpZGlSZXNvbHZlcldpdGhJc29sYXRlKCkKK3sKKyAgICAvLyBU
aGUgb3duZXIgb2YgdGhpcyByZXNvbHZlciBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoZSBpc29sYXRl
ZCBydW5zLgorICAgIEFTU0VSVChtX2lzb2xhdGVkUnVucy5pc0VtcHR5KCkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xh
c3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6
YXBwZW5kUnVuSW50ZXJuYWwoKQoreworICAgIGlmICghbV9lbXB0eVJ1biAmJiAhbV9lb3IuYXRF
bmQoKSkgeworICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG1fc29yLm9mZnNldCgpOwor
ICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBtX2Vvci5vZmZzZXQoKTsKKworICAgICAgICBp
ZiAoIWVuZE9mTGluZS5hdEVuZCgpICYmIGVuZE9mZnNldCA+PSBlbmRPZkxpbmUub2Zmc2V0KCkp
IHsKKyAgICAgICAgICAgIG1fcmVhY2hlZEVuZE9mTGluZSA9IHRydWU7CisgICAgICAgICAgICBl
bmRPZmZzZXQgPSBlbmRPZkxpbmUub2Zmc2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ZW5kT2Zmc2V0ID49IHN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgbV9ydW5zLmFwcGVuZFJ1biht
YWtlVW5pcXVlPFJ1bj4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCArIDEsIGNvbnRleHQoKSwgbV9k
aXJlY3Rpb24pKTsKKworICAgICAgICBtX2Vvci5pbmNyZW1lbnQoKTsKKyAgICAgICAgbV9zb3Ig
PSBtX2VvcjsKKyAgICB9CisKKyAgICBtX2RpcmVjdGlvbiA9IFVfT1RIRVJfTkVVVFJBTDsKKyAg
ICBtX3N0YXR1cy5lb3IgPSBVX09USEVSX05FVVRSQUw7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KK3ZvaWQgQmlk
aVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+OjplbWJlZChVQ2hhckRp
cmVjdGlvbiBkaXIsIFBBTDo6QmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCit7CisgICAgLy8g
SXNvbGF0ZWQgc3BhbnMgY29tcHV0ZSBiYXNlIGRpcmVjdGlvbmFsaXR5IGR1cmluZyB0aGVpciBv
d24gVUJBIHJ1bi4KKyAgICAvLyBEbyBub3QgaW5zZXJ0IGZha2UgZW1iZWQgY2hhcmFjdGVycyBv
bmNlIHdlIGVudGVyIGFuIGlzb2xhdGVkIHNwYW4uCisgICAgQVNTRVJUKCFpbklzb2xhdGUoKSk7
CisKKyAgICBBU1NFUlQoZGlyID09IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCB8fCBkaXIgPT0g
VV9MRUZUX1RPX1JJR0hUX0VNQkVERElORyB8fCBkaXIgPT0gVV9MRUZUX1RPX1JJR0hUX09WRVJS
SURFIHx8IGRpciA9PSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HIHx8IGRpciA9PSBVX1JJR0hU
X1RPX0xFRlRfT1ZFUlJJREUpOworICAgIG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVu
Y2UuYXBwZW5kKEJpZGlFbWJlZGRpbmcoZGlyLCBzb3VyY2UpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordm9p
ZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmNoZWNrRGly
ZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwoKQoreworICAgIEFTU0VSVChtX3N0YXR1
cy5lb3IgIT0gVV9PVEhFUl9ORVVUUkFMIHx8IG1fZW9yLmF0RW5kKCkpOworICAgIEFTU0VSVCht
X3N0YXR1cy5sYXN0ICE9IFVfRElSX05PTl9TUEFDSU5HX01BUksKKyAgICAgICAgJiYgbV9zdGF0
dXMubGFzdCAhPSBVX0JPVU5EQVJZX05FVVRSQUwKKyAgICAgICAgJiYgbV9zdGF0dXMubGFzdCAh
PSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HCisgICAgICAgICYmIG1fc3RhdHVzLmxhc3QgIT0g
VV9MRUZUX1RPX1JJR0hUX0VNQkVERElORworICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVf
UklHSFRfVE9fTEVGVF9PVkVSUklERQorICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfTEVG
VF9UT19SSUdIVF9PVkVSUklERQorICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfUE9QX0RJ
UkVDVElPTkFMX0ZPUk1BVCk7CisgICAgaWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJB
TCkKKyAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9U
T19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNz
Pgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46Omxv
d2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVjdGlvbiBmcm9tKQoreworICAgIGlm
ICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKKyAgICAgICAgY2hlY2tEaXJlY3Rp
b25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOworICAgICAgICAvLyBiaWRpLnNvciAuLi4g
YmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRoZSBiaWRpLnNvci1i
aWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0CisgICAgICAgIGlmIChm
cm9tID09IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgLy8gYmlkaS5zb3IgLi4uIGJp
ZGkuZW9yIC4uLiBiaWRpLmxhc3QgTAorICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBV
X0VVUk9QRUFOX05VTUJFUikgeworICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ry
b25nICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlv
biA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9
PSBVX0FSQUJJQ19OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJB
QklDX05VTUJFUjsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAg
ICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVf
TEVGVF9UT19SSUdIVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1
cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIgfHwgbV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05V
TUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAg
ICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9f
TEVGVDsKKyAgICAgICAgfQorICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAgICB9CisKKyAgICBh
cHBlbmRSdW4oKTsKKyAgICBtX2VtcHR5UnVuID0gdHJ1ZTsKKworICAgIC8vIHNvciBmb3IgdGhl
IG5ldyBydW4gaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGlnaGVyIGxldmVsIChydWxlIFgxMCkKKyAg
ICBzZXRMYXN0RGlyKGZyb20pOworICAgIHNldExhc3RTdHJvbmdEaXIoZnJvbSk7CisgICAgbV9l
b3IgPSBJdGVyYXRvcigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5h
bWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRl
cmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6cmFpc2VFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVD
aGFyRGlyZWN0aW9uIGZyb20sIFVDaGFyRGlyZWN0aW9uIHRvKQoreworICAgIGlmICghbV9lbXB0
eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKKyAgICAgICAgY2hlY2tEaXJlY3Rpb25Jbkxvd2Vy
UmFpc2VFbWJlZGRpbmdMZXZlbCgpOworICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3Ig
Li4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRoZSBiaWRpLnNvci1iaWRpLmVvciBy
dW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0CisgICAgICAgIGlmICh0byA9PSBVX0xF
RlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4g
YmlkaS5sYXN0IEwKKyAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9O
VU1CRVIpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xF
RlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0VVUk9Q
RUFOX05VTUJFUjsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNf
TlVNQkVSKSB7CisgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0FSQUJJQ19OVU1CRVI7
CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
c3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUICYmIGZyb20gPT0gVV9MRUZUX1RP
X1JJR0hUKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAg
bV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUgorICAgICAgICAgICAgfHwg
KG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUiAmJiAobV9zdGF0dXMubGFzdFN0cm9u
ZyAhPSBVX0xFRlRfVE9fUklHSFQgfHwgZnJvbSA9PSBVX1JJR0hUX1RPX0xFRlQpKQorICAgICAg
ICAgICAgfHwgKG1fc3RhdHVzLmVvciAhPSBVX0VVUk9QRUFOX05VTUJFUiAmJiBtX3N0YXR1cy5s
YXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBmcm9tID09IFVfUklHSFRfVE9fTEVGVCkp
IHsKKyAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBV
X1JJR0hUX1RPX0xFRlQ7CisgICAgICAgIH0KKyAgICAgICAgbV9lb3IgPSBtX2xhc3Q7CisgICAg
fQorCisgICAgYXBwZW5kUnVuKCk7CisgICAgbV9lbXB0eVJ1biA9IHRydWU7CisKKyAgICBzZXRM
YXN0RGlyKHRvKTsKKyAgICBzZXRMYXN0U3Ryb25nRGlyKHRvKTsKKyAgICBtX2VvciA9IEl0ZXJh
dG9yKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5
cGVuYW1lIERlcml2ZWRDbGFzcz4KK2Jvb2wgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVu
LCBEZXJpdmVkQ2xhc3M+Ojpjb21taXRFeHBsaWNpdEVtYmVkZGluZygpCit7CisgICAgLy8gV2hl
biB3ZSdyZSAiaW5Jc29sYXRlKCkiIHdlJ3JlIHJlc29sdmluZyB0aGUgcGFyZW50IGNvbnRleHQg
d2hpY2gKKyAgICAvLyBpZ25vcmVzIChza2lwcyBvdmVyKSB0aGUgaXNvbGF0ZWQgY29udGVudCwg
aW5jbHVkaW5nIGVtYmVkZGluZyBsZXZlbHMuCisgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGFjY3J1
ZSBlbWJlZGRpbmcgbGV2ZWxzIHdoaWxlIHNraXBwaW5nIG92ZXIgaXNvbGF0ZWQgY29udGVudC4K
KyAgICBBU1NFUlQoIWluSXNvbGF0ZSgpIHx8IG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2Vx
dWVuY2UuaXNFbXB0eSgpKTsKKworICAgIGF1dG8gZnJvbUxldmVsID0gY29udGV4dCgpLT5sZXZl
bCgpOworICAgIFJlZlB0cjxQQUw6OkJpZGlDb250ZXh0PiB0b0NvbnRleHQgPSBjb250ZXh0KCk7
CisKKyAgICBmb3IgKGF1dG8mIGVtYmVkZGluZyA6IG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5n
U2VxdWVuY2UpIHsKKyAgICAgICAgaWYgKGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9QT1BfRElS
RUNUSU9OQUxfRk9STUFUKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcGFyZW50Q29udGV4dCA9
IHRvQ29udGV4dC0+cGFyZW50KCkpCisgICAgICAgICAgICAgICAgdG9Db250ZXh0ID0gcGFyZW50
Q29udGV4dDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFVDaGFyRGlyZWN0aW9uIGRp
cmVjdGlvbiA9IChlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJ
TkcgfHwgZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUpID8g
VV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hUOworICAgICAgICAgICAgYm9vbCBvdmVy
cmlkZSA9IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFIHx8
IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFOworICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciBsZXZlbCA9IHRvQ29udGV4dC0+bGV2ZWwoKTsKKyAgICAgICAg
ICAgIGlmIChkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUKQorICAgICAgICAgICAgICAgIGxl
dmVsID0gUEFMOjpuZXh0R3JlYXRlck9kZExldmVsKGxldmVsKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBsZXZlbCA9IFBBTDo6bmV4dEdyZWF0ZXJFdmVuTGV2ZWwobGV2ZWwp
OworICAgICAgICAgICAgaWYgKGxldmVsIDwgNjEpCisgICAgICAgICAgICAgICAgdG9Db250ZXh0
ID0gUEFMOjpCaWRpQ29udGV4dDo6Y3JlYXRlKGxldmVsLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCBl
bWJlZGRpbmcuc291cmNlLCB0b0NvbnRleHQuZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgYXV0byB0b0xldmVsID0gdG9Db250ZXh0LT5sZXZlbCgpOworCisgICAgaWYgKHRvTGV2ZWwg
PiBmcm9tTGV2ZWwpCisgICAgICAgIHJhaXNlRXhwbGljaXRFbWJlZGRpbmdMZXZlbChmcm9tTGV2
ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hULCB0b0xldmVsICUgMiA/
IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCk7CisgICAgZWxzZSBpZiAodG9MZXZl
bCA8IGZyb21MZXZlbCkKKyAgICAgICAgbG93ZXJFeHBsaWNpdEVtYmVkZGluZ0xldmVsKGZyb21M
ZXZlbCAlIDIgPyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQpOworCisgICAgc2V0
Q29udGV4dChXVEZNb3ZlKHRvQ29udGV4dCkpOworCisgICAgbV9jdXJyZW50RXhwbGljaXRFbWJl
ZGRpbmdTZXF1ZW5jZS5jbGVhcigpOworCisgICAgcmV0dXJuIGZyb21MZXZlbCAhPSB0b0xldmVs
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFt
ZSBEZXJpdmVkQ2xhc3M+CitpbmxpbmUgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBS
dW4sIERlcml2ZWRDbGFzcz46OnVwZGF0ZVN0YXR1c0xhc3RGcm9tQ3VycmVudERpcmVjdGlvbihV
Q2hhckRpcmVjdGlvbiBkaXJDdXJyZW50KQoreworICAgIHN3aXRjaCAoZGlyQ3VycmVudCkgewor
ICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUjoKKyAgICAgICAgaWYgKG1fc3Rh
dHVzLmxhc3QgIT0gVV9FVVJPUEVBTl9OVU1CRVIpCisgICAgICAgICAgICBtX3N0YXR1cy5sYXN0
ID0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6CisgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJf
U0VQQVJBVE9SOgorICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKKyAgICBjYXNlIFVfV0hJ
VEVfU1BBQ0VfTkVVVFJBTDoKKyAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgc3dp
dGNoIChtX3N0YXR1cy5sYXN0KSB7CisgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgorICAg
ICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRf
QVJBQklDOgorICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgorICAgICAgICBjYXNlIFVf
QVJBQklDX05VTUJFUjoKKyAgICAgICAgICAgIG1fc3RhdHVzLmxhc3QgPSBkaXJDdXJyZW50Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX3N0YXR1
cy5sYXN0ID0gVV9PVEhFUl9ORVVUUkFMOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVV9ESVJfTk9OX1NQQUNJTkdfTUFSSzoKKyAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJB
TDoKKyAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkc6CisgICAgY2FzZSBVX0xFRlRf
VE9fUklHSFRfRU1CRURESU5HOgorICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX09WRVJSSURFOgor
ICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFOgorICAgIGNhc2UgVV9QT1BfRElSRUNU
SU9OQUxfRk9STUFUOgorICAgICAgICAvLyBpZ25vcmUgdGhlc2UKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgbV9zdGF0dXMubGFzdCA9IGRpckN1cnJlbnQ7CisgICAgfQorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVk
Q2xhc3M+CitpbmxpbmUgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2
ZWRDbGFzcz46OnJlb3JkZXJSdW5zRnJvbUxldmVscygpCit7CisgICAgdW5zaWduZWQgY2hhciBs
ZXZlbExvdyA9IDEyODsKKyAgICB1bnNpZ25lZCBjaGFyIGxldmVsSGlnaCA9IDA7CisgICAgZm9y
IChSdW4qIHJ1biA9IG1fcnVucy5maXJzdFJ1bigpOyBydW47IHJ1biA9IHJ1bi0+bmV4dCgpKSB7
CisgICAgICAgIGxldmVsSGlnaCA9IHN0ZDo6bWF4KHJ1bi0+bGV2ZWwoKSwgbGV2ZWxIaWdoKTsK
KyAgICAgICAgbGV2ZWxMb3cgPSBzdGQ6Om1pbihydW4tPmxldmVsKCksIGxldmVsTG93KTsKKyAg
ICB9CisKKyAgICAvLyBUaGlzIGltcGxlbWVudHMgcmVvcmRlcmluZyBvZiB0aGUgbGluZSAoTDIg
YWNjb3JkaW5nIHRvIEJpZGkgc3BlYyk6CisgICAgLy8gaHR0cDovL3VuaWNvZGUub3JnL3JlcG9y
dHMvdHI5LyNMMgorICAgIC8vIEwyLiBGcm9tIHRoZSBoaWdoZXN0IGxldmVsIGZvdW5kIGluIHRo
ZSB0ZXh0IHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsIG9uIGVhY2ggbGluZSwKKyAgICAvLyByZXZl
cnNlIGFueSBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgYXQgdGhh
dCBsZXZlbCBvciBoaWdoZXIuCisKKyAgICAvLyBSZXZlcnNpbmcgaXMgb25seSBkb25lIHVwIHRv
IHRoZSBsb3dlc3Qgb2RkIGxldmVsLgorICAgIGlmICghKGxldmVsTG93ICUgMikpCisgICAgICAg
IGxldmVsTG93Kys7CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IG1fcnVucy5ydW5Db3VudCgpIC0g
MTsKKworICAgIHdoaWxlIChsZXZlbEhpZ2ggPj0gbGV2ZWxMb3cpIHsKKyAgICAgICAgdW5zaWdu
ZWQgaSA9IDA7CisgICAgICAgIFJ1biogcnVuID0gbV9ydW5zLmZpcnN0UnVuKCk7CisgICAgICAg
IHdoaWxlIChpIDwgY291bnQpIHsKKyAgICAgICAgICAgIGZvciAoO2kgPCBjb3VudCAmJiBydW4g
JiYgcnVuLT5sZXZlbCgpIDwgbGV2ZWxIaWdoOyBpKyspCisgICAgICAgICAgICAgICAgcnVuID0g
cnVuLT5uZXh0KCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IGk7CisgICAgICAgICAg
ICBmb3IgKDtpIDw9IGNvdW50ICYmIHJ1biAmJiBydW4tPmxldmVsKCkgPj0gbGV2ZWxIaWdoOyBp
KyspCisgICAgICAgICAgICAgICAgcnVuID0gcnVuLT5uZXh0KCk7CisgICAgICAgICAgICB1bnNp
Z25lZCBlbmQgPSBpIC0gMTsKKyAgICAgICAgICAgIG1fcnVucy5yZXZlcnNlUnVucyhzdGFydCwg
ZW5kKTsKKyAgICAgICAgfQorICAgICAgICBsZXZlbEhpZ2gtLTsKKyAgICB9Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFz
cz4KK3ZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojpj
cmVhdGVCaWRpUnVuc0ZvckxpbmUoY29uc3QgSXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9u
T3ZlcnJpZGUgb3ZlcnJpZGUsIGJvb2wgaGFyZExpbmVCcmVhaykKK3sKKyAgICBBU1NFUlQobV9k
aXJlY3Rpb24gPT0gVV9PVEhFUl9ORVVUUkFMKTsKKworICAgIGlmIChvdmVycmlkZSAhPSBWaXN1
YWxEaXJlY3Rpb25PdmVycmlkZTo6Tm9WaXN1YWxPdmVycmlkZSkgeworICAgICAgICBtX2VtcHR5
UnVuID0gZmFsc2U7CisgICAgICAgIG1fc29yID0gbV9jdXJyZW50OworICAgICAgICBtX2VvciA9
IEl0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gZW5kICYmICFtX2N1cnJl
bnQuYXRFbmQoKSkgeworICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAg
ICBpbmNyZW1lbnQoKTsKKyAgICAgICAgfQorICAgICAgICBtX2RpcmVjdGlvbiA9IG92ZXJyaWRl
ID09IFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlOjpWaXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlID8g
VV9MRUZUX1RPX1JJR0hUIDogVV9SSUdIVF9UT19MRUZUOworICAgICAgICBhcHBlbmRSdW4oKTsK
KyAgICAgICAgbV9ydW5zLnNldExvZ2ljYWxseUxhc3RSdW4obV9ydW5zLmxhc3RSdW4oKSk7Cisg
ICAgICAgIGlmIChvdmVycmlkZSA9PSBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZTo6VmlzdWFsUmln
aHRUb0xlZnRPdmVycmlkZSAmJiBtX3J1bnMucnVuQ291bnQoKSkKKyAgICAgICAgICAgIG1fcnVu
cy5yZXZlcnNlUnVucygwLCBtX3J1bnMucnVuQ291bnQoKSAtIDEpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9lbXB0eVJ1biA9IHRydWU7CisKKyAgICBtX2VvciA9IEl0ZXJhdG9y
KCk7CisKKyAgICBtX2xhc3QgPSBtX2N1cnJlbnQ7CisgICAgYm9vbCBwYXN0RW5kID0gZmFsc2U7
CisgICAgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+IHN0YXRl
QXRFbmQ7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBVQ2hhckRpcmVjdGlvbiBkaXJD
dXJyZW50OworICAgICAgICBpZiAocGFzdEVuZCAmJiAoaGFyZExpbmVCcmVhayB8fCBtX2N1cnJl
bnQuYXRFbmQoKSkpIHsKKyAgICAgICAgICAgIFBBTDo6QmlkaUNvbnRleHQqIGMgPSBjb250ZXh0
KCk7CisgICAgICAgICAgICBpZiAoaGFyZExpbmVCcmVhaykgeworICAgICAgICAgICAgICAgIC8v
IEEgZGV2aWF0aW9uIGZyb20gdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0gaW4gb3JkZXIgdG8g
bWF0Y2gKKyAgICAgICAgICAgICAgICAvLyBXaW5JRSBhbmQgdXNlciBleHBlY3RhdGlvbnM6IGhh
cmQgbGluZSBicmVha3MgcmVzZXQgYmlkaSBzdGF0ZQorICAgICAgICAgICAgICAgIC8vIGNvbWlu
ZyBmcm9tIHVuaWNvZGUgYmlkaSBjb250cm9sIGNoYXJhY3RlcnMsIGJ1dCBub3QgdGhvc2UgZnJv
bQorICAgICAgICAgICAgICAgIC8vIERPTSBub2RlcyB3aXRoIHNwZWNpZmllZCBkaXJlY3Rpb25h
bGl0eQorICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQuc2V0Q29udGV4dChjLT5jb3B5U3RhY2tS
ZW1vdmluZ1VuaWNvZGVFbWJlZGRpbmdDb250ZXh0cygpKTsKKworICAgICAgICAgICAgICAgIGRp
ckN1cnJlbnQgPSBzdGF0ZUF0RW5kLmNvbnRleHQoKS0+ZGlyKCk7CisgICAgICAgICAgICAgICAg
c3RhdGVBdEVuZC5zZXRFb3JEaXIoZGlyQ3VycmVudCk7CisgICAgICAgICAgICAgICAgc3RhdGVB
dEVuZC5zZXRMYXN0RGlyKGRpckN1cnJlbnQpOworICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQu
c2V0TGFzdFN0cm9uZ0RpcihkaXJDdXJyZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgd2hpbGUgKGMtPnBhcmVudCgpKQorICAgICAgICAgICAgICAgICAgICBjID0g
Yy0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IGMtPmRpcigpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGlyQ3VycmVudCA9IG1f
Y3VycmVudC5kaXJlY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0KCktPm92ZXJyaWRl
KCkKKyAgICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJF
RERJTkcKKyAgICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVfTEVGVF9UT19SSUdIVF9F
TUJFRERJTkcKKyAgICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVfUklHSFRfVE9fTEVG
VF9PVkVSUklERQorICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9MRUZUX1RPX1JJ
R0hUX09WRVJSSURFCisgICAgICAgICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBVX1BPUF9ESVJF
Q1RJT05BTF9GT1JNQVQpCisgICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IGNvbnRleHQoKS0+
ZGlyKCk7CisgICAgICAgICAgICBlbHNlIGlmIChkaXJDdXJyZW50ID09IFVfRElSX05PTl9TUEFD
SU5HX01BUkspCisgICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IG1fc3RhdHVzLmxhc3Q7Cisg
ICAgICAgIH0KKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICAgICAgLy8gT3VyIFdpbmRvd3MgYnVp
bGQgaGFzbid0IHVwZGF0ZWQgaXRzIGhlYWRlcnMgZnJvbSBJQ1UgNi4xLCB3aGljaCBkb2Vzbid0
IGhhdmUgdGhlc2Ugc3ltYm9scy4KKyAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rpb24gVV9GSVJT
VF9TVFJPTkdfSVNPTEFURSA9IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPigxOSk7CisgICAg
ICAgIGNvbnN0IFVDaGFyRGlyZWN0aW9uIFVfTEVGVF9UT19SSUdIVF9JU09MQVRFID0gc3RhdGlj
X2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KDIwKTsKKyAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rpb24g
VV9SSUdIVF9UT19MRUZUX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4oMjEp
OworICAgICAgICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX1BPUF9ESVJFQ1RJT05BTF9JU09MQVRF
ID0gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KDIyKTsKKyNlbmRpZgorICAgICAgICAvLyBX
ZSBpZ25vcmUgYWxsIGNoYXJhY3RlciBkaXJlY3Rpb25hbGl0eSB3aGlsZSBpbiB1bmljb2RlLWJp
ZGk6IGlzb2xhdGUgc3BhbnMuCisgICAgICAgIC8vIFdlJ2xsIGhhbmRsZSBvcmRlcmluZyB0aGUg
aXNvbGF0ZWQgY2hhcmFjdGVycyBpbiBhIHNlY29uZCBwYXNzLgorICAgICAgICBpZiAoaW5Jc29s
YXRlKCkgfHwgZGlyQ3VycmVudCA9PSBVX0ZJUlNUX1NUUk9OR19JU09MQVRFIHx8IGRpckN1cnJl
bnQgPT0gVV9MRUZUX1RPX1JJR0hUX0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBVX1JJR0hUX1RP
X0xFRlRfSVNPTEFURSB8fCBkaXJDdXJyZW50ID09IFVfUE9QX0RJUkVDVElPTkFMX0lTT0xBVEUp
CisgICAgICAgICAgICBkaXJDdXJyZW50ID0gVV9PVEhFUl9ORVVUUkFMOworCisgICAgICAgIEFT
U0VSVChtX3N0YXR1cy5lb3IgIT0gVV9PVEhFUl9ORVVUUkFMIHx8IG1fZW9yLmF0RW5kKCkpOwor
ICAgICAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsKKworICAgICAgICAvLyBlbWJlZGRpbmcgYW5k
IG92ZXJyaWRlcyAoWDEtWDkgaW4gdGhlIEJpZGkgc3BlY3MpCisgICAgICAgIGNhc2UgVV9SSUdI
VF9UT19MRUZUX0VNQkVERElORzoKKyAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFRfRU1CRURE
SU5HOgorICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9PVkVSUklERToKKyAgICAgICAgY2Fz
ZSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREU6CisgICAgICAgIGNhc2UgVV9QT1BfRElSRUNUSU9O
QUxfRk9STUFUOgorICAgICAgICAgICAgZW1iZWQoZGlyQ3VycmVudCwgUEFMOjpGcm9tVW5pY29k
ZSk7CisgICAgICAgICAgICBjb21taXRFeHBsaWNpdEVtYmVkZGluZygpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgLy8gc3Ryb25nIHR5cGVzCisgICAgICAgIGNhc2UgVV9MRUZUX1RP
X1JJR0hUOgorICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1cy5sYXN0KSB7CisgICAgICAgICAg
ICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZU
X0FSQUJJQzoKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6CisgICAgICAgICAg
ICBjYXNlIFVfQVJBQklDX05VTUJFUjoKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFz
dCAhPSBVX0VVUk9QRUFOX05VTUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9U
T19SSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9S
OgorICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgorICAgICAg
ICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBV
X0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgor
ICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBV
X1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoK
KyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9U
T19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG51bWJlcnMgbmVlZCB0
byBiZSBvbiBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2ZWwsIHNvIGxldCdzIGNsb3NlIHRoYXQgcnVu
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVS
OworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dCgpLT5kaXIoKSAhPSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV1dHJhbHMgdGFrZSB0aGUgZW1iZWRkaW5n
IGRpcmVjdGlvbiwgd2hpY2ggaXMgUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9y
ID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9S
SUdIVF9UT19MRUZUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEFyYWJpYyBudW1iZXJzIGFyZSBhbHdheXMgb24gYSBoaWdo
ZXIgZW1iZWRkaW5nIGxldmVsLCBzbyBsZXQncyBjbG9zZSB0aGF0IHJ1bgorICAgICAgICAgICAg
ICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigp
ICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5l
dXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24sIHdoaWNoIGlzIFIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAg
bV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbGFzdCBzdHVmZiB0YWtlcyBlbWJlZGRpbmcgZGlyCisgICAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigpID09IFVfUklHSFRfVE9fTEVGVCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7
CisgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAg
ICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gVV9MRUZUX1RPX1JJR0hUOworICAgICAgICAgICAgbV9k
aXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgorICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVG
VDoKKyAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMubGFzdCkgeworICAgICAgICAgICAgY2Fz
ZSBVX0xFRlRfVE9fUklHSFQ6CisgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgor
ICAgICAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6CisgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7CisgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgICAgICBjYXNlIFVf
UklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJQzoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5B
VE9SOgorICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAg
ICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfQkxPQ0tf
U0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgorICAgICAg
ICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfT1RI
RVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BF
QU5fTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25n
ID09IFVfTEVGVF9UT19SSUdIVCAmJiBjb250ZXh0KCktPmRpcigpID09IFVfTEVGVF9UT19SSUdI
VCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVz
LmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigp
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZU
X1RPX1JJR0hUKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigpID09
IFVfTEVGVF9UT19SSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0
OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7
CisgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgICAg
ICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gZGlyQ3VycmVudDsKKyAgICAgICAgICAgIG1fZGlyZWN0
aW9uID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IC8vIHdlYWsgdHlwZXM6CisKKyAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAg
ICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMp
IHsKKyAgICAgICAgICAgICAgICAvLyBpZiBsYXN0IHN0cm9uZyB3YXMgQUwgY2hhbmdlIEVOIHRv
IEFOCisgICAgICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1cy5sYXN0KSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfTEVG
VF9UT19SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xF
RlRfQVJBQklDOgorICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgorICAgICAg
ICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1C
RVI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVV9F
VVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgICAgIGNhc2UgVV9DT01NT05f
TlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9
PSBVX0VVUk9QRUFOX05VTUJFUikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgICAgICAgICBjYXNlIFVfRVVS
T1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZ
X05FVVRSQUw6CisgICAgICAgICAgICAgICAgY2FzZSBVX0JMT0NLX1NFUEFSQVRPUjoKKyAgICAg
ICAgICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6CisgICAgICAgICAgICAgICAgY2Fz
ZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICAgICAgY2FzZSBVX09USEVSX05F
VVRSQUw6CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVB
Tl9OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ry
b25nID09IFVfUklHSFRfVE9fTEVGVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEVOcyBvbiBib3RoIHNpZGVzIGJlaGF2ZSBsaWtlIFJzLCBzbyB0aGUgbmV1dHJhbHMgc2hvdWxk
IGJlIFIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGVybWluYXRlIHRoZSBFTiBy
dW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhbiBSIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2VvciA9IG1fc3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlO
QVRPUiA/IG1fbGFzdEJlZm9yZUVUIDogbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlZ2lu
IGEgbmV3IEVOIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9
IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgQU4gcnVuLgorICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlQgfHwgY29udGV4dCgpLT5k
aXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBNYWtlIGFuIFIgcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9z
dGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SID8gbV9sYXN0QmVmb3Jl
RVQgOiBtX2xhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBV
X1JJR0hUX1RPX0xFRlQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVnaW4gYSBuZXcgRU4gcnVuLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgUiBydW4gdG8gaW5jbHVkZSB0aGUgbmV1dHJhbHMu
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fc3RhdHVzLmxhc3QgPT0gVV9FVVJP
UEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJlZm9yZUVUIDogbV9sYXN0OworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEJlZ2luIGEgbmV3IEVOIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9u
ID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZW9yID0g
bV9jdXJyZW50OworICAgICAgICAgICAgICAgIG1fc3RhdHVzLmVvciA9IFVfRVVST1BFQU5fTlVN
QkVSOworICAgICAgICAgICAgICAgIGlmIChtX2RpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwp
CisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9MRUZUX1RPX1JJR0hUOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgZGlyQ3VycmVu
dCA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMubGFzdCkg
eworICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9MRUZUX1RPX1JJR0hUKQorICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VV9BUkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFC
SUM6CisgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgorICAgICAgICAgICAgICAg
IG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9S
OgorICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsK
KyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAg
ICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgorICAgICAgICAgICAgY2FzZSBV
X0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgor
ICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBV
X1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoK
KyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUgorICAg
ICAgICAgICAgICAgICAgICB8fCAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSICYm
IChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfUklHSFRfVE9fTEVGVCB8fCBjb250ZXh0KCktPmRp
cigpID09IFVfUklHSFRfVE9fTEVGVCkpCisgICAgICAgICAgICAgICAgICAgIHx8IChtX3N0YXR1
cy5lb3IgIT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgbV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX0xF
RlRfVE9fUklHSFQgJiYgY29udGV4dCgpLT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgcnVuIGJlZm9yZSB0aGUgbmV1dHJh
bHMuCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgICAg
ICAvLyBCZWdpbiBhbiBSIHJ1biBmb3IgdGhlIG5ldXRyYWxzLgorICAgICAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKKyAgICAgICAgICAgICAgICAgICAg
bV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVf
TEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVDsKKyAgICAgICAgICAgICAgICBtX2VvciA9
IG1fbGFzdDsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKKyAgICAgICAgICAgIG1f
c3RhdHVzLmVvciA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgIGlmIChtX2RpcmVjdGlv
biA9PSBVX09USEVSX05FVVRSQUwpCisgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0FS
QUJJQ19OVU1CRVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVX0VVUk9QRUFO
X05VTUJFUl9TRVBBUkFUT1I6CisgICAgICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRP
UjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RF
Uk1JTkFUT1I6CisgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05V
TUJFUikgeworICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBVX0VVUk9QRUFOX05VTUJFUjsK
KyAgICAgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKKyAgICAgICAgICAgICAgICBtX3N0
YXR1cy5lb3IgPSBkaXJDdXJyZW50OworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5s
YXN0ICE9IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IpCisgICAgICAgICAgICAgICAgbV9s
YXN0QmVmb3JlRVQgPSBtX2VtcHR5UnVuID8gbV9lb3IgOiBtX2xhc3Q7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAvLyBib3VuZGFyeSBuZXV0cmFscyBzaG91bGQgYmUgaWdub3JlZAor
ICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoKKyAgICAgICAgICAgIGlmIChtX2VvciA9
PSBtX2xhc3QpCisgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIC8vIG5ldXRyYWxzCisgICAgICAgIGNhc2UgVV9CTE9DS19T
RVBBUkFUT1I6CisgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBkbyB3ZSBkbyB3aXRoIG5ld2xp
bmUgYW5kIHBhcmFncmFwaCBzZXBhcmF0b3JzIHRoYXQgY29tZSB0byBoZXJlPworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgcnVsZSBMMS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFzdEVu
ZCAmJiAobV9lb3IgPT0gbV9jdXJyZW50IHx8ICFuZWVkc0NvbnRpbnVlUGFzdEVuZCgpKSkgewor
ICAgICAgICAgICAgaWYgKCFtX3JlYWNoZWRFbmRPZkxpbmUpIHsKKyAgICAgICAgICAgICAgICBt
X2VvciA9IGVuZE9mTGluZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fc3RhdHVzLmVvcikg
eworICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgorICAgICAgICAgICAgICAg
IGNhc2UgVV9SSUdIVF9UT19MRUZUOgorICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVN
QkVSOgorICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IG1fc3RhdHVzLmVvcjsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFO
X05VTUJFUjoKKyAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0
U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfRVVST1BFQU5f
TlVNQkVSOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG5ldXRyYWxzIGluIHRo
aXMgY2FzZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4
MTcKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jdXJy
ZW50ID0gZW5kOworICAgICAgICAgICAgbV9zdGF0dXMgPSBzdGF0ZUF0RW5kLm1fc3RhdHVzOwor
ICAgICAgICAgICAgbV9zb3IgPSBzdGF0ZUF0RW5kLm1fc29yOworICAgICAgICAgICAgbV9lb3Ig
PSBzdGF0ZUF0RW5kLm1fZW9yOworICAgICAgICAgICAgbV9sYXN0ID0gc3RhdGVBdEVuZC5tX2xh
c3Q7CisgICAgICAgICAgICBtX3JlYWNoZWRFbmRPZkxpbmUgPSBzdGF0ZUF0RW5kLm1fcmVhY2hl
ZEVuZE9mTGluZTsKKyAgICAgICAgICAgIG1fbGFzdEJlZm9yZUVUID0gc3RhdGVBdEVuZC5tX2xh
c3RCZWZvcmVFVDsKKyAgICAgICAgICAgIG1fZW1wdHlSdW4gPSBzdGF0ZUF0RW5kLm1fZW1wdHlS
dW47CisgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfT1RIRVJfTkVVVFJBTDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgdXBkYXRlU3RhdHVzTGFzdEZyb21DdXJy
ZW50RGlyZWN0aW9uKGRpckN1cnJlbnQpOworICAgICAgICBtX2xhc3QgPSBtX2N1cnJlbnQ7CisK
KyAgICAgICAgaWYgKG1fZW1wdHlSdW4pIHsKKyAgICAgICAgICAgIG1fc29yID0gbV9jdXJyZW50
OworICAgICAgICAgICAgbV9lbXB0eVJ1biA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
aW5jcmVtZW50KCk7CisgICAgICAgIGlmICghbV9jdXJyZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1
ZW5jZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGJvb2wgY29tbWl0dGVkID0gY29tbWl0RXhw
bGljaXRFbWJlZGRpbmcoKTsKKyAgICAgICAgICAgIGlmIChjb21taXR0ZWQgJiYgcGFzdEVuZCkg
eworICAgICAgICAgICAgICAgIG1fY3VycmVudCA9IGVuZDsKKyAgICAgICAgICAgICAgICBtX3N0
YXR1cyA9IHN0YXRlQXRFbmQubV9zdGF0dXM7CisgICAgICAgICAgICAgICAgbV9zb3IgPSBzdGF0
ZUF0RW5kLm1fc29yOworICAgICAgICAgICAgICAgIG1fZW9yID0gc3RhdGVBdEVuZC5tX2VvcjsK
KyAgICAgICAgICAgICAgICBtX2xhc3QgPSBzdGF0ZUF0RW5kLm1fbGFzdDsKKyAgICAgICAgICAg
ICAgICBtX3JlYWNoZWRFbmRPZkxpbmUgPSBzdGF0ZUF0RW5kLm1fcmVhY2hlZEVuZE9mTGluZTsK
KyAgICAgICAgICAgICAgICBtX2xhc3RCZWZvcmVFVCA9IHN0YXRlQXRFbmQubV9sYXN0QmVmb3Jl
RVQ7CisgICAgICAgICAgICAgICAgbV9lbXB0eVJ1biA9IHN0YXRlQXRFbmQubV9lbXB0eVJ1bjsK
KyAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfT1RIRVJfTkVVVFJBTDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
cGFzdEVuZCAmJiAobV9jdXJyZW50ID09IGVuZCB8fCBtX2N1cnJlbnQuYXRFbmQoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChtX2VtcHR5UnVuKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgc3RhdGVBdEVuZC5tX3N0YXR1cyA9IG1fc3RhdHVzOworICAgICAgICAgICAgc3RhdGVB
dEVuZC5tX3NvciA9IG1fc29yOworICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2VvciA9IG1fZW9y
OworICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2xhc3QgPSBtX2xhc3Q7CisgICAgICAgICAgICBz
dGF0ZUF0RW5kLm1fcmVhY2hlZEVuZE9mTGluZSA9IG1fcmVhY2hlZEVuZE9mTGluZTsKKyAgICAg
ICAgICAgIHN0YXRlQXRFbmQubV9sYXN0QmVmb3JlRVQgPSBtX2xhc3RCZWZvcmVFVDsKKyAgICAg
ICAgICAgIHN0YXRlQXRFbmQubV9lbXB0eVJ1biA9IG1fZW1wdHlSdW47CisgICAgICAgICAgICBl
bmRPZkxpbmUgPSBtX2xhc3Q7CisgICAgICAgICAgICBwYXN0RW5kID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIG1fcnVucy5zZXRMb2dpY2FsbHlMYXN0UnVuKG1fcnVucy5sYXN0UnVu
KCkpOworICAgIHJlb3JkZXJSdW5zRnJvbUxldmVscygpOworICAgIGVuZE9mTGluZSA9IEl0ZXJh
dG9yKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5
cGVuYW1lIERlcml2ZWRDbGFzcz4KK3ZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVu
LCBEZXJpdmVkQ2xhc3M+OjpzZXRXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29s
YXRlZFJ1bihSdW4mIHJ1biwgc2l6ZV90IHRyYW5zaXRpb24pCit7CisgICAgQVNTRVJUKCFtX3do
aXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLmNvbnRhaW5zKCZydW4p
KTsKKyAgICBtX3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLmFk
ZCgmcnVuLCB0cmFuc2l0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5
cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordW5zaWduZWQgQmlkaVJlc29sdmVy
QmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojp3aGl0ZXNwYWNlQ29sbGFwc2luZ1Ry
YW5zaXRpb25Gb3JJc29sYXRlZFJ1bihSdW4mIHJ1bikKK3sKKyAgICByZXR1cm4gbV93aGl0ZXNw
YWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bi50YWtlKCZydW4pOworfQorCit9
IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4
dC9CaWRpUnVuTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlSdW5MaXN0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMGU0NDg2OWQ5YzVkNWRlZjZhZDZiZGEwMWRlMTU0MWIzODQ4OTZjMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpUnVuTGlz
dC5oCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFBBTCB7CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+
CitjbGFzcyBCaWRpUnVuTGlzdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmlkaVJ1bkxp
c3QpOworcHVibGljOgorICAgIEJpZGlSdW5MaXN0KCkKKyAgICAgICAgOiBtX2xhc3RSdW4obnVs
bHB0cikKKyAgICAgICAgLCBtX2xvZ2ljYWxseUxhc3RSdW4obnVsbHB0cikKKyAgICAgICAgLCBt
X3J1bkNvdW50KDApCisgICAgeworICAgIH0KKworICAgIC8vIEZJWE1FOiBPbmNlIEJpZGlSZXNv
bHZlciBubyBsb25nZXIgb3ducyB0aGUgQmlkaVJ1bkxpc3QsCisgICAgLy8gdGhlbiB+QmlkaVJ1
bkxpc3Qgc2hvdWxkIGNhbGwgZGVsZXRlUnVucygpIGF1dG9tYXRpY2FsbHkuCisKKyAgICBSdW4q
IGZpcnN0UnVuKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFJ1bi5nZXQoKTsgfQorICAgIFJ1biog
bGFzdFJ1bigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJ1bjsgfQorICAgIFJ1biogbG9naWNhbGx5
TGFzdFJ1bigpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbGx5TGFzdFJ1bjsgfQorICAgIHVuc2ln
bmVkIHJ1bkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ydW5Db3VudDsgfQorCisgICAgdm9pZCBh
cHBlbmRSdW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJik7CisgICAgdm9pZCBwcmVwZW5kUnVuKHN0
ZDo6dW5pcXVlX3B0cjxSdW4+JiYpOworCisgICAgdm9pZCBtb3ZlUnVuVG9FbmQoUnVuKik7Cisg
ICAgdm9pZCBtb3ZlUnVuVG9CZWdpbm5pbmcoUnVuKik7CisKKyAgICB2b2lkIGNsZWFyKCk7Cisg
ICAgdm9pZCByZXZlcnNlUnVucyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKKyAgICB2
b2lkIHJlb3JkZXJSdW5zRnJvbUxldmVscygpOworCisgICAgdm9pZCBzZXRMb2dpY2FsbHlMYXN0
UnVuKFJ1biogcnVuKSB7IG1fbG9naWNhbGx5TGFzdFJ1biA9IHJ1bjsgfQorCisgICAgdm9pZCBy
ZXBsYWNlUnVuV2l0aFJ1bnMoUnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4mIG5ld1J1
bnMpOworCitwcml2YXRlOgorCisgICAgLy8gVGhlIHJ1bnMgZm9ybSBhIHNpbmdseS1saW5rZWQt
bGlzdCwgd2hlcmUgdGhlIGxpbmtzIChSdW46Om1fbmV4dCkgaW1wbHkgb3duZXJzaGlwIChhbmQg
YXJlIG9mIHR5cGUgc3RkOjp1bmlxdWVfcHRyKS4KKyAgICAvLyBUaGUgcmF3IHBvaW50ZXJzIGJl
bG93IHBvaW50IGludG8gdGhlIHNpbmdseS1saW5rZWQtbGlzdC4KKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UnVuPiBtX2ZpcnN0UnVuOyAvLyBUaGUgaGVhZCBvZiB0aGUgbGlzdAorICAgIFJ1biogbV9s
YXN0UnVuOworICAgIFJ1biogbV9sb2dpY2FsbHlMYXN0UnVuOworICAgIHVuc2lnbmVkIG1fcnVu
Q291bnQ7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgUnVuPgoraW5saW5lIHZvaWQgQmlkaVJ1bkxp
c3Q8UnVuPjo6YXBwZW5kUnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYgcnVuKQoreworICAgIGlm
ICghbV9maXJzdFJ1bikgeworICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShydW4pOworICAg
ICAgICBtX2xhc3RSdW4gPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1fbGFzdFJ1bi0+c2V0TmV4dChXVEZNb3ZlKHJ1bikpOworICAgICAgICBtX2xhc3RSdW4gPSBt
X2xhc3RSdW4tPm5leHQoKTsKKyAgICB9CisgICAgbV9ydW5Db3VudCsrOworfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgUnVuPgoraW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bihz
dGQ6OnVuaXF1ZV9wdHI8UnVuPiYmIHJ1bikKK3sKKyAgICBBU1NFUlQoIXJ1bi0+bmV4dCgpKTsK
KworICAgIGlmICghbV9sYXN0UnVuKQorICAgICAgICBtX2xhc3RSdW4gPSBydW4uZ2V0KCk7Cisg
ICAgZWxzZQorICAgICAgICBydW4tPnNldE5leHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7CisgICAg
bV9maXJzdFJ1biA9IFdURk1vdmUocnVuKTsKKyAgICBtX3J1bkNvdW50Kys7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBSdW4+CitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9F
bmQoUnVuKiBydW4pCit7CisgICAgQVNTRVJUKG1fZmlyc3RSdW4pOworICAgIEFTU0VSVChtX2xh
c3RSdW4pOworICAgIEFTU0VSVChydW4tPm5leHQoKSk7CisKKyAgICBSdW4qIHByZXZpb3VzID0g
bnVsbHB0cjsKKyAgICBSdW4qIGN1cnJlbnQgPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIHdoaWxl
IChjdXJyZW50ICE9IHJ1bikgeworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAg
IGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4dCgpOworICAgIH0KKworICAgIGlmICghcHJldmlvdXMp
IHsKKyAgICAgICAgQVNTRVJUKG1fZmlyc3RSdW4uZ2V0KCkgPT0gcnVuKTsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJ1bj4gb3JpZ2luYWxGaXJzdFJ1biA9IFdURk1vdmUobV9maXJzdFJ1bik7
CisgICAgICAgIG1fZmlyc3RSdW4gPSBvcmlnaW5hbEZpcnN0UnVuLT50YWtlTmV4dCgpOworICAg
ICAgICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZShvcmlnaW5hbEZpcnN0UnVuKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXMt
PnRha2VOZXh0KCk7CisgICAgICAgIHByZXZpb3VzLT5zZXROZXh0KGN1cnJlbnQtPnRha2VOZXh0
KCkpOworICAgICAgICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZSh0YXJnZXQpKTsKKyAgICB9
Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+CitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+
Ojptb3ZlUnVuVG9CZWdpbm5pbmcoUnVuKiBydW4pCit7CisgICAgQVNTRVJUKG1fZmlyc3RSdW4p
OworICAgIEFTU0VSVChtX2xhc3RSdW4pOworICAgIEFTU0VSVChydW4gIT0gbV9maXJzdFJ1bi5n
ZXQoKSk7CisKKyAgICBSdW4qIHByZXZpb3VzID0gbV9maXJzdFJ1bi5nZXQoKTsKKyAgICBSdW4q
IGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4dCgpOworICAgIHdoaWxlIChjdXJyZW50ICE9IHJ1bikg
eworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBwcmV2aW91
cy0+bmV4dCgpOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9IHBy
ZXZpb3VzLT50YWtlTmV4dCgpOworICAgIHByZXZpb3VzLT5zZXROZXh0KHJ1bi0+dGFrZU5leHQo
KSk7CisgICAgaWYgKHJ1biA9PSBtX2xhc3RSdW4pCisgICAgICAgIG1fbGFzdFJ1biA9IHByZXZp
b3VzOworCisgICAgdGFyZ2V0LT5zZXROZXh0KFdURk1vdmUobV9maXJzdFJ1bikpOworICAgIG1f
Zmlyc3RSdW4gPSBXVEZNb3ZlKHRhcmdldCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Cit2
b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyhSdW4qIHRvUmVwbGFjZSwg
QmlkaVJ1bkxpc3Q8UnVuPiYgbmV3UnVucykKK3sKKyAgICBBU1NFUlQobmV3UnVucy5ydW5Db3Vu
dCgpKTsKKyAgICBBU1NFUlQobV9maXJzdFJ1bik7CisgICAgQVNTRVJUKHRvUmVwbGFjZSk7CisK
KyAgICBtX3J1bkNvdW50ICs9IG5ld1J1bnMucnVuQ291bnQoKSAtIDE7IC8vIFdlIGFyZSBhZGRp
bmcgdGhlIG5ldyBydW5zIGFuZCByZW1vdmluZyB0b1JlcGxhY2UuCisKKyAgICAvLyBGaXggdXAg
YW55IHBvaW50ZXJzIHdoaWNoIG1heSBlbmQgdXAgc3RhbGUuCisgICAgaWYgKG1fbGFzdFJ1biA9
PSB0b1JlcGxhY2UpCisgICAgICAgIG1fbGFzdFJ1biA9IG5ld1J1bnMubGFzdFJ1bigpOworICAg
IGlmIChtX2xvZ2ljYWxseUxhc3RSdW4gPT0gdG9SZXBsYWNlKQorICAgICAgICBtX2xvZ2ljYWxs
eUxhc3RSdW4gPSBuZXdSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKKworICAgIGlmIChtX2ZpcnN0
UnVuLmdldCgpID09IHRvUmVwbGFjZSkgeworICAgICAgICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0
TmV4dChtX2ZpcnN0UnVuLT50YWtlTmV4dCgpKTsKKyAgICAgICAgbV9maXJzdFJ1biA9IFdURk1v
dmUobmV3UnVucy5tX2ZpcnN0UnVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGaW5kIHRo
ZSBydW4ganVzdCBiZWZvcmUgInRvUmVwbGFjZSIgaW4gdGhlIGxpc3Qgb2YgcnVucy4KKyAgICAg
ICAgUnVuKiBwcmV2aW91c1J1biA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgICAgIHdoaWxlIChw
cmV2aW91c1J1bi0+bmV4dCgpICE9IHRvUmVwbGFjZSkKKyAgICAgICAgICAgIHByZXZpb3VzUnVu
ID0gcHJldmlvdXNSdW4tPm5leHQoKTsKKyAgICAgICAgQVNTRVJUKHByZXZpb3VzUnVuKTsKKwor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91c1J1bi0+dGFrZU5l
eHQoKTsKKyAgICAgICAgcHJldmlvdXNSdW4tPnNldE5leHQoV1RGTW92ZShuZXdSdW5zLm1fZmly
c3RSdW4pKTsKKyAgICAgICAgbmV3UnVucy5tX2xhc3RSdW4tPnNldE5leHQodGFyZ2V0LT50YWtl
TmV4dCgpKTsKKyAgICB9CisKKyAgICBuZXdSdW5zLmNsZWFyKCk7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBSdW4+Cit2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OmNsZWFyKCkKK3sKKyAgICBtX2ZpcnN0
UnVuID0gbnVsbHB0cjsKKyAgICBtX2xhc3RSdW4gPSBudWxscHRyOworICAgIG1fbG9naWNhbGx5
TGFzdFJ1biA9IG51bGxwdHI7CisgICAgbV9ydW5Db3VudCA9IDA7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBSdW4+Cit2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnJldmVyc2VSdW5zKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQpCit7CisgICAgaWYgKHN0YXJ0ID49IGVuZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihlbmQg
PCBtX3J1bkNvdW50KTsKKworICAgIC8vIEdldCB0aGUgaXRlbSBiZWZvcmUgdGhlIHN0YXJ0IG9m
IHRoZSBydW5zIHRvIHJldmVyc2UgYW5kIHB1dCBpdCBpbgorICAgIC8vIHxiZWZvcmVTdGFydHwu
IHxjdXJyfCBzaG91bGQgcG9pbnQgdG8gdGhlIGZpcnN0IHJ1biB0byByZXZlcnNlLgorICAgIFJ1
biogY3VyciA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgUnVuKiBiZWZvcmVTdGFydCA9IG51bGxw
dHI7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZm9yICg7IGkgPCBzdGFydDsgKytpKSB7Cisg
ICAgICAgIGJlZm9yZVN0YXJ0ID0gY3VycjsKKyAgICAgICAgY3VyciA9IGN1cnItPm5leHQoKTsK
KyAgICB9CisgICAgUnVuKiBzdGFydFJ1biA9IGN1cnI7CisKKyAgICBmb3IgKDsgaSA8IGVuZDsg
KytpKQorICAgICAgICBjdXJyID0gY3Vyci0+bmV4dCgpOworCisgICAgaWYgKCFjdXJyLT5uZXh0
KCkpCisgICAgICAgIG1fbGFzdFJ1biA9IHN0YXJ0UnVuOworCisgICAgLy8gU3RhbmRhcmQgInNs
aWRpbmcgd2luZG93IiBvZiAzIHBvaW50ZXJzCisgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gcHJl
dmlvdXMgPSBjdXJyLT50YWtlTmV4dCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IGN1cnJl
bnQgPSBiZWZvcmVTdGFydCA/IGJlZm9yZVN0YXJ0LT50YWtlTmV4dCgpIDogV1RGTW92ZShtX2Zp
cnN0UnVuKTsKKyAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UnVuPiBuZXh0ID0gY3VycmVudC0+dGFrZU5leHQoKTsKKyAgICAgICAgY3VycmVudC0+c2V0TmV4
dChXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgIHByZXZpb3VzID0gV1RGTW92ZShjdXJyZW50
KTsKKyAgICAgICAgY3VycmVudCA9IFdURk1vdmUobmV4dCk7CisgICAgfQorCisgICAgaWYgKGJl
Zm9yZVN0YXJ0KQorICAgICAgICBiZWZvcmVTdGFydC0+c2V0TmV4dChXVEZNb3ZlKHByZXZpb3Vz
KSk7CisgICAgZWxzZQorICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShwcmV2aW91cyk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC90ZXh0L1RleHREaXJlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0
RGlyZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2VjMWNmM2I1Y2U3ZTIxMzI4ZWEyZjU1NWFhMDc1Y2Ey
NGE3N2U4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9U
ZXh0RGlyZWN0aW9uLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBjbGFzcyBUZXh0RGlyZWN0aW9uIDogYm9vbCB7
IExUUiwgUlRMIH07CisKK2lubGluZSBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC90ZXh0L1VuaWNvZGVCaWRpLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVW5pY29k
ZUJpZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jMzU4ZTFkOTJjZTE5MGZlYjc2YjEwODVmNGVmMGU0MTM2YWJk
MGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1VuaWNv
ZGVCaWRpLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBj
bGFzcyBFVW5pY29kZUJpZGkgeworICAgIFVCTm9ybWFsLAorICAgIEVtYmVkLAorICAgIE92ZXJy
aWRlLAorICAgIElzb2xhdGUsCisgICAgUGxhaW50ZXh0LAorICAgIElzb2xhdGVPdmVycmlkZSwK
K307CisKK2lubGluZSBib29sIGlzSXNvbGF0ZWQoY29uc3QgRVVuaWNvZGVCaWRpJiB1bmljb2Rl
QmlkaSkKK3sKKyAgICByZXR1cm4gdW5pY29kZUJpZGkgPT0gRVVuaWNvZGVCaWRpOjpJc29sYXRl
CisgICAgICAgIHx8IHVuaWNvZGVCaWRpID09IEVVbmljb2RlQmlkaTo6SXNvbGF0ZU92ZXJyaWRl
CisgICAgICAgIHx8IHVuaWNvZGVCaWRpID09IEVVbmljb2RlQmlkaTo6UGxhaW50ZXh0OworfQor
CitpbmxpbmUgYm9vbCBpc092ZXJyaWRlKEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKK3sKKyAg
ICByZXR1cm4gdW5pY29kZUJpZGkgPT0gRVVuaWNvZGVCaWRpOjpPdmVycmlkZQorICAgICAgICB8
fCB1bmljb2RlQmlkaSA9PSBFVW5pY29kZUJpZGk6Oklzb2xhdGVPdmVycmlkZTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L2lvcy9UZXh0RW5jb2RpbmdS
ZWdpc3RyeUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9pb3MvVGV4dEVuY29k
aW5nUmVnaXN0cnlJT1MubW0KaW5kZXggMmFhYTY4ZDdjY2M1OGQ1MTJiN2Y5OTczM2MyY2NhZWEy
ZWIzYmEzMi4uNGY0YjUzZjRlYTFjNjVkMWU5NzNlODU1M2RkZWEwMjhjZjJkYjllNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L2lvcy9UZXh0RW5jb2RpbmdSZWdpc3Ry
eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvaW9zL1RleHRFbmNvZGlu
Z1JlZ2lzdHJ5SU9TLm1tCkBAIC02OCw2ICs2OCw2IEBAIENGU3RyaW5nRW5jb2Rpbmcgd2ViRGVm
YXVsdENGU3RyaW5nRW5jb2RpbmcoKQogICAgIHJldHVybiBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xh
dGluMTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgUEFMCiAK
ICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC90ZXh0L21hYy9UZXh0RW5jb2RpbmdSZWdpc3RyeU1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9tYWMvVGV4dEVuY29kaW5nUmVnaXN0cnlNYWMubW0KaW5kZXgg
MzA1ZjQwMzVmMDRjZWYxYmUxMzRiZTc5ZmQ5ZjdiYWJmZGEyM2NjMC4uOTQ0NjM0MTc0NDBhMTNl
MTY1ZWZjYTY0NzAwMjcyMDg5ZDc1NWQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC90ZXh0L21hYy9UZXh0RW5jb2RpbmdSZWdpc3RyeU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvbWFjL1RleHRFbmNvZGluZ1JlZ2lzdHJ5TWFjLm1tCkBAIC01NCw2
ICs1NCw2IEBAIENGU3RyaW5nRW5jb2Rpbmcgd2ViRGVmYXVsdENGU3RyaW5nRW5jb2RpbmcoKQog
ICAgIHJldHVybiBlbmNvZGluZzsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBu
YW1lc3BhY2UgUEFMCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IGJkNWE3NDc5Y2IzOWU0NmNjOTEwNDAwZjRlZTM4NDkzMjRjNzUzMWYuLjM3NWY4YzFjN2FkNTAx
NjliMmM4ODNmNGJjOGFmNzFlYzkyMmExZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMjQ4LDcgKzIy
NDgsNiBAQCBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKIHBsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuY3BwCiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0
U2NvcGUuY3BwCiBwbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwCi1wbGF0Zm9ybS90
ZXh0L0JpZGlDb250ZXh0LmNwcAogcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZvcm1hdC5jcHAKIHBs
YXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcAogcGxhdGZvcm0vdGV4dC9QbGF0
Zm9ybUxvY2FsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBiNjYyYjA4N2U3MmVkZTZlYzdjOTM1ZGZhNDdmMDdlMGRjNGQw
NzZmLi44MTliOGNhNDZmZjc1ZjM5MDU1MzllMGE0MDc0NTk2MmUxY2UxZDdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNjI3
LDcgKzM2MjcsNiBAQAogCQlBODREODJDMTExRDM0NzQ4MDA5NzI5OTAgLyogU2NyaXB0YWJsZURv
Y3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODREODJCRjExRDM0NzQ4MDA5NzI5OTAgLyogU2NyaXB0YWJsZURvY3VtZW50UGFyc2Vy
LmggKi87IH07CiAJCUE4NEVCRDgzMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODRFQkQ4
MTBDQjhDOTc3MDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4NTMxMjNEMTFEMDQ3MUIwMEQ0RDA3
NyAvKiBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NTMxMjNDMTFEMDQ3MUIwMEQ0RDA3NyAvKiBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlBODYzRTIwMTEzNDM0MTIwMDAyNzQ5MjYgLyogVW5pY29kZUJp
ZGkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjNF
MjAwMTM0MzQxMjAwMDI3NDkyNiAvKiBVbmljb2RlQmlkaS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4NjYyOUNGMDlEQTJCNDcwMDk2MzNBNSAv
KiBKU1VJRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4NjYyOUM5MDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCAqLzsgfTsKIAkJQTg2
NjI5RDEwOURBMkI0ODAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2NjI5Q0IwOURBMkI0NzAwOTYzM0E1IC8q
IEpTTW91c2VFdmVudC5oICovOyB9OwogCQlBODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNL
ZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODY2MjlDRDA5REEyQjQ3MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmggKi87IH07
CkBAIC0zNjY4LDcgKzM2NjcsNiBAQAogCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4OUNDQzUzMEY0NEU5ODEwMEI1
REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg5Q0NDNTEwRjQ0RTk4MTAwQjVEQTEwIC8qIFJl
cGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggKi87IH07CiAJCUE4QzIyOEExMTFENTcyMkUwMEQ1
QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMyMjg5RjExRDU3MjJFMDBENUE3RDMgLyogRGVj
b2RlZERhdGFEb2N1bWVudFBhcnNlci5oICovOyB9OwotCQlBOEM0MDI5MzEzNDhCMjIyMDA2M0Yx
RTUgLyogQmlkaVJ1bkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QzQwMjkyMTM0OEIyMjIwMDYzRjFFNSAvKiBCaWRpUnVuTGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4QzRBN0ZEMDlE
NTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVk
RWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUE4QzRBODA3MDlENTYzMjcwMDAzQUM4RCAvKiBFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEM0QTdGNTA5RDU2MzI3MDAwM0FDOEQg
LyogRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE4QzRBODBCMDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyaWJ1dGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzRBN0Y5MDlENTYzMjcwMDAz
QUM4RCAvKiBBdHRyaWJ1dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMzkxNyw4ICszOTE1LDYgQEAKIAkJQjJBMUYyQjEwQ0VGMEFCRjAwNDQy
RjZBIC8qIFNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFGMkE4MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNz
aW5nR2x5cGhFbGVtZW50LmggKi87IH07CiAJCUIyQUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMkFGRkM3NjBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUIyQjFGNzE3MEQwMENBQTgwMDRBRUE2NCAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQjFGNzE1MEQw
MENBQTgwMDRBRUE2NCAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCAqLzsgfTsKLQkJQjJDM0RB
MjQwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzRDlGMzBEMDA2QzFEMDBFRjZGMjYgLyogQmlk
aUNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlCMkMzREEyNTBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaVJlc29sdmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzRDlGNDBEMDA2QzFEMDBF
RjZGMjYgLyogQmlkaVJlc29sdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0
cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0Q5RkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTM0MEQwMDZDMUQwMEVG
NkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDM0RBMDQwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCb3VuZGFyaWVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJD
M0RBNDUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRGbGFncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC00MTQ0LDcgKzQxNDAsNiBAQAogCQlCQzRBNTMzNTI1NjA1QTU2MDAyOEM1OTIgLyogRGF0
YURldGVjdG9yVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkM0QTUzMzQyNTYwNUE1NjAwMjhDNTkyIC8qIERhdGFEZXRlY3RvclR5cGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzRBNTMzNzI1
NjA1QUUxMDAyOEM1OTIgLyogU3RvcmFnZUJsb2NraW5nUG9saWN5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzRBNTMzNjI1NjA1QUUxMDAyOEM1OTIg
LyogU3RvcmFnZUJsb2NraW5nUG9saWN5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM0QTUzMzkyNTYwNjM5ODAwMjhDNTkyIC8qIEZvbnRSZW5k
ZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzRBNTMzODI1NjA2Mzk4MDAyOEM1OTIgLyogRm9udFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQzRBNTMzQjI1NjA2
NEUxMDAyOEM1OTIgLyogVGV4dERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0QTUzM0EyNTYwNjRFMTAwMjhDNTkyIC8qIFRleHREaXJl
Y3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQzREREQ5NjI3M0Q5NDk5MDA2NjBFQkIgLyogU2NlbmVLaXRNb2RlbFBsYXllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0REREOEYyNzNEODRF
NzAwNjYwRUJCIC8qIFNjZW5lS2l0TW9kZWxQbGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzREREQ5NzI3M0Q5NEE4MDA2NjBFQkIgLyog
U2NlbmVLaXRNb2RlbExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM0REREOTEyNzNEODRFNzAwNjYwRUJCIC8qIFNjZW5lS2l0TW9k
ZWxMb2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQzUxMTU2RTEyQjE3NDlDMDBDOTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUxMTU2
RDEyQjE3NDlDMDBDOTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gKi87IH07CkBAIC0xNDA2
NSw3ICsxNDA2MCw2IEBACiAJCUE4NTMxMjNDMTFEMDQ3MUIwMEQ0RDA3NyAvKiBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3
b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkv
RnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+
IjsgfTsKIAkJQTg1RjIyMDgxNDMwMzc3RDAwN0NDODg0IC8qIEpTUG9wU3RhdGVFdmVudEN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1BvcFN0YXRlRXZl
bnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODYzRTIwMDEzNDM0
MTIwMDAyNzQ5MjYgLyogVW5pY29kZUJpZGkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVW5pY29kZUJpZGkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg2NjI5
QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNVSUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4
NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVUlFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE4NjYyOUNCMDlEQTJCNDcwMDk2MzNBNSAvKiBKU01vdXNlRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW91c2VFdmVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTQxNDcsNyArMTQxNDEsNiBAQAogCQlBOEMyMjgwRDExRDRB
NTk3MDBENUE3RDMgLyogRG9jdW1lbnRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRG9jdW1lbnRQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBOEMyMjg5RjExRDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBh
cnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNvZGVkRGF0YURvY3Vt
ZW50UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzIyOEEwMTFENTcy
MkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEM0MDI5MjEzNDhCMjIyMDA2M0YxRTUgLyog
QmlkaVJ1bkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmlkaVJ1bkxp
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDNEE3RUIwOUQ1NjMyNzAwMDNB
QzhEIC8qIFN0eWxlZEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0eWxlZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDNEE3RUMw
OUQ1NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlZEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBOEM0QTdFRTA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNDc5Niw5ICsxNDc4OSw2IEBACiAJCUIyQUZGQzhDMEQwMEE1REYwMDMw
MDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBUZXh0Qm91bmRhcmllcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJCMUY3MTQwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRlckV2ZW50c0hpdFJ1
bGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJCMUY3MTUwRDAwQ0FBODAw
NEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUIyQzNEOUYyMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmlkaUNvbnRleHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzRDlGMzBEMDA2QzFEMDBFRjZGMjYgLyogQmlk
aUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZGlDb250ZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEOUY0MEQwMDZDMUQwMEVGNkYy
NiAvKiBCaWRpUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJp
ZGlSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzRDlGRTBEMDA2
QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTZWdtZW50ZWRTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkMzRDlGRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWdtZW50ZWRTdHJpbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMDQwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRCb3VuZGFyaWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Qm91
bmRhcmllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUyMzUsNyArMTUyMjUs
NiBAQAogCQlCQzRBNTMzNDI1NjA1QTU2MDAyOEM1OTIgLyogRGF0YURldGVjdG9yVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0b3JUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDNEE1MzM2MjU2MDVBRTEwMDI4QzU5MiAvKiBTdG9yYWdlQmxvY2tpbmdQb2xpY3ku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUJsb2NraW5nUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDNEE1MzM4MjU2MDYzOTgwMDI4QzU5MiAvKiBGb250UmVuZGVyaW5n
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb250UmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCQzRBNTMzQTI1NjA2NEUxMDAyOEM1OTIgLyogVGV4dERpcmVjdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RGlyZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDNERERDhCMjczRDg0RTcwMDY2MEVCQiAvKiBTY2VuZUtpdE1vZGVsTG9hZGVy
VVNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjZW5lS2l0TW9kZWxMb2FkZXJVU0QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0REREOEMyNzNEODRFNzAwNjYwRUJCIC8qIFNjZW5lS2l0
TW9kZWxMb2FkZXJDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY2VuZUtpdE1vZGVs
TG9hZGVyQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzREREQ4RDI3
M0Q4NEU3MDA2NjBFQkIgLyogU2NlbmVLaXRNb2RlbFBsYXllci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFNjZW5lS2l0TW9kZWxQbGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yODk3MywxMCArMjg5NjIsNiBAQAogCQkJCUIyQjI2NDU5MEQwMEE3N0UwMDBBQ0MxRCAv
KiBjZiAqLywKIAkJCQkxQzE2NUU0RjIzRUNGNTVFMDBCMEZDRkIgLyogY29jb2EgKi8sCiAJCQkJ
QjJDM0Q5RjkwRDAwNkMxRDAwRUY2RjI2IC8qIG1hYyAqLywKLQkJCQlCMkMzRDlGMjBEMDA2QzFE
MDBFRjZGMjYgLyogQmlkaUNvbnRleHQuY3BwICovLAotCQkJCUIyQzNEOUYzMEQwMDZDMUQwMEVG
NkYyNiAvKiBCaWRpQ29udGV4dC5oICovLAotCQkJCUIyQzNEOUY0MEQwMDZDMUQwMEVGNkYyNiAv
KiBCaWRpUmVzb2x2ZXIuaCAqLywKLQkJCQlBOEM0MDI5MjEzNDhCMjIyMDA2M0YxRTUgLyogQmlk
aVJ1bkxpc3QuaCAqLywKIAkJCQlDNTU5MkY3NzFBOTJBQTI4MDAxRjg4NjIgLyogQ2hhcmFjdGVy
UHJvcGVydGllcy5oICovLAogCQkJCTBGREE3QzIwMTg4MzJCQ0MwMEM5NTRCNSAvKiBEYXRlVGlt
ZUZvcm1hdC5jcHAgKi8sCiAJCQkJNDUzRUI2MzUxNTlDNTcwNDAwMDAxQkI3IC8qIERhdGVUaW1l
Rm9ybWF0LmggKi8sCkBAIC0yODk5NiwxMyArMjg5ODEsMTEgQEAKIAkJCQlCMkMzREEwNDBEMDA2
QzFEMDBFRjZGMjYgLyogVGV4dEJvdW5kYXJpZXMuaCAqLywKIAkJCQlBNzE1MUJENzEyRjE1NThG
MDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLywKIAkJCQlBNzdEMDAxMTEzM0IwQUVC
MDBENjY1OEMgLyogVGV4dENoZWNraW5nLmggKi8sCi0JCQkJQkM0QTUzM0EyNTYwNjRFMTAwMjhD
NTkyIC8qIFRleHREaXJlY3Rpb24uaCAqLywKIAkJCQlDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYg
LyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLywKIAkJCQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0
NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwICovLAogCQkJCUIyQzNEQTE4MEQwMDZD
MUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgKi8sCiAJCQkJQjJDM0RBMTkw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggKi8sCiAJCQkJQjJDM0RB
MTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRGbGFncy5oICovLAotCQkJCUE4NjNFMjAwMTM0MzQx
MjAwMDI3NDkyNiAvKiBVbmljb2RlQmlkaS5oICovLAogCQkJCTE0NDc2QUE3MTVEQzRCQjEwMDMw
NURCMiAvKiBXcml0aW5nTW9kZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0ZXh0OwpAQCAtMzM0
NjksMTAgKzMzNDUyLDcgQEAKIAkJCQlCQzk0NjJEODEwN0E3QjRDMDA4NTcxOTMgLyogQmVmb3Jl
TG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjIzQTMyODA5QkJBN0QwMDA2N0NDNTMg
LyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjNE
MEE0NEVGQzcwMEY5OTJFMCAvKiBCZWZvcmVVbmxvYWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQjJDM0RBMjQwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmggaW4gSGVhZGVycyAq
LywKLQkJCQlCMkMzREEyNTBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaVJlc29sdmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0U3ODk4NjExMjBFN0E2MDA2MEVDRTUgLyogQmlkaVJ1bi5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQThDNDAyOTMxMzQ4QjIyMjAwNjNGMUU1IC8qIEJpZGlSdW5MaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyREQ4NzE0QjI2NUY0MzY2MDA1Rjk5N0MgLyogQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOEQxMkIwMjZGNzAw
QzFBMzU5IC8qIEJpcXVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMjUxMkIwMjY3NjAw
QzFBMzU5IC8qIEJpcXVhZERTUEtlcm5lbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDUwOCw2ICsz
NDQ4OCw3IEBACiAJCQkJQkM1M0M1RjUwREE1NkI5MjAwMjFFQjVEIC8qIEdyYWRpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyNzk2NDBEMDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRy
aWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE5Q0RGNDI3NzEwNjM5MDA1M0Y3MzQgLyog
R3JhZGllbnRDb2xvclN0b3AuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDMTlDRTJCMjc3MkJGN0Iw
MDUzRjczNCAvKiBHcmFkaWVudENvbG9yU3RvcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENDgx
RjA0MTQ2QjVDNkIwMEFBNzgzNCAvKiBHcmFkaWVudEltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE5Q0RGMjI3NkZGQzZEMDA1M0Y3MzQgLyogR3JhZGllbnRSZW5kZXJlckNHLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QkI2ODBCQTI1QkExQkU0MDAyQjg3MzggLyogR3JhcGhpY3NDaGVja3NN
YWMuaCBpbiBIZWFkZXJzICovLApAQCAtMzc0OTcsNyArMzc0NzgsNiBAQAogCQkJCTE0MkI5N0NB
MTMxMzg5NDMwMDhCRUY0QiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTU4MkRFMzI1MUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDNzNBNzE1MjE4NTc1ODcwMDRDQ0VBNSAvKiBUZXh0
RGVjb3JhdGlvblRoaWNrbmVzcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM0QTUzM0IyNTYwNjRF
MTAwMjhDNTkyIC8qIFRleHREaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNEE1MzI1
MjU2MDU1NUYwMDI4QzU5MiAvKiBUZXh0RGlyZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2aW9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDODRCNDEyMzcxMTgwMDAwQzYxNjEgLyogVGV4dERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDODQ4NDEyMzZGRDkzMDAwQzYxNjEgLyog
VGV4dERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTM3NTczLDcgKzM3NTUzLDYg
QEAKIAkJCQlCRTkxM0Q4MDE4MUVGOTI0MDBEQ0IwOUUgLyogVHJhY2tQcml2YXRlQmFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQ0QxRjlCMUMyNzAyNEJDMjAwNjE3RUI2IC8qIFRyYWNrUHJpdmF0
ZUJhc2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZGQUMzMEZFMTg0RkIxNDUwMDhDNEYx
RSAvKiBUcmFpbGluZ09iamVjdHMuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDMTlDRTJCMjc3MkJG
N0IwMDUzRjczNCAvKiBHcmFkaWVudENvbG9yU3RvcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
NjA3MTMyMUJEODMwOEIwMERCQzRGMiAvKiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0QzRUVGNDEyNTc5OUZEOTAwNjU2M0JCIC8qIFRyYW5zZmVyRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMUM0MEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzYwMiw3ICszNzU4MSw2IEBACiAJ
CQkJMkVDREJBRDgyMUQ4OTA2MzAwRjAwRUNEIC8qIFVuZG9JdGVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRUNEQkFEMTIxRDg5MDM0MDBGMDBFQ0QgLyogVW5kb01hbmFnZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQTg2M0UyMDExMzQzNDEyMDAwMjc0OTI2IC8qIFVuaWNvZGVCaWRpLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTg4NjRFMTFCQkFGNTc0MDBFNTQwQzkgLyogVW5pcXVlSURCRGF0
YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOThGN0E1MUJCREI3OTMwMEUyQ0M1RiAvKiBV
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOThGN0E5
MUJCREQzODUwMEUyQ0M1RiAvKiBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDg0N2RlMTZkYjYyMzAxODhmMWJiODdl
ZTMyYjI2NzMxZjRlODM5ZDYuLjU5NTM4YzA4NDkxMzAyZTlmMjgwNjBlMTlhNTdmN2QxNmU5NTE4
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtOTI0LDcgKzkyNCw3IEBAIFBhdGggQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6ZWxlbWVudFBhdGgoKSBjb25zdAogCiAgICAgICAgIC8vIENv
bXB1dGUgdGhlIHBhdGggb25seSBpZiB0aGlzIGlzIHRoZSBsYXN0IHBhcnQgb2YgYSBsaW5lIGZv
bGxvd2VkIGJ5IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZS4KICAgICAgICAgY29uc3Qg
YXV0byYgc3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZSgpOwotICAgICAgICBib29sIHJpZ2h0VG9M
ZWZ0VGV4dCA9IHN0eWxlLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAg
ICAgYm9vbCByaWdodFRvTGVmdFRleHQgPSBzdHlsZS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OlJUTDsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCB4VG9sZXJhbmNlID0gNTsK
ICAgICAgICAgc3RhdGljIGNvbnN0IGludCB5VG9sZXJhbmNlID0gNTsKICAgICAgICAgYm9vbCBu
ZWVkc1BhdGggPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZU1hcHBpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWVNYXBwaW5ncy5oCmluZGV4IGE5ZTU2NjMyNWM4YWU2ODA0ZDBmNTc1M2JjOTRkNGE5MWVlMzg0
NmQuLjIxYjliZTFiODBjM2U5M2MzMGI3MjFmYjllYTM4MzA0ZGNhZDcyMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaApAQCAtNDMsOCArNDMs
OCBAQAogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgIlRoZW1lVHlwZXMuaCIKICNp
bmNsdWRlICJUb3VjaEFjdGlvbi5oIgotI2luY2x1ZGUgIlVuaWNvZGVCaWRpLmgiCiAjaW5jbHVk
ZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9Vbmljb2RlQmlkaS5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCkBA
IC0yNjEzLDU4ICsyNjEzLDU4IEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVl
OjpvcGVyYXRvciBUZXh0VHJhbnNmb3JtKCkgY29uc3QKICAgICByZXR1cm4gVGV4dFRyYW5zZm9y
bTo6Tm9uZTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1By
aW1pdGl2ZVZhbHVlKEVVbmljb2RlQmlkaSBlKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBBTDo6RVVuaWNvZGVCaWRpIGUpCiAgICAgOiBD
U1NWYWx1ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NV
bml0VHlwZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKGUpIHsKLSAgICBjYXNlIFVCTm9y
bWFsOgorICAgIGNhc2UgUEFMOjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsOgogICAgICAgICBtX3Zh
bHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vcm1hbDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBF
bWJlZDoKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpFbWJlZDoKICAgICAgICAgbV92YWx1
ZS52YWx1ZUlEID0gQ1NTVmFsdWVFbWJlZDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPdmVy
cmlkZToKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpPdmVycmlkZToKICAgICAgICAgbV92
YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVCaWRpT3ZlcnJpZGU7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXNvbGF0ZToKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlOgogICAg
ICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUlzb2xhdGU7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXNvbGF0ZU92ZXJyaWRlOgorICAgIGNhc2UgUEFMOjpFVW5pY29kZUJpZGk6Oklz
b2xhdGVPdmVycmlkZToKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVJc29sYXRl
T3ZlcnJpZGU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhaW50ZXh0OgorICAgIGNhc2Ug
UEFMOjpFVW5pY29kZUJpZGk6OlBsYWludGV4dDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0g
Q1NTVmFsdWVQbGFpbnRleHQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdGVtcGxhdGU8
PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEVVbmljb2RlQmlkaSgpIGNvbnN0
Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpFVW5p
Y29kZUJpZGkoKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVlSUQoKSk7CiAKICAgICBzd2l0
Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAg
IHJldHVybiBVQk5vcm1hbDsKKyAgICAgICAgcmV0dXJuIFBBTDo6RVVuaWNvZGVCaWRpOjpVQk5v
cm1hbDsKICAgICBjYXNlIENTU1ZhbHVlRW1iZWQ6Ci0gICAgICAgIHJldHVybiBFbWJlZDsKKyAg
ICAgICAgcmV0dXJuIFBBTDo6RVVuaWNvZGVCaWRpOjpFbWJlZDsKICAgICBjYXNlIENTU1ZhbHVl
QmlkaU92ZXJyaWRlOgotICAgICAgICByZXR1cm4gT3ZlcnJpZGU7CisgICAgICAgIHJldHVybiBQ
QUw6OkVVbmljb2RlQmlkaTo6T3ZlcnJpZGU7CiAgICAgY2FzZSBDU1NWYWx1ZUlzb2xhdGU6CiAg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdElzb2xhdGU6Ci0gICAgICAgIHJldHVybiBJc29sYXRlOwor
ICAgICAgICByZXR1cm4gUEFMOjpFVW5pY29kZUJpZGk6Oklzb2xhdGU7CiAgICAgY2FzZSBDU1NW
YWx1ZUlzb2xhdGVPdmVycmlkZToKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0SXNvbGF0ZU92ZXJy
aWRlOgotICAgICAgICByZXR1cm4gSXNvbGF0ZU92ZXJyaWRlOworICAgICAgICByZXR1cm4gUEFM
OjpFVW5pY29kZUJpZGk6Oklzb2xhdGVPdmVycmlkZTsKICAgICBjYXNlIENTU1ZhbHVlUGxhaW50
ZXh0OgogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQbGFpbnRleHQ6Ci0gICAgICAgIHJldHVybiBQ
bGFpbnRleHQ7CisgICAgICAgIHJldHVybiBQQUw6OkVVbmljb2RlQmlkaTo6UGxhaW50ZXh0Owog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBVQk5vcm1hbDsKKyAgICByZXR1cm4gUEFMOjpFVW5pY29kZUJp
ZGk6OlVCTm9ybWFsOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTUHJpbWl0aXZlVmFsdWUoVXNlckRyYWcgZSkKQEAgLTMwMTYsMzUgKzMwMTYsMzUgQEAgdGVt
cGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIE92ZXJmbG93V3JhcCgp
IGNvbnN0CiAgICAgcmV0dXJuIE92ZXJmbG93V3JhcDo6Tm9ybWFsOwogfQogCi10ZW1wbGF0ZTw+
IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoVGV4dERpcmVjdGlv
biBlKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZh
bHVlKFBBTDo6VGV4dERpcmVjdGlvbiBlKQogICAgIDogQ1NTVmFsdWUoUHJpbWl0aXZlQ2xhc3Mp
CiB7CiAgICAgc2V0UHJpbWl0aXZlVW5pdFR5cGUoQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9JRCk7
CiAgICAgc3dpdGNoIChlKSB7Ci0gICAgY2FzZSBUZXh0RGlyZWN0aW9uOjpMVFI6CisgICAgY2Fz
ZSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NT
VmFsdWVMdHI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dERpcmVjdGlvbjo6UlRMOgor
ICAgIGNhc2UgUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJ
RCA9IENTU1ZhbHVlUnRsOwogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4g
aW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBUZXh0RGlyZWN0aW9uKCkgY29uc3QK
K3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6OlRleHRE
aXJlY3Rpb24oKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVlSUQoKSk7CiAKICAgICBzd2l0
Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2UgQ1NTVmFsdWVMdHI6Ci0gICAgICAgIHJl
dHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rp
b246OkxUUjsKICAgICBjYXNlIENTU1ZhbHVlUnRsOgotICAgICAgICByZXR1cm4gVGV4dERpcmVj
dGlvbjo6UlRMOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICByZXR1cm4gUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFI7CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NQcmltaXRpdmVWYWx1ZShXcml0aW5nTW9kZSBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1Byb3BlcnR5LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHku
aAppbmRleCBiYjA3Zjc3ZWE2ZmY1ODdkMDQwZDc3MDlmMDMxMzc0OWI4MDNkNDg0Li4yMjhkZGJj
MzAxYTcwMGNiNTE3YTU3N2RhOWIwZmQ5YzY3ODJjNjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJvcGVydHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVy
dHkuaApAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdyYXBWYWx1ZUluQ29t
bWFTZXBhcmF0ZWRMaXN0KCk7CiAKLSAgICBzdGF0aWMgQ1NTUHJvcGVydHlJRCByZXNvbHZlRGly
ZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBUZXh0RGlyZWN0aW9uLCBXcml0aW5n
TW9kZSk7CisgICAgc3RhdGljIENTU1Byb3BlcnR5SUQgcmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCwgUEFMOjpUZXh0RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7CiAg
ICAgc3RhdGljIGJvb2wgaXNJbmhlcml0ZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKICAgICBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gYWxpYXNlc0ZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwog
ICAgIHN0YXRpYyBib29sIGlzRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9tYWtlcHJvcC5wbAppbmRleCBmOTQxOTE3NGY1YTA5ZTVkMGZhOWZlNWQ2ZGU2ZWJh
YzUwNDJiYjgwLi4zMDYxOTQxYzFmMzIzZjBmMTE2Njc1MTVhZjFmYzE3YTUzODFkZjY1IDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL21ha2Vwcm9wLnBsCkBAIC03MTUsNyArNzE1LDcgQEAgcHJpbnQgR1BFUkYgPDwgIkVP
RiI7CiAgICAgfQogfQogCi1DU1NQcm9wZXJ0eUlEIENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0
aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK0NTU1Byb3BlcnR5SUQgQ1NTUHJv
cGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpCiB7CiAgICAgY29uc3QgVGV4dEZsb3cmIHRleHRmbG93ID0gbWFrZVRleHRGbG93KHdyaXRp
bmdNb2RlLCBkaXJlY3Rpb24pOwogICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKaW5kZXggNDJkYWNkMmRkNWNlM2U1ZjYyMzMzYTIxNjJjYzM3Njc0NmU4ZmI4
OS4uMzhhNjE5N2E3ZjlhYTk1NWI2NjJlNzQ3Y2Y5ZTAwNjI4MGY3Y2JjMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCkBAIC0xNzU0LDcgKzE3NTQsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVU
aXRsZUZyb21UaXRsZUVsZW1lbnQoKQogICAgICAgICB1cGRhdGVUaXRsZShkb3duY2FzdDxIVE1M
VGl0bGVFbGVtZW50PigqbV90aXRsZUVsZW1lbnQpLnRleHRXaXRoRGlyZWN0aW9uKCkpOwogICAg
IGVsc2UgaWYgKGlzPFNWR1RpdGxlRWxlbWVudD4oKm1fdGl0bGVFbGVtZW50KSkgewogICAgICAg
ICAvLyBGSVhNRTogRG9lcyB0aGUgU1ZHIHRpdGxlIGVsZW1lbnQgaGF2ZSBhIHRleHQgZGlyZWN0
aW9uPwotICAgICAgICB1cGRhdGVUaXRsZSh7IGRvd25jYXN0PFNWR1RpdGxlRWxlbWVudD4oKm1f
dGl0bGVFbGVtZW50KS50ZXh0Q29udGVudCgpLCBUZXh0RGlyZWN0aW9uOjpMVFIgfSk7CisgICAg
ICAgIHVwZGF0ZVRpdGxlKHsgZG93bmNhc3Q8U1ZHVGl0bGVFbGVtZW50PigqbV90aXRsZUVsZW1l
bnQpLnRleHRDb250ZW50KCksIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIH0pOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggOWE1MTJlZmU3YzljMDFlZjgyMDEyY2I0M2Y5
YjYxMTU1ODk2N2EyYS4uOTZhZDZjMjljOTA0YjUwNzU5Njg2NjI5MDVjYzUxZWQ4OWMzMWIxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCkBAIC0xMjAxLDcgKzEyMDEsNyBAQCBzdGF0aWMgUG9z
aXRpb24gdXBzdHJlYW1JZ25vcmluZ0VkaXRpbmdCb3VuZGFyaWVzKFBvc2l0aW9uIHBvc2l0aW9u
KQogICAgIHJldHVybiBwb3NpdGlvbjsKIH0KIAotSW5saW5lUnVuQW5kT2Zmc2V0IFBvc2l0aW9u
OjppbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHkgYWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJp
bWFyeURpcmVjdGlvbikgY29uc3QKK0lubGluZVJ1bkFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5l
UnVuQW5kT2Zmc2V0KEFmZmluaXR5IGFmZmluaXR5LCBQQUw6OlRleHREaXJlY3Rpb24gcHJpbWFy
eURpcmVjdGlvbikgY29uc3QKIHsKICAgICBhdXRvIGNhcmV0T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogCkBAIC0xMzc3LDEzICsxMzc3
LDEzIEBAIElubGluZVJ1bkFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KEFm
ZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uCiAgICAgcmV0dXJuIHsgcnVuLCBjYXJldE9m
ZnNldCB9OwogfQogCi1UZXh0RGlyZWN0aW9uIFBvc2l0aW9uOjpwcmltYXJ5RGlyZWN0aW9uKCkg
Y29uc3QKK1BBTDo6VGV4dERpcmVjdGlvbiBQb3NpdGlvbjo6cHJpbWFyeURpcmVjdGlvbigpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2FuY2hvck5vZGUgfHwgIW1fYW5jaG9yTm9kZS0+cmVuZGVyZXIo
KSkKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0dXJuIFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIGlmIChhdXRvKiBibG9ja0Zsb3cgPSBsaW5lYWdl
T2ZUeXBlPFJlbmRlckJsb2NrRmxvdz4oKm1fYW5jaG9yTm9kZS0+cmVuZGVyZXIoKSkuZmlyc3Qo
KSkKICAgICAgICAgcmV0dXJuIGJsb2NrRmxvdy0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKLSAgICBy
ZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246
OkxUUjsKIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgK
aW5kZXggOWM5OTRjMDk3OGM2YTQ4N2Q3ZTIyYmEwYmQ2ZTBhNDg4YzU0YmMxZS4uZGRjYmM3MTNl
MWM2MDhhMmU3MDhjNTVjNDEyNjBjNzg2MTc1MDE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKQEAg
LTE3MSw5ICsxNzEsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCByZW5kZXJzSW5EaWZmZXJlbnRQb3Np
dGlvbihjb25zdCBQb3NpdGlvbiYpIGNvbnN0OwogCiAgICAgSW5saW5lUnVuQW5kT2Zmc2V0IGlu
bGluZVJ1bkFuZE9mZnNldChBZmZpbml0eSkgY29uc3Q7Ci0gICAgSW5saW5lUnVuQW5kT2Zmc2V0
IGlubGluZVJ1bkFuZE9mZnNldChBZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0
aW9uKSBjb25zdDsKKyAgICBJbmxpbmVSdW5BbmRPZmZzZXQgaW5saW5lUnVuQW5kT2Zmc2V0KEFm
ZmluaXR5LCBQQUw6OlRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3Q7CiAKLSAg
ICBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24oKSBjb25zdDsKKyAgICBQQUw6OlRleHRE
aXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbigpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0aGUg
bnVtYmVyIG9mIHBvc2l0aW9ucyB0aGF0IGV4aXN0IGJldHdlZW4gdHdvIHBvc2l0aW9ucy4KICAg
ICBzdGF0aWMgdW5zaWduZWQgcG9zaXRpb25Db3VudEJldHdlZW5Qb3NpdGlvbnMoY29uc3QgUG9z
aXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5k
ZXggOTgwZGRlODUxZjEwNzIzZDc4ZjY2MTk4NDI3MzI0OGY3YTBmYTVjNC4uNDA5OTNiMzY4YzM2
ODQ4OGM3OTY0NDI1ZWUyM2Q0MmU2OWEwZDRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
Y3BwCkBAIC0zMjUsMTQgKzMyNSwxNCBAQCBFbGVtZW50KiBlbmNsb3NpbmdCbG9jayhOb2RlKiBu
b2RlLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkKICAgICByZXR1cm4gaXM8RWxl
bWVudD4oZW5jbG9zaW5nTm9kZSkgPyBkb3duY2FzdDxFbGVtZW50PihlbmNsb3NpbmdOb2RlKSA6
IG51bGxwdHI7CiB9CiAKLVRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCitQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgYXV0byBibG9j
ayA9IGVuY2xvc2luZ0Jsb2NrKHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFi
bG9jaykKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0dXJu
IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIGF1dG8gcmVuZGVyZXIgPSBibG9jay0+cmVu
ZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlv
bjo6TFRSOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgcmV0
dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmRpcmVjdGlvbigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZy5oCmluZGV4IDk2Y2VjOTdjZjdlM2IxNmNlMGYxYzA1YmU3NGQ3MjA4Y2NjNGRhYjkuLmNh
YzYxYjViNWM0NjRkYWQ5MDA2MmM4YzcwMGM1OGJiZjM0MzdlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZy5oCkBAIC0xMzMsNyArMTMzLDcgQEAgYm9vbCBpc0F0VW5zcGxpdHRhYmxlRWxlbWVu
dChjb25zdCBQb3NpdGlvbiYpOwogdW5zaWduZWQgbnVtRW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVz
KGNvbnN0IFBvc2l0aW9uJik7CiB2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwoUG9z
aXRpb24mLCBOb2RlJik7CiAKLVdFQkNPUkVfRVhQT1JUIFRleHREaXJlY3Rpb24gZGlyZWN0aW9u
T2ZFbmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQgUEFMOjpU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soY29uc3QgUG9zaXRpb24mKTsK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gVmlzaWJsZVBvc2l0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKaW5kZXggNDBjNzg0YzNlMzhiOGRhODkyMTJiYjg5ODAyZGNjOTJlNmI4M2Ew
Ni4uMzQzNDhjNzkxOTE5ZTFiODZhZDYyNWM5MTJmNjA3MjUwYmEzYmM1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcApAQCAtMTk2Myw5ICsxOTYzLDkgQEAgV3JpdGluZ0RpcmVjdGlvbiBF
ZGl0b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdAogICAg
IH0KIAogICAgIHN3aXRjaCAocmVuZGVyZXItPnN0eWxlKCkuZGlyZWN0aW9uKCkpIHsKLSAgICBj
YXNlIFRleHREaXJlY3Rpb246OkxUUjoKKyAgICBjYXNlIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
OgogICAgICAgICByZXR1cm4gV3JpdGluZ0RpcmVjdGlvbjo6TGVmdFRvUmlnaHQ7Ci0gICAgY2Fz
ZSBUZXh0RGlyZWN0aW9uOjpSVEw6CisgICAgY2FzZSBQQUw6OlRleHREaXJlY3Rpb246OlJUTDoK
ICAgICAgICAgcmV0dXJuIFdyaXRpbmdEaXJlY3Rpb246OlJpZ2h0VG9MZWZ0OwogICAgIH0KICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggZGIxNjJh
NGM1ODk4ZmUyZTk0Mjg5ZjBjOTY4NTAwMDM3NmEzZmIwYy4uYzYwNWJjYjVlZGVlMDdlNzJkODgz
Y2Y0YWYzMWJkZjVkODdiMmMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAKQEAgLTY1NCwxMiArNjU0LDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnRleHRX
YXNSZXBsYWNlZChDaGFyYWN0ZXJEYXRhKiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnCiAg
ICAgfQogfQogCi1UZXh0RGlyZWN0aW9uIEZyYW1lU2VsZWN0aW9uOjpkaXJlY3Rpb25PZkVuY2xv
c2luZ0Jsb2NrKCkKK1BBTDo6VGV4dERpcmVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6ZGlyZWN0aW9u
T2ZFbmNsb3NpbmdCbG9jaygpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OmRpcmVjdGlvbk9mRW5j
bG9zaW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCkpOwogfQogCi1UZXh0RGlyZWN0aW9uIEZy
YW1lU2VsZWN0aW9uOjpkaXJlY3Rpb25PZlNlbGVjdGlvbigpCitQQUw6OlRleHREaXJlY3Rpb24g
RnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mU2VsZWN0aW9uKCkKIHsKICAgICAvLyBHZXQgYm90
IFZpc2libGVQb3NpdGlvbnMgZmlyc3QgYmVjYXVzZSB2aXNpYmxlU3RhcnQoKSBhbmQgdmlzaWJs
ZUVuZCgpCiAgICAgLy8gY2FuIGNhdXNlIGxheW91dCwgd2hpY2ggaGFzIHRoZSBwb3RlbnRpYWwg
dG8gaW52YWxpZGF0ZSBsaW5lYm94ZXMuCkBAIC02OTMsNyArNjkzLDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6d2lsbEJlTW9kaWZpZWQoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVj
dGlvbiBkaXJlY3QKICAgICB9IGVsc2UgewogICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewog
ICAgICAgICBjYXNlIFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQ6Ci0gICAgICAgICAgICBpZiAo
ZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgICAg
ICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikK
ICAgICAgICAgICAgICAgICBiYXNlSXNTdGFydCA9IHRydWU7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSBmYWxzZTsKQEAgLTcwMiw3ICs3MDIsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjp3aWxsQmVNb2RpZmllZChFQWx0ZXJhdGlvbiBhbHRlciwgU2Vs
ZWN0aW9uRGlyZWN0aW9uIGRpcmVjdAogICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSB0cnVlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uRGlyZWN0aW9uOjpMZWZ0
OgotICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlv
bjo6TFRSKQorICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkgPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSBmYWxzZTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBiYXNlSXNTdGFydCA9IHRydWU7CkBA
IC03NzYsMjMgKzc3NiwyMyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlm
eUV4dGVuZGluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eQogICAgIC8vIFRoZSBk
aWZmZXJlbmNlIGJldHdlZW4gbW9kaWZ5RXh0ZW5kaW5nUmlnaHQgYW5kIG1vZGlmeUV4dGVuZGlu
Z0ZvcndhcmQgaXM6CiAgICAgLy8gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCBhbHdheXMgZXh0ZW5k
cyBmb3J3YXJkIGxvZ2ljYWxseS4KICAgICAvLyBtb2RpZnlFeHRlbmRpbmdSaWdodCBiZWhhdmVz
IHRoZSBzYW1lIGFzIG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQgZXhjZXB0IGZvciBleHRlbmRpbmcg
Y2hhcmFjdGVyIG9yIHdvcmQsCi0gICAgLy8gaXQgZXh0ZW5kcyBmb3J3YXJkIGxvZ2ljYWxseSBp
ZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFRleHREaXJlY3Rpb246OkxUUiwKLSAgICAvLyBidXQg
aXQgZXh0ZW5kcyBiYWNrd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9jayBpcyBU
ZXh0RGlyZWN0aW9uOjpSVEwuCisgICAgLy8gaXQgZXh0ZW5kcyBmb3J3YXJkIGxvZ2ljYWxseSBp
ZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSLAorICAgIC8v
IGJ1dCBpdCBleHRlbmRzIGJhY2t3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5nIGJsb2Nr
IGlzIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLgogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsK
ICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk6Ci0gICAgICAg
IGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKQor
ICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSKQogICAgICAgICAgICAgcG9zID0gcG9zLm5leHQoQ2Fubm90Q3Jvc3NFZGl0aW5n
Qm91bmRhcnkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBwb3MucHJldmlvdXMo
Q2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRl
eHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5OgotICAgICAgICBpZiAoZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKGRpcmVj
dGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAg
ICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9ybShwb3MpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihwb3MpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGluZUJvdW5kYXJ5OgotICAgICAg
ICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikK
KyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUikKICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoZ3Jh
bnVsYXJpdHkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRp
bmdCYWNrd2FyZChncmFudWxhcml0eSk7CkBAIC04MTAsNyArODEwLDcgQEAgVmlzaWJsZVBvc2l0
aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBhZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCBkaXJlY3Rp
b25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKTsKKyAgICBhZGp1c3RQ
b3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkg
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpOwogICAgIHJldHVybiBwb3M7CiB9CiAKQEAgLTg1
Myw3ICs4NTMsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVu
ZGluZ0ZvcndhcmQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaQogICAgICAgICAgICAgcG9zID0g
ZW5kT2ZEb2N1bWVudChwb3MpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgYWRqdXN0UG9z
aXRpb25Gb3JVc2VyU2VsZWN0QWxsKHBvcywgZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09
IFRleHREaXJlY3Rpb246OkxUUik7CisgICAgYWRqdXN0UG9zaXRpb25Gb3JVc2VyU2VsZWN0QWxs
KHBvcywgZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSKTsKICAgICByZXR1cm4gcG9zOwogfQogCkBAIC04NjUsNyArODY1LDcgQEAgVmlzaWJsZVBv
c2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGIKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgY2FzZSBUZXh0
R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgogICAgICAgICBpZiAoaXNSYW5nZSgp
KSB7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIpCisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRp
b24obV9zZWxlY3Rpb24uZW5kKCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlv
bi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKQEAgLTk4OSwyMyArOTg5LDIzIEBA
IFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nTGVmdChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiAgICAgLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBt
b2RpZnlFeHRlbmRpbmdMZWZ0IGFuZCBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCBpczoKICAgICAv
LyBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCBhbHdheXMgZXh0ZW5kcyBiYWNrd2FyZCBsb2dpY2Fs
bHkuCiAgICAgLy8gbW9kaWZ5RXh0ZW5kaW5nTGVmdCBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vZGlm
eUV4dGVuZGluZ0JhY2t3YXJkIGV4Y2VwdCBmb3IgZXh0ZW5kaW5nIGNoYXJhY3RlciBvciB3b3Jk
LAotICAgIC8vIGl0IGV4dGVuZHMgYmFja3dhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3Npbmcg
YmxvY2sgaXMgVGV4dERpcmVjdGlvbjo6TFRSLAotICAgIC8vIGJ1dCBpdCBleHRlbmRzIGZvcndh
cmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMgVGV4dERpcmVjdGlvbjo6UlRM
LgorICAgIC8vIGl0IGV4dGVuZHMgYmFja3dhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3Npbmcg
YmxvY2sgaXMgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsCisgICAgLy8gYnV0IGl0IGV4dGVuZHMg
Zm9yd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9jayBpcyBQQUw6OlRleHREaXJl
Y3Rpb246OlJUTC4KICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgY2FzZSBUZXh0R3Jh
bnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgotICAgICAgICBpZiAoZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKGRpcmVj
dGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAg
ICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IHBvcy5uZXh0KENhbm5vdENyb3NzRWRpdGlu
Z0JvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6Oldv
cmRHcmFudWxhcml0eToKLSAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9
PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Js
b2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBwb3MgPSBwcmV2
aW91c1dvcmRQb3NpdGlvbihwb3MpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBu
ZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZvcm0ocG9zKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBUZXh0R3JhbnVsYXJpdHk6OkxpbmVCb3VuZGFyeToKLSAgICAgICAgaWYgKGRpcmVjdGlvbk9m
RW5jbG9zaW5nQmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChkaXJl
Y3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAg
ICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0eSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoZ3JhbnVs
YXJpdHkpOwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0
aW9uOjptb2RpZnlFeHRlbmRpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBh
ZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCAhKGRpcmVjdGlvbk9mRW5jbG9zaW5n
QmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpKTsKKyAgICBhZGp1c3RQb3NpdGlvbkZvclVz
ZXJTZWxlY3RBbGwocG9zLCAhKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUikpOwogICAgIHJldHVybiBwb3M7CiB9CiAgICAgICAgCkBAIC0xMDcw
LDcgKzEwNzAsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVu
ZGluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGFkanVzdFBvc2l0aW9uRm9y
VXNlclNlbGVjdEFsbChwb3MsICEoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRleHRE
aXJlY3Rpb246OkxUUikpOworICAgIGFkanVzdFBvc2l0aW9uRm9yVXNlclNlbGVjdEFsbChwb3Ms
ICEoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
KSk7CiAgICAgcmV0dXJuIHBvczsKIH0KIApAQCAtMTA4Miw3ICsxMDgyLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgYm8KICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgY2FzZSBUZXh0
R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgogICAgICAgICBpZiAoaXNSYW5nZSgp
KQotICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlv
bjo6TFRSKQorICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkgPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9u
KG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlv
bi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CkBAIC0xMjA0LDcgKzEyMDQsNyBAQCBB
WFRleHRTdGF0ZUNoYW5nZUludGVudCBGcmFtZVNlbGVjdGlvbjo6dGV4dFNlbGVjdGlvbkludGVu
dChFQWx0ZXJhdGlvbiBhbHRlciwgUwogICAgIGJvb2wgZmxpcCA9IGZhbHNlOwogICAgIGlmIChh
bHRlciA9PSBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUpIHsKICAgICAgICAgaW50ZW50
LnR5cGUgPSBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rpb25Nb3ZlOwotICAgICAgICBmbGlw
ID0gaXNSYW5nZSgpICYmIGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6
UlRMOworICAgICAgICBmbGlwID0gaXNSYW5nZSgpICYmIGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkg
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgfSBlbHNlCiAgICAgICAgIGludGVudC50
eXBlID0gQVhUZXh0U3RhdGVDaGFuZ2VUeXBlU2VsZWN0aW9uRXh0ZW5kOwogICAgIHN3aXRjaCAo
Z3JhbnVsYXJpdHkpIHsKQEAgLTE0MzMsOCArMTQzMyw4IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4CiAgICAgICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVo
YXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnko
KSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQog
ICAgICAgICAgICAgc2V0RXh0ZW50KHBvc2l0aW9uLCB1c2VyVHJpZ2dlcmVkKTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rp
b25PZkVuY2xvc2luZ0Jsb2NrKCk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFNlbGVj
dGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCB8fCAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIgJiYgZGlyZWN0aW9uID09IFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQpIHx8ICh0ZXh0
RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBkaXJlY3Rpb24gPT0gU2VsZWN0aW9u
RGlyZWN0aW9uOjpMZWZ0KSkKKyAgICAgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGly
ZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpOworICAgICAgICAgICAgaWYgKGRp
cmVjdGlvbiA9PSBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQgfHwgKHRleHREaXJlY3Rpb24g
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgJiYgZGlyZWN0aW9uID09IFNlbGVjdGlvbkRpcmVj
dGlvbjo6UmlnaHQpIHx8ICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRM
ICYmIGRpcmVjdGlvbiA9PSBTZWxlY3Rpb25EaXJlY3Rpb246OkxlZnQpKQogICAgICAgICAgICAg
ICAgIHNldEVuZChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgc2V0U3RhcnQocG9zaXRpb24sIHVzZXJUcmlnZ2VyZWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGVkYWNiNjNjYmViZDNhM2U5M2Qz
ZDBmMWY5NzM5ZWFiYWY3Zjc2NTIuLjAxZmNhMjlkNWY3OTM5Zjk2NDYzOWIwZjJhNGM0NThjNDlm
ZjRhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTI3MSw4
ICsyNzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5n
QXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0aW9uU2V0PFNldFNlbGVjdGlv
bk9wdGlvbj4sIEN1cnNvckFsaWduT25TY3JvbGwsIFRleHRHcmFudWxhcml0eSk7CiAKICAgICB2
b2lkIHJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9kZSYsIGJvb2wgYmFzZVJlbW92ZWQsIGJv
b2wgZXh0ZW50UmVtb3ZlZCwgYm9vbCBzdGFydFJlbW92ZWQsIGJvb2wgZW5kUmVtb3ZlZCk7Ci0g
ICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7Ci0gICAgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb25PZlNlbGVjdGlvbigpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBk
aXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbk9mU2VsZWN0aW9uKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQbGF0
Zm9ybShib29sIGlzR2V0U3RhcnQpIGNvbnN0OwogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydEZv
clBsYXRmb3JtKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAKaW5kZXggMmMzZTA3OGEzMmEyZmVmMjFkYTRmZWNmOWRkYWRiNzE0MmFlZjMzMy4uYWI5
Njk1Y2Q0MzdmY2QzYjEzYmE3MTI4MjhiNjdmNjc2OTEzNDUyOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcApAQCAtMTIwLDE0ICsxMjAsMTQgQEAgUG9zaXRp
b24gVmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0
CiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0
YXJ0ID0gcC5kb3duc3RyZWFtKCk7Ci0gICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9u
ID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHByaW1hcnlE
aXJlY3Rpb24gPSBwLnByaW1hcnlEaXJlY3Rpb24oKTsKIAogICAgIElubGluZUl0ZXJhdG9yOjpM
aW5lTG9naWNhbE9yZGVyQ2FjaGUgb3JkZXJDYWNoZTsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgIGF1dG8gW3J1biwgb2Zmc2V0XSA9IHAuaW5saW5lUnVuQW5kT2Zmc2V0KG1fYWZmaW5p
dHksIHByaW1hcnlEaXJlY3Rpb24pOwogICAgICAgICBpZiAoIXJ1bikKLSAgICAgICAgICAgIHJl
dHVybiBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlz
dWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CisgICAgICAgICAgICByZXR1cm4gcHJpbWFy
eURpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlzdWFsbHlE
aXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENh
bmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAKICAgICAgICAgYXV0byogcmVuZGVyZXIgPSAmcnVu
LT5yZW5kZXJlcigpOwogCkBAIC0xMzgsNyArMTM4LDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0
aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgICAgICBp
ZiAoIXJlbmRlcmVyLT5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICBydW4udHJhdmVyc2VQcmV2
aW91c09uTGluZSgpOwogICAgICAgICAgICAgICAgIGlmICghcnVuKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBwcmV2
aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogbmV4dFZpc3Vh
bGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IHBy
ZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0Vmlz
dWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAg
cmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJlcigpOwogICAgICAgICAgICAgICAgIG9mZnNldCA9IHJ1
bi0+cmlnaHRtb3N0Q2FyZXRPZmZzZXQoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTE1Nyw3ICsxNTcsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgICAgICAvLyBPdmVyc2hvdCB0byB0
aGUgbGVmdC4KICAgICAgICAgICAgICAgICBhdXRvIHByZXZpb3VzUnVuID0gcnVuLT5wcmV2aW91
c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91
c1J1bikgewotICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBwb3NpdGlvbk9uTGVmdCA9IHBy
aW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2Fu
ZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcG9z
aXRpb25PbkxlZnQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
ID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5l
eHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKICAgICAgICAgICAg
ICAgICAgICAgYXV0byBydW5PbkxlZnQgPSBwb3NpdGlvbk9uTGVmdC5pbmxpbmVSdW5BbmRPZmZz
ZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbikucnVuOwogICAgICAgICAgICAgICAgICAg
ICBpZiAocnVuT25MZWZ0ICYmIHJ1bk9uTGVmdC0+bGluZSgpID09IHJ1bi0+bGluZSgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CkBAIC0xNzYsMTMgKzE3Niwx
MyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlk
YXRlKCkgY29uc3QKIAogICAgICAgICAgICAgaWYgKHJ1bi0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFy
eURpcmVjdGlvbikgewogICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNSdW4pIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsU3RhcnQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRl
eHREaXJlY3Rpb246OkxUUgorICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxTdGFydCA9
IHByaW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIKICAgICAgICAgICAg
ICAgICAgICAgICAgID8gSW5saW5lSXRlcmF0b3I6OmZpcnN0TGVhZk9uTGluZUluTG9naWNhbE9y
ZGVyV2l0aE5vZGUocnVuLT5saW5lKCksIG9yZGVyQ2FjaGUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICA6IElubGluZUl0ZXJhdG9yOjpsYXN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5v
ZGUocnVuLT5saW5lKCksIG9yZGVyQ2FjaGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAobG9n
aWNhbFN0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBydW4gPSBsb2dpY2FsU3RhcnQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHRE
aXJlY3Rpb246OkxUUiA/IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCkgOiBydW4tPm1heGltdW1D
YXJldE9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURp
cmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IHJ1bi0+bWluaW11bUNhcmV0T2Zm
c2V0KCkgOiBydW4tPm1heGltdW1DYXJldE9mZnNldCgpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTI0Myw3
ICsyNDMsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBydW4tPmJpZGlM
ZXZlbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZy
dW4tPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBydW4tPm1pbmltdW1DYXJldE9mZnNldCgpIDogcnVu
LT5tYXhpbXVtQ2FyZXRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5
RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gcnVuLT5taW5pbXVtQ2FyZXRP
ZmZzZXQoKSA6IHJ1bi0+bWF4aW11bUNhcmV0T2Zmc2V0KCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjg2LDE0ICsyODYsMTQgQEAgUG9zaXRpb24g
VmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAog
ICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFy
dCA9IHAuZG93bnN0cmVhbSgpOwotICAgIFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiA9
IHAucHJpbWFyeURpcmVjdGlvbigpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBwcmltYXJ5RGly
ZWN0aW9uID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7CiAKICAgICBJbmxpbmVJdGVyYXRvcjo6TGlu
ZUxvZ2ljYWxPcmRlckNhY2hlIG9yZGVyQ2FjaGU7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAg
ICAgICBhdXRvIFtydW4sIG9mZnNldF0gPSBwLmlubGluZVJ1bkFuZE9mZnNldChtX2FmZmluaXR5
LCBwcmltYXJ5RGlyZWN0aW9uKTsKICAgICAgICAgaWYgKCFydW4pCi0gICAgICAgICAgICByZXR1
cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlE
aXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOworICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlE
aXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5j
dENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUobV9kZWVwUG9zaXRpb24pOwogCiAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gJnJ1bi0+
cmVuZGVyZXIoKTsKIApAQCAtMzA0LDcgKzMwNCw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlv
bjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgIGlm
ICghcmVuZGVyZXItPm5vZGUoKSkgewogICAgICAgICAgICAgICAgIHJ1bi50cmF2ZXJzZU5leHRP
bkxpbmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXJ1bikKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gbmV4dFZpc3Vh
bGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogcHJldmlvdXNWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0Vmlz
dWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5
RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIHJlbmRl
cmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBydW4tPmxl
ZnRtb3N0Q2FyZXRPZmZzZXQoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTMyMyw3
ICszMjMsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0aW5j
dENhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgICAgICAgICAgLy8gT3ZlcnNob3QgdG8gdGhlIHJp
Z2h0LgogICAgICAgICAgICAgICAgIGF1dG8gbmV4dFJ1biA9IHJ1bi0+bmV4dE9uTGluZUlnbm9y
aW5nTGluZUJyZWFrKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFuZXh0UnVuKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uT25SaWdodCA9IHByaW1hcnlEaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSID8gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9k
ZWVwUG9zaXRpb24pIDogcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBv
c2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb25PblJpZ2h0ID0g
cHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IG5leHRWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8g
cnVuT25SaWdodCA9IHBvc2l0aW9uT25SaWdodC5pbmxpbmVSdW5BbmRPZmZzZXQobV9hZmZpbml0
eSwgcHJpbWFyeURpcmVjdGlvbikucnVuOwogICAgICAgICAgICAgICAgICAgICBpZiAocnVuT25S
aWdodCAmJiBydW5PblJpZ2h0LT5saW5lKCkgPT0gcnVuLT5saW5lKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKQEAgLTM0MiwxNCArMzQyLDE0IEBAIFBvc2l0
aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29u
c3QKIAogICAgICAgICAgICAgaWYgKHJ1bi0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlv
bikgewogICAgICAgICAgICAgICAgIGlmICghbmV4dFJ1bikgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvIGxvZ2ljYWxFbmQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxU
UgorICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxFbmQgPSBwcmltYXJ5RGlyZWN0aW9u
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSCiAgICAgICAgICAgICAgICAgICAgICAgICA/IElu
bGluZUl0ZXJhdG9yOjpsYXN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUocnVuLT5s
aW5lKCksIG9yZGVyQ2FjaGUpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IElubGluZUl0ZXJh
dG9yOjpmaXJzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcldpdGhOb2RlKHJ1bi0+bGluZSgpLCBv
cmRlckNhY2hlKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbEVuZCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgcnVuID0gbG9naWNhbEVuZDsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcnVu
LT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSID8gcnVuLT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWluaW11
bUNhcmV0T2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDEzLDcgKzQxMyw3IEBAIFBvc2l0aW9u
IFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QK
ICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBydW4tPmJpZGlMZXZlbCgpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0g
ICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIgPyBydW4tPm1heGltdW1DYXJldE9mZnNldCgpIDogcnVuLT5taW5pbXVtQ2FyZXRPZmZz
ZXQoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSID8gcnVuLT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWlu
aW11bUNhcmV0T2Zmc2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtNjM2LDcgKzYzNiw3IEBAIElubGluZVJ1bkFuZE9mZnNldCBWaXNpYmxlUG9z
aXRpb246OmlubGluZVJ1bkFuZE9mZnNldCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVlcFBvc2l0
aW9uLmlubGluZVJ1bkFuZE9mZnNldChtX2FmZmluaXR5KTsKIH0KIAotSW5saW5lUnVuQW5kT2Zm
c2V0IFZpc2libGVQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KFRleHREaXJlY3Rpb24gcHJp
bWFyeURpcmVjdGlvbikgY29uc3QKK0lubGluZVJ1bkFuZE9mZnNldCBWaXNpYmxlUG9zaXRpb246
OmlubGluZVJ1bkFuZE9mZnNldChQQUw6OlRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9kZWVwUG9zaXRpb24uaW5saW5lUnVuQW5kT2Zmc2V0KG1f
YWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVBvc2l0aW9uLmgKaW5kZXggYTkyY2E4MWJjZWZlM2U0NzZjNGM1NDY2MGQ5NzIwODRlZWVj
ZmFjNi4uY2I5ODQzMDNiZGQxNWE1MWI0ZGVkOTM1YzM5Zjc0YjM4NTM4YTY1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCkBAIC02OCw3ICs2OCw3IEBAIHB1Ymxp
YzoKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9k
ZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkgPyBtX2RlZXBQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgp
LT5yb290RWRpdGFibGVFbGVtZW50KCkgOiAwOyB9CiAKICAgICBJbmxpbmVSdW5BbmRPZmZzZXQg
aW5saW5lUnVuQW5kT2Zmc2V0KCkgY29uc3Q7Ci0gICAgSW5saW5lUnVuQW5kT2Zmc2V0IGlubGlu
ZVJ1bkFuZE9mZnNldChUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0OworICAg
IElubGluZVJ1bkFuZE9mZnNldCBpbmxpbmVSdW5BbmRPZmZzZXQoUEFMOjpUZXh0RGlyZWN0aW9u
IHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0OwogCiAgICAgc3RydWN0IExvY2FsQ2FyZXRSZWN0IHsK
ICAgICAgICAgTGF5b3V0UmVjdCByZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5p
dHMuY3BwCmluZGV4IGM2ODJlODI4OTZhMDVkMmE3ODQzMzg3NzNjYjMwZGNmZDUxYzI0NTAuLjlj
MzRjOTIxNDEwMmNjZjM1ZTY1MGU4MGY0YmZhNDA2ODUzZTY3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgVmlzaWJs
ZVBvc2l0aW9uIHZpc3VhbFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2li
bGVQb3NpdGlvbgogCiAgICAgdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG9jdW1l
bnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBUZXh0
RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNp
YmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGJs
b2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBw
cmV2aW91c2x5VmlzaXRlZFJ1bjsKICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudCA9IHZpc2li
bGVQb3NpdGlvbjsKICAgICBzdGQ6Om9wdGlvbmFsPFZpc2libGVQb3NpdGlvbj4gcHJldmlvdXNQ
b3NpdGlvbjsKQEAgLTM2Niw3ICszNjYsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3Vh
bFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbgogCiAg
ICAgICAgIGJvb2wgaXNXb3JkQnJlYWs7CiAgICAgICAgIGJvb2wgYm94SGFzU2FtZURpcmVjdGlv
bmFsaXR5QXNCbG9jayA9IHJ1bi0+ZGlyZWN0aW9uKCkgPT0gYmxvY2tEaXJlY3Rpb247Ci0gICAg
ICAgIGJvb2wgbW92aW5nQmFja3dhcmQgPSAoZGlyZWN0aW9uID09IE1vdmVMZWZ0ICYmIHJ1bi0+
ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB8fCAoZGlyZWN0aW9uID09IE1vdmVS
aWdodCAmJiBydW4tPmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCk7CisgICAgICAg
IGJvb2wgbW92aW5nQmFja3dhcmQgPSAoZGlyZWN0aW9uID09IE1vdmVMZWZ0ICYmIHJ1bi0+ZGly
ZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHx8IChkaXJlY3Rpb24gPT0gTW92
ZVJpZ2h0ICYmIHJ1bi0+ZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpOwog
ICAgICAgICBpZiAoKHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgJiYgYm94SGFzU2FtZURpcmVj
dGlvbmFsaXR5QXNCbG9jaykKICAgICAgICAgICAgIHx8ICghc2tpcHNTcGFjZVdoZW5Nb3ZpbmdS
aWdodCAmJiBtb3ZpbmdCYWNrd2FyZCkpIHsKICAgICAgICAgICAgIGJvb2wgbG9naWNhbFN0YXJ0
SW5SZW5kZXJlciA9IG9mZnNldEluUnVuID09IHRleHRSdW4tPnN0YXJ0KCkgJiYgcHJldmlvdXNS
dW5JbkRpZmZlcmVudExpbmU7CkBAIC0zOTYsOCArMzk2LDggQEAgVmlzaWJsZVBvc2l0aW9uIGxl
ZnRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGJv
b2wgc2sKICAgICAKICAgICAvLyBGSVhNRTogSG93IHNob3VsZCB3ZSBoYW5kbGUgYSBub24tZWRp
dGFibGUgcG9zaXRpb24/CiAgICAgaWYgKGxlZnRXb3JkQnJlYWsuaXNOdWxsKCkgJiYgaXNFZGl0
YWJsZVBvc2l0aW9uKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKSkgewotICAgICAg
ICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9j
ayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIGxlZnRXb3JkQnJl
YWsgPSBibG9ja0RpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBzdGFydE9mRWRpdGFi
bGVDb250ZW50KHZpc2libGVQb3NpdGlvbikgOiBlbmRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxl
UG9zaXRpb24pOworICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gYmxvY2tEaXJlY3Rpb24gPSBk
aXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
KTsKKyAgICAgICAgbGVmdFdvcmRCcmVhayA9IGJsb2NrRGlyZWN0aW9uID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSID8gc3RhcnRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxlUG9zaXRpb24pIDog
ZW5kT2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0aW9uKTsKICAgICB9CiAgICAgcmV0dXJu
IGxlZnRXb3JkQnJlYWs7CiB9CkBAIC00MDksOCArNDA5LDggQEAgVmlzaWJsZVBvc2l0aW9uIHJp
Z2h0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBi
b29sIHMKIAogICAgIC8vIEZJWE1FOiBIb3cgc2hvdWxkIHdlIGhhbmRsZSBhIG5vbi1lZGl0YWJs
ZSBwb3NpdGlvbj8KICAgICBpZiAocmlnaHRXb3JkQnJlYWsuaXNOdWxsKCkgJiYgaXNFZGl0YWJs
ZVBvc2l0aW9uKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKSkgewotICAgICAgICBU
ZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2
aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIHJpZ2h0V29yZEJyZWFr
ID0gYmxvY2tEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gZW5kT2ZFZGl0YWJsZUNv
bnRlbnQodmlzaWJsZVBvc2l0aW9uKSA6IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBv
c2l0aW9uKTsKKyAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGly
ZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7
CisgICAgICAgIHJpZ2h0V29yZEJyZWFrID0gYmxvY2tEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIgPyBlbmRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxlUG9zaXRpb24pIDogc3Rh
cnRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxlUG9zaXRpb24pOwogICAgIH0KICAgICByZXR1cm4g
cmlnaHRXb3JkQnJlYWs7CiB9CkBAIC0xNDY3LDE0ICsxNDY3LDE0IEBAIGJvb2wgaXNFbmRPZkVk
aXRhYmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwKQogICAg
IHJldHVybiBwLmlzTm90TnVsbCgpICYmIHAubmV4dCgpLmlzTnVsbCgpOwogfQogCi1WaXNpYmxl
UG9zaXRpb24gbGVmdEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSkKK1Zpc2libGVQb3Np
dGlvbiBsZWZ0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBQQUw6OlRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpCiB7Ci0gICAgcmV0
dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBsb2dpY2FsU3RhcnRPZkxpbmUo
YywgcmVhY2hlZEJvdW5kYXJ5KSA6IGxvZ2ljYWxFbmRPZkxpbmUoYywgcmVhY2hlZEJvdW5kYXJ5
KTsKKyAgICByZXR1cm4gZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gbG9n
aWNhbFN0YXJ0T2ZMaW5lKGMsIHJlYWNoZWRCb3VuZGFyeSkgOiBsb2dpY2FsRW5kT2ZMaW5lKGMs
IHJlYWNoZWRCb3VuZGFyeSk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiByaWdodEJvdW5kYXJ5T2ZM
aW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJv
b2wqIHJlYWNoZWRCb3VuZGFyeSkKK1Zpc2libGVQb3NpdGlvbiByaWdodEJvdW5kYXJ5T2ZMaW5l
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwg
Ym9vbCogcmVhY2hlZEJvdW5kYXJ5KQogewotICAgIHJldHVybiBkaXJlY3Rpb24gPT0gVGV4dERp
cmVjdGlvbjo6TFRSID8gbG9naWNhbEVuZE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpIDogbG9n
aWNhbFN0YXJ0T2ZMaW5lKGMsIHJlYWNoZWRCb3VuZGFyeSk7CisgICAgcmV0dXJuIGRpcmVjdGlv
biA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IGxvZ2ljYWxFbmRPZkxpbmUoYywgcmVhY2hl
ZEJvdW5kYXJ5KSA6IGxvZ2ljYWxTdGFydE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpOwogfQog
CiBzdGF0aWMgYm9vbCBkaXJlY3Rpb25Jc0Rvd25zdHJlYW0oU2VsZWN0aW9uRGlyZWN0aW9uIGRp
cmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRz
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCmluZGV4IGE2ZGU0MjE1
MjZkNDZlMjgyZmY0MDc1NGY3MDkzODZiZDkzMzEwZjMuLjJmOTgwYTI1YjViYjBiNTlhYzBhZWEy
M2Y3MWU5ZjQ2OWVlMGY3YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVVuaXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaApA
QCAtNjMsOCArNjMsOCBAQCBXRUJDT1JFX0VYUE9SVCBib29sIGlzRW5kT2ZMaW5lKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpOwogVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxTdGFydE9mTGluZShjb25z
dCBWaXNpYmxlUG9zaXRpb24mLCBib29sKiByZWFjaGVkQm91bmRhcnkgPSBudWxscHRyKTsKIFZp
c2libGVQb3NpdGlvbiBsb2dpY2FsRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJv
b2wqIHJlYWNoZWRCb3VuZGFyeSA9IG51bGxwdHIpOwogYm9vbCBpc0xvZ2ljYWxFbmRPZkxpbmUo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1WaXNpYmxlUG9zaXRpb24gbGVmdEJvdW5kYXJ5T2ZM
aW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHREaXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRC
b3VuZGFyeSk7Ci1WaXNpYmxlUG9zaXRpb24gcmlnaHRCb3VuZGFyeU9mTGluZShjb25zdCBWaXNp
YmxlUG9zaXRpb24mLCBUZXh0RGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpOworVmlz
aWJsZVBvc2l0aW9uIGxlZnRCb3VuZGFyeU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBQ
QUw6OlRleHREaXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSk7CitWaXNpYmxlUG9zaXRp
b24gcmlnaHRCb3VuZGFyeU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBQQUw6OlRleHRE
aXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSk7CiAKIC8vIHBhcmFncmFwaHMgKHBlcmhh
cHMgYSBtaXNub21lciwgY2FuIGJlIGRpdmlkZWQgYnkgbGluZSBicmVhayBlbGVtZW50cykKIFdF
QkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRp
dGluZ0JvdW5kYXJ5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlLmNwcAppbmRleCA2YzM4MWFhNzAxYzk0MDcyNjYxY2UwZTE1MmYyNTkxYjU0NzE0
OTkxLi5jNTIzNjI4ZTI4ZTM5MzZiZWUyZTJiMDE3Yzg4NzllNTY0MmIwNzFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCkBAIC01NDQs
NyArNTQ0LDcgQEAgYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNldHVwRGF0ZVRpbWVD
aG9vc2VyUGFyYW1ldGVycyhEYXRlVGltZUNob29zZXJQYXIKICAgICBwYXJhbWV0ZXJzLmN1cnJl
bnRWYWx1ZSA9IGVsZW1lbnQudmFsdWUoKTsKIAogICAgIGF1dG8qIGNvbXB1dGVkU3R5bGUgPSBl
bGVtZW50LmNvbXB1dGVkU3R5bGUoKTsKLSAgICBwYXJhbWV0ZXJzLmlzQW5jaG9yRWxlbWVudFJU
TCA9IGNvbXB1dGVkU3R5bGUtPmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAg
ICBwYXJhbWV0ZXJzLmlzQW5jaG9yRWxlbWVudFJUTCA9IGNvbXB1dGVkU3R5bGUtPmRpcmVjdGlv
bigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOwogICAgIHBhcmFtZXRlcnMudXNlRGFya0Fw
cGVhcmFuY2UgPSBkb2N1bWVudC51c2VEYXJrQXBwZWFyYW5jZShjb21wdXRlZFN0eWxlKTsKIAog
ICAgIGF1dG8gZGF0ZSA9IHBhcnNlVG9EYXRlQ29tcG9uZW50cyhlbGVtZW50LnZhbHVlKCkpLnZh
bHVlX29yKERhdGVDb21wb25lbnRzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApp
bmRleCAyYWRmZjhmZTg1ZDkzNjc4MDI5NWMyMzk1Y2UzNTE5ZTM4MTg0NDFjLi42YWFlNjdmMjA4
NmVhYTgzZTVhZjIxMjZhNmZkNzYzMjg4NDJhNzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcApAQCAtNzc0LDE4ICs3NzQsMTggQEAgYm9vbCBIVE1MRWxlbWVudDo6aGFzRGlyZWN0
aW9uQXV0bygpIGNvbnN0CiAgICAgcmV0dXJuIChoYXNUYWdOYW1lKGJkaVRhZykgJiYgZGlyZWN0
aW9uLmlzTnVsbCgpKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3Rpb24s
ICJhdXRvIik7CiB9CiAKLVRleHREaXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5
SWZoYXNEaXJBdXRvQXR0cmlidXRlKGJvb2wmIGlzQXV0bykgY29uc3QKK1BBTDo6VGV4dERpcmVj
dGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoYm9v
bCYgaXNBdXRvKSBjb25zdAogewogICAgIGlmICghKHNlbGZPckFuY2VzdG9ySGFzRGlyQXV0b0F0
dHJpYnV0ZSgpICYmIGhhc0RpcmVjdGlvbkF1dG8oKSkpIHsKICAgICAgICAgaXNBdXRvID0gZmFs
c2U7Ci0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIHJldHVybiBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICB9CiAKICAgICBpc0F1dG8gPSB0cnVlOwogICAg
IHJldHVybiBkaXJlY3Rpb25hbGl0eSgpOwogfQogCi1UZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50
OjpkaXJlY3Rpb25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkgY29u
c3QKK1BBTDo6VGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkoTm9kZSoq
IHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4dEZp
ZWxkKCkpIHsKICAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRFbGVtZW50
ID0gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8SFRNTEVs
ZW1lbnQmPigqdGhpcykpOwpAQCAtNzkzLDcgKzc5Myw3IEBAIFRleHREaXJlY3Rpb24gSFRNTEVs
ZW1lbnQ6OmRpcmVjdGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2Rl
KSBjCiAgICAgICAgIFVDaGFyRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0ZXh0RWxlbWVudC52
YWx1ZSgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCZoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSk7
CiAgICAgICAgIGlmIChzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKQogICAgICAgICAgICAg
KnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUgPSBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA/
ICZ0ZXh0RWxlbWVudCA6IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiAodGV4dERpcmVjdGlvbiA9
PSBVX0xFRlRfVE9fUklHSFQpID8gVGV4dERpcmVjdGlvbjo6TFRSIDogVGV4dERpcmVjdGlvbjo6
UlRMOworICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSA/
IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAg
fQogCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBmaXJzdENoaWxkKCk7CkBAIC04MjAsMTQgKzgy
MCwxNCBAQCBUZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eShOb2RlKiog
c3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkgYwogICAgICAgICAgICAgaWYgKGhhc1N0cm9u
Z0RpcmVjdGlvbmFsaXR5KSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0cm9uZ0RpcmVjdGlvbmFs
aXR5VGV4dE5vZGUpCiAgICAgICAgICAgICAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25hbGl0eVRl
eHROb2RlID0gbm9kZS5nZXQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rp
b24gPT0gVV9MRUZUX1RPX1JJR0hUKSA/IFRleHREaXJlY3Rpb246OkxUUiA6IFRleHREaXJlY3Rp
b246OlJUTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24gPT0gVV9MRUZU
X1RPX1JJR0hUKSA/IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIDogUEFMOjpUZXh0RGlyZWN0aW9u
OjpSVEw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKm5vZGUsIHRoaXMpOwogICAgIH0KICAgICBpZiAoc3Ryb25nRGlyZWN0aW9u
YWxpdHlUZXh0Tm9kZSkKICAgICAgICAgKnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUgPSBu
dWxscHRyOwotICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgcmV0dXJuIFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSOwogfQogCiB2b2lkIEhUTUxFbGVtZW50OjpkaXJBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQpAQCAtODQ1LDcgKzg0NSw3IEBAIHZvaWQg
SFRNTEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmli
dXRlQ2hhbmdlZChFbGVtZW50CiB7CiAgICAgQVNTRVJUKHNlbGZPckFuY2VzdG9ySGFzRGlyQXV0
b0F0dHJpYnV0ZSgpKTsKICAgICBOb2RlKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlOwot
ICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbmFsaXR5KCZzdHJvbmdE
aXJlY3Rpb25hbGl0eVRleHROb2RlKTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVj
dGlvbiA9IGRpcmVjdGlvbmFsaXR5KCZzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKTsKICAg
ICBzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vyc2l2ZWx5KGNoaWxkLCBmYWxzZSk7CiAgICAgaWYgKCFy
ZW5kZXJlcigpIHx8IHJlbmRlcmVyKCktPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gdGV4dERpcmVj
dGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtODYwLDcgKzg2MCw3IEBAIHZvaWQgSFRNTEVsZW1l
bnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmlidXRlQ2hhbmdl
ZChFbGVtZW50CiB2b2lkIEhUTUxFbGVtZW50OjpjYWxjdWxhdGVBbmRBZGp1c3REaXJlY3Rpb25h
bGl0eSgpCiB7CiAgICAgTm9kZSogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZTsKLSAgICBU
ZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25hbGl0eSgmc3Ryb25nRGlyZWN0
aW9uYWxpdHlUZXh0Tm9kZSk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24g
PSBkaXJlY3Rpb25hbGl0eSgmc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSk7CiAgICAgc2V0
SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseSh0aGlzLCB0cnVlLCBzdHJvbmdEaXJlY3Rpb25hbGl0
eVRleHROb2RlKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmRp
cmVjdGlvbigpICE9IHRleHREaXJlY3Rpb24pCiAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAppbmRleCAyYjNhN2ViZjAxODRhNWM3
NmZhMzViOTZkZThhY2UwNDU3ZmM4Yjc4Li5kNzc4ZmJlNTdhMDZjMmY0ODgzYzU5MjRlYzZjOTZh
MGFhYzMwZGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCkBAIC04OCw3ICs4OCw3IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldERpcihjb25zdCBBdG9tU3RyaW5n
Jik7CiAKICAgICBib29sIGhhc0RpcmVjdGlvbkF1dG8oKSBjb25zdDsKLSAgICBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGJvb2wmIGlzQXV0bykgY29u
c3Q7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0
cmlidXRlKGJvb2wmIGlzQXV0bykgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Q29u
dHJvbElubmVyVGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc1NlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpAQCAtMTcyLDcgKzE3Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXJBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IEF0b21TdHJpbmcmKTsKICAgICB2b2lkIGFkanVzdERpcmVjdGlv
bmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmlidXRlQ2hhbmdlZChFbGVtZW50KiBjaGlsZCk7
CiAgICAgdm9pZCBhZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZHJlbkNoYW5n
ZWQoRWxlbWVudCogYmVmb3JlQ2hhbmdlLCBDaGlsZENoYW5nZTo6VHlwZSk7Ci0gICAgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9k
ZT0gMCkgY29uc3Q7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbmFsaXR5KE5vZGUq
KiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlPSAwKSBjb25zdDsKIAogICAgIGVudW0gY2xh
c3MgQWxsb3dQZXJjZW50YWdlIDogYm9vbCB7IE5vLCBZZXMgfTsKICAgICBlbnVtIGNsYXNzIFVz
ZUNTU1BYQXNVbml0VHlwZSA6IGJvb2wgeyBObywgWWVzIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDE3YzFmM2UwNWM5
OWJkNmFkNGFkY2Y2NzhkODNmY2FiNTczZjU4YmQuLjFlODhhMGQyMWU1YTkxNTJmNDEyMjg2MzYz
YjBiNjZlOTNhOTAxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC03NjgsMTggKzc2OCwxOCBAQCBTdHJpbmcgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpcmVjdGlvbkZvckZvcm1EYXRhKCkgY29uc3QKICAgICAg
ICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGluZWFnZU9mVHlwZTxIVE1MRWxlbWVudD4oKnRoaXMp
KSB7CiAgICAgICAgICAgICBhdXRvJiB2YWx1ZSA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihkaXJBdHRyKTsKICAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgInJ0bCIpKQotICAgICAgICAgICAgICAgIHJldHVybiBUZXh0
RGlyZWN0aW9uOjpSVEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlv
bjo6UlRMOwogICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLCAibHRyIikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsK
KyAgICAgICAgICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgICAg
ICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJhdXRvIikpIHsK
ICAgICAgICAgICAgICAgICBib29sIGlzQXV0bzsKICAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bWVudC5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7Cisg
ICAgICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICB9KCk7CiAKLSAgICBy
ZXR1cm4gZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/ICJsdHIiX3MgOiAicnRsIl9z
OworICAgIHJldHVybiBkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyAibHRy
Il9zIDogInJ0bCJfczsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNldE1heExlbmd0aChpbnQgbWF4TGVuZ3RoKQpAQCAtODM3LDcgKzgzNyw3IEBA
IHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmFkanVzdElubmVyVGV4dFN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
Ci0gICAgICAgIHRleHRCbG9ja1N0eWxlLnNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uOjpMVFIp
OworICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXREaXJlY3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFIpOwogICAgIH0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGl0bGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxl
bWVudC5jcHAKaW5kZXggNGU5ODUxNzBjMjgzNmU2MmYyNDJiZGEzODQwMTQ4NWFjMDc5ZDE0Ny4u
NTUyOTIyNzdkOTVlYmYzM2MwOWZhMmU1MDgzNDkyMGYyNDg1NGQwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCkBAIC04MSw3ICs4MSw3IEBAIFN0cmluZyBIVE1M
VGl0bGVFbGVtZW50Ojp0ZXh0KCkgY29uc3QKIAogU3RyaW5nV2l0aERpcmVjdGlvbiBIVE1MVGl0
bGVFbGVtZW50Ojpjb21wdXRlZFRleHRXaXRoRGlyZWN0aW9uKCkKIHsKLSAgICBhdXRvIGRpcmVj
dGlvbiA9IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSOwogICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29t
cHV0ZWRTdHlsZSgpKQogICAgICAgICBkaXJlY3Rpb24gPSBjb21wdXRlZFN0eWxlLT5kaXJlY3Rp
b24oKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA0ZDU5NTBlMGNjMmJjY2U0YWEzMmRi
MjdkYTNkODA3YTAxMDk3ZDk1Li42ZTllNTE0NDBkMTRlZmFiOGMwNWU1YzY3YzIyZDgzNTcwOTg5
YmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTE1NywyOCArMTU3LDI4IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRGb250V2l0aG91dFVwZGF0aW5nU3R5bGUoY29uc3QgU3RyaW5n
JiBuZXdGb250CiAgICAgQVNTRVJUKHN0YXRlKCkuZm9udC5pc1BvcHVsYXRlZCgpKTsKIH0KIAot
aW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b1RleHREaXJl
Y3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0
eWxlKSBjb25zdAoraW5saW5lIFBBTDo6VGV4dERpcmVjdGlvbiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnRvVGV4dERpcmVjdGlvbihEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSoqIGNvbXB1dGVkU3R5bGUpIGNvbnN0CiB7CiAgICAgYXV0byogc3R5bGUgPSBjb21wdXRl
ZFN0eWxlIHx8IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OkluaGVyaXQgPyBjYW52YXMoKS5leGlz
dGluZ0NvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKGNvbXB1dGVkU3R5bGUpCiAg
ICAgICAgICpjb21wdXRlZFN0eWxlID0gc3R5bGU7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
ICAgICBjYXNlIERpcmVjdGlvbjo6SW5oZXJpdDoKLSAgICAgICAgcmV0dXJuIHN0eWxlID8gc3R5
bGUtPmRpcmVjdGlvbigpIDogVGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICByZXR1cm4gc3R5
bGUgPyBzdHlsZS0+ZGlyZWN0aW9uKCkgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICBj
YXNlIERpcmVjdGlvbjo6UnRsOgotICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6UlRMOwor
ICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgY2FzZSBEaXJlY3Rp
b246Okx0cjoKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0
dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgIHJldHVybiBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUjsKIH0KIAogQ2FudmFzRGlyZWN0aW9uIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZGlyZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoc3RhdGUoKS5kaXJlY3Rpb24g
PT0gRGlyZWN0aW9uOjpJbmhlcml0KQogICAgICAgICBjYW52YXMoKS5kb2N1bWVudCgpLnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gdG9UZXh0RGlyZWN0aW9uKHN0YXRlKCkuZGly
ZWN0aW9uKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBDYW52YXNEaXJlY3Rpb246OlJ0bCA6IENh
bnZhc0RpcmVjdGlvbjo6THRyOworICAgIHJldHVybiB0b1RleHREaXJlY3Rpb24oc3RhdGUoKS5k
aXJlY3Rpb24pID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMID8gQ2FudmFzRGlyZWN0aW9uOjpS
dGwgOiBDYW52YXNEaXJlY3Rpb246Okx0cjsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmZpbGxUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgZG91YmxlIHgsIGRvdWJsZSB5LCBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gbWF4V2lkdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IDZiNDhlOGNjZjU4
ODdmMTg5YjViYTY2ZGE1ZmIzN2UzNzYxMzQ0MTQuLjhkODQxZmZmODgxMGI1NTBkYjVkN2JiZThj
NGYxNDhjM2JiZGY1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIGRyYXdGb2N1c0lmTmVlZGVkSW50ZXJuYWwoY29uc3QgUGF0aCYsIEVsZW1lbnQm
KTsKIAotICAgIFRleHREaXJlY3Rpb24gdG9UZXh0RGlyZWN0aW9uKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OkRpcmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxl
ID0gbnVsbHB0cikgY29uc3Q7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRvVGV4dERpcmVjdGlv
bihDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpEaXJlY3Rpb24sIGNvbnN0IFJlbmRlclN0
eWxlKiogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCA2ZGVmZWI4MTJjMzcyMmMzOGVh
MmZjOGQwNzkxZmFlMjliMTYwZDZlLi4yN2UwZWY5NGNjNWE2YmI0YWY2NDlkZmU1MjRiNjdhNjQy
NWVkYWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMjM5OCw3ICsyMzk4LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIGRvdWJsZSB4LCBkb3VibGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG5vcm1h
bGl6ZWRUZXh0ID0gbm9ybWFsaXplU3BhY2VzKHRleHQpOwotICAgIGF1dG8gZGlyZWN0aW9uID0g
KHN0YXRlKCkuZGlyZWN0aW9uID09IERpcmVjdGlvbjo6UnRsKSA/IFRleHREaXJlY3Rpb246OlJU
TCA6IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IChzdGF0ZSgpLmRp
cmVjdGlvbiA9PSBEaXJlY3Rpb246OlJ0bCkgPyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIFRleHRSdW4gdGV4dFJ1bihub3JtYWxpemVkVGV4
dCwgMCwgMCwgQWxsb3dSaWdodEV4cGFuc2lvbiwgZGlyZWN0aW9uLCBmYWxzZSwgdHJ1ZSk7CiAg
ICAgZHJhd1RleHRVbmNoZWNrZWQodGV4dFJ1biwgeCwgeSwgZmlsbCwgbWF4V2lkdGgpOwogfQpA
QCAtMjUyMCw3ICsyNTIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpk
cmF3VGV4dFVuY2hlY2tlZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBkb3UKIFJlZjxUZXh0TWV0
cmljcz4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6bWVhc3VyZVRleHRJbnRlcm5hbChj
b25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgU3RyaW5nIG5vcm1hbGl6ZWRUZXh0ID0gbm9ybWFs
aXplU3BhY2VzKHRleHQpOwotICAgIGF1dG8gZGlyZWN0aW9uID0gKHN0YXRlKCkuZGlyZWN0aW9u
ID09IERpcmVjdGlvbjo6UnRsKSA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246
OkxUUjsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IChzdGF0ZSgpLmRpcmVjdGlvbiA9PSBEaXJlY3Rp
b246OlJ0bCkgPyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSOwogICAgIFRleHRSdW4gdGV4dFJ1bihub3JtYWxpemVkVGV4dCwgMCwgMCwgQWxsb3dSaWdo
dEV4cGFuc2lvbiwgZGlyZWN0aW9uLCBmYWxzZSwgdHJ1ZSk7CiAgICAgcmV0dXJuIG1lYXN1cmVU
ZXh0SW50ZXJuYWwodGV4dFJ1bik7CiB9CkBAIC0yNTU1LDcgKzI1NTUsNyBAQCBSZWY8VGV4dE1l
dHJpY3M+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Om1lYXN1cmVUZXh0SW50ZXJuYWwo
Y29uc3QgVGV4dFJ1bgogICAgIHJldHVybiBtZXRyaWNzOwogfQogCi1GbG9hdFBvaW50IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRPZmZzZXQoZmxvYXQgd2lkdGgsIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uKQorRmxvYXRQb2ludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
Ojp0ZXh0T2Zmc2V0KGZsb2F0IHdpZHRoLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQog
ewogICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gZm9udFByb3h5KCktPmZvbnRNZXRyaWNzKCk7CiAg
ICAgRmxvYXRQb2ludCBvZmZzZXQ7CkBAIC0yNTc3LDcgKzI1NzcsNyBAQCBGbG9hdFBvaW50IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRPZmZzZXQoZmxvYXQgd2lkdGgsIFRleHRE
aXJlY3Rpb24gZAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBib29sIGlzUlRMID0gZGly
ZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICBib29sIGlzUlRMID0gZGlyZWN0aW9u
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOwogICAgIGF1dG8gYWxpZ24gPSBzdGF0ZSgpLnRl
eHRBbGlnbjsKICAgICBpZiAoYWxpZ24gPT0gU3RhcnRUZXh0QWxpZ24pCiAgICAgICAgIGFsaWdu
ID0gaXNSVEwgPyBSaWdodFRleHRBbGlnbiA6IExlZnRUZXh0QWxpZ247CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmgKaW5kZXggZDRhZTBlNDEwY2M5NTNlOWI2YTg3ZTQyNmMzZTlmM2VmZjM0MjQ0Ni4uODE4OGE3
MDMzOWU2YzcyOGVhYjY1MzlhNGQ5NjNlOTgzNmQzZjI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApA
QCAtMzk2LDcgKzM5Niw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlcmVmb3JlLCBhbGwgZm9udCBv
cGVyYXRpb25zIG11c3QgcGFzcyB0aHJvdWdoIHRoZSBwcm94eS4KICAgICB2aXJ0dWFsIGNvbnN0
IEZvbnRQcm94eSogZm9udFByb3h5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0gICAgRmxvYXRQ
b2ludCB0ZXh0T2Zmc2V0KGZsb2F0IHdpZHRoLCBUZXh0RGlyZWN0aW9uKTsKKyAgICBGbG9hdFBv
aW50IHRleHRPZmZzZXQoZmxvYXQgd2lkdGgsIFBBTDo6VGV4dERpcmVjdGlvbik7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE1heFNhdmVDb3VudCA9IDEwMjQgKiAxNjsKICAgICBW
ZWN0b3I8U3RhdGUsIDE+IG1fc3RhdGVTdGFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCmluZGV4IGMzMDc3MDdmM2E3MjRkNjIwODAz
MzYwODJjYzhkZTU4NzVhNzBiOWYuLjRmZDYyNmFmZThhN2VlMWY5MjUwZmYwZWRhNjg3NWRhZjVj
NjQ3ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1i
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJF
bGVtZW50LmNwcApAQCAtMTY5LDEyICsxNjksMTIgQEAgdm9pZCBSZW5kZXJTbGlkZXJDb250YWlu
ZXI6OmxheW91dCgpCiAgICAgYXV0byYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
PigqZWxlbWVudCgpLT5zaGFkb3dIb3N0KCkpOwogICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGhhc1Zl
cnRpY2FsQXBwZWFyYW5jZShpbnB1dCk7CiAgICAgbXV0YWJsZVN0eWxlKCkuc2V0RmxleERpcmVj
dGlvbihpc1ZlcnRpY2FsID8gRmxleERpcmVjdGlvbjo6Q29sdW1uIDogRmxleERpcmVjdGlvbjo6
Um93KTsKLSAgICBUZXh0RGlyZWN0aW9uIG9sZFRleHREaXJlY3Rpb24gPSBzdHlsZSgpLmRpcmVj
dGlvbigpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBvbGRUZXh0RGlyZWN0aW9uID0gc3R5bGUo
KS5kaXJlY3Rpb24oKTsKICAgICBpZiAoaXNWZXJ0aWNhbCkgewogICAgICAgICAvLyBGSVhNRTog
V29yayBhcm91bmQgcm91bmRpbmcgaXNzdWVzIGluIFJUTCB2ZXJ0aWNhbCBzbGlkZXJzLiBXZSB3
YW50IHRoZW0gdG8KICAgICAgICAgLy8gcmVuZGVyIGlkZW50aWNhbGx5IHRvIExUUiB2ZXJ0aWNh
bCBzbGlkZXJzLiBXZSBjYW4gcmVtb3ZlIHRoaXMgd29yayBhcm91bmQgd2hlbgogICAgICAgICAv
LyBzdWJwaXhlbCByZW5kZXJpbmcgaXMgZW5hYmxlZCBvbiBhbGwgcG9ydHMuCi0gICAgICAgIG11
dGFibGVTdHlsZSgpLnNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uOjpMVFIpOworICAgICAgICBt
dXRhYmxlU3R5bGUoKS5zZXREaXJlY3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpOwogICAg
IH0KIAogICAgIFJlbmRlckJveCogdGh1bWIgPSBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKSA/
IGlucHV0LnNsaWRlclRodW1iRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcAppbmRleCA1YjlhMmQzOTIwNDc5MTBlNzk1MmYzZTYzMjkyZDc3YThmOWZiMWZjLi42
MTEwZjQ5NjMyNzZmYzExYWIwM2ZmNTdkZGM5ZTlkYzY1MjRhMzVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAK
QEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6Om9wdGlvbmFsPFN0eWxlOjpFbGVtZW50U3R5bGU+IFRl
eHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoYwogICAgIG5ld1N0eWxl
LT5zZXRGbGV4R3JvdygxKTsKICAgICBuZXdTdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoIHsgMCwg
TGVuZ3RoVHlwZTo6Rml4ZWQgfSk7IC8vIE5lZWRlZCBmb3IgY29ycmVjdCBzaHJpbmtpbmcuCiAg
ICAgbmV3U3R5bGUtPnNldERpc3BsYXkoRGlzcGxheVR5cGU6OkJsb2NrKTsKLSAgICBuZXdTdHls
ZS0+c2V0RGlyZWN0aW9uKFRleHREaXJlY3Rpb246OkxUUik7CisgICAgbmV3U3R5bGUtPnNldERp
cmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb246OkxUUik7CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
aGUgc2hhZG93IERPTSB0byBiZSBlZGl0YWJsZSwgc28gd2Ugc2V0IHRoaXMgYmxvY2sgdG8gcmVh
ZC1vbmx5IGluIGNhc2UgdGhlIGlucHV0IGl0c2VsZiBpcyBlZGl0YWJsZS4KICAgICBuZXdTdHls
ZS0+c2V0VXNlck1vZGlmeShVc2VyTW9kaWZ5OjpSZWFkT25seSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUl0ZW1z
QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVJdGVtc0J1aWxkZXIuY3BwCmluZGV4IDRiZjQwOTlhN2U4YjNmMmEwOGQ5MTVl
OTA5NmE1ZWIzZDU0M2Q5ZTEuLmRjYTVkNWUwMDI0YTNmNDQ2OGM4MjIyMGJjNTdkNjAzNzgxYzkz
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUl0ZW1zQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lSXRlbXNCdWlsZGVyLmNwcApAQCAtMTcy
LDMwICsxNzIsMzAgQEAgc3RhdGljIHZvaWQgcmVwbGFjZU5vblByZXNlcnZlZE5ld0xpbmVDaGFy
YWN0ZXJzQW5kQXBwZW5kKGNvbnN0IElubGluZVRleHRCb3gmIGkKIH0KIAogc3RydWN0IEJpZGlD
b250ZXh0IHsKLSAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGk7CisgICAgUEFMOjpFVW5pY29k
ZUJpZGkgdW5pY29kZUJpZGk7CiAgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uIHsgZmFs
c2UgfTsKIH07CiB1c2luZyBCaWRpQ29udGV4dFN0YWNrID0gVmVjdG9yPEJpZGlDb250ZXh0PjsK
LXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbnRlckV4aXRCaWRpQ29udGV4dChTdHJpbmdCdWls
ZGVyJiBwYXJhZ3JhcGhDb250ZW50QnVpbGRlciwgRVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpLCBi
b29sIGlzTFRSLCBib29sIGlzRW50ZXJpbmdCaWRpLCBCaWRpQ29udGV4dFN0YWNrJiBiaWRpQ29u
dGV4dFN0YWNrKQorc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVudGVyRXhpdEJpZGlDb250ZXh0
KFN0cmluZ0J1aWxkZXImIHBhcmFncmFwaENvbnRlbnRCdWlsZGVyLCBQQUw6OkVVbmljb2RlQmlk
aSB1bmljb2RlQmlkaSwgYm9vbCBpc0xUUiwgYm9vbCBpc0VudGVyaW5nQmlkaSwgQmlkaUNvbnRl
eHRTdGFjayYgYmlkaUNvbnRleHRTdGFjaykKIHsKICAgICBzd2l0Y2ggKHVuaWNvZGVCaWRpKSB7
Ci0gICAgY2FzZSBFVW5pY29kZUJpZGk6OlVCTm9ybWFsOgorICAgIGNhc2UgUEFMOjpFVW5pY29k
ZUJpZGk6OlVCTm9ybWFsOgogICAgICAgICAvLyBUaGUgYm94IGRvZXMgbm90IG9wZW4gYW4gYWRk
aXRpb25hbCBsZXZlbCBvZiBlbWJlZGRpbmcgd2l0aCByZXNwZWN0IHRvIHRoZSBiaWRpcmVjdGlv
bmFsIGFsZ29yaXRobS4KICAgICAgICAgLy8gRm9yIGlubGluZSBib3hlcywgaW1wbGljaXQgcmVv
cmRlcmluZyB3b3JrcyBhY3Jvc3MgYm94IGJvdW5kYXJpZXMuCiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRVVuaWNvZGVCaWRpOjpFbWJlZDoKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpF
bWJlZDoKICAgICAgICAgcGFyYWdyYXBoQ29udGVudEJ1aWxkZXIuYXBwZW5kKGlzRW50ZXJpbmdC
aWRpID8gKGlzTFRSID8gbGVmdFRvUmlnaHRFbWJlZCA6IHJpZ2h0VG9MZWZ0RW1iZWQpIDogcG9w
RGlyZWN0aW9uYWxGb3JtYXR0aW5nKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFVW5pY29k
ZUJpZGk6Ok92ZXJyaWRlOgorICAgIGNhc2UgUEFMOjpFVW5pY29kZUJpZGk6Ok92ZXJyaWRlOgog
ICAgICAgICBwYXJhZ3JhcGhDb250ZW50QnVpbGRlci5hcHBlbmQoaXNFbnRlcmluZ0JpZGkgPyAo
aXNMVFIgPyBsZWZ0VG9SaWdodE92ZXJyaWRlIDogcmlnaHRUb0xlZnRPdmVycmlkZSkgOiBwb3BE
aXJlY3Rpb25hbEZvcm1hdHRpbmcpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEVVbmljb2Rl
QmlkaTo6SXNvbGF0ZToKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlOgogICAg
ICAgICBwYXJhZ3JhcGhDb250ZW50QnVpbGRlci5hcHBlbmQoaXNFbnRlcmluZ0JpZGkgPyAoaXNM
VFIgPyBsZWZ0VG9SaWdodElzb2xhdGUgOiByaWdodFRvTGVmdElzb2xhdGUpIDogcG9wRGlyZWN0
aW9uYWxJc29sYXRlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFVW5pY29kZUJpZGk6OlBs
YWludGV4dDoKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpQbGFpbnRleHQ6CiAgICAgICAg
IHBhcmFncmFwaENvbnRlbnRCdWlsZGVyLmFwcGVuZChpc0VudGVyaW5nQmlkaSA/IGZpcnN0U3Ry
b25nSXNvbGF0ZSA6IHBvcERpcmVjdGlvbmFsSXNvbGF0ZSk7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRVVuaWNvZGVCaWRpOjpJc29sYXRlT3ZlcnJpZGU6CisgICAgY2FzZSBQQUw6OkVVbmlj
b2RlQmlkaTo6SXNvbGF0ZU92ZXJyaWRlOgogICAgICAgICBpZiAoaXNFbnRlcmluZ0JpZGkpIHsK
ICAgICAgICAgICAgIHBhcmFncmFwaENvbnRlbnRCdWlsZGVyLmFwcGVuZChmaXJzdFN0cm9uZ0lz
b2xhdGUpOwogICAgICAgICAgICAgcGFyYWdyYXBoQ29udGVudEJ1aWxkZXIuYXBwZW5kKGlzTFRS
ID8gbGVmdFRvUmlnaHRPdmVycmlkZSA6IHJpZ2h0VG9MZWZ0T3ZlcnJpZGUpOwpAQCAtMjQxLDcg
KzI0MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBidWlsZEJpZGlQYXJhZ3JhcGgoY29uc3QgUmVu
ZGVyU3R5bGUmIHJvb3RTdHlsZSwgY29uc3QgSW5saW5lCiAgICAgICAgIH0gZWxzZSBpZiAoaW5s
aW5lSXRlbS5pc0lubGluZUJveFN0YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0lubGluZUJveEVuZCgp
KSB7CiAgICAgICAgICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXdyaXRpbmct
bW9kZXMvI3VuaWNvZGUtYmlkaQogICAgICAgICAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVJdGVt
LnN0eWxlKCk7Ci0gICAgICAgICAgICBhdXRvIGluaXRpYXRlc0NvbnRyb2xDaGFyYWN0ZXIgPSBz
dHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpMb2dpY2FsICYmIHN0eWxlLnVuaWNvZGVCaWRp
KCkgIT0gRVVuaWNvZGVCaWRpOjpVQk5vcm1hbDsKKyAgICAgICAgICAgIGF1dG8gaW5pdGlhdGVz
Q29udHJvbENoYXJhY3RlciA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gT3JkZXI6OkxvZ2ljYWwg
JiYgc3R5bGUudW5pY29kZUJpZGkoKSAhPSBQQUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWw7CiAg
ICAgICAgICAgICBpZiAoIWluaXRpYXRlc0NvbnRyb2xDaGFyYWN0ZXIpIHsKICAgICAgICAgICAg
ICAgICAvLyBPcGFxdWUgaXRlbXMgZG8gbm90IGhhdmUgcG9zaXRpb24gaW4gdGhlIGJpZGkgcGFy
YWdyYXBoLiBUaGV5IGluaGVyaXQgdGhlaXIgYmlkaSBsZXZlbCBmcm9tIHRoZSBuZXh0IGlubGlu
ZSBpdGVtLgogICAgICAgICAgICAgICAgIGlubGluZUl0ZW1PZmZzZXRMaXN0LnVuY2hlY2tlZEFw
cGVuZCh7IH0pOwpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgSW5saW5lSXRlbXNCdWlsZGVyOjpi
cmVha0FuZENvbXB1dGVCaWRpTGV2ZWxzKElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykKICAgICB9
KTsKIAogICAgIFVCaURpTGV2ZWwgcm9vdEJpZGlMZXZlbCA9IFVCSURJX0RFRkFVTFRfTFRSOwot
ICAgIGJvb2wgdXNlSGV1cmlzdGljQmFzZURpcmVjdGlvbiA9IHJvb3QoKS5zdHlsZSgpLnVuaWNv
ZGVCaWRpKCkgPT0gRVVuaWNvZGVCaWRpOjpQbGFpbnRleHQ7CisgICAgYm9vbCB1c2VIZXVyaXN0
aWNCYXNlRGlyZWN0aW9uID0gcm9vdCgpLnN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQQUw6OkVV
bmljb2RlQmlkaTo6UGxhaW50ZXh0OwogICAgIGlmICghdXNlSGV1cmlzdGljQmFzZURpcmVjdGlv
bikKICAgICAgICAgcm9vdEJpZGlMZXZlbCA9IHJvb3QoKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IFVCSURJX0xUUiA6IFVCSURJX1JUTDsKIApAQCAtNTI0LDE0ICs1MjQsMTQg
QEAgdm9pZCBJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUJveFN0YXJ0KGNvbnN0IEJv
eCYgaW5saW5lQm94LCBJbmxpbmVJdGVtcyYKIHsKICAgICBpbmxpbmVJdGVtcy5hcHBlbmQoeyBp
bmxpbmVCb3gsIElubGluZUl0ZW06OlR5cGU6OklubGluZUJveFN0YXJ0IH0pOwogICAgIGF1dG8m
IHN0eWxlID0gaW5saW5lQm94LnN0eWxlKCk7Ci0gICAgbV9uZWVkc1Zpc3VhbFJlb3JkZXJpbmcg
PSBtX25lZWRzVmlzdWFsUmVvcmRlcmluZyB8fCAhc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpIHx8IChzdHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpMb2dpY2FsICYmIHN0eWxlLnVu
aWNvZGVCaWRpKCkgIT0gRVVuaWNvZGVCaWRpOjpVQk5vcm1hbCk7CisgICAgbV9uZWVkc1Zpc3Vh
bFJlb3JkZXJpbmcgPSBtX25lZWRzVmlzdWFsUmVvcmRlcmluZyB8fCAhc3R5bGUuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpIHx8IChzdHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpMb2dpY2Fs
ICYmIHN0eWxlLnVuaWNvZGVCaWRpKCkgIT0gUEFMOjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsKTsK
IH0KIAogdm9pZCBJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUJveEVuZChjb25zdCBC
b3gmIGlubGluZUJveCwgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQogewogICAgIGlubGluZUl0
ZW1zLmFwcGVuZCh7IGlubGluZUJveCwgSW5saW5lSXRlbTo6VHlwZTo6SW5saW5lQm94RW5kIH0p
OwogICAgIC8vIElubGluZSBib3ggZW5kIGl0ZW0gaXRzZWxmIGNhbiBub3QgdHJpZ2dlciBiaWRp
IGNvbnRlbnQuCi0gICAgQVNTRVJUKG5lZWRzVmlzdWFsUmVvcmRlcmluZygpIHx8IGlubGluZUJv
eC5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSB8fCBpbmxpbmVCb3guc3R5bGUoKS5y
dGxPcmRlcmluZygpID09IE9yZGVyOjpWaXN1YWwgfHwgaW5saW5lQm94LnN0eWxlKCkudW5pY29k
ZUJpZGkoKSA9PSBFVW5pY29kZUJpZGk6OlVCTm9ybWFsKTsKKyAgICBBU1NFUlQobmVlZHNWaXN1
YWxSZW9yZGVyaW5nKCkgfHwgaW5saW5lQm94LnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpIHx8IGlubGluZUJveC5zdHlsZSgpLnJ0bE9yZGVyaW5nKCkgPT0gT3JkZXI6OlZpc3VhbCB8
fCBpbmxpbmVCb3guc3R5bGUoKS51bmljb2RlQmlkaSgpID09IFBBTDo6RVVuaWNvZGVCaWRpOjpV
Qk5vcm1hbCk7CiB9CiAKIHZvaWQgSW5saW5lSXRlbXNCdWlsZGVyOjpoYW5kbGVJbmxpbmVMZXZl
bEJveChjb25zdCBCb3gmIGxheW91dEJveCwgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
SW5saW5lTGluZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9p
bmxpbmUvSW5saW5lTGluZS5oCmluZGV4IDQwZjk1YWI3NTRkZWE2OWFkNTliODIyZTE2MmIwMzBj
MDNlZmIzNTMuLmNmZmZhOWNkMDQ0Zjk5YWU3MDExN2E4ZjAzMjgzMTk1ZjhhZDQ2YzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2lubGluZS9JbmxpbmVMaW5lLmgKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IElubGluZUxheW91dFVuaXQgdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOyB9CiAKICAgICAgICAgYm9vbCBzaG91bGRUcmFp
bGluZ1doaXRlc3BhY2VIYW5nKCkgY29uc3Q7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gaW5saW5l
RGlyZWN0aW9uKCkgY29uc3Q7CisgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBpbmxpbmVEaXJl
Y3Rpb24oKSBjb25zdDsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsZXR0ZXJTcGFjaW5nKCkg
Y29uc3Q7CiAgICAgICAgIGJvb2wgaGFzVGV4dENvbWJpbmUoKSBjb25zdDsKIApAQCAtMTU0LDcg
KzE1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgSW5saW5lRGlzcGxheTo6Qm94OjpFeHBhbnNpb24g
bV9leHBhbnNpb247CiAgICAgICAgIHN0cnVjdCBTdHlsZSB7CiAgICAgICAgICAgICBib29sIHNo
b3VsZFRyYWlsaW5nV2hpdGVzcGFjZUhhbmcgeyBmYWxzZSB9OwotICAgICAgICAgICAgVGV4dERp
cmVjdGlvbiBpbmxpbmVEaXJlY3Rpb24geyBUZXh0RGlyZWN0aW9uOjpSVEwgfTsKKyAgICAgICAg
ICAgIFBBTDo6VGV4dERpcmVjdGlvbiBpbmxpbmVEaXJlY3Rpb24geyBQQUw6OlRleHREaXJlY3Rp
b246OlJUTCB9OwogICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsZXR0ZXJTcGFjaW5nIHsg
MCB9OwogICAgICAgICAgICAgYm9vbCBoYXNUZXh0Q29tYmluZSB7IGZhbHNlIH07CiAgICAgICAg
IH07CkBAIC0yNjgsNyArMjY4LDcgQEAgaW5saW5lIGJvb2wgTGluZTo6UnVuOjpzaG91bGRUcmFp
bGluZ1doaXRlc3BhY2VIYW5nKCkgY29uc3QKICAgICByZXR1cm4gbV9zdHlsZS5zaG91bGRUcmFp
bGluZ1doaXRlc3BhY2VIYW5nOwogfQogCi1pbmxpbmUgVGV4dERpcmVjdGlvbiBMaW5lOjpSdW46
OmlubGluZURpcmVjdGlvbigpIGNvbnN0CitpbmxpbmUgUEFMOjpUZXh0RGlyZWN0aW9uIExpbmU6
OlJ1bjo6aW5saW5lRGlyZWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdHlsZS5pbmxp
bmVEaXJlY3Rpb247CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vSW5saW5lSXRlcmF0b3JCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9JbmxpbmVJdGVyYXRvckJveC5oCmluZGV4IDgxM2Y1YjBlNjU5MDM0MTNmZjQ2MmU0OWUx
Zjg5Mzc4MTg2MzZjN2UuLjYyZDFmYTk5OWZjNjk1NDAwNGU1M2U0NmVlODIwNjRiMGNiZjNiYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJ
dGVyYXRvckJveC5oCkBAIC03OCw4ICs3OCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCByaWdo
dG1vc3RDYXJldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IG1heGltdW1DYXJldE9mZnNldCgpIDogbWluaW11bUNhcmV0T2Zmc2V0KCk7IH0KIAogICAg
IHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsKCkgY29uc3Q7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBUZXh0RGlyZWN0aW9uOjpS
VEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KLSAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBkaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFI7IH0K
KyAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxl
dmVsKCkgJSAyID8gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246
OkxUUjsgfQorICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOyB9CiAKICAgICBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1v
ZGVyblBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvckJveE1vZGVyblBhdGguaAppbmRleCAyNTJhYWI4ZjM0NDExODc0ZTMxZmMyNzIzNDg0NzRk
N2RhNGU3MjlmLi40ZGQzYmE3YWRhMmMzYTY3MzRmZDYyOGVjNDA5N2IyOTJlZWVmYWY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JC
b3hNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lu
bGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oCkBAIC0yNjcsNyArMjY3LDcgQEAgcHJpdmF0ZToK
ICAgICBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZSYgbGluZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5saW5lQ29udGVudC0+bGluZUZvckJveChib3goKSk7IH0KIAogICAgIGNvbnN0IFJlbmRl
clRleHQmIHJlbmRlclRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0Pihy
ZW5kZXJlcigpKTsgfQotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gYmlkaUxldmVsKCkgJSAyID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6
TFRSOyB9CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGJpZGlMZXZlbCgpICUgMiA/IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFI7IH0KIAogICAgIFJlZlB0cjxjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5s
aW5lQ29udGVudD4gbV9pbmxpbmVDb250ZW50OwogICAgIHNpemVfdCBtX2JveEluZGV4IHsgMCB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0
ZXJhdG9yVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5s
aW5lSXRlcmF0b3JUZXh0Qm94LmNwcAppbmRleCAyNjBjZDk5OGQ1MmQyYWFmNGQ5MjU1MmYwYzJl
NmQyMmE2MTQ3ODAwLi4wNmVmNjRjY2MyYTBiMGY4ZWJlNGJlM2M0OGQ2YWM1ZjAwMTM0ZDE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0
b3JUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5s
aW5lSXRlcmF0b3JUZXh0Qm94LmNwcApAQCAtNzcsNyArNzcsNyBAQCBmbG9hdCBUZXh0Qm94Ojpw
b3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAgICAgICAgIHJldHVybiBs
b2dpY2FsTGVmdCgpOwogCiAgICAgYXV0byBbc3RhcnRPZmZzZXQsIGVuZE9mZnNldF0gPSBbJl0g
ewotICAgICAgICBpZiAoZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgICAg
ICBpZiAoZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjpwYWlyIHsgc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAob2Zmc2V0KSwgbGVu
Z3RoKCkgfTsKICAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IDB1LCBzZWxlY3RhYmxlUmFuZ2Uo
KS5jbGFtcChvZmZzZXQpIH07CiAgICAgfSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3Bw
CmluZGV4IDZlMzAzNDUxNzM0ZmMwODc3YzM1OTk4NDhkODdkODNkNDU2ZDIwNTguLjEyMTkwN2Zl
YTNiMzIwMTZmMmUyOTgyYmRiNmFjMWFmNjRkNTM0ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3Zl
cmFnZS5jcHAKQEAgLTQzNCw3ICs0MzQsNyBAQCBzdGF0aWMgT3B0aW9uU2V0PEF2b2lkYW5jZVJl
YXNvbj4gY2FuVXNlRm9yU3R5bGUoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsCiAgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc092ZXJmbG93Tm90Vmlz
aWJsZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChzdHlsZS50ZXh0T3ZlcmZs
b3coKSA9PSBUZXh0T3ZlcmZsb3c6OkVsbGlwc2lzKQogICAgICAgICBTRVRfUkVBU09OX0FORF9S
RVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0T3ZlcmZsb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLSAgICBpZiAoIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSB8fCAoaXM8UmVu
ZGVyQmxvY2tGbG93PihyZW5kZXJlcikgJiYgc3R5bGUudW5pY29kZUJpZGkoKSA9PSBFVW5pY29k
ZUJpZGk6OlBsYWludGV4dCkpCisgICAgaWYgKCFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgfHwgKGlzPFJlbmRlckJsb2NrRmxvdz4ocmVuZGVyZXIpICYmIHN0eWxlLnVuaWNvZGVCaWRp
KCkgPT0gUEFMOjpFVW5pY29kZUJpZGk6OlBsYWludGV4dCkpCiAgICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd01heU5vdEJlTFRSLCByZWFzb25zLCBpbmNsdWRlUmVh
c29ucyk7CiAgICAgaWYgKHN0eWxlLndyaXRpbmdNb2RlKCkgIT0gV3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tKQogICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc05v
dFRvcFRvQm90dG9tLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgKaW5kZXggY2Q1ZjI4ZjE0NjFlOGEyZTZhZGJjMGQwMGU1OGRlZTU2ZDRk
MDczOC4uMDk5MTk5NGFkZTIxNTI5YzA2N2IyYzQ0M2NmYjJiMjI1MDNjMTEwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtMTIzLDcgKzEyMyw3IEBAIGNsYXNzIEVtcHR5
Q2hyb21lQ2xpZW50IDogcHVibGljIENocm9tZUNsaWVudCB7CiAgICAgdm9pZCBjb250ZW50c1Np
emVDaGFuZ2VkKEZyYW1lJiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0IGZpbmFsIHsgfQogICAgIHZv
aWQgaW50cmluc2ljQ29udGVudHNTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJikgY29uc3QgZmlu
YWwgeyB9CiAKLSAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgVGV4dERpcmVjdGlvbikgZmluYWwgeyB9
CisgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0Jiwg
dW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIFBBTDo6VGV4dERpcmVjdGlvbikgZmluYWwgeyB9CiAK
ICAgICB2b2lkIHByaW50KEZyYW1lJiwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpIGZpbmFs
IHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggMjJiMDBkZDk0ZGFmYWYyNTUxODg5OTk5
NjZmMWYzYmZmMzQwMDQ4MC4uNzY3ODRjY2U4ZjQ1ZjJiMmNhZDkzODY1ZTM2MTZiMTVjZWI0YTc2
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtMzQwLDE0ICszNDAsMTQgQEAgdm9pZCBDaHJv
bWU6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
dW5zaWduZWQgbW9kaWYKICAgICAgICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmNsaWVu
dCgpLnByZWZldGNoRE5TKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5ob3N0KCkudG9TdHJpbmco
KSk7CiAKICAgICBTdHJpbmcgdG9vbFRpcDsKLSAgICBUZXh0RGlyZWN0aW9uIHRvb2xUaXBEaXJl
Y3Rpb247CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRvb2xUaXBEaXJlY3Rpb247CiAgICAgZ2V0
VG9vbFRpcChyZXN1bHQsIHRvb2xUaXAsIHRvb2xUaXBEaXJlY3Rpb24pOwogICAgIG1fY2xpZW50
Lm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHJlc3VsdCwgbW9kaWZpZXJGbGFncywgdG9vbFRpcCwg
dG9vbFRpcERpcmVjdGlvbik7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KG1fcGFnZSwgcmVzdWx0LCBtb2RpZmllckZsYWdzKTsKIH0KIAot
dm9pZCBDaHJvbWU6OmdldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBTdHJp
bmcmIHRvb2xUaXAsIFRleHREaXJlY3Rpb24mIHRvb2xUaXBEaXJlY3Rpb24pCit2b2lkIENocm9t
ZTo6Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIFN0cmluZyYgdG9vbFRp
cCwgUEFMOjpUZXh0RGlyZWN0aW9uJiB0b29sVGlwRGlyZWN0aW9uKQogewogICAgIC8vIEZpcnN0
IHByaW9yaXR5IGlzIGEgcG90ZW50aWFsIHRvb2xUaXAgcmVwcmVzZW50aW5nIGEgc3BlbGxpbmcg
b3IgZ3JhbW1hciBlcnJvcgogICAgIHRvb2xUaXAgPSByZXN1bHQuc3BlbGxpbmdUb29sVGlwKHRv
b2xUaXBEaXJlY3Rpb24pOwpAQCAtMzY0LDcgKzM2NCw3IEBAIHZvaWQgQ2hyb21lOjpnZXRUb29s
VGlwKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGly
ZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybS0+cmVuZGVyZXIoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gZm9ybS0+cmVuZGVyZXIo
KS0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gVGV4dERpcmVjdGlv
bjo6TFRSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIENocm9tZTo6
Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIFN0cmluZyYgdG9vbFRpcCwg
VGV4dERpcmVjdAogICAgICAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gcGFzcyB0aGlzIFVSTCB0
aHJvdWdoIHVzZXJWaXNpYmxlU3RyaW5nIG9uY2UgdGhhdCdzIGluIFdlYkNvcmUKICAgICAgICAg
ICAgIHRvb2xUaXAgPSByZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCk7CiAgICAgICAg
ICAgICAvLyBVUkwgYWx3YXlzIGRpc3BsYXkgYXMgTFRSLgotICAgICAgICAgICAgdG9vbFRpcERp
cmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgICAgIHRvb2xUaXBEaXJlY3Rp
b24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzk3
LDcgKzM5Nyw3IEBAIHZvaWQgQ2hyb21lOjpnZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0CiAgICAgICAgICAgICAgICAgLy8g
aW1wbGVtZW50YXRpb25zIGRvbid0IHVzZSB0ZXh0IGRpcmVjdGlvbiBpbmZvcm1hdGlvbiBmb3IK
ICAgICAgICAgICAgICAgICAvLyBDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
LiBXZSdsbCB3b3JrIG9uIHRvb2x0aXAgdGV4dAogICAgICAgICAgICAgICAgIC8vIGRpcmVjdGlv
biBkdXJpbmcgYmlkaSBjbGVhbnVwIGluIGZvcm0gaW5wdXRzLgotICAgICAgICAgICAgICAgIHRv
b2xUaXBEaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgICAgICAgICAgdG9v
bFRpcERpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKaW5kZXggMTI0MzljMTBjYzNmYzI2Mjg0
OWM3NzhmZWE2OTZlOGZkNDI5MzU1My4uODFkNTdjYWIwNjlkODAxMDU0ODI1NzBmZTM5ZDdlYTk3
OWVlNjExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeVBvcHVwT3BlbmluZ09ic2VydmVycygpIGNvbnN0Owog
Ci0gICAgdm9pZCBnZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBTdHJpbmcmLCBUZXh0
RGlyZWN0aW9uJik7CisgICAgdm9pZCBnZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBT
dHJpbmcmLCBQQUw6OlRleHREaXJlY3Rpb24mKTsKIAogICAgIFBhZ2UmIG1fcGFnZTsKICAgICBD
aHJvbWVDbGllbnQmIG1fY2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXgg
MzUyZTAzZjBjNDE2YjYzODAwZTcxNDI5ZThjMjhhZTNjZGMyNjA5My4uYzhhODAxN2NiZWE2YTI2
NjRhN2I5NjlmODE0YTU2MzNhNWIxN2NkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CkBAIC0yNDQsNyArMjQ0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFVu
YXZhaWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVn
aW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKEVsZW1lbnQmLCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0IHsgfQotICAg
IHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0
JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGly
ZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNv
bnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJpbmcm
IHRvb2xUaXAsIFBBTDo6VGV4dERpcmVjdGlvbikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHBy
aW50KEZyYW1lJiwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpID0gMDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCmluZGV4IDA2MzdmMmQ5YTc5YzBmOTQxNzIzZDcxZGNjMTcxMzZmNGI3
NWFjODQuLjAzNjQyOGJhOTg5MzAwMzJhZjFjMzZjMjViMTU1NDAxODYwMmE0MzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTE2NywxNCArMTY3LDE0IEBAIFBhZ2luYXRpb246Ok1v
ZGUgcGFnaW5hdGlvbk1vZGVGb3JSZW5kZXJTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
CiAgICAgICAgIHJldHVybiBQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZDsKIAogICAgIGJvb2wgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUgPSBzdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwot
ICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHN0eWxlLmRpcmVjdGlvbigpOworICAg
IFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gc3R5bGUuZGlyZWN0aW9uKCk7CiAg
ICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUgPSBzdHlsZS53cml0aW5nTW9kZSgpOwogCiAgICAg
Ly8gcGFnZWQteCBhbHdheXMgY29ycmVzcG9uZHMgdG8gTGVmdFRvUmlnaHRQYWdpbmF0ZWQgb3Ig
UmlnaHRUb0xlZnRQYWdpbmF0ZWQuIElmIHRoZSBXcml0aW5nTW9kZQogICAgIC8vIGlzIGhvcml6
b250YWwsIHRoZW4gd2UgdXNlIFRleHREaXJlY3Rpb24gdG8gY2hvb3NlIGJldHdlZW4gdGhvc2Ug
b3B0aW9ucy4gSWYgdGhlIFdyaXRpbmdNb2RlCiAgICAgLy8gaXMgdmVydGljYWwsIHRoZW4gdGhl
IGRpcmVjdGlvbiBvZiB0aGUgdmVydGljYWxpdHkgZGljdGF0ZXMgdGhlIGNob2ljZS4KICAgICBp
ZiAob3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlBhZ2VkWCkgewotICAgICAgICBpZiAoKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlICYmIHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB8
fCB3cml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQpCisgICAgICAgIGlmICgo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUgJiYgdGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUikgfHwgd3JpdGluZ01vZGUgPT0gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0KQog
ICAgICAgICAgICAgcmV0dXJuIFBhZ2luYXRpb246OkxlZnRUb1JpZ2h0UGFnaW5hdGVkOwogICAg
ICAgICByZXR1cm4gUGFnaW5hdGlvbjo6UmlnaHRUb0xlZnRQYWdpbmF0ZWQ7CiAgICAgfQpAQCAt
MTgyLDcgKzE4Miw3IEBAIFBhZ2luYXRpb246Ok1vZGUgcGFnaW5hdGlvbk1vZGVGb3JSZW5kZXJT
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgLy8gcGFnZWQteSBhbHdheXMgY29y
cmVzcG9uZHMgdG8gVG9wVG9Cb3R0b21QYWdpbmF0ZWQgb3IgQm90dG9tVG9Ub3BQYWdpbmF0ZWQu
IElmIHRoZSBXcml0aW5nTW9kZQogICAgIC8vIGlzIGhvcml6b250YWwsIHRoZW4gdGhlIGRpcmVj
dGlvbiBvZiB0aGUgaG9yaXpvbnRhbGl0eSBkaWN0YXRlcyB0aGUgY2hvaWNlLiBJZiB0aGUgV3Jp
dGluZ01vZGUKICAgICAvLyBpcyB2ZXJ0aWNhbCwgdGhlbiB3ZSB1c2UgVGV4dERpcmVjdGlvbiB0
byBjaG9vc2UgYmV0d2VlbiB0aG9zZSBvcHRpb25zLiAKLSAgICBpZiAod3JpdGluZ01vZGUgPT0g
V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tIHx8ICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgJiYg
dGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpKQorICAgIGlmICh3cml0aW5nTW9k
ZSA9PSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20gfHwgKCFpc0hvcml6b250YWxXcml0aW5nTW9k
ZSAmJiB0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKSkKICAgICAgICAg
cmV0dXJuIFBhZ2luYXRpb246OlRvcFRvQm90dG9tUGFnaW5hdGVkOwogICAgIHJldHVybiBQYWdp
bmF0aW9uOjpCb3R0b21Ub1RvcFBhZ2luYXRlZDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MueWFtbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFt
bAppbmRleCAyYWU3MGNiMWRhODRlOGNhZDNlY2NjMGM5ZmZlZjQzNmY4ZTg5ZjYwLi41YjIxZGRl
N2RiNWJjNDQ3OGU1M2E1ZTRmMTk1NDgxZWRkOTg2MGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLnlhbWwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy55YW1sCkBAIC01MTYsNyArNTE2LDcgQEAgU3lzdGVtTGF5b3V0RGlyZWN0aW9uOgogICByZWZp
bmVkVHlwZTogVGV4dERpcmVjdGlvbgogICBkZWZhdWx0VmFsdWU6CiAgICAgV2ViQ29yZToKLSAg
ICAgIGRlZmF1bHQ6IFRleHREaXJlY3Rpb246OkxUUgorICAgICAgZGVmYXVsdDogUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFIKIAogVGV4dEF1dG9zaXppbmdXaW5kb3dTaXplT3ZlcnJpZGVIZWlnaHQ6
CiAgIHR5cGU6IHVpbnQzMl90CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAppbmRleCA0MGRk
YjhhN2Y3YWY4NDVkNGI2NWU2MzBmYjdhYjJlNjU0YmExYzkyLi44NDIyYWJjM2NhY2Q4MDUzMjNh
YzhiNTM2MDNjMDNjMmQyYjBjZWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKQEAg
LTQwLDExICs0MCwxMSBAQAogI2luY2x1ZGUgIlBERkltYWdlQ2FjaGluZ1BvbGljeS5oIgogI2lu
Y2x1ZGUgIlN0b3JhZ2VCbG9ja2luZ1BvbGljeS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIK
LSNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvblN1Ym1l
bnVJbmNsdXNpb25CZWhhdmlvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVXNl
ckludGVyZmFjZURpcmVjdGlvblBvbGljeS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1J1
bnRpbWVGbGFncy5oPgorI2luY2x1ZGUgPHBhbC90ZXh0L1RleHREaXJlY3Rpb24uaD4KICNpbmNs
dWRlIDx1bmljb2RlL3VzY3JpcHQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAppbmRleCA2OGM1NzYzMDk4YTg2OTc2
YjFkY2E1OGUzMzdjMGFkNzY1MTc3ODMzLi4yZTY2MmUyODAzYjhhMzlkZDBjMWM4OTFjZGFmMjdk
NzU5M2UzNTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKQEAgLTI2NywxNyArMjY3LDE3IEBAIHN0YXRpYyBM
YXlvdXRVbml0IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoTGF5b3V0VW5pdCBtaW5Mb2Nh
dGlvbiwgTGF5b3V0VW5pCiAgICAgfQogfQogCi1zdGF0aWMgc3RkOjpwYWlyPGJvb2wsIGJvb2w+
IGF4ZXNGbGlwcGVkRm9yV3JpdGluZ01vZGVBbmREaXJlY3Rpb24oV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKK3N0YXRpYyBzdGQ6OnBhaXI8Ym9v
bCwgYm9vbD4gYXhlc0ZsaXBwZWRGb3JXcml0aW5nTW9kZUFuZERpcmVjdGlvbihXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pCiB7CiAgICAg
Ly8gdGV4dC1kaXJlY3Rpb24gZmxpcHMgdGhlIGlubGluZSBheGlzIGFuZCB3cml0aW5nLW1vZGUg
Y2FuIGZsaXAgdGhlIGJsb2NrIGF4aXMuIFdoZXRoZXIgb3IKICAgICAvLyBub3QgdGhlIHdyaXRp
bmctbW9kZSBpcyB2ZXJ0aWNhbCBkZXRlcm1pbmVzIHRoZSBwaHlzaWNhbCBvcmllbnRhdGlvbiBv
ZiB0aGUgYmxvY2sgYW5kIGlubGluZSBheGVzLgogICAgIGJvb2wgaGFzVmVydGljYWxXcml0aW5n
TW9kZSA9IGlzVmVydGljYWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7CiAgICAgYm9vbCBibG9j
a0F4aXNGbGlwcGVkID0gaXNGbGlwcGVkV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwotICAgIGJv
b2wgaW5saW5lQXhpc0ZsaXBwZWQgPSB0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJU
TDsKKyAgICBib29sIGlubGluZUF4aXNGbGlwcGVkID0gdGV4dERpcmVjdGlvbiA9PSBQQUw6OlRl
eHREaXJlY3Rpb246OlJUTDsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoaGFzVmVydGljYWxX
cml0aW5nTW9kZSA/IGJsb2NrQXhpc0ZsaXBwZWQgOiBpbmxpbmVBeGlzRmxpcHBlZCwgaGFzVmVy
dGljYWxXcml0aW5nTW9kZSA/IGlubGluZUF4aXNGbGlwcGVkIDogYmxvY2tBeGlzRmxpcHBlZCk7
CiB9CiAKLXZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxl
QXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJv
eCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0VsZW1lbnRTdHlsZSwgTGF5b3V0UmVjdCB2
aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVzLCBXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQordm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0Zv
clNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSwgY29uc3QgUmVu
ZGVyQm94JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5n
RWxlbWVudFN0eWxlLCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdEluQm9yZGVyQm94Q29vcmRpbmF0
ZXMsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVj
dGlvbikKIHsKICAgICBhdXRvIHNjcm9sbFNuYXBUeXBlID0gc2Nyb2xsaW5nRWxlbWVudFN0eWxl
LnNjcm9sbFNuYXBUeXBlKCk7CiAgICAgY29uc3QgYXV0byYgYm94ZXNXaXRoU2Nyb2xsU25hcFBv
c2l0aW9ucyA9IHNjcm9sbGluZ0VsZW1lbnRCb3gudmlldygpLmJveGVzV2l0aFNjcm9sbFNuYXBQ
b3NpdGlvbnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbFNuYXBPZmZzZXRzSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsU25hcE9mZnNldHNJbmZvLmgKaW5kZXggN2E5NGJhODRiOGFhYzUzMWFjNGFkOTQzNmEyZDgw
YmJkYjMwYTVkOC4uYWM0YzAyODdiZGE2NGNmNzQ1OTU4YzAyYTZhZDU5OTU4Zjk1YTgyZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJ
bmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmgKQEAgLTk3LDcgKzk3LDcgQEAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPExheW91
dFVuaXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBMYXlvdXRTY3JvbGxTbmFwT2YKIC8vIFVw
ZGF0ZSB0aGUgc25hcCBvZmZzZXRzIGZvciB0aGlzIHNjcm9sbGFibGUgYXJlYSwgZ2l2ZW4gdGhl
IFJlbmRlckJveCBvZiB0aGUgc2Nyb2xsIGNvbnRhaW5lciwgdGhlIFJlbmRlclN0eWxlCiAvLyB3
aGljaCBkZWZpbmVzIHRoZSBzY3JvbGwtc25hcCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHZpZXdwb3J0
IHJlY3RhbmdsZSB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0IG9mCiAvLyB0aGUgc2Ny
b2xsaW5nIGNvbnRhaW5lcidzIGJvcmRlciBib3guCi12b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9y
U2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmLCBjb25zdCBSZW5kZXJCb3gmIHNjcm9sbGlu
Z0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiBzY3JvbGxpbmdFbGVtZW50U3R5bGUsIExh
eW91dFJlY3Qgdmlld3BvcnRSZWN0SW5Cb3JkZXJCb3hDb29yZGluYXRlcywgV3JpdGluZ01vZGUs
IFRleHREaXJlY3Rpb24pOwordm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVh
KFNjcm9sbGFibGVBcmVhJiwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBj
b25zdCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLCBMYXlvdXRSZWN0IHZpZXdw
b3J0UmVjdEluQm9yZGVyQm94Q29vcmRpbmF0ZXMsIFdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJl
Y3Rpb24pOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFdURjo6VGV4dFN0cmVhbSYgdHMsIFNuYXBPZmZzZXQ8VD4gb2Zmc2V0KQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgKaW5kZXggZGJkZjNjNzRiMTk1YTU5NmJm
NDk0MzJmYWU5YjMyMGYwYjQzMDNiNS4uNmRlY2E0OTY1NjI5MDg5NWE2NjgzNDc4NGEyODg0MjM5
ZmYxMWUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oCkBAIC00
NSw3ICs0NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH07CiAKLSAgICBQb3B1cE1lbnVTdHls
ZShjb25zdCBDb2xvciYgZm9yZWdyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmQsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBib29sIHZpc2libGUsIGJvb2wgaXNEaXNwbGF5Tm9uZSwgYm9v
bCBoYXNEZWZhdWx0QXBwZWFyYW5jZSwgTGVuZ3RoIHRleHRJbmRlbnQsIFRleHREaXJlY3Rpb24g
dGV4dERpcmVjdGlvbiwgYm9vbCBoYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUsIEJhY2tncm91bmRD
b2xvclR5cGUgYmFja2dyb3VuZENvbG9yVHlwZSA9IERlZmF1bHRCYWNrZ3JvdW5kQ29sb3IsIFBv
cHVwTWVudVR5cGUgbWVudVR5cGUgPSBTZWxlY3RQb3B1cCwgUG9wdXBNZW51U2l6ZSBtZW51U2l6
ZSA9IFBvcHVwTWVudVNpemVOb3JtYWwpCisgICAgUG9wdXBNZW51U3R5bGUoY29uc3QgQ29sb3Im
IGZvcmVncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kLCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgYm9vbCB2aXNpYmxlLCBib29sIGlzRGlzcGxheU5vbmUsIGJvb2wgaGFzRGVmYXVsdEFw
cGVhcmFuY2UsIExlbmd0aCB0ZXh0SW5kZW50LCBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVj
dGlvbiwgYm9vbCBoYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUsIEJhY2tncm91bmRDb2xvclR5cGUg
YmFja2dyb3VuZENvbG9yVHlwZSA9IERlZmF1bHRCYWNrZ3JvdW5kQ29sb3IsIFBvcHVwTWVudVR5
cGUgbWVudVR5cGUgPSBTZWxlY3RQb3B1cCwgUG9wdXBNZW51U2l6ZSBtZW51U2l6ZSA9IFBvcHVw
TWVudVNpemVOb3JtYWwpCiAgICAgICAgIDogbV9mb3JlZ3JvdW5kQ29sb3IoZm9yZWdyb3VuZCkK
ICAgICAgICAgLCBtX2JhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kKQogICAgICAgICAsIG1fZm9u
dChmb250KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Rpc3BsYXlOb25l
KCkgY29uc3QgeyByZXR1cm4gbV9pc0Rpc3BsYXlOb25lOyB9CiAgICAgYm9vbCBoYXNEZWZhdWx0
QXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRGVmYXVsdEFwcGVhcmFuY2U7IH0KICAg
ICBMZW5ndGggdGV4dEluZGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dEluZGVudDsgfQotICAg
IFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dERpcmVj
dGlvbjsgfQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0RGlyZWN0aW9uOyB9CiAgICAgYm9vbCBoYXNUZXh0RGlyZWN0aW9uT3ZlcnJp
ZGUoKSBjb25zdCB7IHJldHVybiBtX2hhc1RleHREaXJlY3Rpb25PdmVycmlkZTsgfQogICAgIEJh
Y2tncm91bmRDb2xvclR5cGUgYmFja2dyb3VuZENvbG9yVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2dyb3VuZENvbG9yVHlwZTsgfQogICAgIFBvcHVwTWVudVR5cGUgbWVudVR5cGUoKSBjb25z
dCB7IHJldHVybiBtX21lbnVUeXBlOyB9CkBAIC04Miw3ICs4Miw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2lzRGlzcGxheU5vbmU7CiAgICAgYm9vbCBtX2hhc0RlZmF1bHRBcHBlYXJhbmNlOwog
ICAgIExlbmd0aCBtX3RleHRJbmRlbnQ7Ci0gICAgVGV4dERpcmVjdGlvbiBtX3RleHREaXJlY3Rp
b247CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIG1fdGV4dERpcmVjdGlvbjsKICAgICBib29sIG1f
aGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlOwogICAgIEJhY2tncm91bmRDb2xvclR5cGUgbV9iYWNr
Z3JvdW5kQ29sb3JUeXBlOwogICAgIFBvcHVwTWVudVR5cGUgbV9tZW51VHlwZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1JlY3RFZGdlcy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUmVjdEVkZ2VzLmgKaW5kZXggMGUxMjMwMTkzMzYzNTRkN2NlZjI3ZDFmZGY3YTcz
MjM2MDUxOWZhYS4uMzI4YTgyZDE0ZTdmYjI0YzYxMzhlMzk3NTQyYjk2ZDkxY2E4NTRiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUmVjdEVkZ2VzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUmVjdEVkZ2VzLmgKQEAgLTc1LDE4ICs3NSwxOCBAQCBwdWJsaWM6
CiAKICAgICBUJiBiZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgcmV0dXJuIGF0KG1h
cExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3JpdGluZ01vZGUsIExvZ2ljYWxCb3hTaWRlOjpC
bG9ja1N0YXJ0KSk7IH0KICAgICBUJiBhZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBy
ZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgTG9naWNh
bEJveFNpZGU6OkJsb2NrRW5kKSk7IH0KLSAgICBUJiBzdGFydChXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsgcmV0
dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdN
b2RlLCBkaXJlY3Rpb24pLCBMb2dpY2FsQm94U2lkZTo6SW5saW5lU3RhcnQpKTsgfQotICAgIFQm
IGVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBU
ZXh0RGlyZWN0aW9uOjpMVFIpIHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNp
ZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBMb2dpY2FsQm94U2lkZTo6
SW5saW5lRW5kKSk7IH0KKyAgICBUJiBzdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgUEFM
OjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7IHJl
dHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5n
TW9kZSwgZGlyZWN0aW9uKSwgTG9naWNhbEJveFNpZGU6OklubGluZVN0YXJ0KSk7IH0KKyAgICBU
JiBlbmQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVU
b1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIExvZ2lj
YWxCb3hTaWRlOjpJbmxpbmVFbmQpKTsgfQogCiAgICAgY29uc3QgVCYgYmVmb3JlKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2lj
YWxTaWRlKHdyaXRpbmdNb2RlLCBMb2dpY2FsQm94U2lkZTo6QmxvY2tTdGFydCkpOyB9CiAgICAg
Y29uc3QgVCYgYWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGF0
KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3JpdGluZ01vZGUsIExvZ2ljYWxCb3hTaWRl
OjpCbG9ja0VuZCkpOyB9Ci0gICAgY29uc3QgVCYgc3RhcnQoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSKSBjb25zdCB7
IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0
aW5nTW9kZSwgZGlyZWN0aW9uKSwgTG9naWNhbEJveFNpZGU6OklubGluZVN0YXJ0KSk7IH0KLSAg
ICBjb25zdCBUJiBlbmQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSKSBjb25zdCB7IHJldHVybiBhdChtYXBMb2dpY2Fs
U2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwg
TG9naWNhbEJveFNpZGU6OklubGluZUVuZCkpOyB9CisgICAgY29uc3QgVCYgc3RhcnQoV3JpdGlu
Z01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUikgY29uc3QgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNp
Y2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIExvZ2ljYWxCb3hT
aWRlOjpJbmxpbmVTdGFydCkpOyB9CisgICAgY29uc3QgVCYgZW5kKFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFIpIGNvbnN0IHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFr
ZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBMb2dpY2FsQm94U2lkZTo6SW5saW5l
RW5kKSk7IH0KIAogICAgIHZvaWQgc2V0QmVmb3JlKGNvbnN0IFQmIGJlZm9yZSwgV3JpdGluZ01v
ZGUgd3JpdGluZ01vZGUpIHsgdGhpcy0+YmVmb3JlKHdyaXRpbmdNb2RlKSA9IGJlZm9yZTsgfQog
ICAgIHZvaWQgc2V0QWZ0ZXIoY29uc3QgVCYgYWZ0ZXIsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KSB7IHRoaXMtPmFmdGVyKHdyaXRpbmdNb2RlKSA9IGFmdGVyOyB9Ci0gICAgdm9pZCBzZXRTdGFy
dChjb25zdCBUJiBzdGFydCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSKSB7IHRoaXMtPnN0YXJ0KHdyaXRpbmdNb2Rl
LCBkaXJlY3Rpb24pID0gc3RhcnQ7IH0KLSAgICB2b2lkIHNldEVuZChjb25zdCBUJiBlbmQsIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFRleHREaXJl
Y3Rpb246OkxUUikgeyB0aGlzLT5lbmQod3JpdGluZ01vZGUsIGRpcmVjdGlvbikgPSBlbmQ7IH0K
KyAgICB2b2lkIHNldFN0YXJ0KGNvbnN0IFQmIHN0YXJ0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
KSB7IHRoaXMtPnN0YXJ0KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pID0gc3RhcnQ7IH0KKyAgICB2
b2lkIHNldEVuZChjb25zdCBUJiBlbmQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHsgdGhpcy0+
ZW5kKHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pID0gZW5kOyB9CiAKICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgUmVjdEVkZ2VzJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9zaWRlcyA9PSBvdGhl
ci5tX3NpZGVzOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlY3RFZGdlcyYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fc2lkZXMgIT0gb3RoZXIubV9zaWRlczsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAKaW5kZXggZmQ2MDJmM2Q1M2ZjYmI0MDFiYWQ0MmM5MDE3N2JkMjFkZDg1MDI3MS4uZTRi
MDBkOTNjMGVlMWQ0MTkzMWZhZjdkNmMzMGI4ZTA1MWRjYzM2NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbXB1
dGVFeHBhbnNpb25PcHBvcnR1bml0eSgpCiAgICAgaWYgKCFtX2V4cGFuc2lvbikKICAgICAgICAg
bV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuc2ln
bmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gVGV4dERpcmVjdGlvbjo6
TFRSIDogVGV4dERpcmVjdGlvbjo6UlRMLCBtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpKS5maXJz
dDsKKyAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnRDYXNj
YWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRyKCkg
PyBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA6IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLCBtX3J1
bi5leHBhbnNpb25CZWhhdmlvcigpKS5maXJzdDsKIAogICAgICAgICBpZiAoIWV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQpCiAgICAgICAgICAgICBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCA4MmViYTczYmFj
NGM3NmZlYTBiYjYwZWJhNDQzNjgyZDIyYzdmZTFiLi4zZmU4ZDlmNDAwNmVjNjAwNWRiY2JlMmE5
ZDgyY2FlYWMxMmJhYzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CkBAIC0xOTAsNyArMTkwLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIGNhblJlbmRl
ckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90KSBjb25zdDsK
LSAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiwgdW5z
aWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgs
IGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJp
bmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uKSBjb25zdDsKKyAgICBH
bHlwaEJ1ZmZlckFkdmFuY2UgYXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiwgdW5zaWduZWQg
YmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wg
ZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxv
Y2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBQQUw6OlRleHREaXJlY3Rpb24pIGNvbnN0OwogCiAgICAg
Ly8gUmV0dXJucyBudWxsb3B0IGlmIG5vbmUgb2YgdGhlIGdseXBocyBhcmUgT1QtU1ZHIGdseXBo
cy4KICAgICBzdGQ6Om9wdGlvbmFsPEJpdFZlY3Rvcj4gZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCB1bnNpZ25lZCBjb3VudCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggMmE3NjEzNjJjODNm
YTY4NWI1MWM2ZWUwNTJjNmIxMzVjMDI1ZjlhMC4uNzBhMzJhOTY1YTExYjZjZDU5ZWQ3YzMzMTk4
MDU0MzgwN2U5YzA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmNwcApAQCAtMzAyLDcgKzMwMiw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3
aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OndpZHRoRm9y
U2ltcGxlVGV4dChTdHJpbmdWaWV3IHRleHQsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikg
Y29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aEZvclNpbXBsZVRleHQoU3RyaW5nVmlldyB0
ZXh0LCBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikgY29uc3QKIHsKICAgICBpZiAo
dGV4dC5pc051bGwoKSB8fCB0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC05
NjUsNyArOTY1LDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChV
Q2hhcjMyIGMpCiAgICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBoKGMpOwogfQogCi1zdGQ6OnBhaXI8
dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50
ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQorc3Rk
OjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudEludGVybmFsKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBB
TDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJl
aGF2aW9yKQogewogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBib29sIGlzQWZ0ZXJFeHBh
bnNpb24gPSAoZXhwYW5zaW9uQmVoYXZpb3IgJiBMZWZ0RXhwYW5zaW9uTWFzaykgPT0gRm9yYmlk
TGVmdEV4cGFuc2lvbjsKQEAgLTk3Myw3ICs5NzMsNyBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIGJv
b2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3Qg
TAogICAgICAgICArK2NvdW50OwogICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKICAg
ICB9Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAo
ZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKHRyZWF0QXNT
cGFjZShjaGFyYWN0ZXJzW2ldKSkgewogICAgICAgICAgICAgICAgIGNvdW50Kys7CkBAIC0xMDAx
LDcgKzEwMDEsNyBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTAogICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihjb3VudCwgaXNBZnRlckV4cGFuc2lvbik7CiB9CiAKLXN0ZDo6cGFpcjx1bnNpZ25l
ZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCitzdGQ6OnBhaXI8
dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50
ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUEFMOjpUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3Ip
CiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9
IChleHBhbnNpb25CZWhhdmlvciAmIExlZnRFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWZ0RXhw
YW5zaW9uOwpAQCAtMTAwOSw3ICsxMDA5LDcgQEAgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBG
b250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFUKICAg
ICAgICAgKytjb3VudDsKICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CiAgICAgfQot
ICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgaWYgKGRpcmVj
dGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVy
ID0gY2hhcmFjdGVyc1tpXTsKICAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVy
KSkgewpAQCAtMTA2Myw3ICsxMDYzLDcgQEAgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFUKICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIoY291bnQsIGlzQWZ0ZXJFeHBhbnNpb24pOwogfQogCi1zdGQ6
OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFu
c2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQorc3RkOjpwYWlyPHVuc2lnbmVkLCBib29s
PiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChTdHJpbmdWaWV3IHN0cmlu
Z1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yIGV4
cGFuc2lvbkJlaGF2aW9yKQogewogICAgIC8vIEZvciBlYWNoIGNoYXJhY3RlciwgaXRlcmF0aW5n
IGZyb20gbGVmdCB0byByaWdodDoKICAgICAvLyAgIElmIGl0IGlzIHJlY29nbml6ZWQgYXMgYSBz
cGFjZSwgaW5zZXJ0IGFuIG9wcG9ydHVuaXR5IGFmdGVyIGl0CkBAIC0xMDc0LDEzICsxMDc0LDEz
IEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQoU3RyaW5nVmlldyBzdHJpCiAgICAgcmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxl
bmd0aCgpLCBkaXJlY3Rpb24sIGV4cGFuc2lvbkJlaGF2aW9yKTsKIH0KIAotYm9vbCBGb250Q2Fz
Y2FkZTo6bGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24pCitib29sIEZvbnRDYXNjYWRlOjpsZWZ0RXhwYW5zaW9uT3Bw
b3J0dW5pdHkoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKQogewogICAgIGlmICghc3RyaW5nVmlldy5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgVUNoYXIzMiBpbml0aWFsQ2hhcmFjdGVyOwotICAgIGlmIChkaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUikgewogICAgICAgICBpbml0aWFsQ2hhcmFjdGVyID0gc3RyaW5nVmlld1sw
XTsKICAgICAgICAgaWYgKFUxNl9JU19MRUFEKGluaXRpYWxDaGFyYWN0ZXIpICYmIHN0cmluZ1Zp
ZXcubGVuZ3RoKCkgPiAxICYmIFUxNl9JU19UUkFJTChzdHJpbmdWaWV3WzFdKSkKICAgICAgICAg
ICAgIGluaXRpYWxDaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoaW5pdGlhbENoYXJh
Y3Rlciwgc3RyaW5nVmlld1sxXSk7CkBAIC0xMDkzLDEzICsxMDkzLDEzIEBAIGJvb2wgRm9udENh
c2NhZGU6OmxlZnRFeHBhbnNpb25PcHBvcnR1bml0eShTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFRl
eHREaXJlY3Rpb24KICAgICByZXR1cm4gY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxl
eFRleHQoKSAmJiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGluaXRpYWxDaGFyYWN0ZXIpOwogfQog
Ci1ib29sIEZvbnRDYXNjYWRlOjpyaWdodEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcg
c3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCitib29sIEZvbnRDYXNjYWRlOjpy
aWdodEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgUEFMOjpUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBpZiAoIXN0cmluZ1ZpZXcubGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFVDaGFyMzIgZmluYWxDaGFyYWN0ZXI7Ci0gICAg
aWYgKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAoZGlyZWN0aW9u
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgIGZpbmFsQ2hhcmFjdGVyID0g
c3RyaW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0gMV07CiAgICAgICAgIGlmIChVMTZfSVNf
VFJBSUwoZmluYWxDaGFyYWN0ZXIpICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAxICYmIFUxNl9J
U19MRUFEKHN0cmluZ1ZpZXdbc3RyaW5nVmlldy5sZW5ndGgoKSAtIDJdKSkKICAgICAgICAgICAg
IGZpbmFsQ2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKHN0cmluZ1ZpZXdbc3RyaW5n
Vmlldy5sZW5ndGgoKSAtIDJdLCBmaW5hbENoYXJhY3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRleCBjMzQ1NjgwMTdmY2RlOTgzZTZm
NWFjNzBlZTE3ODNhOWY3M2U5MDUzLi5hMjA5OTMxYTlkOGEyMTZmMzRjYzc4MmU2ODI4Mzk2MTgz
MGJmOTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmgKQEAgLTEzMSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCB3aWR0aE9mVGV4
dFJhbmdlKGNvbnN0IFRleHRSdW4mLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgSGFzaFNl
dDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBmbG9hdCogb3V0V2lkdGhCZWZvcmVS
YW5nZSA9IG51bGxwdHIsIGZsb2F0KiBvdXRXaWR0aEFmdGVyUmFuZ2UgPSBudWxscHRyKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJiwgSGFzaFNl
dDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNv
bnN0OwotICAgIGZsb2F0IHdpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdWaWV3IHRleHQsIFRleHRE
aXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFIpIGNvbnN0OworICAgIGZsb2F0IHdpZHRoRm9y
U2ltcGxlVGV4dChTdHJpbmdWaWV3IHRleHQsIFBBTDo6VGV4dERpcmVjdGlvbiA9IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSKSBjb25zdDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0TGF5b3V0
LCBUZXh0TGF5b3V0RGVsZXRlcj4gY3JlYXRlTGF5b3V0KFJlbmRlclRleHQmLCBmbG9hdCB4UG9z
LCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSkgY29uc3Q7CiAgICAgc3RhdGljIGZsb2F0IHdpZHRo
KFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CkBAIC0xODUsMTIgKzE4NSwxMiBAQCBwdWJsaWM6
CiAKICAgICAvLyBSZXR1cm5zICh0aGUgbnVtYmVyIG9mIG9wcG9ydHVuaXRpZXMsIHdoZXRoZXIg
dGhlIGxhc3QgZXhwYW5zaW9uIGlzIGEgdHJhaWxpbmcgZXhwYW5zaW9uKQogICAgIC8vIElmIHRo
ZXJlIGFyZSBubyBvcHBvcnR1bml0aWVzLCB0aGUgYm9vbCB3aWxsIGJlIHRydWUgaWZmIHdlIGFy
ZSBmb3JiaWRkaW5nIGxlYWRpbmcgZXhwYW5zaW9ucy4KLSAgICBzdGF0aWMgc3RkOjpwYWlyPHVu
c2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KFN0cmluZ1ZpZXcsIFRleHRE
aXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yKTsKKyAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2ln
bmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KFN0cmluZ1ZpZXcsIFBBTDo6VGV4
dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IpOwogCiAgICAgLy8gV2hldGhlciBvciBub3Qg
dGhlcmUgaXMgYW4gZXhwYW5zaW9uIG9wcG9ydHVuaXR5IGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBj
aGFyYWN0ZXIKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB0YWtlIGEgaXNBZnRlckV4
cGFuc2lvbiBmbGFnOyB0aGlzIGFzc3VtZXMgdGhhdCBpc0FmdGVyRXhwYW5zaW9uIGlzIGZhbHNl
Ci0gICAgc3RhdGljIGJvb2wgbGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcsIFRl
eHREaXJlY3Rpb24pOwotICAgIHN0YXRpYyBib29sIHJpZ2h0RXhwYW5zaW9uT3Bwb3J0dW5pdHko
U3RyaW5nVmlldywgVGV4dERpcmVjdGlvbik7CisgICAgc3RhdGljIGJvb2wgbGVmdEV4cGFuc2lv
bk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbik7CisgICAgc3RhdGlj
IGJvb2wgcmlnaHRFeHBhbnNpb25PcHBvcnR1bml0eShTdHJpbmdWaWV3LCBQQUw6OlRleHREaXJl
Y3Rpb24pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0U2hvdWxkVXNlU21v
b3RoaW5nKGJvb2wpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIHNob3VsZFVzZVNt
b290aGluZygpOwpAQCAtMjM3LDggKzIzNyw4IEBAIHByaXZhdGU6CiAgICAgaW50IG9mZnNldEZv
clBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBi
b29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKICAgICB2b2lkIGFkanVzdFNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9u
UmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogCi0gICAgc3RhdGljIHN0
ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFs
KGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25C
ZWhhdmlvcik7Ci0gICAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBU
ZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvcik7CisgICAgc3RhdGljIHN0ZDo6cGFpcjx1
bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExD
aGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBQQUw6OlRleHREaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2
aW9yKTsKKyAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIFBBTDo6
VGV4dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IpOwogCiAgICAgZnJpZW5kIHN0cnVjdCBX
aWR0aEl0ZXJhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAppbmRleCA0OTQ4OGM1OTk2MzIxZmJmNjUyMjI3N2JhMGM5NjllNTA3MGZkNWRkLi4xNmMx
MGUyZGJiZmUyMzQ2YWMzNDBjODJhMTExYmY2YWUwZTE3ZjI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTI2LDcg
KzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKIAotI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgi
CiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKQEAgLTM5LDYg
KzM4LDcgQEAKICNpbmNsdWRlICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUm91
bmRlZFJlY3QuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQmlk
aVJlc29sdmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC01MjEsMjQgKzUyMSwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4m
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRD
YXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
KQogewotICAgIEJpZGlSZXNvbHZlcjxUZXh0Qm94SXRlcmF0b3IsIEJpZGlDaGFyYWN0ZXJSdW4+
IGJpZGlSZXNvbHZlcjsKLSAgICBiaWRpUmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVu
LmRpcmVjdGlvbigpLCBydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpKSk7CisgICAgUEFMOjpCaWRp
UmVzb2x2ZXI8VGV4dEJveEl0ZXJhdG9yLCBQQUw6OkJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNv
bHZlcjsKKyAgICBiaWRpUmVzb2x2ZXIuc2V0U3RhdHVzKFBBTDo6QmlkaVN0YXR1cyhydW4uZGly
ZWN0aW9uKCksIHJ1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCkpKTsKICAgICBiaWRpUmVzb2x2ZXIu
c2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVzKFRleHRCb3hJdGVyYXRvcigmcnVuLCAw
KSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvd25lcnNoaXAgc2hvdWxkIGJlIHJldmVyc2VkLiBX
ZSBzaG91bGQgcGFzcyBCaWRpUnVuTGlzdAogICAgIC8vIHRvIEJpZGlSZXNvbHZlciBpbiBjcmVh
dGVCaWRpUnVuc0ZvckxpbmUuCi0gICAgQmlkaVJ1bkxpc3Q8QmlkaUNoYXJhY3RlclJ1bj4mIGJp
ZGlSdW5zID0gYmlkaVJlc29sdmVyLnJ1bnMoKTsKKyAgICBQQUw6OkJpZGlSdW5MaXN0PFBBTDo6
QmlkaUNoYXJhY3RlclJ1bj4mIGJpZGlSdW5zID0gYmlkaVJlc29sdmVyLnJ1bnMoKTsKICAgICBi
aWRpUmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKFRleHRCb3hJdGVyYXRvcigmcnVuLCBy
dW4ubGVuZ3RoKCkpKTsKIAogICAgIGlmICghYmlkaVJ1bnMucnVuQ291bnQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgRmxvYXRQb2ludCBjdXJyUG9pbnQgPSBwb2ludDsKLSAgICBCaWRpQ2hh
cmFjdGVyUnVuKiBiaWRpUnVuID0gYmlkaVJ1bnMuZmlyc3RSdW4oKTsKKyAgICBQQUw6OkJpZGlD
aGFyYWN0ZXJSdW4qIGJpZGlSdW4gPSBiaWRpUnVucy5maXJzdFJ1bigpOwogICAgIHdoaWxlIChi
aWRpUnVuKSB7CiAgICAgICAgIFRleHRSdW4gc3VicnVuID0gcnVuLnN1YlJ1bihiaWRpUnVuLT5z
dGFydCgpLCBiaWRpUnVuLT5zdG9wKCkgLSBiaWRpUnVuLT5zdGFydCgpKTsKICAgICAgICAgYm9v
bCBpc1JUTCA9IGJpZGlSdW4tPmxldmVsKCkgJSAyOwotICAgICAgICBzdWJydW4uc2V0RGlyZWN0
aW9uKGlzUlRMID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSKTsKKyAg
ICAgICAgc3VicnVuLnNldERpcmVjdGlvbihpc1JUTCA/IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRM
IDogUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpOwogICAgICAgICBzdWJydW4uc2V0RGlyZWN0aW9u
YWxPdmVycmlkZShiaWRpUnVuLT5kaXJPdmVycmlkZShmYWxzZSkpOwogCiAgICAgICAgIGF1dG8g
YWR2YW5jZSA9IGZvbnQuZHJhd1RleHQoKnRoaXMsIHN1YnJ1biwgY3VyclBvaW50LCAwLCBzdGQ6
Om51bGxvcHQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwCmluZGV4IGI5Nzk5YTRkMTA2
MWVkMjBhMWI1MGVkNTA2ODY1MWM1ZmVhNDY2YTQuLmZlZGE4ODJmMTI1MmE2NjUyZjRmY2IzZjk2
NWQyNGI4MDk1ZGI4ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGhVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGhVdGlsaXRpZXMuY3BwCkBAIC00OTUsNyArNDk1LDcgQEAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiByZWN0RnJvbVBvbHlnb24oY29uc3QgRmxvYXRQb2ludEdyYXBoOjpQ
b2x5Z29uJgogfQogCiBQYXRoIFBhdGhVdGlsaXRpZXM6OnBhdGhXaXRoU2hyaW5rV3JhcHBlZFJl
Y3RzRm9yT3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGNvbnN0IEJvcmRl
ckRhdGEmIGJvcmRlckRhdGEsCi0gICAgZmxvYXQgb3V0bGluZU9mZnNldCwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvcikKKyAgICBmbG9hdCBvdXRsaW5lT2Zmc2V0LCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0
aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7
CiAgICAgQVNTRVJUKGJvcmRlckRhdGEuaGFzQm9yZGVyUmFkaXVzKCkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmgKaW5kZXggNTAwMDQx
YTJkNjQxOGM4MDQ3NWIxNzU2MTQ3NjhmY2JmYTY0M2UyNC4uMWJlZWM2MjQxNThkZTE1Yjk1N2Uy
NDk0M2Q0NzZmODhkYTg5YTY5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGhVdGlsaXRpZXMuaApAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFBhdGggcGF0aFdpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCByYWRpdXMpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBWZWN0b3I8UGF0aD4gcGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgcmFkaXVzKTsKIAotICAgIHN0YXRpYyBQ
YXRoIHBhdGhXaXRoU2hyaW5rV3JhcHBlZFJlY3RzRm9yT3V0bGluZShjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGNvbnN0IEJvcmRlckRhdGEmLCBmbG9hdCBvdXRsaW5lT2Zmc2V0LCBUZXh0RGly
ZWN0aW9uLCBXcml0aW5nTW9kZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHN0YXRp
YyBQYXRoIHBhdGhXaXRoU2hyaW5rV3JhcHBlZFJlY3RzRm9yT3V0bGluZShjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYsIGNvbnN0IEJvcmRlckRhdGEmLCBmbG9hdCBvdXRsaW5lT2Zmc2V0LCBQQUw6
OlRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcik7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0
UnVuLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKaW5kZXgg
MWQ0N2Q2NWQ2ODI0NjI2ZTE1OTI4ODAwZjQ2OTdjMjc2Y2IyNzYzNC4uYmI0NjM4MDM3MWEzYTc3
ZThlZDU2NjI2MjFjMGUzZjY5Y2E5NGI0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RleHRSdW4uaApAQCAtNDMsNyArNDMsNyBAQCBzdHJ1Y3QgR2x5cGhEYXRhOwogY2xh
c3MgVGV4dFJ1biB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
ZXhwbGljaXQgVGV4dFJ1bihjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHhwb3MgPSAwLCBmbG9h
dCBleHBhbnNpb24gPSAwLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IERl
ZmF1bHRFeHBhbnNpb24sIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6
TFRSLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2Fu
Rm9yQ29kZVBhdGggPSB0cnVlKQorICAgIGV4cGxpY2l0IFRleHRSdW4oY29uc3QgU3RyaW5nJiB0
ZXh0LCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZhdWx0RXhwYW5zaW9uLCBQQUw6OlRleHREaXJlY3Rp
b24gZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsIGJvb2wgZGlyZWN0aW9uYWxP
dmVycmlkZSA9IGZhbHNlLCBib29sIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRydWUpCiAg
ICAgICAgIDogbV90ZXh0KHRleHQpCiAgICAgICAgICwgbV90YWJTaXplKDApCiAgICAgICAgICwg
bV94cG9zKHhwb3MpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFt
X3RleHQuaXNOdWxsKCkpOwogICAgIH0KIAotICAgIGV4cGxpY2l0IFRleHRSdW4oU3RyaW5nVmll
dyBzdHJpbmdWaWV3LCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9uID0gMCwgRXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZhdWx0RXhwYW5zaW9uLCBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUiwgYm9vbCBkaXJlY3Rpb25hbE92
ZXJyaWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gdHJ1ZSkKKyAg
ICBleHBsaWNpdCBUZXh0UnVuKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgZmxvYXQgeHBvcyA9IDAs
IGZsb2F0IGV4cGFuc2lvbiA9IDAsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9y
ID0gRGVmYXVsdEV4cGFuc2lvbiwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwgYm9v
bCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVlKQogICAgICAgICA6IFRleHRSdW4oc3Ry
aW5nVmlldy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIHhwb3MsIGV4cGFuc2lvbiwgZXhwYW5z
aW9uQmVoYXZpb3IsIGRpcmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlkZSwgY2hhcmFjdGVyU2Nh
bkZvckNvZGVQYXRoKQogICAgIHsKICAgICB9CkBAIC0xMDIsMTUgKzEwMiwxNSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRYUG9zKGZsb2F0IHhQb3MpIHsgbV94cG9zID0geFBvczsgfQogICAgIGZs
b2F0IGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uOyB9CiAgICAgRXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lv
bkJlaGF2aW9yOyB9Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxUZXh0RGlyZWN0aW9uPihtX2RpcmVjdGlvbik7IH0KLSAgICBib29sIHJ0
bCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRleHREaXJlY3Rpb24+KG1fZGlyZWN0aW9u
KSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7IH0KLSAgICBib29sIGx0cigpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PFRleHREaXJlY3Rpb24+KG1fZGlyZWN0aW9uKSA9PSBUZXh0RGlyZWN0aW9u
OjpMVFI7IH0KKyAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8UEFMOjpUZXh0RGlyZWN0aW9uPihtX2RpcmVjdGlvbik7IH0KKyAgICBi
b29sIHJ0bCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFBBTDo6VGV4dERpcmVjdGlvbj4o
bV9kaXJlY3Rpb24pID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOyB9CisgICAgYm9vbCBsdHIo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OlRleHREaXJlY3Rpb24+KG1fZGlyZWN0
aW9uKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsgfQogICAgIGJvb2wgZGlyZWN0aW9uYWxP
dmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uYWxPdmVycmlkZTsgfQogICAgIGJv
b2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJT
Y2FuRm9yQ29kZVBhdGg7IH0KICAgICBib29sIHNwYWNpbmdEaXNhYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlzYWJsZVNwYWNpbmc7IH0KIAogICAgIHZvaWQgZGlzYWJsZVNwYWNpbmcoKSB7IG1f
ZGlzYWJsZVNwYWNpbmcgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXREaXJlY3Rpb24oVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24pIHsgbV9kaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGly
ZWN0aW9uKTsgfQorICAgIHZvaWQgc2V0RGlyZWN0aW9uKFBBTDo6VGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24pIHsgbV9kaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlyZWN0aW9uKTsg
fQogICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxPdmVycmlkZShib29sIG92ZXJyaWRlKSB7IG1fZGly
ZWN0aW9uYWxPdmVycmlkZSA9IG92ZXJyaWRlOyB9CiAgICAgdm9pZCBzZXRDaGFyYWN0ZXJTY2Fu
Rm9yQ29kZVBhdGgoYm9vbCBzY2FuKSB7IG1fY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gc2Nh
bjsgfQogICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcApp
bmRleCBhNWFlMWFjMDAwZGE1Yjk1MmNjMjM0Mjc3YmJmNjhiMTNkY2ExODc2Li5hM2M2M2FlMGYw
MTUwMzljNTdhMjc2YjZkNTNiODMxYjlhMDk2MGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcApAQCAtNTIsNyArNTIsNyBAQCBX
aWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBUZXh0UnVuJiBydW4sIEhhc2hTZQogICAgIGlmICghbV9leHBhbnNpb24pCiAgICAgICAgIG1f
ZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwogICAgIGVsc2UgewotICAgICAgICB1bnNpZ25l
ZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IFRleHREaXJlY3Rpb246OkxU
UiA6IFRleHREaXJlY3Rpb246OlJUTCwgcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkpLmZpcnN0Owor
ICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6
OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwsIHJ1bi5leHBh
bnNpb25CZWhhdmlvcigpKS5maXJzdDsKIAogICAgICAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQpCiAgICAgICAgICAgICBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0gMDsKQEAg
LTE4NCwxNCArMTg0LDE0IEBAIHZvaWQgV2lkdGhJdGVyYXRvcjo6YXBwbHlJbml0aWFsQWR2YW5j
ZShHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEdseXBoQnVmZmVyQWR2CiAKICAgICBBU1NFUlQo
bGFzdEdseXBoQ291bnQgfHwgKCF3aWR0aChtX2xlZnRvdmVySW5pdGlhbEFkdmFuY2UpICYmICFo
ZWlnaHQobV9sZWZ0b3ZlckluaXRpYWxBZHZhbmNlKSkpOwogCi0gICAgaWYgKG1fcnVuLmRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBsYXN0R2x5cGhDb3VudCkgeworICAgIGlm
IChtX3J1bi5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCAmJiBsYXN0R2x5
cGhDb3VudCkgewogICAgICAgICBhdXRvJiB2aXN1YWxseUxhc3RBZHZhbmNlID0gKmdseXBoQnVm
ZmVyLmFkdmFuY2VzKGxhc3RHbHlwaENvdW50KTsKICAgICAgICAgZXhwYW5kV2l0aEluaXRpYWxB
ZHZhbmNlKHZpc3VhbGx5TGFzdEFkdmFuY2UsIG1fbGVmdG92ZXJJbml0aWFsQWR2YW5jZSk7CiAg
ICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSB3aWR0aChtX2xlZnRvdmVySW5pdGlhbEFkdmFuY2Up
OwogICAgICAgICBtX2xlZnRvdmVySW5pdGlhbEFkdmFuY2UgPSBtYWtlR2x5cGhCdWZmZXJBZHZh
bmNlKCk7CiAgICAgfQogCi0gICAgaWYgKG1fcnVuLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rp
b246OlJUTCkKKyAgICBpZiAobV9ydW4uZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpSVEwpCiAgICAgICAgIG1fbGVmdG92ZXJJbml0aWFsQWR2YW5jZSA9IGluaXRpYWxBZHZhbmNl
OwogICAgIGVsc2UgewogICAgICAgICBpZiAobGFzdEdseXBoQ291bnQpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRl
eHQuY3BwCmluZGV4IDM2ZGQ3MGNiNWE2ZDI0ZWRjOTcyODBhNzY0MTQ3ZDU4NTljNDJkNTcuLmQ1
NDJhMjlkM2E0NTUzYjNjNTYzZTk4ZDdiOWVmYzRjNWIzNjhkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0
LmNwcApAQCAtNTkzLDcgKzU5Myw3IEBAIGZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3QKIAogI2VuZGlmCiAKLUdseXBoQnVmZmVyQWR2YW5jZSBGb250
OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdp
bm5pbmdHbHlwaEluZGV4LCB1bnNpZ25lZCBiZWdpbm5pbmdTdHJpbmdJbmRleCwgYm9vbCBlbmFi
bGVLZXJuaW5nLCBib29sIHJlcXVpcmVzU2hhcGluZywgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxl
LCBTdHJpbmdWaWV3IHRleHQsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikgY29uc3QKK0ds
eXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCB1bnNpZ25lZCBiZWdpbm5pbmdHbHlwaEluZGV4LCB1bnNpZ25lZCBiZWdpbm5pbmdT
dHJpbmdJbmRleCwgYm9vbCBlbmFibGVLZXJuaW5nLCBib29sIHJlcXVpcmVzU2hhcGluZywgY29u
c3QgQXRvbVN0cmluZyYgbG9jYWxlLCBTdHJpbmdWaWV3IHRleHQsIFBBTDo6VGV4dERpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uKSBjb25zdAogewogICAgIFVOVVNFRF9QQVJBTShyZXF1aXJlc1NoYXBp
bmcpOwogCkBAIC02MjQsNyArNjI0LDcgQEAgR2x5cGhCdWZmZXJBZHZhbmNlIEZvbnQ6OmFwcGx5
VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGJlZ2kKICAgICAv
LyBGSVhNRTogRW5hYmxlIGtlcm5pbmcgZm9yIHNpbmdsZSBnbHlwaHMgd2hlbiByZGFyOi8vODIx
OTU0MDUgaXMgZml4ZWQKICAgICBDVEZvbnRTaGFwZU9wdGlvbnMgb3B0aW9ucyA9IGtDVEZvbnRT
aGFwZVdpdGhDbHVzdGVyQ29tcG9zaXRpb24KICAgICAgICAgfCAoZW5hYmxlS2VybmluZyAmJiBu
dW1iZXJPZklucHV0R2x5cGhzID8ga0NURm9udFNoYXBlV2l0aEtlcm5pbmcgOiAwKQotICAgICAg
ICB8ICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCA/IGtDVEZvbnRTaGFwZVJp
Z2h0VG9MZWZ0IDogMCk7CisgICAgICAgIHwgKHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpSVEwgPyBrQ1RGb250U2hhcGVSaWdodFRvTGVmdCA6IDApOwogCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5k
ZXg7ICsraSkKICAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0ds
eXBoSW5kZXgpW2ldIC09IGJlZ2lubmluZ1N0cmluZ0luZGV4OwpAQCAtNzIxLDcgKzcyMSw3IEBA
IEdseXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpCiAgICAgLy8gT24gdGhlIG90aGVyIGhhbmQsIENURm9u
dFNoYXBlR2x5cGhzKCkgYWNjZXB0cyB0aGUgYnVmZmVyIGluIGxvZ2ljYWwgb3JkZXIgYnV0IHJl
dHVybnMgaXQgaW4gcGh5c2ljYWwKICAgICAvLyBvcmRlciwgd2hpY2ggbWVhbnMgdGhlIHNlY29u
ZCByZXZlcnNlKCkgaW4gdGhpcyBmdW5jdGlvbiBzdGlsbCBuZWVkcyB0byBleGVjdXRlIHdoZW4K
ICAgICAvLyBDVEZvbnRTaGFwZUdseXBocygpIGlzIGJlaW5nIHVzZWQuCi0gICAgaWYgKHRleHRE
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgIGlmICh0ZXh0RGlyZWN0aW9uID09
IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJl
Z2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5k
ZXgpOwogCiAgICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKGVuYWJsZUtlcm5p
bmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDApIHwga0NURm9udFRyYW5z
Zm9ybUFwcGx5U2hhcGluZzsKQEAgLTczMSw3ICs3MzEsNyBAQCBHbHlwaEJ1ZmZlckFkdmFuY2Ug
Rm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQg
YmVnaQogI2VuZGlmCiAKICAgICAvLyBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgaW4gdGhpcyBmdW5j
dGlvbiB3aGVyZSB0aGUgb3RoZXIgY2FsbCB0byByZXZlcnNlKCkgaXMuCi0gICAgaWYgKHRleHRE
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgIGlmICh0ZXh0RGlyZWN0aW9uID09
IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJl
Z2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5k
ZXgpOwogCiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5jcHAKaW5kZXggM2RkOTdjMTNlZDc0ZDBh
MjdiNmIzZjExODdjZGU4YTQwN2NjMWMzNC4uY2ExZTc3NGM3MWQ4OGZhNWE2NDljYzIzNjIzOTcx
YWRkYzMyMDA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVj
dGlvbkdlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0
aW9uR2VvbWV0cnkuY3BwCkBAIC00MCw3ICs0MCw3IEBAIFNlbGVjdGlvbkdlb21ldHJ5OjpTZWxl
Y3Rpb25HZW9tZXRyeShjb25zdCBGbG9hdFF1YWQmIHF1YWQsIFNlbGVjdGlvblJlbmRlcmluZ0Jl
CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBzb21lIG9mIHRoZXNlIGFyZ3VtZW50cyB0
byBhbiBhdXhpbGxhcnkgc3RydWN0LgotU2VsZWN0aW9uR2VvbWV0cnk6OlNlbGVjdGlvbkdlb21l
dHJ5KGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3IgYmVo
YXZpb3IsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbWluWCwgaW50IG1heFgsIGludCBt
YXhZLCBpbnQgbGluZU51bWJlciwgYm9vbCBpc0xpbmVCcmVhaywgYm9vbCBpc0ZpcnN0T25MaW5l
LCBib29sIGlzTGFzdE9uTGluZSwgYm9vbCBjb250YWluc1N0YXJ0LCBib29sIGNvbnRhaW5zRW5k
LCBib29sIGlzSG9yaXpvbnRhbCwgYm9vbCBpc0luRml4ZWRQb3NpdGlvbiwgYm9vbCBpc1J1YnlU
ZXh0LCBpbnQgcGFnZU51bWJlcikKK1NlbGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRy
eShjb25zdCBGbG9hdFF1YWQmIHF1YWQsIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yIGJlaGF2
aW9yLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbWluWCwgaW50IG1heFgsIGlu
dCBtYXhZLCBpbnQgbGluZU51bWJlciwgYm9vbCBpc0xpbmVCcmVhaywgYm9vbCBpc0ZpcnN0T25M
aW5lLCBib29sIGlzTGFzdE9uTGluZSwgYm9vbCBjb250YWluc1N0YXJ0LCBib29sIGNvbnRhaW5z
RW5kLCBib29sIGlzSG9yaXpvbnRhbCwgYm9vbCBpc0luRml4ZWRQb3NpdGlvbiwgYm9vbCBpc1J1
YnlUZXh0LCBpbnQgcGFnZU51bWJlcikKICAgICA6IG1fcXVhZChxdWFkKQogICAgICwgbV9iZWhh
dmlvcihiZWhhdmlvcikKICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmgKaW5kZXggYzhhNGIxZWE4
YTEyODY3NDQxNzg1NmEyYzBjNWI4NDdmOTRhZTY3MC4uMzcyNTZiOGVhOGMwMzlmNjc2N2UwNDJh
ZTcwNjIwOGQ1ZDZjNmYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1NlbGVjdGlvbkdlb21ldHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Nl
bGVjdGlvbkdlb21ldHJ5LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIGV4cGxpY2l0IFNlbGVjdGlvbkdlb21ldHJ5KGNvbnN0IEZsb2F0UXVhZCYsIFNlbGVj
dGlvblJlbmRlcmluZ0JlaGF2aW9yLCBib29sIGlzSG9yaXpvbnRhbCwgaW50IGNvbHVtbk51bWJl
cik7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1vdmUgc29tZSBvZiB0aGVzZSBhcmd1bWVu
dHMgdG8gYW4gYXV4aWxsYXJ5IHN0cnVjdC4KLSAgICBTZWxlY3Rpb25HZW9tZXRyeShjb25zdCBG
bG9hdFF1YWQmLCBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvciwgVGV4dERpcmVjdGlvbiwgaW50
LCBpbnQsIGludCwgaW50LCBib29sLCBib29sLCBib29sLCBib29sLCBib29sLCBib29sLCBib29s
LCBib29sLCBpbnQpOworICAgIFNlbGVjdGlvbkdlb21ldHJ5KGNvbnN0IEZsb2F0UXVhZCYsIFNl
bGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yLCBQQUw6OlRleHREaXJlY3Rpb24sIGludCwgaW50LCBp
bnQsIGludCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwg
aW50KTsKICAgICBTZWxlY3Rpb25HZW9tZXRyeSgpID0gZGVmYXVsdDsKICAgICB+U2VsZWN0aW9u
R2VvbWV0cnkoKSA9IGRlZmF1bHQ7CiAKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIGlu
dCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWwgPyByZWN0KCkueSgp
IDogcmVjdCgpLngoKTsgfQogICAgIGludCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9pc0hvcml6b250YWwgPyByZWN0KCkuaGVpZ2h0KCkgOiByZWN0KCkud2lkdGgoKTsgfQogCi0g
ICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsg
fQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Rp
cmVjdGlvbjsgfQogICAgIGludCBtaW5YKCkgY29uc3QgeyByZXR1cm4gbV9taW5YOyB9CiAgICAg
aW50IG1heFgoKSBjb25zdCB7IHJldHVybiBtX21heFg7IH0KICAgICBpbnQgbWF4WSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWF4WTsgfQpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRMb2dpY2FsVG9wKGludCk7CiAgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGludCk7CiAKLSAg
ICB2b2lkIHNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVjdGlv
biA9IGRpcmVjdGlvbjsgfQorICAgIHZvaWQgc2V0RGlyZWN0aW9uKFBBTDo6VGV4dERpcmVjdGlv
biBkaXJlY3Rpb24pIHsgbV9kaXJlY3Rpb24gPSBkaXJlY3Rpb247IH0KICAgICB2b2lkIHNldE1p
blgoaW50IG1pblgpIHsgbV9taW5YID0gbWluWDsgfQogICAgIHZvaWQgc2V0TWF4WChpbnQgbWF4
WCkgeyBtX21heFggPSBtYXhYOyB9CiAgICAgdm9pZCBzZXRNYXhZKGludCBtYXhZKSB7IG1fbWF4
WSA9IG1heFk7IH0KQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGbG9h
dFF1YWQgbV9xdWFkOwogICAgIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yIG1fYmVoYXZpb3Ig
eyBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6Q29hbGVzY2VCb3VuZGluZ1JlY3RzIH07Ci0g
ICAgVGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbiB7IFRleHREaXJlY3Rpb246OkxUUiB9OworICAg
IFBBTDo6VGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbiB7IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
IH07CiAgICAgaW50IG1fbWluWCB7IDAgfTsKICAgICBpbnQgbV9tYXhYIHsgMCB9OwogICAgIGlu
dCBtX21heFkgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRl
eHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWNkMTBiZjM0ODYyYzhlZWVh
MmI4NDFjNzVjN2ZkZGE5NmY5ZGZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCi0KLSNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RydWN0IFNhbWVTaXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKLSAgICB1aW50MzJfdCBi
aXRmaWVsZHMgOiAxNjsKLSAgICB2b2lkKiBwYXJlbnQ7Ci19OwotCi1DT01QSUxFX0FTU0VSVChz
aXplb2YoQmlkaUNvbnRleHQpID09IHNpemVvZihTYW1lU2l6ZUFzQmlkaUNvbnRleHQpLCBCaWRp
Q29udGV4dF9zaG91bGRfc3RheV9zbWFsbCk7Ci0KLWlubGluZSBCaWRpQ29udGV4dDo6QmlkaUNv
bnRleHQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBib29s
IG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVu
dCkKLSAgICA6IG1fbGV2ZWwobGV2ZWwpCi0gICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0g
ICAgLCBtX292ZXJyaWRlKG92ZXJyaWRlKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwg
bV9wYXJlbnQocGFyZW50KQotewotfQotCi1pbmxpbmUgUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29u
dGV4dDo6Y3JlYXRlVW5jYWNoZWQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSwgQmlk
aUNvbnRleHQqIHBhcmVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCaWRpQ29udGV4
dChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgc291cmNlLCBwYXJlbnQpKTsKLX0KLQotUmVm
PEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVD
aGFyRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSwgQmlkaUVtYmVkZGluZ1NvdXJj
ZSBzb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpCi17Ci0gICAgQVNTRVJUKGRpcmVjdGlvbiA9
PSAobGV2ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hUKSk7Ci0KLSAg
ICBpZiAocGFyZW50KQotICAgICAgICByZXR1cm4gY3JlYXRlVW5jYWNoZWQobGV2ZWwsIGRpcmVj
dGlvbiwgb3ZlcnJpZGUsIHNvdXJjZSwgcGFyZW50KTsKLQotICAgIEFTU0VSVChsZXZlbCA8PSAx
KTsKLSAgICBpZiAoIWxldmVsKSB7Ci0gICAgICAgIGlmICghb3ZlcnJpZGUpIHsKLSAgICAgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8QmlkaUNvbnRleHQ+PiBsdHJDb250ZXh0
OwotICAgICAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGx0ckNvbnRleHRPbmNlRmxhZzsK
LSAgICAgICAgICAgIHN0ZDo6Y2FsbF9vbmNlKGx0ckNvbnRleHRPbmNlRmxhZywgWyZdKCkgewot
ICAgICAgICAgICAgICAgIGx0ckNvbnRleHQuZ2V0KCkgPSBjcmVhdGVVbmNhY2hlZCgwLCBVX0xF
RlRfVE9fUklHSFQsIGZhbHNlLCBGcm9tU3R5bGVPckRPTSwgMCk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgIHJldHVybiAqbHRyQ29udGV4dC5nZXQoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8QmlkaUNvbnRleHQ+PiBsdHJPdmVycmlk
ZUNvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBsdHJPdmVycmlkZUNvbnRl
eHRPbmNlRmxhZzsKLSAgICAgICAgc3RkOjpjYWxsX29uY2UobHRyT3ZlcnJpZGVDb250ZXh0T25j
ZUZsYWcsIFsmXSgpIHsKLSAgICAgICAgICAgIGx0ck92ZXJyaWRlQ29udGV4dC5nZXQoKSA9IGNy
ZWF0ZVVuY2FjaGVkKDAsIFVfTEVGVF9UT19SSUdIVCwgdHJ1ZSwgRnJvbVN0eWxlT3JET00sIDAp
OwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICpsdHJPdmVycmlkZUNvbnRleHQuZ2V0KCk7
Ci0gICAgfQotCi0gICAgaWYgKCFvdmVycmlkZSkgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8UmVmUHRyPEJpZGlDb250ZXh0Pj4gcnRsQ29udGV4dDsKLSAgICAgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIHJ0bENvbnRleHRPbmNlRmxhZzsKLSAgICAgICAgc3RkOjpjYWxsX29uY2Uo
cnRsQ29udGV4dE9uY2VGbGFnLCBbJl0oKSB7Ci0gICAgICAgICAgICBydGxDb250ZXh0LmdldCgp
ID0gY3JlYXRlVW5jYWNoZWQoMSwgVV9SSUdIVF9UT19MRUZULCBmYWxzZSwgRnJvbVN0eWxlT3JE
T00sIDApOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICpydGxDb250ZXh0LmdldCgpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8QmlkaUNvbnRleHQ+PiBy
dGxPdmVycmlkZUNvbnRleHQ7Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHJ0bE92ZXJyaWRl
Q29udGV4dE9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKHJ0bE92ZXJyaWRlQ29udGV4dE9u
Y2VGbGFnLCBbJl0oKSB7Ci0gICAgICAgIHJ0bE92ZXJyaWRlQ29udGV4dC5nZXQoKSA9IGNyZWF0
ZVVuY2FjaGVkKDEsIFVfUklHSFRfVE9fTEVGVCwgdHJ1ZSwgRnJvbVN0eWxlT3JET00sIDApOwot
ICAgIH0pOwotICAgIHJldHVybiAqcnRsT3ZlcnJpZGVDb250ZXh0LmdldCgpOwotfQotCi1zdGF0
aWMgaW5saW5lIFJlZjxCaWRpQ29udGV4dD4gY29weUNvbnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwo
QmlkaUNvbnRleHQmIGNvbnRleHQsIEJpZGlDb250ZXh0KiBwYXJlbnQpCi17Ci0gICAgYXV0byBu
ZXdMZXZlbCA9IHBhcmVudCA/IHBhcmVudC0+bGV2ZWwoKSA6IDA7Ci0gICAgaWYgKGNvbnRleHQu
ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKQotICAgICAgICBuZXdMZXZlbCA9IG5leHRHcmVhdGVy
T2RkTGV2ZWwobmV3TGV2ZWwpOwotICAgIGVsc2UgaWYgKHBhcmVudCkKLSAgICAgICAgbmV3TGV2
ZWwgPSBuZXh0R3JlYXRlckV2ZW5MZXZlbChuZXdMZXZlbCk7Ci0gICAgcmV0dXJuIEJpZGlDb250
ZXh0OjpjcmVhdGUobmV3TGV2ZWwsIGNvbnRleHQuZGlyKCksIGNvbnRleHQub3ZlcnJpZGUoKSwg
Y29udGV4dC5zb3VyY2UoKSwgcGFyZW50KTsKLX0KLQotLy8gVGhlIEJpZGlDb250ZXh0IHN0YWNr
IG11c3QgYmUgaW1tdXRhYmxlIC0tIHRoZXkncmUgcmUtdXNlZCBmb3IgcmUtbGF5b3V0IGFmdGVy
Ci0vLyBET00gbW9kaWZpY2F0aW9uL2VkaXRpbmcgLS0gc28gd2UgY29weSBhbGwgdGhlIG5vbi1V
bmljb2RlIGNvbnRleHRzLCBhbmQKLS8vIHJlY2FsY3VsYXRlIHRoZWlyIGxldmVscy4KLVJlZjxC
aWRpQ29udGV4dD4gQmlkaUNvbnRleHQ6OmNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGlu
Z0NvbnRleHRzKCkKLXsKLSAgICBWZWN0b3I8QmlkaUNvbnRleHQqLCA2ND4gY29udGV4dHM7Ci0g
ICAgZm9yIChhdXRvKiBhbmNlc3RvciA9IHRoaXM7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2Vz
dG9yLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoYW5jZXN0b3ItPnNvdXJjZSgpICE9IEZyb21V
bmljb2RlKQotICAgICAgICAgICAgY29udGV4dHMuYXBwZW5kKGFuY2VzdG9yKTsKLSAgICB9Ci0g
ICAgQVNTRVJUKGNvbnRleHRzLnNpemUoKSk7Ci0gICAgYXV0byB0b3BDb250ZXh0ID0gY29weUNv
bnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwoKmNvbnRleHRzLmxhc3QoKSwgbnVsbHB0cik7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gY29udGV4dHMuc2l6ZSgpIC0gMTsgaTsgLS1pKQotICAgICAgICB0
b3BDb250ZXh0ID0gY29weUNvbnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwoKmNvbnRleHRzW2kgLSAx
XSwgdG9wQ29udGV4dC5wdHIoKSk7Ci0gICAgcmV0dXJuIHRvcENvbnRleHQ7Ci19Ci0KLWJvb2wg
b3BlcmF0b3I9PShjb25zdCBCaWRpQ29udGV4dCYgYzEsIGNvbnN0IEJpZGlDb250ZXh0JiBjMikK
LXsKLSAgICBpZiAoJmMxID09ICZjMikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGMx
LmxldmVsKCkgIT0gYzIubGV2ZWwoKSB8fCBjMS5vdmVycmlkZSgpICE9IGMyLm92ZXJyaWRlKCkg
fHwgYzEuZGlyKCkgIT0gYzIuZGlyKCkgfHwgYzEuc291cmNlKCkgIT0gYzIuc291cmNlKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWMxLnBhcmVudCgpKQotICAgICAgICByZXR1
cm4gIWMyLnBhcmVudCgpOwotICAgIHJldHVybiBjMi5wYXJlbnQoKSAmJiAqYzEucGFyZW50KCkg
PT0gKmMyLnBhcmVudCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDVhOGQ5MDllZWE5MWI2MTllNTM5NDY5ZmRhY2ZjNGYzYTI2MDNkNzAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBCaWRpRW1iZWRkaW5nU291cmNlIHsgRnJvbVN0eWxl
T3JET00sIEZyb21Vbmljb2RlIH07Ci0KLS8vIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBleHBsaWNp
dCBlbWJlZGRpbmdzLgotY2xhc3MgQmlkaUNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8QmlkaUNvbnRleHQ+IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmPEJpZGlDb250ZXh0PiBjcmVhdGUodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rp
b24sIGJvb2wgb3ZlcnJpZGUgPSBmYWxzZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSA9IEZyb21TdHls
ZU9yRE9NLCBCaWRpQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7Ci0KLSAgICBCaWRpQ29udGV4
dCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQuZ2V0KCk7IH0KLSAgICB1bnNpZ25l
ZCBjaGFyIGxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9sZXZlbDsgfQotICAgIFVDaGFyRGlyZWN0
aW9uIGRpcigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPihtX2Rp
cmVjdGlvbik7IH0KLSAgICBib29sIG92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9vdmVycmlk
ZTsgfQotICAgIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8QmlkaUVtYmVkZGluZ1NvdXJjZT4obV9zb3VyY2UpOyB9Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCBSZWY8QmlkaUNvbnRleHQ+IGNvcHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGlu
Z0NvbnRleHRzKCk7Ci0KLXByaXZhdGU6Ci0gICAgQmlkaUNvbnRleHQodW5zaWduZWQgY2hhciBs
ZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2Us
IEJpZGlDb250ZXh0KiBwYXJlbnQpOwotCi0gICAgc3RhdGljIFJlZjxCaWRpQ29udGV4dD4gY3Jl
YXRlVW5jYWNoZWQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3Zl
cnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpOwotCi0gICAg
dW5zaWduZWQgbV9sZXZlbCA6IDY7IC8vIFRoZSBtYXhpbWl1bSBiaWRpIGxldmVsIGlzIDYyOiBo
dHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkvI0V4cGxpY2l0X0xldmVsc19hbmRfRGlyZWN0
aW9ucwotICAgIHVuc2lnbmVkIG1fZGlyZWN0aW9uIDogNTsgLy8gRGlyZWN0aW9uCi0gICAgdW5z
aWduZWQgbV9vdmVycmlkZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9zb3VyY2UgOiAxOyAvLyBCaWRp
RW1iZWRkaW5nU291cmNlCi0gICAgUmVmUHRyPEJpZGlDb250ZXh0PiBtX3BhcmVudDsKLX07Ci0K
LWlubGluZSB1bnNpZ25lZCBjaGFyIG5leHRHcmVhdGVyT2RkTGV2ZWwodW5zaWduZWQgY2hhciBs
ZXZlbCkKLXsKLSAgICByZXR1cm4gKGxldmVsICsgMSkgfCAxOwotfQotCi1pbmxpbmUgdW5zaWdu
ZWQgY2hhciBuZXh0R3JlYXRlckV2ZW5MZXZlbCh1bnNpZ25lZCBjaGFyIGxldmVsKQotewotICAg
IHJldHVybiAobGV2ZWwgKyAyKSAmIH4xOwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQmlk
aUNvbnRleHQmLCBjb25zdCBCaWRpQ29udGV4dCYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjlkOWU0NmUwODY1NjhkYzkwN2FiNTg0ZGM0MjY2ODU3MDVm
ZGNmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsOTc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQmlkaUNvbnRleHQu
aCIKLSNpbmNsdWRlICJCaWRpUnVuTGlzdC5oIgotI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCi0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVu
ZGVyT2JqZWN0OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gY2xhc3MgV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgdm9pZCByZXNldCgpCi0gICAgewotICAg
ICAgICBtX3RyYW5zaXRpb25zLmNsZWFyKCk7Ci0gICAgICAgIG1fY3VycmVudFRyYW5zaXRpb24g
PSAwOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHN0YXJ0SWdub3JpbmdTcGFjZXMoY29uc3QgSXRl
cmF0b3ImIHRyYW5zaXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlQoIShtX3RyYW5zaXRpb25z
LnNpemUoKSAlIDIpKTsKLSAgICAgICAgbV90cmFuc2l0aW9ucy5hcHBlbmQodHJhbnNpdGlvbik7
Ci0gICAgfQotCi0gICAgdm9pZCBzdG9wSWdub3JpbmdTcGFjZXMoY29uc3QgSXRlcmF0b3ImIHRy
YW5zaXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlQobV90cmFuc2l0aW9ucy5zaXplKCkgJSAy
KTsKLSAgICAgICAgbV90cmFuc2l0aW9ucy5hcHBlbmQodHJhbnNpdGlvbik7Ci0gICAgfQotCi0g
ICAgLy8gV2hlbiBpZ25vcmluZyBzcGFjZXMsIHRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGZvciBv
YmplY3RzIHRoYXQgbmVlZCBsaW5lIGJveGVzIHN1Y2ggYXMgUmVuZGVySW5saW5lcyBvcgotICAg
IC8vIGhhcmQgbGluZSBicmVha3MgdG8gZW5zdXJlIHRoYXQgdGhleSdyZSBub3QgaWdub3JlZC4K
LSAgICB2b2lkIGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKFJlbmRlck9iamVjdCYg
cmVuZGVyZXIpCi0gICAgewotICAgICAgICBJdGVyYXRvciB0cmFuc2l0aW9uKDAsICZyZW5kZXJl
ciwgMCk7Ci0gICAgICAgIHN0b3BJZ25vcmluZ1NwYWNlcyh0cmFuc2l0aW9uKTsKLSAgICAgICAg
c3RhcnRJZ25vcmluZ1NwYWNlcyh0cmFuc2l0aW9uKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlY3Jl
bWVudFRyYW5zaXRpb25BdChzaXplX3QgaW5kZXgpCi0gICAgewotICAgICAgICBtX3RyYW5zaXRp
b25zW2luZGV4XS5mYXN0RGVjcmVtZW50KCk7Ci0gICAgfQotCi0gICAgY29uc3QgVmVjdG9yPEl0
ZXJhdG9yPiYgdHJhbnNpdGlvbnMoKSB7IHJldHVybiBtX3RyYW5zaXRpb25zOyB9Ci0gICAgc2l6
ZV90IG51bVRyYW5zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0aW9ucy5zaXplKCk7
IH0KLSAgICBzaXplX3QgY3VycmVudFRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnRUcmFuc2l0aW9uOyB9Ci0gICAgdm9pZCBzZXRDdXJyZW50VHJhbnNpdGlvbihzaXplX3QgY3Vy
cmVudFRyYW5zaXRpb24pIHsgbV9jdXJyZW50VHJhbnNpdGlvbiA9IGN1cnJlbnRUcmFuc2l0aW9u
OyB9Ci0gICAgdm9pZCBpbmNyZW1lbnRDdXJyZW50VHJhbnNpdGlvbigpIHsgKyttX2N1cnJlbnRU
cmFuc2l0aW9uOyB9Ci0gICAgdm9pZCBkZWNyZW1lbnROdW1UcmFuc2l0aW9ucygpIHsgbV90cmFu
c2l0aW9ucy5zaHJpbmsobV90cmFuc2l0aW9ucy5zaXplKCkgLSAxKTsgfQotICAgIGJvb2wgYmV0
d2VlblRyYW5zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VHJhbnNpdGlvbiAlIDI7
IH0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPEl0ZXJhdG9yPiBtX3RyYW5zaXRpb25zOwotICAgIHNp
emVfdCBtX2N1cnJlbnRUcmFuc2l0aW9uIHsgMCB9OwotfTsKLQotLy8gVGhlIEJpZGlTdGF0dXMg
YXQgYSBnaXZlbiBwb3NpdGlvbiAodHlwaWNhbGx5IHRoZSBlbmQgb2YgYSBsaW5lKSBjYW4KLS8v
IGJlIGNhY2hlZCBhbmQgdGhlbiB1c2VkIHRvIHJlc3RhcnQgYmlkaSByZXNvbHV0aW9uIGF0IHRo
YXQgcG9zaXRpb24uCi1zdHJ1Y3QgQmlkaVN0YXR1cyB7Ci0gICAgQmlkaVN0YXR1cygpID0gZGVm
YXVsdDsKLQotICAgIC8vIENyZWF0ZXMgYSBCaWRpU3RhdHVzIHJlcHJlc2VudGluZyBhIG5ldyBw
YXJhZ3JhcGggcm9vdCB3aXRoIGEgZGVmYXVsdCBkaXJlY3Rpb24uCi0gICAgLy8gVXNlcyBUZXh0
RGlyZWN0aW9uIGFzIGl0IG9ubHkgaGFzIHR3byBwb3NzaWJpbGl0aWVzIGluc3RlYWQgb2YgVUNo
YXJEaXJlY3Rpb24gd2hpY2ggaGFzIGF0IGxlYXN0IDE5LgotICAgIEJpZGlTdGF0dXMoVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgaXNPdmVycmlkZSkKLSAgICAgICAgOiBlb3IoZGlyZWN0
aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9f
TEVGVCkKLSAgICAgICAgLCBsYXN0U3Ryb25nKGVvcikKLSAgICAgICAgLCBsYXN0KGVvcikKLSAg
ICAgICAgLCBjb250ZXh0KEJpZGlDb250ZXh0OjpjcmVhdGUoZGlyZWN0aW9uID09IFRleHREaXJl
Y3Rpb246OkxUUiA/IDAgOiAxLCBlb3IsIGlzT3ZlcnJpZGUpKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBCaWRpU3RhdHVzKFVDaGFyRGlyZWN0aW9uIGVvciwgVUNoYXJEaXJlY3Rpb24gbGFzdFN0cm9u
ZywgVUNoYXJEaXJlY3Rpb24gbGFzdCwgUmVmUHRyPEJpZGlDb250ZXh0PiYmIGNvbnRleHQpCi0g
ICAgICAgIDogZW9yKGVvcikKLSAgICAgICAgLCBsYXN0U3Ryb25nKGxhc3RTdHJvbmcpCi0gICAg
ICAgICwgbGFzdChsYXN0KQotICAgICAgICAsIGNvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgVUNoYXJEaXJlY3Rpb24gZW9yIHsgVV9PVEhFUl9ORVVUUkFMIH07
Ci0gICAgVUNoYXJEaXJlY3Rpb24gbGFzdFN0cm9uZyB7IFVfT1RIRVJfTkVVVFJBTCB9OwotICAg
IFVDaGFyRGlyZWN0aW9uIGxhc3QgeyBVX09USEVSX05FVVRSQUwgfTsKLSAgICBSZWZQdHI8Qmlk
aUNvbnRleHQ+IGNvbnRleHQ7Ci19OwotCi1zdHJ1Y3QgQmlkaUVtYmVkZGluZyB7Ci0gICAgQmlk
aUVtYmVkZGluZyhVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24sIEJpZGlFbWJlZGRpbmdTb3VyY2Ug
c291cmNlKQotICAgICAgICA6IGRpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgICAgICwgc291cmNl
KHNvdXJjZSkKLSAgICB7Ci0gICAgfQotCi0gICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uOwot
ICAgIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlOwotfTsKLQotaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMxLCBjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMy
KQotewotICAgIHJldHVybiBzdGF0dXMxLmVvciA9PSBzdGF0dXMyLmVvciAmJiBzdGF0dXMxLmxh
c3QgPT0gc3RhdHVzMi5sYXN0ICYmIHN0YXR1czEubGFzdFN0cm9uZyA9PSBzdGF0dXMyLmxhc3RT
dHJvbmcgJiYgKihzdGF0dXMxLmNvbnRleHQpID09ICooc3RhdHVzMi5jb250ZXh0KTsKLX0KLQot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMxLCBjb25zdCBC
aWRpU3RhdHVzJiBzdGF0dXMyKQotewotICAgIHJldHVybiAhKHN0YXR1czEgPT0gc3RhdHVzMik7
Ci19Ci0KLXN0cnVjdCBCaWRpQ2hhcmFjdGVyUnVuIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBCaWRpQ2hhcmFjdGVyUnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBzdG9wLCBCaWRpQ29udGV4dCogY29udGV4dCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9u
KQotICAgICAgICA6IG1fc3RhcnQoc3RhcnQpCi0gICAgICAgICwgbV9zdG9wKHN0b3ApCi0gICAg
ICAgICwgbV9vdmVycmlkZShjb250ZXh0LT5vdmVycmlkZSgpKQotICAgIHsKLSAgICAgICAgaWYg
KGRpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwpCi0gICAgICAgICAgICBkaXJlY3Rpb24gPSBj
b250ZXh0LT5kaXIoKTsKLQotICAgICAgICBtX2xldmVsID0gY29udGV4dC0+bGV2ZWwoKTsKLQot
ICAgICAgICAvLyBhZGQgbGV2ZWwgb2YgcnVuIChjYXNlcyBJMSAmIEkyKQotICAgICAgICBpZiAo
bV9sZXZlbCAlIDIpIHsKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJ
R0hUIHx8IGRpcmVjdGlvbiA9PSBVX0FSQUJJQ19OVU1CRVIgfHwgZGlyZWN0aW9uID09IFVfRVVS
T1BFQU5fTlVNQkVSKQotICAgICAgICAgICAgICAgIG1fbGV2ZWwrKzsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUKQotICAgICAg
ICAgICAgICAgIG1fbGV2ZWwrKzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBV
X0FSQUJJQ19OVU1CRVIgfHwgZGlyZWN0aW9uID09IFVfRVVST1BFQU5fTlVNQkVSKQotICAgICAg
ICAgICAgICAgIG1fbGV2ZWwgKz0gMjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIH5CaWRpQ2hh
cmFjdGVyUnVuKCkKLSAgICB7Ci0gICAgICAgIC8vIERlbGV0ZSB0aGUgbGlua2VkIGxpc3QgaW4g
YSBsb29wIHRvIHByZXZlbnQgZGVzdHJ1Y3RvciByZWN1cnNpb24uCi0gICAgICAgIGF1dG8gbmV4
dCA9IFdURk1vdmUobV9uZXh0KTsKLSAgICAgICAgd2hpbGUgKG5leHQpCi0gICAgICAgICAgICBu
ZXh0ID0gV1RGTW92ZShuZXh0LT5tX25leHQpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQotICAgIHVuc2lnbmVkIHN0b3AoKSBjb25zdCB7
IHJldHVybiBtX3N0b3A7IH0KLSAgICB1bnNpZ25lZCBjaGFyIGxldmVsKCkgY29uc3QgeyByZXR1
cm4gbV9sZXZlbDsgfQotICAgIGJvb2wgcmV2ZXJzZWQoYm9vbCB2aXN1YWxseU9yZGVyZWQpIHsg
cmV0dXJuIG1fbGV2ZWwgJSAyICYmICF2aXN1YWxseU9yZGVyZWQ7IH0KLSAgICBib29sIGRpck92
ZXJyaWRlKGJvb2wgdmlzdWFsbHlPcmRlcmVkKSB7IHJldHVybiBtX292ZXJyaWRlIHx8IHZpc3Vh
bGx5T3JkZXJlZDsgfQotCi0gICAgQmlkaUNoYXJhY3RlclJ1biogbmV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fbmV4dC5nZXQoKTsgfQotICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVu
PiB0YWtlTmV4dCgpIHsgcmV0dXJuIFdURk1vdmUobV9uZXh0KTsgfQotICAgIHZvaWQgc2V0TmV4
dChzdGQ6OnVuaXF1ZV9wdHI8QmlkaUNoYXJhY3RlclJ1bj4mJiBuZXh0KSB7IG1fbmV4dCA9IFdU
Rk1vdmUobmV4dCk7IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaUNoYXJh
Y3RlclJ1bj4gbV9uZXh0OwotCi1wdWJsaWM6Ci0gICAgdW5zaWduZWQgbV9zdGFydDsKLSAgICB1
bnNpZ25lZCBtX3N0b3A7Ci0gICAgdW5zaWduZWQgY2hhciBtX2xldmVsOwotICAgIGJvb2wgbV9v
dmVycmlkZSA6IDE7Ci0gICAgYm9vbCBtX2hhc0h5cGhlbiA6IDE7IC8vIFVzZWQgYnkgQmlkaVJ1
biBzdWJjbGFzcyB3aGljaCBpcyBhIGxheWVyaW5nIHZpb2xhdGlvbiBidXQgZW5hYmxlcyB1cyB0
byBzYXZlIDggYnl0ZXMgcGVyIG9iamVjdCBvbiA2NC1iaXQuCi19OwotCi1lbnVtIFZpc3VhbERp
cmVjdGlvbk92ZXJyaWRlIHsKLSAgICBOb1Zpc3VhbE92ZXJyaWRlLAotICAgIFZpc3VhbExlZnRU
b1JpZ2h0T3ZlcnJpZGUsCi0gICAgVmlzdWFsUmlnaHRUb0xlZnRPdmVycmlkZQotfTsKLQotLy8g
QmlkaVJlc29sdmVyIGlzIFdlYktpdCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBVbmljb2RlIEJp
ZGkgQWxnb3JpdGhtCi0vLyBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkKLXRlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4g
Y2xhc3MgQmlkaVJlc29sdmVyQmFzZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmlkaVJl
c29sdmVyQmFzZSk7Ci1wdWJsaWM6Ci0gICAgY29uc3QgSXRlcmF0b3ImIHBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9jdXJyZW50OyB9Ci0gICAgdm9pZCBzZXRQb3NpdGlvbklnbm9yaW5nTmVz
dGVkSXNvbGF0ZXMoY29uc3QgSXRlcmF0b3ImIHBvc2l0aW9uKSB7IG1fY3VycmVudCA9IHBvc2l0
aW9uOyB9Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBJdGVyYXRvciYgcG9zaXRpb24sIHVu
c2lnbmVkIG5lc3RlZElzb2xhdGVkQ291bnQpCi0gICAgewotICAgICAgICBtX2N1cnJlbnQgPSBw
b3NpdGlvbjsKLSAgICAgICAgbV9uZXN0ZWRJc29sYXRlQ291bnQgPSBuZXN0ZWRJc29sYXRlZENv
dW50OwotICAgIH0KLQotICAgIHZvaWQgaW5jcmVtZW50KCkgeyBzdGF0aWNfY2FzdDxEZXJpdmVk
Q2xhc3MmPigqdGhpcykuaW5jcmVtZW50SW50ZXJuYWwoKTsgfQotCi0gICAgQmlkaUNvbnRleHQq
IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1cy5jb250ZXh0LmdldCgpOyB9Ci0gICAg
dm9pZCBzZXRDb250ZXh0KFJlZlB0cjxCaWRpQ29udGV4dD4mJiBjb250ZXh0KSB7IG1fc3RhdHVz
LmNvbnRleHQgPSBXVEZNb3ZlKGNvbnRleHQpOyB9Ci0KLSAgICB2b2lkIHNldExhc3REaXIoVUNo
YXJEaXJlY3Rpb24gbGFzdERpcikgeyBtX3N0YXR1cy5sYXN0ID0gbGFzdERpcjsgfQotICAgIHZv
aWQgc2V0TGFzdFN0cm9uZ0RpcihVQ2hhckRpcmVjdGlvbiBsYXN0U3Ryb25nRGlyKSB7IG1fc3Rh
dHVzLmxhc3RTdHJvbmcgPSBsYXN0U3Ryb25nRGlyOyB9Ci0gICAgdm9pZCBzZXRFb3JEaXIoVUNo
YXJEaXJlY3Rpb24gZW9yRGlyKSB7IG1fc3RhdHVzLmVvciA9IGVvckRpcjsgfQotCi0gICAgVUNo
YXJEaXJlY3Rpb24gZGlyKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KLSAgICB2b2lk
IHNldERpcihVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24pIHsgbV9kaXJlY3Rpb24gPSBkaXJlY3Rp
b247IH0KLQotICAgIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdHVzOyB9Ci0gICAgdm9pZCBzZXRTdGF0dXMoQmlkaVN0YXR1cyBzdGF0dXMpIHsgbV9zdGF0
dXMgPSBzdGF0dXM7IH0KLQotICAgIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU8SXRlcmF0b3I+
JiB3aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlKCkgeyByZXR1cm4gbV93aGl0ZXNwYWNlQ29sbGFw
c2luZ1N0YXRlOyB9Ci0KLSAgICAvLyBUaGUgY3VycmVudCBhbGdvcml0aG0gaGFuZGxlcyBuZXN0
ZWQgaXNvbGF0ZXMgb25lIGxheWVyIG9mIG5lc3RpbmcgYXQgYSB0aW1lLgotICAgIC8vIEJ1dCB3
aGVuIHdlIGxheW91dCBlYWNoIGlzb2xhdGVkIHNwYW4sIHdlIHdpbGwgd2FsayBpbnRvIChhbmQg
aWdub3JlKSBhbGwKLSAgICAvLyBjaGlsZCBpc29sYXRlZCBzcGFucy4KLSAgICB2b2lkIGVudGVy
SXNvbGF0ZSgpIHsgbV9uZXN0ZWRJc29sYXRlQ291bnQrKzsgfQotICAgIHZvaWQgZXhpdElzb2xh
dGUoKSB7IEFTU0VSVChtX25lc3RlZElzb2xhdGVDb3VudCA+PSAxKTsgbV9uZXN0ZWRJc29sYXRl
Q291bnQtLTsgfQotICAgIGJvb2wgaW5Jc29sYXRlKCkgY29uc3QgeyByZXR1cm4gbV9uZXN0ZWRJ
c29sYXRlQ291bnQ7IH0KLQotICAgIHZvaWQgZW1iZWQoVUNoYXJEaXJlY3Rpb24sIEJpZGlFbWJl
ZGRpbmdTb3VyY2UpOwotICAgIGJvb2wgY29tbWl0RXhwbGljaXRFbWJlZGRpbmcoKTsKLQotICAg
IHZvaWQgY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGNvbnN0IEl0ZXJhdG9yJiBlbmQsIFZpc3VhbERp
cmVjdGlvbk92ZXJyaWRlID0gTm9WaXN1YWxPdmVycmlkZSwgYm9vbCBoYXJkTGluZUJyZWFrID0g
ZmFsc2UpOwotCi0gICAgQmlkaVJ1bkxpc3Q8UnVuPiYgcnVucygpIHsgcmV0dXJuIG1fcnVuczsg
fQotCi0gICAgLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBwYXJ0IG9mIGRlbGV0ZVJ1bnMoKSBi
dXQgd2FzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uLgotICAgIC8vIEl0J3MgdW5jbGVhciBpZiB0aGlz
IGlzIHN0aWxsIG5lZWRlZC4KLSAgICB2b2lkIG1hcmtDdXJyZW50UnVuRW1wdHkoKSB7IG1fZW1w
dHlSdW4gPSB0cnVlOyB9Ci0KLSAgICB2b2lkIHNldFdoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNp
dGlvbkZvcklzb2xhdGVkUnVuKFJ1biYsIHNpemVfdCk7Ci0gICAgdW5zaWduZWQgd2hpdGVzcGFj
ZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVuJik7Ci0KLXByb3RlY3RlZDoK
LSAgICBCaWRpUmVzb2x2ZXJCYXNlKCkgPSBkZWZhdWx0OwotCi0gICAgLy8gRklYTUU6IEluc3Rl
YWQgb2YgSW5saW5lQmlkaVJlc29sdmVycyBzdWJjbGFzc2luZyB0aGlzIG1ldGhvZCwgd2Ugc2hv
dWxkCi0gICAgLy8gcGFzcyBpbiBzb21lIHNvcnQgb2YgVHJhaXRzIG9iamVjdCB3aGljaCBrbm93
cyBob3cgdG8gY3JlYXRlIHJ1bnMgZm9yIGFwcGVuZGluZy4KLSAgICB2b2lkIGFwcGVuZFJ1bigp
IHsgc3RhdGljX2Nhc3Q8RGVyaXZlZENsYXNzJj4oKnRoaXMpLmFwcGVuZFJ1bkludGVybmFsKCk7
IH0KLSAgICBib29sIG5lZWRzQ29udGludWVQYXN0RW5kKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgRGVyaXZlZENsYXNzJj4oKnRoaXMpLm5lZWRzQ29udGludWVQYXN0RW5kSW50
ZXJuYWwoKTsgfQotCi0gICAgSXRlcmF0b3IgbV9jdXJyZW50OwotICAgIC8vIHNvciBhbmQgZW9y
IGFyZSAic3RhcnQgb2YgcnVuIiBhbmQgImVuZCBvZiBydW4iIHJlc3BlY3RpdmVseSBhbmQgY29y
cmVwb25kCi0gICAgLy8gdG8gYWJyZXZpYXRpb25zIHVzZWQgaW4gVUJBIHNwZWM6IGh0dHA6Ly91
bmljb2RlLm9yZy9yZXBvcnRzL3RyOS8jQkQ3Ci0gICAgSXRlcmF0b3IgbV9zb3I7IC8vIFBvaW50
cyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBjdXJyZW50IHJ1bi4KLSAgICBJdGVyYXRv
ciBtX2VvcjsgLy8gUG9pbnRzIHRvIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgY3VycmVudCBy
dW4uCi0gICAgSXRlcmF0b3IgbV9sYXN0OwotICAgIEJpZGlTdGF0dXMgbV9zdGF0dXM7Ci0gICAg
VUNoYXJEaXJlY3Rpb24gbV9kaXJlY3Rpb24geyBVX09USEVSX05FVVRSQUwgfTsKLSAgICBJdGVy
YXRvciBlbmRPZkxpbmU7Ci0gICAgYm9vbCBtX3JlYWNoZWRFbmRPZkxpbmUgeyBmYWxzZSB9Owot
ICAgIEl0ZXJhdG9yIG1fbGFzdEJlZm9yZUVUOyAvLyBCZWZvcmUgYSBVX0VVUk9QRUFOX05VTUJF
Ul9URVJNSU5BVE9SCi0gICAgYm9vbCBtX2VtcHR5UnVuIHsgdHJ1ZSB9OwotCi0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIG5vdCBiZWxvbmcgdG8gdGhlIHJlc29sdmVyLCBidXQgcmF0aGVyIGJl
IHBhc3NlZAotICAgIC8vIGludG8gY3JlYXRlQmlkaVJ1bnNGb3JMaW5lIGJ5IHRoZSBjYWxsZXIu
Ci0gICAgQmlkaVJ1bkxpc3Q8UnVuPiBtX3J1bnM7Ci0KLSAgICBXaGl0ZXNwYWNlQ29sbGFwc2lu
Z1N0YXRlPEl0ZXJhdG9yPiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7Ci0KLSAgICB1bnNp
Z25lZCBtX25lc3RlZElzb2xhdGVDb3VudCB7IDAgfTsKLSAgICBIYXNoTWFwPFJ1biosIHVuc2ln
bmVkPiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuOwotCi1w
cml2YXRlOgotICAgIHZvaWQgcmFpc2VFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0
aW9uIGZyb20sIFVDaGFyRGlyZWN0aW9uIHRvKTsKLSAgICB2b2lkIGxvd2VyRXhwbGljaXRFbWJl
ZGRpbmdMZXZlbChVQ2hhckRpcmVjdGlvbiBmcm9tKTsKLSAgICB2b2lkIGNoZWNrRGlyZWN0aW9u
SW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwoKTsKLQotICAgIHZvaWQgdXBkYXRlU3RhdHVzTGFz
dEZyb21DdXJyZW50RGlyZWN0aW9uKFVDaGFyRGlyZWN0aW9uKTsKLSAgICB2b2lkIHJlb3JkZXJS
dW5zRnJvbUxldmVscygpOwotICAgIHZvaWQgaW5jcmVtZW50SW50ZXJuYWwoKSB7IG1fY3VycmVu
dC5pbmNyZW1lbnQoKTsgfQotICAgIHZvaWQgYXBwZW5kUnVuSW50ZXJuYWwoKTsKLSAgICBib29s
IG5lZWRzQ29udGludWVQYXN0RW5kSW50ZXJuYWwoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0K
LSAgICBWZWN0b3I8QmlkaUVtYmVkZGluZywgOD4gbV9jdXJyZW50RXhwbGljaXRFbWJlZGRpbmdT
ZXF1ZW5jZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4+
Ci1jbGFzcyBCaWRpUmVzb2x2ZXIgOiBwdWJsaWMgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwg
UnVuLCBCaWRpUmVzb2x2ZXI8SXRlcmF0b3IsIFJ1bj4+IHsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIElzb2xhdGVSdW4+Ci1jbGFzcyBC
aWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZSA6IHB1YmxpYyBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9y
LCBSdW4sIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlPEl0ZXJhdG9yLCBSdW4sIElzb2xhdGVSdW4+
PiB7Ci1wdWJsaWM6Ci0gICAgfkJpZGlSZXNvbHZlcldpdGhJc29sYXRlKCk7Ci0KLSAgICB2b2lk
IGluY3JlbWVudEludGVybmFsKCk7Ci0gICAgdm9pZCBhcHBlbmRSdW5JbnRlcm5hbCgpOwotICAg
IGJvb2wgbmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5hbCgpIGNvbnN0OwotICAgIFZlY3RvcjxJ
c29sYXRlUnVuPiYgaXNvbGF0ZWRSdW5zKCkgeyByZXR1cm4gbV9pc29sYXRlZFJ1bnM7IH0KLQot
cHJpdmF0ZToKLSAgICBWZWN0b3I8SXNvbGF0ZVJ1bj4gbV9pc29sYXRlZFJ1bnM7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBJc29sYXRl
UnVuPgotaW5saW5lIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlPEl0ZXJhdG9yLCBSdW4sIElzb2xh
dGVSdW4+Ojp+QmlkaVJlc29sdmVyV2l0aElzb2xhdGUoKQotewotICAgIC8vIFRoZSBvd25lciBv
ZiB0aGlzIHJlc29sdmVyIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhlIGlzb2xhdGVkIHJ1bnMuCi0g
ICAgQVNTRVJUKG1faXNvbGF0ZWRSdW5zLmlzRW1wdHkoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KLXZvaWQg
QmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+OjphcHBlbmRSdW5J
bnRlcm5hbCgpCi17Ci0gICAgaWYgKCFtX2VtcHR5UnVuICYmICFtX2Vvci5hdEVuZCgpKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbV9zb3Iub2Zmc2V0KCk7Ci0gICAgICAgIHVu
c2lnbmVkIGVuZE9mZnNldCA9IG1fZW9yLm9mZnNldCgpOwotCi0gICAgICAgIGlmICghZW5kT2ZM
aW5lLmF0RW5kKCkgJiYgZW5kT2Zmc2V0ID49IGVuZE9mTGluZS5vZmZzZXQoKSkgewotICAgICAg
ICAgICAgbV9yZWFjaGVkRW5kT2ZMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgIGVuZE9mZnNldCA9
IGVuZE9mTGluZS5vZmZzZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlbmRPZmZzZXQg
Pj0gc3RhcnRPZmZzZXQpCi0gICAgICAgICAgICBtX3J1bnMuYXBwZW5kUnVuKG1ha2VVbmlxdWU8
UnVuPihzdGFydE9mZnNldCwgZW5kT2Zmc2V0ICsgMSwgY29udGV4dCgpLCBtX2RpcmVjdGlvbikp
OwotCi0gICAgICAgIG1fZW9yLmluY3JlbWVudCgpOwotICAgICAgICBtX3NvciA9IG1fZW9yOwot
ICAgIH0KLQotICAgIG1fZGlyZWN0aW9uID0gVV9PVEhFUl9ORVVUUkFMOwotICAgIG1fc3RhdHVz
LmVvciA9IFVfT1RIRVJfTkVVVFJBTDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3Is
IHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJC
YXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmVtYmVkKFVDaGFyRGlyZWN0aW9uIGRp
ciwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCi17Ci0gICAgLy8gSXNvbGF0ZWQgc3BhbnMg
Y29tcHV0ZSBiYXNlIGRpcmVjdGlvbmFsaXR5IGR1cmluZyB0aGVpciBvd24gVUJBIHJ1bi4KLSAg
ICAvLyBEbyBub3QgaW5zZXJ0IGZha2UgZW1iZWQgY2hhcmFjdGVycyBvbmNlIHdlIGVudGVyIGFu
IGlzb2xhdGVkIHNwYW4uCi0gICAgQVNTRVJUKCFpbklzb2xhdGUoKSk7Ci0KLSAgICBBU1NFUlQo
ZGlyID09IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCB8fCBkaXIgPT0gVV9MRUZUX1RPX1JJR0hU
X0VNQkVERElORyB8fCBkaXIgPT0gVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFIHx8IGRpciA9PSBV
X1JJR0hUX1RPX0xFRlRfRU1CRURESU5HIHx8IGRpciA9PSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJ
REUpOwotICAgIG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVuY2UuYXBwZW5kKEJpZGlF
bWJlZGRpbmcoZGlyLCBzb3VyY2UpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3Is
IHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJC
YXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmNoZWNrRGlyZWN0aW9uSW5Mb3dlclJh
aXNlRW1iZWRkaW5nTGV2ZWwoKQotewotICAgIEFTU0VSVChtX3N0YXR1cy5lb3IgIT0gVV9PVEhF
Ul9ORVVUUkFMIHx8IG1fZW9yLmF0RW5kKCkpOwotICAgIEFTU0VSVChtX3N0YXR1cy5sYXN0ICE9
IFVfRElSX05PTl9TUEFDSU5HX01BUksKLSAgICAgICAgJiYgbV9zdGF0dXMubGFzdCAhPSBVX0JP
VU5EQVJZX05FVVRSQUwKLSAgICAgICAgJiYgbV9zdGF0dXMubGFzdCAhPSBVX1JJR0hUX1RPX0xF
RlRfRU1CRURESU5HCi0gICAgICAgICYmIG1fc3RhdHVzLmxhc3QgIT0gVV9MRUZUX1RPX1JJR0hU
X0VNQkVERElORwotICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfUklHSFRfVE9fTEVGVF9P
VkVSUklERSAKLSAgICAgICAgJiYgbV9zdGF0dXMubGFzdCAhPSBVX0xFRlRfVE9fUklHSFRfT1ZF
UlJJREUKLSAgICAgICAgJiYgbV9zdGF0dXMubGFzdCAhPSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JN
QVQpOwotICAgIGlmIChtX2RpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwpCi0gICAgICAgIG1f
ZGlyZWN0aW9uID0gbV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQgPyBVX0xF
RlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KLXZvaWQgQmlkaVJl
c29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojpsb3dlckV4cGxpY2l0RW1i
ZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSkKLXsKLSAgICBpZiAoIW1fZW1wdHlSdW4g
JiYgbV9lb3IgIT0gbV9sYXN0KSB7Ci0gICAgICAgIGNoZWNrRGlyZWN0aW9uSW5Mb3dlclJhaXNl
RW1iZWRkaW5nTGV2ZWwoKTsKLSAgICAgICAgLy8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBi
aWRpLmxhc3QgZW9yOyBuZWVkIHRvIGFwcGVuZCB0aGUgYmlkaS5zb3ItYmlkaS5lb3IgcnVuIG9y
IGV4dGVuZCBpdCB0aHJvdWdoIGJpZGkubGFzdAotICAgICAgICBpZiAoZnJvbSA9PSBVX0xFRlRf
VE9fUklHSFQpIHsKLSAgICAgICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlk
aS5sYXN0IEwKLSAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1C
RVIpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRf
VE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0VVUk9QRUFO
X05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVN
QkVSKSB7Ci0gICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0FSQUJJQ19OVU1CRVI7Ci0g
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3Rh
dHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVS
T1BFQU5fTlVNQkVSIHx8IG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIgfHwgbV9zdGF0
dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgIGFwcGVuZFJ1
bigpOwotICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAg
IH0KLSAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgfQotCi0gICAgYXBwZW5kUnVuKCk7Ci0g
ICAgbV9lbXB0eVJ1biA9IHRydWU7Ci0KLSAgICAvLyBzb3IgZm9yIHRoZSBuZXcgcnVuIGlzIGRl
dGVybWluZWQgYnkgdGhlIGhpZ2hlciBsZXZlbCAocnVsZSBYMTApCi0gICAgc2V0TGFzdERpcihm
cm9tKTsKLSAgICBzZXRMYXN0U3Ryb25nRGlyKGZyb20pOwotICAgIG1fZW9yID0gSXRlcmF0b3Io
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5h
bWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERl
cml2ZWRDbGFzcz46OnJhaXNlRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVjdGlvbiBm
cm9tLCBVQ2hhckRpcmVjdGlvbiB0bykKLXsKLSAgICBpZiAoIW1fZW1wdHlSdW4gJiYgbV9lb3Ig
IT0gbV9sYXN0KSB7Ci0gICAgICAgIGNoZWNrRGlyZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5n
TGV2ZWwoKTsKLSAgICAgICAgLy8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3Qg
ZW9yOyBuZWVkIHRvIGFwcGVuZCB0aGUgYmlkaS5zb3ItYmlkaS5lb3IgcnVuIG9yIGV4dGVuZCBp
dCB0aHJvdWdoIGJpZGkubGFzdAotICAgICAgICBpZiAodG8gPT0gVV9MRUZUX1RPX1JJR0hUKSB7
Ci0gICAgICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBMCi0g
ICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7Ci0g
ICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUikgewotICAg
ICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9BUkFCSUNfTlVNQkVSOwotICAgICAgICAgICAg
ICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5sYXN0U3Ry
b25nICE9IFVfTEVGVF9UT19SSUdIVCAmJiBmcm9tID09IFVfTEVGVF9UT19SSUdIVCkgewotICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0g
VV9MRUZUX1RPX1JJR0hUOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG1fc3Rh
dHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIKLSAgICAgICAgICAgIHx8IChtX3N0YXR1cy5lb3Ig
PT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RP
X1JJR0hUIHx8IGZyb20gPT0gVV9SSUdIVF9UT19MRUZUKSkKLSAgICAgICAgICAgIHx8IChtX3N0
YXR1cy5lb3IgIT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgbV9zdGF0dXMubGFzdFN0cm9uZyA9PSBV
X0xFRlRfVE9fUklHSFQgJiYgZnJvbSA9PSBVX1JJR0hUX1RPX0xFRlQpKSB7Ci0gICAgICAgICAg
ICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZU
OwotICAgICAgICB9Ci0gICAgICAgIG1fZW9yID0gbV9sYXN0OwotICAgIH0KLQotICAgIGFwcGVu
ZFJ1bigpOwotICAgIG1fZW1wdHlSdW4gPSB0cnVlOwotCi0gICAgc2V0TGFzdERpcih0byk7Ci0g
ICAgc2V0TGFzdFN0cm9uZ0Rpcih0byk7Ci0gICAgbV9lb3IgPSBJdGVyYXRvcigpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVk
Q2xhc3M+Ci1ib29sIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNz
Pjo6Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcoKQotewotICAgIC8vIFdoZW4gd2UncmUgImluSXNv
bGF0ZSgpIiB3ZSdyZSByZXNvbHZpbmcgdGhlIHBhcmVudCBjb250ZXh0IHdoaWNoCi0gICAgLy8g
aWdub3JlcyAoc2tpcHMgb3ZlcikgdGhlIGlzb2xhdGVkIGNvbnRlbnQsIGluY2x1ZGluZyBlbWJl
ZGRpbmcgbGV2ZWxzLgotICAgIC8vIFdlIHNob3VsZCBuZXZlciBhY2NydWUgZW1iZWRkaW5nIGxl
dmVscyB3aGlsZSBza2lwcGluZyBvdmVyIGlzb2xhdGVkIGNvbnRlbnQuCi0gICAgQVNTRVJUKCFp
bklzb2xhdGUoKSB8fCBtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlLmlzRW1wdHko
KSk7Ci0KLSAgICBhdXRvIGZyb21MZXZlbCA9IGNvbnRleHQoKS0+bGV2ZWwoKTsKLSAgICBSZWZQ
dHI8QmlkaUNvbnRleHQ+IHRvQ29udGV4dCA9IGNvbnRleHQoKTsKLQotICAgIGZvciAoYXV0byYg
ZW1iZWRkaW5nIDogbV9jdXJyZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZSkgewotICAgICAg
ICBpZiAoZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQpIHsK
LSAgICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnRDb250ZXh0ID0gdG9Db250ZXh0LT5wYXJlbnQo
KSkKLSAgICAgICAgICAgICAgICB0b0NvbnRleHQgPSBwYXJlbnRDb250ZXh0OwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uID0gKGVtYmVkZGlu
Zy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORyB8fCBlbWJlZGRpbmcuZGly
ZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSkgPyBVX1JJR0hUX1RPX0xFRlQgOiBV
X0xFRlRfVE9fUklHSFQ7Ci0gICAgICAgICAgICBib29sIG92ZXJyaWRlID0gZW1iZWRkaW5nLmRp
cmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUgfHwgZW1iZWRkaW5nLmRpcmVjdGlv
biA9PSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREU7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IGxldmVsID0gdG9Db250ZXh0LT5sZXZlbCgpOwotICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9
PSBVX1JJR0hUX1RPX0xFRlQpCi0gICAgICAgICAgICAgICAgbGV2ZWwgPSBuZXh0R3JlYXRlck9k
ZExldmVsKGxldmVsKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsZXZlbCA9
IG5leHRHcmVhdGVyRXZlbkxldmVsKGxldmVsKTsKLSAgICAgICAgICAgIGlmIChsZXZlbCA8IDYx
KQotICAgICAgICAgICAgICAgIHRvQ29udGV4dCA9IEJpZGlDb250ZXh0OjpjcmVhdGUobGV2ZWws
IGRpcmVjdGlvbiwgb3ZlcnJpZGUsIGVtYmVkZGluZy5zb3VyY2UsIHRvQ29udGV4dC5nZXQoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHRvTGV2ZWwgPSB0b0NvbnRleHQtPmxldmVs
KCk7Ci0KLSAgICBpZiAodG9MZXZlbCA+IGZyb21MZXZlbCkKLSAgICAgICAgcmFpc2VFeHBsaWNp
dEVtYmVkZGluZ0xldmVsKGZyb21MZXZlbCAlIDIgPyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRf
VE9fUklHSFQsIHRvTGV2ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hU
KTsKLSAgICBlbHNlIGlmICh0b0xldmVsIDwgZnJvbUxldmVsKQotICAgICAgICBsb3dlckV4cGxp
Y2l0RW1iZWRkaW5nTGV2ZWwoZnJvbUxldmVsICUgMiA/IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVG
VF9UT19SSUdIVCk7Ci0KLSAgICBzZXRDb250ZXh0KFdURk1vdmUodG9Db250ZXh0KSk7Ci0KLSAg
ICBtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVlbmNlLmNsZWFyKCk7Ci0KLSAgICByZXR1
cm4gZnJvbUxldmVsICE9IHRvTGV2ZWw7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9y
LCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KLWlubGluZSB2b2lkIEJpZGlS
ZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6dXBkYXRlU3RhdHVzTGFz
dEZyb21DdXJyZW50RGlyZWN0aW9uKFVDaGFyRGlyZWN0aW9uIGRpckN1cnJlbnQpCi17Ci0gICAg
c3dpdGNoIChkaXJDdXJyZW50KSB7Ci0gICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5B
VE9SOgotICAgICAgICBpZiAobV9zdGF0dXMubGFzdCAhPSBVX0VVUk9QRUFOX05VTUJFUikKLSAg
ICAgICAgICAgIG1fc3RhdHVzLmxhc3QgPSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUjoKLSAg
ICBjYXNlIFVfQ09NTU9OX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgY2FzZSBVX1NFR01FTlRfU0VQ
QVJBVE9SOgotICAgIGNhc2UgVV9XSElURV9TUEFDRV9ORVVUUkFMOgotICAgIGNhc2UgVV9PVEhF
Ul9ORVVUUkFMOgotICAgICAgICBzd2l0Y2ggKG1fc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgY2Fz
ZSBVX0xFRlRfVE9fUklHSFQ6Ci0gICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUOgotICAgICAg
ICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6Ci0gICAgICAgIGNhc2UgVV9FVVJPUEVBTl9O
VU1CRVI6Ci0gICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgotICAgICAgICAgICAgbV9zdGF0
dXMubGFzdCA9IGRpckN1cnJlbnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIG1fc3RhdHVzLmxhc3QgPSBVX09USEVSX05FVVRSQUw7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVX0RJUl9OT05fU1BBQ0lOR19NQVJLOgotICAg
IGNhc2UgVV9CT1VOREFSWV9ORVVUUkFMOgotICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0VNQkVE
RElORzoKLSAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkc6Ci0gICAgY2FzZSBVX1JJ
R0hUX1RPX0xFRlRfT1ZFUlJJREU6Ci0gICAgY2FzZSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREU6
Ci0gICAgY2FzZSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQ6Ci0gICAgICAgIC8vIGlnbm9yZSB0
aGVzZQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAgICAg
ICBGQUxMVEhST1VHSDsKLSAgICBkZWZhdWx0OgotICAgICAgICBtX3N0YXR1cy5sYXN0ID0gZGly
Q3VycmVudDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFt
ZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KLWlubGluZSB2b2lkIEJpZGlSZXNvbHZlckJh
c2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6cmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCkK
LXsKLSAgICB1bnNpZ25lZCBjaGFyIGxldmVsTG93ID0gMTI4OwotICAgIHVuc2lnbmVkIGNoYXIg
bGV2ZWxIaWdoID0gMDsKLSAgICBmb3IgKFJ1biogcnVuID0gbV9ydW5zLmZpcnN0UnVuKCk7IHJ1
bjsgcnVuID0gcnVuLT5uZXh0KCkpIHsKLSAgICAgICAgbGV2ZWxIaWdoID0gc3RkOjptYXgocnVu
LT5sZXZlbCgpLCBsZXZlbEhpZ2gpOwotICAgICAgICBsZXZlbExvdyA9IHN0ZDo6bWluKHJ1bi0+
bGV2ZWwoKSwgbGV2ZWxMb3cpOwotICAgIH0KLQotICAgIC8vIFRoaXMgaW1wbGVtZW50cyByZW9y
ZGVyaW5nIG9mIHRoZSBsaW5lIChMMiBhY2NvcmRpbmcgdG8gQmlkaSBzcGVjKToKLSAgICAvLyBo
dHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkvI0wyCi0gICAgLy8gTDIuIEZyb20gdGhlIGhp
Z2hlc3QgbGV2ZWwgZm91bmQgaW4gdGhlIHRleHQgdG8gdGhlIGxvd2VzdCBvZGQgbGV2ZWwgb24g
ZWFjaCBsaW5lLAotICAgIC8vIHJldmVyc2UgYW55IGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgY2hh
cmFjdGVycyB0aGF0IGFyZSBhdCB0aGF0IGxldmVsIG9yIGhpZ2hlci4KLQotICAgIC8vIFJldmVy
c2luZyBpcyBvbmx5IGRvbmUgdXAgdG8gdGhlIGxvd2VzdCBvZGQgbGV2ZWwuCi0gICAgaWYgKCEo
bGV2ZWxMb3cgJSAyKSkKLSAgICAgICAgbGV2ZWxMb3crKzsKLQotICAgIHVuc2lnbmVkIGNvdW50
ID0gbV9ydW5zLnJ1bkNvdW50KCkgLSAxOwotCi0gICAgd2hpbGUgKGxldmVsSGlnaCA+PSBsZXZl
bExvdykgewotICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgUnVuKiBydW4gPSBtX3J1
bnMuZmlyc3RSdW4oKTsKLSAgICAgICAgd2hpbGUgKGkgPCBjb3VudCkgewotICAgICAgICAgICAg
Zm9yICg7aSA8IGNvdW50ICYmIHJ1biAmJiBydW4tPmxldmVsKCkgPCBsZXZlbEhpZ2g7IGkrKykK
LSAgICAgICAgICAgICAgICBydW4gPSBydW4tPm5leHQoKTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHN0YXJ0ID0gaTsKLSAgICAgICAgICAgIGZvciAoO2kgPD0gY291bnQgJiYgcnVuICYmIHJ1bi0+
bGV2ZWwoKSA+PSBsZXZlbEhpZ2g7IGkrKykKLSAgICAgICAgICAgICAgICBydW4gPSBydW4tPm5l
eHQoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IGkgLSAxOwotICAgICAgICAgICAgbV9y
dW5zLnJldmVyc2VSdW5zKHN0YXJ0LCBlbmQpOwotICAgICAgICB9Ci0gICAgICAgIGxldmVsSGln
aC0tOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1
biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9y
LCBSdW4sIERlcml2ZWRDbGFzcz46OmNyZWF0ZUJpZGlSdW5zRm9yTGluZShjb25zdCBJdGVyYXRv
ciYgZW5kLCBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlkZSwgYm9vbCBoYXJkTGluZUJy
ZWFrKQotewotICAgIEFTU0VSVChtX2RpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwpOwotCi0g
ICAgaWYgKG92ZXJyaWRlICE9IE5vVmlzdWFsT3ZlcnJpZGUpIHsKLSAgICAgICAgbV9lbXB0eVJ1
biA9IGZhbHNlOwotICAgICAgICBtX3NvciA9IG1fY3VycmVudDsKLSAgICAgICAgbV9lb3IgPSBJ
dGVyYXRvcigpOwotICAgICAgICB3aGlsZSAobV9jdXJyZW50ICE9IGVuZCAmJiAhbV9jdXJyZW50
LmF0RW5kKCkpIHsKLSAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OwotICAgICAgICAgICAg
aW5jcmVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9kaXJlY3Rpb24gPSBvdmVycmlkZSA9
PSBWaXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlID8gVV9MRUZUX1RPX1JJR0hUIDogVV9SSUdIVF9U
T19MRUZUOwotICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgbV9ydW5zLnNldExvZ2ljYWxs
eUxhc3RSdW4obV9ydW5zLmxhc3RSdW4oKSk7Ci0gICAgICAgIGlmIChvdmVycmlkZSA9PSBWaXN1
YWxSaWdodFRvTGVmdE92ZXJyaWRlICYmIG1fcnVucy5ydW5Db3VudCgpKQotICAgICAgICAgICAg
bV9ydW5zLnJldmVyc2VSdW5zKDAsIG1fcnVucy5ydW5Db3VudCgpIC0gMSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX2VtcHR5UnVuID0gdHJ1ZTsKLQotICAgIG1fZW9yID0gSXRl
cmF0b3IoKTsKLQotICAgIG1fbGFzdCA9IG1fY3VycmVudDsKLSAgICBib29sIHBhc3RFbmQgPSBm
YWxzZTsKLSAgICBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz4g
c3RhdGVBdEVuZDsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIFVDaGFyRGlyZWN0aW9u
IGRpckN1cnJlbnQ7Ci0gICAgICAgIGlmIChwYXN0RW5kICYmIChoYXJkTGluZUJyZWFrIHx8IG1f
Y3VycmVudC5hdEVuZCgpKSkgewotICAgICAgICAgICAgQmlkaUNvbnRleHQqIGMgPSBjb250ZXh0
KCk7Ci0gICAgICAgICAgICBpZiAoaGFyZExpbmVCcmVhaykgewotICAgICAgICAgICAgICAgIC8v
IEEgZGV2aWF0aW9uIGZyb20gdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0gaW4gb3JkZXIgdG8g
bWF0Y2gKLSAgICAgICAgICAgICAgICAvLyBXaW5JRSBhbmQgdXNlciBleHBlY3RhdGlvbnM6IGhh
cmQgbGluZSBicmVha3MgcmVzZXQgYmlkaSBzdGF0ZQotICAgICAgICAgICAgICAgIC8vIGNvbWlu
ZyBmcm9tIHVuaWNvZGUgYmlkaSBjb250cm9sIGNoYXJhY3RlcnMsIGJ1dCBub3QgdGhvc2UgZnJv
bQotICAgICAgICAgICAgICAgIC8vIERPTSBub2RlcyB3aXRoIHNwZWNpZmllZCBkaXJlY3Rpb25h
bGl0eQotICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQuc2V0Q29udGV4dChjLT5jb3B5U3RhY2tS
ZW1vdmluZ1VuaWNvZGVFbWJlZGRpbmdDb250ZXh0cygpKTsKLQotICAgICAgICAgICAgICAgIGRp
ckN1cnJlbnQgPSBzdGF0ZUF0RW5kLmNvbnRleHQoKS0+ZGlyKCk7Ci0gICAgICAgICAgICAgICAg
c3RhdGVBdEVuZC5zZXRFb3JEaXIoZGlyQ3VycmVudCk7Ci0gICAgICAgICAgICAgICAgc3RhdGVB
dEVuZC5zZXRMYXN0RGlyKGRpckN1cnJlbnQpOwotICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQu
c2V0TGFzdFN0cm9uZ0RpcihkaXJDdXJyZW50KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKGMtPnBhcmVudCgpKQotICAgICAgICAgICAgICAgICAgICBjID0g
Yy0+cGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IGMtPmRpcigpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGlyQ3VycmVudCA9IG1f
Y3VycmVudC5kaXJlY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0KCktPm92ZXJyaWRl
KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBVX1JJR0hUX1RPX0xFRlRf
RU1CRURESU5HCi0gICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9MRUZUX1RP
X1JJR0hUX0VNQkVERElORwotICAgICAgICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVf
UklHSFRfVE9fTEVGVF9PVkVSUklERQotICAgICAgICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50
ICE9IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERQotICAgICAgICAgICAgICAgICAgICAmJiBkaXJD
dXJyZW50ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCkKLSAgICAgICAgICAgICAgICBkaXJD
dXJyZW50ID0gY29udGV4dCgpLT5kaXIoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGRpckN1cnJl
bnQgPT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFSSykKLSAgICAgICAgICAgICAgICBkaXJDdXJyZW50
ID0gbV9zdGF0dXMubGFzdDsKLSAgICAgICAgfQotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgICAg
ICAvLyBPdXIgV2luZG93cyBidWlsZCBoYXNuJ3QgdXBkYXRlZCBpdHMgaGVhZGVycyBmcm9tIElD
VSA2LjEsIHdoaWNoIGRvZXNuJ3QgaGF2ZSB0aGVzZSBzeW1ib2xzLgotICAgICAgICBjb25zdCBV
Q2hhckRpcmVjdGlvbiBVX0ZJUlNUX1NUUk9OR19JU09MQVRFID0gc3RhdGljX2Nhc3Q8VUNoYXJE
aXJlY3Rpb24+KDE5KTsKLSAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rpb24gVV9MRUZUX1RPX1JJ
R0hUX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4oMjApOwotICAgICAgICBj
b25zdCBVQ2hhckRpcmVjdGlvbiBVX1JJR0hUX1RPX0xFRlRfSVNPTEFURSA9IHN0YXRpY19jYXN0
PFVDaGFyRGlyZWN0aW9uPigyMSk7Ci0gICAgICAgIGNvbnN0IFVDaGFyRGlyZWN0aW9uIFVfUE9Q
X0RJUkVDVElPTkFMX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4oMjIpOwot
I2VuZGlmCi0gICAgICAgIC8vIFdlIGlnbm9yZSBhbGwgY2hhcmFjdGVyIGRpcmVjdGlvbmFsaXR5
IHdoaWxlIGluIHVuaWNvZGUtYmlkaTogaXNvbGF0ZSBzcGFucy4KLSAgICAgICAgLy8gV2UnbGwg
aGFuZGxlIG9yZGVyaW5nIHRoZSBpc29sYXRlZCBjaGFyYWN0ZXJzIGluIGEgc2Vjb25kIHBhc3Mu
Ci0gICAgICAgIGlmIChpbklzb2xhdGUoKSB8fCBkaXJDdXJyZW50ID09IFVfRklSU1RfU1RST05H
X0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBVX0xFRlRfVE9fUklHSFRfSVNPTEFURSB8fCBkaXJD
dXJyZW50ID09IFVfUklHSFRfVE9fTEVGVF9JU09MQVRFIHx8IGRpckN1cnJlbnQgPT0gVV9QT1Bf
RElSRUNUSU9OQUxfSVNPTEFURSkKLSAgICAgICAgICAgIGRpckN1cnJlbnQgPSBVX09USEVSX05F
VVRSQUw7Ci0KLSAgICAgICAgQVNTRVJUKG1fc3RhdHVzLmVvciAhPSBVX09USEVSX05FVVRSQUwg
fHwgbV9lb3IuYXRFbmQoKSk7Ci0gICAgICAgIHN3aXRjaCAoZGlyQ3VycmVudCkgewotCi0gICAg
ICAgIC8vIGVtYmVkZGluZyBhbmQgb3ZlcnJpZGVzIChYMS1YOSBpbiB0aGUgQmlkaSBzcGVjcykK
LSAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HOgotICAgICAgICBjYXNlIFVf
TEVGVF9UT19SSUdIVF9FTUJFRERJTkc6Ci0gICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX09W
RVJSSURFOgotICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9PVkVSUklERToKLSAgICAgICAg
Y2FzZSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQ6Ci0gICAgICAgICAgICBlbWJlZChkaXJDdXJy
ZW50LCBGcm9tVW5pY29kZSk7Ci0gICAgICAgICAgICBjb21taXRFeHBsaWNpdEVtYmVkZGluZygp
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gc3Ryb25nIHR5cGVzCi0gICAgICAg
IGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAgICAgICAgICAgc3dpdGNoKG1fc3RhdHVzLmxhc3Qp
IHsKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKLSAgICAgICAgICAgICAg
ICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0VV
Uk9QRUFOX05VTUJFUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3QgIT0gVV9FVVJPUEVBTl9OVU1CRVIg
fHwgbV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgot
ICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUjoKLSAgICAg
ICAgICAgICAgICBjYXNlIFVfQ09NTU9OX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0JMT0NL
X1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBVX09USEVSX05FVVRSQUw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1
cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRoZSBudW1iZXJzIG5lZWQgdG8gYmUgb24gYSBoaWdoZXIgZW1i
ZWRkaW5nIGxldmVsLCBzbyBsZXQncyBjbG9zZSB0aGF0IHJ1bgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQoKS0+ZGlyKCkgIT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoZSBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcgZGly
ZWN0aW9uLCB3aGljaCBpcyBSCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9y
ID0gbV9sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9
IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBV
X0FSQUJJQ19OVU1CRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFyYWJpYyBudW1i
ZXJzIGFyZSBhbHdheXMgb24gYSBoaWdoZXIgZW1iZWRkaW5nIGxldmVsLCBzbyBsZXQncyBjbG9z
ZSB0aGF0IHJ1bgotICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0FSQUJJ
Q19OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigpICE9IFVfTEVGVF9UT19SSUdIVCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBuZXV0cmFscyB0YWtlIHRoZSBl
bWJlZGRpbmcgZGlyZWN0aW9uLCB3aGljaCBpcyBSCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rp
b24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vbGFzdCBzdHVmZiB0YWtlcyBlbWJlZGRpbmcgZGlyCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCgpLT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xF
RlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OwotICAgICAgICAgICAg
bV9zdGF0dXMuZW9yID0gVV9MRUZUX1RPX1JJR0hUOwotICAgICAgICAgICAgbV9zdGF0dXMubGFz
dFN0cm9uZyA9IFVfTEVGVF9UT19SSUdIVDsKLSAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9M
RUZUX1RPX1JJR0hUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVV9SSUdIVF9U
T19MRUZUX0FSQUJJQzoKLSAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG1fc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFVfTEVGVF9U
T19SSUdIVDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAgICAg
ICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgotICAgICAgICAgICAgICAgICAgICBhcHBl
bmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RP
X0xFRlRfQVJBQklDOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNl
IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0NP
TU1PTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9CT1VOREFSWV9O
RVVUUkFMOgotICAgICAgICAgICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNhc2Ug
VV9XSElURV9TUEFDRV9ORVVUUkFMOgotICAgICAgICAgICAgICAgIGNhc2UgVV9PVEhFUl9ORVVU
UkFMOgotICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5f
TlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdFN0cm9u
ZyA9PSBVX0xFRlRfVE9fUklHSFQgJiYgY29udGV4dCgpLT5kaXIoKSA9PSBVX0xFRlRfVE9fUklH
SFQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKQotICAgICAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdHVz
Lmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dCgpLT5kaXIoKSA9PSBVX0xFRlRfVE9fUklHSFQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZW9yID0gbV9jdXJyZW50OwotICAgICAg
ICAgICAgbV9zdGF0dXMuZW9yID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAgICAgICAgbV9zdGF0
dXMubGFzdFN0cm9uZyA9IGRpckN1cnJlbnQ7Ci0gICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVf
UklHSFRfVE9fTEVGVDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvLyB3ZWFr
IHR5cGVzOgotCi0gICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6Ci0gICAgICAgICAgICBp
ZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gaWYgbGFzdCBzdHJvbmcgd2FzIEFMIGNoYW5nZSBFTiB0byBBTgotICAg
ICAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMubGFzdCkgewotICAgICAgICAgICAgICAgICAg
ICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfTEVG
VF9UT19SSUdIVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBV
X1JJR0hUX1RPX0xFRlRfQVJBQklDOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfQVJBQklD
X05VTUJFUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OwotICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJB
VE9SOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfQ09NTU9OX05VTUJFUl9TRVBBUkFUT1I6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5f
TlVNQkVSKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJP
UEVBTl9OVU1CRVJfVEVSTUlOQVRPUjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0JPVU5E
QVJZX05FVVRSQUw6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgVV9PVEhFUl9ORVVUUkFMOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
c3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfUklHSFRfVE9fTEVGVCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFTnMgb24gYm90aCBzaWRlcyBiZWhhdmUg
bGlrZSBScywgc28gdGhlIG5ldXRyYWxzIHNob3VsZCBiZSBSLgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUZXJtaW5hdGUgdGhlIEVOIHJ1bi4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE1ha2UgYW4gUiBydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SID8gbV9s
YXN0QmVmb3JlRVQgOiBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVn
aW4gYSBuZXcgRU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVj
dGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJB
QklDX05VTUJFUikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSB0
aGUgQU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfUklH
SFRfVE9fTEVGVCB8fCBjb250ZXh0KCktPmRpcigpID09IFVfUklHSFRfVE9fTEVGVCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIGFuIFIgcnVuLgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fc3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVB
Tl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJlZm9yZUVUIDogbV9sYXN0OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEJlZ2luIGEgbmV3IEVOIHJ1bi4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9SSUdIVF9UT19MRUZUKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSBSIHJ1biB0byBpbmNsdWRlIHRoZSBuZXV0
cmFscy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fc3RhdHVzLmxhc3Qg
PT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJlZm9yZUVUIDogbV9sYXN0
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19M
RUZUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEJlZ2luIGEgbmV3IEVOIHJ1bi4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAg
ICAgICAgICAgICAgbV9zdGF0dXMuZW9yID0gVV9FVVJPUEVBTl9OVU1CRVI7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKLSAgICAgICAgICAgICAg
ICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBGQUxMVEhST1VHSDsKLSAgICAgICAgY2Fz
ZSBVX0FSQUJJQ19OVU1CRVI6Ci0gICAgICAgICAgICBkaXJDdXJyZW50ID0gVV9BUkFCSUNfTlVN
QkVSOwotICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1cy5sYXN0KSB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
KCktPmRpcigpID09IFVfTEVGVF9UT19SSUdIVCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIFVfQVJBQklDX05VTUJFUjoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1JJ
R0hUX1RPX0xFRlRfQVJBQklDOgotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVI6Ci0gICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OwotICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUikKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsKLSAgICAgICAg
ICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAg
ICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBVX0JPVU5EQVJZX05FVVRSQUw6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0JMT0NLX1NFUEFS
QVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBVX09USEVSX05FVVRSQUw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3Ig
PT0gVV9BUkFCSUNfTlVNQkVSCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAobV9zdGF0dXMu
ZW9yID09IFVfRVVST1BFQU5fTlVNQkVSICYmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfUklH
SFRfVE9fTEVGVCB8fCBjb250ZXh0KCktPmRpcigpID09IFVfUklHSFRfVE9fTEVGVCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB8fCAobV9zdGF0dXMuZW9yICE9IFVfRVVST1BFQU5fTlVNQkVS
ICYmIG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUICYmIGNvbnRleHQoKS0+
ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGVybWluYXRlIHRoZSBydW4gYmVmb3JlIHRoZSBuZXV0cmFscy4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVnaW4gYW4g
UiBydW4gZm9yIHRoZSBuZXV0cmFscy4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0
aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
ZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZGlyZWN0aW9uID0gbV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQgPyBVX0xF
RlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fZW9y
ID0gbV9sYXN0OwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2VvciA9IG1fY3VycmVu
dDsKLSAgICAgICAgICAgIG1fc3RhdHVzLmVvciA9IFVfQVJBQklDX05VTUJFUjsKLSAgICAgICAg
ICAgIGlmIChtX2RpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwpCi0gICAgICAgICAgICAgICAg
bV9kaXJlY3Rpb24gPSBVX0FSQUJJQ19OVU1CRVI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgIGNhc2UgVV9DT01N
T05fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVf
RVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6Ci0gICAgICAgICAgICBpZiAobV9zdGF0dXMubGFz
dCA9PSBVX0VVUk9QRUFOX05VTUJFUikgewotICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBV
X0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKLSAg
ICAgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBkaXJDdXJyZW50OwotICAgICAgICAgICAgfSBl
bHNlIGlmIChtX3N0YXR1cy5sYXN0ICE9IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IpCi0g
ICAgICAgICAgICAgICAgbV9sYXN0QmVmb3JlRVQgPSBtX2VtcHR5UnVuID8gbV9lb3IgOiBtX2xh
c3Q7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBib3VuZGFyeSBuZXV0cmFscyBz
aG91bGQgYmUgaWdub3JlZAotICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoKLSAgICAg
ICAgICAgIGlmIChtX2VvciA9PSBtX2xhc3QpCi0gICAgICAgICAgICAgICAgbV9lb3IgPSBtX2N1
cnJlbnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIG5ldXRyYWxzCi0gICAg
ICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBk
byB3ZSBkbyB3aXRoIG5ld2xpbmUgYW5kIHBhcmFncmFwaCBzZXBhcmF0b3JzIHRoYXQgY29tZSB0
byBoZXJlPwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFS
QVRPUjoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcnVsZSBMMS4KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAocGFzdEVuZCAmJiAobV9lb3IgPT0gbV9jdXJyZW50IHx8ICFuZWVkc0NvbnRp
bnVlUGFzdEVuZCgpKSkgewotICAgICAgICAgICAgaWYgKCFtX3JlYWNoZWRFbmRPZkxpbmUpIHsK
LSAgICAgICAgICAgICAgICBtX2VvciA9IGVuZE9mTGluZTsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKG1fc3RhdHVzLmVvcikgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19S
SUdIVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5lb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gbV9zdGF0dXMubGFzdFN0cm9uZyA9PSBV
X0xFRlRfVE9fUklHSFQgPyBVX0xFRlRfVE9fUklHSFQgOiBVX0VVUk9QRUFOX05VTUJFUjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBuZXV0cmFscyBpbiB0
aGlzIGNhc2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0
ODE3Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBt
X2N1cnJlbnQgPSBlbmQ7Ci0gICAgICAgICAgICBtX3N0YXR1cyA9IHN0YXRlQXRFbmQubV9zdGF0
dXM7Ci0gICAgICAgICAgICBtX3NvciA9IHN0YXRlQXRFbmQubV9zb3I7IAotICAgICAgICAgICAg
bV9lb3IgPSBzdGF0ZUF0RW5kLm1fZW9yOwotICAgICAgICAgICAgbV9sYXN0ID0gc3RhdGVBdEVu
ZC5tX2xhc3Q7Ci0gICAgICAgICAgICBtX3JlYWNoZWRFbmRPZkxpbmUgPSBzdGF0ZUF0RW5kLm1f
cmVhY2hlZEVuZE9mTGluZTsKLSAgICAgICAgICAgIG1fbGFzdEJlZm9yZUVUID0gc3RhdGVBdEVu
ZC5tX2xhc3RCZWZvcmVFVDsKLSAgICAgICAgICAgIG1fZW1wdHlSdW4gPSBzdGF0ZUF0RW5kLm1f
ZW1wdHlSdW47Ci0gICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfT1RIRVJfTkVVVFJBTDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlU3RhdHVzTGFzdEZy
b21DdXJyZW50RGlyZWN0aW9uKGRpckN1cnJlbnQpOwotICAgICAgICBtX2xhc3QgPSBtX2N1cnJl
bnQ7Ci0KLSAgICAgICAgaWYgKG1fZW1wdHlSdW4pIHsKLSAgICAgICAgICAgIG1fc29yID0gbV9j
dXJyZW50OwotICAgICAgICAgICAgbV9lbXB0eVJ1biA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaW5jcmVtZW50KCk7Ci0gICAgICAgIGlmICghbV9jdXJyZW50RXhwbGljaXRFbWJlZGRp
bmdTZXF1ZW5jZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGJvb2wgY29tbWl0dGVkID0gY29t
bWl0RXhwbGljaXRFbWJlZGRpbmcoKTsKLSAgICAgICAgICAgIGlmIChjb21taXR0ZWQgJiYgcGFz
dEVuZCkgewotICAgICAgICAgICAgICAgIG1fY3VycmVudCA9IGVuZDsKLSAgICAgICAgICAgICAg
ICBtX3N0YXR1cyA9IHN0YXRlQXRFbmQubV9zdGF0dXM7Ci0gICAgICAgICAgICAgICAgbV9zb3Ig
PSBzdGF0ZUF0RW5kLm1fc29yOyAKLSAgICAgICAgICAgICAgICBtX2VvciA9IHN0YXRlQXRFbmQu
bV9lb3I7Ci0gICAgICAgICAgICAgICAgbV9sYXN0ID0gc3RhdGVBdEVuZC5tX2xhc3Q7Ci0gICAg
ICAgICAgICAgICAgbV9yZWFjaGVkRW5kT2ZMaW5lID0gc3RhdGVBdEVuZC5tX3JlYWNoZWRFbmRP
ZkxpbmU7Ci0gICAgICAgICAgICAgICAgbV9sYXN0QmVmb3JlRVQgPSBzdGF0ZUF0RW5kLm1fbGFz
dEJlZm9yZUVUOwotICAgICAgICAgICAgICAgIG1fZW1wdHlSdW4gPSBzdGF0ZUF0RW5kLm1fZW1w
dHlSdW47Ci0gICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX09USEVSX05FVVRSQUw7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIXBhc3RFbmQgJiYgKG1fY3VycmVudCA9PSBlbmQgfHwgbV9jdXJyZW50LmF0RW5kKCkp
KSB7Ci0gICAgICAgICAgICBpZiAobV9lbXB0eVJ1bikKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIHN0YXRlQXRFbmQubV9zdGF0dXMgPSBtX3N0YXR1czsKLSAgICAgICAgICAg
IHN0YXRlQXRFbmQubV9zb3IgPSBtX3NvcjsKLSAgICAgICAgICAgIHN0YXRlQXRFbmQubV9lb3Ig
PSBtX2VvcjsKLSAgICAgICAgICAgIHN0YXRlQXRFbmQubV9sYXN0ID0gbV9sYXN0OwotICAgICAg
ICAgICAgc3RhdGVBdEVuZC5tX3JlYWNoZWRFbmRPZkxpbmUgPSBtX3JlYWNoZWRFbmRPZkxpbmU7
Ci0gICAgICAgICAgICBzdGF0ZUF0RW5kLm1fbGFzdEJlZm9yZUVUID0gbV9sYXN0QmVmb3JlRVQ7
Ci0gICAgICAgICAgICBzdGF0ZUF0RW5kLm1fZW1wdHlSdW4gPSBtX2VtcHR5UnVuOwotICAgICAg
ICAgICAgZW5kT2ZMaW5lID0gbV9sYXN0OwotICAgICAgICAgICAgcGFzdEVuZCA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX3J1bnMuc2V0TG9naWNhbGx5TGFzdFJ1bihtX3J1bnMu
bGFzdFJ1bigpKTsKLSAgICByZW9yZGVyUnVuc0Zyb21MZXZlbHMoKTsKLSAgICBlbmRPZkxpbmUg
PSBJdGVyYXRvcigpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUg
UnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Ci12b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0
b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6c2V0V2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9u
Rm9ySXNvbGF0ZWRSdW4oUnVuJiBydW4sIHNpemVfdCB0cmFuc2l0aW9uKQotewotICAgIEFTU0VS
VCghbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bi5jb250YWlu
cygmcnVuKSk7Ci0gICAgbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRl
ZFJ1bi5hZGQoJnJ1biwgdHJhbnNpdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KLXVuc2lnbmVkIEJpZGlS
ZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6d2hpdGVzcGFjZUNvbGxh
cHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVuJiBydW4pCi17Ci0gICAgcmV0dXJuIG1f
d2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4udGFrZSgmcnVuKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9CaWRpUnVuTGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjgzOGEyNTJj
NWMzMjRkZDMwN2ZkOGZlNWI2MmNkNDkzOTkyYmVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJ1
bkxpc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0IHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgot
ICovCi0KLSNpZm5kZWYgQmlkaVJ1bkxpc3RfaAotI2RlZmluZSBCaWRpUnVuTGlzdF9oCi0KLSNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10ZW1w
bGF0ZSA8Y2xhc3MgUnVuPgotY2xhc3MgQmlkaVJ1bkxpc3QgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEJpZGlSdW5MaXN0KTsKLXB1YmxpYzoKLSAgICBCaWRpUnVuTGlzdCgpCi0gICAgICAg
IDogbV9sYXN0UnVuKG51bGxwdHIpCi0gICAgICAgICwgbV9sb2dpY2FsbHlMYXN0UnVuKG51bGxw
dHIpCi0gICAgICAgICwgbV9ydW5Db3VudCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBGSVhN
RTogT25jZSBCaWRpUmVzb2x2ZXIgbm8gbG9uZ2VyIG93bnMgdGhlIEJpZGlSdW5MaXN0LAotICAg
IC8vIHRoZW4gfkJpZGlSdW5MaXN0IHNob3VsZCBjYWxsIGRlbGV0ZVJ1bnMoKSBhdXRvbWF0aWNh
bGx5LgotCi0gICAgUnVuKiBmaXJzdFJ1bigpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RSdW4uZ2V0
KCk7IH0KLSAgICBSdW4qIGxhc3RSdW4oKSBjb25zdCB7IHJldHVybiBtX2xhc3RSdW47IH0KLSAg
ICBSdW4qIGxvZ2ljYWxseUxhc3RSdW4oKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxseUxhc3RS
dW47IH0KLSAgICB1bnNpZ25lZCBydW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuQ291bnQ7
IH0KLQotICAgIHZvaWQgYXBwZW5kUnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYpOwotICAgIHZv
aWQgcHJlcGVuZFJ1bihzdGQ6OnVuaXF1ZV9wdHI8UnVuPiYmKTsKLQotICAgIHZvaWQgbW92ZVJ1
blRvRW5kKFJ1biopOwotICAgIHZvaWQgbW92ZVJ1blRvQmVnaW5uaW5nKFJ1biopOwotCi0gICAg
dm9pZCBjbGVhcigpOwotICAgIHZvaWQgcmV2ZXJzZVJ1bnModW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGVuZCk7Ci0gICAgdm9pZCByZW9yZGVyUnVuc0Zyb21MZXZlbHMoKTsKLQotICAgIHZvaWQg
c2V0TG9naWNhbGx5TGFzdFJ1bihSdW4qIHJ1bikgeyBtX2xvZ2ljYWxseUxhc3RSdW4gPSBydW47
IH0KLQotICAgIHZvaWQgcmVwbGFjZVJ1bldpdGhSdW5zKFJ1biogdG9SZXBsYWNlLCBCaWRpUnVu
TGlzdDxSdW4+JiBuZXdSdW5zKTsKLQotcHJpdmF0ZToKLQotICAgIC8vIFRoZSBydW5zIGZvcm0g
YSBzaW5nbHktbGlua2VkLWxpc3QsIHdoZXJlIHRoZSBsaW5rcyAoUnVuOjptX25leHQpIGltcGx5
IG93bmVyc2hpcCAoYW5kIGFyZSBvZiB0eXBlIHN0ZDo6dW5pcXVlX3B0cikuCi0gICAgLy8gVGhl
IHJhdyBwb2ludGVycyBiZWxvdyBwb2ludCBpbnRvIHRoZSBzaW5nbHktbGlua2VkLWxpc3QuCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gbV9maXJzdFJ1bjsgLy8gVGhlIGhlYWQgb2YgdGhlIGxp
c3QKLSAgICBSdW4qIG1fbGFzdFJ1bjsKLSAgICBSdW4qIG1fbG9naWNhbGx5TGFzdFJ1bjsKLSAg
ICB1bnNpZ25lZCBtX3J1bkNvdW50OwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFJ1bj4KLWlubGlu
ZSB2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OmFwcGVuZFJ1bihzdGQ6OnVuaXF1ZV9wdHI8UnVuPiYm
IHJ1bikKLXsKLSAgICBpZiAoIW1fZmlyc3RSdW4pIHsKLSAgICAgICAgbV9maXJzdFJ1biA9IFdU
Rk1vdmUocnVuKTsKLSAgICAgICAgbV9sYXN0UnVuID0gbV9maXJzdFJ1bi5nZXQoKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZShydW4pKTsKLSAgICAg
ICAgbV9sYXN0UnVuID0gbV9sYXN0UnVuLT5uZXh0KCk7Ci0gICAgfQotICAgIG1fcnVuQ291bnQr
KzsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFJ1bj4KLWlubGluZSB2b2lkIEJpZGlSdW5MaXN0PFJ1
bj46OnByZXBlbmRSdW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJiBydW4pCi17Ci0gICAgQVNTRVJU
KCFydW4tPm5leHQoKSk7Ci0KLSAgICBpZiAoIW1fbGFzdFJ1bikKLSAgICAgICAgbV9sYXN0UnVu
ID0gcnVuLmdldCgpOwotICAgIGVsc2UKLSAgICAgICAgcnVuLT5zZXROZXh0KFdURk1vdmUobV9m
aXJzdFJ1bikpOwotICAgIG1fZmlyc3RSdW4gPSBXVEZNb3ZlKHJ1bik7Ci0gICAgbV9ydW5Db3Vu
dCsrOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotaW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8
UnVuPjo6bW92ZVJ1blRvRW5kKFJ1biogcnVuKQotewotICAgIEFTU0VSVChtX2ZpcnN0UnVuKTsK
LSAgICBBU1NFUlQobV9sYXN0UnVuKTsKLSAgICBBU1NFUlQocnVuLT5uZXh0KCkpOwotCi0gICAg
UnVuKiBwcmV2aW91cyA9IG51bGxwdHI7Ci0gICAgUnVuKiBjdXJyZW50ID0gbV9maXJzdFJ1bi5n
ZXQoKTsKLSAgICB3aGlsZSAoY3VycmVudCAhPSBydW4pIHsKLSAgICAgICAgcHJldmlvdXMgPSBj
dXJyZW50OwotICAgICAgICBjdXJyZW50ID0gcHJldmlvdXMtPm5leHQoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIXByZXZpb3VzKSB7Ci0gICAgICAgIEFTU0VSVChtX2ZpcnN0UnVuLmdldCgpID09IHJ1
bik7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IG9yaWdpbmFsRmlyc3RSdW4gPSBXVEZN
b3ZlKG1fZmlyc3RSdW4pOwotICAgICAgICBtX2ZpcnN0UnVuID0gb3JpZ2luYWxGaXJzdFJ1bi0+
dGFrZU5leHQoKTsKLSAgICAgICAgbV9sYXN0UnVuLT5zZXROZXh0KFdURk1vdmUob3JpZ2luYWxG
aXJzdFJ1bikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRh
cmdldCA9IHByZXZpb3VzLT50YWtlTmV4dCgpOwotICAgICAgICBwcmV2aW91cy0+c2V0TmV4dChj
dXJyZW50LT50YWtlTmV4dCgpKTsKLSAgICAgICAgbV9sYXN0UnVuLT5zZXROZXh0KFdURk1vdmUo
dGFyZ2V0KSk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotaW5saW5lIHZvaWQg
QmlkaVJ1bkxpc3Q8UnVuPjo6bW92ZVJ1blRvQmVnaW5uaW5nKFJ1biogcnVuKQotewotICAgIEFT
U0VSVChtX2ZpcnN0UnVuKTsKLSAgICBBU1NFUlQobV9sYXN0UnVuKTsKLSAgICBBU1NFUlQocnVu
ICE9IG1fZmlyc3RSdW4uZ2V0KCkpOwotCi0gICAgUnVuKiBwcmV2aW91cyA9IG1fZmlyc3RSdW4u
Z2V0KCk7Ci0gICAgUnVuKiBjdXJyZW50ID0gcHJldmlvdXMtPm5leHQoKTsKLSAgICB3aGlsZSAo
Y3VycmVudCAhPSBydW4pIHsKLSAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50OwotICAgICAgICBj
dXJyZW50ID0gcHJldmlvdXMtPm5leHQoKTsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UnVuPiB0YXJnZXQgPSBwcmV2aW91cy0+dGFrZU5leHQoKTsKLSAgICBwcmV2aW91cy0+c2V0TmV4
dChydW4tPnRha2VOZXh0KCkpOwotICAgIGlmIChydW4gPT0gbV9sYXN0UnVuKQotICAgICAgICBt
X2xhc3RSdW4gPSBwcmV2aW91czsKLQotICAgIHRhcmdldC0+c2V0TmV4dChXVEZNb3ZlKG1fZmly
c3RSdW4pKTsKLSAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZSh0YXJnZXQpOwotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgUnVuPgotdm9pZCBCaWRpUnVuTGlzdDxSdW4+OjpyZXBsYWNlUnVuV2l0aFJ1bnMo
UnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4mIG5ld1J1bnMpCi17Ci0gICAgQVNTRVJU
KG5ld1J1bnMucnVuQ291bnQoKSk7Ci0gICAgQVNTRVJUKG1fZmlyc3RSdW4pOwotICAgIEFTU0VS
VCh0b1JlcGxhY2UpOwotCi0gICAgbV9ydW5Db3VudCArPSBuZXdSdW5zLnJ1bkNvdW50KCkgLSAx
OyAvLyBXZSBhcmUgYWRkaW5nIHRoZSBuZXcgcnVucyBhbmQgcmVtb3ZpbmcgdG9SZXBsYWNlLgot
Ci0gICAgLy8gRml4IHVwIGFueSBwb2ludGVycyB3aGljaCBtYXkgZW5kIHVwIHN0YWxlLgotICAg
IGlmIChtX2xhc3RSdW4gPT0gdG9SZXBsYWNlKQotICAgICAgICBtX2xhc3RSdW4gPSBuZXdSdW5z
Lmxhc3RSdW4oKTsKLSAgICBpZiAobV9sb2dpY2FsbHlMYXN0UnVuID09IHRvUmVwbGFjZSkKLSAg
ICAgICAgbV9sb2dpY2FsbHlMYXN0UnVuID0gbmV3UnVucy5sb2dpY2FsbHlMYXN0UnVuKCk7Ci0K
LSAgICBpZiAobV9maXJzdFJ1bi5nZXQoKSA9PSB0b1JlcGxhY2UpIHsKLSAgICAgICAgbmV3UnVu
cy5tX2xhc3RSdW4tPnNldE5leHQobV9maXJzdFJ1bi0+dGFrZU5leHQoKSk7Ci0gICAgICAgIG1f
Zmlyc3RSdW4gPSBXVEZNb3ZlKG5ld1J1bnMubV9maXJzdFJ1bik7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gRmluZCB0aGUgcnVuIGp1c3QgYmVmb3JlICJ0b1JlcGxhY2UiIGluIHRoZSBsaXN0
IG9mIHJ1bnMuCi0gICAgICAgIFJ1biogcHJldmlvdXNSdW4gPSBtX2ZpcnN0UnVuLmdldCgpOwot
ICAgICAgICB3aGlsZSAocHJldmlvdXNSdW4tPm5leHQoKSAhPSB0b1JlcGxhY2UpCi0gICAgICAg
ICAgICBwcmV2aW91c1J1biA9IHByZXZpb3VzUnVuLT5uZXh0KCk7Ci0gICAgICAgIEFTU0VSVChw
cmV2aW91c1J1bik7Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJl
dmlvdXNSdW4tPnRha2VOZXh0KCk7Ci0gICAgICAgIHByZXZpb3VzUnVuLT5zZXROZXh0KFdURk1v
dmUobmV3UnVucy5tX2ZpcnN0UnVuKSk7Ci0gICAgICAgIG5ld1J1bnMubV9sYXN0UnVuLT5zZXRO
ZXh0KHRhcmdldC0+dGFrZU5leHQoKSk7Ci0gICAgfQotCi0gICAgbmV3UnVucy5jbGVhcigpOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotdm9pZCBCaWRpUnVuTGlzdDxSdW4+OjpjbGVhcigp
Ci17Ci0gICAgbV9maXJzdFJ1biA9IG51bGxwdHI7Ci0gICAgbV9sYXN0UnVuID0gbnVsbHB0cjsK
LSAgICBtX2xvZ2ljYWxseUxhc3RSdW4gPSBudWxscHRyOwotICAgIG1fcnVuQ291bnQgPSAwOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotdm9pZCBCaWRpUnVuTGlzdDxSdW4+OjpyZXZlcnNl
UnVucyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQotewotICAgIGlmIChzdGFydCA+PSBl
bmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKGVuZCA8IG1fcnVuQ291bnQpOwotCi0gICAgLy8gR2V0IHRoZSBpdGVtIGJlZm9yZSB0aGUg
c3RhcnQgb2YgdGhlIHJ1bnMgdG8gcmV2ZXJzZSBhbmQgcHV0IGl0IGluCi0gICAgLy8gfGJlZm9y
ZVN0YXJ0fC4gfGN1cnJ8IHNob3VsZCBwb2ludCB0byB0aGUgZmlyc3QgcnVuIHRvIHJldmVyc2Uu
Ci0gICAgUnVuKiBjdXJyID0gbV9maXJzdFJ1bi5nZXQoKTsKLSAgICBSdW4qIGJlZm9yZVN0YXJ0
ID0gbnVsbHB0cjsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHN0YXJ0OyAr
K2kpIHsKLSAgICAgICAgYmVmb3JlU3RhcnQgPSBjdXJyOwotICAgICAgICBjdXJyID0gY3Vyci0+
bmV4dCgpOwotICAgIH0KLSAgICBSdW4qIHN0YXJ0UnVuID0gY3VycjsKLQotICAgIGZvciAoOyBp
IDwgZW5kOyArK2kpCi0gICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0KCk7Ci0KLSAgICBpZiAoIWN1
cnItPm5leHQoKSkKLSAgICAgICAgbV9sYXN0UnVuID0gc3RhcnRSdW47Ci0KLSAgICAvLyBTdGFu
ZGFyZCAic2xpZGluZyB3aW5kb3ciIG9mIDMgcG9pbnRlcnMKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UnVuPiBwcmV2aW91cyA9IGN1cnItPnRha2VOZXh0KCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJ1
bj4gY3VycmVudCA9IGJlZm9yZVN0YXJ0ID8gYmVmb3JlU3RhcnQtPnRha2VOZXh0KCkgOiBXVEZN
b3ZlKG1fZmlyc3RSdW4pOwotICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxSdW4+IG5leHQgPSBjdXJyZW50LT50YWtlTmV4dCgpOwotICAgICAgICBjdXJyZW50
LT5zZXROZXh0KFdURk1vdmUocHJldmlvdXMpKTsKLSAgICAgICAgcHJldmlvdXMgPSBXVEZNb3Zl
KGN1cnJlbnQpOwotICAgICAgICBjdXJyZW50ID0gV1RGTW92ZShuZXh0KTsKLSAgICB9Ci0KLSAg
ICBpZiAoYmVmb3JlU3RhcnQpCi0gICAgICAgIGJlZm9yZVN0YXJ0LT5zZXROZXh0KFdURk1vdmUo
cHJldmlvdXMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZmlyc3RSdW4gPSBXVEZNb3ZlKHByZXZp
b3VzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQmlkaVJ1bkxp
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nV2l0aERp
cmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdXaXRoRGlyZWN0
aW9uLmgKaW5kZXggMDJmNDQ4MjAwYzk0NGM0YWUxNGYxMjk4YzM4YjI5MTE4NzM1ZDEzOS4uY2Fj
MDE0YWMyZGNiZTBjMjliMDI5NWNlZDQyNzQyNjdiZDY0YTAxYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmgKQEAgLTQ3LDcgKzQ3
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgU3RyaW5nV2l0aERpcmVjdGlvbiB7
CiAgICAgU3RyaW5nIHN0cmluZzsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiB7IFRleHRE
aXJlY3Rpb246OkxUUiB9OworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24geyBQQUw6
OlRleHREaXJlY3Rpb246OkxUUiB9OwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTdHJpbmdXaXRoRGlyZWN0aW9uJiBhLCBjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiBiKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGlyZWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHREaXJlY3Rpb24uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODVmZTk3ZGVhMGE1YjBiZTQ4N2ZiODJiMWRiMjU3ZDNlOTAz
MzE0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHREaXJlY3Rpb24uaAorKysgL2Rldi9udWxsCkBA
IC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1lbnVtIGNsYXNzIFRleHREaXJlY3Rpb24gOiBib29sIHsgTFRSLCBSVEwgfTsK
LQotaW5saW5lIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbikKLXsKLSAgICByZXR1cm4gZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUjsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlQmlk
aS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlQmlkaS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQ5Y2ZlZmU2NmM0Y2NmMzcyM2EwMjM1OWQ0NTcwNTcw
MDFlMjYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZUJpZGkuaAorKysgL2Rldi9udWxsCkBA
IC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFVuaWNvZGVCaWRpX2gKLSNkZWZpbmUgVW5pY29kZUJpZGlfaAotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gRVVuaWNvZGVCaWRpIHsKLSAgICBVQk5vcm1hbCwK
LSAgICBFbWJlZCwKLSAgICBPdmVycmlkZSwKLSAgICBJc29sYXRlLAotICAgIFBsYWludGV4dCwK
LSAgICBJc29sYXRlT3ZlcnJpZGUsCi19OyAKLQotaW5saW5lIGJvb2wgaXNJc29sYXRlZChjb25z
dCBFVW5pY29kZUJpZGkmIHVuaWNvZGVCaWRpKQotewotICAgIHJldHVybiB1bmljb2RlQmlkaSA9
PSBJc29sYXRlIHx8IHVuaWNvZGVCaWRpID09IElzb2xhdGVPdmVycmlkZSB8fCB1bmljb2RlQmlk
aSA9PSBQbGFpbnRleHQ7Ci19Ci0KLWlubGluZSBib29sIGlzT3ZlcnJpZGUoRVVuaWNvZGVCaWRp
IHVuaWNvZGVCaWRpKQotewotICAgIHJldHVybiB1bmljb2RlQmlkaSA9PSBPdmVycmlkZSB8fCB1
bmljb2RlQmlkaSA9PSBJc29sYXRlT3ZlcnJpZGU7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmgKaW5kZXggZTIwN2EzNzQ4NDYxZmQ5
ZjE5NmY4YzM3OTJmNDg5NTk1NTgwYjJmNC4uNDVlMjM0ZmZhNDBmMjAzYTQ2MTk4MDAyYWEzYzU0
NzE3NjNjNTYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Xcml0
aW5nTW9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvV3JpdGluZ01vZGUu
aApAQCAtMzEsOCArMzEsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlRleHREaXJl
Y3Rpb24uaCIKICNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RGlyZWN0
aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDMsNyArNDMsNyBAQCBlbnVtIGNs
YXNzIFdyaXRpbmdNb2RlIDogdWludDhfdCB7CiAgICAgUmlnaHRUb0xlZnQgPSAzLCAvLyB2ZXJ0
aWNhbC1ybAogfTsKIAotY29uc3RleHByIHVuc2lnbmVkIG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQorY29uc3Rl
eHByIHVuc2lnbmVkIG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPih3cml0aW5nTW9kZSkgPDwgMSB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
aXJlY3Rpb24pOwogfQpAQCAtNTEsMTcgKzUxLDE3IEBAIGNvbnN0ZXhwciB1bnNpZ25lZCBtYWtl
VGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9u
CiAvLyBEZWZpbmUgdGhlIHRleHQgZmxvdyBpbiB0ZXJtcyBvZiB0aGUgd3JpdGluZyBtb2RlIGFu
ZCB0aGUgdGV4dCBkaXJlY3Rpb24uIFRoZSBmaXJzdAogLy8gcGFydCBpcyB0aGUgbGluZSBncm93
aW5nIGRpcmVjdGlvbiBhbmQgdGhlIHNlY29uZCBwYXJ0IGlzIHRoZSBibG9jayBncm93aW5nIGRp
cmVjdGlvbi4KIGVudW0gVGV4dEZsb3cgewotICAgIElubGluZUVhc3RCbG9ja1NvdXRoID0gbWFr
ZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20sIFRleHREaXJlY3Rp
b246OkxUUiksCi0gICAgSW5saW5lV2VzdEJsb2NrU291dGggPSBtYWtlVGV4dEZsb3dJbml0YWxp
emVyKFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSwgVGV4dERpcmVjdGlvbjo6UlRMKSwKLSAgICBJ
bmxpbmVFYXN0QmxvY2tOb3J0aCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6
OkJvdHRvbVRvVG9wLCBUZXh0RGlyZWN0aW9uOjpMVFIpLAotICAgIElubGluZVdlc3RCbG9ja05v
cnRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3AsIFRl
eHREaXJlY3Rpb246OlJUTCksCi0gICAgSW5saW5lU291dGhCbG9ja0Vhc3QgPSBtYWtlVGV4dEZs
b3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCwgVGV4dERpcmVjdGlvbjo6TFRS
KSwKLSAgICBJbmxpbmVTb3V0aEJsb2NrV2VzdCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3Jp
dGluZ01vZGU6OkxlZnRUb1JpZ2h0LCBUZXh0RGlyZWN0aW9uOjpSVEwpLAotICAgIElubGluZU5v
cnRoQmxvY2tFYXN0ID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6UmlnaHRU
b0xlZnQsIFRleHREaXJlY3Rpb246OkxUUiksCi0gICAgSW5saW5lTm9ydGhCbG9ja1dlc3QgPSBt
YWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdCwgVGV4dERpcmVj
dGlvbjo6UlRMKQorICAgIElubGluZUVhc3RCbG9ja1NvdXRoID0gbWFrZVRleHRGbG93SW5pdGFs
aXplcihXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20sIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSwK
KyAgICBJbmxpbmVXZXN0QmxvY2tTb3V0aCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGlu
Z01vZGU6OlRvcFRvQm90dG9tLCBQQUw6OlRleHREaXJlY3Rpb246OlJUTCksCisgICAgSW5saW5l
RWFzdEJsb2NrTm9ydGggPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpCb3R0
b21Ub1RvcCwgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpLAorICAgIElubGluZVdlc3RCbG9ja05v
cnRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6Qm90dG9tVG9Ub3AsIFBB
TDo6VGV4dERpcmVjdGlvbjo6UlRMKSwKKyAgICBJbmxpbmVTb3V0aEJsb2NrRWFzdCA9IG1ha2VU
ZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0LCBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUiksCisgICAgSW5saW5lU291dGhCbG9ja1dlc3QgPSBtYWtlVGV4dEZsb3dJbml0
YWxpemVyKFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCwgUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwp
LAorICAgIElubGluZU5vcnRoQmxvY2tFYXN0ID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0
aW5nTW9kZTo6UmlnaHRUb0xlZnQsIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSwKKyAgICBJbmxp
bmVOb3J0aEJsb2NrV2VzdCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OlJp
Z2h0VG9MZWZ0LCBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkKIH07CiAKLWNvbnN0ZXhwciBpbmxp
bmUgVGV4dEZsb3cgbWFrZVRleHRGbG93KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbikKK2NvbnN0ZXhwciBpbmxpbmUgVGV4dEZsb3cgbWFrZVRleHRGbG93
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQog
ewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0Rmxvdz4obWFrZVRleHRGbG93SW5pdGFsaXpl
cih3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSk7CiB9CkBAIC05MywxMyArOTMsMTMgQEAgY29uc3Rl
eHByIGlubGluZSBib29sIGlzRmxpcHBlZExpbmVzVGV4dEZsb3coVGV4dEZsb3cgdGV4dGZsb3cp
CiAvLyBMaW5lcyBoYXZlIHZlcnRpY2FsIG9yaWVudGF0aW9uOyBtb2RlcyB2ZXJ0aWNhbC1sciBv
ciB2ZXJ0aWNhbC1ybC4KIGNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc1ZlcnRpY2FsV3JpdGluZ01v
ZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiB7Ci0gICAgcmV0dXJuIGlzVmVydGljYWxUZXh0
RmxvdyhtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb246OkxUUikpOworICAg
IHJldHVybiBpc1ZlcnRpY2FsVGV4dEZsb3cobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBQQUw6
OlRleHREaXJlY3Rpb246OkxUUikpOwogfQogCiAvLyBCbG9jayBwcm9ncmVzc2lvbiBpbmNyZWFz
ZXMgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byBub3JtYWw7IG1vZGVzIHZlcnRpY2FsLXJs
IG9yIGhvcml6b250YWwtYnQuCiBjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNGbGlwcGVkV3JpdGlu
Z01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiB7Ci0gICAgcmV0dXJuIGlzRmxpcHBlZFRl
eHRGbG93KG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbjo6TFRSKSk7Cisg
ICAgcmV0dXJuIGlzRmxpcHBlZFRleHRGbG93KG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIpKTsKIH0KIAogLy8gTGluZXMgaGF2ZSBob3Jpem9udGFsIG9y
aWVudGF0aW9uOyBtb2RlcyBob3Jpem9udGFsLXRiIG9yIGhvcml6b250YWwtYnQuCkBAIC0xMTEs
NyArMTExLDcgQEAgY29uc3RleHByIGlubGluZSBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogLy8gQm90dG9tIG9mIHRoZSBsaW5lIG9jY3VycyBl
YXJsaWVyIGluIHRoZSBibG9jazsgbW9kZXMgdmVydGljYWwtbHIgb3IgaG9yaXpvbnRhbC1idC4K
IGNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKQogewotICAgIHJldHVybiBpc0ZsaXBwZWRMaW5lc1RleHRGbG93KG1h
a2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbjo6TFRSKSk7CisgICAgcmV0dXJu
IGlzRmxpcHBlZExpbmVzVGV4dEZsb3cobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUikpOwogfQogCiBlbnVtIGNsYXNzIExvZ2ljYWxCb3hTaWRlIDogdWlu
dDhfdCB7CkBAIC0xOTEsNyArMTkxLDcgQEAgY29uc3RleHByIGlubGluZSBCb3hTaWRlIG1hcExv
Z2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUoVGV4dEZsb3cgdGV4dGZsb3csIExvZ2ljYWwKIGNvbnN0
ZXhwciBpbmxpbmUgQm94U2lkZSBtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlLCBMb2dpY2FsQm94U2lkZSBsb2dpY2FsU2lkZSkKIHsKICAgICAvLyBT
ZXQgdGhlIGRpcmVjdGlvbiBzdWNoIHRoYXQgc2lkZSBpcyBtaXJyb3JlZCBpZiBpc0ZsaXBwZWRX
cml0aW5nTW9kZSgpIGlzIHRydWUKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IGlzRmxp
cHBlZFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHRE
aXJlY3Rpb246OkxUUjsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gaXNGbGlw
cGVkV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICByZXR1cm4gbWFwTG9naWNhbFNpZGVUb1BoeXNp
Y2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIGxvZ2ljYWxTaWRl
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uY3BwCmluZGV4IDYxYWZlZWUzNDRi
YjlhMTM3YWQ2N2UwOGIwNzk1Y2ZlZjQ4OTcxNjEuLmM5MzMzYmQyZmUxYzgzYjQ3Njg1MTUyNTgw
ZmRhMDk5Y2JhNDE2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRp
UnVuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5jcHAKQEAgLTMx
LDggKzMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBERUZJTkVfREVCVUdfT05MWV9HTE9C
QUwoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIsIGJpZGlSdW5Db3VudGVyLCAoIkJpZGlSdW4i
KSk7CiAKLUJpZGlSdW46OkJpZGlSdW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIHN0b3AsIFJl
bmRlck9iamVjdCYgcmVuZGVyZXIsIEJpZGlDb250ZXh0KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlv
biBkaXIpCi0gICAgOiBCaWRpQ2hhcmFjdGVyUnVuKHN0YXJ0LCBzdG9wLCBjb250ZXh0LCBkaXIp
CitCaWRpUnVuOjpCaWRpUnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBzdG9wLCBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyLCBQQUw6OkJpZGlDb250ZXh0KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlv
biBkaXIpCisgICAgOiBQQUw6OkJpZGlDaGFyYWN0ZXJSdW4oc3RhcnQsIHN0b3AsIGNvbnRleHQs
IGRpcikKICAgICAsIG1fcmVuZGVyZXIocmVuZGVyZXIpCiAgICAgLCBtX2JveChudWxscHRyKQog
ewpAQCAtNTMsOCArNTMsOCBAQCBCaWRpUnVuOjp+QmlkaVJ1bigpCiAKIHN0ZDo6dW5pcXVlX3B0
cjxCaWRpUnVuPiBCaWRpUnVuOjp0YWtlTmV4dCgpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJp
ZGlDaGFyYWN0ZXJSdW4+IG5leHQgPSBCaWRpQ2hhcmFjdGVyUnVuOjp0YWtlTmV4dCgpOwotICAg
IEJpZGlDaGFyYWN0ZXJSdW4qIHJhdyA9IG5leHQucmVsZWFzZSgpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxQQUw6OkJpZGlDaGFyYWN0ZXJSdW4+IG5leHQgPSBQQUw6OkJpZGlDaGFyYWN0ZXJSdW46
OnRha2VOZXh0KCk7CisgICAgUEFMOjpCaWRpQ2hhcmFjdGVyUnVuKiByYXcgPSBuZXh0LnJlbGVh
c2UoKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4gcmVzdWx0ID0gc3RkOjp1bmlxdWVf
cHRyPEJpZGlSdW4+KHN0YXRpY19jYXN0PEJpZGlSdW4qPihyYXcpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmgKaW5kZXggZWQ3NzQ1ZDdkMWZhMGY0
ZWIzNjVkYTUyYjZlZDgwYmZlZWRhNTYxZi4uODk2NzA1ODBhNmYwZTI2OTMxZGRjNWFmZjlmN2E4
NTU3ZmNlZTgxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5oCkBAIC0yMywyMCArMjMs
MjMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDxwYWwvdGV4dC9CaWRpUmVzb2x2ZXIu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSAiQmlkaVJlc29sdmVy
LmgiCisKK25hbWVzcGFjZSBQQUwgeworY2xhc3MgQmlkaUNvbnRleHQ7Cit9CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgQmlkaUNvbnRleHQ7CiBjbGFzcyBMZWdhY3lJbmxpbmVCb3g7
CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiAKLXN0cnVjdCBCaWRpUnVuIDogQmlkaUNoYXJhY3RlclJ1
biB7Ci0gICAgQmlkaVJ1bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgc3RvcCwgUmVuZGVyT2Jq
ZWN0JiwgQmlkaUNvbnRleHQqLCBVQ2hhckRpcmVjdGlvbik7CitzdHJ1Y3QgQmlkaVJ1biA6IFBB
TDo6QmlkaUNoYXJhY3RlclJ1biB7CisgICAgQmlkaVJ1bih1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQgc3RvcCwgUmVuZGVyT2JqZWN0JiwgUEFMOjpCaWRpQ29udGV4dCosIFVDaGFyRGlyZWN0aW9u
KTsKICAgICB+QmlkaVJ1bigpOwogCi0gICAgQmlkaVJ1biogbmV4dCgpIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEJpZGlSdW4qPihCaWRpQ2hhcmFjdGVyUnVuOjpuZXh0KCkpOyB9CisgICAgQmlkaVJ1
biogbmV4dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJpZGlSdW4qPihQQUw6OkJpZGlDaGFyYWN0
ZXJSdW46Om5leHQoKSk7IH0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4gdGFrZU5leHQo
KTsKICAgICBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKCkgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQog
ICAgIExlZ2FjeUlubGluZUJveCogYm94KCkgeyByZXR1cm4gbV9ib3g7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCBmNmIxMWQ5ZDYyOWFjZmJmYjg3
ODYwY2I3YjhjZDI4Y2ViYzFiMThiLi41NDQzOWIzZjQ5OTc2OTM2ZmNmZGQwNDMwMGUwZWVjMGE0
ZWFhOTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBA
IC0yMjcsOSArMjI3LDkgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNlbGVjdGVkVGV4dCgpIGNv
bnN0CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLVN0cmluZyBIaXRUZXN0UmVzdWx0
OjpzcGVsbGluZ1Rvb2xUaXAoVGV4dERpcmVjdGlvbiYgZGlyKSBjb25zdAorU3RyaW5nIEhpdFRl
c3RSZXN1bHQ6OnNwZWxsaW5nVG9vbFRpcChQQUw6OlRleHREaXJlY3Rpb24mIGRpcikgY29uc3QK
IHsKLSAgICBkaXIgPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgZGlyID0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFI7CiAgICAgLy8gUmV0dXJuIHRoZSB0b29sIHRpcCBzdHJpbmcgYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgcG9pbnQsIGlmIGFueS4gT25seSBtYXJrZXJzIGFzc29jaWF0ZWQgd2l0aCBi
YWQgZ3JhbW1hcgogICAgIC8vIGN1cnJlbnRseSBzdXBwbHkgc3RyaW5ncywgYnV0IG1heWJlIHNv
bWVkYXkgbWFya2VycyBhc3NvY2lhdGVkIHdpdGggbWlzc3BlbGxlZCB3b3JkcyB3aWxsIGFsc28u
CiAgICAgaWYgKCFtX2lubmVyTm9uU2hhcmVkTm9kZSkKQEAgLTI1OCw5ICsyNTgsOSBAQCBTdHJp
bmcgSGl0VGVzdFJlc3VsdDo6cmVwbGFjZWRTdHJpbmcoKSBjb25zdAogICAgIHJldHVybiBtYXJr
ZXItPmRlc2NyaXB0aW9uKCk7CiB9ICAgIAogICAgIAotU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRp
dGxlKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKK1N0cmluZyBIaXRUZXN0UmVzdWx0Ojp0aXRs
ZShQQUw6OlRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKIHsKLSAgICBkaXIgPSBUZXh0RGlyZWN0
aW9uOjpMVFI7CisgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgLy8gRmlu
ZCB0aGUgdGl0bGUgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIERPTSBub2RlLgogICAgIC8vIEZv
ciA8YXJlYT4gdGFncyBpbiBpbWFnZSBtYXBzLCB3YWxrIHRoZSB0cmVlIGZvciB0aGUgPGFyZWE+
LCBub3QgdGhlIDxpbWc+IHVzaW5nIGl0LgogICAgIGZvciAoTm9kZSogdGl0bGVOb2RlID0gbV9p
bm5lck5vZGUuZ2V0KCk7IHRpdGxlTm9kZTsgdGl0bGVOb2RlID0gdGl0bGVOb2RlLT5wYXJlbnRJ
bkNvbXBvc2VkVHJlZSgpKSB7CkBAIC0yNzcsNyArMjc3LDcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1
bHQ6OnRpdGxlKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKLVN0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5lclRleHRJZlRydW5jYXRlZChUZXh0RGly
ZWN0aW9uJiBkaXIpIGNvbnN0CitTdHJpbmcgSGl0VGVzdFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVu
Y2F0ZWQoUEFMOjpUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiB7CiAgICAgZm9yIChOb2RlKiB0
cnVuY2F0ZWROb2RlID0gbV9pbm5lck5vZGUuZ2V0KCk7IHRydW5jYXRlZE5vZGU7IHRydW5jYXRl
ZE5vZGUgPSB0cnVuY2F0ZWROb2RlLT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpKSB7CiAgICAgICAg
IGlmICghaXM8RWxlbWVudD4oKnRydW5jYXRlZE5vZGUpKQpAQCAtMjk5LDcgKzI5OSw3IEBAIFN0
cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5lclRleHRJZlRydW5jYXRlZChUZXh0RGlyZWN0aW9uJiBk
aXIpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkaXIgPSBUZXh0RGlyZWN0aW9uOjpM
VFI7CisgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAppbmRleCAz
NWFhODBiNzQ0MDhiMzAwNDJmY2IzNDVmMmU0ZDE5NDJlMjI1OTE3Li40NDFiZDdmNjI5NTBkMGY4
MzY4YjM2MzJkNzMzMDhiNjAzN2EzNmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0UmVzdWx0LmgKQEAgLTk0LDEwICs5NCwxMCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgRnJhbWUqIHRhcmdldEZyYW1lKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBp
c1NlbGVjdGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlbGVjdGVkVGV4
dCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzcGVsbGluZ1Rvb2xUaXAoVGV4
dERpcmVjdGlvbiYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzcGVsbGluZ1Rv
b2xUaXAoUEFMOjpUZXh0RGlyZWN0aW9uJikgY29uc3Q7CiAgICAgU3RyaW5nIHJlcGxhY2VkU3Ry
aW5nKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRpdGxlKFRleHREaXJlY3Rp
b24mKSBjb25zdDsKLSAgICBTdHJpbmcgaW5uZXJUZXh0SWZUcnVuY2F0ZWQoVGV4dERpcmVjdGlv
biYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0aXRsZShQQUw6OlRleHREaXJl
Y3Rpb24mKSBjb25zdDsKKyAgICBTdHJpbmcgaW5uZXJUZXh0SWZUcnVuY2F0ZWQoUEFMOjpUZXh0
RGlyZWN0aW9uJikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGFsdERpc3BsYXlT
dHJpbmcoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdGl0bGVEaXNwbGF5U3Ry
aW5nKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2UqIGltYWdlKCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRlci5jcHAKaW5kZXggNWMx
OWM5MzAwNjAwZTM3N2Q5MmVkNjNmMWU4YjllYTRlNmJjYjZlZi4uNWFhZDFiZmIxNjhkNjhmM2Qy
OTIxODVhMDVhNzlmNmUwZDgzZTEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3hQYWludGVyLmNwcApAQCAtMzE5LDcgKzMxOSw3IEBAIHZvaWQgSW5saW5lQm94UGFp
bnRlcjo6cGFpbnRGaWxsTGF5ZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBGaWxsTGF5ZXIm
IGZpbGxMCiAgICAgLy8gdGhlIHByZXZpb3VzIGxpbmUgbGVmdCBvZmYuCiAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsT2Zmc2V0T25MaW5lOwogICAgIExheW91dFVuaXQgdG90YWxMb2dpY2FsV2lkdGg7
Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmRpcmVjdGlvbigpID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgIGZvciAoYXV0byBib3ggPSBtX2lubGluZUJv
eC5wcmV2aW91c0lubGluZUJveCgpOyBib3g7IGJveC50cmF2ZXJzZVByZXZpb3VzSW5saW5lQm94
KCkpCiAgICAgICAgICAgICBsb2dpY2FsT2Zmc2V0T25MaW5lICs9IGJveC0+bG9naWNhbFdpZHRo
KCk7CiAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoID0gbG9naWNhbE9mZnNldE9uTGluZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVCb3guaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVCb3guaAppbmRleCBhOTI0ZjZhMmEy
MDljNTQ0ODZhZTcxMWUzMjY4MTgyYTYxMmExMzQ2Li5lNjAwZjQ0YmNiZDY2ZDMxNjZiNGY5OWQ0
NzQ2OTQxMTdhMGVkNjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVn
YWN5SW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGlu
ZUJveC5oCkBAIC0yMDgsOCArMjA4LDggQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgY2hhciBi
aWRpTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5iaWRpRW1iZWRkaW5nTGV2ZWwo
KTsgfQogICAgIHZvaWQgc2V0QmlkaUxldmVsKHVuc2lnbmVkIGNoYXIgbGV2ZWwpIHsgbV9iaXRm
aWVsZHMuc2V0QmlkaUVtYmVkZGluZ0xldmVsKGxldmVsKTsgfQotICAgIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVsKCkgJSAyID8gVGV4dERpcmVjdGlv
bjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9Ci0gICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRS
OyB9CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJp
ZGlMZXZlbCgpICUgMiA/IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFI7IH0KKyAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBkaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsgfQogICAgIGludCBj
YXJldExlZnRtb3N0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gY2FyZXRNaW5PZmZzZXQoKSA6IGNhcmV0TWF4T2Zmc2V0KCk7IH0KICAgICBpbnQgY2Fy
ZXRSaWdodG1vc3RPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBjYXJldE1heE9mZnNldCgpIDogY2FyZXRNaW5PZmZzZXQoKTsgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lSXRlcmF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5oCmluZGV4IDdjNGI2N2I5
MTFjMTY4N2M4MDZjZGY5NDc2ZGFiYzRjNzE4OTQ2MzAuLjc0Y2UzMzE5NzhkYmQ2YjJjNjMzNWQ4
ODMwNDBjMTYwM2VjYjk1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
ZWdhY3lJbmxpbmVJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lJbmxpbmVJdGVyYXRvci5oCkBAIC0xNDAsMTEgKzE0MCwxMSBAQCBpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBpdDEsIGNvbnN0IExlZ2FjeUlubGlu
ZUl0ZXJhdAogICAgIHJldHVybiBpdDEub2Zmc2V0KCkgIT0gaXQyLm9mZnNldCgpIHx8IGl0MS5y
ZW5kZXJlcigpICE9IGl0Mi5yZW5kZXJlcigpOwogfQogCi1zdGF0aWMgaW5saW5lIFVDaGFyRGly
ZWN0aW9uIGVtYmVkQ2hhckZyb21EaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEVV
bmljb2RlQmlkaSB1bmljb2RlQmlkaSkKK3N0YXRpYyBpbmxpbmUgVUNoYXJEaXJlY3Rpb24gZW1i
ZWRDaGFyRnJvbURpcmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBQQUw6OkVV
bmljb2RlQmlkaSB1bmljb2RlQmlkaSkKIHsKLSAgICBpZiAodW5pY29kZUJpZGkgPT0gRW1iZWQp
Ci0gICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMID8gVV9SSUdI
VF9UT19MRUZUX0VNQkVERElORyA6IFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkc7Ci0gICAgcmV0
dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hUX1RPX0xFRlRfT1ZF
UlJJREUgOiBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREU7CisgICAgaWYgKHVuaWNvZGVCaWRpID09
IFBBTDo6RVVuaWNvZGVCaWRpOjpFbWJlZCkKKyAgICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OlJUTCA/IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgOiBVX0xF
RlRfVE9fUklHSFRfRU1CRURESU5HOworICAgIHJldHVybiBkaXJlY3Rpb24gPT0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUgOiBVX0xFRlRfVE9fUklH
SFRfT1ZFUlJJREU7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBPYnNlcnZlcj4KQEAgLTE1NCw4ICsx
NTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5T2JzZXJ2ZXJFbnRlcmVkT2JqZWN0KE9i
c2VydmVyKiBvYnNlcnZlciwgUmVuZGVyT2JqZWN0KgogICAgICAgICByZXR1cm47CiAKICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAgRVVuaWNvZGVC
aWRpIHVuaWNvZGVCaWRpID0gc3R5bGUudW5pY29kZUJpZGkoKTsKLSAgICBpZiAodW5pY29kZUJp
ZGkgPT0gVUJOb3JtYWwpIHsKKyAgICBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSA9IHN0
eWxlLnVuaWNvZGVCaWRpKCk7CisgICAgaWYgKHVuaWNvZGVCaWRpID09IFBBTDo6RVVuaWNvZGVC
aWRpOjpVQk5vcm1hbCkgewogICAgICAgICAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3Mz
LXdyaXRpbmctbW9kZXMvI3VuaWNvZGUtYmlkaQogICAgICAgICAvLyAiVGhlIGVsZW1lbnQgZG9l
cyBub3Qgb3BlbiBhbiBhZGRpdGlvbmFsIGxldmVsIG9mIGVtYmVkZGluZyB3aXRoIHJlc3BlY3Qg
dG8gdGhlIGJpZGlyZWN0aW9uYWwgYWxnb3JpdGhtLiIKICAgICAgICAgLy8gVGh1cyB3ZSBpZ25v
cmUgYW55IHBvc3NpYmxlIGRpcj0gYXR0cmlidXRlIG9uIHRoZSBzcGFuLgpAQCAtMTcxLDcgKzE3
MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlPYnNlcnZlckVudGVyZWRPYmplY3QoT2Jz
ZXJ2ZXIqIG9ic2VydmVyLCBSZW5kZXJPYmplY3QqCiAgICAgfQogCiAgICAgaWYgKCFvYnNlcnZl
ci0+aW5Jc29sYXRlKCkpCi0gICAgICAgIG9ic2VydmVyLT5lbWJlZChlbWJlZENoYXJGcm9tRGly
ZWN0aW9uKHN0eWxlLmRpcmVjdGlvbigpLCB1bmljb2RlQmlkaSksIEZyb21TdHlsZU9yRE9NKTsK
KyAgICAgICAgb2JzZXJ2ZXItPmVtYmVkKGVtYmVkQ2hhckZyb21EaXJlY3Rpb24oc3R5bGUuZGly
ZWN0aW9uKCksIHVuaWNvZGVCaWRpKSwgUEFMOjpGcm9tU3R5bGVPckRPTSk7CiB9CiAKIHRlbXBs
YXRlIDxjbGFzcyBPYnNlcnZlcj4KQEAgLTE4MCw4ICsxODAsOCBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgbm90aWZ5T2JzZXJ2ZXJXaWxsRXhpdE9iamVjdChPYnNlcnZlciogb2JzZXJ2ZXIsIFJlbmRl
ck9iamVjdAogICAgIGlmICghb2JzZXJ2ZXIgfHwgIW9iamVjdCB8fCAhb2JqZWN0LT5pc1JlbmRl
cklubGluZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJp
ZGkgPSBvYmplY3QtPnN0eWxlKCkudW5pY29kZUJpZGkoKTsKLSAgICBpZiAodW5pY29kZUJpZGkg
PT0gVUJOb3JtYWwpCisgICAgUEFMOjpFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkgPSBvYmplY3Qt
PnN0eWxlKCkudW5pY29kZUJpZGkoKTsKKyAgICBpZiAodW5pY29kZUJpZGkgPT0gUEFMOjpFVW5p
Y29kZUJpZGk6OlVCTm9ybWFsKQogICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG8gZm9y
IHVuaWNvZGUtYmlkaTogbm9ybWFsCiAgICAgaWYgKGlzSXNvbGF0ZWQodW5pY29kZUJpZGkpKSB7
CiAgICAgICAgIG9ic2VydmVyLT5leGl0SXNvbGF0ZSgpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlPYnNlcnZlcldpbGxFeGl0T2JqZWN0KE9ic2VydmVyKiBv
YnNlcnZlciwgUmVuZGVyT2JqZWN0CiAKICAgICAvLyBPdGhlcndpc2Ugd2UgcG9wIGFueSBlbWJl
ZC9vdmVycmlkZSBjaGFyYWN0ZXIgd2UgYWRkZWQgd2hlbiB3ZSBvcGVuZWQgdGhpcyB0YWcuCiAg
ICAgaWYgKCFvYnNlcnZlci0+aW5Jc29sYXRlKCkpCi0gICAgICAgIG9ic2VydmVyLT5lbWJlZChV
X1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQsIEZyb21TdHlsZU9yRE9NKTsKKyAgICAgICAgb2JzZXJ2
ZXItPmVtYmVkKFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCwgUEFMOjpGcm9tU3R5bGVPckRPTSk7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0l0ZXJhdG9yVGFyZ2V0KFJlbmRlck9iamVjdCog
b2JqZWN0KQpAQCAtMzcxLDEyICszNzEsNiBAQCBBTFdBWVNfSU5MSU5FIFVDaGFyRGlyZWN0aW9u
IExlZ2FjeUlubGluZUl0ZXJhdG9yOjpkaXJlY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBVX09U
SEVSX05FVVRSQUw7CiB9CiAKLXRlbXBsYXRlPD4KLWlubGluZSB2b2lkIElubGluZUJpZGlSZXNv
bHZlcjo6aW5jcmVtZW50SW50ZXJuYWwoKQotewotICAgIG1fY3VycmVudC5pbmNyZW1lbnQodGhp
cyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0lzb2xhdGVkSW5saW5lKFJlbmRlck9iamVj
dCYgb2JqZWN0KQogewogICAgIHJldHVybiBvYmplY3QuaXNSZW5kZXJJbmxpbmUoKSAmJiBpc0lz
b2xhdGVkKG9iamVjdC5zdHlsZSgpLnVuaWNvZGVCaWRpKCkpOwpAQCAtNDE1LDYgKzQwOSwxNiBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZShJ
bmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdgogICAgIHJlc29sdmVyLnJ1bnMoKS5hcHBlbmRSdW4o
V1RGTW92ZShpc29sYXRlZFJ1bikpOwogfQogCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25h
bWVzcGFjZSBQQUwgeworCit0ZW1wbGF0ZTw+CitpbmxpbmUgdm9pZCBXZWJDb3JlOjpJbmxpbmVC
aWRpUmVzb2x2ZXI6OmluY3JlbWVudEludGVybmFsKCkKK3sKKyAgICBtX2N1cnJlbnQuaW5jcmVt
ZW50KHRoaXMpOworfQorCiBjbGFzcyBJc29sYXRlVHJhY2tlciB7CiBwdWJsaWM6CiAgICAgZXhw
bGljaXQgSXNvbGF0ZVRyYWNrZXIodW5zaWduZWQgbmVzdGVkSXNvbGF0ZUNvdW50KQpAQCAtNDM0
LDI0ICs0MzgsMjQgQEAgcHVibGljOgogICAgIGJvb2wgaW5Jc29sYXRlKCkgY29uc3QgeyByZXR1
cm4gbV9uZXN0ZWRJc29sYXRlQ291bnQ7IH0KIAogICAgIC8vIFdlIGRvbid0IGNhcmUgaWYgd2Ug
ZW5jb3VudGVyIGJpZGkgZGlyZWN0aW9uYWwgb3ZlcnJpZGVzLgotICAgIHZvaWQgZW1iZWQoVUNo
YXJEaXJlY3Rpb24sIEJpZGlFbWJlZGRpbmdTb3VyY2UpIHsgfQorICAgIHZvaWQgZW1iZWQoVUNo
YXJEaXJlY3Rpb24sIFBBTDo6QmlkaUVtYmVkZGluZ1NvdXJjZSkgeyB9CiAgICAgdm9pZCBjb21t
aXRFeHBsaWNpdEVtYmVkZGluZygpIHsgfQogCi0gICAgdm9pZCBhZGRGYWtlUnVuSWZOZWNlc3Nh
cnkoUmVuZGVyT2JqZWN0JiBvYmosIHVuc2lnbmVkIHBvcywgdW5zaWduZWQgZW5kLCBSZW5kZXJF
bGVtZW50JiByb290LCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQorICAgIHZvaWQgYWRk
RmFrZVJ1bklmTmVjZXNzYXJ5KFdlYkNvcmU6OlJlbmRlck9iamVjdCYgb2JqLCB1bnNpZ25lZCBw
b3MsIHVuc2lnbmVkIGVuZCwgV2ViQ29yZTo6UmVuZGVyRWxlbWVudCYgcm9vdCwgV2ViQ29yZTo6
SW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKICAgICB7CiAgICAgICAgIC8vIFdlIG9ubHkg
bmVlZCB0byBhZGQgYSBmYWtlIHJ1biBmb3IgYSBnaXZlbiBpc29sYXRlZCBzcGFuIG9uY2UgZHVy
aW5nIGVhY2ggY2FsbCB0byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCiAgICAgICAgIC8vIFdlJ2xs
IGJlIGNhbGxlZCBmb3IgZXZlcnkgc3BhbiBpbnNpZGUgdGhlIGlzb2xhdGVkIHNwYW4gc28gd2Ug
anVzdCBpZ25vcmUgc3Vic2VxdWVudCBjYWxscy4KICAgICAgICAgLy8gV2UgYWxzbyBhdm9pZCBj
cmVhdGluZyBhIGZha2UgcnVuIHVudGlsIHdlIGhpdCBhIGNoaWxkIHRoYXQgd2FycmFudHMgb25l
LCBlLmcuIHdlIHNraXAgZmxvYXRzLgotICAgICAgICBpZiAoUmVuZGVyQmxvY2s6OnNob3VsZFNr
aXBDcmVhdGluZ1J1bnNGb3JPYmplY3Qob2JqKSkKKyAgICAgICAgaWYgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpzaG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9yT2JqZWN0KG9iaikpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGlmICghbV9oYXZlQWRkZWRGYWtlUnVuRm9yUm9vdElzb2xhdGUp
IHsKICAgICAgICAgICAgIC8vIG9iaiBhbmQgcG9zIHRvZ2V0aGVyIGRlbm90ZSBhIHNpbmdsZSBw
b3NpdGlvbiBpbiB0aGUgaW5saW5lLCBmcm9tIHdoaWNoIHRoZSBwYXJzaW5nIG9mIHRoZSBpc29s
YXRlIHdpbGwgc3RhcnQuCiAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIG1hcmsgdGhl
IGVuZCBvZiB0aGUgcnVuIGJlY2F1c2UgdGhpcyBpcyBpbXBsaWNpdDogaXQgaXMgZWl0aGVyIGVu
ZE9mTGluZSBvciB0aGUgZW5kIG9mIHRoZQogICAgICAgICAgICAgLy8gaXNvbGF0ZSwgd2hlbiB3
ZSBjYWxsIGNyZWF0ZUJpZGlSdW5zRm9yTGluZSBpdCB3aWxsIHN0b3AgYXQgd2hpY2hldmVyIGNv
bWVzIGZpcnN0LgotICAgICAgICAgICAgYWRkUGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGlu
ZShyZXNvbHZlciwgb2JqLCBwb3MsIHJvb3QpOworICAgICAgICAgICAgV2ViQ29yZTo6YWRkUGxh
Y2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZShyZXNvbHZlciwgb2JqLCBwb3MsIHJvb3QpOwog
ICAgICAgICB9CiAgICAgICAgIG1faGF2ZUFkZGVkRmFrZVJ1bkZvclJvb3RJc29sYXRlID0gdHJ1
ZTsKLSAgICAgICAgTGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVjdChudWxscHRy
LCBwb3MsIGVuZCwgb2JqLCByZXNvbHZlcik7CisgICAgICAgIFdlYkNvcmU6OkxlZ2FjeUxpbmVM
YXlvdXQ6OmFwcGVuZFJ1bnNGb3JPYmplY3QobnVsbHB0ciwgcG9zLCBlbmQsIG9iaiwgcmVzb2x2
ZXIpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTQ2MCw3ICs0NjQsNyBAQCBwcml2YXRlOgogfTsK
IAogdGVtcGxhdGU8PgotaW5saW5lIHZvaWQgSW5saW5lQmlkaVJlc29sdmVyOjphcHBlbmRSdW5J
bnRlcm5hbCgpCitpbmxpbmUgdm9pZCBXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVu
ZFJ1bkludGVybmFsKCkKIHsKICAgICBpZiAoIW1fZW1wdHlSdW4gJiYgIW1fZW9yLmF0RW5kKCkg
JiYgIW1fcmVhY2hlZEVuZE9mTGluZSkgewogICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHdoZW4g
d2UgZW50ZXIvbGVhdmUgInVuaWNvZGUtYmlkaTogaXNvbGF0ZSIgaW5saW5lcy4KQEAgLTQ2OCwx
NSArNDcyLDE1IEBAIGlubGluZSB2b2lkIElubGluZUJpZGlSZXNvbHZlcjo6YXBwZW5kUnVuSW50
ZXJuYWwoKQogICAgICAgICAvLyBGSVhNRTogQ291bGQgdGhpcyBpbml0aWFsaXplIGZyb20gdGhp
cy0+aW5Jc29sYXRlKCkgaW5zdGVhZCBvZiB3YWxraW5nIHVwIHRoZSByZW5kZXIgdHJlZT8KICAg
ICAgICAgSXNvbGF0ZVRyYWNrZXIgaXNvbGF0ZVRyYWNrZXIobnVtYmVyT2ZJc29sYXRlQW5jZXN0
b3JzKG1fc29yKSk7CiAgICAgICAgIGludCBzdGFydCA9IG1fc29yLm9mZnNldCgpOwotICAgICAg
ICBSZW5kZXJPYmplY3QqIG9iaiA9IG1fc29yLnJlbmRlcmVyKCk7CisgICAgICAgIFdlYkNvcmU6
OlJlbmRlck9iamVjdCogb2JqID0gbV9zb3IucmVuZGVyZXIoKTsKICAgICAgICAgd2hpbGUgKG9i
aiAmJiBvYmogIT0gbV9lb3IucmVuZGVyZXIoKSAmJiBvYmogIT0gZW5kT2ZMaW5lLnJlbmRlcmVy
KCkpIHsKICAgICAgICAgICAgIGlmIChpc29sYXRlVHJhY2tlci5pbklzb2xhdGUoKSkKICAgICAg
ICAgICAgICAgICBpc29sYXRlVHJhY2tlci5hZGRGYWtlUnVuSWZOZWNlc3NhcnkoKm9iaiwgc3Rh
cnQsIG9iai0+bGVuZ3RoKCksICptX3Nvci5yb290KCksICp0aGlzKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0
KCZtX3J1bnMsIHN0YXJ0LCBvYmotPmxlbmd0aCgpLCAqb2JqLCAqdGhpcyk7CisgICAgICAgICAg
ICAgICAgV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVjdCgmbV9y
dW5zLCBzdGFydCwgb2JqLT5sZW5ndGgoKSwgKm9iaiwgKnRoaXMpOwogICAgICAgICAgICAgLy8g
RklYTUU6IHN0YXJ0L29iaiBzaG91bGQgYmUgYW4gTGVnYWN5SW5saW5lSXRlcmF0b3IgaW5zdGVh
ZCBvZiB0d28gc2VwYXJhdGUgdmFyaWFibGVzLgogICAgICAgICAgICAgc3RhcnQgPSAwOwotICAg
ICAgICAgICAgb2JqID0gbmV4dElubGluZVJlbmRlcmVyU2tpcHBpbmdFbXB0eSgqbV9zb3Iucm9v
dCgpLCBvYmosICZpc29sYXRlVHJhY2tlcik7CisgICAgICAgICAgICBvYmogPSBXZWJDb3JlOjpu
ZXh0SW5saW5lUmVuZGVyZXJTa2lwcGluZ0VtcHR5KCptX3Nvci5yb290KCksIG9iaiwgJmlzb2xh
dGVUcmFja2VyKTsKICAgICAgICAgfQogICAgICAgICBpZiAob2JqKSB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBwb3MgPSBvYmogPT0gbV9lb3IucmVuZGVyZXIoKSA/IG1fZW9yLm9mZnNldCgpIDog
VUlOVF9NQVg7CkBAIC00ODksNyArNDkzLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lQmlkaVJlc29s
dmVyOjphcHBlbmRSdW5JbnRlcm5hbCgpCiAgICAgICAgICAgICBpZiAoaXNvbGF0ZVRyYWNrZXIu
aW5Jc29sYXRlKCkpCiAgICAgICAgICAgICAgICAgaXNvbGF0ZVRyYWNrZXIuYWRkRmFrZVJ1bklm
TmVjZXNzYXJ5KCpvYmosIHN0YXJ0LCBvYmotPmxlbmd0aCgpLCAqbV9zb3Iucm9vdCgpLCAqdGhp
cyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgTGVnYWN5TGluZUxheW91dDo6
YXBwZW5kUnVuc0Zvck9iamVjdCgmbV9ydW5zLCBzdGFydCwgZW5kLCAqb2JqLCAqdGhpcyk7Cisg
ICAgICAgICAgICAgICAgV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9i
amVjdCgmbV9ydW5zLCBzdGFydCwgZW5kLCAqb2JqLCAqdGhpcyk7CiAgICAgICAgIH0KIAogICAg
ICAgICBtX2Vvci5pbmNyZW1lbnQoKTsKQEAgLTUwMSwxMCArNTA1LDEwIEBAIGlubGluZSB2b2lk
IElubGluZUJpZGlSZXNvbHZlcjo6YXBwZW5kUnVuSW50ZXJuYWwoKQogfQogCiB0ZW1wbGF0ZTw+
Ci1pbmxpbmUgYm9vbCBJbmxpbmVCaWRpUmVzb2x2ZXI6Om5lZWRzQ29udGludWVQYXN0RW5kSW50
ZXJuYWwoKSBjb25zdAoraW5saW5lIGJvb2wgV2ViQ29yZTo6SW5saW5lQmlkaVJlc29sdmVyOjpu
ZWVkc0NvbnRpbnVlUGFzdEVuZEludGVybmFsKCkgY29uc3QKIHsKICAgICAvLyBXZSBkb24ndCBj
b2xsZWN0IHJ1bnMgYmV5b25kIHRoZSBlbmRPZkxpbmUgcmVuZGVyZXIuIFN0b3AgdHJhdmVyc2lu
ZyB3aGVuIHRoZSBpdGVyYXRvciBtb3ZlcyB0byB0aGUgbmV4dCByZW5kZXJlciB0byBwcmV2ZW50
IE8obl4yKS4KICAgICByZXR1cm4gbV9jdXJyZW50LnJlbmRlcmVyKCkgPT0gZW5kT2ZMaW5lLnJl
bmRlcmVyKCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFBB
TApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuY3BwCmluZGV4
IDhjZThmMWY3M2MyY2FmMTBiMjdkZDA3OWVlYTMwZDgwYjk5MzIyNDQuLjk4YzU4M2MwYTc1ZDA4
M2JmNWE1OTg5MTQyOWMyMzBkODUzMGE1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGVnYWN5TGluZUxheW91dC5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJMZWdh
Y3lMaW5lTGF5b3V0LmgiCiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAi
QmlkaVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQnJlYWtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCkBAIC01Myw2
ICs1Miw3IEBACiAjaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiVmVydGljYWxQb3NpdGlvbkNhY2hlLmgiCisjaW5jbHVkZSA8cGFs
L3RleHQvQmlkaVJlc29sdmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MCw3ICs3MCw3IEBAIExlZ2FjeUxpbmVMYXlvdXQ6On5M
ZWdhY3lMaW5lTGF5b3V0KCkKICAgICBsaW5lQm94ZXMoKS5kZWxldGVMaW5lQm94VHJlZSgpOwog
fTsKIAotc3RhdGljIHZvaWQgZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkoVGV4dERpcmVjdGlvbiYg
ZGlyLCBMZWdhY3lJbmxpbmVJdGVyYXRvciBpdGVyKQorc3RhdGljIHZvaWQgZGV0ZXJtaW5lRGly
ZWN0aW9uYWxpdHkoUEFMOjpUZXh0RGlyZWN0aW9uJiBkaXIsIExlZ2FjeUlubGluZUl0ZXJhdG9y
IGl0ZXIpCiB7CiAgICAgd2hpbGUgKCFpdGVyLmF0RW5kKCkpIHsKICAgICAgICAgaWYgKGl0ZXIu
YXRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkKQEAgLTc4LDExICs3OCwxMSBAQCBzdGF0aWMgdm9pZCBk
ZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShUZXh0RGlyZWN0aW9uJiBkaXIsIExlZ2FjeUlubGluZUl0
ZXJhdG9yIGl0ZQogICAgICAgICBpZiAoVUNoYXIgY3VycmVudCA9IGl0ZXIuY3VycmVudCgpKSB7
CiAgICAgICAgICAgICBVQ2hhckRpcmVjdGlvbiBjaGFyRGlyZWN0aW9uID0gdV9jaGFyRGlyZWN0
aW9uKGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKGNoYXJEaXJlY3Rpb24gPT0gVV9MRUZUX1RP
X1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgZGlyID0gVGV4dERpcmVjdGlvbjo6TFRSOworICAg
ICAgICAgICAgICAgIGRpciA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjaGFyRGlyZWN0aW9u
ID09IFVfUklHSFRfVE9fTEVGVCB8fCBjaGFyRGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9B
UkFCSUMpIHsKLSAgICAgICAgICAgICAgICBkaXIgPSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAg
ICAgICAgICAgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05NSw3ICs5NSw3IEBAIGlu
bGluZSBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4gY3JlYXRlUnVuKGludCBzdGFydCwgaW50IGVu
ZCwgUmVuZGVyT2JqZWN0JiBvYmosCiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8QmlkaVJ1bj4oc3Rh
cnQsIGVuZCwgb2JqLCByZXNvbHZlci5jb250ZXh0KCksIHJlc29sdmVyLmRpcigpKTsKIH0KIAot
dm9pZCBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJp
ZGlSdW4+KiBydW5zLCBpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCYgb2JqLCBJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQordm9pZCBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRS
dW5zRm9yT2JqZWN0KFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4qIHJ1bnMsIGludCBzdGFydCwg
aW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIp
CiB7CiAgICAgaWYgKHN0YXJ0ID4gZW5kIHx8IFJlbmRlckJsb2NrOjpzaG91bGRTa2lwQ3JlYXRp
bmdSdW5zRm9yT2JqZWN0KG9iaikpCiAgICAgICAgIHJldHVybjsKQEAgLTI3OCw3ICsyNzgsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgaW5saW5lIGJvb2wgZW5k
c1dpdGhIVE1MU3BhY2VzKGNvbnN0IENoYQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg
Ym9vbCByZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIoY29uc3QgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4m
IGJpZGlSdW5zKQorc3RhdGljIGJvb2wgcmVhY2hlZEVuZE9mVGV4dFJlbmRlcmVyKGNvbnN0IFBB
TDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zKQogewogICAgIEJpZGlSdW4qIHJ1biA9
IGJpZGlSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKICAgICBpZiAoIXJ1bikKQEAgLTI5Myw3ICsy
OTMsNyBAQCBzdGF0aWMgYm9vbCByZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIoY29uc3QgQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zKQogICAgIHJldHVybiBlbmRzV2l0aEhUTUxTcGFjZXMo
dGV4dC5jaGFyYWN0ZXJzMTYoKSwgcG9zaXRpb24sIGxlbmd0aCk7CiB9CiAKLUxlZ2FjeVJvb3RJ
bmxpbmVCb3gqIExlZ2FjeUxpbmVMYXlvdXQ6OmNvbnN0cnVjdExpbmUoQmlkaVJ1bkxpc3Q8Qmlk
aVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8pCitMZWdhY3lSb290SW5s
aW5lQm94KiBMZWdhY3lMaW5lTGF5b3V0Ojpjb25zdHJ1Y3RMaW5lKFBBTDo6QmlkaVJ1bkxpc3Q8
QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8pCiB7CiAgICAgQVNT
RVJUKGJpZGlSdW5zLmZpcnN0UnVuKCkpOwogCkBAIC0zNjMsNyArMzYzLDcgQEAgVGV4dEFsaWdu
TW9kZSBMZWdhY3lMaW5lTGF5b3V0Ojp0ZXh0QWxpZ25tZW50Rm9yTGluZShib29sIGVuZHNXaXRo
U29mdEJyZWFrKSBjb24KICNpZiBFTkFCTEUoQ1NTM19URVhUKQogICAgIFRleHRKdXN0aWZ5IHRl
eHRKdXN0aWZ5ID0gc3R5bGUoKS50ZXh0SnVzdGlmeSgpOwogICAgIGlmIChhbGlnbm1lbnQgPT0g
VGV4dEFsaWduTW9kZTo6SnVzdGlmeSAmJiB0ZXh0SnVzdGlmeSA9PSBUZXh0SnVzdGlmeTo6Tm9u
ZSkKLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6
TFRSID8gVGV4dEFsaWduTW9kZTo6TGVmdCA6IFRleHRBbGlnbk1vZGU6OlJpZ2h0OworICAgICAg
ICByZXR1cm4gc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/
IFRleHRBbGlnbk1vZGU6OkxlZnQgOiBUZXh0QWxpZ25Nb2RlOjpSaWdodDsKICNlbmRpZgogCiAg
ICAgaWYgKGVuZHNXaXRoU29mdEJyZWFrKQpAQCAtNjMxLDggKzYzMSw4IEBAIHZvaWQgTGVnYWN5
TGluZUxheW91dDo6Y29tcHV0ZUV4cGFuc2lvbkZvckp1c3RpZmllZFRleHQoQmlkaVJ1biogZmly
c3RSdW4sIEJpZGlSCiAKIHZvaWQgTGVnYWN5TGluZUxheW91dDo6dXBkYXRlTG9naWNhbFdpZHRo
Rm9yQWxpZ25tZW50KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgVGV4dEFsaWduTW9kZSYg
dGV4dEFsaWduLCBjb25zdCBMZWdhY3lSb290SW5saW5lQm94KiByb290SW5saW5lQm94LCBCaWRp
UnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9naWNhbExlZnQsIGZsb2F0JiB0b3RhbExv
Z2ljYWxXaWR0aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaW50IGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQpCiB7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgaWYg
KHJvb3RJbmxpbmVCb3ggJiYgZmxvdy5zdHlsZSgpLnVuaWNvZGVCaWRpKCkgPT0gUGxhaW50ZXh0
KQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb247CisgICAgaWYgKHJvb3RJbmxpbmVC
b3ggJiYgZmxvdy5zdHlsZSgpLnVuaWNvZGVCaWRpKCkgPT0gUEFMOjpFVW5pY29kZUJpZGk6OlBs
YWludGV4dCkKICAgICAgICAgZGlyZWN0aW9uID0gcm9vdElubGluZUJveC0+ZGlyZWN0aW9uKCk7
CiAgICAgZWxzZQogICAgICAgICBkaXJlY3Rpb24gPSBmbG93LnN0eWxlKCkuZGlyZWN0aW9uKCk7
CkBAIC02NjcsMTMgKzY2NywxMyBAQCB2b2lkIExlZ2FjeUxpbmVMYXlvdXQ6OnVwZGF0ZUxvZ2lj
YWxXaWR0aEZvckFsaWdubWVudChSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbgogICAgICAgICB9
CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0g
ICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAo
ZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgdXBkYXRl
TG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uLCB0
cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxX
aWR0aEZvclJpZ2h0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24sIHRyYWlsaW5n
U3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlTG9naWNh
bFdpZHRoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0g
ICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAo
ZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgdXBkYXRl
TG9naWNhbFdpZHRoRm9yUmlnaHRBbGlnbmVkQmxvY2soaXNMZWZ0VG9SaWdodERpcmVjdGlvbiwg
dHJhaWxpbmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFi
bGVMb2dpY2FsV2lkdGgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB1cGRhdGVMb2dpY2Fs
V2lkdGhGb3JMZWZ0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24sIHRyYWlsaW5n
U3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlTG9naWNh
bFdpZHRoKTsKQEAgLTg5Nyw3ICs4OTcsNyBAQCBCaWRpUnVuKiBMZWdhY3lMaW5lTGF5b3V0Ojpj
b21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVudChMZWdhY3lSb290SQogICAg
IEJpZGlSdW4qIHByZXZpb3VzUnVuID0gbnVsbHB0cjsKICAgICBmb3IgKDsgcnVuOyBydW4gPSBy
dW4tPm5leHQoKSkgewogICAgICAgICBhdXRvIGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVz
ID0gWyZleHBhbnNpb25PcHBvcnR1bml0aWVzLCAmZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCwg
dGV4dEFsaWduLCAmaXNBZnRlckV4cGFuc2lvbl0gKFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssCi0g
ICAgICAgICAgICBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBCaWRpUnVuKiBwcmV2aW91
c1J1biwgQmlkaVJ1biogbmV4dFJ1biwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbikKKyAgICAgICAgICAgIExlZ2FjeUlubGluZVRleHRCb3gmIHRleHRCb3gs
IEJpZGlSdW4qIHByZXZpb3VzUnVuLCBCaWRpUnVuKiBuZXh0UnVuLCBTdHJpbmdWaWV3IHN0cmlu
Z1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmIChzdHJpbmdWaWV3LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIC8vIEVtcHR5
IHJ1bnMgc2hvdWxkIHN0aWxsIHByb2R1Y2UgYW4gZW50cnkgaW4gZXhwYW5zaW9uT3Bwb3J0dW5p
dGllcyBsaXN0IHNvIHRoYXQgdGhlIG51bWJlciBvZiBpdGVtcyBtYXRjaGVzIHRoZSBudW1iZXIg
b2YgcnVucy4KQEAgLTEwOTEsNyArMTA5MSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZmlu
ZEZpcnN0VHJhaWxpbmdTcGFjZShjb25zdCBSZW5kZXJUZXh0JiBsYXN0VGV4dCwgY29uc3QKICAg
ICByZXR1cm4gZmlyc3RTcGFjZTsKIH0KIAotaW5saW5lIEJpZGlSdW4qIExlZ2FjeUxpbmVMYXlv
dXQ6OmhhbmRsZVRyYWlsaW5nU3BhY2VzKEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywg
QmlkaUNvbnRleHQqIGN1cnJlbnRDb250ZXh0KQoraW5saW5lIEJpZGlSdW4qIExlZ2FjeUxpbmVM
YXlvdXQ6OmhhbmRsZVRyYWlsaW5nU3BhY2VzKFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJp
ZGlSdW5zLCBQQUw6OkJpZGlDb250ZXh0KiBjdXJyZW50Q29udGV4dCkKIHsKICAgICBpZiAoIWJp
ZGlSdW5zLnJ1bkNvdW50KCkKICAgICAgICAgfHwgIWJpZGlSdW5zLmxvZ2ljYWxseUxhc3RSdW4o
KS0+cmVuZGVyZXIoKS5zdHlsZSgpLmJyZWFrT25seUFmdGVyV2hpdGVTcGFjZSgpCkBAIC0xMTEz
LDE3ICsxMTEzLDE3IEBAIGlubGluZSBCaWRpUnVuKiBMZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVU
cmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkCiAgICAgaWYgKGZpcnN0U3Bh
Y2UgPT0gdHJhaWxpbmdTcGFjZVJ1bi0+c3RvcCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rpb24oKTsKLSAg
ICBib29sIHNob3VsZFJlb3JkZXIgPSB0cmFpbGluZ1NwYWNlUnVuICE9IChkaXJlY3Rpb24gPT0g
VGV4dERpcmVjdGlvbjo6TFRSID8gYmlkaVJ1bnMubGFzdFJ1bigpIDogYmlkaVJ1bnMuZmlyc3RS
dW4oKSk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0
aW9uKCk7CisgICAgYm9vbCBzaG91bGRSZW9yZGVyID0gdHJhaWxpbmdTcGFjZVJ1biAhPSAoZGly
ZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gYmlkaVJ1bnMubGFzdFJ1bigpIDog
YmlkaVJ1bnMuZmlyc3RSdW4oKSk7CiAgICAgaWYgKGZpcnN0U3BhY2UgIT0gdHJhaWxpbmdTcGFj
ZVJ1bi0+c3RhcnQoKSkgewotICAgICAgICBCaWRpQ29udGV4dCogYmFzZUNvbnRleHQgPSBjdXJy
ZW50Q29udGV4dDsKLSAgICAgICAgd2hpbGUgKEJpZGlDb250ZXh0KiBwYXJlbnQgPSBiYXNlQ29u
dGV4dC0+cGFyZW50KCkpCisgICAgICAgIFBBTDo6QmlkaUNvbnRleHQqIGJhc2VDb250ZXh0ID0g
Y3VycmVudENvbnRleHQ7CisgICAgICAgIHdoaWxlIChQQUw6OkJpZGlDb250ZXh0KiBwYXJlbnQg
PSBiYXNlQ29udGV4dC0+cGFyZW50KCkpCiAgICAgICAgICAgICBiYXNlQ29udGV4dCA9IHBhcmVu
dDsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4gbmV3VHJhaWxpbmdSdW4gPSBt
YWtlVW5pcXVlPEJpZGlSdW4+KGZpcnN0U3BhY2UsIHRyYWlsaW5nU3BhY2VSdW4tPm1fc3RvcCwg
dHJhaWxpbmdTcGFjZVJ1bi0+cmVuZGVyZXIoKSwgYmFzZUNvbnRleHQsIFVfT1RIRVJfTkVVVFJB
TCk7CiAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1fc3RvcCA9IGZpcnN0U3BhY2U7CiAgICAg
ICAgIHRyYWlsaW5nU3BhY2VSdW4gPSBuZXdUcmFpbGluZ1J1bi5nZXQoKTsKLSAgICAgICAgaWYg
KGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChkaXJlY3Rpb24g
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBiaWRpUnVucy5hcHBlbmRS
dW4oV1RGTW92ZShuZXdUcmFpbGluZ1J1bikpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBi
aWRpUnVucy5wcmVwZW5kUnVuKFdURk1vdmUobmV3VHJhaWxpbmdSdW4pKTsKQEAgLTExMzIsNyAr
MTEzMiw3IEBAIGlubGluZSBCaWRpUnVuKiBMZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVUcmFpbGlu
Z1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkCiAgICAgaWYgKCFzaG91bGRSZW9yZGVy
KQogICAgICAgICByZXR1cm4gdHJhaWxpbmdTcGFjZVJ1bjsKIAotICAgIGlmIChkaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUikgewogICAgICAgICBiaWRpUnVucy5tb3ZlUnVuVG9FbmQodHJhaWxpbmdT
cGFjZVJ1bik7CiAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1fbGV2ZWwgPSAwOwogICAgIH0g
ZWxzZSB7CkBAIC0xMTcwLDcgKzExNzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0VXBSZXNv
bHZlclRvUmVzdW1lSW5Jc29sYXRlKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsCiB9CiAK
IC8vIEZJWE1FOiBCaWRpUmVzb2x2ZXIgc2hvdWxkIGhhdmUgdGhpcyBsb2dpYy4KLXN0YXRpYyBp
bmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQoSW5saW5lQmlkaVJlc29sdmVy
JiB0b3BSZXNvbHZlciwgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdh
Y3lJbmxpbmVJdGVyYXRvciYgZW5kT2ZSdW5zLCBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVy
cmlkZSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpCitzdGF0aWMgaW5saW5lIHZvaWQg
Y29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElubGluZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2
ZXIsIFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxp
bmVJdGVyYXRvciYgZW5kT2ZSdW5zLCBQQUw6OlZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJy
aWRlLCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkKIHsKICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHBhc3MgYSBCaWRpUnVuTGlzdCBpbnRvIGNyZWF0ZUJpZGlSdW5zRm9yTGluZSBpbnN0
ZWFkCiAgICAgLy8gb2YgdGhlIHJlc29sdmVyIG93bmluZyB0aGUgcnVucy4KQEAgLTExOTYsMTUg
KzExOTYsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVu
dChJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVyLAogICAgICAgICBBU1NFUlQoaXNvbGF0
ZWRJbmxpbmUpOwogCiAgICAgICAgIElubGluZUJpZGlSZXNvbHZlciBpc29sYXRlZFJlc29sdmVy
OwotICAgICAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkgPSBpc29sYXRlZElubGluZS0+c3R5
bGUoKS51bmljb2RlQmlkaSgpOwotICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKLSAg
ICAgICAgaWYgKHVuaWNvZGVCaWRpID09IFBsYWludGV4dCkKKyAgICAgICAgUEFMOjpFVW5pY29k
ZUJpZGkgdW5pY29kZUJpZGkgPSBpc29sYXRlZElubGluZS0+c3R5bGUoKS51bmljb2RlQmlkaSgp
OworICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgICAgICBpZiAodW5p
Y29kZUJpZGkgPT0gUEFMOjpFVW5pY29kZUJpZGk6OlBsYWludGV4dCkKICAgICAgICAgICAgIGRl
dGVybWluZURpcmVjdGlvbmFsaXR5KGRpcmVjdGlvbiwgTGVnYWN5SW5saW5lSXRlcmF0b3IoaXNv
bGF0ZWRJbmxpbmUsICZpc29sYXRlZFJ1bi5vYmplY3QsIDApKTsKICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBBU1NFUlQodW5pY29kZUJpZGkgPT0gSXNvbGF0ZSB8fCB1bmljb2RlQmlkaSA9
PSBJc29sYXRlT3ZlcnJpZGUpOworICAgICAgICAgICAgQVNTRVJUKHVuaWNvZGVCaWRpID09IFBB
TDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlIHx8IHVuaWNvZGVCaWRpID09IFBBTDo6RVVuaWNvZGVC
aWRpOjpJc29sYXRlT3ZlcnJpZGUpOwogICAgICAgICAgICAgZGlyZWN0aW9uID0gaXNvbGF0ZWRJ
bmxpbmUtPnN0eWxlKCkuZGlyZWN0aW9uKCk7CiAgICAgICAgIH0KLSAgICAgICAgaXNvbGF0ZWRS
ZXNvbHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyhkaXJlY3Rpb24sIGlzT3ZlcnJpZGUodW5pY29k
ZUJpZGkpKSk7CisgICAgICAgIGlzb2xhdGVkUmVzb2x2ZXIuc2V0U3RhdHVzKFBBTDo6QmlkaVN0
YXR1cyhkaXJlY3Rpb24sIGlzT3ZlcnJpZGUodW5pY29kZUJpZGkpKSk7CiAKICAgICAgICAgc2V0
VXBSZXNvbHZlclRvUmVzdW1lSW5Jc29sYXRlKGlzb2xhdGVkUmVzb2x2ZXIsIHRvcFJlc29sdmVy
LCBpc29sYXRlZFJ1bi5ydW5Ub1JlcGxhY2UsIGlzb2xhdGVkSW5saW5lLCAmc3RhcnRPYmplY3Qp
OwogCkBAIC0xMjE3LDcgKzEyMTcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29uc3RydWN0Qmlk
aVJ1bnNGb3JTZWdtZW50KElubGluZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIsCiAgICAgICAg
IC8vIFdlIHN0b3AgYXQgdGhlIG5leHQgZW5kIG9mIGxpbmU7IHdlIG1heSByZS1lbnRlciB0aGlz
IGlzb2xhdGUgaW4gdGhlIG5leHQgY2FsbCB0byBjb25zdHJ1Y3RCaWRpUnVucygpLgogICAgICAg
ICAvLyBGSVhNRTogV2hhdCBzaG91bGQgZW5kIGFuZCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkg
YmU/CiAgICAgICAgIC8vIHJuaXdhIHNheXMgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5IGlzIGp1
c3QgYSBXaW5JRSBoYWNrIGFuZCBjb3VsZCBhbHdheXMgYmUgZmFsc2UgaGVyZT8KLSAgICAgICAg
aXNvbGF0ZWRSZXNvbHZlci5jcmVhdGVCaWRpUnVuc0ZvckxpbmUoZW5kT2ZSdW5zLCBOb1Zpc3Vh
bE92ZXJyaWRlLCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOworICAgICAgICBpc29sYXRlZFJl
c29sdmVyLmNyZWF0ZUJpZGlSdW5zRm9yTGluZShlbmRPZlJ1bnMsIFBBTDo6VmlzdWFsRGlyZWN0
aW9uT3ZlcnJpZGU6Ok5vVmlzdWFsT3ZlcnJpZGUsIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7
CiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyBub3QgZGVsZXRlIHRoZSBydW5zIGZyb20gdGhl
IHJlc29sdmVyLgogICAgICAgICAvLyBXZSdyZSBub3QgZ3VhcmFudGVlZCB0byBnZXQgYW55IEJp
ZGlSdW5zIGluIHRoZSBwcmV2aW91cyBzdGVwLiBJZiB3ZSBkb24ndCwgd2UgYWxsb3cgdGhlIHBs
YWNlaG9sZGVyCiAgICAgICAgIC8vIGl0c2VsZiB0byBiZSB0dXJuZWQgaW50byBhbiBJbmxpbmVC
b3guIFdlIGNhbid0IHJlbW92ZSBpdCBoZXJlIHdpdGhvdXQgcG90ZW50aWFsbHkgbG9zaW5nIHRy
YWNrIG9mCkBAIC0xMjM3LDcgKzEyMzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29uc3RydWN0
QmlkaVJ1bnNGb3JTZWdtZW50KElubGluZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIsCiB9CiAK
IC8vIFRoaXMgZnVuY3Rpb24gY29uc3RydWN0cyBsaW5lIGJveGVzIGZvciBhbGwgb2YgdGhlIHRl
eHQgcnVucyBpbiB0aGUgcmVzb2x2ZXIgYW5kIGNvbXB1dGVzIHRoZWlyIHBvc2l0aW9uLgotTGVn
YWN5Um9vdElubGluZUJveCogTGVnYWN5TGluZUxheW91dDo6Y3JlYXRlTGluZUJveGVzRnJvbUJp
ZGlSdW5zKHVuc2lnbmVkIGJpZGlMZXZlbCwgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5z
LCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgZW5kLCBMaW5lSW5mbyYgbGluZUluZm8sIFZl
cnRpY2FsUG9zaXRpb25DYWNoZSYgdmVydGljYWxQb3NpdGlvbkNhY2hlLCBCaWRpUnVuKiB0cmFp
bGluZ1NwYWNlUnVuLCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQorTGVnYWN5
Um9vdElubGluZUJveCogTGVnYWN5TGluZUxheW91dDo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlS
dW5zKHVuc2lnbmVkIGJpZGlMZXZlbCwgUEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1
bnMsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiBsaW5lSW5mbywg
VmVydGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIEJpZGlSdW4qIHRy
YWlsaW5nU3BhY2VSdW4sIFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiB7CiAg
ICAgaWYgKCFiaWRpUnVucy5ydW5Db3VudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTEzMzgsNyArMTMzOCw3IEBAIHZvaWQgTGVnYWN5TGluZUxheW91dDo6bGF5b3V0UnVuc0FuZEZs
b2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhCiAgICAgLy8gV2UgYWxz
byBmaW5kIHRoZSBmaXJzdCBjbGVhbiBsaW5lIGFuZCBleHRyYWN0IHRoZXNlIGxpbmVzLiBXZSB3
aWxsIGFkZCB0aGVtIGJhY2sKICAgICAvLyBpZiB3ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBhYmxl
IHRvIHN5bmNocm9uaXplIGFmdGVyIGhhbmRsaW5nIGFsbCBvdXIgZGlydHkgbGluZXMuCiAgICAg
TGVnYWN5SW5saW5lSXRlcmF0b3IgY2xlYW5MaW5lU3RhcnQ7Ci0gICAgQmlkaVN0YXR1cyBjbGVh
bkxpbmVCaWRpU3RhdHVzOworICAgIFBBTDo6QmlkaVN0YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVz
OwogICAgIGlmICghbGF5b3V0U3RhdGUuaXNGdWxsTGF5b3V0KCkgJiYgc3RhcnRMaW5lKQogICAg
ICAgICBkZXRlcm1pbmVFbmRQb3NpdGlvbihsYXlvdXRTdGF0ZSwgc3RhcnRMaW5lLCBjbGVhbkxp
bmVTdGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1cyk7CiAKQEAgLTEzNzgsNyArMTM3OCw3IEBAIGlu
bGluZSBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgTGVnYWN5TGluZUxheW91dDo6cmVzdGFy
dExheW91dFJ1bnNBbmRGbG9hdHNJCiAgICAgcmV0dXJuIG9sZEVuZDsKIH0KIAotdm9pZCBMZWdh
Y3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBMZWdhY3lJ
bmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGlu
ZUJpZGlTdGF0dXMsIHVuc2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzKQordm9pZCBM
ZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBMZWdh
Y3lJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IFBBTDo6QmlkaVN0YXR1cyYg
Y2xlYW5MaW5lQmlkaVN0YXR1cywgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMp
CiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIGJv
b2wgcGFnaW5hdGVkID0gbGF5b3V0Q29udGV4dCgpLmxheW91dFN0YXRlKCkgJiYgbGF5b3V0Q29u
dGV4dCgpLmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGVkKCk7CkBAIC0xNDMxLDE1ICsxNDMxLDE1
IEBAIHZvaWQgTGVnYWN5TGluZUxheW91dDo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGlu
ZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICAgICAgICAgIGlmIChsYXN0Um9vdEJveCgp
KQogICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPnNldExpbmVCcmVha0luZm8oZW5kLnJl
bmRlcmVyKCksIGVuZC5vZmZzZXQoKSwgcmVzb2x2ZXIuc3RhdHVzKCkpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUgPSAoc3R5
bGVUb1VzZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpWaXN1YWwgPyAoc3R5bGVUb1VzZS5kaXJl
Y3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBWaXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRl
IDogVmlzdWFsUmlnaHRUb0xlZnRPdmVycmlkZSkgOiBOb1Zpc3VhbE92ZXJyaWRlKTsKKyAgICAg
ICAgICAgIFBBTDo6VmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUgPSAoc3R5bGVUb1Vz
ZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpWaXN1YWwgPyAoc3R5bGVUb1VzZS5kaXJlY3Rpb24o
KSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IFBBTDo6VmlzdWFsRGlyZWN0aW9uT3ZlcnJp
ZGU6OlZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUgOiBQQUw6OlZpc3VhbERpcmVjdGlvbk92ZXJy
aWRlOjpWaXN1YWxSaWdodFRvTGVmdE92ZXJyaWRlKSA6IFBBTDo6VmlzdWFsRGlyZWN0aW9uT3Zl
cnJpZGU6Ok5vVmlzdWFsT3ZlcnJpZGUpOwogCi0gICAgICAgICAgICBpZiAoaXNOZXdVQkFQYXJh
Z3JhcGggJiYgc3R5bGVUb1VzZS51bmljb2RlQmlkaSgpID09IFBsYWludGV4dCAmJiAhcmVzb2x2
ZXIuY29udGV4dCgpLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uID0gc3R5bGVUb1VzZS5kaXJlY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChpc05l
d1VCQVBhcmFncmFwaCAmJiBzdHlsZVRvVXNlLnVuaWNvZGVCaWRpKCkgPT0gUEFMOjpFVW5pY29k
ZUJpZGk6OlBsYWludGV4dCAmJiAhcmVzb2x2ZXIuY29udGV4dCgpLT5wYXJlbnQoKSkgeworICAg
ICAgICAgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdHlsZVRvVXNlLmRp
cmVjdGlvbigpOwogICAgICAgICAgICAgICAgIGRldGVybWluZURpcmVjdGlvbmFsaXR5KGRpcmVj
dGlvbiwgcmVzb2x2ZXIucG9zaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZXIuc2V0
U3RhdHVzKEJpZGlTdGF0dXMoZGlyZWN0aW9uLCBpc092ZXJyaWRlKHN0eWxlVG9Vc2UudW5pY29k
ZUJpZGkoKSkpKTsKKyAgICAgICAgICAgICAgICByZXNvbHZlci5zZXRTdGF0dXMoUEFMOjpCaWRp
U3RhdHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZShzdHlsZVRvVXNlLnVuaWNvZGVCaWRpKCkpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBvd25lcnNoaXAgaXMg
cmV2ZXJzZWQuIFdlIHNob3VsZCBvd24gdGhlIEJpZGlSdW5MaXN0IGFuZCBwYXNzIGl0IHRvIGNy
ZWF0ZUJpZGlSdW5zRm9yTGluZS4KLSAgICAgICAgICAgIEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBi
aWRpUnVucyA9IHJlc29sdmVyLnJ1bnMoKTsKKyAgICAgICAgICAgIFBBTDo6QmlkaVJ1bkxpc3Q8
QmlkaVJ1bj4mIGJpZGlSdW5zID0gcmVzb2x2ZXIucnVucygpOwogICAgICAgICAgICAgY29uc3Ry
dWN0QmlkaVJ1bnNGb3JTZWdtZW50KHJlc29sdmVyLCBiaWRpUnVucywgZW5kLCBvdmVycmlkZSwg
bGF5b3V0U3RhdGUubGluZUluZm8oKS5wcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKSk7CiAgICAg
ICAgICAgICBBU1NFUlQocmVzb2x2ZXIucG9zaXRpb24oKSA9PSBlbmQpOwogCkBAIC0xOTYzLDE3
ICsxOTYzLDE3IEBAIExlZ2FjeVJvb3RJbmxpbmVCb3gqIExlZ2FjeUxpbmVMYXlvdXQ6OmRldGVy
bWluZVN0YXJ0UG9zaXRpb24oTGluZUxheW91dFN0YXRlJiBsCiAgICAgICAgIHJlc29sdmVyLnNl
dFBvc2l0aW9uKGl0ZXIsIG51bWJlck9mSXNvbGF0ZUFuY2VzdG9ycyhpdGVyKSk7CiAgICAgICAg
IHJlc29sdmVyLnNldFN0YXR1cyhsYXN0TGluZS0+bGluZUJyZWFrQmlkaVN0YXR1cygpKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0eWxlKCkuZGly
ZWN0aW9uKCk7Ci0gICAgICAgIGlmIChzdHlsZSgpLnVuaWNvZGVCaWRpKCkgPT0gUGxhaW50ZXh0
KQorICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rp
b24oKTsKKyAgICAgICAgaWYgKHN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQQUw6OkVVbmljb2Rl
QmlkaTo6UGxhaW50ZXh0KQogICAgICAgICAgICAgZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkoZGly
ZWN0aW9uLCBMZWdhY3lJbmxpbmVJdGVyYXRvcigmbV9mbG93LCBmaXJzdElubGluZVJlbmRlcmVy
U2tpcHBpbmdFbXB0eShtX2Zsb3cpLCAwKSk7Ci0gICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhC
aWRpU3RhdHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpKSk7
CisgICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhQQUw6OkJpZGlTdGF0dXMoZGlyZWN0aW9uLCBp
c092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJpZGkoKSkpKTsKICAgICAgICAgTGVnYWN5SW5saW5l
SXRlcmF0b3IgaXRlciA9IExlZ2FjeUlubGluZUl0ZXJhdG9yKCZtX2Zsb3csIGZpcnN0SW5saW5l
UmVuZGVyZXJTa2lwcGluZ0VtcHR5KG1fZmxvdywgJnJlc29sdmVyKSwgMCk7CiAgICAgICAgIHJl
c29sdmVyLnNldFBvc2l0aW9uKGl0ZXIsIG51bWJlck9mSXNvbGF0ZUFuY2VzdG9ycyhpdGVyKSk7
CiAgICAgfQogICAgIHJldHVybiBjdXJyZW50TGluZTsKIH0KIAotdm9pZCBMZWdhY3lMaW5lTGF5
b3V0OjpkZXRlcm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBM
ZWdhY3lSb290SW5saW5lQm94KiBzdGFydExpbmUsIExlZ2FjeUlubGluZUl0ZXJhdG9yJiBjbGVh
bkxpbmVTdGFydCwgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cykKK3ZvaWQgTGVnYWN5
TGluZUxheW91dDo6ZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgTGVnYWN5Um9vdElubGluZUJveCogc3RhcnRMaW5lLCBMZWdhY3lJbmxpbmVJdGVyYXRv
ciYgY2xlYW5MaW5lU3RhcnQsIFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cykK
IHsKICAgICBhdXRvIGl0ZXJhdG9yRm9yRmlyc3REaXJ0eUZsb2F0ID0gW10oTGluZUxheW91dFN0
YXRlOjpGbG9hdExpc3QmIGZsb2F0cykgewogICAgICAgICBhdXRvIGxhc3RDbGVhbkZsb2F0ID0g
ZmxvYXRzLmxhc3RDbGVhbkZsb2F0KCk7CkBAIC0yMDg1LDcgKzIwODUsNyBAQCBib29sIExlZ2Fj
eUxpbmVMYXlvdXQ6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkKExlZ2FjeVJvb3RJ
bmxpbmVCb3gqIHJvbwogICAgIHJldHVybiByb290Qm94LT5wYWdpbmF0ZWRMaW5lV2lkdGgoKSAh
PSBtX2Zsb3cuYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChjdXJyZW50RnJhZ21lbnQp
OwogfQogCi1ib29sIExlZ2FjeUxpbmVMYXlvdXQ6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNv
bnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMm
IGVuZExpbmVTdGF0dXMpCitib29sIExlZ2FjeUxpbmVMYXlvdXQ6Om1hdGNoZWRFbmRMaW5lKExp
bmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IFBB
TDo6QmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1cykKIHsKICAgICBpZiAocmVzb2x2ZXIucG9zaXRp
b24oKSA9PSBlbmRMaW5lU3RhcnQpIHsKICAgICAgICAgaWYgKHJlc29sdmVyLnN0YXR1cygpICE9
IGVuZExpbmVTdGF0dXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVn
YWN5TGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlv
dXQuaAppbmRleCAxMmFkN2M5NTgwMzZmMzU1MTI0N2NmNTUwYjIyMDI3NmQzYzZlN2M4Li5hNTc0
OTVkY2U2MzRlZTJkZTAxNDk3MjcwNDI1ZmZlYzkyYmRhZDVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmgKQEAgLTMxLDkgKzMxLDE0IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJUcmFpbGluZ09iamVjdHMuaCIK
IAorbmFtZXNwYWNlIFBBTCB7Cit0ZW1wbGF0ZSA8Y2xhc3MgUnVuPiBjbGFzcyBCaWRpUnVuTGlz
dDsKK2NsYXNzIEJpZGlDb250ZXh0Oworc3RydWN0IEJpZGlTdGF0dXM7Cit9CisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgQmlkaUNvbnRleHQ7CiBjbGFzcyBGbG9hdGluZ09iamVjdDsK
IGNsYXNzIEZsb2F0V2l0aFJlY3Q7CiBjbGFzcyBGcmFtZVZpZXdMYXlvdXRDb250ZXh0OwpAQCAt
NDYsMTAgKzUxLDggQEAgY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyUnVieVJ1bjsK
IGNsYXNzIExlZ2FjeVJvb3RJbmxpbmVCb3g7CiBjbGFzcyBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGU7
Ci1zdHJ1Y3QgQmlkaVN0YXR1czsKIHN0cnVjdCBXb3JkTWVhc3VyZW1lbnQ7CiAKLXRlbXBsYXRl
IDxjbGFzcyBSdW4+IGNsYXNzIEJpZGlSdW5MaXN0OwogdHlwZWRlZiBWZWN0b3I8V29yZE1lYXN1
cmVtZW50LCA2ND4gV29yZE1lYXN1cmVtZW50czsKIAogY2xhc3MgTGVnYWN5TGluZUxheW91dCB7
CkBAIC02NiwxNCArNjksMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBsYXlvdXRMaW5lQm94ZXMo
Ym9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5
b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pOwogCi0gICAgTGVnYWN5Um9vdElubGluZUJv
eCogY29uc3RydWN0TGluZShCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIGNvbnN0IExpbmVJbmZvJik7
CisgICAgTGVnYWN5Um9vdElubGluZUJveCogY29uc3RydWN0TGluZShQQUw6OkJpZGlSdW5MaXN0
PEJpZGlSdW4+JiwgY29uc3QgTGluZUluZm8mKTsKICAgICBib29sIHBvc2l0aW9uTmV3RmxvYXRP
bkxpbmUoY29uc3QgRmxvYXRpbmdPYmplY3QmIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjdCogbGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZSwgTGluZUluZm8mLCBMaW5lV2lkdGgmKTsKICAgICB2b2lk
IGFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKCk7CiAKICAgICBzaXplX3QgbGluZUNvdW50
KCkgY29uc3Q7CiAgICAgc2l6ZV90IGxpbmVDb3VudFVudGlsKGNvbnN0IExlZ2FjeVJvb3RJbmxp
bmVCb3gqKSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3QoQmlk
aVJ1bkxpc3Q8QmlkaVJ1bj4qLCBpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCYsIElu
bGluZUJpZGlSZXNvbHZlciYpOworICAgIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3Qo
UEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVuPiosIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2Jq
ZWN0JiwgSW5saW5lQmlkaVJlc29sdmVyJik7CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlTG9naWNh
bFdpZHRoRm9yQWxpZ25tZW50KFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IFRleHRBbGlnbk1vZGUm
LCBjb25zdCBMZWdhY3lSb290SW5saW5lQm94KiwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwg
ZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgsIGZsb2F0JiBhdmFp
bGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KTsKIAogcHJp
dmF0ZToKQEAgLTg5LDIwICs5MiwyMCBAQCBwcml2YXRlOgogICAgIEJpZGlSdW4qIGNvbXB1dGVJ
bmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KExlZ2FjeVJvb3RJbmxpbmVCb3gqLCBj
b25zdCBMaW5lSW5mbyYsIFRleHRBbGlnbk1vZGUsIGZsb2F0JiBsb2dpY2FsTGVmdCwgZmxvYXQm
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWls
aW5nU3BhY2VSdW4sIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiwgVmVydGljYWxQ
b3NpdGlvbkNhY2hlJiwgV29yZE1lYXN1cmVtZW50cyYpOwogICAgIHZvaWQgcmVtb3ZlSW5saW5l
Qm94KEJpZGlSdW4mLCBjb25zdCBMZWdhY3lSb290SW5saW5lQm94JikgY29uc3Q7CiAgICAgdm9p
ZCBjb21wdXRlQmxvY2tEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKExlZ2FjeVJvb3RJbmxpbmVC
b3gqLCBCaWRpUnVuKiBmaXJzdFJ1biwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAm
IHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmKTsKLSAgICBpbmxpbmUgQmlk
aVJ1biogaGFuZGxlVHJhaWxpbmdTcGFjZXMoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5z
LCBCaWRpQ29udGV4dCogY3VycmVudENvbnRleHQpOworICAgIGlubGluZSBCaWRpUnVuKiBoYW5k
bGVUcmFpbGluZ1NwYWNlcyhQQUw6OkJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgUEFM
OjpCaWRpQ29udGV4dCogY3VycmVudENvbnRleHQpOwogICAgIHZvaWQgYXBwZW5kRmxvYXRpbmdP
YmplY3RUb0xhc3RMaW5lKEZsb2F0aW5nT2JqZWN0Jik7Ci0gICAgTGVnYWN5Um9vdElubGluZUJv
eCogY3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJpZGlMZXZlbCwgQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgZW5k
LCBMaW5lSW5mbyYsIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYsIEJpZGlSdW4qIHRyYWlsaW5nU3Bh
Y2VSdW4sIFdvcmRNZWFzdXJlbWVudHMmKTsKKyAgICBMZWdhY3lSb290SW5saW5lQm94KiBjcmVh
dGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnModW5zaWduZWQgYmlkaUxldmVsLCBQQUw6OkJpZGlSdW5M
aXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGVuZCwg
TGluZUluZm8mLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNl
UnVuLCBXb3JkTWVhc3VyZW1lbnRzJik7CiAgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzKExp
bmVMYXlvdXRTdGF0ZSYsIGJvb2wgaGFzSW5saW5lQ2hpbGQpOwogICAgIGlubGluZSBjb25zdCBM
ZWdhY3lJbmxpbmVJdGVyYXRvciYgcmVzdGFydExheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExh
eW91dFVuaXQgb2xkTG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBuZXdMb2dpY2FsSGVpZ2h0LCBG
bG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgSW5saW5lQmlkaVJlc29s
dmVyJiwgIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBvbGRFbmQpOwotICAgIHZvaWQgbGF5
b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlkaVJlc29s
dmVyJiwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBjb25zdCBC
aWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhl
bmF0ZWRMaW5lcyk7CisgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5
b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRv
ciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0
YXR1cywgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpOwogICAgIHZvaWQgcmVh
dHRhY2hDbGVhbkxpbmVGbG9hdHMoTGVnYWN5Um9vdElubGluZUJveCYgY2xlYW5MaW5lLCBMYXlv
dXRVbml0IGRlbHRhLCBib29sIGlzRmlyc3RDbGVhbkxpbmUpOwogICAgIHZvaWQgbGlua1RvRW5k
TGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYpOwogICAgIHZvaWQgY2hlY2tGbG9hdEluQ2xl
YW5MaW5lKExlZ2FjeVJvb3RJbmxpbmVCb3gmIGNsZWFuTGluZSwgUmVuZGVyQm94JiBmbG9hdEJv
eE9uQ2xlYW5MaW5lLCBGbG9hdFdpdGhSZWN0JiBtYXRjaGluZ0Zsb2F0V2l0aFJlY3QsIGJvb2wm
IGVuY291bnRlcmVkTmV3RmxvYXQsIGJvb2wmIGRpcnRpZWRCeUZsb2F0KTsKICAgICBMZWdhY3lS
b290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYsIElu
bGluZUJpZGlSZXNvbHZlciYpOwotICAgIHZvaWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxh
eW91dFN0YXRlJiwgTGVnYWN5Um9vdElubGluZUJveCogc3RhcnRMaW5lLCBMZWdhY3lJbmxpbmVJ
dGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMp
OworICAgIHZvaWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiwgTGVnYWN5
Um9vdElubGluZUJveCogc3RhcnRMaW5lLCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5l
U3RhcnQsIFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cyk7CiAgICAgYm9vbCBj
aGVja1BhZ2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUoTGluZUxheW91dFN0YXRlJik7CiAgICAg
Ym9vbCBsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChMZWdhY3lSb290SW5saW5lQm94
KiByb290Qm94LCBMYXlvdXRVbml0IGxpbmVEZWx0YSwgUmVuZGVyRnJhZ21lbnRlZEZsb3cqKSBj
b25zdDsKLSAgICBib29sIG1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYsIGNvbnN0IElu
bGluZUJpZGlSZXNvbHZlciYsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3Rh
cnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMpOworICAgIGJvb2wgbWF0Y2hlZEVu
ZExpbmUoTGluZUxheW91dFN0YXRlJiwgY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiwgY29uc3Qg
TGVnYWN5SW5saW5lSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgUEFMOjpCaWRpU3RhdHVz
JiBlbmRMaW5lU3RhdHVzKTsKICAgICB2b2lkIGRlbGV0ZUVsbGlwc2lzTGluZUJveGVzKCk7CiAg
ICAgdm9pZCBjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93KCk7CiAgICAgdm9pZCB1cGRhdGVGcmFn
bWVudEZvckxpbmUoTGVnYWN5Um9vdElubGluZUJveCopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guY3BwCmluZGV4IDhlMWEwZmJlZjU2
Y2Y2MTBlZDE3ZmFkN2M1ZTg0Y2E2NGM3NWQwMmIuLjc1YWU0YWY3NWQ0ODA0NzZiYjQ1OTBiYjcz
NDUxOWZjNDkyMzhhNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lSb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
Um9vdElubGluZUJveC5jcHAKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJMZWdhY3lSb290SW5saW5lQm94LmgiCiAKLSNpbmNsdWRlICJCaWRpUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclJ1
YnlUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlZlcnRpY2FsUG9z
aXRpb25DYWNoZS5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L0JpZGlSZXNvbHZlci5oPgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE5
OSwxMCArMTk5LDEwIEBAIHZvaWQgTGVnYWN5Um9vdElubGluZUJveDo6YWRqdXN0UG9zaXRpb24o
ZmxvYXQgZHgsIGZsb2F0IGR5KQogdm9pZCBMZWdhY3lSb290SW5saW5lQm94OjpjaGlsZFJlbW92
ZWQoTGVnYWN5SW5saW5lQm94KiBib3gpCiB7CiAgICAgaWYgKCZib3gtPnJlbmRlcmVyKCkgPT0g
bV9saW5lQnJlYWtPYmopCi0gICAgICAgIHNldExpbmVCcmVha0luZm8obnVsbHB0ciwgMCwgQmlk
aVN0YXR1cygpKTsKKyAgICAgICAgc2V0TGluZUJyZWFrSW5mbyhudWxscHRyLCAwLCBQQUw6OkJp
ZGlTdGF0dXMoKSk7CiAKICAgICBmb3IgKGF1dG8qIHByZXYgPSBwcmV2Um9vdEJveCgpOyBwcmV2
ICYmIHByZXYtPmxpbmVCcmVha09iaigpID09ICZib3gtPnJlbmRlcmVyKCk7IHByZXYgPSBwcmV2
LT5wcmV2Um9vdEJveCgpKSB7Ci0gICAgICAgIHByZXYtPnNldExpbmVCcmVha0luZm8obnVsbHB0
ciwgMCwgQmlkaVN0YXR1cygpKTsKKyAgICAgICAgcHJldi0+c2V0TGluZUJyZWFrSW5mbyhudWxs
cHRyLCAwLCBQQUw6OkJpZGlTdGF0dXMoKSk7CiAgICAgICAgIHByZXYtPm1hcmtEaXJ0eSgpOwog
ICAgIH0KIH0KQEAgLTU5OCwxMiArNTk4LDEyIEBAIFJlbmRlckJsb2NrRmxvdyYgTGVnYWN5Um9v
dElubGluZUJveDo6YmxvY2tGbG93KCkgY29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
QmxvY2tGbG93PihyZW5kZXJlcigpKTsKIH0KIAotQmlkaVN0YXR1cyBMZWdhY3lSb290SW5saW5l
Qm94OjpsaW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3QKK1BBTDo6QmlkaVN0YXR1cyBMZWdhY3lS
b290SW5saW5lQm94OjpsaW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3QKIHsgCiAgICAgcmV0dXJu
IHsgc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1c0Vvciks
IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPihtX2xpbmVCcmVha0JpZGlTdGF0dXNMYXN0U3Ry
b25nKSwgc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fbGluZUJyZWFrQmlkaVN0YXR1c0xh
c3QpLCBtX2xpbmVCcmVha0NvbnRleHQuY29weVJlZigpIH07CiB9CiAKLXZvaWQgTGVnYWN5Um9v
dElubGluZUJveDo6c2V0TGluZUJyZWFrSW5mbyhSZW5kZXJPYmplY3QqIG9iamVjdCwgdW5zaWdu
ZWQgYnJlYWtQb3NpdGlvbiwgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzKQordm9pZCBMZWdhY3lS
b290SW5saW5lQm94OjpzZXRMaW5lQnJlYWtJbmZvKFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNp
Z25lZCBicmVha1Bvc2l0aW9uLCBjb25zdCBQQUw6OkJpZGlTdGF0dXMmIHN0YXR1cykKIHsKICAg
ICBtX2xpbmVCcmVha09iaiA9IG9iamVjdDsKICAgICBtX2xpbmVCcmVha1BvcyA9IGJyZWFrUG9z
aXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElu
bGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3gu
aAppbmRleCBlY2VlMjY0ZGI1YzMyOWY1NGZkZDA4ZWYxOWFhYzA2ZTA4MDQzNmU1Li5lNTliNjQ2
MmU4ODI5YjVmNjVlYzk5NzY1MTZhYjI1NTQwZmMzNDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lSb290SW5saW5lQm94LmgKQEAgLTIwLDExICsyMCwxNSBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGVnYWN5
SW5saW5lRmxvd0JveC5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgPHBhbC90
ZXh0L0JpZGlDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAorbmFtZXNwYWNl
IFBBTCB7CitzdHJ1Y3QgQmlkaVN0YXR1czsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtMzMsNyArMzcsNiBAQCBjbGFzcyBMb2dpY2FsU2VsZWN0
aW9uT2Zmc2V0Q2FjaGVzOwogY2xhc3MgUmVuZGVyQmxvY2tGbG93OwogY2xhc3MgUmVuZGVyRnJh
Z21lbnRDb250YWluZXI7CiAKLXN0cnVjdCBCaWRpU3RhdHVzOwogc3RydWN0IEdhcFJlY3RzOwog
CiBjbGFzcyBMZWdhY3lSb290SW5saW5lQm94IDogcHVibGljIExlZ2FjeUlubGluZUZsb3dCb3gs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxMZWdhY3lSb290SW5saW5lQm94PiB7CkBAIC05MSw4ICs5
NCw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBSZW5kZXJPYmplY3QqIGxpbmVCcmVha09iaigp
IGNvbnN0IHsgcmV0dXJuIG1fbGluZUJyZWFrT2JqLmdldCgpOyB9Ci0gICAgQmlkaVN0YXR1cyBs
aW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMaW5lQnJlYWtJbmZvKFJl
bmRlck9iamVjdCosIHVuc2lnbmVkIGJyZWFrUG9zLCBjb25zdCBCaWRpU3RhdHVzJik7CisgICAg
UEFMOjpCaWRpU3RhdHVzIGxpbmVCcmVha0JpZGlTdGF0dXMoKSBjb25zdDsKKyAgICB2b2lkIHNl
dExpbmVCcmVha0luZm8oUmVuZGVyT2JqZWN0KiwgdW5zaWduZWQgYnJlYWtQb3MsIGNvbnN0IFBB
TDo6QmlkaVN0YXR1cyYpOwogCiAgICAgdW5zaWduZWQgbGluZUJyZWFrUG9zKCkgY29uc3QgeyBy
ZXR1cm4gbV9saW5lQnJlYWtQb3M7IH0KICAgICB2b2lkIHNldExpbmVCcmVha1Bvcyh1bnNpZ25l
ZCBwKSB7IG1fbGluZUJyZWFrUG9zID0gcDsgfQpAQCAtMjAyLDcgKzIwNSw3IEBAIHByaXZhdGU6
CiAgICAgLy8gV2hlcmUgdGhpcyBsaW5lIGVuZGVkLiBUaGUgZXhhY3Qgb2JqZWN0IGFuZCB0aGUg
cG9zaXRpb24gd2l0aGluIHRoYXQgb2JqZWN0IGFyZSBzdG9yZWQgc28gdGhhdAogICAgIC8vIHdl
IGNhbiBjcmVhdGUgYW4gTGVnYWN5SW5saW5lSXRlcmF0b3IgYmVnaW5uaW5nIGp1c3QgYWZ0ZXIg
dGhlIGVuZCBvZiB0aGlzIGxpbmUuCiAgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fbGluZUJy
ZWFrT2JqOwotICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gbV9saW5lQnJlYWtDb250ZXh0OworICAg
IFJlZlB0cjxQQUw6OkJpZGlDb250ZXh0PiBtX2xpbmVCcmVha0NvbnRleHQ7CiAKICAgICBMYXlv
dXRVbml0IG1fbGluZVRvcDsKICAgICBMYXlvdXRVbml0IG1fbGluZUJvdHRvbTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDgzYzgxMDQxMGFhMmFkN2E3NjEz
ODllZmJjNGIwODQzYWI0YzA5ZDMuLmY2NTllMTU1Yjk3OTc4NjYwOTc0NDRhYWRlNmYyOWU3MzRk
MTRjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMzA4
OCw3ICszMDg4LDcgQEAgY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjb25z
dAogCiBUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFN0cmluZ1ZpZXcgc3Ry
aW5nVmlldywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBFeHBhbnNpb25CZWhhdmlvciBleHBh
bnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKLSAgICBhdXRvIHRleHREaXJlY3Rpb24gPSBU
ZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgYXV0byB0ZXh0RGlyZWN0aW9uID0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFI7CiAgICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gc3R5bGUucnRsT3Jk
ZXJpbmcoKSA9PSBPcmRlcjo6VmlzdWFsOwogICAgIGlmIChmbGFncyAhPSBEZWZhdWx0VGV4dFJ1
bkZsYWdzKSB7CiAgICAgICAgIGlmIChmbGFncyAmIFJlc3BlY3REaXJlY3Rpb24pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGJjNGMzMTBlOGFjYzRjMGMyOThhMzM4
NDNmYTUyMGNmMmE4YjMxNWYuLjU2NTE4NzQyMWEyYWZhMmFkZTJjOTU0NjdiZDkwYmVkNDkwNjA3
ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC03OSwxMCArNzks
MTAgQEAKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmgiCi0jaW5jbHVkZSAiVGV4dERpcmVj
dGlvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxwYWwvdGV4dC9UZXh0RGlyZWN0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvU3RhY2tT
dGF0cy5oPgogCkBAIC0zNzc3LDE0ICszNzc3LDE0IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxp
bmVTdGF0aWNEaXN0YW5jZShMZW5ndGgmIGxvZ2ljYWxMZWZ0LCBMZW5ndGgmIGxvZ2ljYWxSaWdo
CiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gY2hpbGQtPnBh
cmVudCgpOwotICAgIFRleHREaXJlY3Rpb24gcGFyZW50RGlyZWN0aW9uID0gcGFyZW50LT5zdHls
ZSgpLmRpcmVjdGlvbigpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBwYXJlbnREaXJlY3Rpb24g
PSBwYXJlbnQtPnN0eWxlKCkuZGlyZWN0aW9uKCk7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyB1
c2luZyBlbmNsb3NpbmdCb3goKSB3aGljaCBpcyB3cm9uZyBmb3IgYWJzb2x1dGVseQogICAgIC8v
IHBvc2l0aW9uZWQgZ3JpZCBpdGVtcywgYXMgdGhleSByZWx5IG9uIHRoZSBncmlkIGFyZWEuIFNv
IGZvciBncmlkIGl0ZW1zIGlmCiAgICAgLy8gYm90aCAibGVmdCIgYW5kICJyaWdodCIgcHJvcGVy
dGllcyBhcmUgImF1dG8iLCB3ZSBjYW4gY29uc2lkZXIgdGhhdCBvbmUgb2YKICAgICAvLyB0aGVt
IChkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbikgaXMgc2ltcGx5ICIwIi4KICAgICBpZiAocGFy
ZW50LT5pc1JlbmRlckdyaWQoKSAmJiBwYXJlbnQgPT0gY2hpbGQtPmNvbnRhaW5pbmdCbG9jaygp
KSB7Ci0gICAgICAgIGlmIChwYXJlbnREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKQor
ICAgICAgICBpZiAocGFyZW50RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQog
ICAgICAgICAgICAgbG9naWNhbExlZnQuc2V0VmFsdWUoTGVuZ3RoVHlwZTo6Rml4ZWQsIDApOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2dpY2FsUmlnaHQuc2V0VmFsdWUoTGVuZ3RoVHlw
ZTo6Rml4ZWQsIDApOwpAQCAtMzc5Miw3ICszNzkyLDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUlu
bGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNhbExlZnQsIExlbmd0aCYgbG9naWNhbFJp
Z2gKICAgICB9CiAKICAgICAvLyBGb3Igb3J0aG9nb25hbCBmbG93cyB3ZSBkb24ndCBjYXJlIHdo
ZXRoZXIgdGhlIHBhcmVudCBpcyBMVFIgb3IgUlRMIGJlY2F1c2UgaXQgZG9lcyBub3QgYWZmZWN0
IHRoZSBwb3NpdGlvbiBpbiBvdXIgaW5saW5lIGF4aXMuCi0gICAgaWYgKHBhcmVudERpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgfHwgaXNPcnRob2dvbmFsKCpjaGlsZCwgKnBhcmVudCkp
IHsKKyAgICBpZiAocGFyZW50RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIHx8
IGlzT3J0aG9nb25hbCgqY2hpbGQsICpwYXJlbnQpKSB7CiAgICAgICAgIExheW91dFVuaXQgc3Rh
dGljUG9zaXRpb24gPSBpc09ydGhvZ29uYWwoKmNoaWxkLCAqcGFyZW50KSA/IGNoaWxkLT5sYXll
cigpLT5zdGF0aWNCbG9ja1Bvc2l0aW9uKCkgLSBjb250YWluZXJCbG9jay5ib3JkZXJCZWZvcmUo
KSA6IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQb3NpdGlvbigpIC0gY29udGFpbmVyQmxv
Y2suYm9yZGVyTG9naWNhbExlZnQoKTsKICAgICAgICAgZm9yIChhdXRvKiBjdXJyZW50ID0gcGFy
ZW50OyBjdXJyZW50ICYmIGN1cnJlbnQgIT0gJmNvbnRhaW5lckJsb2NrOyBjdXJyZW50ID0gY3Vy
cmVudC0+Y29udGFpbmVyKCkpIHsKICAgICAgICAgICAgIGlmICghaXM8UmVuZGVyQm94PigqY3Vy
cmVudCkpCkBAIC0zODgxLDcgKzM4ODEsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdQogICAg
IC8vIFVzZSB0aGUgY29udGFpbmVyIGJsb2NrJ3MgZGlyZWN0aW9uIGV4Y2VwdCB3aGVuIGNhbGN1
bGF0aW5nIHRoZSBzdGF0aWMgZGlzdGFuY2UKICAgICAvLyBUaGlzIGNvbmZvcm1zIHdpdGggdGhl
IHJlZmVyZW5jZSByZXN1bHRzIGZvciBhYnNwb3MtcmVwbGFjZWQtd2lkdGgtbWFyZ2luLTAwMC5o
dG0KICAgICAvLyBvZiB0aGUgQ1NTIDIuMSB0ZXN0IHN1aXRlCi0gICAgVGV4dERpcmVjdGlvbiBj
b250YWluZXJEaXJlY3Rpb24gPSBjb250YWluZXJCbG9jay5zdHlsZSgpLmRpcmVjdGlvbigpOwor
ICAgIFBBTDo6VGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24gPSBjb250YWluZXJCbG9j
ay5zdHlsZSgpLmRpcmVjdGlvbigpOwogCiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpOwogICAgIGNvbnN0IExheW91dFVuaXQgYm9yZGVyc1BsdXNQYWRk
aW5nID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwpAQCAtNDAxNCw3ICs0MDE0LDcg
QEAgc3RhdGljIHZvaWQgY29tcHV0ZUxvZ2ljYWxMZWZ0UG9zaXRpb25lZE9mZnNldChMYXlvdXRV
bml0JiBsb2dpY2FsTGVmdFBvcywgY29uc3QKICAgICAgICAgbG9naWNhbExlZnRQb3MgKz0gKGNo
aWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGFpbmVyQmxvY2suYm9yZGVyTGVm
dCgpIDogY29udGFpbmVyQmxvY2suYm9yZGVyVG9wKCkpOwogfQogCi12b2lkIFJlbmRlckJveDo6
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhTaXplVHlwZSB3aWR0aFR5cGUsIExl
bmd0aCBsb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBjb250YWluZXJC
bG9jaywgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24sCit2b2lkIFJlbmRlckJveDo6
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhTaXplVHlwZSB3aWR0aFR5cGUsIExl
bmd0aCBsb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBjb250YWluZXJC
bG9jaywgUEFMOjpUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgY29udGFp
bmVyTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBsb2dpY2Fs
TGVmdCwgTGVuZ3RoIGxvZ2ljYWxSaWdodCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxMZWZ0LCBMZW5n
dGggbWFyZ2luTG9naWNhbFJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdXRlZFZh
bHVlcykgY29uc3QKQEAgLTQwNzgsNyArNDA3OCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRl
UG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlIHdpZHRoVHlwZSwgTGVuZ3RoIGxv
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgY29udGFp
bmluZyBibG9jaydzIGRpcmVjdGlvbiByYXRoZXIgdGhhbiB0aGUgcGFyZW50IGJsb2NrJ3MKICAg
ICAgICAgICAgICAgICAvLyBwZXIgQ1NTIDIuMSByZWZlcmVuY2UgdGVzdCBhYnNwb3Mtbm9uLXJl
cGxhY2VkLXdpZHRoLW1hcmdpbi0wMDAuCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lckRp
cmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGFpbmVyRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG1hcmdpbkxvZ2ljYWxMZWZ0VmFsdWUgPSAwOwogICAgICAgICAgICAgICAgICAg
ICBtYXJnaW5Mb2dpY2FsUmlnaHRWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlOyAvLyB3aWxsIGJlIG5l
Z2F0aXZlCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQxMDEsNyArNDEwMSw3IEBAIHZv
aWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBl
IHdpZHRoVHlwZSwgTGVuZ3RoIGxvCiAKICAgICAgICAgICAgIC8vIFVzZSB0aGUgY29udGFpbmlu
ZyBibG9jaydzIGRpcmVjdGlvbiByYXRoZXIgdGhhbiB0aGUgcGFyZW50IGJsb2NrJ3MKICAgICAg
ICAgICAgIC8vIHBlciBDU1MgMi4xIHJlZmVyZW5jZSB0ZXN0IGFic3Bvcy1ub24tcmVwbGFjZWQt
d2lkdGgtbWFyZ2luLTAwMC4KLSAgICAgICAgICAgIGlmICghaXNPcnRob2dvbmFsKCp0aGlzLCBj
b250YWluZXJCbG9jaykgJiYgY29udGFpbmVyRGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJU
TCkKKyAgICAgICAgICAgIGlmICghaXNPcnRob2dvbmFsKCp0aGlzLCBjb250YWluZXJCbG9jaykg
JiYgY29udGFpbmVyRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAg
ICAgICAgICAgIGxvZ2ljYWxMZWZ0VmFsdWUgPSAoYXZhaWxhYmxlU3BhY2UgKyBsb2dpY2FsTGVm
dFZhbHVlKSAtIG1hcmdpbkxvZ2ljYWxMZWZ0VmFsdWUgLSBtYXJnaW5Mb2dpY2FsUmlnaHRWYWx1
ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC00MjMxLDcgKzQyMzEsNyBAQCBzdGF0aWMg
dm9pZCBjb21wdXRlQmxvY2tTdGF0aWNEaXN0YW5jZShMZW5ndGgmIGxvZ2ljYWxUb3AsIExlbmd0
aCYgbG9naWNhbEJvdHRvbQogCiAgICAgLy8gSWYgdGhlIHBhcmVudCBpcyBSVEwgdGhlbiB3ZSBu
ZWVkIHRvIGZsaXAgdGhlIGNvb3JkaW5hdGUgYnkgc2V0dGluZyB0aGUgbG9naWNhbCBib3R0b20g
aW5zdGVhZCBvZiB0aGUgbG9naWNhbCB0b3AuIFRoYXQgb25seSBuZWVkcwogICAgIC8vIHRvIGJl
IGRvbmUgaW4gY2FzZSBvZiBvcnRob2dvbmFsIHdyaXRpbmcgbW9kZXMsIGZvciBob3Jpem9udGFs
IG9uZXMgdGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBwYXJlbnQgZG9lcyBub3QgYWZmZWN0IHRo
ZSBibG9jayBwb3NpdGlvbi4KLSAgICBpZiAocGFyZW50LT5zdHlsZSgpLmRpcmVjdGlvbigpICE9
IFRleHREaXJlY3Rpb246OkxUUiAmJiBpc09ydGhvZ29uYWwoKmNoaWxkLCAqcGFyZW50KSkKKyAg
ICBpZiAocGFyZW50LT5zdHlsZSgpLmRpcmVjdGlvbigpICE9IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSICYmIGlzT3J0aG9nb25hbCgqY2hpbGQsICpwYXJlbnQpKQogICAgICAgICBsb2dpY2FsQm90
dG9tLnNldFZhbHVlKExlbmd0aFR5cGU6OkZpeGVkLCBzdGF0aWNMb2dpY2FsVG9wKTsKICAgICBl
bHNlCiAgICAgICAgIGxvZ2ljYWxUb3Auc2V0VmFsdWUoTGVuZ3RoVHlwZTo6Rml4ZWQsIHN0YXRp
Y0xvZ2ljYWxUb3ApOwpAQCAtNDUzNiw3ICs0NTM2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1
dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoUmVwbGFjZWQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFs
dWUKIAogICAgIC8vIFRvIG1hdGNoIFdpbklFLCBpbiBxdWlya3MgbW9kZSB1c2UgdGhlIHBhcmVu
dCdzICdkaXJlY3Rpb24nIHByb3BlcnR5CiAgICAgLy8gaW5zdGVhZCBvZiB0aGUgY29udGFpbmVy
IGJsb2NrJ3MuCi0gICAgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24gPSBjb250YWlu
ZXJCbG9jay5zdHlsZSgpLmRpcmVjdGlvbigpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBjb250
YWluZXJEaXJlY3Rpb24gPSBjb250YWluZXJCbG9jay5zdHlsZSgpLmRpcmVjdGlvbigpOwogCiAg
ICAgLy8gVmFyaWFibGVzIHRvIHNvbHZlLgogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKTsKQEAgLTQ2MDIsNyArNDYwMiw3IEBAIHZvaWQgUmVuZGVyQm94
Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFJlcGxhY2VkKExvZ2ljYWxFeHRlbnRDb21w
dXRlZFZhbHVlCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBVc2UgdGhlIGNvbnRh
aW5pbmcgYmxvY2sncyBkaXJlY3Rpb24gcmF0aGVyIHRoYW4gdGhlIHBhcmVudCBibG9jaydzCiAg
ICAgICAgICAgICAvLyBwZXIgQ1NTIDIuMSByZWZlcmVuY2UgdGVzdCBhYnNwb3MtcmVwbGFjZWQt
d2lkdGgtbWFyZ2luLTAwMC4KLSAgICAgICAgICAgIGlmIChjb250YWluZXJEaXJlY3Rpb24gPT0g
VGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgICAgICAgICBpZiAoY29udGFpbmVyRGlyZWN0aW9u
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgICAgICAgICAgbWFyZ2luTG9n
aWNhbExlZnRBbGlhcyA9IDA7CiAgICAgICAgICAgICAgICAgbWFyZ2luTG9naWNhbFJpZ2h0QWxp
YXMgPSBkaWZmZXJlbmNlOyAvLyB3aWxsIGJlIG5lZ2F0aXZlCiAgICAgICAgICAgICB9IGVsc2Ug
ewpAQCAtNDY1MCw3ICs0NjUwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVk
TG9naWNhbFdpZHRoUmVwbGFjZWQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWUKICAgICAgICAg
bG9naWNhbFJpZ2h0VmFsdWUgPSB2YWx1ZUZvckxlbmd0aChsb2dpY2FsUmlnaHQsIGNvbnRhaW5l
ckxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGxvZ2ljYWxMZWZ0VmFsdWUgPSB2YWx1ZUZvckxlbmd0
aChsb2dpY2FsTGVmdCwgY29udGFpbmVyTG9naWNhbFdpZHRoKTsKICAgICAgICAgLy8gSWYgdGhl
IGNvbnRhaW5pbmcgYmxvY2sgaXMgcmlnaHQtdG8tbGVmdCwgdGhlbiBwdXNoIHRoZSBsZWZ0IHBv
c2l0aW9uIGFzIGZhciB0byB0aGUgcmlnaHQgYXMgcG9zc2libGUKLSAgICAgICAgaWYgKGNvbnRh
aW5lckRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpIHsKKyAgICAgICAgaWYgKGNvbnRh
aW5lckRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkgewogICAgICAgICAgICAg
aW50IHRvdGFsTG9naWNhbFdpZHRoID0gY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgKyBsb2dpY2Fs
TGVmdFZhbHVlICsgbG9naWNhbFJpZ2h0VmFsdWUgKyAgbWFyZ2luTG9naWNhbExlZnRBbGlhcyAr
IG1hcmdpbkxvZ2ljYWxSaWdodEFsaWFzOwogICAgICAgICAgICAgbG9naWNhbExlZnRWYWx1ZSA9
IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAtICh0b3RhbExvZ2ljYWxXaWR0aCAtIGxvZ2ljYWxMZWZ0
VmFsdWUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXgg
YjIyNWE3YjI2ZTYzNDBlYzA2NDUzNTFlMWM4NzkwZTgwNDAwNDY1Yi4uOWIzYTRlMGRkMzMxOTE4
NjgxMjEyYjhkNTkxMGM1YWE5MjUxZGYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaApAQCAtNzU3LDcgKzc1Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZXBhaW50TGF5ZXJS
ZWN0c0ZvckltYWdlKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgRmlsbExheWVyJiBsYXllcnMsIGJv
b2wgZHJhd2luZ0JhY2tncm91bmQpOwogCiAgICAgdm9pZCBjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWxIZWlnaHQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikgY29uc3Q7Ci0gICAgdm9pZCBj
b21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlLCBMZW5ndGggbG9naWNh
bFdpZHRoLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmVyQmxvY2ssIFRleHRE
aXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uLAorICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsV2lkdGhVc2luZyhTaXplVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVu
ZGVyQm94TW9kZWxPYmplY3QmIGNvbnRhaW5lckJsb2NrLCBQQUw6OlRleHREaXJlY3Rpb24gY29u
dGFpbmVyRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBib3JkZXJz
UGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IExlbmd0aCBsb2dpY2FsTGVmdCwgTGVuZ3RoIGxvZ2ljYWxSaWdodCwgTGVuZ3RoIG1hcmdpbkxv
Z2ljYWxMZWZ0LCBMZW5ndGggbWFyZ2luTG9naWNhbFJpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNh
dGVkRmxleGlibGVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJl
Y2F0ZWRGbGV4aWJsZUJveC5jcHAKaW5kZXggN2UxOGZmMGE2ZTVmZWE0MmQ2MzZhNDhlMTEwNzJj
NjM2MzI3NGI4Yi4uZWEzNDE4ODY0N2UzOWRjY2YyYjgwMWNkM2FkYWM1ODcxMGRkZWU4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJs
ZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRG
bGV4aWJsZUJveC5jcHAKQEAgLTEwNDMsNyArMTA0Myw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcChGbGV4Qm94SXRlcmF0b3ImIGl0ZXJhdG9yLCBi
b29sCiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgICAgIC8vIEZJWE1F
OiBGb3Igbm93IGRvbid0IHN1cHBvcnQgUlRMLgotICAgICAgICBpZiAoc3R5bGUoKS5kaXJlY3Rp
b24oKSAhPSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChzdHlsZSgpLmRpcmVjdGlv
bigpICE9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgLy8gR2V0IHRoZSBsYXN0IGxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCmluZGV4IDI2NWI4OTRmMzNmMmExM2E0MmNk
ZDg1MDI4OWM2ODgwY2Y5NGFlOWMuLmRjODE4NTk3OTcyMjBhMzMxMDRjOTI3MGJkZGUzYzQ2ZTk1
MjA1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVu
dGVkRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50
ZWRGbG93LmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6
OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgLy8gSWYgdGhlIGZyYWdtZW50cyBoYXZlIG5vbi11
bmlmb3JtIGxvZ2ljYWwgd2lkdGhzLCB0aGVuIGluc2VydCBpbnNldCBpbmZvcm1hdGlvbiBmb3Ig
dGhlIFJlbmRlckZyYWdtZW50ZWRGbG93LgogICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBtX2Zy
YWdtZW50TGlzdCkgewogICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbFdpZHRoID0g
ZnJhZ21lbnQtPnBhZ2VMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdCA9IHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6
IGxvZ2ljYWxXaWR0aCAtIGZyYWdtZW50TG9naWNhbFdpZHRoOworICAgICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0ID0gc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246
OkxUUiA/IDBfbHUgOiBsb2dpY2FsV2lkdGggLSBmcmFnbWVudExvZ2ljYWxXaWR0aDsKICAgICAg
ICAgZnJhZ21lbnQtPnNldFJlbmRlckJveEZyYWdtZW50SW5mbyh0aGlzLCBsb2dpY2FsTGVmdCwg
ZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGZhbHNlKTsKICAgICB9CiB9CkBAIC04NDIsNyArODQyLDcg
QEAgdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6dXBkYXRlRnJhZ21lbnRzRnJhZ21lbnRlZEZs
b3dQb3J0aW9uUmVjdCgpCiAgICAgICAgIExheW91dFVuaXQgZnJhZ21lbnRMb2dpY2FsV2lkdGgg
PSBmcmFnbWVudC0+cGFnZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IGZyYWdt
ZW50TG9naWNhbEhlaWdodCA9IHN0ZDo6bWluPExheW91dFVuaXQ+KFJlbmRlckZyYWdtZW50ZWRG
bG93OjptYXhMb2dpY2FsSGVpZ2h0KCkgLSBsb2dpY2FsSGVpZ2h0LCBmcmFnbWVudC0+bG9naWNh
bEhlaWdodE9mQWxsRnJhZ21lbnRlZEZsb3dDb250ZW50KCkpOwogCi0gICAgICAgIExheW91dFJl
Y3QgZnJhZ21lbnRSZWN0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRS
ID8gMF9sdSA6IGxvZ2ljYWxXaWR0aCgpIC0gZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQsIGZyYWdtZW50TG9naWNhbFdpZHRoLCBmcmFnbWVudExvZ2ljYWxIZWlnaHQpOworICAg
ICAgICBMYXlvdXRSZWN0IGZyYWdtZW50UmVjdChzdHlsZSgpLmRpcmVjdGlvbigpID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2ljYWxXaWR0aCgpIC0gZnJhZ21lbnRMb2dp
Y2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQsIGZyYWdtZW50TG9naWNhbFdpZHRoLCBmcmFnbWVudExv
Z2ljYWxIZWlnaHQpOwogCiAgICAgICAgIGZyYWdtZW50LT5zZXRGcmFnbWVudGVkRmxvd1BvcnRp
b25SZWN0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFnbWVudFJlY3QgOiBmcmFnbWVu
dFJlY3QudHJhbnNwb3NlZFJlY3QoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCBmMjk1MDRhMmYzMmU4NWFkNTgz
MjdmNjZhMzRiMTkxMjhiNmQ2ODc4Li45YTRmMzk5MzZhMzliYWJhNjk1MDQ0MjdhMmJiOTZmOTFm
NWNmYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
TW9kZWxPYmplY3QuY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgYm9vbCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0OjpzaG91bGRQbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QKICAgICBj
YXNlIFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3k6OkNvbnRlbnQ6CiAgICAgICAgIHJldHVy
biBzdHlsZSgpLnNob3VsZFBsYWNlVmVydGljYWxTY3JvbGxiYXJPbkxlZnQoKTsKICAgICBjYXNl
IFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3k6OlN5c3RlbToKLSAgICAgICAgcmV0dXJuIHNl
dHRpbmdzKCkuc3lzdGVtTGF5b3V0RGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMOwor
ICAgICAgICByZXR1cm4gc2V0dGluZ3MoKS5zeXN0ZW1MYXlvdXREaXJlY3Rpb24oKSA9PSBQQUw6
OlRleHREaXJlY3Rpb246OlJUTDsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgcmV0dXJuIHN0eWxlKCkuc2hvdWxkUGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uTGVmdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5kZXggYWUyODIy
YzZlZGVhNjk2YzA4ZDZiMzkxNTU1ZjdjNTIzNmI2NDJmOC4uZmUzNzczZGNhYmRmNTVlMTc0YmYx
MzA4YWZlNWQ5NWU1MGM2NDFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEl0ZW0uY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWRE
YXRhLmgiCi0jaW5jbHVkZSAiVW5pY29kZUJpZGkuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9Vbmlj
b2RlQmlkaS5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
d3RmL1N0YWNrU3RhdHMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC03Nyw3
ICs3Nyw3IEBAIFJlbmRlclN0eWxlIFJlbmRlckxpc3RJdGVtOjpjb21wdXRlTWFya2VyU3R5bGUo
KSBjb25zdAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcoRm9u
dFZhcmlhbnROdW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnMpOwogICAgIG1hcmtlclN0eWxl
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogICAgIG1hcmtl
clN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsK
LSAgICBtYXJrZXJTdHlsZS5zZXRVbmljb2RlQmlkaShFVW5pY29kZUJpZGk6Oklzb2xhdGUpOwor
ICAgIG1hcmtlclN0eWxlLnNldFVuaWNvZGVCaWRpKFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRl
KTsKICAgICBtYXJrZXJTdHlsZS5zZXRXaGl0ZVNwYWNlKFdoaXRlU3BhY2U6OlByZSk7CiAgICAg
bWFya2VyU3R5bGUuc2V0VGV4dFRyYW5zZm9ybShUZXh0VHJhbnNmb3JtOjpOb25lKTsKICAgICBy
ZXR1cm4gbWFya2VyU3R5bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWFycXVlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVl
ZS5jcHAKaW5kZXggYjEzNDZhMTA1YjczMjhlNThmNWZiYTdlOTgwOTI2Y2ExOTk4MWU5MC4uZTRk
MDM0ZjUwYzg5ZTc1YzMzNzViNGI5MjM0OTAyMTM5YjU0MWQxZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcApAQCAtMTAzLDEzICsxMDMsMTMgQEAgTWFycXVl
ZURpcmVjdGlvbiBSZW5kZXJNYXJxdWVlOjpkaXJlY3Rpb24oKSBjb25zdAogICAgIC8vIEZJWE1F
OiBTdXBwb3J0IHRoZSBDU1MzICJhdXRvIiB2YWx1ZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGRpcmVj
dGlvbiBvZiB0aGUgbWFycXVlZS4KICAgICAvLyBGb3Igbm93IGp1c3QgbWFwIE1hcnF1ZWVEaXJl
Y3Rpb246OkF1dG8gdG8gTWFycXVlZURpcmVjdGlvbjo6QmFja3dhcmQKICAgICBNYXJxdWVlRGly
ZWN0aW9uIHJlc3VsdCA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlRGlyZWN0
aW9uKCk7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXIgPSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxl
KCkuZGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpciA9IG1fbGF5ZXItPnJl
bmRlcmVyKCkuc3R5bGUoKS5kaXJlY3Rpb24oKTsKICAgICBpZiAocmVzdWx0ID09IE1hcnF1ZWVE
aXJlY3Rpb246OkF1dG8pCiAgICAgICAgIHJlc3VsdCA9IE1hcnF1ZWVEaXJlY3Rpb246OkJhY2t3
YXJkOwogICAgIGlmIChyZXN1bHQgPT0gTWFycXVlZURpcmVjdGlvbjo6Rm9yd2FyZCkKLSAgICAg
ICAgcmVzdWx0ID0gKGRpciA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpID8gTWFycXVlZURpcmVjdGlv
bjo6UmlnaHQgOiBNYXJxdWVlRGlyZWN0aW9uOjpMZWZ0OworICAgICAgICByZXN1bHQgPSAoZGly
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSA/IE1hcnF1ZWVEaXJlY3Rpb246OlJpZ2h0IDog
TWFycXVlZURpcmVjdGlvbjo6TGVmdDsKICAgICBpZiAocmVzdWx0ID09IE1hcnF1ZWVEaXJlY3Rp
b246OkJhY2t3YXJkKQotICAgICAgICByZXN1bHQgPSAoZGlyID09IFRleHREaXJlY3Rpb246OkxU
UikgPyBNYXJxdWVlRGlyZWN0aW9uOjpMZWZ0IDogTWFycXVlZURpcmVjdGlvbjo6UmlnaHQ7Cisg
ICAgICAgIHJlc3VsdCA9IChkaXIgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpID8gTWFycXVl
ZURpcmVjdGlvbjo6TGVmdCA6IE1hcnF1ZWVEaXJlY3Rpb246OlJpZ2h0OwogICAgIAogICAgIC8v
IE5vdyB3ZSBoYXZlIHRoZSByZWFsIGRpcmVjdGlvbi4gIE5leHQgd2UgY2hlY2sgdG8gc2VlIGlm
IHRoZSBpbmNyZW1lbnQgaXMgbmVnYXRpdmUuCiAgICAgLy8gSWYgc28sIHRoZW4gd2UgcmV2ZXJz
ZSB0aGUgZGlyZWN0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lbnVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlz
dC5jcHAKaW5kZXggNDA1NjFmMWQxZmZjNGMyMzA2NGE0NTNhNzk1MTA0YmYyYWI5NTIyNy4uMzc1
MzI1ZDkyOGVlNTkzZDgyYmQ5MjgyODljNTdjMzA0MjgyZGYzZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCkBAIC0xMzIsMTYgKzEzMiwxNiBAQCB2b2lk
IFJlbmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKCkKICAgICAgICAgLy8gSXRlbXMgaW4g
dGhlIHBvcHVwIHdpbGwgbm90IHJlc3BlY3QgdGhlIENTUyB0ZXh0LWFsaWduIGFuZCBkaXJlY3Rp
b24gcHJvcGVydGllcywKICAgICAgICAgLy8gc28gd2UgbXVzdCBhZGp1c3Qgb3VyIG93biBzdHls
ZSB0byBtYXRjaC4KICAgICAgICAgaW5uZXJTdHlsZS5zZXRUZXh0QWxpZ24oVGV4dEFsaWduTW9k
ZTo6TGVmdCk7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gKG1fYnV0dG9uVGV4
dCAmJiBtX2J1dHRvblRleHQtPnRleHQoKS5kZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigpID09IFVf
UklHSFRfVE9fTEVGVCkgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7
CisgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSAobV9idXR0b25UZXh0ICYm
IG1fYnV0dG9uVGV4dC0+dGV4dCgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCkgPT0gVV9SSUdI
VF9UT19MRUZUKSA/IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFI7CiAgICAgICAgIGlubmVyU3R5bGUuc2V0RGlyZWN0aW9uKGRpcmVjdGlvbik7CiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB9IGVsc2UgaWYgKGRvY3VtZW50KCkucGFnZSgpLT5j
aHJvbWUoKS5zZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0aW9uKCkp
IHsKLSAgICAgICAgaW5uZXJTdHlsZS5zZXRUZXh0QWxpZ24oc3R5bGUoKS5kaXJlY3Rpb24oKSA9
PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBUZXh0QWxpZ25Nb2RlOjpMZWZ0IDogVGV4dEFsaWduTW9k
ZTo6UmlnaHQpOwotICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKLSAgICAgICAgRVVu
aWNvZGVCaWRpIHVuaWNvZGVCaWRpOworICAgICAgICBpbm5lclN0eWxlLnNldFRleHRBbGlnbihz
dHlsZSgpLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gVGV4dEFsaWdu
TW9kZTo6TGVmdCA6IFRleHRBbGlnbk1vZGU6OlJpZ2h0KTsKKyAgICAgICAgUEFMOjpUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbjsKKyAgICAgICAgUEFMOjpFVW5pY29kZUJpZGkgdW5pY29kZUJpZGk7
CiAgICAgICAgIGlmIChtdWx0aXBsZSgpICYmIHNlbGVjdGVkT3B0aW9uQ291bnQoKnRoaXMpICE9
IDEpIHsKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IChtX2J1dHRvblRleHQgJiYgbV9idXR0b25U
ZXh0LT50ZXh0KCkuZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKSA9PSBVX1JJR0hUX1RPX0xFRlQp
ID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOwotICAgICAgICAgICAg
dW5pY29kZUJpZGkgPSBVQk5vcm1hbDsKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9IChtX2J1dHRv
blRleHQgJiYgbV9idXR0b25UZXh0LT50ZXh0KCkuZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKSA9
PSBVX1JJR0hUX1RPX0xFRlQpID8gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUjsKKyAgICAgICAgICAgIHVuaWNvZGVCaWRpID0gUEFMOjpFVW5pY29kZUJp
ZGk6OlVCTm9ybWFsOwogICAgICAgICB9IGVsc2UgaWYgKG1fb3B0aW9uU3R5bGUpIHsKICAgICAg
ICAgICAgIGRpcmVjdGlvbiA9IG1fb3B0aW9uU3R5bGUtPmRpcmVjdGlvbigpOwogICAgICAgICAg
ICAgdW5pY29kZUJpZGkgPSBtX29wdGlvblN0eWxlLT51bmljb2RlQmlkaSgpOwpAQCAtNTc0LDcg
KzU3NCw3IEBAIGNvbnN0IGludCBlbmRPZkxpbmVQYWRkaW5nID0gMjsKIAogTGF5b3V0VW5pdCBS
ZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogewotICAgIGlmICgoc3R5
bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0IHx8IHN0eWxlKCkuZWZm
ZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgJiYgc3R5bGUoKS5kaXJl
Y3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpIHsKKyAgICBpZiAoKHN0eWxlKCkuZWZmZWN0
aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCB8fCBzdHlsZSgpLmVmZmVjdGl2ZUFwcGVh
cmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpICYmIHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpIHsKICAgICAgICAgLy8gRm9yIHRoZXNlIGFwcGVhcmFu
Y2UgdmFsdWVzLCB0aGUgdGhlbWUgYXBwbGllcyBwYWRkaW5nIHRvIGxlYXZlIHJvb20gZm9yIHRo
ZQogICAgICAgICAvLyBkcm9wLWRvd24gYnV0dG9uLiBCdXQgbGVhdmluZyByb29tIGZvciB0aGUg
YnV0dG9uIGluc2lkZSB0aGUgcG9wdXAgbWVudSBpdHNlbGYKICAgICAgICAgLy8gbG9va3Mgc3Ry
YW5nZSwgc28gd2UgcmV0dXJuIGEgc21hbGwgZGVmYXVsdCBwYWRkaW5nIHRvIGF2b2lkIGhhdmlu
ZyBhIGxhcmdlIGVtcHR5CkBAIC01ODgsNyArNTg4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJNZW51
TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogCiBMYXlvdXRVbml0IFJlbmRlck1lbnVM
aXN0OjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAogewotICAgIGlmICgoc3R5bGUoKS5lZmZl
Y3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0IHx8IHN0eWxlKCkuZWZmZWN0aXZlQXBw
ZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgJiYgc3R5bGUoKS5kaXJlY3Rpb24oKSA9
PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgaWYgKChzdHlsZSgpLmVmZmVjdGl2ZUFwcGVhcmFu
Y2UoKSA9PSBNZW51bGlzdFBhcnQgfHwgc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0g
TWVudWxpc3RCdXR0b25QYXJ0KSAmJiBzdHlsZSgpLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSKQogICAgICAgICByZXR1cm4gZW5kT2ZMaW5lUGFkZGluZzsKIAogICAgIHJl
dHVybiBwYWRkaW5nUmlnaHQoKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ1JpZ2h0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGJmYWZiZTQ3YTc5M2Rj
NGVjOGU2Njg4MjNjYjY1ZWNlMzg4ZDdhNjUuLjZmZGU1NzUwMDMwNTA4NTUzZWE0M2UwMDVmMTFk
YTllMTM3YTY5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CkBAIC0yMzIwLDcgKzIzMjAsNyBAQCBhdXRvIFJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlv
bkdlb21ldHJpZXNJbnRlcm5hbChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgICAgIGlm
IChnZW9tZXRyaWVzW2pdLmJlaGF2aW9yKCkgPT0gU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6
OlVzZUluZGl2aWR1YWxRdWFkcykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRv
JiBwcmV2aW91c1JlY3QgPSBnZW9tZXRyaWVzW2ogLSAxXTsKLSAgICAgICAgYm9vbCBwcmV2aW91
c1JlY3RNYXlOb3RSZWFjaFJpZ2h0RWRnZSA9IChwcmV2aW91c1JlY3QuZGlyZWN0aW9uKCkgPT0g
VGV4dERpcmVjdGlvbjo6TFRSICYmIHByZXZpb3VzUmVjdC5jb250YWluc0VuZCgpKSB8fCAocHJl
dmlvdXNSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBwcmV2aW91c1Jl
Y3QuY29udGFpbnNTdGFydCgpKTsKKyAgICAgICAgYm9vbCBwcmV2aW91c1JlY3RNYXlOb3RSZWFj
aFJpZ2h0RWRnZSA9IChwcmV2aW91c1JlY3QuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpMVFIgJiYgcHJldmlvdXNSZWN0LmNvbnRhaW5zRW5kKCkpIHx8IChwcmV2aW91c1JlY3Qu
ZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgJiYgcHJldmlvdXNSZWN0LmNv
bnRhaW5zU3RhcnQoKSk7CiAgICAgICAgIGlmIChwcmV2aW91c1JlY3RNYXlOb3RSZWFjaFJpZ2h0
RWRnZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpbnQgYWRqdXN0ZWRXaWR0aCA9
IGdlb21ldHJpZXNbal0ubG9naWNhbExlZnQoKSAtIHByZXZpb3VzUmVjdC5sb2dpY2FsTGVmdCgp
OwpAQCAtMjMzNywxMCArMjMzNywxMCBAQCBhdXRvIFJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVj
dGlvbkdlb21ldHJpZXNJbnRlcm5hbChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHNlbGVjdGlvbkdlb21ldHJ5LmJlaGF2aW9yKCkg
PT0gU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OlVzZUluZGl2aWR1YWxRdWFkcykKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2VsZWN0aW9uR2VvbWV0cnkuZGlyZWN0aW9u
KCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMICYmIHNlbGVjdGlvbkdlb21ldHJ5LmlzRmlyc3RPbkxp
bmUoKSkgeworICAgICAgICBpZiAoc2VsZWN0aW9uR2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpSVEwgJiYgc2VsZWN0aW9uR2VvbWV0cnkuaXNGaXJzdE9uTGluZSgp
KSB7CiAgICAgICAgICAgICBzZWxlY3Rpb25HZW9tZXRyeS5zZXRMb2dpY2FsV2lkdGgoc2VsZWN0
aW9uR2VvbWV0cnkubG9naWNhbFdpZHRoKCkgKyBzZWxlY3Rpb25HZW9tZXRyeS5sb2dpY2FsTGVm
dCgpIC0gc2VsZWN0aW9uR2VvbWV0cnkubWluWCgpKTsKICAgICAgICAgICAgIHNlbGVjdGlvbkdl
b21ldHJ5LnNldExvZ2ljYWxMZWZ0KHNlbGVjdGlvbkdlb21ldHJ5Lm1pblgoKSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoc2VsZWN0aW9uR2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlv
bjo6TFRSICYmIHNlbGVjdGlvbkdlb21ldHJ5LmlzTGFzdE9uTGluZSgpKQorICAgICAgICB9IGVs
c2UgaWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSICYmIHNlbGVjdGlvbkdlb21ldHJ5LmlzTGFzdE9uTGluZSgpKQogICAgICAgICAgICAg
c2VsZWN0aW9uR2VvbWV0cnkuc2V0TG9naWNhbFdpZHRoKHNlbGVjdGlvbkdlb21ldHJ5Lm1heFgo
KSAtIHNlbGVjdGlvbkdlb21ldHJ5LmxvZ2ljYWxMZWZ0KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IGQ3NWY1OWZlYzc1OGI4NDMw
ZWI0YzcwZDBiZDEzNzE1ZjNmNDBlZjIuLmE2ZWVjMTcxM2YwNTk4YmVhN2FhOTI4MmFlMjljM2Fl
YmIwMDY2YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0K
QEAgLTcwNSw3ICs3MDUsNyBAQCBMZW5ndGhCb3ggUmVuZGVyVGhlbWVJT1M6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nQm94KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29ucwogICAgIH0KIAogICAg
IGlmIChzdHlsZS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSB7
Ci0gICAgICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisg
ICAgICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkK
ICAgICAgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIHN0YXRpY19jYXN0PGludD4ocGFkZGluZyAr
IHN0eWxlLmJvcmRlclRvcFdpZHRoKCkpIH07CiAgICAgICAgIHJldHVybiB7IDAsIHN0YXRpY19j
YXN0PGludD4ocGFkZGluZyArIHN0eWxlLmJvcmRlclRvcFdpZHRoKCkpLCAwLCAwIH07CiAgICAg
fQpAQCAtODQ3LDcgKzg0Nyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RC
dXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJCb3gmIGJveCwgY29uc3QKICNlbmRpZgogCiAg
ICAgYXV0byYgc3R5bGUgPSBib3guc3R5bGUoKTsKLSAgICBib29sIGlzUlRMID0gc3R5bGUuZGly
ZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMOworICAgIGJvb2wgaXNSVEwgPSBzdHlsZS5k
aXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAgICBmbG9hdCBib3JkZXJU
b3BXaWR0aCA9IHN0eWxlLmJvcmRlclRvcFdpZHRoKCk7CiAgICAgRmxvYXRSZWN0IGNsaXAocmVj
dC54KCkgKyBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSwgcmVjdC55KCkgKyBzdHlsZS5ib3JkZXJU
b3BXaWR0aCgpLCByZWN0LndpZHRoKCkgLSBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxl
LmJvcmRlclJpZ2h0V2lkdGgoKSwgcmVjdC5oZWlnaHQoKSAtIHN0eWxlLmJvcmRlclRvcFdpZHRo
KCkgLSBzdHlsZS5ib3JkZXJCb3R0b21XaWR0aCgpKTsKICAgICBDR0NvbnRleHRSZWYgY2dDb250
ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCA5NjQ4NTYxMGFmYTAyYzFjZWI1
MThhNTJlYjMyMDE3MTFiOThlNjA3Li4xMTEzNzE2MDhhMDNkNjU0NGU3YzVlZWUyY2NjMTgzMGQ3
ZTQ3NjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBA
IC0xNTQyLDcgKzE1NDIsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0
dG9uR3JhZGllbnRzKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUAogCiB2b2lkIFJlbmRl
clRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94
JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBib29sIGlzUlRMID0gcmVuZGVyZXIuc3R5bGUoKS5kaXJlY3Rpb24oKSA9
PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgYm9vbCBpc1JUTCA9IHJlbmRlcmVyLnN0eWxlKCku
ZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgSW50UmVjdCBib3Vu
ZHMgPSBJbnRSZWN0KHJlY3QueCgpICsgcmVuZGVyZXIuc3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgo
KSwKICAgICAgICAgcmVjdC55KCkgKyByZW5kZXJlci5zdHlsZSgpLmJvcmRlclRvcFdpZHRoKCks
CiAgICAgICAgIHJlY3Qud2lkdGgoKSAtIHJlbmRlcmVyLnN0eWxlKCkuYm9yZGVyTGVmdFdpZHRo
KCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRlclJpZ2h0V2lkdGgoKSwKQEAgLTE2NTAsNyArMTY1
MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlKSBjCiBMZW5ndGhCb3ggUmVuZGVyVGhlbWVNYWM6
OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm94KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
U2V0dGluZ3MmKSBjb25zdAogewogICAgIGlmIChzdHlsZS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkg
PT0gTWVudWxpc3RQYXJ0KSB7Ci0gICAgICAgIGNvbnN0IGludCogcGFkZGluZyA9IHBvcHVwQnV0
dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpLCBzdHlsZS5kaXJlY3Rpb24oKSA9
PSBUZXh0RGlyZWN0aW9uOjpSVEwpOworICAgICAgICBjb25zdCBpbnQqIHBhZGRpbmcgPSBwb3B1
cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSwgc3R5bGUuZGlyZWN0aW9u
KCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpOwogICAgICAgICByZXR1cm4geyBzdGF0aWNf
Y2FzdDxpbnQ+KHBhZGRpbmdbdG9wUGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpLAog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihwYWRkaW5nW3JpZ2h0UGFkZGluZ10gKiBzdHls
ZS5lZmZlY3RpdmVab29tKCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihwYWRkaW5n
W2JvdHRvbVBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKSwKQEAgLTE2NjEsNyArMTY2
MSw3IEBAIExlbmd0aEJveCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3go
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zCiAgICAgICAgIGZsb2F0IGFycm93V2lkdGgg
PSBiYXNlQXJyb3dXaWR0aCAqIChzdHlsZS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSAvIGJhc2VG
b250U2l6ZSk7CiAgICAgICAgIGZsb2F0IHJpZ2h0UGFkZGluZyA9IGNlaWxmKGFycm93V2lkdGgg
KyAoYXJyb3dQYWRkaW5nQmVmb3JlICsgYXJyb3dQYWRkaW5nQWZ0ZXIgKyBwYWRkaW5nQmVmb3Jl
U2VwYXJhdG9yKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGZsb2F0IGxlZnRQ
YWRkaW5nID0gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsK
LSAgICAgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAg
ICAgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQog
ICAgICAgICAgICAgc3RkOjpzd2FwKHJpZ2h0UGFkZGluZywgbGVmdFBhZGRpbmcpOwogICAgICAg
ICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxlZFBvcHVwUGFkZGluZ1RvcCAqIHN0eWxl
LmVmZmVjdGl2ZVpvb20oKSksCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHJpZ2h0UGFk
ZGluZyksCkBAIC0xNzEyLDcgKzE3MTIsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRQb3B1
cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IEludFNpegogICAg
IC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgcmVjdGFuZ2xlIHdlJ3JlIHBh
aW50aW5nIGludG8uCiAgICAgc2V0Q29udHJvbFNpemUocG9wdXBCdXR0b24sIHBvcHVwQnV0dG9u
U2l6ZXMoKSwgYnV0dG9uU2l6ZSwgby5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAKLSAgICBw
b3B1cEJ1dHRvbi51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uID0gby5zdHlsZSgpLmRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xl
ZnQ7CisgICAgcG9wdXBCdXR0b24udXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiA9IG8uc3R5
bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uUmlnaHRUb0xlZnQ7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdl
IHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlQ2hlY2tlZFN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKQEAg
LTIxMzAsNyArMjEzMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlckJveCYgYm94LCBjb25zdCBQCiAgICAgRmxvYXRSZWN0
IGxvY2FsQm91bmRzID0gYWRqdXN0ZWRSZXN1bHRCdXR0b25SZWN0KFtzZWFyY2ggc2VhcmNoQnV0
dG9uUmVjdEZvckJvdW5kczpOU1JlY3Qoc25hcHBlZEludFJlY3QoaW5wdXRCb3guY29udGVudEJv
eFJlY3QoKSkpXSk7CiAgICAgLy8gQWRqdXN0IHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBjb250ZW50
IGRpcmVjdGlvbi4KICAgICBmbG9hdCBhZGp1c3RlZFhQb3NpdGlvbjsKLSAgICBpZiAoYm94LnN0
eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgIGlmIChib3guc3R5
bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkKICAgICAgICAgYWRq
dXN0ZWRYUG9zaXRpb24gPSBpbnB1dEJveC5jb250ZW50Qm94UmVjdCgpLm1heFgoKSAtIGxvY2Fs
Qm91bmRzLnNpemUoKS53aWR0aCgpOwogICAgIGVsc2UKICAgICAgICAgYWRqdXN0ZWRYUG9zaXRp
b24gPSBpbnB1dEJveC5jb250ZW50Qm94UmVjdCgpLngoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCmluZGV4IDExMmJiMTk0NjE4N2FkNmRkY2U0OTIyZTgw
YzFkNTQ3NWUwYzM0MTEuLmY3NWViMmEyZmE4NWE0NzUwMzM2MzhhZmZkNGQ0NmFmZTUyNmQyNTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcApAQCAtMjA5
LDcgKzIwOSw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29y
YXRpb25zKCkKICAgICAgICAgICAgIGlmICghdGV4dEJveCgpLmlzSG9yaXpvbnRhbCgpKSB7CiAg
ICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5tb3ZlKDAs
IGxvZ2ljYWxXaWR0aEJlZm9yZVJhbmdlKTsKICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlv
blNlbGVjdGlvbkNsaXBPdXRSZWN0LnNldEhlaWdodChsb2dpY2FsU2VsZWN0aW9uV2lkdGgpOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0Qm94KCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVj
dGlvbjo6UlRMKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRleHRCb3goKS5kaXJlY3Rpb24o
KSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkgewogICAgICAgICAgICAgICAgIHRleHREZWNv
cmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QubW92ZShsb2dpY2FsV2lkdGhBZnRlclJhbmdlLCAw
KTsKICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0LnNl
dFdpZHRoKGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAt
NDM1LDkgKzQzNSw5IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRl
cmxpbmVzKCkKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtaXJyb3JSVExTZWdtZW50
KGZsb2F0IGxvZ2ljYWxXaWR0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGZsb2F0JiBzdGFy
dCwgZmxvYXQgd2lkdGgpCitzdGF0aWMgaW5saW5lIHZvaWQgbWlycm9yUlRMU2VnbWVudChmbG9h
dCBsb2dpY2FsV2lkdGgsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGZsb2F0JiBzdGFy
dCwgZmxvYXQgd2lkdGgpCiB7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpM
VFIpCisgICAgaWYgKGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAg
ICAgcmV0dXJuOwogICAgIHN0YXJ0ID0gbG9naWNhbFdpZHRoIC0gd2lkdGggLSBzdGFydDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgKaW5k
ZXggYjAwN2NiOGYyOWQ3NWZiYWFmMmM4MjM0ODAzYjExNjE1MTgxZjk1ZS4uOWY0MWVmYTIyZGI4
OWE0Y2ZhZGNlZTI5ODU3NDk1OThiY2I0YWI1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgKQEAgLTI0Myw2ICsyNDMsMTUgQEAgaW5saW5l
IHZvaWQgQnJlYWtpbmdDb250ZXh0OjppbmNyZW1lbnQoKQogICAgIG1fYXRTdGFydCA9IGZhbHNl
OwogfQogCisvLyBXaGVuIGlnbm9yaW5nIHNwYWNlcywgdGhpcyBuZWVkcyB0byBiZSBjYWxsZWQg
Zm9yIG9iamVjdHMgdGhhdCBuZWVkIGxpbmUgYm94ZXMgc3VjaCBhcyBSZW5kZXJJbmxpbmVzIG9y
CisvLyBoYXJkIGxpbmUgYnJlYWtzIHRvIGVuc3VyZSB0aGF0IHRoZXkncmUgbm90IGlnbm9yZWQu
CitpbmxpbmUgdm9pZCBlbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhMaW5lV2hpdGVz
cGFjZUNvbGxhcHNpbmdTdGF0ZSYgc3RhdGUsIFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7Cisg
ICAgTGVnYWN5SW5saW5lSXRlcmF0b3IgdHJhbnNpdGlvbigwLCAmcmVuZGVyZXIsIDApOworICAg
IHN0YXRlLnN0b3BJZ25vcmluZ1NwYWNlcyh0cmFuc2l0aW9uKTsKKyAgICBzdGF0ZS5zdGFydEln
bm9yaW5nU3BhY2VzKHRyYW5zaXRpb24pOworfQorCiBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRl
eHQ6OmhhbmRsZUJSKFVzZWRDbGVhciYgdXNlZENsZWFyKQogewogICAgIGlmIChmaXRzT25MaW5l
T3JIYW5nc0F0RW5kKCkpIHsKQEAgLTI2NCw3ICsyNzMsNyBAQCBpbmxpbmUgdm9pZCBCcmVha2lu
Z0NvbnRleHQ6OmhhbmRsZUJSKFVzZWRDbGVhciYgdXNlZENsZWFyKQogICAgICAgICAvLyBuZWVk
IHRvIGNoZWNrIGZvciBmbG9hdHMgdG8gY2xlYXIgLSBzbyBpZiB3ZSdyZSBpZ25vcmluZyBzcGFj
ZXMsIHN0b3AgaWdub3JpbmcgdGhlbSBhbmQgYWRkIGEKICAgICAgICAgLy8gcnVuIGZvciB0aGlz
IG9iamVjdC4KICAgICAgICAgaWYgKG1faWdub3JpbmdTcGFjZXMgJiYgUmVuZGVyU3R5bGU6OnVz
ZWRDbGVhcihicikgIT0gVXNlZENsZWFyOjpOb25lKQotICAgICAgICAgICAgbV9saW5lV2hpdGVz
cGFjZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhicik7
CisgICAgICAgICAgICBlbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhtX2xpbmVXaGl0
ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLCBicik7CiAgICAgICAgIC8vIElmIHdlIHdlcmUgcHJlY2Vk
ZWQgYnkgY29sbGFwc2luZyBzcGFjZSBhbmQgYXJlIGluIGEgcmlnaHQtYWxpZ25lZCBjb250YWlu
ZXIgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHNwYWNlIGdldHMKICAgICAgICAgLy8gY29sbGFwc2Vk
IGF3YXkgc28gdGhhdCBpdCBkb2Vzbid0IHB1c2ggdGhlIHRleHQgb3V0IGZyb20gdGhlIGNvbnRh
aW5lcidzIHJpZ2h0LWhhbmQgZWRnZS4KICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgcmVnYXJk
bGVzcyBvZiB0aGUgY29udGFpbmVyJ3MgYWxpZ25tZW50IC0gd2lsbCByZXF1aXJlIHJlYmFzZWxp
bmluZyBhIGxvdCBvZiB0ZXN0IHJlc3VsdHMuCkBAIC0zNDcsNyArMzU2LDcgQEAgaW5saW5lIHZv
aWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVPdXRPZkZsb3dQb3NpdGlvbmVkKFZlY3RvcjxSZW5k
ZXJCb3gqPiYgcG9zaXQKICAgICAvLyB0aGVuIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyBhZ2Fpbi4K
ICAgICBpZiAoaXNJbmxpbmVUeXBlIHx8IGJveC5jb250YWluZXIoKS0+aXNSZW5kZXJJbmxpbmUo
KSkgewogICAgICAgICBpZiAobV9pZ25vcmluZ1NwYWNlcykKLSAgICAgICAgICAgIG1fbGluZVdo
aXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuZW5zdXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMo
Ym94KTsKKyAgICAgICAgICAgIGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKG1fbGlu
ZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUsIGJveCk7CiAgICAgICAgIG1fdHJhaWxpbmdPYmpl
Y3RzLmFwcGVuZEJveElmTmVlZGVkKGJveCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHBvc2l0aW9u
ZWRPYmplY3RzLmFwcGVuZCgmYm94KTsKQEAgLTQxNSw3ICs0MjQsNyBAQCBpbmxpbmUgdm9pZCBC
cmVha2luZ0NvbnRleHQ6OmhhbmRsZUVtcHR5SW5saW5lKCkKICAgICAgICAgICAgIG1fbGluZUlu
Zm8uc2V0RW1wdHkoZmFsc2UsICZtX2Jsb2NrLCAmbV93aWR0aCk7CiAgICAgICAgIGlmIChtX2ln
bm9yaW5nU3BhY2VzKSB7CiAgICAgICAgICAgICBtX3RyYWlsaW5nT2JqZWN0cy5jbGVhcigpOwot
ICAgICAgICAgICAgbV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94
SW5zaWRlSWdub3JlZFNwYWNlcygqbV9jdXJyZW50LnJlbmRlcmVyKCkpOworICAgICAgICAgICAg
ZW5zdXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMobV9saW5lV2hpdGVzcGFjZUNvbGxhcHNp
bmdTdGF0ZSwgKm1fY3VycmVudC5yZW5kZXJlcigpKTsKICAgICAgICAgfSBlbHNlIGlmIChtX2Js
b2NrU3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgbV9yZXNvbHZlci5wb3NpdGlvbigpLnJl
bmRlcmVyKCkgPT0gbV9jdXJyZW50LnJlbmRlcmVyKCkKICAgICAgICAgICAgICYmIHNob3VsZFNr
aXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdChtX2Jsb2NrLCBtX2N1cnJlbnQucmVuZGVyZXIo
KSwgbV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSkpIHsKICAgICAgICAgICAgIC8vIExp
a2Ugd2l0aCBsaXN0IG1hcmtlcnMsIHdlIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyB0byBtYWtlIHN1
cmUgdGhhdCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL1Ry
YWlsaW5nT2JqZWN0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9UcmFpbGlu
Z09iamVjdHMuY3BwCmluZGV4IGJlMmZlYTE1NDVhZmE0YTY1NTI2YjlhZjY3YmI0ODliMzQ0MWI2
NzUuLjU4MDAwZWVjNWE0NGVlNTliNjBkN2JlYTAyMmFiOWE1NmQwYjVlNWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmNwcApAQCAtNTAs
NyArNTAsNyBAQCB2b2lkIFRyYWlsaW5nT2JqZWN0czo6dXBkYXRlV2hpdGVzcGFjZUNvbGxhcHNp
bmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMoTGluZQogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYm94ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChjdXJyZW50
VHJhbnNpdGlvbiA+PSBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5udW1UcmFuc2l0aW9u
cygpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHRyYW5zaXRpb24gZm9y
IHRoaXMgYm94IHlldC4KLSAgICAgICAgICAgICAgICBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdT
dGF0ZS5lbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhtX2JveGVzW2ldKTsKKyAgICAg
ICAgICAgICAgICBlbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhsaW5lV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZSwgbV9ib3hlc1tpXSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIEFTU0VSVChsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS50cmFuc2l0
aW9ucygpW2N1cnJlbnRUcmFuc2l0aW9uXS5yZW5kZXJlcigpID09ICYobV9ib3hlc1tpXS5nZXQo
KSkpOwogICAgICAgICAgICAgICAgIEFTU0VSVChsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0
ZS50cmFuc2l0aW9ucygpW2N1cnJlbnRUcmFuc2l0aW9uICsgMV0ucmVuZGVyZXIoKSA9PSAmKG1f
Ym94ZXNbaV0uZ2V0KCkpKTsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBUcmFpbGluZ09iamVjdHM6
OnVwZGF0ZVdoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbnNGb3JUcmFpbGluZ0JveGVzKExp
bmUKICAgICAgICAgTGVnYWN5SW5saW5lSXRlcmF0b3IgZW5kTWlkKDAsIG1fd2hpdGVzcGFjZSwg
cG9zKTsKICAgICAgICAgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuc3RhcnRJZ25vcmlu
Z1NwYWNlcyhlbmRNaWQpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYm94ZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5l
bnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyhtX2JveGVzW2ldKTsKKyAgICAgICAgICAg
IGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2lu
Z1N0YXRlLCBtX2JveGVzW2ldKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmgKaW5kZXggMzZlYTNiYjdlOGU4MmIyNTJkZDE1
MGEzMDY3YmE4ZDA3ZTQ3N2MyYy4uYzJiZTkzYjU1NDY2NDY0MTA3MjZlOGUyNGUwMDg0Y2IxMzUx
OGQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdP
YmplY3RzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmpl
Y3RzLmgKQEAgLTI2LDYgKzI2LDEyIEBACiAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK25h
bWVzcGFjZSBQQUwgewordGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4+IGNsYXNz
IEJpZGlSZXNvbHZlcjsKK3RlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuLCBjbGFz
cyBJc29sYXRlUnVuPiBjbGFzcyBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTsKK3RlbXBsYXRlIDxj
bGFzcyBJdGVyYXRvcj4gY2xhc3MgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTsKK30KKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMZWdhY3lJbmxpbmVJdGVyYXRvcjsKQEAgLTM1LDEx
ICs0MSw4IEBAIGNsYXNzIFJlbmRlclRleHQ7CiBzdHJ1Y3QgQmlkaVJ1bjsKIHN0cnVjdCBCaWRp
SXNvbGF0ZWRSdW47CiAKLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuPiBjbGFz
cyBCaWRpUmVzb2x2ZXI7Ci10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIFJ1biwgY2xh
c3MgSXNvbGF0ZVJ1bj4gY2xhc3MgQmlkaVJlc29sdmVyV2l0aElzb2xhdGU7Ci10ZW1wbGF0ZSA8
Y2xhc3MgSXRlcmF0b3I+IGNsYXNzIFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7Ci10eXBlZGVm
IEJpZGlSZXNvbHZlcldpdGhJc29sYXRlPExlZ2FjeUlubGluZUl0ZXJhdG9yLCBCaWRpUnVuLCBC
aWRpSXNvbGF0ZWRSdW4+IElubGluZUJpZGlSZXNvbHZlcjsKLXR5cGVkZWYgV2hpdGVzcGFjZUNv
bGxhcHNpbmdTdGF0ZTxMZWdhY3lJbmxpbmVJdGVyYXRvcj4gTGluZVdoaXRlc3BhY2VDb2xsYXBz
aW5nU3RhdGU7Cit1c2luZyBJbmxpbmVCaWRpUmVzb2x2ZXIgPSBQQUw6OkJpZGlSZXNvbHZlcldp
dGhJc29sYXRlPExlZ2FjeUlubGluZUl0ZXJhdG9yLCBCaWRpUnVuLCBCaWRpSXNvbGF0ZWRSdW4+
OwordXNpbmcgTGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUgPSBQQUw6OldoaXRlc3BhY2VD
b2xsYXBzaW5nU3RhdGU8TGVnYWN5SW5saW5lSXRlcmF0b3I+OwogCiBjbGFzcyBUcmFpbGluZ09i
amVjdHMgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAppbmRleCBlZDhmMjBmOTg1YmFhMjU0NzQ4NDFiMjY4
YTQ1NDk3OTY0ZWYyZWJlLi5iMmRiNDhjZGI4NjM1OGNjOTQyZGMxYTdjNzk2NjlkNmU4N2U2NzRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEJsb2NrLmNwcApAQCAtODksNyArODksNyBAQCBMYXlvdXRVbml0IFJlbmRlck1hdGhNTEJs
b2NrOjptYXRoQXhpc0hlaWdodCgpIGNvbnN0CiAKIExheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxv
Y2s6Om1pcnJvcklmTmVlZGVkKExheW91dFVuaXQgaG9yaXpvbnRhbE9mZnNldCwgTGF5b3V0VW5p
dCBib3hXaWR0aCkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0
RGlyZWN0aW9uOjpSVEwpCisgICAgaWYgKHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgIHJldHVybiBsb2dpY2FsV2lkdGgoKSAtIGJveFdpZHRo
IC0gaG9yaXpvbnRhbE9mZnNldDsKIAogICAgIHJldHVybiBob3Jpem9udGFsT2Zmc2V0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9w
ZXJhdG9yLmNwcAppbmRleCBhYTFmZTU1MmExODNhYWQzMjJiY2IzNGQxMDhmZTFhYWMxMzM1MTUw
Li5hYTM5NGJlMjRhMTVlYTg1ZDhkZWU5MTVmMzJlNjY2MTcyNWYyNjhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9y
LmNwcApAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmxheW91
dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9nCiAgICAgICAg
IHNldExvZ2ljYWxXaWR0aCh3aWR0aCk7CiAKICAgICAgICAgLy8gV2UgdGhlbiBtb3ZlIHRoZSBj
aGlsZHJlbiB0byB0YWtlIHNwYWNpbmcgaW50byBhY2NvdW50LgotICAgICAgICBMYXlvdXRQb2lu
dCBob3Jpem9udGFsU2hpZnQoc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpM
VFIgPyBsZWFkaW5nU3BhY2VWYWx1ZSA6IC1sZWFkaW5nU3BhY2VWYWx1ZSwgMF9sdSk7CisgICAg
ICAgIExheW91dFBvaW50IGhvcml6b250YWxTaGlmdChzdHlsZSgpLmRpcmVjdGlvbigpID09IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSID8gbGVhZGluZ1NwYWNlVmFsdWUgOiAtbGVhZGluZ1NwYWNl
VmFsdWUsIDBfbHUpOwogICAgICAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZEJveCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkKICAgICAgICAgICAgIGNo
aWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+bG9jYXRpb24oKSArIGhvcml6b250YWxTaGlmdCk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAK
aW5kZXggMjhmZTM5YTk2YTA2Y2E2YWJkZmFlZGZkZDA0MzM5Y2M3ZjI5MjFhMy4uNDRlZDQ4NmU3
NDY1NzRkOGM3NWRkYzhmNjlhNGIxM2Q5MTg2YzViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgUmVuZGVy
U3R5bGU6OlJlbmRlclN0eWxlKENyZWF0ZURlZmF1bHRTdHlsZVRhZykKICAgICBtX25vbkluaGVy
aXRlZEZsYWdzLnZlcnRpY2FsQWxpZ24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5pdGlhbFZl
cnRpY2FsQWxpZ24oKSk7CiAgICAgbV9ub25Jbmhlcml0ZWRGbGFncy5jbGVhciA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbml0aWFsQ2xlYXIoKSk7CiAgICAgbV9ub25Jbmhlcml0ZWRGbGFncy5w
b3NpdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbml0aWFsUG9zaXRpb24oKSk7Ci0gICAg
bV9ub25Jbmhlcml0ZWRGbGFncy51bmljb2RlQmlkaSA9IGluaXRpYWxVbmljb2RlQmlkaSgpOwor
ICAgIG1fbm9uSW5oZXJpdGVkRmxhZ3MudW5pY29kZUJpZGkgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaW5pdGlhbFVuaWNvZGVCaWRpKCkpOwogICAgIG1fbm9uSW5oZXJpdGVkRmxhZ3MuZmxvYXRp
bmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5pdGlhbEZsb2F0aW5nKCkpOwogICAgIG1fbm9u
SW5oZXJpdGVkRmxhZ3MudGFibGVMYXlvdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5pdGlh
bFRhYmxlTGF5b3V0KCkpOwogICAgIG1fbm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRseVNl
dEJvcmRlclJhZGl1cyA9IGZhbHNlOwpAQCAtMjgwNiw3ICsyODA2LDcgQEAgVXNlZENsZWFyIFJl
bmRlclN0eWxlOjp1c2VkQ2xlYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKICAgICBj
YXNlIENsZWFyOjpJbmxpbmVTdGFydDoKICAgICBjYXNlIENsZWFyOjpJbmxpbmVFbmQ6CiAgICAg
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrRGlyZWN0aW9uID0gcmVuZGVyZXIuY29udGFpbmluZ0Js
b2NrKCktPnN0eWxlKCkuZGlyZWN0aW9uKCk7Ci0gICAgICAgIGlmIChjb250YWluaW5nQmxvY2tE
aXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgICAgICBpZiAoY29udGFpbmluZ0Js
b2NrRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAgICAgICAgcmV0
dXJuIGNvbXB1dGVkVmFsdWUgPT0gQ2xlYXI6OklubGluZVN0YXJ0ID8gVXNlZENsZWFyOjpSaWdo
dCA6IFVzZWRDbGVhcjo6TGVmdDsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVkVmFsdWUgPT0gQ2xl
YXI6OklubGluZVN0YXJ0ID8gVXNlZENsZWFyOjpMZWZ0IDogVXNlZENsZWFyOjpSaWdodDsKICAg
ICB9CkBAIC0yODI3LDcgKzI4MjcsNyBAQCBVc2VkRmxvYXQgUmVuZGVyU3R5bGU6OnVzZWRGbG9h
dChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogICAgIGNhc2UgRmxvYXQ6OklubGluZVN0
YXJ0OgogICAgIGNhc2UgRmxvYXQ6OklubGluZUVuZDoKICAgICAgICAgYXV0byBjb250YWluaW5n
QmxvY2tEaXJlY3Rpb24gPSByZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS5kaXJl
Y3Rpb24oKTsKLSAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9ja0RpcmVjdGlvbiA9PSBUZXh0RGly
ZWN0aW9uOjpSVEwpCisgICAgICAgIGlmIChjb250YWluaW5nQmxvY2tEaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRWYWx1ZSA9
PSBGbG9hdDo6SW5saW5lU3RhcnQgPyBVc2VkRmxvYXQ6OlJpZ2h0IDogVXNlZEZsb2F0OjpMZWZ0
OwogICAgICAgICByZXR1cm4gY29tcHV0ZWRWYWx1ZSA9PSBGbG9hdDo6SW5saW5lU3RhcnQgPyBV
c2VkRmxvYXQ6OkxlZnQgOiBVc2VkRmxvYXQ6OlJpZ2h0OwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggMjcyYTE5NmVlY2ZiZGUwMDhh
OTk4NGUwYTQ1MjkzMmE5MDBlOTIyOC4uNTExYmZiYmFhODY2NTY1YmVhM2Q0NDdjMzgwNDVmNjIy
MmE2MDUwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmgKQEAgLTcwLDggKzcwLDggQEAKICNpbmNsdWRlICJUb3VjaEFjdGlvbi5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24uaCIKLSNpbmNsdWRlICJVbmljb2RlQmlkaS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDxwYWwvdGV4dC9Vbmljb2RlQmlkaS5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhUmVmLmg+
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KQEAgLTM0OCw3ICszNDgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgTGVuZ3RoQm94JiBjbGlw
KCkgY29uc3QgeyByZXR1cm4gbV92aXN1YWxEYXRhLT5jbGlwOyB9CiAgICAgYm9vbCBoYXNDbGlw
KCkgY29uc3QgeyByZXR1cm4gbV92aXN1YWxEYXRhLT5oYXNDbGlwOyB9CiAKLSAgICBFVW5pY29k
ZUJpZGkgdW5pY29kZUJpZGkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFVW5pY29kZUJp
ZGk+KG1fbm9uSW5oZXJpdGVkRmxhZ3MudW5pY29kZUJpZGkpOyB9CisgICAgUEFMOjpFVW5pY29k
ZUJpZGkgdW5pY29kZUJpZGkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6OkVVbmlj
b2RlQmlkaT4obV9ub25Jbmhlcml0ZWRGbGFncy51bmljb2RlQmlkaSk7IH0KIAogICAgIENsZWFy
IGNsZWFyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q2xlYXI+KG1fbm9uSW5oZXJpdGVk
RmxhZ3MuY2xlYXIpOyB9CiAgICAgc3RhdGljIFVzZWRDbGVhciB1c2VkQ2xlYXIoY29uc3QgUmVu
ZGVyT2JqZWN0Jik7CkBAIC0zOTQsOCArMzk0LDggQEAgcHVibGljOgogICAgIAogICAgIFRleHRa
b29tIHRleHRab29tKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dFpvb20+KG1fcmFy
ZUluaGVyaXRlZERhdGEtPnRleHRab29tKTsgfQogCi0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0RGlyZWN0aW9uPihtX2luaGVyaXRl
ZEZsYWdzLmRpcmVjdGlvbik7IH0KLSAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBj
b25zdCB7IHJldHVybiBkaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBQ
QUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
UEFMOjpUZXh0RGlyZWN0aW9uPihtX2luaGVyaXRlZEZsYWdzLmRpcmVjdGlvbik7IH0KKyAgICBi
b29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkaXJlY3Rpb24oKSA9
PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsgfQogICAgIGJvb2wgaGFzRXhwbGljaXRseVNldERp
cmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRs
eVNldERpcmVjdGlvbjsgfQogCiAgICAgY29uc3QgTGVuZ3RoJiBzcGVjaWZpZWRMaW5lSGVpZ2h0
KCkgY29uc3Q7CkBAIC05NjUsNyArOTY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2xpcChM
ZW5ndGgmJiB0b3AsIExlbmd0aCYmIHJpZ2h0LCBMZW5ndGgmJiBib3R0b20sIExlbmd0aCYmIGxl
ZnQpOwogICAgIHZvaWQgc2V0Q2xpcChMZW5ndGhCb3gmJiBib3gpIHsgU0VUX1ZBUihtX3Zpc3Vh
bERhdGEsIGNsaXAsIFdURk1vdmUoYm94KSk7IH0KIAotICAgIHZvaWQgc2V0VW5pY29kZUJpZGko
RVVuaWNvZGVCaWRpIHYpIHsgbV9ub25Jbmhlcml0ZWRGbGFncy51bmljb2RlQmlkaSA9IHY7IH0K
KyAgICB2b2lkIHNldFVuaWNvZGVCaWRpKFBBTDo6RVVuaWNvZGVCaWRpIHYpIHsgbV9ub25Jbmhl
cml0ZWRGbGFncy51bmljb2RlQmlkaSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2KTsgfQogCiAg
ICAgdm9pZCBzZXRDbGVhcihDbGVhciB2KSB7IG1fbm9uSW5oZXJpdGVkRmxhZ3MuY2xlYXIgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odik7IH0KICAgICB2b2lkIHNldFRhYmxlTGF5b3V0KFRhYmxl
TGF5b3V0VHlwZSB2KSB7IG1fbm9uSW5oZXJpdGVkRmxhZ3MudGFibGVMYXlvdXQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odik7IH0KQEAgLTk5Myw3ICs5OTMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oVGV4dFVuZGVybGluZVBvc2l0aW9uIHBvc2l0aW9u
KSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFVuZGVybGluZVBvc2l0aW9uLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pKTsgfQogICAgIHZvaWQgc2V0VGV4dFVuZGVy
bGluZU9mZnNldChUZXh0VW5kZXJsaW5lT2Zmc2V0IHRleHRVbmRlcmxpbmVPZmZzZXQpIHsgU0VU
X1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0VW5kZXJsaW5lT2Zmc2V0LCB0ZXh0VW5kZXJs
aW5lT2Zmc2V0KTsgfQogICAgIHZvaWQgc2V0VGV4dERlY29yYXRpb25UaGlja25lc3MoVGV4dERl
Y29yYXRpb25UaGlja25lc3MgdGV4dERlY29yYXRpb25UaGlja25lc3MpIHsgU0VUX1ZBUihtX3Jh
cmVJbmhlcml0ZWREYXRhLCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgdGV4dERlY29yYXRpb25U
aGlja25lc3MpOyB9Ci0gICAgdm9pZCBzZXREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiB2KSB7IG1f
aW5oZXJpdGVkRmxhZ3MuZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHYpOyB9Cisg
ICAgdm9pZCBzZXREaXJlY3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9uIHYpIHsgbV9pbmhlcml0ZWRG
bGFncy5kaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odik7IH0KICAgICB2b2lkIHNl
dEhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb24oYm9vbCB2KSB7IG1fbm9uSW5oZXJpdGVkRmxhZ3Mu
aGFzRXhwbGljaXRseVNldERpcmVjdGlvbiA9IHY7IH0KICAgICB2b2lkIHNldExpbmVIZWlnaHQo
TGVuZ3RoJiYpOwogICAgIGJvb2wgc2V0Wm9vbShmbG9hdCk7CkBAIC0xNTU5LDcgKzE1NTksNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgQ2xlYXIgaW5pdGlhbENsZWFyKCkgeyByZXR1cm4gQ2xl
YXI6Ok5vbmU7IH0KICAgICBzdGF0aWMgRGlzcGxheVR5cGUgaW5pdGlhbERpc3BsYXkoKSB7IHJl
dHVybiBEaXNwbGF5VHlwZTo6SW5saW5lOyB9Ci0gICAgc3RhdGljIEVVbmljb2RlQmlkaSBpbml0
aWFsVW5pY29kZUJpZGkoKSB7IHJldHVybiBVQk5vcm1hbDsgfQorICAgIHN0YXRpYyBQQUw6OkVV
bmljb2RlQmlkaSBpbml0aWFsVW5pY29kZUJpZGkoKSB7IHJldHVybiBQQUw6OkVVbmljb2RlQmlk
aTo6VUJOb3JtYWw7IH0KICAgICBzdGF0aWMgUG9zaXRpb25UeXBlIGluaXRpYWxQb3NpdGlvbigp
IHsgcmV0dXJuIFBvc2l0aW9uVHlwZTo6U3RhdGljOyB9CiAgICAgc3RhdGljIFZlcnRpY2FsQWxp
Z24gaW5pdGlhbFZlcnRpY2FsQWxpZ24oKSB7IHJldHVybiBWZXJ0aWNhbEFsaWduOjpCYXNlbGlu
ZTsgfQogICAgIHN0YXRpYyBGbG9hdCBpbml0aWFsRmxvYXRpbmcoKSB7IHJldHVybiBGbG9hdDo6
Tm9uZTsgfQpAQCAtMTU3NSw3ICsxNTc1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBDYXB0aW9u
U2lkZSBpbml0aWFsQ2FwdGlvblNpZGUoKSB7IHJldHVybiBDYXB0aW9uU2lkZTo6VG9wOyB9CiAg
ICAgc3RhdGljIENvbHVtbkF4aXMgaW5pdGlhbENvbHVtbkF4aXMoKSB7IHJldHVybiBDb2x1bW5B
eGlzOjpBdXRvOyB9CiAgICAgc3RhdGljIENvbHVtblByb2dyZXNzaW9uIGluaXRpYWxDb2x1bW5Q
cm9ncmVzc2lvbigpIHsgcmV0dXJuIENvbHVtblByb2dyZXNzaW9uOjpOb3JtYWw7IH0KLSAgICBz
dGF0aWMgVGV4dERpcmVjdGlvbiBpbml0aWFsRGlyZWN0aW9uKCkgeyByZXR1cm4gVGV4dERpcmVj
dGlvbjo6TFRSOyB9CisgICAgc3RhdGljIFBBTDo6VGV4dERpcmVjdGlvbiBpbml0aWFsRGlyZWN0
aW9uKCkgeyByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0KICAgICBzdGF0aWMgV3Jp
dGluZ01vZGUgaW5pdGlhbFdyaXRpbmdNb2RlKCkgeyByZXR1cm4gV3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tOyB9CiAgICAgc3RhdGljIFRleHRDb21iaW5lIGluaXRpYWxUZXh0Q29tYmluZSgpIHsg
cmV0dXJuIFRleHRDb21iaW5lOjpOb25lOyB9CiAgICAgc3RhdGljIFRleHRPcmllbnRhdGlvbiBp
bml0aWFsVGV4dE9yaWVudGF0aW9uKCkgeyByZXR1cm4gVGV4dE9yaWVudGF0aW9uOjpNaXhlZDsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvRWxlbWVudFJ1bGVDb2xsZWN0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4
IGZlZmE0ODVjYWZiZjRiYmM4NGJlOTVmNDU5YTc5OWUyNzY4ZDY1ZjUuLjczNmIyMGRhNDUyNTc5
MTIwY2U3YzJiMGQxYzI1NjQ5NzA5NjA1YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9F
bGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKQEAgLTU0MSw3ICs1NDEsNyBAQCB2b2lkIEVsZW1lbnRS
dWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
LCBib29sIGluYwogICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KHN0eWxlZEVsZW1lbnQpKSB7
CiAgICAgICAgICAgICBib29sIGlzQXV0bzsKICAgICAgICAgICAgIGF1dG8gdGV4dERpcmVjdGlv
biA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihzdHlsZWRFbGVtZW50KS5kaXJlY3Rpb25hbGl0eUlm
aGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOwotICAgICAgICAgICAgYXV0byYgcHJvcGVydGll
cyA9IHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gbGVmdFRvUmlnaHREZWNs
YXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpOworICAgICAgICAgICAgYXV0byYg
cHJvcGVydGllcyA9IHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBs
ZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCk7CiAgICAg
ICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVz
KHsgJnByb3BlcnRpZXMgfSwgRGVjbGFyYXRpb25PcmlnaW46OkF1dGhvcik7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAppbmRleCAyMjk5Zjhj
NjM3OWI1MDk0OTJhMWExZmZhNTIzMDZhMWFhMTY4OWI0Li4yOGIyYzQ3ODgxOTU4OTNmNDY2YzIw
NmRkMTRjZTVlNGM3N2Q0YjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdl
UnVsZUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xs
ZWN0b3IuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUGFn
ZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25zdCBTdHlsZVJ1bGVQYWdlCiAKIGJv
b2wgUGFnZVJ1bGVDb2xsZWN0b3I6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKIHsK
LSAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IG1fcm9vdERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0
aW9uOjpSVEw7CisgICAgYm9vbCBpc0ZpcnN0UGFnZUxlZnQgPSBtX3Jvb3REaXJlY3Rpb24gPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgcmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJz
dFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVs
ZUNvbGxlY3Rvci5oCmluZGV4IGU0NTJjNzQ0YTYwNGI0ZTI3NDExN2Y1NmE3ZGM5MTAxNmY3Yjhl
NjUuLjVlNGNmMGI1ZDBjOTBmNTVmM2E0MGVhODE5MDViZjdiZDhmY2Y2ZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuaApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3Bh
Y2UgU3R5bGUgewogCiBjbGFzcyBQYWdlUnVsZUNvbGxlY3RvciB7CiBwdWJsaWM6Ci0gICAgUGFn
ZVJ1bGVDb2xsZWN0b3IoU2NvcGVSdWxlU2V0cyYgcnVsZVNldHMsIFRleHREaXJlY3Rpb24gcm9v
dERpcmVjdGlvbikKKyAgICBQYWdlUnVsZUNvbGxlY3RvcihTY29wZVJ1bGVTZXRzJiBydWxlU2V0
cywgUEFMOjpUZXh0RGlyZWN0aW9uIHJvb3REaXJlY3Rpb24pCiAgICAgICAgIDogbV9ydWxlU2V0
cyhydWxlU2V0cykKICAgICAgICAgLCBtX3Jvb3REaXJlY3Rpb24ocm9vdERpcmVjdGlvbikKICAg
ICB7IH0KQEAgLTUxLDcgKzUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoUGFnZVJ1bGVz
Rm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsIGNvbnN0IFZlY3Rv
cjxTdHlsZVJ1bGVQYWdlKj4mIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBh
Z2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogCiAgICAgU2NvcGVSdWxlU2V0cyYgbV9ydWxl
U2V0czsKLSAgICBUZXh0RGlyZWN0aW9uIG1fcm9vdERpcmVjdGlvbjsKKyAgICBQQUw6OlRleHRE
aXJlY3Rpb24gbV9yb290RGlyZWN0aW9uOwogCiAgICAgTWF0Y2hSZXN1bHQgbV9yZXN1bHQ7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmggYi9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAppbmRleCA1MDY0Zjc4MWIzNGU3
MDY1ODQwMTMwMjVmOGI5NWVjNjgxYTc2ODRhLi5kYmJlZDQxZmM3NGRjMGJjY2FkMzU1OWY3MDIy
MzczYTVjOWRmNzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNh
c2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaApAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBJbmNsdWRlZFByb3BlcnRpZXMgeyBBbGws
IEluaGVyaXRlZE9ubHkgfTsKIAogICAgIHN0cnVjdCBEaXJlY3Rpb24gewotICAgICAgICBUZXh0
RGlyZWN0aW9uIHRleHREaXJlY3Rpb247CisgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0
RGlyZWN0aW9uOwogICAgICAgICBXcml0aW5nTW9kZSB3cml0aW5nTW9kZTsKICAgICB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCmluZGV4IGYxYTdlMjIxMTIw
ZTcxYTk2OTkxYjMyMzNhMzg1NDMwMzE4OWQ1YjAuLmY5OGNjOWEzMDgyNzhjMTQ5NWU2YTlhNmVj
YWIyYTJlOTUxNjhmZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5n
cy5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBVc2VySW50ZXJmYWNlRGly
ZWN0aW9uUG9saWN5ID0gV2ViQ29yZTo6VXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeTsKICAg
ICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5KFVzZXJJ
bnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3kpOwogCi0gICAgdXNpbmcgU3lzdGVtTGF5b3V0RGlyZWN0
aW9uID0gVGV4dERpcmVjdGlvbjsKKyAgICB1c2luZyBTeXN0ZW1MYXlvdXREaXJlY3Rpb24gPSBQ
QUw6OlRleHREaXJlY3Rpb247CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3lzdGVtTGF5b3V0
RGlyZWN0aW9uKFN5c3RlbUxheW91dERpcmVjdGlvbik7CiAKICAgICB1c2luZyBGb250TG9hZFRp
bWluZ092ZXJyaWRlID0gV2ViQ29yZTo6Rm9udExvYWRUaW1pbmdPdmVycmlkZTsKQEAgLTE0Nyw3
ICsxNDcsNyBAQCBwcml2YXRlOgogICAgICAgICBXZWJDb3JlOjpFZGl0aW5nQmVoYXZpb3JUeXBl
IG1fb3JpZ2luYWxFZGl0aW5nQmVoYXZpb3I7CiAgICAgICAgIFdlYkNvcmU6OlN0b3JhZ2VCbG9j
a2luZ1BvbGljeSBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeTsKICAgICAgICAgV2ViQ29yZTo6VXNl
ckludGVyZmFjZURpcmVjdGlvblBvbGljeSBtX3VzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3k7
Ci0gICAgICAgIFRleHREaXJlY3Rpb24gbV9zeXN0ZW1MYXlvdXREaXJlY3Rpb247CisgICAgICAg
IFBBTDo6VGV4dERpcmVjdGlvbiBtX3N5c3RlbUxheW91dERpcmVjdGlvbjsKICAgICAgICAgV2Vi
Q29yZTo6UERGSW1hZ2VDYWNoaW5nUG9saWN5IG1fcGRmSW1hZ2VDYWNoaW5nUG9saWN5OwogICAg
ICAgICBXZWJDb3JlOjpGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgbV9mb3JjZWRDb2xvcnNBcmVJ
bnZlcnRlZEFjY2Vzc2liaWxpdHlWYWx1ZTsKICAgICAgICAgV2ViQ29yZTo6Rm9yY2VkQWNjZXNz
aWJpbGl0eVZhbHVlIG1fZm9yY2VkRGlzcGxheUlzTW9ub2Nocm9tZUFjY2Vzc2liaWxpdHlWYWx1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAzYzI3NGM1MDYyMzA4ZWVj
ZTE1ZDdmYWY3ZGUxNTcyMjU4Y2Q0YTRkLi5lODcyOWFlMDU1ZmIwMzdjZjI5MGEyOTc2NWU3YWZm
N2NlMDJlMzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0zOTA5LDcg
KzM5MDksNyBAQCBTdHJpbmcgSW50ZXJuYWxzOjp0b29sVGlwRnJvbUVsZW1lbnQoRWxlbWVudCYg
ZWxlbWVudCkgY29uc3QKIHsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdDsKICAgICByZXN1bHQu
c2V0SW5uZXJOb2RlKCZlbGVtZW50KTsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAg
ICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwogICAgIHJldHVybiByZXN1bHQudGl0bGUo
ZGlyZWN0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHAKaW5kZXggYzg5ODY4N2IyMjZjY2U0YjRmM2I4YjFhODVjYmVjNzk1OGI2N2Fi
Ni4uYTBkM2EwODlhY2ViNDBhYjY4ZmJhNjI3NWMxOWRiMzNlNDI0OTA4YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0xMzE2LDcgKzEz
MTYsNyBAQCBzdGQ6Om9wdGlvbmFsPFNlbGVjdGlvbkdlb21ldHJ5PiBBcmd1bWVudENvZGVyPFNl
bGVjdGlvbkdlb21ldHJ5Pjo6ZGVjb2RlKERlY29kZQogICAgIHVpbnQzMl90IGRpcmVjdGlvbjsK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRpcmVjdGlvbikpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgc2VsZWN0aW9uR2VvbWV0cnkuc2V0RGlyZWN0aW9uKChUZXh0RGlyZWN0
aW9uKWRpcmVjdGlvbik7CisgICAgc2VsZWN0aW9uR2VvbWV0cnkuc2V0RGlyZWN0aW9uKChQQUw6
OlRleHREaXJlY3Rpb24pZGlyZWN0aW9uKTsKIAogICAgIGludCBpbnRWYWx1ZTsKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGludFZhbHVlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYlBvcHVwSXRlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0u
Y3BwCmluZGV4IGYwMDQ1NGViNzI5NjM3MDBjMTIzY2JkMTQ0ODZlM2YyOWFmMzhkMDIuLmMwMjk5
Yzc3ZWMzZWU2MTcwOTk1NzkzOTU0MmE2MTEwOTUzYTI0YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViUG9wdXBJdGVtLmNwcApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
V2ViUG9wdXBJdGVtOjpXZWJQb3B1cEl0ZW0oKQogICAgIDogbV90eXBlKFR5cGU6Okl0ZW0pCi0g
ICAgLCBtX3RleHREaXJlY3Rpb24oV2ViQ29yZTo6VGV4dERpcmVjdGlvbjo6TFRSKQorICAgICwg
bV90ZXh0RGlyZWN0aW9uKFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICwgbV9oYXNUZXh0
RGlyZWN0aW9uT3ZlcnJpZGUoZmFsc2UpCiAgICAgLCBtX2lzRW5hYmxlZCh0cnVlKQogICAgICwg
bV9pc1NlbGVjdGVkKGZhbHNlKQpAQCAtNDIsNyArNDIsNyBAQCBXZWJQb3B1cEl0ZW06OldlYlBv
cHVwSXRlbSgpCiAKIFdlYlBvcHVwSXRlbTo6V2ViUG9wdXBJdGVtKFR5cGUgdHlwZSkKICAgICA6
IG1fdHlwZSh0eXBlKQotICAgICwgbV90ZXh0RGlyZWN0aW9uKFdlYkNvcmU6OlRleHREaXJlY3Rp
b246OkxUUikKKyAgICAsIG1fdGV4dERpcmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb246OkxUUikK
ICAgICAsIG1faGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlKGZhbHNlKQogICAgICwgbV9pc0VuYWJs
ZWQodHJ1ZSkKICAgICAsIG1faXNMYWJlbChmYWxzZSkKQEAgLTUwLDcgKzUwLDcgQEAgV2ViUG9w
dXBJdGVtOjpXZWJQb3B1cEl0ZW0oVHlwZSB0eXBlKQogewogfQogCi1XZWJQb3B1cEl0ZW06Oldl
YlBvcHVwSXRlbShUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgV2ViQ29yZTo6VGV4dERp
cmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBib29sIGhhc1RleHREaXJlY3Rpb25PdmVycmlkZSwgY29u
c3QgU3RyaW5nJiB0b29sVGlwLCBjb25zdCBTdHJpbmcmIGFjY2Vzc2liaWxpdHlUZXh0LCBib29s
IGlzRW5hYmxlZCwgYm9vbCBpc0xhYmVsLCBib29sIGlzU2VsZWN0ZWQpCitXZWJQb3B1cEl0ZW06
OldlYlBvcHVwSXRlbShUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgUEFMOjpUZXh0RGly
ZWN0aW9uIHRleHREaXJlY3Rpb24sIGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBjb25z
dCBTdHJpbmcmIHRvb2xUaXAsIGNvbnN0IFN0cmluZyYgYWNjZXNzaWJpbGl0eVRleHQsIGJvb2wg
aXNFbmFibGVkLCBib29sIGlzTGFiZWwsIGJvb2wgaXNTZWxlY3RlZCkKICAgICA6IG1fdHlwZSh0
eXBlKQogICAgICwgbV90ZXh0KHRleHQpCiAgICAgLCBtX3RleHREaXJlY3Rpb24odGV4dERpcmVj
dGlvbikKQEAgLTg2LDcgKzg2LDcgQEAgc3RkOjpvcHRpb25hbDxXZWJQb3B1cEl0ZW0+IFdlYlBv
cHVwSXRlbTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHRleHQpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIAotICAgIFdl
YkNvcmU6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbjsKKyAgICBQQUw6OlRleHREaXJlY3Rp
b24gdGV4dERpcmVjdGlvbjsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRleHREaXJlY3Rpb24p
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0uaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVw
SXRlbS5oCmluZGV4IDJjMzc1NDVlY2M2YzcyZjhkZmZiM2IwODFhZTU5ZWU2Yjc5MjU3ZDMuLjli
OGI0NjQ5YWUyNDY0ZDJjMDM0M2IxNTY5OWQyZWE4MWFlYjc0YTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlBvcHVwSXRlbS5oCkBAIC00NCwxNCArNDQsMTQgQEAgc3RydWN0IFdlYlBvcHVwSXRlbSB7
CiAKICAgICBXZWJQb3B1cEl0ZW0oKTsKICAgICBXZWJQb3B1cEl0ZW0oVHlwZSk7Ci0gICAgV2Vi
UG9wdXBJdGVtKFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgV2ViQ29yZTo6VGV4dERpcmVjdGlv
biwgYm9vbCBoYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwg
Y29uc3QgU3RyaW5nJiBhY2Nlc3NpYmlsaXR5VGV4dCwgYm9vbCBpc0VuYWJsZWQsIGJvb2wgaXNM
YWJlbCwgYm9vbCBpc1NlbGVjdGVkKTsKKyAgICBXZWJQb3B1cEl0ZW0oVHlwZSwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBQQUw6OlRleHREaXJlY3Rpb24sIGJvb2wgaGFzVGV4dERpcmVjdGlvbk92ZXJy
aWRlLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIGNvbnN0IFN0cmluZyYgYWNjZXNzaWJpbGl0eVRl
eHQsIGJvb2wgaXNFbmFibGVkLCBib29sIGlzTGFiZWwsIGJvb2wgaXNTZWxlY3RlZCk7CiAKICAg
ICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKICAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxXZWJQb3B1cEl0ZW0+IGRlY29kZShJUEM6OkRlY29kZXImKTsKIAogICAgIFR5cGUgbV90
eXBlOwogICAgIFN0cmluZyBtX3RleHQ7Ci0gICAgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiBtX3Rl
eHREaXJlY3Rpb247CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIG1fdGV4dERpcmVjdGlvbjsKICAg
ICBib29sIG1faGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlOwogICAgIFN0cmluZyBtX3Rvb2xUaXA7
CiAgICAgU3RyaW5nIG1fYWNjZXNzaWJpbGl0eVRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCA1MmQ2Mzk1ZjAwNjNiNmE5Y2NiMDYw
NGJhYjJmOGM0MTI4Y2JiZThjLi40OTMzZWMxMWZhNTBjZGFmYjU2ZDgwOGM1ODFkYWFiMTJhOWQ3
NmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0KQEAgLTUwNyw3ICs1MDcsNyBAQCBzdGF0aWMgdm9pZCBoYXJkd2FyZUtleWJvYXJkQXZhaWxh
YmlsaXR5Q2hhbmdlZENhbGxiYWNrKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLAogICAgIHBhZ2VD
b25maWd1cmF0aW9uLT5wcmVmZXJlbmNlcygpLT5zZXRJbmxpbmVNZWRpYVBsYXliYWNrUmVxdWly
ZXNQbGF5c0lubGluZUF0dHJpYnV0ZSghIVtfY29uZmlndXJhdGlvbiBfaW5saW5lTWVkaWFQbGF5
YmFja1JlcXVpcmVzUGxheXNJbmxpbmVBdHRyaWJ1dGVdKTsKICAgICBwYWdlQ29uZmlndXJhdGlv
bi0+cHJlZmVyZW5jZXMoKS0+c2V0QWxsb3dzUGljdHVyZUluUGljdHVyZU1lZGlhUGxheWJhY2so
ISFbX2NvbmZpZ3VyYXRpb24gYWxsb3dzUGljdHVyZUluUGljdHVyZU1lZGlhUGxheWJhY2tdICYm
IHNob3VsZEFsbG93UGljdHVyZUluUGljdHVyZU1lZGlhUGxheWJhY2soKSk7CiAgICAgcGFnZUNv
bmZpZ3VyYXRpb24tPnByZWZlcmVuY2VzKCktPnNldFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xp
Y3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Q
b2xpY3k6OkNvbnRlbnQpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZXMoKS0+
c2V0U3lzdGVtTGF5b3V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpU
ZXh0RGlyZWN0aW9uOjpMVFIpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZXMo
KS0+c2V0U3lzdGVtTGF5b3V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PHVpbnQzMl90PihQQUw6OlRl
eHREaXJlY3Rpb246OkxUUikpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5wcmVmZXJlbmNlcygp
LT5zZXRBbGxvd1NldHRpbmdBbnlYSFJIZWFkZXJGcm9tRmlsZVVSTHMoc2hvdWxkQWxsb3dTZXR0
aW5nQW55WEhSSGVhZGVyRnJvbUZpbGVVUkxzKCkpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5w
cmVmZXJlbmNlcygpLT5zZXRTaG91bGREZWNpZGVQb2xpY3lCZWZvcmVMb2FkaW5nUXVpY2tMb29r
UHJldmlldyghIVtfY29uZmlndXJhdGlvbiBfc2hvdWxkRGVjaWRlUG9saWN5QmVmb3JlTG9hZGlu
Z1F1aWNrTG9va1ByZXZpZXddKTsKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYjc5MDMyOTUyMjFkNzFk
OTc5ZjQ4YjZkNjZmNmZhYTc3NTEyN2IwMi4uMmJhNTI0N2RmMGEzNTFhMjQ0ZmQ0ZDU0ZDJhZTFk
YzRiYjdlY2Q3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBA
IC02ODc2LDcgKzY4NzYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1BvcHVwTWVudShjb25z
dCBJbnRSZWN0JiByZWN0LCB1aW50NjRfdCB0ZXh0RGlyZWN0aW9uLCBjbwogCiAgICAgLy8gU2hv
d2luZyBhIHBvcHVwIG1lbnUgcnVucyBhIG5lc3RlZCBydW5sb29wLCB3aGljaCBjYW4gaGFuZGxl
IG1lc3NhZ2VzIHRoYXQgY2F1c2UgfHRoaXN8IHRvIGdldCBjbG9zZWQuCiAgICAgUmVmPFdlYlBh
Z2VQcm94eT4gcHJvdGVjdCgqdGhpcyk7Ci0gICAgbV9hY3RpdmVQb3B1cE1lbnUtPnNob3dQb3B1
cE1lbnUocmVjdCwgc3RhdGljX2Nhc3Q8VGV4dERpcmVjdGlvbj4odGV4dERpcmVjdGlvbiksIG1f
cGFnZVNjYWxlRmFjdG9yLCBpdGVtcywgZGF0YSwgc2VsZWN0ZWRJbmRleCk7CisgICAgbV9hY3Rp
dmVQb3B1cE1lbnUtPnNob3dQb3B1cE1lbnUocmVjdCwgc3RhdGljX2Nhc3Q8UEFMOjpUZXh0RGly
ZWN0aW9uPih0ZXh0RGlyZWN0aW9uKSwgbV9wYWdlU2NhbGVGYWN0b3IsIGl0ZW1zLCBkYXRhLCBz
ZWxlY3RlZEluZGV4KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmhpZGVQb3B1cE1lbnUoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUG9wdXBNZW51UHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBvcHVwTWVudVByb3h5LmgKaW5kZXggNjFkZWUy
ZTRiNjY4MGE0YTdiNjg5YTQwZDA3NGMzZTIyMGM2MTIxYi4uZWQyOTM5ZTJmZjI2YTUwYzZiMDA1
ODMxNzc1OTg4OGMyZGRjMTdkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUG9wdXBNZW51UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQb3B1
cE1lbnVQcm94eS5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0g
ICAgdmlydHVhbCB2b2lkIHNob3dQb3B1cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVj
dCwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3Qg
VmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEm
LCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd1BvcHVw
TWVudShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUEFMOjpUZXh0RGlyZWN0aW9uLCBkb3VibGUg
cGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGNvbnN0
IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBoaWRlUG9wdXBNZW51KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjYW5j
ZWxUcmFja2luZygpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCA1YTNiMGQ3ZWUxZWQwNGU5Nzhi
NDg1ZmM0MWUxNWFmYWNkYmM2ZWU2Li5kZGVlYmE4M2RmMWMxYzY5YzNjZGEyODI4ZTY5ZmY0MGQy
NGY1MGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTMwMzYsNyArMzAzNiw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc1NhbWVQYWlyKFVJR2VzdHVyZVJlY29nbml6ZXIgKmEsIFVJR2VzdHVyZVJlY29n
bml6ZXIgKmIsIFVJCiAgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoc2VsZWN0aW9uR2VvbWV0cmll
cywgW10gKGF1dG8mIGdlb21ldHJ5KSB7CiAgICAgICAgIGF1dG8gd2ViUmVjdCA9IFtXZWJTZWxl
Y3Rpb25SZWN0IHNlbGVjdGlvblJlY3RdOwogICAgICAgICB3ZWJSZWN0LnJlY3QgPSBnZW9tZXRy
eS5yZWN0KCk7Ci0gICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGdlb21ldHJ5LmRp
cmVjdGlvbigpID09IFdlYkNvcmU6OlRleHREaXJlY3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAgICAg
IHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGdlb21ldHJ5LmRpcmVjdGlvbigpID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dy
aXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKICAgICAgICAgd2ViUmVjdC5pc0xpbmVCcmVhayA9
IGdlb21ldHJ5LmlzTGluZUJyZWFrKCk7CiAgICAgICAgIHdlYlJlY3QuaXNGaXJzdE9uTGluZSA9
IGdlb21ldHJ5LmlzRmlyc3RPbkxpbmUoKTsKICAgICAgICAgd2ViUmVjdC5pc0xhc3RPbkxpbmUg
PSBnZW9tZXRyeS5pc0xhc3RPbkxpbmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS1RleHRTZWxlY3Rpb25SZWN0Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0KaW5kZXggZTMxZGM4MDUyZTJmMDJiNzA4MDNj
MzlmZTBmMTExYjM4ODNlMTc1MS4uMDE0MDE4MDdiNjVjYWM4OTFhMDFjNWUwNzU0NjhjODA3ZGQy
ODZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVj
dGlvblJlY3QubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVj
dGlvblJlY3QubW0KQEAgLTEzOCw3ICsxMzgsNyBAQAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfQkVHSU4KIC0gKFVJVGV4dFdyaXRpbmdEaXJlY3Rpb24pd3JpdGluZ0RpcmVjdGlvbgog
ewotICAgIHJldHVybiBfc2VsZWN0aW9uR2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gV2ViQ29yZTo6
VGV4dERpcmVjdGlvbjo6TFRSID8gVUlUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDog
VUlUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OworICAgIHJldHVybiBfc2VsZWN0aW9u
R2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBVSVRleHRX
cml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBVSVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRU
b0xlZnQ7CiB9CiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMuaAppbmRleCAw
OTBlMTQ5ODI1NDEzYmQwODNjN2I0MjIzOGZlMGZjYTg4MmNjNDVmLi4wYzcwNzgwZDFmNmFkZTI3
NDY0NDI2ZjM5YjRkZDk0MTUzMjkxMjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMuaApAQCAtNDYsMTQgKzQ2LDE0IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgfldlYlBvcHVwTWVudVByb3h5TWFjKCk7CiAKLSAgICB2b2lkIHNob3dQ
b3B1cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24s
IGRvdWJsZSBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiwgY29u
c3QgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhJiwgaW50MzJfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNob3dQb3B1cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBBTDo6
VGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBv
cHVwSXRlbT4mLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVk
SW5kZXgpIG92ZXJyaWRlOwogICAgIHZvaWQgaGlkZVBvcHVwTWVudSgpIG92ZXJyaWRlOwogICAg
IHZvaWQgY2FuY2VsVHJhY2tpbmcoKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBXZWJQb3B1
cE1lbnVQcm94eU1hYyhOU1ZpZXcgKiwgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCYpOwogCi0g
ICAgdm9pZCBwb3B1bGF0ZShjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYsIE5TRm9udCAqLCBX
ZWJDb3JlOjpUZXh0RGlyZWN0aW9uKTsKKyAgICB2b2lkIHBvcHVsYXRlKGNvbnN0IFZlY3RvcjxX
ZWJQb3B1cEl0ZW0+JiwgTlNGb250ICosIFBBTDo6VGV4dERpcmVjdGlvbik7CiAKICAgICBSZXRh
aW5QdHI8TlNQb3BVcEJ1dHRvbkNlbGw+IG1fcG9wdXA7CiAgICAgTlNWaWV3ICptX3dlYlZpZXc7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJv
eHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlN
YWMubW0KaW5kZXggOGVmM2MwZDdmYTc1ZjIyZGI5YTE0ZDIwOGRjZWU3N2Q2OTljZjRjYy4uNTRl
N2I1MWQ3NWZkZmI2YmI3ZDA0OTgxOWJhYmI1NmM2OTBmZDkxYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5tbQpAQCAtNTUsNyAr
NTUsNyBAQCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6fldlYlBvcHVwTWVudVByb3h5TWFjKCkKICAg
ICAgICAgW21fcG9wdXAgc2V0Q29udHJvbFZpZXc6bmlsXTsKIH0KIAotdm9pZCBXZWJQb3B1cE1l
bnVQcm94eU1hYzo6cG9wdWxhdGUoY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBO
U0ZvbnQgKmZvbnQsIFRleHREaXJlY3Rpb24gbWVudVRleHREaXJlY3Rpb24pCit2b2lkIFdlYlBv
cHVwTWVudVByb3h5TWFjOjpwb3B1bGF0ZShjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRl
bXMsIE5TRm9udCAqZm9udCwgUEFMOjpUZXh0RGlyZWN0aW9uIG1lbnVUZXh0RGlyZWN0aW9uKQog
ewogICAgIGlmIChtX3BvcHVwKQogICAgICAgICBbbV9wb3B1cCByZW1vdmVBbGxJdGVtc107CkBA
IC03NSw5ICs3NSw5IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlNYWM6OnBvcHVsYXRlKGNvbnN0
IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgTlNGb250ICpmCiAgICAgICAgICAgICBOU01l
bnVJdGVtICptZW51SXRlbSA9IFttX3BvcHVwIGxhc3RJdGVtXTsKIAogICAgICAgICAgICAgUmV0
YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGhTdHlsZSA9IGFkb3B0TlMo
W1tOU1BhcmFncmFwaFN0eWxlIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZV0gbXV0YWJsZUNvcHldKTsK
LSAgICAgICAgICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uID0gaXRlbXNb
aV0ubV90ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TV3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0IDogTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAgICAg
ICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlvbiA9IGl0ZW1zW2ldLm1fdGV4
dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5TV3JpdGluZ0RpcmVjdGlv
bkxlZnRUb1JpZ2h0IDogTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAgICAg
ICBbcGFyYWdyYXBoU3R5bGUgc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb246d3JpdGluZ0RpcmVjdGlv
bl07Ci0gICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Om1lbnVUZXh0RGly
ZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TVGV4dEFsaWdubWVudExlZnQgOiBOU1Rl
eHRBbGlnbm1lbnRSaWdodF07CisgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25t
ZW50Om1lbnVUZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNUZXh0
QWxpZ25tZW50TGVmdCA6IE5TVGV4dEFsaWdubWVudFJpZ2h0XTsKICAgICAgICAgICAgIFJldGFp
blB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhbW05TTXV0YWJs
ZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6CiAgICAgICAgICAgICAg
ICAgcGFyYWdyYXBoU3R5bGUuZ2V0KCksIE5TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lLAog
ICAgICAgICAgICAgICAgIGZvbnQsIE5TRm9udEF0dHJpYnV0ZU5hbWUsCkBAIC05OSw3ICs5OSw3
IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlNYWM6OnBvcHVsYXRlKGNvbnN0IFZlY3RvcjxXZWJQ
b3B1cEl0ZW0+JiBpdGVtcywgTlNGb250ICpmCiAgICAgfQogfQogCi12b2lkIFdlYlBvcHVwTWVu
dVByb3h5TWFjOjpzaG93UG9wdXBNZW51KGNvbnN0IEludFJlY3QmIHJlY3QsIFRleHREaXJlY3Rp
b24gdGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdl
YlBvcHVwSXRlbT4mIGl0ZW1zLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmIGRhdGEsIGlu
dDMyX3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlNYWM6OnNob3dQb3B1
cE1lbnUoY29uc3QgSW50UmVjdCYgcmVjdCwgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rp
b24sIGRvdWJsZSBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBp
dGVtcywgY29uc3QgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhJiBkYXRhLCBpbnQzMl90IHNlbGVjdGVk
SW5kZXgpCiB7CiAgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVn
ZTo6Q2FuQ29tbXVuaWNhdGVXaXRoV2luZG93U2VydmVyKSk7CiAgICAgTlNGb250ICpmb250OwpA
QCAtMTIzLDEwICsxMjMsMTAgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6c2hvd1BvcHVw
TWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0aW9uIHRleHQKIAogICAgIFttX3Bv
cHVwIGF0dGFjaFBvcFVwV2l0aEZyYW1lOnJlY3QgaW5WaWV3Om1fd2ViVmlld107CiAgICAgW21f
cG9wdXAgc2VsZWN0SXRlbUF0SW5kZXg6c2VsZWN0ZWRJbmRleF07Ci0gICAgW21fcG9wdXAgc2V0
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rp
b246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOworICAgIFttX3BvcHVwIHNl
dFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0
IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOwogCiAgICAgTlNN
ZW51ICptZW51ID0gW21fcG9wdXAgbWVudV07Ci0gICAgW21lbnUgc2V0VXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOworICAgIFttZW51IHNldFVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5T
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOwogCiAgICAgLy8gVGhlc2UgdmFsdWVzIHdlcmUg
Ym9ycm93ZWQgZnJvbSBBcHBLaXQgdG8gbWF0Y2ggdGhlaXIgcGxhY2VtZW50IG9mIHRoZSBtZW51
LgogICAgIGNvbnN0IGludCBwb3BPdmVySG9yaXpvbnRhbEFkanVzdCA9IC0xMzsKQEAgLTE0MSwx
OCArMTQxLDE4IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlNYWM6OnNob3dQb3B1cE1lbnUoY29u
c3QgSW50UmVjdCYgcmVjdCwgVGV4dERpcmVjdGlvbiB0ZXh0CiAgICAgICAgIGlmICh0aXRsZUZy
YW1lLnNpemUud2lkdGggPD0gMCB8fCB0aXRsZUZyYW1lLnNpemUuaGVpZ2h0IDw9IDApCiAgICAg
ICAgICAgICB0aXRsZUZyYW1lID0gcmVjdDsKICAgICAgICAgZmxvYXQgdmVydGljYWxPZmZzZXQg
PSByb3VuZGYoKE5TTWF4WShyZWN0KSAtIE5TTWF4WSh0aXRsZUZyYW1lKSkgKyBOU0hlaWdodCh0
aXRsZUZyYW1lKSkgKyAxOwotICAgICAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIpCisgICAgICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSKQogICAgICAgICAgICAgbG9jYXRpb24gPSBOU01ha2VQb2ludChOU01pblgocmVjdCkg
KyBwb3BPdmVySG9yaXpvbnRhbEFkanVzdCwgTlNNYXhZKHJlY3QpIC0gdmVydGljYWxPZmZzZXQp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2NhdGlvbiA9IE5TTWFrZVBvaW50KE5TTWF4
WChyZWN0KSAtIHBvcE92ZXJIb3Jpem9udGFsQWRqdXN0LCBOU01heFkocmVjdCkgLSB2ZXJ0aWNh
bE9mZnNldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4
dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUikKICAgICAgICAgICAgIGxvY2F0aW9uID0gTlNNYWtlUG9pbnQoTlNNaW5Y
KHJlY3QpICsgcG9wVW5kZXJIb3Jpem9udGFsQWRqdXN0LCBOU01heFkocmVjdCkgKyBwb3BVbmRl
clZlcnRpY2FsQWRqdXN0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9jYXRpb24gPSBO
U01ha2VQb2ludChOU01heFgocmVjdCkgLSBwb3BVbmRlckhvcml6b250YWxBZGp1c3QsIE5TTWF4
WShyZWN0KSArIHBvcFVuZGVyVmVydGljYWxBZGp1c3QpOwogICAgIH0KICAgICBSZXRhaW5QdHI8
TlNWaWV3PiBkdW1teVZpZXcgPSBhZG9wdE5TKFtbTlNWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OnJlY3RdKTsKLSAgICBbZHVtbXlWaWV3LmdldCgpIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb246dGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvblJpZ2h0VG9MZWZ0XTsKKyAgICBbZHVtbXlWaWV3LmdldCgpIHNldFVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/
IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOwogICAgIFttX3dlYlZpZXcgYWRkU3Vidmll
dzpkdW1teVZpZXcuZ2V0KCldOwogICAgIGxvY2F0aW9uID0gW2R1bW15VmlldyBjb252ZXJ0UG9p
bnQ6bG9jYXRpb24gZnJvbVZpZXc6bV93ZWJWaWV3XTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApp
bmRleCBjN2NmNTg3NWM5NDNiNzkxOTJhZWJkMjg2MjNiMmIxYmM3NDdkY2M1Li4yNzIxMDVlMjM5
NDdkMzhlODJjZjUxNzc4NTNhMGE4YjYzM2Y3MTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApA
QCAtNzExLDcgKzcxMSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp1bmF2YWlsYWJsZVBsdWdp
bkJ1dHRvbkNsaWNrZWQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyRW1iCiAgICAgVU5VU0VEX1BB
UkFNKHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGll
bnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RS
ZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgVGV4
dERpcmVjdGlvbikKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVu
dChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllckZs
YWdzLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIFBBTDo6VGV4dERpcmVjdGlvbikKIHsKICAgICBS
ZWZQdHI8QVBJOjpPYmplY3Q+IHVzZXJEYXRhOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggZGE1
YWNkMTM5NWNjOTI0MDhmZmRjYzJhMDJiODMxMTI4NjhmOTY3ZS4uODBhNjVmYTc3M2VkNTQyNjVh
ODgxYmU4ZDRjMjdjNzhiOTMxZjkzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMTQxLDcgKzE0
MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VC
ZUJ1dHRvbihXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxp
dHlSZWFzb24pIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25D
bGlja2VkKFdlYkNvcmU6OkVsZW1lbnQmLCBXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6
UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBtb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5zaWdu
ZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBXZWJDb3JlOjpUZXh0RGly
ZWN0aW9uKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJp
bmcmIHRvb2xUaXAsIFBBTDo6VGV4dERpcmVjdGlvbikgZmluYWw7CiAKICAgICB2b2lkIHByaW50
KFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nV2l0aERpcmVjdGlvbiYpIGZp
bmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmlu
ZGV4IDk0MmVkYzYyM2E0ZTY1M2JiMTg4YWVlMDUwNjQ0YTNmNGEwMzJlODkuLmI2NTNjMTFiMjFi
ZDkyYjliMzk2M2ZiMTUyNjNjZWEyYjRkNDJlYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zOTY1LDcgKzM5NjUsNyBAQCB2b2lkIFdlYlBh
Z2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQog
ICAgIHNldHRpbmdzLnNldFZpZGVvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKHJlcXVpcmVz
VXNlckdlc3R1cmVGb3JNZWRpYSB8fCBzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVy
ZW5jZXNLZXk6OnJlcXVpcmVzVXNlckdlc3R1cmVGb3JWaWRlb1BsYXliYWNrS2V5KCkpKTsKICAg
ICBzZXR0aW5ncy5zZXRBdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShyZXF1aXJlc1Vz
ZXJHZXN0dXJlRm9yTWVkaWEgfHwgc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVu
Y2VzS2V5OjpyZXF1aXJlc1VzZXJHZXN0dXJlRm9yQXVkaW9QbGF5YmFja0tleSgpKSk7CiAgICAg
c2V0dGluZ3Muc2V0VXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeShzdGF0aWNfY2FzdDxXZWJD
b3JlOjpVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5PihzdG9yZS5nZXRVSW50MzJWYWx1ZUZv
cktleShXZWJQcmVmZXJlbmNlc0tleTo6dXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeUtleSgp
KSkpOwotICAgIHNldHRpbmdzLnNldFN5c3RlbUxheW91dERpcmVjdGlvbihzdGF0aWNfY2FzdDxU
ZXh0RGlyZWN0aW9uPihzdG9yZS5nZXRVSW50MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tl
eTo6c3lzdGVtTGF5b3V0RGlyZWN0aW9uS2V5KCkpKSk7CisgICAgc2V0dGluZ3Muc2V0U3lzdGVt
TGF5b3V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PFBBTDo6VGV4dERpcmVjdGlvbj4oc3RvcmUuZ2V0
VUludDMyVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnN5c3RlbUxheW91dERpcmVjdGlv
bktleSgpKSkpOwogICAgIHNldHRpbmdzLnNldEphdmFTY3JpcHRSdW50aW1lRmxhZ3Moc3RhdGlj
X2Nhc3Q8UnVudGltZUZsYWdzPihzdG9yZS5nZXRVSW50MzJWYWx1ZUZvcktleShXZWJQcmVmZXJl
bmNlc0tleTo6amF2YVNjcmlwdFJ1bnRpbWVGbGFnc0tleSgpKSkpOwogICAgIHNldHRpbmdzLnNl
dFN0b3JhZ2VCbG9ja2luZ1BvbGljeShzdGF0aWNfY2FzdDxTdG9yYWdlQmxvY2tpbmdQb2xpY3k+
KHN0b3JlLmdldFVJbnQzMlZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpzdG9yYWdlQmxv
Y2tpbmdQb2xpY3lLZXkoKSkpKTsKICAgICBzZXR0aW5ncy5zZXRGcmFtZUZsYXR0ZW5pbmcoc3Rv
cmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpmcmFtZUZsYXR0ZW5pbmdF
bmFibGVkS2V5KCkpID8gV2ViQ29yZTo6RnJhbWVGbGF0dGVuaW5nOjpGdWxseUVuYWJsZWQgOiBX
ZWJDb3JlOjpGcmFtZUZsYXR0ZW5pbmc6OkRpc2FibGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggMDZkNTVmMTA4N2Nh
NDAyYzk1NWVhNWI1ODIxNDczNDAyMTE0MDBmMC4uYTViOWQ5ODkxNDE1ZmVjMmE2ODI3MDI1N2Zi
YWQ4NzE2YzJkNjNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTMyNzYsNyArMzI3Niw3IEBAIHN0ZDo6b3B0aW9uYWw8
Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbj4gV2ViUGFnZTo6Zm9jdXNlZEVsZW1lbnRJbmZvcm1h
dGlvbigpCiAgICAgICAgIGJvb2wgaW5GaXhlZCA9IGZhbHNlOwogICAgICAgICByZW5kZXJlci0+
bG9jYWxUb0NvbnRhaW5lclBvaW50KEZsb2F0UG9pbnQoKSwgbnVsbHB0ciwgVXNlVHJhbnNmb3Jt
cywgJmluRml4ZWQpOwogICAgICAgICBpbmZvcm1hdGlvbi5pbnNpZGVGaXhlZFBvc2l0aW9uID0g
aW5GaXhlZDsKLSAgICAgICAgaW5mb3JtYXRpb24uaXNSVEwgPSByZW5kZXJlci0+c3R5bGUoKS5k
aXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgIGluZm9ybWF0aW9uLmlz
UlRMID0gcmVuZGVyZXItPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpSVEw7CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogICAgICAgICBpZiAoYXV0byog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJ
T1MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlP
Uy5tbQppbmRleCAyMTRlNTcxYzA3NTg2ZDMyMjJlOWE4NmZiOGZmNDhjYWE2OTAxNWM3Li5jYmVk
MDIwZmViMDhjZThmMjJjZmJmYzU0NjQ0ZmIyOWRhOGMyMjEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQpAQCAtMjA5
LDcgKzIwOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIHJldHVybiBjcmVhdGVO
U0FycmF5KFJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJpZXMocmFuZ2UpLCBb
XSAoYXV0byYgZ2VvbWV0cnkpIHsKICAgICAgICAgYXV0byB3ZWJSZWN0ID0gW1dlYlNlbGVjdGlv
blJlY3Qgc2VsZWN0aW9uUmVjdF07CiAgICAgICAgIHdlYlJlY3QucmVjdCA9IGdlb21ldHJ5LnJl
Y3QoKTsKLSAgICAgICAgd2ViUmVjdC53cml0aW5nRGlyZWN0aW9uID0gZ2VvbWV0cnkuZGlyZWN0
aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmln
aHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKyAgICAgICAgd2ViUmVjdC53cml0
aW5nRGlyZWN0aW9uID0gZ2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFIgPyBXS1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA6IFdLV3JpdGluZ0RpcmVjdGlv
blJpZ2h0VG9MZWZ0OwogICAgICAgICB3ZWJSZWN0LmlzTGluZUJyZWFrID0gZ2VvbWV0cnkuaXNM
aW5lQnJlYWsoKTsKICAgICAgICAgd2ViUmVjdC5pc0ZpcnN0T25MaW5lID0gZ2VvbWV0cnkuaXNG
aXJzdE9uTGluZSgpOwogICAgICAgICB3ZWJSZWN0LmlzTGFzdE9uTGluZSA9IGdlb21ldHJ5Lmlz
TGFzdE9uTGluZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29y
ZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3Mv
V2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCmluZGV4IDIzYzdkMzM5NjU5Y2U1
MzY2OTBhYmMwZmNjYzlhNWZkYWE0MmYxYTMuLjE5NTIzNTk5MTRhMTFhZGIzYjM2YzA2Yzg1MTEz
MzUwNzgxNGMxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVT
dXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lv
cy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KQEAgLTEyNywxMCArMTI3LDEw
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogfQogCiAKLS0gKFRleHREaXJlY3Rpb24pdGV4
dERpcmVjdGlvbgorLSAoUEFMOjpUZXh0RGlyZWN0aW9uKXRleHREaXJlY3Rpb24KIHsKICAgICAv
LyBUT0RPOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgIHJl
dHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKIH0KIAogLSAoQk9PTClkaXJlY3Rpb25Jc0Rv
d25zdHJlYW06KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgpAQCAtMTQyLDcg
KzE0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgICAgICByZXR1cm4gWUVTOwog
ICAgIAogICAgIAotICAgIGlmIChbc2VsZiB0ZXh0RGlyZWN0aW9uXSA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIpCisgICAgaWYgKFtzZWxmIHRleHREaXJlY3Rpb25dID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSKQogICAgICAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBXZWJUZXh0QWRqdXN0bWVudFJp
Z2h0KTsKICAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBXZWJUZXh0QWRqdXN0bWVudExlZnQpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViVmlldy9XZWJQREZWaWV3
SU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViVmlldy9XZWJQREZWaWV3SU9TLm1t
CmluZGV4IDNlZDQyZGQwYzUzZjY3M2FlNDVmMmU3NDFhMTc2NDYzNDAzMGE2NjEuLmJjZGRkMzI5
NmIyZTc2OGQ0Y2UxYThmMDhlZDUwODdiYmJmYzY5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvaW9zL1dlYlZpZXcvV2ViUERGVmlld0lPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L2lvcy9XZWJWaWV3L1dlYlBERlZpZXdJT1MubW0KQEAgLTI5Nyw3ICsyOTcsNyBAQCBz
dGF0aWMgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNlV2hpdGUo
Q0dGbG9hdCB3aGl0ZSwgQ0dGbG9hdAogCiAgICAgaWYgKHRpdGxlICYmIENGU3RyaW5nR2V0TGVu
Z3RoKHRpdGxlLmdldCgpKSkgewogICAgICAgICBfdGl0bGUgPSAoTlNTdHJpbmcgKil0aXRsZS5n
ZXQoKTsKLSAgICAgICAgY29yZShbc2VsZiBfZnJhbWVdKS0+bG9hZGVyKCkuY2xpZW50KCkuZGlz
cGF0Y2hEaWRSZWNlaXZlVGl0bGUoeyBfdGl0bGUuZ2V0KCksIFRleHREaXJlY3Rpb246OkxUUiB9
KTsKKyAgICAgICAgY29yZShbc2VsZiBfZnJhbWVdKS0+bG9hZGVyKCkuY2xpZW50KCkuZGlzcGF0
Y2hEaWRSZWNlaXZlVGl0bGUoeyBfdGl0bGUuZ2V0KCksIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
IH0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlz
Yy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2Mv
V2ViRWxlbWVudERpY3Rpb25hcnkubW0KaW5kZXggMDI2NGI1N2MyM2UyYjdjYzg4N2I5ZDYwYTI1
NmYxNzc4YTNhYjRmYy4uYTk1ZmNjOWM2MWEwYjdlMTQ3ZWNjM2E2NGIwZWJlNWYxNDNlNDcyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJFbGVtZW50RGljdGlv
bmFyeS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0
aW9uYXJ5Lm1tCkBAIC0xOTksNyArMTk5LDcgQEAgc3RhdGljIE5TU3RyaW5nKiBOU1N0cmluZ09y
TmlsKFN0cmluZyBjb3JlU3RyaW5nKQogCiAtIChOU1N0cmluZyAqKV9zcGVsbGluZ1Rvb2xUaXAK
IHsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcjsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyOwog
ICAgIHJldHVybiBOU1N0cmluZ09yTmlsKF9yZXN1bHQtPnNwZWxsaW5nVG9vbFRpcChkaXIpKTsK
IH0KIApAQCAtMjM2LDcgKzIzNiw3IEBAIHN0YXRpYyBOU1N0cmluZyogTlNTdHJpbmdPck5pbChT
dHJpbmcgY29yZVN0cmluZykKIAogLSAoTlNTdHJpbmcgKilfdGl0bGUKIHsKLSAgICBUZXh0RGly
ZWN0aW9uIGRpcjsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyOwogICAgIHJldHVybiBOU1N0
cmluZ09yTmlsKF9yZXN1bHQtPnRpdGxlKGRpcikpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0KaW5kZXggM2Rl
YjEyNWY3OTNkOGMyNmI4ZTgwYjNmODM3YjRmNmMwM2JlZGM1My4uNmZjMTFmOGZhYzQ5ODM4ODBl
M2FjMGU4ZWM3MTNhODM4ZTE0YjdmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQpAQCAtNjgsOCArNjgsOCBAQCB2
b2lkIFBvcHVwTWVudU1hYzo6cG9wdWxhdGUoKQogICAgIGlmICghbV9jbGllbnQtPnNob3VsZFBv
cE92ZXIoKSkKICAgICAgICAgW21fcG9wdXAgYWRkSXRlbVdpdGhUaXRsZTpAIiJdOwogCi0gICAg
VGV4dERpcmVjdGlvbiBtZW51VGV4dERpcmVjdGlvbiA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS50
ZXh0RGlyZWN0aW9uKCk7Ci0gICAgW21fcG9wdXAgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbjptZW51VGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvblJpZ2h0VG9MZWZ0XTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gbWVudVRleHREaXJl
Y3Rpb24gPSBtX2NsaWVudC0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpOworICAgIFttX3Bv
cHVwIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246bWVudVRleHREaXJlY3Rpb24gPT0g
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25M
ZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsK
IAogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgaW50IHNpemUgPSBtX2NsaWVudC0+bGlzdFNp
emUoKTsKQEAgLTkyLDggKzkyLDggQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnBvcHVsYXRlKCkKICAg
ICAgICAgfQogCiAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVQYXJhZ3JhcGhTdHlsZT4gcGFy
YWdyYXBoU3R5bGUgPSBhZG9wdE5TKFtbTlNQYXJhZ3JhcGhTdHlsZSBkZWZhdWx0UGFyYWdyYXBo
U3R5bGVdIG11dGFibGVDb3B5XSk7Ci0gICAgICAgIFtwYXJhZ3JhcGhTdHlsZSBzZXRBbGlnbm1l
bnQ6bWVudVRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNUZXh0QWxpZ25t
ZW50TGVmdCA6IE5TVGV4dEFsaWdubWVudFJpZ2h0XTsKLSAgICAgICAgTlNXcml0aW5nRGlyZWN0
aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBzdHlsZS50ZXh0RGlyZWN0aW9uKCkgPT0gVGV4dERpcmVj
dGlvbjo6TFRSID8gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1dyaXRpbmdEaXJl
Y3Rpb25SaWdodFRvTGVmdDsKKyAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldEFsaWdubWVudDpt
ZW51VGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5TVGV4dEFsaWdu
bWVudExlZnQgOiBOU1RleHRBbGlnbm1lbnRSaWdodF07CisgICAgICAgIE5TV3JpdGluZ0RpcmVj
dGlvbiB3cml0aW5nRGlyZWN0aW9uID0gc3R5bGUudGV4dERpcmVjdGlvbigpID09IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSID8gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1dyaXRp
bmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKICAgICAgICAgW3BhcmFncmFwaFN0eWxlIHNldEJhc2VX
cml0aW5nRGlyZWN0aW9uOndyaXRpbmdEaXJlY3Rpb25dOwogICAgICAgICBpZiAoc3R5bGUuaGFz
VGV4dERpcmVjdGlvbk92ZXJyaWRlKCkpIHsKICAgICAgICAgICAgIFJldGFpblB0cjxOU051bWJl
cj4gd3JpdGluZ0RpcmVjdGlvblZhbHVlID0gYWRvcHROUyhbW05TTnVtYmVyIGFsbG9jXSBpbml0
V2l0aEludGVnZXI6d3JpdGluZ0RpcmVjdGlvbiArIE5TV3JpdGluZ0RpcmVjdGlvbk92ZXJyaWRl
XSk7CkBAIC0xNDMsMTQgKzE0MywxNCBAQCB2b2lkIFBvcHVwTWVudU1hYzo6c2hvdyhjb25zdCBJ
bnRSZWN0JiByLCBGcmFtZVZpZXcqIHYsIGludCBzZWxlY3RlZEluZGV4KQogCiAgICAgTlNWaWV3
KiB2aWV3ID0gdi0+ZG9jdW1lbnRWaWV3KCk7CiAKLSAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJl
Y3Rpb24gPSBtX2NsaWVudC0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpOworICAgIFBBTDo6
VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gbV9jbGllbnQtPm1lbnVTdHlsZSgpLnRleHRE
aXJlY3Rpb24oKTsKIAogICAgIFttX3BvcHVwIGF0dGFjaFBvcFVwV2l0aEZyYW1lOnIgaW5WaWV3
OnZpZXddOwogICAgIFttX3BvcHVwIHNlbGVjdEl0ZW1BdEluZGV4OnNlbGVjdGVkSW5kZXhdOwot
ICAgIFttX3BvcHVwIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25M
ZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsK
KyAgICBbbV9wb3B1cCBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rp
b24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9M
ZWZ0XTsKIAogICAgIE5TTWVudSAqbWVudSA9IFttX3BvcHVwIG1lbnVdOwotICAgIFttZW51IHNl
dFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5T
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKKyAgICBbbWVudSBzZXRV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6
IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKIAogICAgIE5TUG9p
bnQgbG9jYXRpb247CiAgICAgQ1RGb250UmVmIGZvbnQgPSBtX2NsaWVudC0+bWVudVN0eWxlKCku
Zm9udCgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCk7CkBAIC0xNjgsMTIgKzE2OCwxMiBAQCB2
b2lkIFBvcHVwTWVudU1hYzo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBGcmFtZVZpZXcqIHYsIGlu
dCBzZWxlY3RlZEluZGV4KQogICAgICAgICBhdXRvIGRlZmF1bHRGb250ID0gYWRvcHRDRihDVEZv
bnRDcmVhdGVVSUZvbnRGb3JMYW5ndWFnZShrQ1RGb250VUlGb250U3lzdGVtLCBDVEZvbnRHZXRT
aXplKGZvbnQpLCBuaWwpKTsKICAgICAgICAgdmVydE9mZnNldCArPSBDVEZvbnRHZXREZXNjZW50
KGZvbnQpIC0gQ1RGb250R2V0RGVzY2VudChkZWZhdWx0Rm9udC5nZXQoKSk7CiAgICAgICAgIHZl
cnRPZmZzZXQgPSBmbWluZihOU0hlaWdodChyKSwgdmVydE9mZnNldCk7Ci0gICAgICAgIGlmICh0
ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKHRleHREaXJl
Y3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBsb2NhdGlvbiA9
IE5TTWFrZVBvaW50KE5TTWluWChyKSArIHBvcE92ZXJIb3Jpem9udGFsQWRqdXN0LCBOU01heFko
cikgLSB2ZXJ0T2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9jYXRpb24gPSBO
U01ha2VQb2ludChOU01heFgocikgLSBwb3BPdmVySG9yaXpvbnRhbEFkanVzdCwgTlNNYXhZKHIp
IC0gdmVydE9mZnNldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHRleHREaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgIGxvY2F0aW9uID0gTlNNYWtlUG9pbnQo
TlNNaW5YKHIpICsgcG9wVW5kZXJIb3Jpem9udGFsQWRqdXN0LCBOU01heFkocikgKyBwb3BVbmRl
clZlcnRpY2FsQWRqdXN0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9jYXRpb24gPSBO
U01ha2VQb2ludChOU01heFgocikgLSBwb3BVbmRlckhvcml6b250YWxBZGp1c3QsIE5TTWF4WShy
KSArIHBvcFVuZGVyVmVydGljYWxBZGp1c3QpOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgUG9w
dXBNZW51TWFjOjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyogdiwgaW50IHNlbGVj
dGVkSW5kZXgpCiAgICAgUmVmPFBvcHVwTWVudU1hYz4gcHJvdGVjdG9yKCp0aGlzKTsKIAogICAg
IFJldGFpblB0cjxOU1ZpZXc+IGR1bW15VmlldyA9IGFkb3B0TlMoW1tOU1ZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6cl0pOwotICAgIFtkdW1teVZpZXcuZ2V0KCkgc2V0VXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOworICAgIFtkdW1teVZpZXcuZ2V0KCkgc2V0VXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1Vz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CiAgICAgW3ZpZXcgYWRkU3Vi
dmlldzpkdW1teVZpZXcuZ2V0KCldOwogICAgIGxvY2F0aW9uID0gW2R1bW15VmlldyBjb252ZXJ0
UG9pbnQ6bG9jYXRpb24gZnJvbVZpZXc6dmlld107CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4
IDgyMjM3OGY0MDYzZjBiYWYzMDQ4Y2QzMDBjYTY0MjIyODNkZTgwYjkuLmRhZjUzMmQwZWRjYjEw
NjhiNzA4ZDNjNTZiYjRhYjgyZDZlNTdiMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0xMTgsNyAr
MTE4LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgc2hvdWxkVW5hdmFpbGFibGVQbHVnaW5NZXNz
YWdlQmVCdXR0b24oV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxh
YmlsaXR5UmVhc29uKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHVuYXZhaWxhYmxlUGx1Z2luQnV0
dG9uQ2xpY2tlZChXZWJDb3JlOjpFbGVtZW50JiwgV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIG1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNp
Z25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9u
KSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkNvcmU6
OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJpbmcmLCBQ
QUw6OlRleHREaXJlY3Rpb24pIGZpbmFsOwogCiAgICAgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0
cmluZyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggMzYzNGY3YTYwMjE0NjE5ZWNmZWFmMGFl
ZDllYmZjZTcyMTBmMWExYS4uNDllMzdhZmQwNWFiZjFmNTA5ZmFmNjk4NmYzYmQwZjNlMjEzMDli
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQpAQCAtNjM0LDcgKzYzNCw3IEBAIHZvaWQgV2ViQ2hyb21l
Q2xpZW50Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoRWxlbWVudCYgZWxlbWVudCwg
UmVuZGVyRW1iCiAgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmll
dzpkaWRQcmVzc01pc3NpbmdQbHVnaW5CdXR0b246KSwga2l0KCZlbGVtZW50KSk7CiB9CiAKLXZv
aWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9v
bFRpcCwgVGV4dERpcmVjdGlvbikKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVP
dmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVy
RmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgUEFMOjpUZXh0RGlyZWN0aW9uKQogewogICAg
IGF1dG8gZWxlbWVudCA9IGFkb3B0TlMoW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5p
dFdpdGhIaXRUZXN0UmVzdWx0OnJlc3VsdF0pOwogICAgIFttX3dlYlZpZXcgX21vdXNlRGlkTW92
ZU92ZXJFbGVtZW50OmVsZW1lbnQuZ2V0KCkgbW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzXTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXggNDNlNjNmNDU2MzQ1ZWNmMWM5MjRlNWI3
NzJhNmY1NDE3M2E5MTQyYi4uYzNiNGZjMGY0MzIzNDQ3N2ZjYzExOTM1MjRjNzA1NjNjYjNlY2U0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTE0NjUsNyArMTQ2NSw3IEBAIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2Uo
KQogICAgIC8vIGxpa2UgdGhlIG9uZXMgdGhhdCBTYWZhcmkgdXNlcyBmb3IgYm9va21hcmtzIGl0
IGlzIHRoZSBvbmx5IHdheSB0aGUgRG9jdW1lbnRMb2FkZXIKICAgICAvLyB3aWxsIGdldCB0aGUg
cHJvcGVyIHRpdGxlLgogICAgIGlmIChhdXRvIGRvY3VtZW50TG9hZGVyID0gW2RhdGFTb3VyY2Ug
X2RvY3VtZW50TG9hZGVyXSkKLSAgICAgICAgZG9jdW1lbnRMb2FkZXItPnNldFRpdGxlKHsgW2Rh
dGFTb3VyY2UgcGFnZVRpdGxlXSwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbjo6TFRSIH0pOworICAg
ICAgICBkb2N1bWVudExvYWRlci0+c2V0VGl0bGUoeyBbZGF0YVNvdXJjZSBwYWdlVGl0bGVdLCBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUiB9KTsKIAogICAgIGlmIChhdXRvKiBvd25lckVsZW1lbnQg
PSBjb3JlRnJhbWUtPm93bmVyRWxlbWVudCgpKQogICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+
c2V0Q2FuSGF2ZVNjcm9sbGJhcnMob3duZXJFbGVtZW50LT5zY3JvbGxpbmdNb2RlKCkgIT0gV2Vi
Q29yZTo6U2Nyb2xsYmFyTW9kZTo6QWx3YXlzT2ZmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDBlMDViMThkNjk2Mzk4MjhkNDMzYzQ2ZDc5MjFj
ZjcwZGU3ZGY5ZDEuLjk2MTJiYmJiNDU2YTUzYzE3YWEzN2E4NDZkZGVmMmE1MTY3OTcwZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtMjI3Miw3
ICsyMjcyLDcgQEAgc3RhdGljIFdlYkZyYW1lTG9hZFR5cGUgdG9XZWJGcmFtZUxvYWRUeXBlKFdl
YkNvcmU6OkZyYW1lTG9hZFR5cGUgZnJhbWVMb2FkVHlwZSkKICAgICBhdXRvIGNvcmVGcmFtZSA9
IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVy
bjsKLSAgICBjb3JlRnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmRpc3BhdGNoRGlkUmVjZWl2ZVRp
dGxlKHsgdGl0bGUsIFdlYkNvcmU6OlRleHREaXJlY3Rpb246OkxUUiB9KTsKKyAgICBjb3JlRnJh
bWUtPmxvYWRlcigpLmNsaWVudCgpLmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKHsgdGl0bGUsIFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSIH0pOwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZB
TUlMWSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCBiZTBlNjIwNDZhNjQ3NmExZjI1MmRlOTllNGY0NzEwMDdiZGI5NGE1Li4zMWI1MzYyNjJmYzIz
YzE1ZjM2NTliNmJjOTk2MWUyMjZjZmNlY2JlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMTItMjcgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIEJpZGlS
ZXNvbHZlciB0byBQQUwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNDcxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHk6CisgICAgICAg
IChjaGVja19sYW5ndWFnZSk6CisgICAgICAgIChjaGVja19pZGVudGlmaWVyX25hbWVfaW5fZGVj
bGFyYXRpb24pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4
VGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RyaW5nV2l0aERpcmVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorCiAyMDIxLTEyLTI2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVthMTF5XSBTdG9wIHNldHRpbmcgbWFuYWdlcy1k
ZXNjZW5kYW50cyBvbiB3ZWIgcHJvY2VzcyByb290IG9iamVjdCB3aXRoIEFUU1BJCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CmluZGV4IDRkZmU3NzlhNzAx
MzRmNmJjMmNmYmI1MTljZjY0NjYzMDIzYzVkNGEuLmM1ZTc0OGY0Y2RmOWU1ZjU1NWUwYzUyODU5
MWQzOGRjYmY2ZGQxOWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvY3BwLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
cnMvY3BwLnB5CkBAIC0yNTAzLDcgKzI1MDMsNyBAQCBkZWYgY2hlY2tfbmFtZXNwYWNlX2luZGVu
dGF0aW9uKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZmlsZV9leHRlbnNpb24sIGZpbGVfcwog
CiAKICMgRW51bSBkZWNsYXJhdGlvbiBhbGxvd2xpc3QKLV9BTExPV19BTExfVVBQRVJDQVNFX0VO
VU0gPSBbJ0pTVG9rZW5UeXBlJywgJ01lcmlkaWVtJ10KK19BTExPV19BTExfVVBQRVJDQVNFX0VO
VU0gPSBbJ0pTVG9rZW5UeXBlJywgJ01lcmlkaWVtJywgJ1RleHREaXJlY3Rpb24nXQogCiAKIGRl
ZiBjaGVja19lbnVtX2Nhc2luZyhjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGVudW1fc3RhdGUs
IGVycm9yKToKQEAgLTM5NTUsNyArMzk1NSw3IEBAIGRlZiBjaGVja19sYW5ndWFnZShmaWxlbmFt
ZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX2V4dGVuc2lvbiwgaW5jbHVkZV9zCiAg
ICAgbWF0Y2hlZCA9IHJlLm1hdGNoKHInXHMqKChjb25zdHxtdXRhYmxlKVxzKyk/KFthLXpBLVpf
XVthLXpBLVowLTlfXSopXHMrW2EtekEtWl9dW2EtekEtWjAtOV9dKlxzKjpccypcZCtccyo7Jywg
bGluZSkKICAgICBpZiBtYXRjaGVkOgogICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgdHlwZSBpcyBh
biBlbnVtIGFuZCBub3QgYW4gaW50ZWdyYWwgdHlwZQotICAgICAgICBpZiBub3QgbWF0Y2gocidi
b29sfGNoYXJ8KHNob3J0KFxzK2ludCk/KXxpbnR8bG9uZyhccysobG9uZ3xpbnQpKXwoc2lnbmVk
fHVuc2lnbmVkKShccytpbnQpPycsIG1hdGNoZWQuZ3JvdXAoMykpOgorICAgICAgICBpZiBub3Qg
bWF0Y2gocidib29sfGNoYXJ8KHNob3J0KFxzK2ludCk/KXxpbnR8dT9pbnQoOHwxNnwzMnw2NClf
dHxsb25nKFxzKyhsb25nfGludCkpfChzaWduZWR8dW5zaWduZWQpKFxzK2ludCk/JywgbWF0Y2hl
ZC5ncm91cCgzKSk6CiAgICAgICAgICAgICBlcnJvcihsaW5lX251bWJlciwgJ3J1bnRpbWUvZW51
bV9iaXRmaWVsZHMnLCA1LAogICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBkZWNsYXJlIGVudW0g
Yml0ZmllbGRzIGFzIHVuc2lnbmVkIGludGVncmFsIHR5cGVzLicpCiAKQEAgLTQxMjAsNiArNDEy
MCwxMCBAQCBkZWYgY2hlY2tfaWRlbnRpZmllcl9uYW1lX2luX2RlY2xhcmF0aW9uKGZpbGVuYW1l
LCBsaW5lX251bWJlciwgbGluZSwgZmlsZV9zdGF0ZQogICAgICAgICAgICAgICAgIGFuZCBub3Qg
bW9kaWZpZWRfaWRlbnRpZmllciA9PSAiREZHX09QRVJBVElPTiIKICAgICAgICAgICAgICAgICBh
bmQgbm90IG1vZGlmaWVkX2lkZW50aWZpZXIgPT0gIkxPR19DSEFOTkVMIgogICAgICAgICAgICAg
ICAgIGFuZCBub3QgbW9kaWZpZWRfaWRlbnRpZmllciA9PSAiV1RGX0dVQVJERURfQllfTE9DSyIK
KyAgICAgICAgICAgICAgICBhbmQgbm90IG1vZGlmaWVkX2lkZW50aWZpZXIgPT0gIlVfRklSU1Rf
U1RST05HX0lTT0xBVEUiCisgICAgICAgICAgICAgICAgYW5kIG5vdCBtb2RpZmllZF9pZGVudGlm
aWVyID09ICJVX0xFRlRfVE9fUklHSFRfSVNPTEFURSIKKyAgICAgICAgICAgICAgICBhbmQgbm90
IG1vZGlmaWVkX2lkZW50aWZpZXIgPT0gIlVfUklHSFRfVE9fTEVGVF9JU09MQVRFIgorICAgICAg
ICAgICAgICAgIGFuZCBub3QgbW9kaWZpZWRfaWRlbnRpZmllciA9PSAiVV9QT1BfRElSRUNUSU9O
QUxfSVNPTEFURSIKICAgICAgICAgICAgICAgICBhbmQgbm90IG1vZGlmaWVkX2lkZW50aWZpZXIu
ZmluZCgnY2hyb25vX2xpdGVyYWxzJykgPj0gMCk6CiAgICAgICAgICAgICAgICAgZXJyb3IobGlu
ZV9udW1iZXIsICdyZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJzY29yZXMnLCA0LCBpZGVudGlmaWVy
ICsgIiBpcyBpbmNvcnJlY3RseSBuYW1lZC4gRG9uJ3QgdXNlIHVuZGVyc2NvcmVzIGluIHlvdXIg
aWRlbnRpZmllciBuYW1lcy4iKQogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGJjZjAzMjk1
NWJlMmViZGZmZTY5M2Q4YThiYmQ4MmJmOTQyZjlkOTkuLmRiNWYyMTY1MzRjOTA2MTQ0ZmVlMWE3
NzczZjEzNzdjNjZiM2RhOTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC0zNTAsNyArMzUw
LDcgQEAgVEVTVF9GKENvbXBsZXhUZXh0Q29udHJvbGxlclRlc3QsIFRvdGFsV2lkdGhXaXRoSnVz
dGlmaWNhdGlvbikKIAogICAgIFVDaGFyIGNoYXJhY3RlcnNbXSA9IHsgMHg2NDQsICcgJywgMHg2
NDQsICcgJywgMHg2NDQgfTsKICAgICBzaXplX3QgY2hhcmFjdGVyc0xlbmd0aCA9IFdURl9BUlJB
WV9MRU5HVEgoY2hhcmFjdGVycyk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKFN0cmluZ1ZpZXcoY2hh
cmFjdGVycywgY2hhcmFjdGVyc0xlbmd0aCksIDAsIDE0LCBEZWZhdWx0RXhwYW5zaW9uLCBUZXh0
RGlyZWN0aW9uOjpSVEwpOworICAgIFRleHRSdW4gdGV4dFJ1bihTdHJpbmdWaWV3KGNoYXJhY3Rl
cnMsIGNoYXJhY3RlcnNMZW5ndGgpLCAwLCAxNCwgRGVmYXVsdEV4cGFuc2lvbiwgUEFMOjpUZXh0
RGlyZWN0aW9uOjpSVEwpOwogICAgIGF1dG8gcnVuID0gQ29tcGxleFRleHRDb250cm9sbGVyOjpD
b21wbGV4VGV4dFJ1bjo6Y3JlYXRlKGFkdmFuY2VzLCBvcmlnaW5zLCB7IDUsIDYsIDcsIDgsIDkg
fSwgeyA0LCAzLCAyLCAxLCAwIH0sIGluaXRpYWxBZHZhbmNlLCBmb250LnByaW1hcnlGb250KCks
IGNoYXJhY3RlcnMsIDAsIGNoYXJhY3RlcnNMZW5ndGgsIDAsIDUsIGZhbHNlKTsKICAgICBWZWN0
b3I8UmVmPENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW4+PiBydW5zOwogICAg
IHJ1bnMuYXBwZW5kKFdURk1vdmUocnVuKSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvU3RyaW5nV2l0aERpcmVjdGlvbi5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RyaW5nV2l0aERpcmVjdGlvbi5jcHAKaW5kZXggYmQ5NDVm
YmRiZWE5MTA1ZDhjOTg3ZWRhNTY2NzMzZTEyOGY4Y2Q1Mi4uMjcxOGU2ODJiYTU1YzAzZTI5OWIw
ZDMwYWUwZjlhNjViNDA2YzYxMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL1N0cmluZ1dpdGhEaXJlY3Rpb24uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9TdHJpbmdXaXRoRGlyZWN0aW9uLmNwcApAQCAtMzMsMTMgKzMzLDEz
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBUZXh0RGlyZWN0
aW9uJiBkaXJlY3Rpb24pCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBv
cywgY29uc3QgUEFMOjpUZXh0RGlyZWN0aW9uJiBkaXJlY3Rpb24pCiB7CiAgICAgc3dpdGNoIChk
aXJlY3Rpb24pIHsKLSAgICBjYXNlIFRleHREaXJlY3Rpb246OkxUUjoKKyAgICBjYXNlIFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSOgogICAgICAgICBvcyA8PCAiVGV4dERpcmVjdGlvbjo6TFRSIjsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0RGlyZWN0aW9uOjpSVEw6CisgICAgY2FzZSBQ
QUw6OlRleHREaXJlY3Rpb246OlJUTDoKICAgICAgICAgb3MgPDwgIlRleHREaXJlY3Rpb246OlJU
TCI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTUyLDQ1ICs1Miw0NSBAQCBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CiAKIFRFU1QoU3RyaW5nV2l0aERpcmVjdGlvbiwgVHJ1bmNhdGVBdEVu
ZFdpdGhMZWZ0VG9SaWdodFN0cmluZykKIHsKLSAgICBTdHJpbmdXaXRoRGlyZWN0aW9uIHN0cmlu
ZyB7ICJDYXBwdWNjaW5vIiwgVGV4dERpcmVjdGlvbjo6TFRSIH07CisgICAgU3RyaW5nV2l0aERp
cmVjdGlvbiBzdHJpbmcgeyAiQ2FwcHVjY2lubyIsIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIH07
CiAgICAgU3RyaW5nV2l0aERpcmVjdGlvbiByZXN1bHQ7CiAKICAgICByZXN1bHQgPSB0cnVuY2F0
ZUZyb21FbmQoc3RyaW5nLCAwKTsKLSAgICBFWFBFQ1RfRVEoVGV4dERpcmVjdGlvbjo6TFRSLCBy
ZXN1bHQuZGlyZWN0aW9uKTsKKyAgICBFWFBFQ1RfRVEoUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIs
IHJlc3VsdC5kaXJlY3Rpb24pOwogICAgIEVYUEVDVF9FUSgiIiwgcmVzdWx0LnN0cmluZyk7CiAK
ICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5nLCAxKTsKLSAgICBFWFBFQ1RfRVEo
VGV4dERpcmVjdGlvbjo6TFRSLCByZXN1bHQuZGlyZWN0aW9uKTsKKyAgICBFWFBFQ1RfRVEoUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIsIHJlc3VsdC5kaXJlY3Rpb24pOwogICAgIEVYUEVDVF9FUSgi
QyIsIHJlc3VsdC5zdHJpbmcpOwogCiAgICAgcmVzdWx0ID0gdHJ1bmNhdGVGcm9tRW5kKHN0cmlu
ZywgMik7Ci0gICAgRVhQRUNUX0VRKFRleHREaXJlY3Rpb246OkxUUiwgcmVzdWx0LmRpcmVjdGlv
bik7CisgICAgRVhQRUNUX0VRKFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSLCByZXN1bHQuZGlyZWN0
aW9uKTsKICAgICBFWFBFQ1RfRVEoIkNhIiwgcmVzdWx0LnN0cmluZyk7CiAKICAgICByZXN1bHQg
PSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5nLCAxMDAwKTsKLSAgICBFWFBFQ1RfRVEoVGV4dERpcmVj
dGlvbjo6TFRSLCByZXN1bHQuZGlyZWN0aW9uKTsKKyAgICBFWFBFQ1RfRVEoUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIsIHJlc3VsdC5kaXJlY3Rpb24pOwogICAgIEVYUEVDVF9FUSgiQ2FwcHVjY2lu
byIsIHJlc3VsdC5zdHJpbmcpOwogfQogCiBURVNUKFN0cmluZ1dpdGhEaXJlY3Rpb24sIFRydW5j
YXRlQXRFbmRXaXRoUmlnaHRUb0xlZnRTdHJpbmcpCiB7Ci0gICAgU3RyaW5nV2l0aERpcmVjdGlv
biBzdHJpbmcgeyBTdHJpbmc6OmZyb21VVEY4KCLXp9a416TWvNeV1rzXpta0J9eZ16DXlda5Iiks
IFRleHREaXJlY3Rpb246OlJUTCB9OworICAgIFN0cmluZ1dpdGhEaXJlY3Rpb24gc3RyaW5nIHsg
U3RyaW5nOjpmcm9tVVRGOCgi16fWuNek1rzXlda816bWtCfXmdeg15XWuSIpLCBQQUw6OlRleHRE
aXJlY3Rpb246OlJUTCB9OwogICAgIFN0cmluZ1dpdGhEaXJlY3Rpb24gcmVzdWx0OwogCiAgICAg
cmVzdWx0ID0gdHJ1bmNhdGVGcm9tRW5kKHN0cmluZywgMCk7Ci0gICAgRVhQRUNUX0VRKFRleHRE
aXJlY3Rpb246OlJUTCwgcmVzdWx0LmRpcmVjdGlvbik7CisgICAgRVhQRUNUX0VRKFBBTDo6VGV4
dERpcmVjdGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0aW9uKTsKICAgICBFWFBFQ1RfRVEoIiIsIHJl
c3VsdC5zdHJpbmcpOwogCiAgICAgcmVzdWx0ID0gdHJ1bmNhdGVGcm9tRW5kKHN0cmluZywgMSk7
Ci0gICAgRVhQRUNUX0VRKFRleHREaXJlY3Rpb246OlJUTCwgcmVzdWx0LmRpcmVjdGlvbik7Cisg
ICAgRVhQRUNUX0VRKFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0aW9uKTsK
ICAgICBFWFBFQ1RfRVEoU3RyaW5nOjpmcm9tVVRGOCgi16ciKSwgcmVzdWx0LnN0cmluZyk7CiAK
ICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5nLCAyKTsKLSAgICBFWFBFQ1RfRVEo
VGV4dERpcmVjdGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0aW9uKTsKKyAgICBFWFBFQ1RfRVEoUEFM
OjpUZXh0RGlyZWN0aW9uOjpSVEwsIHJlc3VsdC5kaXJlY3Rpb24pOwogICAgIEVYUEVDVF9FUShT
dHJpbmc6OmZyb21VVEY4KCLXp9a4IiksIHJlc3VsdC5zdHJpbmcpOwogCiAgICAgcmVzdWx0ID0g
dHJ1bmNhdGVGcm9tRW5kKHN0cmluZywgMTAwMCk7Ci0gICAgRVhQRUNUX0VRKFRleHREaXJlY3Rp
b246OlJUTCwgcmVzdWx0LmRpcmVjdGlvbik7CisgICAgRVhQRUNUX0VRKFBBTDo6VGV4dERpcmVj
dGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0aW9uKTsKICAgICBFWFBFQ1RfRVEoU3RyaW5nOjpmcm9t
VVRGOCgi16fWuNek1rzXlda816bWtCfXmdeg15XWuSIpLCByZXN1bHQuc3RyaW5nKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448045</attachid>
            <date>2021-12-28 08:27:58 -0800</date>
            <delta_ts>2021-12-28 08:53:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234717-20211228082757.patch</filename>
            <type>text/plain</type>
            <size>404723</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhmMzI4OGU4ODRmODcw
M2EyMjNmOGVjZDQ5N2Y0N2ViNGFhZDVkZS4uMWQyYzc2OGFiYmQ1YzE4NjIyYTE4NmRmOTIyOTEz
YzcwNGYwMzk0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5NSBAQAorMjAyMS0xMi0yNyAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQmlk
aVJlc29sdmVyIHRvIFBBTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM0NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdl
LgorCisgICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZWxl
bWVudFBhdGggY29uc3QpOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIFBBTDo6
RVVuaWNvZGVCaWRpIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVl
OjpvcGVyYXRvciBQQUw6OlRleHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEVVbmljb2RlQmlkaSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgVGV4dERpcmVj
dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5Lmg6CisgICAg
ICAgICogY3NzL21ha2Vwcm9wLnBsOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlVGl0bGVGcm9tVGl0bGVFbGVtZW50KToKKyAg
ICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Omlu
bGluZVJ1bkFuZE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJp
bWFyeURpcmVjdGlvbiBjb25zdCk6CisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6CisgICAgICAg
ICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpcmVjdGlvbk9mRW5j
bG9zaW5nQmxvY2spOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YmFzZVdyaXRpbmdE
aXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6ZGlyZWN0
aW9uT2ZFbmNsb3NpbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
ZGlyZWN0aW9uT2ZTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OndpbGxCZU1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjptb2Rp
ZnlFeHRlbmRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bW9k
aWZ5RXh0ZW5kaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
bW9kaWZ5TW92aW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1v
ZGlmeUV4dGVuZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246Om1v
ZGlmeUV4dGVuZGluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
Ojptb2RpZnlNb3ZpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp0
ZXh0U2VsZWN0aW9uSW50ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpt
b2RpZnkpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaDoKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9z
aXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zm
c2V0IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oOgorICAgICAg
ICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc3VhbFdv
cmRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0V29yZFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJpZ2h0V29yZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmxlZnRC
b3VuZGFyeU9mTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpyaWdodEJvdW5kYXJ5T2ZMaW5lKToK
KyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5oOgorICAgICAgICAqIGh0bWwvQmFzZURh
dGVBbmRUaW1lSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGlt
ZUlucHV0VHlwZTo6c2V0dXBEYXRlVGltZUNob29zZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpkaXJl
Y3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmli
dXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Y2FsY3VsYXRlQW5k
QWRqdXN0RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXJlY3Rpb25Gb3JGb3JtRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6YWRq
dXN0SW5uZXJUZXh0U3R5bGUgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50Ojpjb21wdXRlZFRleHRX
aXRoRGlyZWN0aW9uKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0
b1RleHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6bWVhc3VyZVRleHRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjp0ZXh0T2Zmc2V0KToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg6CisgICAgICAgICogaHRt
bC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJbm5l
ckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lSXRlbXNCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6aGFuZGxlRW50ZXJFeGl0QmlkaUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpidWlsZEJpZGlQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVJdGVtc0J1aWxkZXI6OmJyZWFrQW5kQ29tcHV0ZUJpZGlMZXZlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUJveFN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbXNCdWlsZGVyOjpoYW5k
bGVJbmxpbmVCb3hFbmQpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5s
aW5lL0lubGluZUxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6UnVuOjpp
bmxpbmVEaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9Jbmxp
bmVJdGVyYXRvckJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6
ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6
OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAq
IGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0IGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6Y2FuVXNlRm9yU3R5
bGUpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0No
cm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6Om1vdXNlRGlkTW92ZU92ZXJFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6Z2V0VG9vbFRpcCk6CisgICAgICAgICog
cGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhZ2luYXRpb25Nb2RlRm9y
UmVuZGVyU3R5bGUpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MueWFtbDoKKyAgICAgICAgKiBw
YWdlL1NldHRpbmdzQmFzZS5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBP
ZmZzZXRzSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpheGVzRmxpcHBlZEZvcldyaXRpbmdN
b2RlQW5kRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNuYXBPZmZzZXRzRm9y
U2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5oOgorICAgICAgICAqIHBsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmg6CisgICAgICAg
IChXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UG9wdXBNZW51U3R5bGU6OnRleHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL1JlY3RFZGdlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzdGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWN0RWRnZXM6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWN0RWRnZXM6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6ZW5k
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlY3RFZGdlczo6c2V0U3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVjdEVkZ2VzOjpzZXRFbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0eSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjp3aWR0aEZvclNp
bXBsZVRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2Fk
ZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZTo6bGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlOjpyaWdodEV4cGFuc2lvbk9wcG9ydHVuaXR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdC
aWRpVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRS
ZWN0c0Zvck91dGxpbmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRp
ZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0UnVuOjpUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OmRp
cmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpydGwgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6bHRyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRSdW46OnNldERpcmVjdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFwcGx5SW5pdGlhbEFk
dmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjphcHBseVRyYW5zZm9ybXMgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25HZW9tZXRyeTo6U2VsZWN0aW9uR2VvbWV0cnkpOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uR2VvbWV0cnk6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25HZW9tZXRyeTo6c2V0RGlyZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0
cmluZ1dpdGhEaXJlY3Rpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2Rl
Lmg6CisgICAgICAgIChXZWJDb3JlOjptYWtlVGV4dEZsb3dJbml0YWxpemVyKToKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VUZXh0Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjppc1ZlcnRpY2FsV3Jp
dGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNGbGlwcGVkV3JpdGluZ01vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJD
b3JlOjptYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
QmlkaVJ1bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuOjpCaWRpUnVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZGlSdW46OnRha2VOZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQmlk
aVJ1bi5oOgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1bjo6bmV4dCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dDo6c3BlbGxpbmdUb29sVGlwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1
bHQ6OnRpdGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmlubmVy
VGV4dElmVHJ1bmNhdGVkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUJveFBhaW50ZXI6OnBhaW50RmlsbExheWVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxp
bmVCb3g6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVC
b3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lJbmxpbmVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6ZW1iZWRDaGFyRnJvbURp
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlPYnNlcnZlckVudGVyZWRPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5T2JzZXJ2ZXJXaWxsRXhpdE9iamVjdCk6CisgICAg
ICAgIChQQUw6OldlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6aW5jcmVtZW50SW50ZXJuYWwp
OgorICAgICAgICAoUEFMOjpJc29sYXRlVHJhY2tlcjo6ZW1iZWQpOgorICAgICAgICAoUEFMOjpJ
c29sYXRlVHJhY2tlcjo6YWRkRmFrZVJ1bklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFBBTDo6V2Vi
Q29yZTo6SW5saW5lQmlkaVJlc29sdmVyOjphcHBlbmRSdW5JbnRlcm5hbCk6CisgICAgICAgIChQ
QUw6OldlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6bmVlZHNDb250aW51ZVBhc3RFbmRJbnRl
cm5hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6OmluY3Jl
bWVudEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVUcmFja2Vy
OjpJc29sYXRlVHJhY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlVHJh
Y2tlcjo6ZW50ZXJJc29sYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklzb2xhdGVU
cmFja2VyOjpleGl0SXNvbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6aW5Jc29sYXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklz
b2xhdGVUcmFja2VyOjplbWJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRl
VHJhY2tlcjo6Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SXNvbGF0ZVRyYWNrZXI6OmFkZEZha2VSdW5JZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6bmVlZHNDb250
aW51ZVBhc3RFbmRJbnRlcm5hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L0xlZ2FjeUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lRGlyZWN0
aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVu
c0Zvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpyZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y29uc3RydWN0TGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojp0ZXh0QWxpZ25tZW50Rm9yTGluZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2Fs
V2lkdGhGb3JBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6
Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5TGluZUxheW91dDo6aGFuZGxlVHJhaWxpbmdTcGFjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkxlZ2FjeUxpbmVMYXlvdXQ6OmNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmRldGVybWluZVN0YXJ0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6ZGV0ZXJtaW5lRW5k
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6bWF0Y2hlZEVu
ZExpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5Um9vdElubGluZUJveDo6Y2hpbGRSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeVJvb3RJbmxpbmVCb3g6OmxpbmVCcmVha0JpZGlTdGF0dXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6c2V0TGluZUJyZWFrSW5mbyk6CisgICAgICAg
ICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lk
dGhSZXBsYWNlZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZyYWdtZW50ZWRGbG93Ojp1cGRhdGVMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRlZEZsb3c6OnVwZGF0ZUZyYWdtZW50c0ZyYWdt
ZW50ZWRGbG93UG9ydGlvblJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnNob3VsZFBsYWNlVmVydGljYWxTY3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
SXRlbTo6Y29tcHV0ZU1hcmtlclN0eWxlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpkaXJlY3Rp
b24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSk6CisgICAgICAg
IChSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQgY29uc3QpOgorICAgICAgICAoUmVu
ZGVyTWVudUxpc3Q6OmNsaWVudFBhZGRpbmdSaWdodCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNv
bGxlY3RTZWxlY3Rpb25HZW9tZXRyaWVzSW50ZXJuYWwpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwb3B1
cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1pcnJvclJUTFNlZ21lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5l
L0JyZWFraW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlTGluZUJveEluc2lk
ZUlnbm9yZWRTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0OjpoYW5k
bGVCUik6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZU91dE9mRmxv
d1Bvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVF
bXB0eUlubGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWlsaW5nT2JqZWN0czo6dXBkYXRlV2hpdGVzcGFjZUNv
bGxhcHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6
Om1pcnJvcklmTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJh
dG9yOjpsYXlvdXRCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpSZW5kZXJTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6dXNlZENsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN0eWxlOjp1c2VkRmxvYXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnVuaWNvZGVCaWRpIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpkaXJlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldFVuaWNvZGVCaWRpKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXREaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6OmluaXRpYWxVbmljb2RlQmlkaSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTdHlsZTo6aW5pdGlhbERpcmVjdGlvbik6CisgICAgICAgICogc3R5bGUvRWxlbWVu
dFJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkVsZW1lbnRSdWxl
Q29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVsZUNvbGxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0b3I6Omlz
TGVmdFBhZ2UgY29uc3QpOgorICAgICAgICAqIHN0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0b3I6OlBhZ2VSdWxlQ29sbGVj
dG9yKToKKyAgICAgICAgKiBzdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaDoKKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFsU2V0dGluZ3MuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvb2xUaXBGcm9tRWxlbWVudCBjb25zdCk6
CisKIDIwMjEtMTItMjcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgRWxlbWVudDo6Ym91bmRpbmdBYnNvbHV0ZVJlY3RXaXRob3V0TGF5b3V0KCkgc2hv
dWxkIGJlIG1hcmtlZCBgY29uc3RgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCA0NTEyNGMzY2Y0OTlk
MzM5NTQ4Nzk3YWJlYjJkNjhmYjBmNDY5OTJkLi5iZmQyMGYxYjMwZTJhYjQ0MWM0M2VlMjk1ZTZh
ZTIyZTZiMjdiODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAyMS0x
Mi0yNyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAg
IE1vdmUgQmlkaVJlc29sdmVyIHRvIFBBTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBQQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBwYWwvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogcGFsL0xvZ2dpbmcuY3BwOgorICAg
ICAgICAqIHBhbC90ZXh0L0JpZGlDb250ZXh0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwLgorICAgICAgICAqIHBhbC90ZXh0L0Jp
ZGlDb250ZXh0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Jp
ZGlDb250ZXh0LmguCisgICAgICAgICogcGFsL3RleHQvQmlkaVJlc29sdmVyLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oLgorICAgICAg
ICAoUEFMOjpCaWRpU3RhdHVzOjpCaWRpU3RhdHVzKToKKyAgICAgICAgKFBBTDo6QmlkaUVtYmVk
ZGluZzo6QmlkaUVtYmVkZGluZyk6CisgICAgICAgIChQQUw6OkJpZGlDaGFyYWN0ZXJSdW46OkJp
ZGlDaGFyYWN0ZXJSdW4pOgorICAgICAgICAoUEFMOjpCaWRpUmVzb2x2ZXJCYXNlOjpjb250ZXh0
IGNvbnN0KToKKyAgICAgICAgKFBBTDo6QmlkaVJlc29sdmVyQmFzZTo6c2V0Q29udGV4dCk6Cisg
ICAgICAgIChQQUw6OkJpZGlSZXNvbHZlckJhc2U6OnJ1bnMpOgorICAgICAgICAoUEFMOjpEZXJp
dmVkQ2xhc3M+OjplbWJlZCk6CisgICAgICAgIChQQUw6OkRlcml2ZWRDbGFzcz46OmNoZWNrRGly
ZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwpOgorICAgICAgICAoUEFMOjpEZXJpdmVk
Q2xhc3M+Ojpjb21taXRFeHBsaWNpdEVtYmVkZGluZyk6CisgICAgICAgIChQQUw6OkRlcml2ZWRD
bGFzcz46OmNyZWF0ZUJpZGlSdW5zRm9yTGluZSk6CisgICAgICAgICogcGFsL3RleHQvQmlkaVJ1
bkxpc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJ1
bkxpc3QuaC4KKyAgICAgICAgKFBBTDo6QmlkaVJ1bkxpc3Q8UnVuPjo6cmV2ZXJzZVJ1bnMpOgor
ICAgICAgICAqIHBhbC90ZXh0L1RleHREaXJlY3Rpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERpcmVjdGlvbi5oLgorICAgICAgICAoUEFMOjppc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWwvdGV4dC9Vbmljb2RlQmlkaS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlQmlkaS5oLgor
ICAgICAgICAoUEFMOjppc0lzb2xhdGVkKToKKyAgICAgICAgKFBBTDo6aXNPdmVycmlkZSk6Cisg
ICAgICAgICogcGFsL3RleHQvaW9zL1RleHRFbmNvZGluZ1JlZ2lzdHJ5SU9TLm1tOgorICAgICAg
ICAqIHBhbC90ZXh0L21hYy9UZXh0RW5jb2RpbmdSZWdpc3RyeU1hYy5tbToKKwogMjAyMS0xMi0y
MSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yIHByZW11bHRpcGxpZWQgYWxwaGEgaW50ZXJwb2xhdGVkIGdyYWRpZW50cyBhbmQgZGVmYXVs
dGVkIG9mZiBvcHRpb24gdG8gdXNlIHRoZW0gZm9yIENTUyBHcmFkaWVudHMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
Y2UyN2UxNGM2OWZkMjQ0YWU3YjI0NDVlM2U0OTg3YzZmNzFiYjI4My4uNzU3OWEzZDZjZmNjZmVm
OWJlNmVkYjM4ODBiZGMwYzMzZGE1ZTQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAy
MS0xMi0yNyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAg
ICAgIE1vdmUgQmlkaVJlc29sdmVyIHRvIFBBTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoK
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxTZWxlY3Rpb25HZW9tZXRyeT46OmRlY29kZSk6
CisgICAgICAgICogU2hhcmVkL1dlYlBvcHVwSXRlbS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBvcHVwSXRlbTo6V2ViUG9wdXBJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBJdGVt
OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQb3B1cEl0ZW0uaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9z
ZXR1cFBhZ2VDb25maWd1cmF0aW9uOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dQb3B1cE1lbnUpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQb3B1cE1lbnVQcm94eS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IHdlYlNlbGVjdGlvblJlY3RzRm9yU2VsZWN0aW9uR2VvbWV0cmllczpdKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW06CisgICAgICAgICgtW1dL
VGV4dFNlbGVjdGlvblJlY3Qgd3JpdGluZ0RpcmVjdGlvbl0pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dl
YlBvcHVwTWVudVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94
eU1hYzo6cG9wdWxhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eU1hYzo6
c2hvd1BvcHVwTWVudSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6Om1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6Zm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbik6CisKIDIwMjEtMTItMjYg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgV2ViS2l0
L0NvY29hQ29sb3IuaCB3aXRoIFdlYkNvcmUvQ29sb3JDb2NvYS5oLCBub3QgY29uZnVzaW5nIGF0
IGFsbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IGY3NzEzMGZmNzllZTdmMmNmNDRh
YjIyZWEwZmMxMjc0NzQwOWVhMTIuLjJkODE5YjM4ZjkxOGMxNzNlMWE2NjM5MzI5YjdkYmQ1NzA3
MWQ5YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAy
MS0xMi0yNyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAg
ICAgIE1vdmUgQmlkaVJlc29sdmVyIHRvIFBBTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbToKKyAg
ICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6XSk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tOgorICAgICAgICAoLVtXZWJW
aXNpYmxlUG9zaXRpb24gdGV4dERpcmVjdGlvbl0pOgorICAgICAgICAoLVtXZWJWaXNpYmxlUG9z
aXRpb24gZGlyZWN0aW9uSXNEb3duc3RyZWFtOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViUERG
Vmlld0lPUy5tbToKKyAgICAgICAgKC1bV2ViUERGVmlldyBfY2hlY2tQREZUaXRsZV0pOgorCiAy
MDIxLTEwLTIyICBJYW4gQW5kZXJzb24gIDxpYW5hQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
YSBtb2R1bGUgbWFwIGZpbGUgZm9yIFByaXZhdGVGcmFtZXdvcmtzL1dlYktpdExlZ2FjeQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGVmOTQ5ZGU2MDY4OTZjYTk5M2VkZjhmMzRkOWMx
YjMwYTViNjU0YWIuLjczYTMxMGMyZmIxZDliNTRhNzBiMWIyNjJhYWI4N2NhYzAwMGM4OTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMS0xMi0yNyAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUg
QmlkaVJlc29sdmVyIHRvIFBBTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM0NzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBNaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tOgorICAgICAgICAoLVtX
ZWJFbGVtZW50RGljdGlvbmFyeSBfc3BlbGxpbmdUb29sVGlwXSk6CisgICAgICAgICgtW1dlYkVs
ZW1lbnREaWN0aW9uYXJ5IF90aXRsZV0pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BvcHVw
TWVudU1hYy5tbToKKyAgICAgICAgKFBvcHVwTWVudU1hYzo6cG9wdWxhdGUpOgorICAgICAgICAo
UG9wdXBNZW51TWFjOjpzaG93KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06Cisg
ICAgICAgIChXZWJDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbToKKyAgICAgICAgKFdl
YkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKToKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfZGlzcGF0
Y2hEaWRSZWNlaXZlVGl0bGU6XSk6CisKIDIwMjEtMTItMjIgIE1pY2hhZWwgU2Fib2ZmICA8bXNh
Ym9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IFdlYktpdCBCdWlsZCBpc3N1ZXMgd2hlbiB1
c2luZyBzeXN0ZW0gY29udGVudCBwYXRoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgKaW5kZXggYTA3MzQxM2ZhZThiZTNiMDE3YjQ5
MDdlOWFiMWNmYmFkZGFhMmFjNy4uNWQ2M2EzNTc3MDlhZDY4MThiYjUzYmU2NzA5MmNmYzQyZDg5
Yzg5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05v
dGlmaWNhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb24uaApAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5n
JiB0YWcoKSBjb25zdCB7IHJldHVybiBtX3RhZzsgfQogICAgIGNvbnN0IFVSTCYgaWNvbigpIGNv
bnN0IHsgcmV0dXJuIG1faWNvbjsgfQogCi0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2RpcmVjdGlvbiA9PSBEaXJlY3Rpb246OlJ0bCA/IFRleHREaXJlY3Rp
b246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsgfQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbiA9PSBEaXJlY3Rpb246OlJ0bCA/
IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hDbGlja0V2ZW50KCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkaXNwYXRjaENsb3NlRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzZjExMmFhYTBmZDU1OWMx
MzkzMmVjMzk1ZTExNDBjMzQwZTMyNGIxLi4wNDk4NzQxMGRkNzkzY2I4MTRkYWY0M2JjOTQzNDY5
YWViODQ1MzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xNTQsNiArMTU0LDEwIEBACiAJCTFDNUM1N0U5Mjc1NzMxOEUwMDNC
NTQwRCAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUM1N0U4Mjc1NzMxOEQwMDNCNTQwRCAvKiBUZXh0
RW5jb2RpbmdSZWdpc3RyeU1hYy5tbSAqLzsgfTsKIAkJMUM3N0M4QzkyNUQ3OTcyMDAwNjM1RTBD
IC8qIENvcmVUZXh0U29mdExpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUM3N0M4QzcyNUQ3OTcyMDAwNjM1RTBDIC8qIENvcmVUZXh0U29mdExp
bmsuY3BwICovOyB9OwogCQkxQzc3QzhDRTI1RDdBNEEzMDA2MzVFMEMgLyogT1RTVkdUYWJsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzc3QzhD
RDI1RDdBNEEzMDA2MzVFMEMgLyogT1RTVkdUYWJsZS5jcHAgKi87IH07CisJCTFDQjBDQUQ2Mjc3
QUExMzYwMDlCNUJGMCAvKiBCaWRpUnVuTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUNCMENBRDUyNzdBQTEyNTAwOUI1QkYwIC8qIEJpZGlSdW5M
aXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MUNCMENBREEyNzdBQTQ3NzAwOUI1QkYwIC8qIEJpZGlDb250ZXh0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQjBDQUQ4Mjc3QUE0NzcwMDlCNUJG
MCAvKiBCaWRpQ29udGV4dC5jcHAgKi87IH07CisJCTFDQjBDQURCMjc3QUE0NzcwMDlCNUJGMCAv
KiBCaWRpQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUNCMENBRDkyNzdBQTQ3NzAwOUI1QkYwIC8qIEJpZGlDb250ZXh0LmggKi87IH07CisJ
CTFDQjBDQUREMjc3QUI4M0MwMDlCNUJGMCAvKiBVbmljb2RlQmlkaS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNCMENBREMyNzdBQjgxODAwOUI1QkYw
IC8qIFVuaWNvZGVCaWRpLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMUNDM0FDRTgyMkJEN0VDNTAwRjM2MEYwIC8qIE1ldGFsU1BJLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0MzQUNFNzIyQkQ3RUI4
MDBGMzYwRjAgLyogTWV0YWxTUEkuaCAqLzsgfTsKIAkJMUNDRUU0RjUyMEQ4NzE5MzAwNDdCMDk3
IC8qIENvcmVVSVNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUNDRUU0RjQyMEQ4NzE5MzAwNDdCMDk3IC8qIENvcmVVSVNQSS5oICovOyB9OwogCQkx
Q0NFRTRGNzIwRDg3NDNGMDA0N0IwOTcgLyogTlNBcHBlYXJhbmNlU1BJLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0NFRTRGNjIwRDg3NDNGMDA0N0Iw
OTcgLyogTlNBcHBlYXJhbmNlU1BJLmggKi87IH07CkBAIC01OTIsNiArNTk2LDEyIEBACiAJCTFD
NzdDOEM4MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4dFNvZnRMaW5rLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvcmVUZXh0U29mdExpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM3
N0M4Q0IyNUQ3OUI2QzAwNjM1RTBDIC8qIE9UU1ZHVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1RT
VkdUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzc3QzhDRDI1RDdBNEEz
MDA2MzVFMEMgLyogT1RTVkdUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPVFNWR1RhYmxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCMENBRDUyNzdBQTEyNTAwOUI1
QkYwIC8qIEJpZGlSdW5MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZGlSdW5MaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjBDQUQ4Mjc3QUE0NzcwMDlCNUJGMCAvKiBCaWRp
Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaWRpQ29udGV4dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjBDQUQ5Mjc3QUE0NzcwMDlCNUJGMCAvKiBCaWRpQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCaWRpQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQ0IwQ0FEQzI3N0FCODE4MDA5QjVCRjAgLyogVW5pY29kZUJpZGkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVW5pY29kZUJpZGkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUNCMENBREUyNzdBQzFEMzAwOUI1QkYwIC8qIEJpZGlSZXNvbHZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCaWRpUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCMENBREYy
NzdBQzVBRDAwOUI1QkYwIC8qIFRleHREaXJlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dERp
cmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0MzQUNFNzIyQkQ3RUI4
MDBGMzYwRjAgLyogTWV0YWxTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0YWxTUEkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNDNUU0MTMyNzM3NDkyQzAwNkY2RkY0IC8qIFdlYkdQ
VVN0b3JhZ2VUZXh0dXJlQmluZGluZ0xheW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVTdG9y
YWdlVGV4dHVyZUJpbmRpbmdMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUNDNUU0MTQyNzM3NDkyQzAwNkY2RkY0IC8qIFdlYkdQVVRleHR1cmVWaWV3RGVzY3JpcHRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJHUFVUZXh0dXJlVmlld0Rlc2NyaXB0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MTEsNiArMTQyMSwxMCBAQAogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJMUM1QzU3RTUyNzU3MzEwNTAwM0I1NDBEIC8qIGlvcyAqLywKIAkJCQlBMzBENDEyMzFG
MEREMTA1MDBCNzE5NTQgLyogbWFjICovLAorCQkJCTFDQjBDQUQ4Mjc3QUE0NzcwMDlCNUJGMCAv
KiBCaWRpQ29udGV4dC5jcHAgKi8sCisJCQkJMUNCMENBRDkyNzdBQTQ3NzAwOUI1QkYwIC8qIEJp
ZGlDb250ZXh0LmggKi8sCisJCQkJMUNCMENBREUyNzdBQzFEMzAwOUI1QkYwIC8qIEJpZGlSZXNv
bHZlci5oICovLAorCQkJCTFDQjBDQUQ1Mjc3QUExMjUwMDlCNUJGMCAvKiBCaWRpUnVuTGlzdC5o
ICovLAogCQkJCTFDNUM1N0UxMjc1NzFDQjEwMDNCNTQwRCAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5j
ZXMuaCAqLywKIAkJCQkxQzVDNTdEMjI3NTcxNjIyMDAzQjU0MEQgLyogRW5jb2RpbmdUYWJsZXMu
Y3BwICovLAogCQkJCTFDNUM1N0QzMjc1NzE2MjUwMDNCNTQwRCAvKiBFbmNvZGluZ1RhYmxlcy5o
ICovLApAQCAtMTQzNSw2ICsxNDQ5LDcgQEAKIAkJCQkxQzVDNTdDNDI3NTcxNTJDMDAzQjU0MEQg
LyogVGV4dENvZGVjVVRGMTYuaCAqLywKIAkJCQkxQzVDNTdDMzI3NTcxNTJBMDAzQjU0MEQgLyog
VGV4dENvZGVjVVRGOC5jcHAgKi8sCiAJCQkJMUM1QzU3QzgyNzU3MTUzMTAwM0I1NDBEIC8qIFRl
eHRDb2RlY1VURjguaCAqLywKKwkJCQkxQ0IwQ0FERjI3N0FDNUFEMDA5QjVCRjAgLyogVGV4dERp
cmVjdGlvbi5oICovLAogCQkJCTFDNUM1N0RBMjc1NzE2OEUwMDNCNTQwRCAvKiBUZXh0RW5jb2Rp
bmcuY3BwICovLAogCQkJCTFDNUM1N0Q4Mjc1NzE2ODgwMDNCNTQwRCAvKiBUZXh0RW5jb2Rpbmcu
aCAqLywKIAkJCQkxQzVDNTdEOTI3NTcxNjhCMDAzQjU0MEQgLyogVGV4dEVuY29kaW5nRGV0ZWN0
b3IuaCAqLywKQEAgLTE0NDIsNiArMTQ1Nyw3IEBACiAJCQkJMUM1QzU3RDYyNzU3MTY4MzAwM0I1
NDBEIC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCAqLywKIAkJCQkxQzVDNTdENzI3NTcxNjg1
MDAzQjU0MEQgLyogVGV4dEVuY29kaW5nUmVnaXN0cnkuaCAqLywKIAkJCQk5M0U1OTA5QzFGOTNC
RjFFMDA2N0Y4Q0YgLyogVW5lbmNvZGFibGVIYW5kbGluZy5oICovLAorCQkJCTFDQjBDQURDMjc3
QUI4MTgwMDlCNUJGMCAvKiBVbmljb2RlQmlkaS5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0ZXh0
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE1MTcsNiArMTUzMyw4IEBACiAJCQkJ
MEMyREExM0UxRjNCRUI0OTAwREJDMzE3IC8qIEFWS2l0U1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MUI5OUU0NjI1REQ3MDE2MDAwNzgyOUEgLyogQVZTdHJlYW1EYXRhUGFyc2VyU1BJLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyOUNERUJBNjI1NDhENTdGMDA3QzA3QjcgLyogQVhTcGVlY2hNYW5h
Z2VyU1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQ0IwQ0FEQjI3N0FBNDc3MDA5QjVCRjAgLyog
QmlkaUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTFDQjBDQUQ2Mjc3QUExMzYwMDlCNUJG
MCAvKiBCaWRpUnVuTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGOTExMTMyMjBFNEVFQzAw
MUVBMzlFIC8qIENlbGVzdGlhbFNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEMyREEwNkQxRjMz
Q0E4NDAwREJDMzE3IC8qIENGTG9jYWxlU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQzJEQTA2
RTFGMzNDQTg0MDBEQkMzMTcgLyogQ0ZOZXR3b3JrQ29ubmVjdGlvbkNhY2hlU1BJLmggaW4gSGVh
ZGVycyAqLywKQEAgLTE2NjIsNiArMTY4MCw3IEBACiAJCQkJMEM3Nzg1QTExRjQ1MTMwRjAwRjRF
QkI2IC8qIFRlbGVwaG9ueVV0aWxpdGllc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUxMzQy
Q0MyMTVBQTEwQTAwNzE5OUQyIC8qIFVJS2l0U29mdExpbmsuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBDNUFGOTIyMUY0M0E0QzcwMDJFQUMwMiAvKiBVSUtpdFNQSS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMUNCMENBREQyNzdBQjgzQzAwOUI1QkYwIC8qIFVuaWNvZGVCaWRpLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwQzJEQTE0NzFGM0JFQjQ5MDBEQkMzMTcgLyogVVJMRm9ybWF0dGluZ1NQSS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDc2MTFEQjYyNDNGQTVCRjAwRDgwNzA0IC8qIFVzYWdlVHJhY2tp
bmdTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ2QjhDNEYyNjc0MEFEODAwN0E2NTU0
IC8qIFZpc2lvbktpdENvcmVTUEkuaCBpbiBIZWFkZXJzICovLApAQCAtMTg4OSw2ICsxOTA4LDcg
QEAKIAkJCQk1N0ZEMzE4QTIyQjM1OTNFMDA4RDBFOEIgLyogQXBwU1NPU29mdExpbmsubW0gaW4g
U291cmNlcyAqLywKIAkJCQk0MTZFOTk1MzIzREFFNkJFMDBFODcxQ0IgLyogQXVkaW9Ub29sYm94
U29mdExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc3RTg3QjEyMjZBNDYwMjAwQTJBRkYw
IC8qIEFWRm91bmRhdGlvblNvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUNCMENBREEy
NzdBQTQ3NzAwOUI1QkYwIC8qIEJpZGlDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFE
MkI0MTM0MjVGMDVFMzUwMEEzRjcwQSAvKiBDbG9ja0dlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMENGOTlDQTgxRjczODQzNzAwN0VFNzkzIC8qIENvcmVNZWRpYVNvZnRMaW5rLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUY0NzIyMUY0Mjc2RkMyRUIwMEI5ODRDNyAvKiBDb3JlTUxTb2Z0
TGluay5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvQ01ha2VMaXN0cy50eHQK
aW5kZXggNWZhYTJmZmYxODFhOGY0ZWQwMzAyNmZkMTJlNjI3YTU1YmNlZjViMi4uNDM2YTc1ODVl
YzZiZjA0NjViMWY3Mzc4YTA5NTBkM2RhNDljNmI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0NN
YWtlTGlzdHMudHh0CkBAIC0xNjksNiArMTY5LDkgQEAgc2V0KFBBTF9QVUJMSUNfSEVBREVSUwog
ICAgIHN5c3RlbS9Tb3VuZC5oCiAgICAgc3lzdGVtL1N5c3RlbVNsZWVwTGlzdGVuZXIuaAogCisg
ICAgdGV4dC9CaWRpQ29udGV4dC5oCisgICAgdGV4dC9CaWRpUmVzb2x2ZXIuaAorICAgIHRleHQv
QmlkaVJ1bkxpc3QuaAogICAgIHRleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgKICAgICB0ZXh0
L0VuY29kaW5nVGFibGVzLmgKICAgICB0ZXh0L0tpbGxSaW5nLmgKQEAgLTE4Niw2ICsxODksNyBA
QCBzZXQoUEFMX1BVQkxJQ19IRUFERVJTCiAgICAgdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvci5o
CiAgICAgdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5oCiAgICAgdGV4dC9VbmVuY29kYWJsZUhh
bmRsaW5nLmgKKyAgICB0ZXh0L1VuaWNvZGVCaWRpLmgKICkKIAogc2V0KFBBTF9TT1VSQ0VTCkBA
IC0yMjIsNiArMjI2LDcgQEAgc2V0KFBBTF9TT1VSQ0VTCiAgICAgc3lzdGVtL1NsZWVwRGlzYWJs
ZXIuY3BwCiAgICAgc3lzdGVtL1N5c3RlbVNsZWVwTGlzdGVuZXIuY3BwCiAKKyAgICB0ZXh0L0Jp
ZGlDb250ZXh0LmNwcAogICAgIHRleHQvRW5jb2RpbmdUYWJsZXMuY3BwCiAgICAgdGV4dC9UZXh0
Q29kZWMuY3BwCiAgICAgdGV4dC9UZXh0Q29kZWNDSksuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL0xvZ2dpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9Mb2dn
aW5nLmNwcAppbmRleCAwMGI3ZWQ4NDU4YjdmM2VhODU0YzFlYmFhYmM2YTM0NjQ2ZTgwYmNhLi4x
NDJlOGZmNjE2MWE4ZWE0ZDM2YjIwNjZlMjJmZDc0ZmJiNmExM2FjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL0xvZ2dpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvTG9nZ2luZy5jcHAKQEAgLTQ4LDQgKzQ4LDQgQEAgdm9pZCByZWdpc3Rlck5vdGlmeUNhbGxi
YWNrKGNvbnN0IFN0cmluZyYgbm90aWZ5SUQsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjYWxsYmFjaykK
ICNlbmRpZgogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBQQUwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaUNvbnRleHQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI1NzY3YmIxZmRkYWEwZTY5YmVjMmZkODdjZGY5M2UzM2ZjNmVmZTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaUNvbnRleHQuY3BwCkBAIC0wLDAg
KzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodCBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaWRpQ29udGV4dC5o
IgorCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgUEFMIHsKKworc3RydWN0IFNhbWVT
aXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1lU2l6ZUFz
QmlkaUNvbnRleHQ+IHsKKyAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAxNjsKKyAgICB2b2lkKiBw
YXJlbnQ7Cit9OworCitDT01QSUxFX0FTU0VSVChzaXplb2YoQmlkaUNvbnRleHQpID09IHNpemVv
ZihTYW1lU2l6ZUFzQmlkaUNvbnRleHQpLCBCaWRpQ29udGV4dF9zaG91bGRfc3RheV9zbWFsbCk7
CisKK2lubGluZSBCaWRpQ29udGV4dDo6QmlkaUNvbnRleHQodW5zaWduZWQgY2hhciBsZXZlbCwg
VUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291
cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKKyAgICA6IG1fbGV2ZWwobGV2ZWwpCisg
ICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgLCBtX292ZXJyaWRlKG92ZXJyaWRlKQor
ICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV9wYXJlbnQocGFyZW50KQoreworfQorCitp
bmxpbmUgUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y3JlYXRlVW5jYWNoZWQodW5zaWdu
ZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBC
aWRpRW1iZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBCaWRpQ29udGV4dChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlk
ZSwgc291cmNlLCBwYXJlbnQpKTsKK30KKworUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6
Y3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9v
bCBvdmVycmlkZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJl
bnQpCit7CisgICAgQVNTRVJUKGRpcmVjdGlvbiA9PSAobGV2ZWwgJSAyID8gVV9SSUdIVF9UT19M
RUZUIDogVV9MRUZUX1RPX1JJR0hUKSk7CisKKyAgICBpZiAocGFyZW50KQorICAgICAgICByZXR1
cm4gY3JlYXRlVW5jYWNoZWQobGV2ZWwsIGRpcmVjdGlvbiwgb3ZlcnJpZGUsIHNvdXJjZSwgcGFy
ZW50KTsKKworICAgIEFTU0VSVChsZXZlbCA8PSAxKTsKKyAgICBpZiAoIWxldmVsKSB7CisgICAg
ICAgIGlmICghb3ZlcnJpZGUpIHsKKyAgICAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxS
ZWZQdHI8QmlkaUNvbnRleHQ+PiBsdHJDb250ZXh0OworICAgICAgICAgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGx0ckNvbnRleHRPbmNlRmxhZzsKKyAgICAgICAgICAgIHN0ZDo6Y2FsbF9vbmNl
KGx0ckNvbnRleHRPbmNlRmxhZywgWyZdKCkgeworICAgICAgICAgICAgICAgIGx0ckNvbnRleHQu
Z2V0KCkgPSBjcmVhdGVVbmNhY2hlZCgwLCBVX0xFRlRfVE9fUklHSFQsIGZhbHNlLCBGcm9tU3R5
bGVPckRPTSwgMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiAqbHRyQ29u
dGV4dC5nZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxS
ZWZQdHI8QmlkaUNvbnRleHQ+PiBsdHJPdmVycmlkZUNvbnRleHQ7CisgICAgICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBsdHJPdmVycmlkZUNvbnRleHRPbmNlRmxhZzsKKyAgICAgICAgc3RkOjpj
YWxsX29uY2UobHRyT3ZlcnJpZGVDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAgICAg
IGx0ck92ZXJyaWRlQ29udGV4dC5nZXQoKSA9IGNyZWF0ZVVuY2FjaGVkKDAsIFVfTEVGVF9UT19S
SUdIVCwgdHJ1ZSwgRnJvbVN0eWxlT3JET00sIDApOworICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuICpsdHJPdmVycmlkZUNvbnRleHQuZ2V0KCk7CisgICAgfQorCisgICAgaWYgKCFvdmVycmlk
ZSkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPEJpZGlDb250ZXh0Pj4g
cnRsQ29udGV4dDsKKyAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHJ0bENvbnRleHRPbmNl
RmxhZzsKKyAgICAgICAgc3RkOjpjYWxsX29uY2UocnRsQ29udGV4dE9uY2VGbGFnLCBbJl0oKSB7
CisgICAgICAgICAgICBydGxDb250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMSwgVV9SSUdI
VF9UT19MRUZULCBmYWxzZSwgRnJvbVN0eWxlT3JET00sIDApOworICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuICpydGxDb250ZXh0LmdldCgpOworICAgIH0KKworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxSZWZQdHI8QmlkaUNvbnRleHQ+PiBydGxPdmVycmlkZUNvbnRleHQ7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIHJ0bE92ZXJyaWRlQ29udGV4dE9uY2VGbGFnOworICAgIHN0ZDo6
Y2FsbF9vbmNlKHJ0bE92ZXJyaWRlQ29udGV4dE9uY2VGbGFnLCBbJl0oKSB7CisgICAgICAgIHJ0
bE92ZXJyaWRlQ29udGV4dC5nZXQoKSA9IGNyZWF0ZVVuY2FjaGVkKDEsIFVfUklHSFRfVE9fTEVG
VCwgdHJ1ZSwgRnJvbVN0eWxlT3JET00sIDApOworICAgIH0pOworICAgIHJldHVybiAqcnRsT3Zl
cnJpZGVDb250ZXh0LmdldCgpOworfQorCitzdGF0aWMgaW5saW5lIFJlZjxCaWRpQ29udGV4dD4g
Y29weUNvbnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwoQmlkaUNvbnRleHQmIGNvbnRleHQsIEJpZGlD
b250ZXh0KiBwYXJlbnQpCit7CisgICAgYXV0byBuZXdMZXZlbCA9IHBhcmVudCA/IHBhcmVudC0+
bGV2ZWwoKSA6IDA7CisgICAgaWYgKGNvbnRleHQuZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKQor
ICAgICAgICBuZXdMZXZlbCA9IG5leHRHcmVhdGVyT2RkTGV2ZWwobmV3TGV2ZWwpOworICAgIGVs
c2UgaWYgKHBhcmVudCkKKyAgICAgICAgbmV3TGV2ZWwgPSBuZXh0R3JlYXRlckV2ZW5MZXZlbChu
ZXdMZXZlbCk7CisgICAgcmV0dXJuIEJpZGlDb250ZXh0OjpjcmVhdGUobmV3TGV2ZWwsIGNvbnRl
eHQuZGlyKCksIGNvbnRleHQub3ZlcnJpZGUoKSwgY29udGV4dC5zb3VyY2UoKSwgcGFyZW50KTsK
K30KKworLy8gVGhlIEJpZGlDb250ZXh0IHN0YWNrIG11c3QgYmUgaW1tdXRhYmxlIC0tIHRoZXkn
cmUgcmUtdXNlZCBmb3IgcmUtbGF5b3V0IGFmdGVyCisvLyBET00gbW9kaWZpY2F0aW9uL2VkaXRp
bmcgLS0gc28gd2UgY29weSBhbGwgdGhlIG5vbi1Vbmljb2RlIGNvbnRleHRzLCBhbmQKKy8vIHJl
Y2FsY3VsYXRlIHRoZWlyIGxldmVscy4KK1JlZjxCaWRpQ29udGV4dD4gQmlkaUNvbnRleHQ6OmNv
cHlTdGFja1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0NvbnRleHRzKCkKK3sKKyAgICBWZWN0b3I8
QmlkaUNvbnRleHQqLCA2ND4gY29udGV4dHM7CisgICAgZm9yIChhdXRvKiBhbmNlc3RvciA9IHRo
aXM7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkgeworICAgICAgICBp
ZiAoYW5jZXN0b3ItPnNvdXJjZSgpICE9IEZyb21Vbmljb2RlKQorICAgICAgICAgICAgY29udGV4
dHMuYXBwZW5kKGFuY2VzdG9yKTsKKyAgICB9CisgICAgQVNTRVJUKGNvbnRleHRzLnNpemUoKSk7
CisgICAgYXV0byB0b3BDb250ZXh0ID0gY29weUNvbnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwoKmNv
bnRleHRzLmxhc3QoKSwgbnVsbHB0cik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gY29udGV4dHMu
c2l6ZSgpIC0gMTsgaTsgLS1pKQorICAgICAgICB0b3BDb250ZXh0ID0gY29weUNvbnRleHRBbmRS
ZWJhc2VsaW5lTGV2ZWwoKmNvbnRleHRzW2kgLSAxXSwgdG9wQ29udGV4dC5wdHIoKSk7CisgICAg
cmV0dXJuIHRvcENvbnRleHQ7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBCaWRpQ29udGV4
dCYgYzEsIGNvbnN0IEJpZGlDb250ZXh0JiBjMikKK3sKKyAgICBpZiAoJmMxID09ICZjMikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGMxLmxldmVsKCkgIT0gYzIubGV2ZWwoKSB8fCBj
MS5vdmVycmlkZSgpICE9IGMyLm92ZXJyaWRlKCkgfHwgYzEuZGlyKCkgIT0gYzIuZGlyKCkgfHwg
YzEuc291cmNlKCkgIT0gYzIuc291cmNlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWMxLnBhcmVudCgpKQorICAgICAgICByZXR1cm4gIWMyLnBhcmVudCgpOworICAgIHJldHVy
biBjMi5wYXJlbnQoKSAmJiAqYzEucGFyZW50KCkgPT0gKmMyLnBhcmVudCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9C
aWRpQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlDb250ZXh0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmFlYWMwYzVjNGViMmYwNmM1ZjM5NzE3YjI0MzAwZjUxY2ZiYzkwZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpQ29udGV4dC5o
CkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx1bmljb2RlL3Vj
aGFyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBCaWRpRW1iZWRkaW5nU291
cmNlIHsgRnJvbVN0eWxlT3JET00sIEZyb21Vbmljb2RlIH07CisKKy8vIFVzZWQgdG8ga2VlcCB0
cmFjayBvZiBleHBsaWNpdCBlbWJlZGRpbmdzLgorY2xhc3MgQmlkaUNvbnRleHQgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKK3B1YmxpYzoKKyAgICBQQUxfRVhQ
T1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZSh1bnNpZ25lZCBjaGFyIGxldmVsLCBV
Q2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZhbHNlLCBCaWRpRW1iZWRkaW5nU291cmNl
ID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBwYXJlbnQgPSBudWxscHRyKTsKKworICAg
IEJpZGlDb250ZXh0KiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudC5nZXQoKTsgfQor
ICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xldmVsOyB9CisgICAg
VUNoYXJEaXJlY3Rpb24gZGlyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VUNoYXJEaXJl
Y3Rpb24+KG1fZGlyZWN0aW9uKTsgfQorICAgIGJvb2wgb3ZlcnJpZGUoKSBjb25zdCB7IHJldHVy
biBtX292ZXJyaWRlOyB9CisgICAgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxCaWRpRW1iZWRkaW5nU291cmNlPihtX3NvdXJjZSk7IH0KKwor
ICAgIFBBTF9FWFBPUlQgUmVmPEJpZGlDb250ZXh0PiBjb3B5U3RhY2tSZW1vdmluZ1VuaWNvZGVF
bWJlZGRpbmdDb250ZXh0cygpOworCitwcml2YXRlOgorICAgIEJpZGlDb250ZXh0KHVuc2lnbmVk
IGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5n
U291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KTsKKworICAgIHN0YXRpYyBSZWY8QmlkaUNvbnRl
eHQ+IGNyZWF0ZVVuY2FjaGVkKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBi
b29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291cmNlLCBCaWRpQ29udGV4dCogcGFyZW50KTsK
KworICAgIHVuc2lnbmVkIG1fbGV2ZWwgOiA2OyAvLyBUaGUgbWF4aW1pdW0gYmlkaSBsZXZlbCBp
cyA2MjogaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5LyNFeHBsaWNpdF9MZXZlbHNfYW5k
X0RpcmVjdGlvbnMKKyAgICB1bnNpZ25lZCBtX2RpcmVjdGlvbiA6IDU7IC8vIERpcmVjdGlvbgor
ICAgIHVuc2lnbmVkIG1fb3ZlcnJpZGUgOiAxOworICAgIHVuc2lnbmVkIG1fc291cmNlIDogMTsg
Ly8gQmlkaUVtYmVkZGluZ1NvdXJjZQorICAgIFJlZlB0cjxCaWRpQ29udGV4dD4gbV9wYXJlbnQ7
Cit9OworCitpbmxpbmUgdW5zaWduZWQgY2hhciBuZXh0R3JlYXRlck9kZExldmVsKHVuc2lnbmVk
IGNoYXIgbGV2ZWwpCit7CisgICAgcmV0dXJuIChsZXZlbCArIDEpIHwgMTsKK30KKworaW5saW5l
IHVuc2lnbmVkIGNoYXIgbmV4dEdyZWF0ZXJFdmVuTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkK
K3sKKyAgICByZXR1cm4gKGxldmVsICsgMikgJiB+MTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEJpZGlDb250ZXh0JiwgY29uc3QgQmlkaUNvbnRleHQmKTsKKworfSAvLyBuYW1lc3BhY2Ug
UEFMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaVJlc29sdmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvQmlkaVJlc29sdmVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWFjYzBkMjkyYTA5MTVhYzNkZmQxYTZhNDlkY2RjZjQ0NWE1NWRjOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaApAQCAtMCww
ICsxLDk2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgor
I2luY2x1ZGUgPHBhbC90ZXh0L0JpZGlDb250ZXh0Lmg+CisjaW5jbHVkZSA8cGFsL3RleHQvQmlk
aVJ1bkxpc3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFBBTCB7CisK
K2NsYXNzIFJlbmRlck9iamVjdDsKKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IGNsYXNz
IFdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUgeworcHVibGljOgorICAgIHZvaWQgcmVzZXQoKQor
ICAgIHsKKyAgICAgICAgbV90cmFuc2l0aW9ucy5jbGVhcigpOworICAgICAgICBtX2N1cnJlbnRU
cmFuc2l0aW9uID0gMDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdGFydElnbm9yaW5nU3BhY2Vz
KGNvbnN0IEl0ZXJhdG9yJiB0cmFuc2l0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEobV90
cmFuc2l0aW9ucy5zaXplKCkgJSAyKSk7CisgICAgICAgIG1fdHJhbnNpdGlvbnMuYXBwZW5kKHRy
YW5zaXRpb24pOworICAgIH0KKworICAgIHZvaWQgc3RvcElnbm9yaW5nU3BhY2VzKGNvbnN0IEl0
ZXJhdG9yJiB0cmFuc2l0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHJhbnNpdGlvbnMu
c2l6ZSgpICUgMik7CisgICAgICAgIG1fdHJhbnNpdGlvbnMuYXBwZW5kKHRyYW5zaXRpb24pOwor
ICAgIH0KKworICAgIHZvaWQgZGVjcmVtZW50VHJhbnNpdGlvbkF0KHNpemVfdCBpbmRleCkKKyAg
ICB7CisgICAgICAgIG1fdHJhbnNpdGlvbnNbaW5kZXhdLmZhc3REZWNyZW1lbnQoKTsKKyAgICB9
CisKKyAgICBjb25zdCBWZWN0b3I8SXRlcmF0b3I+JiB0cmFuc2l0aW9ucygpIHsgcmV0dXJuIG1f
dHJhbnNpdGlvbnM7IH0KKyAgICBzaXplX3QgbnVtVHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX3RyYW5zaXRpb25zLnNpemUoKTsgfQorICAgIHNpemVfdCBjdXJyZW50VHJhbnNpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIHNldEN1cnJl
bnRUcmFuc2l0aW9uKHNpemVfdCBjdXJyZW50VHJhbnNpdGlvbikgeyBtX2N1cnJlbnRUcmFuc2l0
aW9uID0gY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIGluY3JlbWVudEN1cnJlbnRUcmFu
c2l0aW9uKCkgeyArK21fY3VycmVudFRyYW5zaXRpb247IH0KKyAgICB2b2lkIGRlY3JlbWVudE51
bVRyYW5zaXRpb25zKCkgeyBtX3RyYW5zaXRpb25zLnNocmluayhtX3RyYW5zaXRpb25zLnNpemUo
KSAtIDEpOyB9CisgICAgYm9vbCBiZXR3ZWVuVHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVybiBt
X2N1cnJlbnRUcmFuc2l0aW9uICUgMjsgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8SXRlcmF0b3I+
IG1fdHJhbnNpdGlvbnM7CisgICAgc2l6ZV90IG1fY3VycmVudFRyYW5zaXRpb24geyAwIH07Cit9
OworCisvLyBUaGUgQmlkaVN0YXR1cyBhdCBhIGdpdmVuIHBvc2l0aW9uICh0eXBpY2FsbHkgdGhl
IGVuZCBvZiBhIGxpbmUpIGNhbgorLy8gYmUgY2FjaGVkIGFuZCB0aGVuIHVzZWQgdG8gcmVzdGFy
dCBiaWRpIHJlc29sdXRpb24gYXQgdGhhdCBwb3NpdGlvbi4KK3N0cnVjdCBCaWRpU3RhdHVzIHsK
KyAgICBCaWRpU3RhdHVzKCkgPSBkZWZhdWx0OworCisgICAgLy8gQ3JlYXRlcyBhIEJpZGlTdGF0
dXMgcmVwcmVzZW50aW5nIGEgbmV3IHBhcmFncmFwaCByb290IHdpdGggYSBkZWZhdWx0IGRpcmVj
dGlvbi4KKyAgICAvLyBVc2VzIFRleHREaXJlY3Rpb24gYXMgaXQgb25seSBoYXMgdHdvIHBvc3Np
YmlsaXRpZXMgaW5zdGVhZCBvZiBVQ2hhckRpcmVjdGlvbiB3aGljaCBoYXMgYXQgbGVhc3QgMTku
CisgICAgQmlkaVN0YXR1cyhQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIGlzT3Zl
cnJpZGUpCisgICAgICAgIDogZW9yKGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxU
UiA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVCkKKyAgICAgICAgLCBsYXN0U3Ry
b25nKGVvcikKKyAgICAgICAgLCBsYXN0KGVvcikKKyAgICAgICAgLCBjb250ZXh0KFBBTDo6Qmlk
aUNvbnRleHQ6OmNyZWF0ZShkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyAw
IDogMSwgZW9yLCBpc092ZXJyaWRlKSkKKyAgICB7CisgICAgfQorCisgICAgQmlkaVN0YXR1cyhV
Q2hhckRpcmVjdGlvbiBlb3IsIFVDaGFyRGlyZWN0aW9uIGxhc3RTdHJvbmcsIFVDaGFyRGlyZWN0
aW9uIGxhc3QsIFJlZlB0cjxQQUw6OkJpZGlDb250ZXh0PiYmIGNvbnRleHQpCisgICAgICAgIDog
ZW9yKGVvcikKKyAgICAgICAgLCBsYXN0U3Ryb25nKGxhc3RTdHJvbmcpCisgICAgICAgICwgbGFz
dChsYXN0KQorICAgICAgICAsIGNvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKKyAgICB7CisgICAg
fQorCisgICAgVUNoYXJEaXJlY3Rpb24gZW9yIHsgVV9PVEhFUl9ORVVUUkFMIH07CisgICAgVUNo
YXJEaXJlY3Rpb24gbGFzdFN0cm9uZyB7IFVfT1RIRVJfTkVVVFJBTCB9OworICAgIFVDaGFyRGly
ZWN0aW9uIGxhc3QgeyBVX09USEVSX05FVVRSQUwgfTsKKyAgICBSZWZQdHI8UEFMOjpCaWRpQ29u
dGV4dD4gY29udGV4dDsKK307CisKK3N0cnVjdCBCaWRpRW1iZWRkaW5nIHsKKyAgICBCaWRpRW1i
ZWRkaW5nKFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiwgUEFMOjpCaWRpRW1iZWRkaW5nU291cmNl
IHNvdXJjZSkKKyAgICAgICAgOiBkaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICAgICAsIHNvdXJj
ZShzb3VyY2UpCisgICAgeworICAgIH0KKworICAgIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbjsK
KyAgICBQQUw6OkJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlOworfTsKKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMxLCBjb25zdCBCaWRpU3RhdHVzJiBz
dGF0dXMyKQoreworICAgIHJldHVybiBzdGF0dXMxLmVvciA9PSBzdGF0dXMyLmVvciAmJiBzdGF0
dXMxLmxhc3QgPT0gc3RhdHVzMi5sYXN0ICYmIHN0YXR1czEubGFzdFN0cm9uZyA9PSBzdGF0dXMy
Lmxhc3RTdHJvbmcgJiYgKihzdGF0dXMxLmNvbnRleHQpID09ICooc3RhdHVzMi5jb250ZXh0KTsK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMxLCBj
b25zdCBCaWRpU3RhdHVzJiBzdGF0dXMyKQoreworICAgIHJldHVybiAhKHN0YXR1czEgPT0gc3Rh
dHVzMik7Cit9CisKK3N0cnVjdCBCaWRpQ2hhcmFjdGVyUnVuIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCaWRpQ2hhcmFjdGVyUnVuKHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBzdG9wLCBQQUw6OkJpZGlDb250ZXh0KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlv
biBkaXJlY3Rpb24pCisgICAgICAgIDogbV9zdGFydChzdGFydCkKKyAgICAgICAgLCBtX3N0b3Ao
c3RvcCkKKyAgICAgICAgLCBtX292ZXJyaWRlKGNvbnRleHQtPm92ZXJyaWRlKCkpCisgICAgewor
ICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKKyAgICAgICAgICAgIGRp
cmVjdGlvbiA9IGNvbnRleHQtPmRpcigpOworCisgICAgICAgIG1fbGV2ZWwgPSBjb250ZXh0LT5s
ZXZlbCgpOworCisgICAgICAgIC8vIGFkZCBsZXZlbCBvZiBydW4gKGNhc2VzIEkxICYgSTIpCisg
ICAgICAgIGlmIChtX2xldmVsICUgMikgeworICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBV
X0xFRlRfVE9fUklHSFQgfHwgZGlyZWN0aW9uID09IFVfQVJBQklDX05VTUJFUiB8fCBkaXJlY3Rp
b24gPT0gVV9FVVJPUEVBTl9OVU1CRVIpCisgICAgICAgICAgICAgICAgbV9sZXZlbCsrOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xF
RlQpCisgICAgICAgICAgICAgICAgbV9sZXZlbCsrOworICAgICAgICAgICAgZWxzZSBpZiAoZGly
ZWN0aW9uID09IFVfQVJBQklDX05VTUJFUiB8fCBkaXJlY3Rpb24gPT0gVV9FVVJPUEVBTl9OVU1C
RVIpCisgICAgICAgICAgICAgICAgbV9sZXZlbCArPSAyOworICAgICAgICB9CisgICAgfQorCisg
ICAgfkJpZGlDaGFyYWN0ZXJSdW4oKQorICAgIHsKKyAgICAgICAgLy8gRGVsZXRlIHRoZSBsaW5r
ZWQgbGlzdCBpbiBhIGxvb3AgdG8gcHJldmVudCBkZXN0cnVjdG9yIHJlY3Vyc2lvbi4KKyAgICAg
ICAgYXV0byBuZXh0ID0gV1RGTW92ZShtX25leHQpOworICAgICAgICB3aGlsZSAobmV4dCkKKyAg
ICAgICAgICAgIG5leHQgPSBXVEZNb3ZlKG5leHQtPm1fbmV4dCk7CisgICAgfQorCisgICAgdW5z
aWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgdW5zaWduZWQgc3Rv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcDsgfQorICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWwoKSBj
b25zdCB7IHJldHVybiBtX2xldmVsOyB9CisgICAgYm9vbCByZXZlcnNlZChib29sIHZpc3VhbGx5
T3JkZXJlZCkgeyByZXR1cm4gbV9sZXZlbCAlIDIgJiYgIXZpc3VhbGx5T3JkZXJlZDsgfQorICAg
IGJvb2wgZGlyT3ZlcnJpZGUoYm9vbCB2aXN1YWxseU9yZGVyZWQpIHsgcmV0dXJuIG1fb3ZlcnJp
ZGUgfHwgdmlzdWFsbHlPcmRlcmVkOyB9CisKKyAgICBCaWRpQ2hhcmFjdGVyUnVuKiBuZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlD
aGFyYWN0ZXJSdW4+IHRha2VOZXh0KCkgeyByZXR1cm4gV1RGTW92ZShtX25leHQpOyB9CisgICAg
dm9pZCBzZXROZXh0KHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiYmIG5leHQpIHsg
bV9uZXh0ID0gV1RGTW92ZShuZXh0KTsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVlX3B0
cjxCaWRpQ2hhcmFjdGVyUnVuPiBtX25leHQ7CisKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBtX3N0
YXJ0OworICAgIHVuc2lnbmVkIG1fc3RvcDsKKyAgICB1bnNpZ25lZCBjaGFyIG1fbGV2ZWw7Cisg
ICAgYm9vbCBtX292ZXJyaWRlIDogMTsKKyAgICBib29sIG1faGFzSHlwaGVuIDogMTsgLy8gVXNl
ZCBieSBCaWRpUnVuIHN1YmNsYXNzIHdoaWNoIGlzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIGJ1dCBl
bmFibGVzIHVzIHRvIHNhdmUgOCBieXRlcyBwZXIgb2JqZWN0IG9uIDY0LWJpdC4KK307CisKK2Vu
dW0gY2xhc3MgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgeworICAgIE5vVmlzdWFsT3ZlcnJpZGUs
CisgICAgVmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSwKKyAgICBWaXN1YWxSaWdodFRvTGVmdE92
ZXJyaWRlCit9OworCisvLyBCaWRpUmVzb2x2ZXIgaXMgV2ViS2l0J3MgaW1wbGVtZW50YXRpb24g
b2YgdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0KKy8vIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBv
cnRzL3RyOQordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5h
bWUgRGVyaXZlZENsYXNzPiBjbGFzcyBCaWRpUmVzb2x2ZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShCaWRpUmVzb2x2ZXJCYXNlKTsKK3B1YmxpYzoKKyAgICBjb25zdCBJdGVyYXRv
ciYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7IH0KKyAgICB2b2lkIHNldFBv
c2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRlcyhjb25zdCBJdGVyYXRvciYgcG9zaXRpb24pIHsg
bV9jdXJyZW50ID0gcG9zaXRpb247IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEl0ZXJh
dG9yJiBwb3NpdGlvbiwgdW5zaWduZWQgbmVzdGVkSXNvbGF0ZWRDb3VudCkKKyAgICB7CisgICAg
ICAgIG1fY3VycmVudCA9IHBvc2l0aW9uOworICAgICAgICBtX25lc3RlZElzb2xhdGVDb3VudCA9
IG5lc3RlZElzb2xhdGVkQ291bnQ7CisgICAgfQorCisgICAgdm9pZCBpbmNyZW1lbnQoKSB7IHN0
YXRpY19jYXN0PERlcml2ZWRDbGFzcyY+KCp0aGlzKS5pbmNyZW1lbnRJbnRlcm5hbCgpOyB9CisK
KyAgICBQQUw6OkJpZGlDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMu
Y29udGV4dC5nZXQoKTsgfQorICAgIHZvaWQgc2V0Q29udGV4dChSZWZQdHI8UEFMOjpCaWRpQ29u
dGV4dD4mJiBjb250ZXh0KSB7IG1fc3RhdHVzLmNvbnRleHQgPSBXVEZNb3ZlKGNvbnRleHQpOyB9
CisKKyAgICB2b2lkIHNldExhc3REaXIoVUNoYXJEaXJlY3Rpb24gbGFzdERpcikgeyBtX3N0YXR1
cy5sYXN0ID0gbGFzdERpcjsgfQorICAgIHZvaWQgc2V0TGFzdFN0cm9uZ0RpcihVQ2hhckRpcmVj
dGlvbiBsYXN0U3Ryb25nRGlyKSB7IG1fc3RhdHVzLmxhc3RTdHJvbmcgPSBsYXN0U3Ryb25nRGly
OyB9CisgICAgdm9pZCBzZXRFb3JEaXIoVUNoYXJEaXJlY3Rpb24gZW9yRGlyKSB7IG1fc3RhdHVz
LmVvciA9IGVvckRpcjsgfQorCisgICAgVUNoYXJEaXJlY3Rpb24gZGlyKCkgY29uc3QgeyByZXR1
cm4gbV9kaXJlY3Rpb247IH0KKyAgICB2b2lkIHNldERpcihVQ2hhckRpcmVjdGlvbiBkaXJlY3Rp
b24pIHsgbV9kaXJlY3Rpb24gPSBkaXJlY3Rpb247IH0KKworICAgIGNvbnN0IEJpZGlTdGF0dXMm
IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgdm9pZCBzZXRTdGF0dXMo
QmlkaVN0YXR1cyBzdGF0dXMpIHsgbV9zdGF0dXMgPSBzdGF0dXM7IH0KKworICAgIFdoaXRlc3Bh
Y2VDb2xsYXBzaW5nU3RhdGU8SXRlcmF0b3I+JiB3aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlKCkg
eyByZXR1cm4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOyB9CisKKyAgICAvLyBUaGUgY3Vy
cmVudCBhbGdvcml0aG0gaGFuZGxlcyBuZXN0ZWQgaXNvbGF0ZXMgb25lIGxheWVyIG9mIG5lc3Rp
bmcgYXQgYSB0aW1lLgorICAgIC8vIEJ1dCB3aGVuIHdlIGxheW91dCBlYWNoIGlzb2xhdGVkIHNw
YW4sIHdlIHdpbGwgd2FsayBpbnRvIChhbmQgaWdub3JlKSBhbGwKKyAgICAvLyBjaGlsZCBpc29s
YXRlZCBzcGFucy4KKyAgICB2b2lkIGVudGVySXNvbGF0ZSgpIHsgbV9uZXN0ZWRJc29sYXRlQ291
bnQrKzsgfQorICAgIHZvaWQgZXhpdElzb2xhdGUoKSB7IEFTU0VSVChtX25lc3RlZElzb2xhdGVD
b3VudCA+PSAxKTsgbV9uZXN0ZWRJc29sYXRlQ291bnQtLTsgfQorICAgIGJvb2wgaW5Jc29sYXRl
KCkgY29uc3QgeyByZXR1cm4gbV9uZXN0ZWRJc29sYXRlQ291bnQ7IH0KKworICAgIHZvaWQgZW1i
ZWQoVUNoYXJEaXJlY3Rpb24sIFBBTDo6QmlkaUVtYmVkZGluZ1NvdXJjZSk7CisgICAgYm9vbCBj
b21taXRFeHBsaWNpdEVtYmVkZGluZygpOworCisgICAgdm9pZCBjcmVhdGVCaWRpUnVuc0Zvckxp
bmUoY29uc3QgSXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgPSBWaXN1YWxE
aXJlY3Rpb25PdmVycmlkZTo6Tm9WaXN1YWxPdmVycmlkZSwgYm9vbCBoYXJkTGluZUJyZWFrID0g
ZmFsc2UpOworCisgICAgUEFMOjpCaWRpUnVuTGlzdDxSdW4+JiBydW5zKCkgeyByZXR1cm4gbV9y
dW5zOyB9CisKKyAgICAvLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIHBhcnQgb2YgZGVsZXRlUnVu
cygpIGJ1dCB3YXMgYSBsYXllcmluZyB2aW9sYXRpb24uCisgICAgLy8gSXQncyB1bmNsZWFyIGlm
IHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorICAgIHZvaWQgbWFya0N1cnJlbnRSdW5FbXB0eSgpIHsg
bV9lbXB0eVJ1biA9IHRydWU7IH0KKworICAgIHZvaWQgc2V0V2hpdGVzcGFjZUNvbGxhcHNpbmdU
cmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVuJiwgc2l6ZV90KTsKKyAgICB1bnNpZ25lZCB3aGl0
ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bihSdW4mKTsKKworcHJvdGVj
dGVkOgorICAgIEJpZGlSZXNvbHZlckJhc2UoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBGSVhNRTog
SW5zdGVhZCBvZiBJbmxpbmVCaWRpUmVzb2x2ZXJzIHN1YmNsYXNzaW5nIHRoaXMgbWV0aG9kLCB3
ZSBzaG91bGQKKyAgICAvLyBwYXNzIGluIHNvbWUgc29ydCBvZiBUcmFpdHMgb2JqZWN0IHdoaWNo
IGtub3dzIGhvdyB0byBjcmVhdGUgcnVucyBmb3IgYXBwZW5kaW5nLgorICAgIHZvaWQgYXBwZW5k
UnVuKCkgeyBzdGF0aWNfY2FzdDxEZXJpdmVkQ2xhc3MmPigqdGhpcykuYXBwZW5kUnVuSW50ZXJu
YWwoKTsgfQorICAgIGJvb2wgbmVlZHNDb250aW51ZVBhc3RFbmQoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBEZXJpdmVkQ2xhc3MmPigqdGhpcykubmVlZHNDb250aW51ZVBhc3RF
bmRJbnRlcm5hbCgpOyB9CisKKyAgICBJdGVyYXRvciBtX2N1cnJlbnQ7CisgICAgLy8gc29yIGFu
ZCBlb3IgYXJlICJzdGFydCBvZiBydW4iIGFuZCAiZW5kIG9mIHJ1biIgcmVzcGVjdGl2ZWx5IGFu
ZCBjb3JyZXBvbmQKKyAgICAvLyB0byBhYnJldmlhdGlvbnMgdXNlZCBpbiBVQkEgc3BlYzogaHR0
cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5LyNCRDcKKyAgICBJdGVyYXRvciBtX3NvcjsgLy8g
UG9pbnRzIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIGN1cnJlbnQgcnVuLgorICAgIEl0
ZXJhdG9yIG1fZW9yOyAvLyBQb2ludHMgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBjdXJy
ZW50IHJ1bi4KKyAgICBJdGVyYXRvciBtX2xhc3Q7CisgICAgQmlkaVN0YXR1cyBtX3N0YXR1czsK
KyAgICBVQ2hhckRpcmVjdGlvbiBtX2RpcmVjdGlvbiB7IFVfT1RIRVJfTkVVVFJBTCB9OworICAg
IEl0ZXJhdG9yIGVuZE9mTGluZTsKKyAgICBib29sIG1fcmVhY2hlZEVuZE9mTGluZSB7IGZhbHNl
IH07CisgICAgSXRlcmF0b3IgbV9sYXN0QmVmb3JlRVQ7IC8vIEJlZm9yZSBhIFVfRVVST1BFQU5f
TlVNQkVSX1RFUk1JTkFUT1IKKyAgICBib29sIG1fZW1wdHlSdW4geyB0cnVlIH07CisKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJlbG9uZyB0byB0aGUgcmVzb2x2ZXIsIGJ1dCByYXRo
ZXIgYmUgcGFzc2VkCisgICAgLy8gaW50byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUgYnkgdGhlIGNh
bGxlci4KKyAgICBQQUw6OkJpZGlSdW5MaXN0PFJ1bj4gbV9ydW5zOworCisgICAgV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZTxJdGVyYXRvcj4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOwor
CisgICAgdW5zaWduZWQgbV9uZXN0ZWRJc29sYXRlQ291bnQgeyAwIH07CisgICAgSGFzaE1hcDxS
dW4qLCB1bnNpZ25lZD4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRl
ZFJ1bjsKKworcHJpdmF0ZToKKyAgICB2b2lkIHJhaXNlRXhwbGljaXRFbWJlZGRpbmdMZXZlbChV
Q2hhckRpcmVjdGlvbiBmcm9tLCBVQ2hhckRpcmVjdGlvbiB0byk7CisgICAgdm9pZCBsb3dlckV4
cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSk7CisgICAgdm9pZCBjaGVj
a0RpcmVjdGlvbkluTG93ZXJSYWlzZUVtYmVkZGluZ0xldmVsKCk7CisKKyAgICB2b2lkIHVwZGF0
ZVN0YXR1c0xhc3RGcm9tQ3VycmVudERpcmVjdGlvbihVQ2hhckRpcmVjdGlvbik7CisgICAgdm9p
ZCByZW9yZGVyUnVuc0Zyb21MZXZlbHMoKTsKKyAgICB2b2lkIGluY3JlbWVudEludGVybmFsKCkg
eyBtX2N1cnJlbnQuaW5jcmVtZW50KCk7IH0KKyAgICB2b2lkIGFwcGVuZFJ1bkludGVybmFsKCk7
CisgICAgYm9vbCBuZWVkc0NvbnRpbnVlUGFzdEVuZEludGVybmFsKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgVmVjdG9yPEJpZGlFbWJlZGRpbmcsIDg+IG1fY3VycmVudEV4cGxpY2l0
RW1iZWRkaW5nU2VxdWVuY2U7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlw
ZW5hbWUgUnVuPgorY2xhc3MgQmlkaVJlc29sdmVyIDogcHVibGljIEJpZGlSZXNvbHZlckJhc2U8
SXRlcmF0b3IsIFJ1biwgQmlkaVJlc29sdmVyPEl0ZXJhdG9yLCBSdW4+PiB7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBJc29sYXRlUnVu
PgorY2xhc3MgQmlkaVJlc29sdmVyV2l0aElzb2xhdGUgOiBwdWJsaWMgQmlkaVJlc29sdmVyQmFz
ZTxJdGVyYXRvciwgUnVuLCBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxJdGVyYXRvciwgUnVuLCBJ
c29sYXRlUnVuPj4geworcHVibGljOgorICAgIH5CaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZSgpOwor
CisgICAgdm9pZCBpbmNyZW1lbnRJbnRlcm5hbCgpOworICAgIHZvaWQgYXBwZW5kUnVuSW50ZXJu
YWwoKTsKKyAgICBib29sIG5lZWRzQ29udGludWVQYXN0RW5kSW50ZXJuYWwoKSBjb25zdDsKKyAg
ICBWZWN0b3I8SXNvbGF0ZVJ1bj4mIGlzb2xhdGVkUnVucygpIHsgcmV0dXJuIG1faXNvbGF0ZWRS
dW5zOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPElzb2xhdGVSdW4+IG1faXNvbGF0ZWRSdW5z
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5h
bWUgSXNvbGF0ZVJ1bj4KK2lubGluZSBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZTxJdGVyYXRvciwg
UnVuLCBJc29sYXRlUnVuPjo6fkJpZGlSZXNvbHZlcldpdGhJc29sYXRlKCkKK3sKKyAgICAvLyBU
aGUgb3duZXIgb2YgdGhpcyByZXNvbHZlciBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoZSBpc29sYXRl
ZCBydW5zLgorICAgIEFTU0VSVChtX2lzb2xhdGVkUnVucy5pc0VtcHR5KCkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xh
c3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6
YXBwZW5kUnVuSW50ZXJuYWwoKQoreworICAgIGlmICghbV9lbXB0eVJ1biAmJiAhbV9lb3IuYXRF
bmQoKSkgeworICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG1fc29yLm9mZnNldCgpOwor
ICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBtX2Vvci5vZmZzZXQoKTsKKworICAgICAgICBp
ZiAoIWVuZE9mTGluZS5hdEVuZCgpICYmIGVuZE9mZnNldCA+PSBlbmRPZkxpbmUub2Zmc2V0KCkp
IHsKKyAgICAgICAgICAgIG1fcmVhY2hlZEVuZE9mTGluZSA9IHRydWU7CisgICAgICAgICAgICBl
bmRPZmZzZXQgPSBlbmRPZkxpbmUub2Zmc2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ZW5kT2Zmc2V0ID49IHN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgbV9ydW5zLmFwcGVuZFJ1biht
YWtlVW5pcXVlPFJ1bj4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCArIDEsIGNvbnRleHQoKSwgbV9k
aXJlY3Rpb24pKTsKKworICAgICAgICBtX2Vvci5pbmNyZW1lbnQoKTsKKyAgICAgICAgbV9zb3Ig
PSBtX2VvcjsKKyAgICB9CisKKyAgICBtX2RpcmVjdGlvbiA9IFVfT1RIRVJfTkVVVFJBTDsKKyAg
ICBtX3N0YXR1cy5lb3IgPSBVX09USEVSX05FVVRSQUw7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KK3ZvaWQgQmlk
aVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+OjplbWJlZChVQ2hhckRp
cmVjdGlvbiBkaXIsIFBBTDo6QmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCit7CisgICAgLy8g
SXNvbGF0ZWQgc3BhbnMgY29tcHV0ZSBiYXNlIGRpcmVjdGlvbmFsaXR5IGR1cmluZyB0aGVpciBv
d24gVUJBIHJ1bi4KKyAgICAvLyBEbyBub3QgaW5zZXJ0IGZha2UgZW1iZWQgY2hhcmFjdGVycyBv
bmNlIHdlIGVudGVyIGFuIGlzb2xhdGVkIHNwYW4uCisgICAgQVNTRVJUKCFpbklzb2xhdGUoKSk7
CisKKyAgICBBU1NFUlQoZGlyID09IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCB8fCBkaXIgPT0g
VV9MRUZUX1RPX1JJR0hUX0VNQkVERElORyB8fCBkaXIgPT0gVV9MRUZUX1RPX1JJR0hUX09WRVJS
SURFIHx8IGRpciA9PSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HIHx8IGRpciA9PSBVX1JJR0hU
X1RPX0xFRlRfT1ZFUlJJREUpOworICAgIG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2VxdWVu
Y2UuYXBwZW5kKEJpZGlFbWJlZGRpbmcoZGlyLCBzb3VyY2UpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordm9p
ZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmNoZWNrRGly
ZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwoKQoreworICAgIEFTU0VSVChtX3N0YXR1
cy5lb3IgIT0gVV9PVEhFUl9ORVVUUkFMIHx8IG1fZW9yLmF0RW5kKCkpOworICAgIEFTU0VSVCht
X3N0YXR1cy5sYXN0ICE9IFVfRElSX05PTl9TUEFDSU5HX01BUksKKyAgICAgICAgJiYgbV9zdGF0
dXMubGFzdCAhPSBVX0JPVU5EQVJZX05FVVRSQUwKKyAgICAgICAgJiYgbV9zdGF0dXMubGFzdCAh
PSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HCisgICAgICAgICYmIG1fc3RhdHVzLmxhc3QgIT0g
VV9MRUZUX1RPX1JJR0hUX0VNQkVERElORworICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVf
UklHSFRfVE9fTEVGVF9PVkVSUklERQorICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfTEVG
VF9UT19SSUdIVF9PVkVSUklERQorICAgICAgICAmJiBtX3N0YXR1cy5sYXN0ICE9IFVfUE9QX0RJ
UkVDVElPTkFMX0ZPUk1BVCk7CisgICAgaWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJB
TCkKKyAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9U
T19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNz
Pgordm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46Omxv
d2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVjdGlvbiBmcm9tKQoreworICAgIGlm
ICghbV9lbXB0eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKKyAgICAgICAgY2hlY2tEaXJlY3Rp
b25Jbkxvd2VyUmFpc2VFbWJlZGRpbmdMZXZlbCgpOworICAgICAgICAvLyBiaWRpLnNvciAuLi4g
YmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRoZSBiaWRpLnNvci1i
aWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0CisgICAgICAgIGlmIChm
cm9tID09IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgLy8gYmlkaS5zb3IgLi4uIGJp
ZGkuZW9yIC4uLiBiaWRpLmxhc3QgTAorICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBV
X0VVUk9QRUFOX05VTUJFUikgeworICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ry
b25nICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlv
biA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9
PSBVX0FSQUJJQ19OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJB
QklDX05VTUJFUjsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAg
ICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVf
TEVGVF9UT19SSUdIVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1
cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIgfHwgbV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05V
TUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAg
ICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9f
TEVGVDsKKyAgICAgICAgfQorICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAgICB9CisKKyAgICBh
cHBlbmRSdW4oKTsKKyAgICBtX2VtcHR5UnVuID0gdHJ1ZTsKKworICAgIC8vIHNvciBmb3IgdGhl
IG5ldyBydW4gaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGlnaGVyIGxldmVsIChydWxlIFgxMCkKKyAg
ICBzZXRMYXN0RGlyKGZyb20pOworICAgIHNldExhc3RTdHJvbmdEaXIoZnJvbSk7CisgICAgbV9l
b3IgPSBJdGVyYXRvcigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5h
bWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Cit2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRl
cmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6cmFpc2VFeHBsaWNpdEVtYmVkZGluZ0xldmVsKFVD
aGFyRGlyZWN0aW9uIGZyb20sIFVDaGFyRGlyZWN0aW9uIHRvKQoreworICAgIGlmICghbV9lbXB0
eVJ1biAmJiBtX2VvciAhPSBtX2xhc3QpIHsKKyAgICAgICAgY2hlY2tEaXJlY3Rpb25Jbkxvd2Vy
UmFpc2VFbWJlZGRpbmdMZXZlbCgpOworICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3Ig
Li4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRoZSBiaWRpLnNvci1iaWRpLmVvciBy
dW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0CisgICAgICAgIGlmICh0byA9PSBVX0xF
RlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4g
YmlkaS5sYXN0IEwKKyAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9O
VU1CRVIpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xF
RlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0VVUk9Q
RUFOX05VTUJFUjsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNf
TlVNQkVSKSB7CisgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0FSQUJJQ19OVU1CRVI7
CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
c3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUICYmIGZyb20gPT0gVV9MRUZUX1RP
X1JJR0hUKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAg
bV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUgorICAgICAgICAgICAgfHwg
KG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUiAmJiAobV9zdGF0dXMubGFzdFN0cm9u
ZyAhPSBVX0xFRlRfVE9fUklHSFQgfHwgZnJvbSA9PSBVX1JJR0hUX1RPX0xFRlQpKQorICAgICAg
ICAgICAgfHwgKG1fc3RhdHVzLmVvciAhPSBVX0VVUk9QRUFOX05VTUJFUiAmJiBtX3N0YXR1cy5s
YXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCAmJiBmcm9tID09IFVfUklHSFRfVE9fTEVGVCkp
IHsKKyAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBV
X1JJR0hUX1RPX0xFRlQ7CisgICAgICAgIH0KKyAgICAgICAgbV9lb3IgPSBtX2xhc3Q7CisgICAg
fQorCisgICAgYXBwZW5kUnVuKCk7CisgICAgbV9lbXB0eVJ1biA9IHRydWU7CisKKyAgICBzZXRM
YXN0RGlyKHRvKTsKKyAgICBzZXRMYXN0U3Ryb25nRGlyKHRvKTsKKyAgICBtX2VvciA9IEl0ZXJh
dG9yKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5
cGVuYW1lIERlcml2ZWRDbGFzcz4KK2Jvb2wgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVu
LCBEZXJpdmVkQ2xhc3M+Ojpjb21taXRFeHBsaWNpdEVtYmVkZGluZygpCit7CisgICAgLy8gV2hl
biB3ZSdyZSAiaW5Jc29sYXRlKCkiIHdlJ3JlIHJlc29sdmluZyB0aGUgcGFyZW50IGNvbnRleHQg
d2hpY2gKKyAgICAvLyBpZ25vcmVzIChza2lwcyBvdmVyKSB0aGUgaXNvbGF0ZWQgY29udGVudCwg
aW5jbHVkaW5nIGVtYmVkZGluZyBsZXZlbHMuCisgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGFjY3J1
ZSBlbWJlZGRpbmcgbGV2ZWxzIHdoaWxlIHNraXBwaW5nIG92ZXIgaXNvbGF0ZWQgY29udGVudC4K
KyAgICBBU1NFUlQoIWluSXNvbGF0ZSgpIHx8IG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5nU2Vx
dWVuY2UuaXNFbXB0eSgpKTsKKworICAgIGF1dG8gZnJvbUxldmVsID0gY29udGV4dCgpLT5sZXZl
bCgpOworICAgIFJlZlB0cjxQQUw6OkJpZGlDb250ZXh0PiB0b0NvbnRleHQgPSBjb250ZXh0KCk7
CisKKyAgICBmb3IgKGF1dG8mIGVtYmVkZGluZyA6IG1fY3VycmVudEV4cGxpY2l0RW1iZWRkaW5n
U2VxdWVuY2UpIHsKKyAgICAgICAgaWYgKGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9QT1BfRElS
RUNUSU9OQUxfRk9STUFUKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcGFyZW50Q29udGV4dCA9
IHRvQ29udGV4dC0+cGFyZW50KCkpCisgICAgICAgICAgICAgICAgdG9Db250ZXh0ID0gcGFyZW50
Q29udGV4dDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFVDaGFyRGlyZWN0aW9uIGRp
cmVjdGlvbiA9IChlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJ
TkcgfHwgZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUpID8g
VV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hUOworICAgICAgICAgICAgYm9vbCBvdmVy
cmlkZSA9IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFIHx8
IGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFOworICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciBsZXZlbCA9IHRvQ29udGV4dC0+bGV2ZWwoKTsKKyAgICAgICAg
ICAgIGlmIChkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUKQorICAgICAgICAgICAgICAgIGxl
dmVsID0gUEFMOjpuZXh0R3JlYXRlck9kZExldmVsKGxldmVsKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBsZXZlbCA9IFBBTDo6bmV4dEdyZWF0ZXJFdmVuTGV2ZWwobGV2ZWwp
OworICAgICAgICAgICAgaWYgKGxldmVsIDwgNjEpCisgICAgICAgICAgICAgICAgdG9Db250ZXh0
ID0gUEFMOjpCaWRpQ29udGV4dDo6Y3JlYXRlKGxldmVsLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCBl
bWJlZGRpbmcuc291cmNlLCB0b0NvbnRleHQuZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgYXV0byB0b0xldmVsID0gdG9Db250ZXh0LT5sZXZlbCgpOworCisgICAgaWYgKHRvTGV2ZWwg
PiBmcm9tTGV2ZWwpCisgICAgICAgIHJhaXNlRXhwbGljaXRFbWJlZGRpbmdMZXZlbChmcm9tTGV2
ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hULCB0b0xldmVsICUgMiA/
IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCk7CisgICAgZWxzZSBpZiAodG9MZXZl
bCA8IGZyb21MZXZlbCkKKyAgICAgICAgbG93ZXJFeHBsaWNpdEVtYmVkZGluZ0xldmVsKGZyb21M
ZXZlbCAlIDIgPyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQpOworCisgICAgc2V0
Q29udGV4dChXVEZNb3ZlKHRvQ29udGV4dCkpOworCisgICAgbV9jdXJyZW50RXhwbGljaXRFbWJl
ZGRpbmdTZXF1ZW5jZS5jbGVhcigpOworCisgICAgcmV0dXJuIGZyb21MZXZlbCAhPSB0b0xldmVs
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFt
ZSBEZXJpdmVkQ2xhc3M+CitpbmxpbmUgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBS
dW4sIERlcml2ZWRDbGFzcz46OnVwZGF0ZVN0YXR1c0xhc3RGcm9tQ3VycmVudERpcmVjdGlvbihV
Q2hhckRpcmVjdGlvbiBkaXJDdXJyZW50KQoreworICAgIHN3aXRjaCAoZGlyQ3VycmVudCkgewor
ICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUjoKKyAgICAgICAgaWYgKG1fc3Rh
dHVzLmxhc3QgIT0gVV9FVVJPUEVBTl9OVU1CRVIpCisgICAgICAgICAgICBtX3N0YXR1cy5sYXN0
ID0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1I6CisgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJf
U0VQQVJBVE9SOgorICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKKyAgICBjYXNlIFVfV0hJ
VEVfU1BBQ0VfTkVVVFJBTDoKKyAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgc3dp
dGNoIChtX3N0YXR1cy5sYXN0KSB7CisgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgorICAg
ICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRf
QVJBQklDOgorICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgorICAgICAgICBjYXNlIFVf
QVJBQklDX05VTUJFUjoKKyAgICAgICAgICAgIG1fc3RhdHVzLmxhc3QgPSBkaXJDdXJyZW50Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX3N0YXR1
cy5sYXN0ID0gVV9PVEhFUl9ORVVUUkFMOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVV9ESVJfTk9OX1NQQUNJTkdfTUFSSzoKKyAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJB
TDoKKyAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkc6CisgICAgY2FzZSBVX0xFRlRf
VE9fUklHSFRfRU1CRURESU5HOgorICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX09WRVJSSURFOgor
ICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFOgorICAgIGNhc2UgVV9QT1BfRElSRUNU
SU9OQUxfRk9STUFUOgorICAgICAgICAvLyBpZ25vcmUgdGhlc2UKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgbV9zdGF0dXMubGFzdCA9IGRpckN1cnJlbnQ7CisgICAgfQorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVk
Q2xhc3M+CitpbmxpbmUgdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2
ZWRDbGFzcz46OnJlb3JkZXJSdW5zRnJvbUxldmVscygpCit7CisgICAgdW5zaWduZWQgY2hhciBs
ZXZlbExvdyA9IDEyODsKKyAgICB1bnNpZ25lZCBjaGFyIGxldmVsSGlnaCA9IDA7CisgICAgZm9y
IChSdW4qIHJ1biA9IG1fcnVucy5maXJzdFJ1bigpOyBydW47IHJ1biA9IHJ1bi0+bmV4dCgpKSB7
CisgICAgICAgIGxldmVsSGlnaCA9IHN0ZDo6bWF4KHJ1bi0+bGV2ZWwoKSwgbGV2ZWxIaWdoKTsK
KyAgICAgICAgbGV2ZWxMb3cgPSBzdGQ6Om1pbihydW4tPmxldmVsKCksIGxldmVsTG93KTsKKyAg
ICB9CisKKyAgICAvLyBUaGlzIGltcGxlbWVudHMgcmVvcmRlcmluZyBvZiB0aGUgbGluZSAoTDIg
YWNjb3JkaW5nIHRvIEJpZGkgc3BlYyk6CisgICAgLy8gaHR0cDovL3VuaWNvZGUub3JnL3JlcG9y
dHMvdHI5LyNMMgorICAgIC8vIEwyLiBGcm9tIHRoZSBoaWdoZXN0IGxldmVsIGZvdW5kIGluIHRo
ZSB0ZXh0IHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsIG9uIGVhY2ggbGluZSwKKyAgICAvLyByZXZl
cnNlIGFueSBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgYXQgdGhh
dCBsZXZlbCBvciBoaWdoZXIuCisKKyAgICAvLyBSZXZlcnNpbmcgaXMgb25seSBkb25lIHVwIHRv
IHRoZSBsb3dlc3Qgb2RkIGxldmVsLgorICAgIGlmICghKGxldmVsTG93ICUgMikpCisgICAgICAg
IGxldmVsTG93Kys7CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IG1fcnVucy5ydW5Db3VudCgpIC0g
MTsKKworICAgIHdoaWxlIChsZXZlbEhpZ2ggPj0gbGV2ZWxMb3cpIHsKKyAgICAgICAgdW5zaWdu
ZWQgaSA9IDA7CisgICAgICAgIFJ1biogcnVuID0gbV9ydW5zLmZpcnN0UnVuKCk7CisgICAgICAg
IHdoaWxlIChpIDwgY291bnQpIHsKKyAgICAgICAgICAgIGZvciAoO2kgPCBjb3VudCAmJiBydW4g
JiYgcnVuLT5sZXZlbCgpIDwgbGV2ZWxIaWdoOyBpKyspCisgICAgICAgICAgICAgICAgcnVuID0g
cnVuLT5uZXh0KCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IGk7CisgICAgICAgICAg
ICBmb3IgKDtpIDw9IGNvdW50ICYmIHJ1biAmJiBydW4tPmxldmVsKCkgPj0gbGV2ZWxIaWdoOyBp
KyspCisgICAgICAgICAgICAgICAgcnVuID0gcnVuLT5uZXh0KCk7CisgICAgICAgICAgICB1bnNp
Z25lZCBlbmQgPSBpIC0gMTsKKyAgICAgICAgICAgIG1fcnVucy5yZXZlcnNlUnVucyhzdGFydCwg
ZW5kKTsKKyAgICAgICAgfQorICAgICAgICBsZXZlbEhpZ2gtLTsKKyAgICB9Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFz
cz4KK3ZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojpj
cmVhdGVCaWRpUnVuc0ZvckxpbmUoY29uc3QgSXRlcmF0b3ImIGVuZCwgVmlzdWFsRGlyZWN0aW9u
T3ZlcnJpZGUgb3ZlcnJpZGUsIGJvb2wgaGFyZExpbmVCcmVhaykKK3sKKyAgICBBU1NFUlQobV9k
aXJlY3Rpb24gPT0gVV9PVEhFUl9ORVVUUkFMKTsKKworICAgIGlmIChvdmVycmlkZSAhPSBWaXN1
YWxEaXJlY3Rpb25PdmVycmlkZTo6Tm9WaXN1YWxPdmVycmlkZSkgeworICAgICAgICBtX2VtcHR5
UnVuID0gZmFsc2U7CisgICAgICAgIG1fc29yID0gbV9jdXJyZW50OworICAgICAgICBtX2VvciA9
IEl0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gZW5kICYmICFtX2N1cnJl
bnQuYXRFbmQoKSkgeworICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAg
ICBpbmNyZW1lbnQoKTsKKyAgICAgICAgfQorICAgICAgICBtX2RpcmVjdGlvbiA9IG92ZXJyaWRl
ID09IFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlOjpWaXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlID8g
VV9MRUZUX1RPX1JJR0hUIDogVV9SSUdIVF9UT19MRUZUOworICAgICAgICBhcHBlbmRSdW4oKTsK
KyAgICAgICAgbV9ydW5zLnNldExvZ2ljYWxseUxhc3RSdW4obV9ydW5zLmxhc3RSdW4oKSk7Cisg
ICAgICAgIGlmIChvdmVycmlkZSA9PSBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZTo6VmlzdWFsUmln
aHRUb0xlZnRPdmVycmlkZSAmJiBtX3J1bnMucnVuQ291bnQoKSkKKyAgICAgICAgICAgIG1fcnVu
cy5yZXZlcnNlUnVucygwLCBtX3J1bnMucnVuQ291bnQoKSAtIDEpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9lbXB0eVJ1biA9IHRydWU7CisKKyAgICBtX2VvciA9IEl0ZXJhdG9y
KCk7CisKKyAgICBtX2xhc3QgPSBtX2N1cnJlbnQ7CisgICAgYm9vbCBwYXN0RW5kID0gZmFsc2U7
CisgICAgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+IHN0YXRl
QXRFbmQ7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBVQ2hhckRpcmVjdGlvbiBkaXJD
dXJyZW50OworICAgICAgICBpZiAocGFzdEVuZCAmJiAoaGFyZExpbmVCcmVhayB8fCBtX2N1cnJl
bnQuYXRFbmQoKSkpIHsKKyAgICAgICAgICAgIFBBTDo6QmlkaUNvbnRleHQqIGMgPSBjb250ZXh0
KCk7CisgICAgICAgICAgICBpZiAoaGFyZExpbmVCcmVhaykgeworICAgICAgICAgICAgICAgIC8v
IEEgZGV2aWF0aW9uIGZyb20gdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0gaW4gb3JkZXIgdG8g
bWF0Y2gKKyAgICAgICAgICAgICAgICAvLyBXaW5JRSBhbmQgdXNlciBleHBlY3RhdGlvbnM6IGhh
cmQgbGluZSBicmVha3MgcmVzZXQgYmlkaSBzdGF0ZQorICAgICAgICAgICAgICAgIC8vIGNvbWlu
ZyBmcm9tIHVuaWNvZGUgYmlkaSBjb250cm9sIGNoYXJhY3RlcnMsIGJ1dCBub3QgdGhvc2UgZnJv
bQorICAgICAgICAgICAgICAgIC8vIERPTSBub2RlcyB3aXRoIHNwZWNpZmllZCBkaXJlY3Rpb25h
bGl0eQorICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQuc2V0Q29udGV4dChjLT5jb3B5U3RhY2tS
ZW1vdmluZ1VuaWNvZGVFbWJlZGRpbmdDb250ZXh0cygpKTsKKworICAgICAgICAgICAgICAgIGRp
ckN1cnJlbnQgPSBzdGF0ZUF0RW5kLmNvbnRleHQoKS0+ZGlyKCk7CisgICAgICAgICAgICAgICAg
c3RhdGVBdEVuZC5zZXRFb3JEaXIoZGlyQ3VycmVudCk7CisgICAgICAgICAgICAgICAgc3RhdGVB
dEVuZC5zZXRMYXN0RGlyKGRpckN1cnJlbnQpOworICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQu
c2V0TGFzdFN0cm9uZ0RpcihkaXJDdXJyZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgd2hpbGUgKGMtPnBhcmVudCgpKQorICAgICAgICAgICAgICAgICAgICBjID0g
Yy0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IGMtPmRpcigpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGlyQ3VycmVudCA9IG1f
Y3VycmVudC5kaXJlY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0KCktPm92ZXJyaWRl
KCkKKyAgICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJF
RERJTkcKKyAgICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVfTEVGVF9UT19SSUdIVF9F
TUJFRERJTkcKKyAgICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVfUklHSFRfVE9fTEVG
VF9PVkVSUklERQorICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9MRUZUX1RPX1JJ
R0hUX09WRVJSSURFCisgICAgICAgICAgICAgICAgJiYgZGlyQ3VycmVudCAhPSBVX1BPUF9ESVJF
Q1RJT05BTF9GT1JNQVQpCisgICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IGNvbnRleHQoKS0+
ZGlyKCk7CisgICAgICAgICAgICBlbHNlIGlmIChkaXJDdXJyZW50ID09IFVfRElSX05PTl9TUEFD
SU5HX01BUkspCisgICAgICAgICAgICAgICAgZGlyQ3VycmVudCA9IG1fc3RhdHVzLmxhc3Q7Cisg
ICAgICAgIH0KKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICAgICAgLy8gT3VyIFdpbmRvd3MgYnVp
bGQgaGFzbid0IHVwZGF0ZWQgaXRzIGhlYWRlcnMgZnJvbSBJQ1UgNi4xLCB3aGljaCBkb2Vzbid0
IGhhdmUgdGhlc2Ugc3ltYm9scy4KKyAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rpb24gVV9GSVJT
VF9TVFJPTkdfSVNPTEFURSA9IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPigxOSk7CisgICAg
ICAgIGNvbnN0IFVDaGFyRGlyZWN0aW9uIFVfTEVGVF9UT19SSUdIVF9JU09MQVRFID0gc3RhdGlj
X2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KDIwKTsKKyAgICAgICAgY29uc3QgVUNoYXJEaXJlY3Rpb24g
VV9SSUdIVF9UT19MRUZUX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRpcmVjdGlvbj4oMjEp
OworICAgICAgICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX1BPUF9ESVJFQ1RJT05BTF9JU09MQVRF
ID0gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KDIyKTsKKyNlbmRpZgorICAgICAgICAvLyBX
ZSBpZ25vcmUgYWxsIGNoYXJhY3RlciBkaXJlY3Rpb25hbGl0eSB3aGlsZSBpbiB1bmljb2RlLWJp
ZGk6IGlzb2xhdGUgc3BhbnMuCisgICAgICAgIC8vIFdlJ2xsIGhhbmRsZSBvcmRlcmluZyB0aGUg
aXNvbGF0ZWQgY2hhcmFjdGVycyBpbiBhIHNlY29uZCBwYXNzLgorICAgICAgICBpZiAoaW5Jc29s
YXRlKCkgfHwgZGlyQ3VycmVudCA9PSBVX0ZJUlNUX1NUUk9OR19JU09MQVRFIHx8IGRpckN1cnJl
bnQgPT0gVV9MRUZUX1RPX1JJR0hUX0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBVX1JJR0hUX1RP
X0xFRlRfSVNPTEFURSB8fCBkaXJDdXJyZW50ID09IFVfUE9QX0RJUkVDVElPTkFMX0lTT0xBVEUp
CisgICAgICAgICAgICBkaXJDdXJyZW50ID0gVV9PVEhFUl9ORVVUUkFMOworCisgICAgICAgIEFT
U0VSVChtX3N0YXR1cy5lb3IgIT0gVV9PVEhFUl9ORVVUUkFMIHx8IG1fZW9yLmF0RW5kKCkpOwor
ICAgICAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsKKworICAgICAgICAvLyBlbWJlZGRpbmcgYW5k
IG92ZXJyaWRlcyAoWDEtWDkgaW4gdGhlIEJpZGkgc3BlY3MpCisgICAgICAgIGNhc2UgVV9SSUdI
VF9UT19MRUZUX0VNQkVERElORzoKKyAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFRfRU1CRURE
SU5HOgorICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9PVkVSUklERToKKyAgICAgICAgY2Fz
ZSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREU6CisgICAgICAgIGNhc2UgVV9QT1BfRElSRUNUSU9O
QUxfRk9STUFUOgorICAgICAgICAgICAgZW1iZWQoZGlyQ3VycmVudCwgUEFMOjpGcm9tVW5pY29k
ZSk7CisgICAgICAgICAgICBjb21taXRFeHBsaWNpdEVtYmVkZGluZygpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgLy8gc3Ryb25nIHR5cGVzCisgICAgICAgIGNhc2UgVV9MRUZUX1RP
X1JJR0hUOgorICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1cy5sYXN0KSB7CisgICAgICAgICAg
ICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZU
X0FSQUJJQzoKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6CisgICAgICAgICAg
ICBjYXNlIFVfQVJBQklDX05VTUJFUjoKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFz
dCAhPSBVX0VVUk9QRUFOX05VTUJFUiB8fCBtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9U
T19SSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9S
OgorICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgorICAgICAg
ICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBV
X0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgor
ICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBV
X1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoK
KyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9U
T19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG51bWJlcnMgbmVlZCB0
byBiZSBvbiBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2ZWwsIHNvIGxldCdzIGNsb3NlIHRoYXQgcnVu
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVS
OworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dCgpLT5kaXIoKSAhPSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV1dHJhbHMgdGFrZSB0aGUgZW1iZWRkaW5n
IGRpcmVjdGlvbiwgd2hpY2ggaXMgUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9y
ID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9S
SUdIVF9UT19MRUZUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEFyYWJpYyBudW1iZXJzIGFyZSBhbHdheXMgb24gYSBoaWdo
ZXIgZW1iZWRkaW5nIGxldmVsLCBzbyBsZXQncyBjbG9zZSB0aGF0IHJ1bgorICAgICAgICAgICAg
ICAgICAgICBtX2RpcmVjdGlvbiA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigp
ICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5l
dXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24sIHdoaWNoIGlzIFIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAg
bV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbGFzdCBzdHVmZiB0YWtlcyBlbWJlZGRpbmcgZGlyCisgICAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigpID09IFVfUklHSFRfVE9fTEVGVCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7
CisgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAg
ICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gVV9MRUZUX1RPX1JJR0hUOworICAgICAgICAgICAgbV9k
aXJlY3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgorICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVG
VDoKKyAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMubGFzdCkgeworICAgICAgICAgICAgY2Fz
ZSBVX0xFRlRfVE9fUklHSFQ6CisgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgor
ICAgICAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6CisgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7CisgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgICAgICBjYXNlIFVf
UklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJQzoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5B
VE9SOgorICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAg
ICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfQkxPQ0tf
U0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgorICAgICAg
ICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfT1RI
RVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BF
QU5fTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25n
ID09IFVfTEVGVF9UT19SSUdIVCAmJiBjb250ZXh0KCktPmRpcigpID09IFVfTEVGVF9UT19SSUdI
VCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVz
LmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigp
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZU
X1RPX1JJR0hUKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigpID09
IFVfTEVGVF9UT19SSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0
OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7
CisgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAgICAg
ICBtX3N0YXR1cy5sYXN0U3Ryb25nID0gZGlyQ3VycmVudDsKKyAgICAgICAgICAgIG1fZGlyZWN0
aW9uID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IC8vIHdlYWsgdHlwZXM6CisKKyAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAg
ICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMp
IHsKKyAgICAgICAgICAgICAgICAvLyBpZiBsYXN0IHN0cm9uZyB3YXMgQUwgY2hhbmdlIEVOIHRv
IEFOCisgICAgICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1cy5sYXN0KSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfTEVG
VF9UT19SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xF
RlRfQVJBQklDOgorICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgorICAgICAg
ICAgICAgICAgICAgICBtX2VvciA9IG1fbGFzdDsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1C
RVI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVV9F
VVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgICAgIGNhc2UgVV9DT01NT05f
TlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9
PSBVX0VVUk9QRUFOX05VTUJFUikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgICAgICAgICBjYXNlIFVfRVVS
T1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZ
X05FVVRSQUw6CisgICAgICAgICAgICAgICAgY2FzZSBVX0JMT0NLX1NFUEFSQVRPUjoKKyAgICAg
ICAgICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6CisgICAgICAgICAgICAgICAgY2Fz
ZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICAgICAgY2FzZSBVX09USEVSX05F
VVRSQUw6CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVB
Tl9OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ry
b25nID09IFVfUklHSFRfVE9fTEVGVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEVOcyBvbiBib3RoIHNpZGVzIGJlaGF2ZSBsaWtlIFJzLCBzbyB0aGUgbmV1dHJhbHMgc2hvdWxk
IGJlIFIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGVybWluYXRlIHRoZSBFTiBy
dW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhbiBSIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2VvciA9IG1fc3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlO
QVRPUiA/IG1fbGFzdEJlZm9yZUVUIDogbV9sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlZ2lu
IGEgbmV3IEVOIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9
IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgQU4gcnVuLgorICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlQgfHwgY29udGV4dCgpLT5k
aXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBNYWtlIGFuIFIgcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9z
dGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SID8gbV9sYXN0QmVmb3Jl
RVQgOiBtX2xhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBV
X1JJR0hUX1RPX0xFRlQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVnaW4gYSBuZXcgRU4gcnVuLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVBTl9OVU1CRVI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgUiBydW4gdG8gaW5jbHVkZSB0aGUgbmV1dHJhbHMu
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1fc3RhdHVzLmxhc3QgPT0gVV9FVVJP
UEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJlZm9yZUVUIDogbV9sYXN0OworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEJlZ2luIGEgbmV3IEVOIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9u
ID0gVV9FVVJPUEVBTl9OVU1CRVI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZW9yID0g
bV9jdXJyZW50OworICAgICAgICAgICAgICAgIG1fc3RhdHVzLmVvciA9IFVfRVVST1BFQU5fTlVN
QkVSOworICAgICAgICAgICAgICAgIGlmIChtX2RpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwp
CisgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9MRUZUX1RPX1JJR0hUOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgZGlyQ3VycmVu
dCA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMubGFzdCkg
eworICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9MRUZUX1RPX1JJR0hUKQorICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VV9BUkFCSUNfTlVNQkVSOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFC
SUM6CisgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgorICAgICAgICAgICAgICAg
IG1fZW9yID0gbV9sYXN0OworICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9S
OgorICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsK
KyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAg
ICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgorICAgICAgICAgICAgY2FzZSBV
X0JPVU5EQVJZX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgor
ICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgorICAgICAgICAgICAgY2FzZSBV
X1dISVRFX1NQQUNFX05FVVRSQUw6CisgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoK
KyAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUgorICAg
ICAgICAgICAgICAgICAgICB8fCAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSICYm
IChtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfUklHSFRfVE9fTEVGVCB8fCBjb250ZXh0KCktPmRp
cigpID09IFVfUklHSFRfVE9fTEVGVCkpCisgICAgICAgICAgICAgICAgICAgIHx8IChtX3N0YXR1
cy5lb3IgIT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgbV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX0xF
RlRfVE9fUklHSFQgJiYgY29udGV4dCgpLT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgcnVuIGJlZm9yZSB0aGUgbmV1dHJh
bHMuCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgICAgICAg
ICAvLyBCZWdpbiBhbiBSIHJ1biBmb3IgdGhlIG5ldXRyYWxzLgorICAgICAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKKyAgICAgICAgICAgICAgICAgICAg
bV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVf
TEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVDsKKyAgICAgICAgICAgICAgICBtX2VvciA9
IG1fbGFzdDsKKyAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKKyAgICAgICAgICAgIG1f
c3RhdHVzLmVvciA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgIGlmIChtX2RpcmVjdGlv
biA9PSBVX09USEVSX05FVVRSQUwpCisgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0FS
QUJJQ19OVU1CRVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVX0VVUk9QRUFO
X05VTUJFUl9TRVBBUkFUT1I6CisgICAgICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRP
UjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RF
Uk1JTkFUT1I6CisgICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05V
TUJFUikgeworICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBVX0VVUk9QRUFOX05VTUJFUjsK
KyAgICAgICAgICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKKyAgICAgICAgICAgICAgICBtX3N0
YXR1cy5lb3IgPSBkaXJDdXJyZW50OworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5s
YXN0ICE9IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IpCisgICAgICAgICAgICAgICAgbV9s
YXN0QmVmb3JlRVQgPSBtX2VtcHR5UnVuID8gbV9lb3IgOiBtX2xhc3Q7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAvLyBib3VuZGFyeSBuZXV0cmFscyBzaG91bGQgYmUgaWdub3JlZAor
ICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoKKyAgICAgICAgICAgIGlmIChtX2VvciA9
PSBtX2xhc3QpCisgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIC8vIG5ldXRyYWxzCisgICAgICAgIGNhc2UgVV9CTE9DS19T
RVBBUkFUT1I6CisgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBkbyB3ZSBkbyB3aXRoIG5ld2xp
bmUgYW5kIHBhcmFncmFwaCBzZXBhcmF0b3JzIHRoYXQgY29tZSB0byBoZXJlPworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgcnVsZSBMMS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFzdEVu
ZCAmJiAobV9lb3IgPT0gbV9jdXJyZW50IHx8ICFuZWVkc0NvbnRpbnVlUGFzdEVuZCgpKSkgewor
ICAgICAgICAgICAgaWYgKCFtX3JlYWNoZWRFbmRPZkxpbmUpIHsKKyAgICAgICAgICAgICAgICBt
X2VvciA9IGVuZE9mTGluZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fc3RhdHVzLmVvcikg
eworICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgorICAgICAgICAgICAgICAg
IGNhc2UgVV9SSUdIVF9UT19MRUZUOgorICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVN
QkVSOgorICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IG1fc3RhdHVzLmVvcjsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFO
X05VTUJFUjoKKyAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5sYXN0
U3Ryb25nID09IFVfTEVGVF9UT19SSUdIVCA/IFVfTEVGVF9UT19SSUdIVCA6IFVfRVVST1BFQU5f
TlVNQkVSOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG5ldXRyYWxzIGluIHRo
aXMgY2FzZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4
MTcKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1bigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jdXJy
ZW50ID0gZW5kOworICAgICAgICAgICAgbV9zdGF0dXMgPSBzdGF0ZUF0RW5kLm1fc3RhdHVzOwor
ICAgICAgICAgICAgbV9zb3IgPSBzdGF0ZUF0RW5kLm1fc29yOworICAgICAgICAgICAgbV9lb3Ig
PSBzdGF0ZUF0RW5kLm1fZW9yOworICAgICAgICAgICAgbV9sYXN0ID0gc3RhdGVBdEVuZC5tX2xh
c3Q7CisgICAgICAgICAgICBtX3JlYWNoZWRFbmRPZkxpbmUgPSBzdGF0ZUF0RW5kLm1fcmVhY2hl
ZEVuZE9mTGluZTsKKyAgICAgICAgICAgIG1fbGFzdEJlZm9yZUVUID0gc3RhdGVBdEVuZC5tX2xh
c3RCZWZvcmVFVDsKKyAgICAgICAgICAgIG1fZW1wdHlSdW4gPSBzdGF0ZUF0RW5kLm1fZW1wdHlS
dW47CisgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfT1RIRVJfTkVVVFJBTDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgdXBkYXRlU3RhdHVzTGFzdEZyb21DdXJy
ZW50RGlyZWN0aW9uKGRpckN1cnJlbnQpOworICAgICAgICBtX2xhc3QgPSBtX2N1cnJlbnQ7CisK
KyAgICAgICAgaWYgKG1fZW1wdHlSdW4pIHsKKyAgICAgICAgICAgIG1fc29yID0gbV9jdXJyZW50
OworICAgICAgICAgICAgbV9lbXB0eVJ1biA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
aW5jcmVtZW50KCk7CisgICAgICAgIGlmICghbV9jdXJyZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1
ZW5jZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGJvb2wgY29tbWl0dGVkID0gY29tbWl0RXhw
bGljaXRFbWJlZGRpbmcoKTsKKyAgICAgICAgICAgIGlmIChjb21taXR0ZWQgJiYgcGFzdEVuZCkg
eworICAgICAgICAgICAgICAgIG1fY3VycmVudCA9IGVuZDsKKyAgICAgICAgICAgICAgICBtX3N0
YXR1cyA9IHN0YXRlQXRFbmQubV9zdGF0dXM7CisgICAgICAgICAgICAgICAgbV9zb3IgPSBzdGF0
ZUF0RW5kLm1fc29yOworICAgICAgICAgICAgICAgIG1fZW9yID0gc3RhdGVBdEVuZC5tX2VvcjsK
KyAgICAgICAgICAgICAgICBtX2xhc3QgPSBzdGF0ZUF0RW5kLm1fbGFzdDsKKyAgICAgICAgICAg
ICAgICBtX3JlYWNoZWRFbmRPZkxpbmUgPSBzdGF0ZUF0RW5kLm1fcmVhY2hlZEVuZE9mTGluZTsK
KyAgICAgICAgICAgICAgICBtX2xhc3RCZWZvcmVFVCA9IHN0YXRlQXRFbmQubV9sYXN0QmVmb3Jl
RVQ7CisgICAgICAgICAgICAgICAgbV9lbXB0eVJ1biA9IHN0YXRlQXRFbmQubV9lbXB0eVJ1bjsK
KyAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfT1RIRVJfTkVVVFJBTDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
cGFzdEVuZCAmJiAobV9jdXJyZW50ID09IGVuZCB8fCBtX2N1cnJlbnQuYXRFbmQoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChtX2VtcHR5UnVuKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgc3RhdGVBdEVuZC5tX3N0YXR1cyA9IG1fc3RhdHVzOworICAgICAgICAgICAgc3RhdGVB
dEVuZC5tX3NvciA9IG1fc29yOworICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2VvciA9IG1fZW9y
OworICAgICAgICAgICAgc3RhdGVBdEVuZC5tX2xhc3QgPSBtX2xhc3Q7CisgICAgICAgICAgICBz
dGF0ZUF0RW5kLm1fcmVhY2hlZEVuZE9mTGluZSA9IG1fcmVhY2hlZEVuZE9mTGluZTsKKyAgICAg
ICAgICAgIHN0YXRlQXRFbmQubV9sYXN0QmVmb3JlRVQgPSBtX2xhc3RCZWZvcmVFVDsKKyAgICAg
ICAgICAgIHN0YXRlQXRFbmQubV9lbXB0eVJ1biA9IG1fZW1wdHlSdW47CisgICAgICAgICAgICBl
bmRPZkxpbmUgPSBtX2xhc3Q7CisgICAgICAgICAgICBwYXN0RW5kID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIG1fcnVucy5zZXRMb2dpY2FsbHlMYXN0UnVuKG1fcnVucy5sYXN0UnVu
KCkpOworICAgIHJlb3JkZXJSdW5zRnJvbUxldmVscygpOworICAgIGVuZE9mTGluZSA9IEl0ZXJh
dG9yKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5
cGVuYW1lIERlcml2ZWRDbGFzcz4KK3ZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVu
LCBEZXJpdmVkQ2xhc3M+OjpzZXRXaGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29s
YXRlZFJ1bihSdW4mIHJ1biwgc2l6ZV90IHRyYW5zaXRpb24pCit7CisgICAgQVNTRVJUKCFtX3do
aXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLmNvbnRhaW5zKCZydW4p
KTsKKyAgICBtX3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuLmFk
ZCgmcnVuLCB0cmFuc2l0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5
cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgordW5zaWduZWQgQmlkaVJlc29sdmVy
QmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVkQ2xhc3M+Ojp3aGl0ZXNwYWNlQ29sbGFwc2luZ1Ry
YW5zaXRpb25Gb3JJc29sYXRlZFJ1bihSdW4mIHJ1bikKK3sKKyAgICByZXR1cm4gbV93aGl0ZXNw
YWNlQ29sbGFwc2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bi50YWtlKCZydW4pOworfQorCit9
IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4
dC9CaWRpUnVuTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L0JpZGlSdW5MaXN0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMGU0NDg2OWQ5YzVkNWRlZjZhZDZiZGEwMWRlMTU0MWIzODQ4OTZjMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9CaWRpUnVuTGlz
dC5oCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFBBTCB7CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+
CitjbGFzcyBCaWRpUnVuTGlzdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmlkaVJ1bkxp
c3QpOworcHVibGljOgorICAgIEJpZGlSdW5MaXN0KCkKKyAgICAgICAgOiBtX2xhc3RSdW4obnVs
bHB0cikKKyAgICAgICAgLCBtX2xvZ2ljYWxseUxhc3RSdW4obnVsbHB0cikKKyAgICAgICAgLCBt
X3J1bkNvdW50KDApCisgICAgeworICAgIH0KKworICAgIC8vIEZJWE1FOiBPbmNlIEJpZGlSZXNv
bHZlciBubyBsb25nZXIgb3ducyB0aGUgQmlkaVJ1bkxpc3QsCisgICAgLy8gdGhlbiB+QmlkaVJ1
bkxpc3Qgc2hvdWxkIGNhbGwgZGVsZXRlUnVucygpIGF1dG9tYXRpY2FsbHkuCisKKyAgICBSdW4q
IGZpcnN0UnVuKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFJ1bi5nZXQoKTsgfQorICAgIFJ1biog
bGFzdFJ1bigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJ1bjsgfQorICAgIFJ1biogbG9naWNhbGx5
TGFzdFJ1bigpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbGx5TGFzdFJ1bjsgfQorICAgIHVuc2ln
bmVkIHJ1bkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ydW5Db3VudDsgfQorCisgICAgdm9pZCBh
cHBlbmRSdW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJik7CisgICAgdm9pZCBwcmVwZW5kUnVuKHN0
ZDo6dW5pcXVlX3B0cjxSdW4+JiYpOworCisgICAgdm9pZCBtb3ZlUnVuVG9FbmQoUnVuKik7Cisg
ICAgdm9pZCBtb3ZlUnVuVG9CZWdpbm5pbmcoUnVuKik7CisKKyAgICB2b2lkIGNsZWFyKCk7Cisg
ICAgdm9pZCByZXZlcnNlUnVucyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKKyAgICB2
b2lkIHJlb3JkZXJSdW5zRnJvbUxldmVscygpOworCisgICAgdm9pZCBzZXRMb2dpY2FsbHlMYXN0
UnVuKFJ1biogcnVuKSB7IG1fbG9naWNhbGx5TGFzdFJ1biA9IHJ1bjsgfQorCisgICAgdm9pZCBy
ZXBsYWNlUnVuV2l0aFJ1bnMoUnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4mIG5ld1J1
bnMpOworCitwcml2YXRlOgorCisgICAgLy8gVGhlIHJ1bnMgZm9ybSBhIHNpbmdseS1saW5rZWQt
bGlzdCwgd2hlcmUgdGhlIGxpbmtzIChSdW46Om1fbmV4dCkgaW1wbHkgb3duZXJzaGlwIChhbmQg
YXJlIG9mIHR5cGUgc3RkOjp1bmlxdWVfcHRyKS4KKyAgICAvLyBUaGUgcmF3IHBvaW50ZXJzIGJl
bG93IHBvaW50IGludG8gdGhlIHNpbmdseS1saW5rZWQtbGlzdC4KKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UnVuPiBtX2ZpcnN0UnVuOyAvLyBUaGUgaGVhZCBvZiB0aGUgbGlzdAorICAgIFJ1biogbV9s
YXN0UnVuOworICAgIFJ1biogbV9sb2dpY2FsbHlMYXN0UnVuOworICAgIHVuc2lnbmVkIG1fcnVu
Q291bnQ7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgUnVuPgoraW5saW5lIHZvaWQgQmlkaVJ1bkxp
c3Q8UnVuPjo6YXBwZW5kUnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYgcnVuKQoreworICAgIGlm
ICghbV9maXJzdFJ1bikgeworICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShydW4pOworICAg
ICAgICBtX2xhc3RSdW4gPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1fbGFzdFJ1bi0+c2V0TmV4dChXVEZNb3ZlKHJ1bikpOworICAgICAgICBtX2xhc3RSdW4gPSBt
X2xhc3RSdW4tPm5leHQoKTsKKyAgICB9CisgICAgbV9ydW5Db3VudCsrOworfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgUnVuPgoraW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bihz
dGQ6OnVuaXF1ZV9wdHI8UnVuPiYmIHJ1bikKK3sKKyAgICBBU1NFUlQoIXJ1bi0+bmV4dCgpKTsK
KworICAgIGlmICghbV9sYXN0UnVuKQorICAgICAgICBtX2xhc3RSdW4gPSBydW4uZ2V0KCk7Cisg
ICAgZWxzZQorICAgICAgICBydW4tPnNldE5leHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7CisgICAg
bV9maXJzdFJ1biA9IFdURk1vdmUocnVuKTsKKyAgICBtX3J1bkNvdW50Kys7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBSdW4+CitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9F
bmQoUnVuKiBydW4pCit7CisgICAgQVNTRVJUKG1fZmlyc3RSdW4pOworICAgIEFTU0VSVChtX2xh
c3RSdW4pOworICAgIEFTU0VSVChydW4tPm5leHQoKSk7CisKKyAgICBSdW4qIHByZXZpb3VzID0g
bnVsbHB0cjsKKyAgICBSdW4qIGN1cnJlbnQgPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIHdoaWxl
IChjdXJyZW50ICE9IHJ1bikgeworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAg
IGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4dCgpOworICAgIH0KKworICAgIGlmICghcHJldmlvdXMp
IHsKKyAgICAgICAgQVNTRVJUKG1fZmlyc3RSdW4uZ2V0KCkgPT0gcnVuKTsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJ1bj4gb3JpZ2luYWxGaXJzdFJ1biA9IFdURk1vdmUobV9maXJzdFJ1bik7
CisgICAgICAgIG1fZmlyc3RSdW4gPSBvcmlnaW5hbEZpcnN0UnVuLT50YWtlTmV4dCgpOworICAg
ICAgICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZShvcmlnaW5hbEZpcnN0UnVuKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXMt
PnRha2VOZXh0KCk7CisgICAgICAgIHByZXZpb3VzLT5zZXROZXh0KGN1cnJlbnQtPnRha2VOZXh0
KCkpOworICAgICAgICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZSh0YXJnZXQpKTsKKyAgICB9
Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+CitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+
Ojptb3ZlUnVuVG9CZWdpbm5pbmcoUnVuKiBydW4pCit7CisgICAgQVNTRVJUKG1fZmlyc3RSdW4p
OworICAgIEFTU0VSVChtX2xhc3RSdW4pOworICAgIEFTU0VSVChydW4gIT0gbV9maXJzdFJ1bi5n
ZXQoKSk7CisKKyAgICBSdW4qIHByZXZpb3VzID0gbV9maXJzdFJ1bi5nZXQoKTsKKyAgICBSdW4q
IGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4dCgpOworICAgIHdoaWxlIChjdXJyZW50ICE9IHJ1bikg
eworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBwcmV2aW91
cy0+bmV4dCgpOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9IHBy
ZXZpb3VzLT50YWtlTmV4dCgpOworICAgIHByZXZpb3VzLT5zZXROZXh0KHJ1bi0+dGFrZU5leHQo
KSk7CisgICAgaWYgKHJ1biA9PSBtX2xhc3RSdW4pCisgICAgICAgIG1fbGFzdFJ1biA9IHByZXZp
b3VzOworCisgICAgdGFyZ2V0LT5zZXROZXh0KFdURk1vdmUobV9maXJzdFJ1bikpOworICAgIG1f
Zmlyc3RSdW4gPSBXVEZNb3ZlKHRhcmdldCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBSdW4+Cit2
b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyhSdW4qIHRvUmVwbGFjZSwg
QmlkaVJ1bkxpc3Q8UnVuPiYgbmV3UnVucykKK3sKKyAgICBBU1NFUlQobmV3UnVucy5ydW5Db3Vu
dCgpKTsKKyAgICBBU1NFUlQobV9maXJzdFJ1bik7CisgICAgQVNTRVJUKHRvUmVwbGFjZSk7CisK
KyAgICBtX3J1bkNvdW50ICs9IG5ld1J1bnMucnVuQ291bnQoKSAtIDE7IC8vIFdlIGFyZSBhZGRp
bmcgdGhlIG5ldyBydW5zIGFuZCByZW1vdmluZyB0b1JlcGxhY2UuCisKKyAgICAvLyBGaXggdXAg
YW55IHBvaW50ZXJzIHdoaWNoIG1heSBlbmQgdXAgc3RhbGUuCisgICAgaWYgKG1fbGFzdFJ1biA9
PSB0b1JlcGxhY2UpCisgICAgICAgIG1fbGFzdFJ1biA9IG5ld1J1bnMubGFzdFJ1bigpOworICAg
IGlmIChtX2xvZ2ljYWxseUxhc3RSdW4gPT0gdG9SZXBsYWNlKQorICAgICAgICBtX2xvZ2ljYWxs
eUxhc3RSdW4gPSBuZXdSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKKworICAgIGlmIChtX2ZpcnN0
UnVuLmdldCgpID09IHRvUmVwbGFjZSkgeworICAgICAgICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0
TmV4dChtX2ZpcnN0UnVuLT50YWtlTmV4dCgpKTsKKyAgICAgICAgbV9maXJzdFJ1biA9IFdURk1v
dmUobmV3UnVucy5tX2ZpcnN0UnVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGaW5kIHRo
ZSBydW4ganVzdCBiZWZvcmUgInRvUmVwbGFjZSIgaW4gdGhlIGxpc3Qgb2YgcnVucy4KKyAgICAg
ICAgUnVuKiBwcmV2aW91c1J1biA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgICAgIHdoaWxlIChw
cmV2aW91c1J1bi0+bmV4dCgpICE9IHRvUmVwbGFjZSkKKyAgICAgICAgICAgIHByZXZpb3VzUnVu
ID0gcHJldmlvdXNSdW4tPm5leHQoKTsKKyAgICAgICAgQVNTRVJUKHByZXZpb3VzUnVuKTsKKwor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91c1J1bi0+dGFrZU5l
eHQoKTsKKyAgICAgICAgcHJldmlvdXNSdW4tPnNldE5leHQoV1RGTW92ZShuZXdSdW5zLm1fZmly
c3RSdW4pKTsKKyAgICAgICAgbmV3UnVucy5tX2xhc3RSdW4tPnNldE5leHQodGFyZ2V0LT50YWtl
TmV4dCgpKTsKKyAgICB9CisKKyAgICBuZXdSdW5zLmNsZWFyKCk7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBSdW4+Cit2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OmNsZWFyKCkKK3sKKyAgICBtX2ZpcnN0
UnVuID0gbnVsbHB0cjsKKyAgICBtX2xhc3RSdW4gPSBudWxscHRyOworICAgIG1fbG9naWNhbGx5
TGFzdFJ1biA9IG51bGxwdHI7CisgICAgbV9ydW5Db3VudCA9IDA7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBSdW4+Cit2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnJldmVyc2VSdW5zKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQpCit7CisgICAgaWYgKHN0YXJ0ID49IGVuZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihlbmQg
PCBtX3J1bkNvdW50KTsKKworICAgIC8vIEdldCB0aGUgaXRlbSBiZWZvcmUgdGhlIHN0YXJ0IG9m
IHRoZSBydW5zIHRvIHJldmVyc2UgYW5kIHB1dCBpdCBpbgorICAgIC8vIHxiZWZvcmVTdGFydHwu
IHxjdXJyfCBzaG91bGQgcG9pbnQgdG8gdGhlIGZpcnN0IHJ1biB0byByZXZlcnNlLgorICAgIFJ1
biogY3VyciA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgUnVuKiBiZWZvcmVTdGFydCA9IG51bGxw
dHI7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZm9yICg7IGkgPCBzdGFydDsgKytpKSB7Cisg
ICAgICAgIGJlZm9yZVN0YXJ0ID0gY3VycjsKKyAgICAgICAgY3VyciA9IGN1cnItPm5leHQoKTsK
KyAgICB9CisgICAgUnVuKiBzdGFydFJ1biA9IGN1cnI7CisKKyAgICBmb3IgKDsgaSA8IGVuZDsg
KytpKQorICAgICAgICBjdXJyID0gY3Vyci0+bmV4dCgpOworCisgICAgaWYgKCFjdXJyLT5uZXh0
KCkpCisgICAgICAgIG1fbGFzdFJ1biA9IHN0YXJ0UnVuOworCisgICAgLy8gU3RhbmRhcmQgInNs
aWRpbmcgd2luZG93IiBvZiAzIHBvaW50ZXJzCisgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gcHJl
dmlvdXMgPSBjdXJyLT50YWtlTmV4dCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IGN1cnJl
bnQgPSBiZWZvcmVTdGFydCA/IGJlZm9yZVN0YXJ0LT50YWtlTmV4dCgpIDogV1RGTW92ZShtX2Zp
cnN0UnVuKTsKKyAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UnVuPiBuZXh0ID0gY3VycmVudC0+dGFrZU5leHQoKTsKKyAgICAgICAgY3VycmVudC0+c2V0TmV4
dChXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgIHByZXZpb3VzID0gV1RGTW92ZShjdXJyZW50
KTsKKyAgICAgICAgY3VycmVudCA9IFdURk1vdmUobmV4dCk7CisgICAgfQorCisgICAgaWYgKGJl
Zm9yZVN0YXJ0KQorICAgICAgICBiZWZvcmVTdGFydC0+c2V0TmV4dChXVEZNb3ZlKHByZXZpb3Vz
KSk7CisgICAgZWxzZQorICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShwcmV2aW91cyk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC90ZXh0L1RleHREaXJlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9UZXh0
RGlyZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2VjMWNmM2I1Y2U3ZTIxMzI4ZWEyZjU1NWFhMDc1Y2Ey
NGE3N2U4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9U
ZXh0RGlyZWN0aW9uLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBjbGFzcyBUZXh0RGlyZWN0aW9uIDogYm9vbCB7
IExUUiwgUlRMIH07CisKK2lubGluZSBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OkxUUjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC90ZXh0L1VuaWNvZGVCaWRpLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvVW5pY29k
ZUJpZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jMzU4ZTFkOTJjZTE5MGZlYjc2YjEwODVmNGVmMGU0MTM2YWJk
MGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L1VuaWNv
ZGVCaWRpLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgUEFMIHsKKworZW51bSBj
bGFzcyBFVW5pY29kZUJpZGkgeworICAgIFVCTm9ybWFsLAorICAgIEVtYmVkLAorICAgIE92ZXJy
aWRlLAorICAgIElzb2xhdGUsCisgICAgUGxhaW50ZXh0LAorICAgIElzb2xhdGVPdmVycmlkZSwK
K307CisKK2lubGluZSBib29sIGlzSXNvbGF0ZWQoY29uc3QgRVVuaWNvZGVCaWRpJiB1bmljb2Rl
QmlkaSkKK3sKKyAgICByZXR1cm4gdW5pY29kZUJpZGkgPT0gRVVuaWNvZGVCaWRpOjpJc29sYXRl
CisgICAgICAgIHx8IHVuaWNvZGVCaWRpID09IEVVbmljb2RlQmlkaTo6SXNvbGF0ZU92ZXJyaWRl
CisgICAgICAgIHx8IHVuaWNvZGVCaWRpID09IEVVbmljb2RlQmlkaTo6UGxhaW50ZXh0OworfQor
CitpbmxpbmUgYm9vbCBpc092ZXJyaWRlKEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKK3sKKyAg
ICByZXR1cm4gdW5pY29kZUJpZGkgPT0gRVVuaWNvZGVCaWRpOjpPdmVycmlkZQorICAgICAgICB8
fCB1bmljb2RlQmlkaSA9PSBFVW5pY29kZUJpZGk6Oklzb2xhdGVPdmVycmlkZTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L2lvcy9UZXh0RW5jb2RpbmdS
ZWdpc3RyeUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvdGV4dC9pb3MvVGV4dEVuY29k
aW5nUmVnaXN0cnlJT1MubW0KaW5kZXggMmFhYTY4ZDdjY2M1OGQ1MTJiN2Y5OTczM2MyY2NhZWEy
ZWIzYmEzMi4uNGY0YjUzZjRlYTFjNjVkMWU5NzNlODU1M2RkZWEwMjhjZjJkYjllNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC90ZXh0L2lvcy9UZXh0RW5jb2RpbmdSZWdpc3Ry
eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3RleHQvaW9zL1RleHRFbmNvZGlu
Z1JlZ2lzdHJ5SU9TLm1tCkBAIC02OCw2ICs2OCw2IEBAIENGU3RyaW5nRW5jb2Rpbmcgd2ViRGVm
YXVsdENGU3RyaW5nRW5jb2RpbmcoKQogICAgIHJldHVybiBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xh
dGluMTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgUEFMCiAK
ICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC90ZXh0L21hYy9UZXh0RW5jb2RpbmdSZWdpc3RyeU1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvdGV4dC9tYWMvVGV4dEVuY29kaW5nUmVnaXN0cnlNYWMubW0KaW5kZXgg
MzA1ZjQwMzVmMDRjZWYxYmUxMzRiZTc5ZmQ5ZjdiYWJmZGEyM2NjMC4uOTQ0NjM0MTc0NDBhMTNl
MTY1ZWZjYTY0NzAwMjcyMDg5ZDc1NWQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC90ZXh0L21hYy9UZXh0RW5jb2RpbmdSZWdpc3RyeU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3RleHQvbWFjL1RleHRFbmNvZGluZ1JlZ2lzdHJ5TWFjLm1tCkBAIC01NCw2
ICs1NCw2IEBAIENGU3RyaW5nRW5jb2Rpbmcgd2ViRGVmYXVsdENGU3RyaW5nRW5jb2RpbmcoKQog
ICAgIHJldHVybiBlbmNvZGluZzsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBu
YW1lc3BhY2UgUEFMCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IGJkNWE3NDc5Y2IzOWU0NmNjOTEwNDAwZjRlZTM4NDkzMjRjNzUzMWYuLjM3NWY4YzFjN2FkNTAx
NjliMmM4ODNmNGJjOGFmNzFlYzkyMmExZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMjQ4LDcgKzIy
NDgsNiBAQCBwbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKIHBsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuY3BwCiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0
U2NvcGUuY3BwCiBwbGF0Zm9ybS9zcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwCi1wbGF0Zm9ybS90
ZXh0L0JpZGlDb250ZXh0LmNwcAogcGxhdGZvcm0vdGV4dC9EYXRlVGltZUZvcm1hdC5jcHAKIHBs
YXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcAogcGxhdGZvcm0vdGV4dC9QbGF0
Zm9ybUxvY2FsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBiNjYyYjA4N2U3MmVkZTZlYzdjOTM1ZGZhNDdmMDdlMGRjNGQw
NzZmLi44MTliOGNhNDZmZjc1ZjM5MDU1MzllMGE0MDc0NTk2MmUxY2UxZDdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNjI3
LDcgKzM2MjcsNiBAQAogCQlBODREODJDMTExRDM0NzQ4MDA5NzI5OTAgLyogU2NyaXB0YWJsZURv
Y3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODREODJCRjExRDM0NzQ4MDA5NzI5OTAgLyogU2NyaXB0YWJsZURvY3VtZW50UGFyc2Vy
LmggKi87IH07CiAJCUE4NEVCRDgzMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODRFQkQ4
MTBDQjhDOTc3MDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4NTMxMjNEMTFEMDQ3MUIwMEQ0RDA3
NyAvKiBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NTMxMjNDMTFEMDQ3MUIwMEQ0RDA3NyAvKiBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlBODYzRTIwMTEzNDM0MTIwMDAyNzQ5MjYgLyogVW5pY29kZUJp
ZGkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjNF
MjAwMTM0MzQxMjAwMDI3NDkyNiAvKiBVbmljb2RlQmlkaS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4NjYyOUNGMDlEQTJCNDcwMDk2MzNBNSAv
KiBKU1VJRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4NjYyOUM5MDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCAqLzsgfTsKIAkJQTg2
NjI5RDEwOURBMkI0ODAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2NjI5Q0IwOURBMkI0NzAwOTYzM0E1IC8q
IEpTTW91c2VFdmVudC5oICovOyB9OwogCQlBODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNL
ZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODY2MjlDRDA5REEyQjQ3MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmggKi87IH07
CkBAIC0zNjY4LDcgKzM2NjcsNiBAQAogCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4OUNDQzUzMEY0NEU5ODEwMEI1
REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg5Q0NDNTEwRjQ0RTk4MTAwQjVEQTEwIC8qIFJl
cGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggKi87IH07CiAJCUE4QzIyOEExMTFENTcyMkUwMEQ1
QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMyMjg5RjExRDU3MjJFMDBENUE3RDMgLyogRGVj
b2RlZERhdGFEb2N1bWVudFBhcnNlci5oICovOyB9OwotCQlBOEM0MDI5MzEzNDhCMjIyMDA2M0Yx
RTUgLyogQmlkaVJ1bkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QzQwMjkyMTM0OEIyMjIwMDYzRjFFNSAvKiBCaWRpUnVuTGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4QzRBN0ZEMDlE
NTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVk
RWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUE4QzRBODA3MDlENTYzMjcwMDAzQUM4RCAvKiBFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEM0QTdGNTA5RDU2MzI3MDAwM0FDOEQg
LyogRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE4QzRBODBCMDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyaWJ1dGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzRBN0Y5MDlENTYzMjcwMDAz
QUM4RCAvKiBBdHRyaWJ1dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMzkxNyw4ICszOTE1LDYgQEAKIAkJQjJBMUYyQjEwQ0VGMEFCRjAwNDQy
RjZBIC8qIFNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQTFGMkE4MENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNz
aW5nR2x5cGhFbGVtZW50LmggKi87IH07CiAJCUIyQUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMkFGRkM3NjBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUIyQjFGNzE3MEQwMENBQTgwMDRBRUE2NCAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQjFGNzE1MEQw
MENBQTgwMDRBRUE2NCAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCAqLzsgfTsKLQkJQjJDM0RB
MjQwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzRDlGMzBEMDA2QzFEMDBFRjZGMjYgLyogQmlk
aUNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlCMkMzREEyNTBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaVJlc29sdmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkMzRDlGNDBEMDA2QzFEMDBF
RjZGMjYgLyogQmlkaVJlc29sdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0
cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJD
M0Q5RkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQzNEQTM0MEQwMDZDMUQwMEVG
NkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDM0RBMDQwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCb3VuZGFyaWVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJD
M0RBNDUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBMTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRGbGFncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC00MTQ0LDcgKzQxNDAsNiBAQAogCQlCQzRBNTMzNTI1NjA1QTU2MDAyOEM1OTIgLyogRGF0
YURldGVjdG9yVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkM0QTUzMzQyNTYwNUE1NjAwMjhDNTkyIC8qIERhdGFEZXRlY3RvclR5cGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzRBNTMzNzI1
NjA1QUUxMDAyOEM1OTIgLyogU3RvcmFnZUJsb2NraW5nUG9saWN5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzRBNTMzNjI1NjA1QUUxMDAyOEM1OTIg
LyogU3RvcmFnZUJsb2NraW5nUG9saWN5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM0QTUzMzkyNTYwNjM5ODAwMjhDNTkyIC8qIEZvbnRSZW5k
ZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzRBNTMzODI1NjA2Mzk4MDAyOEM1OTIgLyogRm9udFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQzRBNTMzQjI1NjA2
NEUxMDAyOEM1OTIgLyogVGV4dERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0QTUzM0EyNTYwNjRFMTAwMjhDNTkyIC8qIFRleHREaXJl
Y3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQzREREQ5NjI3M0Q5NDk5MDA2NjBFQkIgLyogU2NlbmVLaXRNb2RlbFBsYXllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0REREOEYyNzNEODRF
NzAwNjYwRUJCIC8qIFNjZW5lS2l0TW9kZWxQbGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzREREQ5NzI3M0Q5NEE4MDA2NjBFQkIgLyog
U2NlbmVLaXRNb2RlbExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM0REREOTEyNzNEODRFNzAwNjYwRUJCIC8qIFNjZW5lS2l0TW9k
ZWxMb2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQzUxMTU2RTEyQjE3NDlDMDBDOTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzUxMTU2
RDEyQjE3NDlDMDBDOTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gKi87IH07CkBAIC0xNDA2
NSw3ICsxNDA2MCw2IEBACiAJCUE4NTMxMjNDMTFEMDQ3MUIwMEQ0RDA3NyAvKiBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3
b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkv
RnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+
IjsgfTsKIAkJQTg1RjIyMDgxNDMwMzc3RDAwN0NDODg0IC8qIEpTUG9wU3RhdGVFdmVudEN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1BvcFN0YXRlRXZl
bnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODYzRTIwMDEzNDM0
MTIwMDAyNzQ5MjYgLyogVW5pY29kZUJpZGkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVW5pY29kZUJpZGkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg2NjI5
QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNVSUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4
NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVUlFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE4NjYyOUNCMDlEQTJCNDcwMDk2MzNBNSAvKiBKU01vdXNlRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW91c2VFdmVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTQxNDcsNyArMTQxNDEsNiBAQAogCQlBOEMyMjgwRDExRDRB
NTk3MDBENUE3RDMgLyogRG9jdW1lbnRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRG9jdW1lbnRQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBOEMyMjg5RjExRDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBh
cnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNvZGVkRGF0YURvY3Vt
ZW50UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzIyOEEwMTFENTcy
MkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEM0MDI5MjEzNDhCMjIyMDA2M0YxRTUgLyog
QmlkaVJ1bkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmlkaVJ1bkxp
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDNEE3RUIwOUQ1NjMyNzAwMDNB
QzhEIC8qIFN0eWxlZEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0eWxlZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDNEE3RUMw
OUQ1NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlZEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBOEM0QTdFRTA5RDU2MzI3MDAwM0FDOEQgLyogTm9kZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNDc5Niw5ICsxNDc4OSw2IEBACiAJCUIyQUZGQzhDMEQwMEE1REYwMDMw
MDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBUZXh0Qm91bmRhcmllcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJCMUY3MTQwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRlckV2ZW50c0hpdFJ1
bGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJCMUY3MTUwRDAwQ0FBODAw
NEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUIyQzNEOUYyMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmlkaUNvbnRleHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkMzRDlGMzBEMDA2QzFEMDBFRjZGMjYgLyogQmlk
aUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZGlDb250ZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQzNEOUY0MEQwMDZDMUQwMEVGNkYy
NiAvKiBCaWRpUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJp
ZGlSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkMzRDlGRTBEMDA2
QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTZWdtZW50ZWRTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkMzRDlGRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWdtZW50ZWRTdHJpbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDM0RBMDQwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRCb3VuZGFyaWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Qm91
bmRhcmllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUyMzUsNyArMTUyMjUs
NiBAQAogCQlCQzRBNTMzNDI1NjA1QTU2MDAyOEM1OTIgLyogRGF0YURldGVjdG9yVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0b3JUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDNEE1MzM2MjU2MDVBRTEwMDI4QzU5MiAvKiBTdG9yYWdlQmxvY2tpbmdQb2xpY3ku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUJsb2NraW5nUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDNEE1MzM4MjU2MDYzOTgwMDI4QzU5MiAvKiBGb250UmVuZGVyaW5n
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb250UmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCQzRBNTMzQTI1NjA2NEUxMDAyOEM1OTIgLyogVGV4dERpcmVjdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RGlyZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDNERERDhCMjczRDg0RTcwMDY2MEVCQiAvKiBTY2VuZUtpdE1vZGVsTG9hZGVy
VVNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjZW5lS2l0TW9kZWxMb2FkZXJVU0QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0REREOEMyNzNEODRFNzAwNjYwRUJCIC8qIFNjZW5lS2l0
TW9kZWxMb2FkZXJDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY2VuZUtpdE1vZGVs
TG9hZGVyQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzREREQ4RDI3
M0Q4NEU3MDA2NjBFQkIgLyogU2NlbmVLaXRNb2RlbFBsYXllci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFNjZW5lS2l0TW9kZWxQbGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yODk3MywxMCArMjg5NjIsNiBAQAogCQkJCUIyQjI2NDU5MEQwMEE3N0UwMDBBQ0MxRCAv
KiBjZiAqLywKIAkJCQkxQzE2NUU0RjIzRUNGNTVFMDBCMEZDRkIgLyogY29jb2EgKi8sCiAJCQkJ
QjJDM0Q5RjkwRDAwNkMxRDAwRUY2RjI2IC8qIG1hYyAqLywKLQkJCQlCMkMzRDlGMjBEMDA2QzFE
MDBFRjZGMjYgLyogQmlkaUNvbnRleHQuY3BwICovLAotCQkJCUIyQzNEOUYzMEQwMDZDMUQwMEVG
NkYyNiAvKiBCaWRpQ29udGV4dC5oICovLAotCQkJCUIyQzNEOUY0MEQwMDZDMUQwMEVGNkYyNiAv
KiBCaWRpUmVzb2x2ZXIuaCAqLywKLQkJCQlBOEM0MDI5MjEzNDhCMjIyMDA2M0YxRTUgLyogQmlk
aVJ1bkxpc3QuaCAqLywKIAkJCQlDNTU5MkY3NzFBOTJBQTI4MDAxRjg4NjIgLyogQ2hhcmFjdGVy
UHJvcGVydGllcy5oICovLAogCQkJCTBGREE3QzIwMTg4MzJCQ0MwMEM5NTRCNSAvKiBEYXRlVGlt
ZUZvcm1hdC5jcHAgKi8sCiAJCQkJNDUzRUI2MzUxNTlDNTcwNDAwMDAxQkI3IC8qIERhdGVUaW1l
Rm9ybWF0LmggKi8sCkBAIC0yODk5NiwxMyArMjg5ODEsMTEgQEAKIAkJCQlCMkMzREEwNDBEMDA2
QzFEMDBFRjZGMjYgLyogVGV4dEJvdW5kYXJpZXMuaCAqLywKIAkJCQlBNzE1MUJENzEyRjE1NThG
MDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCAqLywKIAkJCQlBNzdEMDAxMTEzM0IwQUVC
MDBENjY1OEMgLyogVGV4dENoZWNraW5nLmggKi8sCi0JCQkJQkM0QTUzM0EyNTYwNjRFMTAwMjhD
NTkyIC8qIFRleHREaXJlY3Rpb24uaCAqLywKIAkJCQlDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYg
LyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLywKIAkJCQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0
NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwICovLAogCQkJCUIyQzNEQTE4MEQwMDZD
MUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgKi8sCiAJCQkJQjJDM0RBMTkw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggKi8sCiAJCQkJQjJDM0RB
MTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRGbGFncy5oICovLAotCQkJCUE4NjNFMjAwMTM0MzQx
MjAwMDI3NDkyNiAvKiBVbmljb2RlQmlkaS5oICovLAogCQkJCTE0NDc2QUE3MTVEQzRCQjEwMDMw
NURCMiAvKiBXcml0aW5nTW9kZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0ZXh0OwpAQCAtMzM0
NjksMTAgKzMzNDUyLDcgQEAKIAkJCQlCQzk0NjJEODEwN0E3QjRDMDA4NTcxOTMgLyogQmVmb3Jl
TG9hZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjIzQTMyODA5QkJBN0QwMDA2N0NDNTMg
LyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjNE
MEE0NEVGQzcwMEY5OTJFMCAvKiBCZWZvcmVVbmxvYWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQjJDM0RBMjQwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlDb250ZXh0LmggaW4gSGVhZGVycyAq
LywKLQkJCQlCMkMzREEyNTBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaVJlc29sdmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0U3ODk4NjExMjBFN0E2MDA2MEVDRTUgLyogQmlkaVJ1bi5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQThDNDAyOTMxMzQ4QjIyMjAwNjNGMUU1IC8qIEJpZGlSdW5MaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyREQ4NzE0QjI2NUY0MzY2MDA1Rjk5N0MgLyogQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOEQxMkIwMjZGNzAw
QzFBMzU5IC8qIEJpcXVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMjUxMkIwMjY3NjAw
QzFBMzU5IC8qIEJpcXVhZERTUEtlcm5lbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDUwOCw2ICsz
NDQ4OCw3IEBACiAJCQkJQkM1M0M1RjUwREE1NkI5MjAwMjFFQjVEIC8qIEdyYWRpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyNzk2NDBEMDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRy
aWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE5Q0RGNDI3NzEwNjM5MDA1M0Y3MzQgLyog
R3JhZGllbnRDb2xvclN0b3AuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDMTlDRTJCMjc3MkJGN0Iw
MDUzRjczNCAvKiBHcmFkaWVudENvbG9yU3RvcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENDgx
RjA0MTQ2QjVDNkIwMEFBNzgzNCAvKiBHcmFkaWVudEltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE5Q0RGMjI3NkZGQzZEMDA1M0Y3MzQgLyogR3JhZGllbnRSZW5kZXJlckNHLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QkI2ODBCQTI1QkExQkU0MDAyQjg3MzggLyogR3JhcGhpY3NDaGVja3NN
YWMuaCBpbiBIZWFkZXJzICovLApAQCAtMzc0OTcsNyArMzc0NzgsNiBAQAogCQkJCTE0MkI5N0NB
MTMxMzg5NDMwMDhCRUY0QiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTU4MkRFMzI1MUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDNzNBNzE1MjE4NTc1ODcwMDRDQ0VBNSAvKiBUZXh0
RGVjb3JhdGlvblRoaWNrbmVzcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM0QTUzM0IyNTYwNjRF
MTAwMjhDNTkyIC8qIFRleHREaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNEE1MzI1
MjU2MDU1NUYwMDI4QzU5MiAvKiBUZXh0RGlyZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2aW9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDODRCNDEyMzcxMTgwMDAwQzYxNjEgLyogVGV4dERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDODQ4NDEyMzZGRDkzMDAwQzYxNjEgLyog
VGV4dERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTM3NTczLDcgKzM3NTUzLDYg
QEAKIAkJCQlCRTkxM0Q4MDE4MUVGOTI0MDBEQ0IwOUUgLyogVHJhY2tQcml2YXRlQmFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQ0QxRjlCMUMyNzAyNEJDMjAwNjE3RUI2IC8qIFRyYWNrUHJpdmF0
ZUJhc2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZGQUMzMEZFMTg0RkIxNDUwMDhDNEYx
RSAvKiBUcmFpbGluZ09iamVjdHMuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDMTlDRTJCMjc3MkJG
N0IwMDUzRjczNCAvKiBHcmFkaWVudENvbG9yU3RvcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
NjA3MTMyMUJEODMwOEIwMERCQzRGMiAvKiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0QzRUVGNDEyNTc5OUZEOTAwNjU2M0JCIC8qIFRyYW5zZmVyRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMUM0MEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzYwMiw3ICszNzU4MSw2IEBACiAJ
CQkJMkVDREJBRDgyMUQ4OTA2MzAwRjAwRUNEIC8qIFVuZG9JdGVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRUNEQkFEMTIxRDg5MDM0MDBGMDBFQ0QgLyogVW5kb01hbmFnZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQTg2M0UyMDExMzQzNDEyMDAwMjc0OTI2IC8qIFVuaWNvZGVCaWRpLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTg4NjRFMTFCQkFGNTc0MDBFNTQwQzkgLyogVW5pcXVlSURCRGF0
YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOThGN0E1MUJCREI3OTMwMEUyQ0M1RiAvKiBV
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOThGN0E5
MUJCREQzODUwMEUyQ0M1RiAvKiBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDg0N2RlMTZkYjYyMzAxODhmMWJiODdl
ZTMyYjI2NzMxZjRlODM5ZDYuLjU5NTM4YzA4NDkxMzAyZTlmMjgwNjBlMTlhNTdmN2QxNmU5NTE4
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtOTI0LDcgKzkyNCw3IEBAIFBhdGggQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6ZWxlbWVudFBhdGgoKSBjb25zdAogCiAgICAgICAgIC8vIENv
bXB1dGUgdGhlIHBhdGggb25seSBpZiB0aGlzIGlzIHRoZSBsYXN0IHBhcnQgb2YgYSBsaW5lIGZv
bGxvd2VkIGJ5IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZS4KICAgICAgICAgY29uc3Qg
YXV0byYgc3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZSgpOwotICAgICAgICBib29sIHJpZ2h0VG9M
ZWZ0VGV4dCA9IHN0eWxlLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICAg
ICAgYm9vbCByaWdodFRvTGVmdFRleHQgPSBzdHlsZS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OlJUTDsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCB4VG9sZXJhbmNlID0gNTsK
ICAgICAgICAgc3RhdGljIGNvbnN0IGludCB5VG9sZXJhbmNlID0gNTsKICAgICAgICAgYm9vbCBu
ZWVkc1BhdGggPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZU1hcHBpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWVNYXBwaW5ncy5oCmluZGV4IGE5ZTU2NjMyNWM4YWU2ODA0ZDBmNTc1M2JjOTRkNGE5MWVlMzg0
NmQuLjIxYjliZTFiODBjM2U5M2MzMGI3MjFmYjllYTM4MzA0ZGNhZDcyMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaApAQCAtNDMsOCArNDMs
OCBAQAogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgIlRoZW1lVHlwZXMuaCIKICNp
bmNsdWRlICJUb3VjaEFjdGlvbi5oIgotI2luY2x1ZGUgIlVuaWNvZGVCaWRpLmgiCiAjaW5jbHVk
ZSAiV3JpdGluZ01vZGUuaCIKKyNpbmNsdWRlIDxwYWwvdGV4dC9Vbmljb2RlQmlkaS5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCkBA
IC0yNjEzLDU4ICsyNjEzLDU4IEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVl
OjpvcGVyYXRvciBUZXh0VHJhbnNmb3JtKCkgY29uc3QKICAgICByZXR1cm4gVGV4dFRyYW5zZm9y
bTo6Tm9uZTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1By
aW1pdGl2ZVZhbHVlKEVVbmljb2RlQmlkaSBlKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBBTDo6RVVuaWNvZGVCaWRpIGUpCiAgICAgOiBD
U1NWYWx1ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBzZXRQcmltaXRpdmVVbml0VHlwZShDU1NV
bml0VHlwZTo6Q1NTX1ZBTFVFX0lEKTsKICAgICBzd2l0Y2ggKGUpIHsKLSAgICBjYXNlIFVCTm9y
bWFsOgorICAgIGNhc2UgUEFMOjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsOgogICAgICAgICBtX3Zh
bHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vcm1hbDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBF
bWJlZDoKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpFbWJlZDoKICAgICAgICAgbV92YWx1
ZS52YWx1ZUlEID0gQ1NTVmFsdWVFbWJlZDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPdmVy
cmlkZToKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpPdmVycmlkZToKICAgICAgICAgbV92
YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVCaWRpT3ZlcnJpZGU7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXNvbGF0ZToKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlOgogICAg
ICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUlzb2xhdGU7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXNvbGF0ZU92ZXJyaWRlOgorICAgIGNhc2UgUEFMOjpFVW5pY29kZUJpZGk6Oklz
b2xhdGVPdmVycmlkZToKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVJc29sYXRl
T3ZlcnJpZGU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhaW50ZXh0OgorICAgIGNhc2Ug
UEFMOjpFVW5pY29kZUJpZGk6OlBsYWludGV4dDoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0g
Q1NTVmFsdWVQbGFpbnRleHQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdGVtcGxhdGU8
PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEVVbmljb2RlQmlkaSgpIGNvbnN0
Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgUEFMOjpFVW5p
Y29kZUJpZGkoKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVlSUQoKSk7CiAKICAgICBzd2l0
Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAg
IHJldHVybiBVQk5vcm1hbDsKKyAgICAgICAgcmV0dXJuIFBBTDo6RVVuaWNvZGVCaWRpOjpVQk5v
cm1hbDsKICAgICBjYXNlIENTU1ZhbHVlRW1iZWQ6Ci0gICAgICAgIHJldHVybiBFbWJlZDsKKyAg
ICAgICAgcmV0dXJuIFBBTDo6RVVuaWNvZGVCaWRpOjpFbWJlZDsKICAgICBjYXNlIENTU1ZhbHVl
QmlkaU92ZXJyaWRlOgotICAgICAgICByZXR1cm4gT3ZlcnJpZGU7CisgICAgICAgIHJldHVybiBQ
QUw6OkVVbmljb2RlQmlkaTo6T3ZlcnJpZGU7CiAgICAgY2FzZSBDU1NWYWx1ZUlzb2xhdGU6CiAg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdElzb2xhdGU6Ci0gICAgICAgIHJldHVybiBJc29sYXRlOwor
ICAgICAgICByZXR1cm4gUEFMOjpFVW5pY29kZUJpZGk6Oklzb2xhdGU7CiAgICAgY2FzZSBDU1NW
YWx1ZUlzb2xhdGVPdmVycmlkZToKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0SXNvbGF0ZU92ZXJy
aWRlOgotICAgICAgICByZXR1cm4gSXNvbGF0ZU92ZXJyaWRlOworICAgICAgICByZXR1cm4gUEFM
OjpFVW5pY29kZUJpZGk6Oklzb2xhdGVPdmVycmlkZTsKICAgICBjYXNlIENTU1ZhbHVlUGxhaW50
ZXh0OgogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQbGFpbnRleHQ6Ci0gICAgICAgIHJldHVybiBQ
bGFpbnRleHQ7CisgICAgICAgIHJldHVybiBQQUw6OkVVbmljb2RlQmlkaTo6UGxhaW50ZXh0Owog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBVQk5vcm1hbDsKKyAgICByZXR1cm4gUEFMOjpFVW5pY29kZUJp
ZGk6OlVCTm9ybWFsOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTUHJpbWl0aXZlVmFsdWUoVXNlckRyYWcgZSkKQEAgLTMwMTYsMzUgKzMwMTYsMzUgQEAgdGVt
cGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIE92ZXJmbG93V3JhcCgp
IGNvbnN0CiAgICAgcmV0dXJuIE92ZXJmbG93V3JhcDo6Tm9ybWFsOwogfQogCi10ZW1wbGF0ZTw+
IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoVGV4dERpcmVjdGlv
biBlKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZh
bHVlKFBBTDo6VGV4dERpcmVjdGlvbiBlKQogICAgIDogQ1NTVmFsdWUoUHJpbWl0aXZlQ2xhc3Mp
CiB7CiAgICAgc2V0UHJpbWl0aXZlVW5pdFR5cGUoQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9JRCk7
CiAgICAgc3dpdGNoIChlKSB7Ci0gICAgY2FzZSBUZXh0RGlyZWN0aW9uOjpMVFI6CisgICAgY2Fz
ZSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NT
VmFsdWVMdHI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dERpcmVjdGlvbjo6UlRMOgor
ICAgIGNhc2UgUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJ
RCA9IENTU1ZhbHVlUnRsOwogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4g
aW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBUZXh0RGlyZWN0aW9uKCkgY29uc3QK
K3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBQQUw6OlRleHRE
aXJlY3Rpb24oKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbHVlSUQoKSk7CiAKICAgICBzd2l0
Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2UgQ1NTVmFsdWVMdHI6Ci0gICAgICAgIHJl
dHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rp
b246OkxUUjsKICAgICBjYXNlIENTU1ZhbHVlUnRsOgotICAgICAgICByZXR1cm4gVGV4dERpcmVj
dGlvbjo6UlRMOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICByZXR1cm4gUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFI7CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NQcmltaXRpdmVWYWx1ZShXcml0aW5nTW9kZSBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1Byb3BlcnR5LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHku
aAppbmRleCBiYjA3Zjc3ZWE2ZmY1ODdkMDQwZDc3MDlmMDMxMzc0OWI4MDNkNDg0Li4yMjhkZGJj
MzAxYTcwMGNiNTE3YTU3N2RhOWIwZmQ5YzY3ODJjNjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJvcGVydHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVy
dHkuaApAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdyYXBWYWx1ZUluQ29t
bWFTZXBhcmF0ZWRMaXN0KCk7CiAKLSAgICBzdGF0aWMgQ1NTUHJvcGVydHlJRCByZXNvbHZlRGly
ZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBUZXh0RGlyZWN0aW9uLCBXcml0aW5n
TW9kZSk7CisgICAgc3RhdGljIENTU1Byb3BlcnR5SUQgcmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCwgUEFMOjpUZXh0RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7CiAg
ICAgc3RhdGljIGJvb2wgaXNJbmhlcml0ZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKICAgICBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gYWxpYXNlc0ZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwog
ICAgIHN0YXRpYyBib29sIGlzRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9tYWtlcHJvcC5wbAppbmRleCBmOTQxOTE3NGY1YTA5ZTVkMGZhOWZlNWQ2ZGU2ZWJh
YzUwNDJiYjgwLi4zMDYxOTQxYzFmMzIzZjBmMTE2Njc1MTVhZjFmYzE3YTUzODFkZjY1IDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL21ha2Vwcm9wLnBsCkBAIC03MTUsNyArNzE1LDcgQEAgcHJpbnQgR1BFUkYgPDwgIkVP
RiI7CiAgICAgfQogfQogCi1DU1NQcm9wZXJ0eUlEIENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0
aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK0NTU1Byb3BlcnR5SUQgQ1NTUHJv
cGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpCiB7CiAgICAgY29uc3QgVGV4dEZsb3cmIHRleHRmbG93ID0gbWFrZVRleHRGbG93KHdyaXRp
bmdNb2RlLCBkaXJlY3Rpb24pOwogICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKaW5kZXggNDJkYWNkMmRkNWNlM2U1ZjYyMzMzYTIxNjJjYzM3Njc0NmU4ZmI4
OS4uMzhhNjE5N2E3ZjlhYTk1NWI2NjJlNzQ3Y2Y5ZTAwNjI4MGY3Y2JjMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCkBAIC0xNzU0LDcgKzE3NTQsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVU
aXRsZUZyb21UaXRsZUVsZW1lbnQoKQogICAgICAgICB1cGRhdGVUaXRsZShkb3duY2FzdDxIVE1M
VGl0bGVFbGVtZW50PigqbV90aXRsZUVsZW1lbnQpLnRleHRXaXRoRGlyZWN0aW9uKCkpOwogICAg
IGVsc2UgaWYgKGlzPFNWR1RpdGxlRWxlbWVudD4oKm1fdGl0bGVFbGVtZW50KSkgewogICAgICAg
ICAvLyBGSVhNRTogRG9lcyB0aGUgU1ZHIHRpdGxlIGVsZW1lbnQgaGF2ZSBhIHRleHQgZGlyZWN0
aW9uPwotICAgICAgICB1cGRhdGVUaXRsZSh7IGRvd25jYXN0PFNWR1RpdGxlRWxlbWVudD4oKm1f
dGl0bGVFbGVtZW50KS50ZXh0Q29udGVudCgpLCBUZXh0RGlyZWN0aW9uOjpMVFIgfSk7CisgICAg
ICAgIHVwZGF0ZVRpdGxlKHsgZG93bmNhc3Q8U1ZHVGl0bGVFbGVtZW50PigqbV90aXRsZUVsZW1l
bnQpLnRleHRDb250ZW50KCksIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIH0pOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggOWE1MTJlZmU3YzljMDFlZjgyMDEyY2I0M2Y5
YjYxMTU1ODk2N2EyYS4uOTZhZDZjMjljOTA0YjUwNzU5Njg2NjI5MDVjYzUxZWQ4OWMzMWIxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCkBAIC0xMjAxLDcgKzEyMDEsNyBAQCBzdGF0aWMgUG9z
aXRpb24gdXBzdHJlYW1JZ25vcmluZ0VkaXRpbmdCb3VuZGFyaWVzKFBvc2l0aW9uIHBvc2l0aW9u
KQogICAgIHJldHVybiBwb3NpdGlvbjsKIH0KIAotSW5saW5lUnVuQW5kT2Zmc2V0IFBvc2l0aW9u
OjppbmxpbmVSdW5BbmRPZmZzZXQoQWZmaW5pdHkgYWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJp
bWFyeURpcmVjdGlvbikgY29uc3QKK0lubGluZVJ1bkFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5l
UnVuQW5kT2Zmc2V0KEFmZmluaXR5IGFmZmluaXR5LCBQQUw6OlRleHREaXJlY3Rpb24gcHJpbWFy
eURpcmVjdGlvbikgY29uc3QKIHsKICAgICBhdXRvIGNhcmV0T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogCkBAIC0xMzc3LDEzICsxMzc3
LDEzIEBAIElubGluZVJ1bkFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KEFm
ZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uCiAgICAgcmV0dXJuIHsgcnVuLCBjYXJldE9m
ZnNldCB9OwogfQogCi1UZXh0RGlyZWN0aW9uIFBvc2l0aW9uOjpwcmltYXJ5RGlyZWN0aW9uKCkg
Y29uc3QKK1BBTDo6VGV4dERpcmVjdGlvbiBQb3NpdGlvbjo6cHJpbWFyeURpcmVjdGlvbigpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2FuY2hvck5vZGUgfHwgIW1fYW5jaG9yTm9kZS0+cmVuZGVyZXIo
KSkKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0dXJuIFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIGlmIChhdXRvKiBibG9ja0Zsb3cgPSBsaW5lYWdl
T2ZUeXBlPFJlbmRlckJsb2NrRmxvdz4oKm1fYW5jaG9yTm9kZS0+cmVuZGVyZXIoKSkuZmlyc3Qo
KSkKICAgICAgICAgcmV0dXJuIGJsb2NrRmxvdy0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKLSAgICBy
ZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246
OkxUUjsKIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgK
aW5kZXggOWM5OTRjMDk3OGM2YTQ4N2Q3ZTIyYmEwYmQ2ZTBhNDg4YzU0YmMxZS4uZGRjYmM3MTNl
MWM2MDhhMmU3MDhjNTVjNDEyNjBjNzg2MTc1MDE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKQEAg
LTE3MSw5ICsxNzEsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCByZW5kZXJzSW5EaWZmZXJlbnRQb3Np
dGlvbihjb25zdCBQb3NpdGlvbiYpIGNvbnN0OwogCiAgICAgSW5saW5lUnVuQW5kT2Zmc2V0IGlu
bGluZVJ1bkFuZE9mZnNldChBZmZpbml0eSkgY29uc3Q7Ci0gICAgSW5saW5lUnVuQW5kT2Zmc2V0
IGlubGluZVJ1bkFuZE9mZnNldChBZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0
aW9uKSBjb25zdDsKKyAgICBJbmxpbmVSdW5BbmRPZmZzZXQgaW5saW5lUnVuQW5kT2Zmc2V0KEFm
ZmluaXR5LCBQQUw6OlRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3Q7CiAKLSAg
ICBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24oKSBjb25zdDsKKyAgICBQQUw6OlRleHRE
aXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbigpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0aGUg
bnVtYmVyIG9mIHBvc2l0aW9ucyB0aGF0IGV4aXN0IGJldHdlZW4gdHdvIHBvc2l0aW9ucy4KICAg
ICBzdGF0aWMgdW5zaWduZWQgcG9zaXRpb25Db3VudEJldHdlZW5Qb3NpdGlvbnMoY29uc3QgUG9z
aXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5k
ZXggOTgwZGRlODUxZjEwNzIzZDc4ZjY2MTk4NDI3MzI0OGY3YTBmYTVjNC4uNDA5OTNiMzY4YzM2
ODQ4OGM3OTY0NDI1ZWUyM2Q0MmU2OWEwZDRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
Y3BwCkBAIC0zMjUsMTQgKzMyNSwxNCBAQCBFbGVtZW50KiBlbmNsb3NpbmdCbG9jayhOb2RlKiBu
b2RlLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkKICAgICByZXR1cm4gaXM8RWxl
bWVudD4oZW5jbG9zaW5nTm9kZSkgPyBkb3duY2FzdDxFbGVtZW50PihlbmNsb3NpbmdOb2RlKSA6
IG51bGxwdHI7CiB9CiAKLVRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayhj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCitQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgYXV0byBibG9j
ayA9IGVuY2xvc2luZ0Jsb2NrKHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSk7CiAgICAgaWYgKCFi
bG9jaykKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0dXJu
IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIGF1dG8gcmVuZGVyZXIgPSBibG9jay0+cmVu
ZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlv
bjo6TFRSOworICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgcmV0
dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmRpcmVjdGlvbigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZy5oCmluZGV4IDk2Y2VjOTdjZjdlM2IxNmNlMGYxYzA1YmU3NGQ3MjA4Y2NjNGRhYjkuLmNh
YzYxYjViNWM0NjRkYWQ5MDA2MmM4YzcwMGM1OGJiZjM0MzdlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZy5oCkBAIC0xMzMsNyArMTMzLDcgQEAgYm9vbCBpc0F0VW5zcGxpdHRhYmxlRWxlbWVu
dChjb25zdCBQb3NpdGlvbiYpOwogdW5zaWduZWQgbnVtRW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVz
KGNvbnN0IFBvc2l0aW9uJik7CiB2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwoUG9z
aXRpb24mLCBOb2RlJik7CiAKLVdFQkNPUkVfRVhQT1JUIFRleHREaXJlY3Rpb24gZGlyZWN0aW9u
T2ZFbmNsb3NpbmdCbG9jayhjb25zdCBQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQgUEFMOjpU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soY29uc3QgUG9zaXRpb24mKTsK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gVmlzaWJsZVBvc2l0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKaW5kZXggNDBjNzg0YzNlMzhiOGRhODkyMTJiYjg5ODAyZGNjOTJlNmI4M2Ew
Ni4uMzQzNDhjNzkxOTE5ZTFiODZhZDYyNWM5MTJmNjA3MjUwYmEzYmM1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcApAQCAtMTk2Myw5ICsxOTYzLDkgQEAgV3JpdGluZ0RpcmVjdGlvbiBF
ZGl0b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdAogICAg
IH0KIAogICAgIHN3aXRjaCAocmVuZGVyZXItPnN0eWxlKCkuZGlyZWN0aW9uKCkpIHsKLSAgICBj
YXNlIFRleHREaXJlY3Rpb246OkxUUjoKKyAgICBjYXNlIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
OgogICAgICAgICByZXR1cm4gV3JpdGluZ0RpcmVjdGlvbjo6TGVmdFRvUmlnaHQ7Ci0gICAgY2Fz
ZSBUZXh0RGlyZWN0aW9uOjpSVEw6CisgICAgY2FzZSBQQUw6OlRleHREaXJlY3Rpb246OlJUTDoK
ICAgICAgICAgcmV0dXJuIFdyaXRpbmdEaXJlY3Rpb246OlJpZ2h0VG9MZWZ0OwogICAgIH0KICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggZGIxNjJh
NGM1ODk4ZmUyZTk0Mjg5ZjBjOTY4NTAwMDM3NmEzZmIwYy4uYzYwNWJjYjVlZGVlMDdlNzJkODgz
Y2Y0YWYzMWJkZjVkODdiMmMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAKQEAgLTY1NCwxMiArNjU0LDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnRleHRX
YXNSZXBsYWNlZChDaGFyYWN0ZXJEYXRhKiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnCiAg
ICAgfQogfQogCi1UZXh0RGlyZWN0aW9uIEZyYW1lU2VsZWN0aW9uOjpkaXJlY3Rpb25PZkVuY2xv
c2luZ0Jsb2NrKCkKK1BBTDo6VGV4dERpcmVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6ZGlyZWN0aW9u
T2ZFbmNsb3NpbmdCbG9jaygpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OmRpcmVjdGlvbk9mRW5j
bG9zaW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCkpOwogfQogCi1UZXh0RGlyZWN0aW9uIEZy
YW1lU2VsZWN0aW9uOjpkaXJlY3Rpb25PZlNlbGVjdGlvbigpCitQQUw6OlRleHREaXJlY3Rpb24g
RnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mU2VsZWN0aW9uKCkKIHsKICAgICAvLyBHZXQgYm90
IFZpc2libGVQb3NpdGlvbnMgZmlyc3QgYmVjYXVzZSB2aXNpYmxlU3RhcnQoKSBhbmQgdmlzaWJs
ZUVuZCgpCiAgICAgLy8gY2FuIGNhdXNlIGxheW91dCwgd2hpY2ggaGFzIHRoZSBwb3RlbnRpYWwg
dG8gaW52YWxpZGF0ZSBsaW5lYm94ZXMuCkBAIC02OTMsNyArNjkzLDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6d2lsbEJlTW9kaWZpZWQoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVj
dGlvbiBkaXJlY3QKICAgICB9IGVsc2UgewogICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewog
ICAgICAgICBjYXNlIFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQ6Ci0gICAgICAgICAgICBpZiAo
ZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgICAg
ICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikK
ICAgICAgICAgICAgICAgICBiYXNlSXNTdGFydCA9IHRydWU7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSBmYWxzZTsKQEAgLTcwMiw3ICs3MDIsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjp3aWxsQmVNb2RpZmllZChFQWx0ZXJhdGlvbiBhbHRlciwgU2Vs
ZWN0aW9uRGlyZWN0aW9uIGRpcmVjdAogICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSB0cnVlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uRGlyZWN0aW9uOjpMZWZ0
OgotICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlv
bjo6TFRSKQorICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkgPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICAgICAgYmFzZUlzU3RhcnQgPSBmYWxzZTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBiYXNlSXNTdGFydCA9IHRydWU7CkBA
IC03NzYsMjMgKzc3NiwyMyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlm
eUV4dGVuZGluZ1JpZ2h0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eQogICAgIC8vIFRoZSBk
aWZmZXJlbmNlIGJldHdlZW4gbW9kaWZ5RXh0ZW5kaW5nUmlnaHQgYW5kIG1vZGlmeUV4dGVuZGlu
Z0ZvcndhcmQgaXM6CiAgICAgLy8gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCBhbHdheXMgZXh0ZW5k
cyBmb3J3YXJkIGxvZ2ljYWxseS4KICAgICAvLyBtb2RpZnlFeHRlbmRpbmdSaWdodCBiZWhhdmVz
IHRoZSBzYW1lIGFzIG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQgZXhjZXB0IGZvciBleHRlbmRpbmcg
Y2hhcmFjdGVyIG9yIHdvcmQsCi0gICAgLy8gaXQgZXh0ZW5kcyBmb3J3YXJkIGxvZ2ljYWxseSBp
ZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFRleHREaXJlY3Rpb246OkxUUiwKLSAgICAvLyBidXQg
aXQgZXh0ZW5kcyBiYWNrd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9jayBpcyBU
ZXh0RGlyZWN0aW9uOjpSVEwuCisgICAgLy8gaXQgZXh0ZW5kcyBmb3J3YXJkIGxvZ2ljYWxseSBp
ZiB0aGUgZW5jbG9zaW5nIGJsb2NrIGlzIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSLAorICAgIC8v
IGJ1dCBpdCBleHRlbmRzIGJhY2t3YXJkIGxvZ2ljYWxseSBpZiB0aGUgZW5jbG9zaW5nIGJsb2Nr
IGlzIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLgogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsK
ICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk6Ci0gICAgICAg
IGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKQor
ICAgICAgICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSKQogICAgICAgICAgICAgcG9zID0gcG9zLm5leHQoQ2Fubm90Q3Jvc3NFZGl0aW5n
Qm91bmRhcnkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBwb3MucHJldmlvdXMo
Q2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRl
eHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5OgotICAgICAgICBpZiAoZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKGRpcmVj
dGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAg
ICAgICAgIHBvcyA9IG5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9ybShwb3MpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihwb3MpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGluZUJvdW5kYXJ5OgotICAgICAg
ICBpZiAoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikK
KyAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUikKICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoZ3Jh
bnVsYXJpdHkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRp
bmdCYWNrd2FyZChncmFudWxhcml0eSk7CkBAIC04MTAsNyArODEwLDcgQEAgVmlzaWJsZVBvc2l0
aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBhZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCBkaXJlY3Rp
b25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKTsKKyAgICBhZGp1c3RQ
b3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkg
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpOwogICAgIHJldHVybiBwb3M7CiB9CiAKQEAgLTg1
Myw3ICs4NTMsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVu
ZGluZ0ZvcndhcmQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaQogICAgICAgICAgICAgcG9zID0g
ZW5kT2ZEb2N1bWVudChwb3MpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgYWRqdXN0UG9z
aXRpb25Gb3JVc2VyU2VsZWN0QWxsKHBvcywgZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09
IFRleHREaXJlY3Rpb246OkxUUik7CisgICAgYWRqdXN0UG9zaXRpb25Gb3JVc2VyU2VsZWN0QWxs
KHBvcywgZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSKTsKICAgICByZXR1cm4gcG9zOwogfQogCkBAIC04NjUsNyArODY1LDcgQEAgVmlzaWJsZVBv
c2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdSaWdodChUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGIKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgY2FzZSBUZXh0
R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgogICAgICAgICBpZiAoaXNSYW5nZSgp
KSB7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIpCisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKSA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRp
b24obV9zZWxlY3Rpb24uZW5kKCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlv
bi5zdGFydCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKQEAgLTk4OSwyMyArOTg5LDIzIEBA
IFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nTGVmdChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiAgICAgLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBt
b2RpZnlFeHRlbmRpbmdMZWZ0IGFuZCBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCBpczoKICAgICAv
LyBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZCBhbHdheXMgZXh0ZW5kcyBiYWNrd2FyZCBsb2dpY2Fs
bHkuCiAgICAgLy8gbW9kaWZ5RXh0ZW5kaW5nTGVmdCBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vZGlm
eUV4dGVuZGluZ0JhY2t3YXJkIGV4Y2VwdCBmb3IgZXh0ZW5kaW5nIGNoYXJhY3RlciBvciB3b3Jk
LAotICAgIC8vIGl0IGV4dGVuZHMgYmFja3dhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3Npbmcg
YmxvY2sgaXMgVGV4dERpcmVjdGlvbjo6TFRSLAotICAgIC8vIGJ1dCBpdCBleHRlbmRzIGZvcndh
cmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3NpbmcgYmxvY2sgaXMgVGV4dERpcmVjdGlvbjo6UlRM
LgorICAgIC8vIGl0IGV4dGVuZHMgYmFja3dhcmQgbG9naWNhbGx5IGlmIHRoZSBlbmNsb3Npbmcg
YmxvY2sgaXMgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsCisgICAgLy8gYnV0IGl0IGV4dGVuZHMg
Zm9yd2FyZCBsb2dpY2FsbHkgaWYgdGhlIGVuY2xvc2luZyBibG9jayBpcyBQQUw6OlRleHREaXJl
Y3Rpb246OlJUTC4KICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgY2FzZSBUZXh0R3Jh
bnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgotICAgICAgICBpZiAoZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgaWYgKGRpcmVj
dGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAg
ICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IHBvcy5uZXh0KENhbm5vdENyb3NzRWRpdGlu
Z0JvdW5kYXJ5KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6Oldv
cmRHcmFudWxhcml0eToKLSAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9
PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Js
b2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICBwb3MgPSBwcmV2
aW91c1dvcmRQb3NpdGlvbihwb3MpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBu
ZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZvcm0ocG9zKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBUZXh0R3JhbnVsYXJpdHk6OkxpbmVCb3VuZGFyeToKLSAgICAgICAgaWYgKGRpcmVjdGlvbk9m
RW5jbG9zaW5nQmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmIChkaXJl
Y3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAg
ICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0eSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoZ3JhbnVs
YXJpdHkpOwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0
aW9uOjptb2RpZnlFeHRlbmRpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBh
ZGp1c3RQb3NpdGlvbkZvclVzZXJTZWxlY3RBbGwocG9zLCAhKGRpcmVjdGlvbk9mRW5jbG9zaW5n
QmxvY2soKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpKTsKKyAgICBhZGp1c3RQb3NpdGlvbkZvclVz
ZXJTZWxlY3RBbGwocG9zLCAhKGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKSA9PSBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUikpOwogICAgIHJldHVybiBwb3M7CiB9CiAgICAgICAgCkBAIC0xMDcw
LDcgKzEwNzAsNyBAQCBWaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om1vZGlmeUV4dGVu
ZGluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGFkanVzdFBvc2l0aW9uRm9y
VXNlclNlbGVjdEFsbChwb3MsICEoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFRleHRE
aXJlY3Rpb246OkxUUikpOworICAgIGFkanVzdFBvc2l0aW9uRm9yVXNlclNlbGVjdEFsbChwb3Ms
ICEoZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
KSk7CiAgICAgcmV0dXJuIHBvczsKIH0KIApAQCAtMTA4Miw3ICsxMDgyLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdMZWZ0KFRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgYm8KICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgY2FzZSBUZXh0
R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5OgogICAgICAgICBpZiAoaXNSYW5nZSgp
KQotICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlv
bjo6TFRSKQorICAgICAgICAgICAgaWYgKGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkgPT0gUEFMOjpU
ZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9u
KG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlv
bi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CkBAIC0xMjA0LDcgKzEyMDQsNyBAQCBB
WFRleHRTdGF0ZUNoYW5nZUludGVudCBGcmFtZVNlbGVjdGlvbjo6dGV4dFNlbGVjdGlvbkludGVu
dChFQWx0ZXJhdGlvbiBhbHRlciwgUwogICAgIGJvb2wgZmxpcCA9IGZhbHNlOwogICAgIGlmIChh
bHRlciA9PSBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUpIHsKICAgICAgICAgaW50ZW50
LnR5cGUgPSBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rpb25Nb3ZlOwotICAgICAgICBmbGlw
ID0gaXNSYW5nZSgpICYmIGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6
UlRMOworICAgICAgICBmbGlwID0gaXNSYW5nZSgpICYmIGRpcmVjdGlvbk9mU2VsZWN0aW9uKCkg
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgfSBlbHNlCiAgICAgICAgIGludGVudC50
eXBlID0gQVhUZXh0U3RhdGVDaGFuZ2VUeXBlU2VsZWN0aW9uRXh0ZW5kOwogICAgIHN3aXRjaCAo
Z3JhbnVsYXJpdHkpIHsKQEAgLTE0MzMsOCArMTQzMyw4IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4CiAgICAgICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9kb2N1bWVudC0+ZWRpdG9yKCkuYmVo
YXZpb3IoKS5zaG91bGRBbHdheXNHcm93U2VsZWN0aW9uV2hlbkV4dGVuZGluZ1RvQm91bmRhcnko
KSB8fCBtX3NlbGVjdGlvbi5pc0NhcmV0KCkgfHwgIWlzQm91bmRhcnkoZ3JhbnVsYXJpdHkpKQog
ICAgICAgICAgICAgc2V0RXh0ZW50KHBvc2l0aW9uLCB1c2VyVHJpZ2dlcmVkKTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rp
b25PZkVuY2xvc2luZ0Jsb2NrKCk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFNlbGVj
dGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCB8fCAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIgJiYgZGlyZWN0aW9uID09IFNlbGVjdGlvbkRpcmVjdGlvbjo6UmlnaHQpIHx8ICh0ZXh0
RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBkaXJlY3Rpb24gPT0gU2VsZWN0aW9u
RGlyZWN0aW9uOjpMZWZ0KSkKKyAgICAgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGly
ZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpOworICAgICAgICAgICAgaWYgKGRp
cmVjdGlvbiA9PSBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQgfHwgKHRleHREaXJlY3Rpb24g
PT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgJiYgZGlyZWN0aW9uID09IFNlbGVjdGlvbkRpcmVj
dGlvbjo6UmlnaHQpIHx8ICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRM
ICYmIGRpcmVjdGlvbiA9PSBTZWxlY3Rpb25EaXJlY3Rpb246OkxlZnQpKQogICAgICAgICAgICAg
ICAgIHNldEVuZChwb3NpdGlvbiwgdXNlclRyaWdnZXJlZCk7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgc2V0U3RhcnQocG9zaXRpb24sIHVzZXJUcmlnZ2VyZWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGVkYWNiNjNjYmViZDNhM2U5M2Qz
ZDBmMWY5NzM5ZWFiYWY3Zjc2NTIuLjAxZmNhMjlkNWY3OTM5Zjk2NDYzOWIwZjJhNGM0NThjNDlm
ZjRhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTI3MSw4
ICsyNzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5n
QXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0aW9uU2V0PFNldFNlbGVjdGlv
bk9wdGlvbj4sIEN1cnNvckFsaWduT25TY3JvbGwsIFRleHRHcmFudWxhcml0eSk7CiAKICAgICB2
b2lkIHJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9kZSYsIGJvb2wgYmFzZVJlbW92ZWQsIGJv
b2wgZXh0ZW50UmVtb3ZlZCwgYm9vbCBzdGFydFJlbW92ZWQsIGJvb2wgZW5kUmVtb3ZlZCk7Ci0g
ICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7Ci0gICAgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb25PZlNlbGVjdGlvbigpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBk
aXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbk9mU2VsZWN0aW9uKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQbGF0
Zm9ybShib29sIGlzR2V0U3RhcnQpIGNvbnN0OwogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydEZv
clBsYXRmb3JtKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAKaW5kZXggMmMzZTA3OGEzMmEyZmVmMjFkYTRmZWNmOWRkYWRiNzE0MmFlZjMzMy4uYWI5
Njk1Y2Q0MzdmY2QzYjEzYmE3MTI4MjhiNjdmNjc2OTEzNDUyOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcApAQCAtMTIwLDE0ICsxMjAsMTQgQEAgUG9zaXRp
b24gVmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0
CiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0
YXJ0ID0gcC5kb3duc3RyZWFtKCk7Ci0gICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9u
ID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHByaW1hcnlE
aXJlY3Rpb24gPSBwLnByaW1hcnlEaXJlY3Rpb24oKTsKIAogICAgIElubGluZUl0ZXJhdG9yOjpM
aW5lTG9naWNhbE9yZGVyQ2FjaGUgb3JkZXJDYWNoZTsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgIGF1dG8gW3J1biwgb2Zmc2V0XSA9IHAuaW5saW5lUnVuQW5kT2Zmc2V0KG1fYWZmaW5p
dHksIHByaW1hcnlEaXJlY3Rpb24pOwogICAgICAgICBpZiAoIXJ1bikKLSAgICAgICAgICAgIHJl
dHVybiBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlz
dWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CisgICAgICAgICAgICByZXR1cm4gcHJpbWFy
eURpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IHByZXZpb3VzVmlzdWFsbHlE
aXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENh
bmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAKICAgICAgICAgYXV0byogcmVuZGVyZXIgPSAmcnVu
LT5yZW5kZXJlcigpOwogCkBAIC0xMzgsNyArMTM4LDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0
aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgICAgICBp
ZiAoIXJlbmRlcmVyLT5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICBydW4udHJhdmVyc2VQcmV2
aW91c09uTGluZSgpOwogICAgICAgICAgICAgICAgIGlmICghcnVuKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBwcmV2
aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogbmV4dFZpc3Vh
bGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IHBy
ZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0Vmlz
dWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAg
cmVuZGVyZXIgPSAmcnVuLT5yZW5kZXJlcigpOwogICAgICAgICAgICAgICAgIG9mZnNldCA9IHJ1
bi0+cmlnaHRtb3N0Q2FyZXRPZmZzZXQoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTE1Nyw3ICsxNTcsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgICAgICAvLyBPdmVyc2hvdCB0byB0
aGUgbGVmdC4KICAgICAgICAgICAgICAgICBhdXRvIHByZXZpb3VzUnVuID0gcnVuLT5wcmV2aW91
c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91
c1J1bikgewotICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBwb3NpdGlvbk9uTGVmdCA9IHBy
aW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2Fu
ZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcG9z
aXRpb25PbkxlZnQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
ID8gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5l
eHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKICAgICAgICAgICAg
ICAgICAgICAgYXV0byBydW5PbkxlZnQgPSBwb3NpdGlvbk9uTGVmdC5pbmxpbmVSdW5BbmRPZmZz
ZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbikucnVuOwogICAgICAgICAgICAgICAgICAg
ICBpZiAocnVuT25MZWZ0ICYmIHJ1bk9uTGVmdC0+bGluZSgpID09IHJ1bi0+bGluZSgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CkBAIC0xNzYsMTMgKzE3Niwx
MyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlk
YXRlKCkgY29uc3QKIAogICAgICAgICAgICAgaWYgKHJ1bi0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFy
eURpcmVjdGlvbikgewogICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNSdW4pIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsU3RhcnQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRl
eHREaXJlY3Rpb246OkxUUgorICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxTdGFydCA9
IHByaW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIKICAgICAgICAgICAg
ICAgICAgICAgICAgID8gSW5saW5lSXRlcmF0b3I6OmZpcnN0TGVhZk9uTGluZUluTG9naWNhbE9y
ZGVyV2l0aE5vZGUocnVuLT5saW5lKCksIG9yZGVyQ2FjaGUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICA6IElubGluZUl0ZXJhdG9yOjpsYXN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5v
ZGUocnVuLT5saW5lKCksIG9yZGVyQ2FjaGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAobG9n
aWNhbFN0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBydW4gPSBsb2dpY2FsU3RhcnQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHRE
aXJlY3Rpb246OkxUUiA/IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCkgOiBydW4tPm1heGltdW1D
YXJldE9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURp
cmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IHJ1bi0+bWluaW11bUNhcmV0T2Zm
c2V0KCkgOiBydW4tPm1heGltdW1DYXJldE9mZnNldCgpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTI0Myw3
ICsyNDMsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBydW4tPmJpZGlM
ZXZlbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZy
dW4tPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlv
biA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBydW4tPm1pbmltdW1DYXJldE9mZnNldCgpIDogcnVu
LT5tYXhpbXVtQ2FyZXRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5
RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gcnVuLT5taW5pbXVtQ2FyZXRP
ZmZzZXQoKSA6IHJ1bi0+bWF4aW11bUNhcmV0T2Zmc2V0KCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjg2LDE0ICsyODYsMTQgQEAgUG9zaXRpb24g
VmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAog
ICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFy
dCA9IHAuZG93bnN0cmVhbSgpOwotICAgIFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiA9
IHAucHJpbWFyeURpcmVjdGlvbigpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBwcmltYXJ5RGly
ZWN0aW9uID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7CiAKICAgICBJbmxpbmVJdGVyYXRvcjo6TGlu
ZUxvZ2ljYWxPcmRlckNhY2hlIG9yZGVyQ2FjaGU7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAg
ICAgICBhdXRvIFtydW4sIG9mZnNldF0gPSBwLmlubGluZVJ1bkFuZE9mZnNldChtX2FmZmluaXR5
LCBwcmltYXJ5RGlyZWN0aW9uKTsKICAgICAgICAgaWYgKCFydW4pCi0gICAgICAgICAgICByZXR1
cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlE
aXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOworICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlE
aXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5j
dENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUobV9kZWVwUG9zaXRpb24pOwogCiAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gJnJ1bi0+
cmVuZGVyZXIoKTsKIApAQCAtMzA0LDcgKzMwNCw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlv
bjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgIGlm
ICghcmVuZGVyZXItPm5vZGUoKSkgewogICAgICAgICAgICAgICAgIHJ1bi50cmF2ZXJzZU5leHRP
bkxpbmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXJ1bikKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gbmV4dFZpc3Vh
bGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogcHJldmlvdXNWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBuZXh0Vmlz
dWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91c1Zpc3VhbGx5
RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIHJlbmRl
cmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBydW4tPmxl
ZnRtb3N0Q2FyZXRPZmZzZXQoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTMyMyw3
ICszMjMsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0aW5j
dENhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgICAgICAgICAgLy8gT3ZlcnNob3QgdG8gdGhlIHJp
Z2h0LgogICAgICAgICAgICAgICAgIGF1dG8gbmV4dFJ1biA9IHJ1bi0+bmV4dE9uTGluZUlnbm9y
aW5nTGluZUJyZWFrKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFuZXh0UnVuKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uT25SaWdodCA9IHByaW1hcnlEaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSID8gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9k
ZWVwUG9zaXRpb24pIDogcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBv
c2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb25PblJpZ2h0ID0g
cHJpbWFyeURpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IG5leHRWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8g
cnVuT25SaWdodCA9IHBvc2l0aW9uT25SaWdodC5pbmxpbmVSdW5BbmRPZmZzZXQobV9hZmZpbml0
eSwgcHJpbWFyeURpcmVjdGlvbikucnVuOwogICAgICAgICAgICAgICAgICAgICBpZiAocnVuT25S
aWdodCAmJiBydW5PblJpZ2h0LT5saW5lKCkgPT0gcnVuLT5saW5lKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKQEAgLTM0MiwxNCArMzQyLDE0IEBAIFBvc2l0
aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29u
c3QKIAogICAgICAgICAgICAgaWYgKHJ1bi0+ZGlyZWN0aW9uKCkgPT0gcHJpbWFyeURpcmVjdGlv
bikgewogICAgICAgICAgICAgICAgIGlmICghbmV4dFJ1bikgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvIGxvZ2ljYWxFbmQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxU
UgorICAgICAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWxFbmQgPSBwcmltYXJ5RGlyZWN0aW9u
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSCiAgICAgICAgICAgICAgICAgICAgICAgICA/IElu
bGluZUl0ZXJhdG9yOjpsYXN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUocnVuLT5s
aW5lKCksIG9yZGVyQ2FjaGUpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IElubGluZUl0ZXJh
dG9yOjpmaXJzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcldpdGhOb2RlKHJ1bi0+bGluZSgpLCBv
cmRlckNhY2hlKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbEVuZCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgcnVuID0gbG9naWNhbEVuZDsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbmRlcmVyID0gJnJ1bi0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9mZnNldCA9IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcnVu
LT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWluaW11bUNhcmV0T2Zmc2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSID8gcnVuLT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWluaW11
bUNhcmV0T2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDEzLDcgKzQxMyw3IEBAIFBvc2l0aW9u
IFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QK
ICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBydW4tPmJpZGlMZXZlbCgpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICByZW5kZXJlciA9ICZydW4tPnJlbmRlcmVyKCk7Ci0g
ICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIgPyBydW4tPm1heGltdW1DYXJldE9mZnNldCgpIDogcnVuLT5taW5pbXVtQ2FyZXRPZmZz
ZXQoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSID8gcnVuLT5tYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IHJ1bi0+bWlu
aW11bUNhcmV0T2Zmc2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtNjM2LDcgKzYzNiw3IEBAIElubGluZVJ1bkFuZE9mZnNldCBWaXNpYmxlUG9z
aXRpb246OmlubGluZVJ1bkFuZE9mZnNldCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVlcFBvc2l0
aW9uLmlubGluZVJ1bkFuZE9mZnNldChtX2FmZmluaXR5KTsKIH0KIAotSW5saW5lUnVuQW5kT2Zm
c2V0IFZpc2libGVQb3NpdGlvbjo6aW5saW5lUnVuQW5kT2Zmc2V0KFRleHREaXJlY3Rpb24gcHJp
bWFyeURpcmVjdGlvbikgY29uc3QKK0lubGluZVJ1bkFuZE9mZnNldCBWaXNpYmxlUG9zaXRpb246
OmlubGluZVJ1bkFuZE9mZnNldChQQUw6OlRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9kZWVwUG9zaXRpb24uaW5saW5lUnVuQW5kT2Zmc2V0KG1f
YWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVBvc2l0aW9uLmgKaW5kZXggYTkyY2E4MWJjZWZlM2U0NzZjNGM1NDY2MGQ5NzIwODRlZWVj
ZmFjNi4uY2I5ODQzMDNiZGQxNWE1MWI0ZGVkOTM1YzM5Zjc0YjM4NTM4YTY1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCkBAIC02OCw3ICs2OCw3IEBAIHB1Ymxp
YzoKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9k
ZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkgPyBtX2RlZXBQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgp
LT5yb290RWRpdGFibGVFbGVtZW50KCkgOiAwOyB9CiAKICAgICBJbmxpbmVSdW5BbmRPZmZzZXQg
aW5saW5lUnVuQW5kT2Zmc2V0KCkgY29uc3Q7Ci0gICAgSW5saW5lUnVuQW5kT2Zmc2V0IGlubGlu
ZVJ1bkFuZE9mZnNldChUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0OworICAg
IElubGluZVJ1bkFuZE9mZnNldCBpbmxpbmVSdW5BbmRPZmZzZXQoUEFMOjpUZXh0RGlyZWN0aW9u
IHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0OwogCiAgICAgc3RydWN0IExvY2FsQ2FyZXRSZWN0IHsK
ICAgICAgICAgTGF5b3V0UmVjdCByZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5p
dHMuY3BwCmluZGV4IGM2ODJlODI4OTZhMDVkMmE3ODQzMzg3NzNjYjMwZGNmZDUxYzI0NTAuLjlj
MzRjOTIxNDEwMmNjZjM1ZTY1MGU4MGY0YmZhNDA2ODUzZTY3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTMxNyw3ICszMTcsNyBAQCBzdGF0aWMgVmlzaWJs
ZVBvc2l0aW9uIHZpc3VhbFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2li
bGVQb3NpdGlvbgogCiAgICAgdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG9jdW1l
bnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBUZXh0
RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNp
YmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGJs
b2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBw
cmV2aW91c2x5VmlzaXRlZFJ1bjsKICAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudCA9IHZpc2li
bGVQb3NpdGlvbjsKICAgICBzdGQ6Om9wdGlvbmFsPFZpc2libGVQb3NpdGlvbj4gcHJldmlvdXNQ
b3NpdGlvbjsKQEAgLTM2Niw3ICszNjYsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3Vh
bFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbgogCiAg
ICAgICAgIGJvb2wgaXNXb3JkQnJlYWs7CiAgICAgICAgIGJvb2wgYm94SGFzU2FtZURpcmVjdGlv
bmFsaXR5QXNCbG9jayA9IHJ1bi0+ZGlyZWN0aW9uKCkgPT0gYmxvY2tEaXJlY3Rpb247Ci0gICAg
ICAgIGJvb2wgbW92aW5nQmFja3dhcmQgPSAoZGlyZWN0aW9uID09IE1vdmVMZWZ0ICYmIHJ1bi0+
ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB8fCAoZGlyZWN0aW9uID09IE1vdmVS
aWdodCAmJiBydW4tPmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCk7CisgICAgICAg
IGJvb2wgbW92aW5nQmFja3dhcmQgPSAoZGlyZWN0aW9uID09IE1vdmVMZWZ0ICYmIHJ1bi0+ZGly
ZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIHx8IChkaXJlY3Rpb24gPT0gTW92
ZVJpZ2h0ICYmIHJ1bi0+ZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpOwog
ICAgICAgICBpZiAoKHNraXBzU3BhY2VXaGVuTW92aW5nUmlnaHQgJiYgYm94SGFzU2FtZURpcmVj
dGlvbmFsaXR5QXNCbG9jaykKICAgICAgICAgICAgIHx8ICghc2tpcHNTcGFjZVdoZW5Nb3ZpbmdS
aWdodCAmJiBtb3ZpbmdCYWNrd2FyZCkpIHsKICAgICAgICAgICAgIGJvb2wgbG9naWNhbFN0YXJ0
SW5SZW5kZXJlciA9IG9mZnNldEluUnVuID09IHRleHRSdW4tPnN0YXJ0KCkgJiYgcHJldmlvdXNS
dW5JbkRpZmZlcmVudExpbmU7CkBAIC0zOTYsOCArMzk2LDggQEAgVmlzaWJsZVBvc2l0aW9uIGxl
ZnRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGJv
b2wgc2sKICAgICAKICAgICAvLyBGSVhNRTogSG93IHNob3VsZCB3ZSBoYW5kbGUgYSBub24tZWRp
dGFibGUgcG9zaXRpb24/CiAgICAgaWYgKGxlZnRXb3JkQnJlYWsuaXNOdWxsKCkgJiYgaXNFZGl0
YWJsZVBvc2l0aW9uKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKSkgewotICAgICAg
ICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9j
ayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIGxlZnRXb3JkQnJl
YWsgPSBibG9ja0RpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBzdGFydE9mRWRpdGFi
bGVDb250ZW50KHZpc2libGVQb3NpdGlvbikgOiBlbmRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxl
UG9zaXRpb24pOworICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gYmxvY2tEaXJlY3Rpb24gPSBk
aXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
KTsKKyAgICAgICAgbGVmdFdvcmRCcmVhayA9IGJsb2NrRGlyZWN0aW9uID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSID8gc3RhcnRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxlUG9zaXRpb24pIDog
ZW5kT2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBvc2l0aW9uKTsKICAgICB9CiAgICAgcmV0dXJu
IGxlZnRXb3JkQnJlYWs7CiB9CkBAIC00MDksOCArNDA5LDggQEAgVmlzaWJsZVBvc2l0aW9uIHJp
Z2h0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBi
b29sIHMKIAogICAgIC8vIEZJWE1FOiBIb3cgc2hvdWxkIHdlIGhhbmRsZSBhIG5vbi1lZGl0YWJs
ZSBwb3NpdGlvbj8KICAgICBpZiAocmlnaHRXb3JkQnJlYWsuaXNOdWxsKCkgJiYgaXNFZGl0YWJs
ZVBvc2l0aW9uKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKSkgewotICAgICAgICBU
ZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2
aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIHJpZ2h0V29yZEJyZWFr
ID0gYmxvY2tEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gZW5kT2ZFZGl0YWJsZUNv
bnRlbnQodmlzaWJsZVBvc2l0aW9uKSA6IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQodmlzaWJsZVBv
c2l0aW9uKTsKKyAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGly
ZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7
CisgICAgICAgIHJpZ2h0V29yZEJyZWFrID0gYmxvY2tEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFIgPyBlbmRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxlUG9zaXRpb24pIDogc3Rh
cnRPZkVkaXRhYmxlQ29udGVudCh2aXNpYmxlUG9zaXRpb24pOwogICAgIH0KICAgICByZXR1cm4g
cmlnaHRXb3JkQnJlYWs7CiB9CkBAIC0xNDY3LDE0ICsxNDY3LDE0IEBAIGJvb2wgaXNFbmRPZkVk
aXRhYmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwKQogICAg
IHJldHVybiBwLmlzTm90TnVsbCgpICYmIHAubmV4dCgpLmlzTnVsbCgpOwogfQogCi1WaXNpYmxl
UG9zaXRpb24gbGVmdEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSkKK1Zpc2libGVQb3Np
dGlvbiBsZWZ0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBQQUw6OlRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpCiB7Ci0gICAgcmV0
dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBsb2dpY2FsU3RhcnRPZkxpbmUo
YywgcmVhY2hlZEJvdW5kYXJ5KSA6IGxvZ2ljYWxFbmRPZkxpbmUoYywgcmVhY2hlZEJvdW5kYXJ5
KTsKKyAgICByZXR1cm4gZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gbG9n
aWNhbFN0YXJ0T2ZMaW5lKGMsIHJlYWNoZWRCb3VuZGFyeSkgOiBsb2dpY2FsRW5kT2ZMaW5lKGMs
IHJlYWNoZWRCb3VuZGFyeSk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiByaWdodEJvdW5kYXJ5T2ZM
aW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJv
b2wqIHJlYWNoZWRCb3VuZGFyeSkKK1Zpc2libGVQb3NpdGlvbiByaWdodEJvdW5kYXJ5T2ZMaW5l
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwg
Ym9vbCogcmVhY2hlZEJvdW5kYXJ5KQogewotICAgIHJldHVybiBkaXJlY3Rpb24gPT0gVGV4dERp
cmVjdGlvbjo6TFRSID8gbG9naWNhbEVuZE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpIDogbG9n
aWNhbFN0YXJ0T2ZMaW5lKGMsIHJlYWNoZWRCb3VuZGFyeSk7CisgICAgcmV0dXJuIGRpcmVjdGlv
biA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IGxvZ2ljYWxFbmRPZkxpbmUoYywgcmVhY2hl
ZEJvdW5kYXJ5KSA6IGxvZ2ljYWxTdGFydE9mTGluZShjLCByZWFjaGVkQm91bmRhcnkpOwogfQog
CiBzdGF0aWMgYm9vbCBkaXJlY3Rpb25Jc0Rvd25zdHJlYW0oU2VsZWN0aW9uRGlyZWN0aW9uIGRp
cmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRz
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCmluZGV4IGE2ZGU0MjE1
MjZkNDZlMjgyZmY0MDc1NGY3MDkzODZiZDkzMzEwZjMuLjJmOTgwYTI1YjViYjBiNTlhYzBhZWEy
M2Y3MWU5ZjQ2OWVlMGY3YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVVuaXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaApA
QCAtNjMsOCArNjMsOCBAQCBXRUJDT1JFX0VYUE9SVCBib29sIGlzRW5kT2ZMaW5lKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpOwogVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxTdGFydE9mTGluZShjb25z
dCBWaXNpYmxlUG9zaXRpb24mLCBib29sKiByZWFjaGVkQm91bmRhcnkgPSBudWxscHRyKTsKIFZp
c2libGVQb3NpdGlvbiBsb2dpY2FsRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJv
b2wqIHJlYWNoZWRCb3VuZGFyeSA9IG51bGxwdHIpOwogYm9vbCBpc0xvZ2ljYWxFbmRPZkxpbmUo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1WaXNpYmxlUG9zaXRpb24gbGVmdEJvdW5kYXJ5T2ZM
aW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHREaXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRC
b3VuZGFyeSk7Ci1WaXNpYmxlUG9zaXRpb24gcmlnaHRCb3VuZGFyeU9mTGluZShjb25zdCBWaXNp
YmxlUG9zaXRpb24mLCBUZXh0RGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpOworVmlz
aWJsZVBvc2l0aW9uIGxlZnRCb3VuZGFyeU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBQ
QUw6OlRleHREaXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSk7CitWaXNpYmxlUG9zaXRp
b24gcmlnaHRCb3VuZGFyeU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBQQUw6OlRleHRE
aXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSk7CiAKIC8vIHBhcmFncmFwaHMgKHBlcmhh
cHMgYSBtaXNub21lciwgY2FuIGJlIGRpdmlkZWQgYnkgbGluZSBicmVhayBlbGVtZW50cykKIFdF
QkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRp
dGluZ0JvdW5kYXJ5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVB
bmRUaW1lSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1l
SW5wdXRUeXBlLmNwcAppbmRleCA2YzM4MWFhNzAxYzk0MDcyNjYxY2UwZTE1MmYyNTkxYjU0NzE0
OTkxLi5jNTIzNjI4ZTI4ZTM5MzZiZWUyZTJiMDE3Yzg4NzllNTY0MmIwNzFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCkBAIC01NDQs
NyArNTQ0LDcgQEAgYm9vbCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OnNldHVwRGF0ZVRpbWVD
aG9vc2VyUGFyYW1ldGVycyhEYXRlVGltZUNob29zZXJQYXIKICAgICBwYXJhbWV0ZXJzLmN1cnJl
bnRWYWx1ZSA9IGVsZW1lbnQudmFsdWUoKTsKIAogICAgIGF1dG8qIGNvbXB1dGVkU3R5bGUgPSBl
bGVtZW50LmNvbXB1dGVkU3R5bGUoKTsKLSAgICBwYXJhbWV0ZXJzLmlzQW5jaG9yRWxlbWVudFJU
TCA9IGNvbXB1dGVkU3R5bGUtPmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAg
ICBwYXJhbWV0ZXJzLmlzQW5jaG9yRWxlbWVudFJUTCA9IGNvbXB1dGVkU3R5bGUtPmRpcmVjdGlv
bigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOwogICAgIHBhcmFtZXRlcnMudXNlRGFya0Fw
cGVhcmFuY2UgPSBkb2N1bWVudC51c2VEYXJrQXBwZWFyYW5jZShjb21wdXRlZFN0eWxlKTsKIAog
ICAgIGF1dG8gZGF0ZSA9IHBhcnNlVG9EYXRlQ29tcG9uZW50cyhlbGVtZW50LnZhbHVlKCkpLnZh
bHVlX29yKERhdGVDb21wb25lbnRzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApp
bmRleCAyYWRmZjhmZTg1ZDkzNjc4MDI5NWMyMzk1Y2UzNTE5ZTM4MTg0NDFjLi42YWFlNjdmMjA4
NmVhYTgzZTVhZjIxMjZhNmZkNzYzMjg4NDJhNzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcApAQCAtNzc0LDE4ICs3NzQsMTggQEAgYm9vbCBIVE1MRWxlbWVudDo6aGFzRGlyZWN0
aW9uQXV0bygpIGNvbnN0CiAgICAgcmV0dXJuIChoYXNUYWdOYW1lKGJkaVRhZykgJiYgZGlyZWN0
aW9uLmlzTnVsbCgpKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShkaXJlY3Rpb24s
ICJhdXRvIik7CiB9CiAKLVRleHREaXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5
SWZoYXNEaXJBdXRvQXR0cmlidXRlKGJvb2wmIGlzQXV0bykgY29uc3QKK1BBTDo6VGV4dERpcmVj
dGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoYm9v
bCYgaXNBdXRvKSBjb25zdAogewogICAgIGlmICghKHNlbGZPckFuY2VzdG9ySGFzRGlyQXV0b0F0
dHJpYnV0ZSgpICYmIGhhc0RpcmVjdGlvbkF1dG8oKSkpIHsKICAgICAgICAgaXNBdXRvID0gZmFs
c2U7Ci0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIHJldHVybiBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICB9CiAKICAgICBpc0F1dG8gPSB0cnVlOwogICAg
IHJldHVybiBkaXJlY3Rpb25hbGl0eSgpOwogfQogCi1UZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50
OjpkaXJlY3Rpb25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkgY29u
c3QKK1BBTDo6VGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkoTm9kZSoq
IHN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4dEZp
ZWxkKCkpIHsKICAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRFbGVtZW50
ID0gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8SFRNTEVs
ZW1lbnQmPigqdGhpcykpOwpAQCAtNzkzLDcgKzc5Myw3IEBAIFRleHREaXJlY3Rpb24gSFRNTEVs
ZW1lbnQ6OmRpcmVjdGlvbmFsaXR5KE5vZGUqKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2Rl
KSBjCiAgICAgICAgIFVDaGFyRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0ZXh0RWxlbWVudC52
YWx1ZSgpLmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCZoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSk7
CiAgICAgICAgIGlmIChzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKQogICAgICAgICAgICAg
KnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUgPSBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA/
ICZ0ZXh0RWxlbWVudCA6IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiAodGV4dERpcmVjdGlvbiA9
PSBVX0xFRlRfVE9fUklHSFQpID8gVGV4dERpcmVjdGlvbjo6TFRSIDogVGV4dERpcmVjdGlvbjo6
UlRMOworICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSA/
IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAg
fQogCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBmaXJzdENoaWxkKCk7CkBAIC04MjAsMTQgKzgy
MCwxNCBAQCBUZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eShOb2RlKiog
c3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkgYwogICAgICAgICAgICAgaWYgKGhhc1N0cm9u
Z0RpcmVjdGlvbmFsaXR5KSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0cm9uZ0RpcmVjdGlvbmFs
aXR5VGV4dE5vZGUpCiAgICAgICAgICAgICAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25hbGl0eVRl
eHROb2RlID0gbm9kZS5nZXQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rp
b24gPT0gVV9MRUZUX1RPX1JJR0hUKSA/IFRleHREaXJlY3Rpb246OkxUUiA6IFRleHREaXJlY3Rp
b246OlJUTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24gPT0gVV9MRUZU
X1RPX1JJR0hUKSA/IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIDogUEFMOjpUZXh0RGlyZWN0aW9u
OjpSVEw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKm5vZGUsIHRoaXMpOwogICAgIH0KICAgICBpZiAoc3Ryb25nRGlyZWN0aW9u
YWxpdHlUZXh0Tm9kZSkKICAgICAgICAgKnN0cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUgPSBu
dWxscHRyOwotICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgcmV0dXJuIFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSOwogfQogCiB2b2lkIEhUTUxFbGVtZW50OjpkaXJBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQpAQCAtODQ1LDcgKzg0NSw3IEBAIHZvaWQg
SFRNTEVsZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmli
dXRlQ2hhbmdlZChFbGVtZW50CiB7CiAgICAgQVNTRVJUKHNlbGZPckFuY2VzdG9ySGFzRGlyQXV0
b0F0dHJpYnV0ZSgpKTsKICAgICBOb2RlKiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlOwot
ICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbmFsaXR5KCZzdHJvbmdE
aXJlY3Rpb25hbGl0eVRleHROb2RlKTsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVj
dGlvbiA9IGRpcmVjdGlvbmFsaXR5KCZzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKTsKICAg
ICBzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vyc2l2ZWx5KGNoaWxkLCBmYWxzZSk7CiAgICAgaWYgKCFy
ZW5kZXJlcigpIHx8IHJlbmRlcmVyKCktPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gdGV4dERpcmVj
dGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtODYwLDcgKzg2MCw3IEBAIHZvaWQgSFRNTEVsZW1l
bnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmlidXRlQ2hhbmdl
ZChFbGVtZW50CiB2b2lkIEhUTUxFbGVtZW50OjpjYWxjdWxhdGVBbmRBZGp1c3REaXJlY3Rpb25h
bGl0eSgpCiB7CiAgICAgTm9kZSogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZTsKLSAgICBU
ZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBkaXJlY3Rpb25hbGl0eSgmc3Ryb25nRGlyZWN0
aW9uYWxpdHlUZXh0Tm9kZSk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24g
PSBkaXJlY3Rpb25hbGl0eSgmc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSk7CiAgICAgc2V0
SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseSh0aGlzLCB0cnVlLCBzdHJvbmdEaXJlY3Rpb25hbGl0
eVRleHROb2RlKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLmRp
cmVjdGlvbigpICE9IHRleHREaXJlY3Rpb24pCiAgICAgICAgIGludmFsaWRhdGVTdHlsZUZvclN1
YnRyZWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAppbmRleCAyYjNhN2ViZjAxODRhNWM3
NmZhMzViOTZkZThhY2UwNDU3ZmM4Yjc4Li5kNzc4ZmJlNTdhMDZjMmY0ODgzYzU5MjRlYzZjOTZh
MGFhYzMwZGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCkBAIC04OCw3ICs4OCw3IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldERpcihjb25zdCBBdG9tU3RyaW5n
Jik7CiAKICAgICBib29sIGhhc0RpcmVjdGlvbkF1dG8oKSBjb25zdDsKLSAgICBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGJvb2wmIGlzQXV0bykgY29u
c3Q7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0
cmlidXRlKGJvb2wmIGlzQXV0bykgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Q29u
dHJvbElubmVyVGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc1NlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpAQCAtMTcyLDcgKzE3Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXJBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IEF0b21TdHJpbmcmKTsKICAgICB2b2lkIGFkanVzdERpcmVjdGlv
bmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkQXR0cmlidXRlQ2hhbmdlZChFbGVtZW50KiBjaGlsZCk7
CiAgICAgdm9pZCBhZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZHJlbkNoYW5n
ZWQoRWxlbWVudCogYmVmb3JlQ2hhbmdlLCBDaGlsZENoYW5nZTo6VHlwZSk7Ci0gICAgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb25hbGl0eShOb2RlKiogc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9k
ZT0gMCkgY29uc3Q7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbmFsaXR5KE5vZGUq
KiBzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlPSAwKSBjb25zdDsKIAogICAgIGVudW0gY2xh
c3MgQWxsb3dQZXJjZW50YWdlIDogYm9vbCB7IE5vLCBZZXMgfTsKICAgICBlbnVtIGNsYXNzIFVz
ZUNTU1BYQXNVbml0VHlwZSA6IGJvb2wgeyBObywgWWVzIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDE3YzFmM2UwNWM5
OWJkNmFkNGFkY2Y2NzhkODNmY2FiNTczZjU4YmQuLjFlODhhMGQyMWU1YTkxNTJmNDEyMjg2MzYz
YjBiNjZlOTNhOTAxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC03NjgsMTggKzc2OCwxOCBAQCBTdHJpbmcgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpcmVjdGlvbkZvckZvcm1EYXRhKCkgY29uc3QKICAgICAg
ICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGluZWFnZU9mVHlwZTxIVE1MRWxlbWVudD4oKnRoaXMp
KSB7CiAgICAgICAgICAgICBhdXRvJiB2YWx1ZSA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihkaXJBdHRyKTsKICAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgInJ0bCIpKQotICAgICAgICAgICAgICAgIHJldHVybiBUZXh0
RGlyZWN0aW9uOjpSVEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIFBBTDo6VGV4dERpcmVjdGlv
bjo6UlRMOwogICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLCAibHRyIikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsK
KyAgICAgICAgICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgICAg
ICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJhdXRvIikpIHsK
ICAgICAgICAgICAgICAgICBib29sIGlzQXV0bzsKICAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bWVudC5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uOjpMVFI7Cisg
ICAgICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICB9KCk7CiAKLSAgICBy
ZXR1cm4gZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/ICJsdHIiX3MgOiAicnRsIl9z
OworICAgIHJldHVybiBkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyAibHRy
Il9zIDogInJ0bCJfczsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNldE1heExlbmd0aChpbnQgbWF4TGVuZ3RoKQpAQCAtODM3LDcgKzgzNyw3IEBA
IHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmFkanVzdElubmVyVGV4dFN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
Ci0gICAgICAgIHRleHRCbG9ja1N0eWxlLnNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uOjpMVFIp
OworICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXREaXJlY3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFIpOwogICAgIH0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGl0bGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxl
bWVudC5jcHAKaW5kZXggNGU5ODUxNzBjMjgzNmU2MmYyNDJiZGEzODQwMTQ4NWFjMDc5ZDE0Ny4u
NTUyOTIyNzdkOTVlYmYzM2MwOWZhMmU1MDgzNDkyMGYyNDg1NGQwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCkBAIC04MSw3ICs4MSw3IEBAIFN0cmluZyBIVE1M
VGl0bGVFbGVtZW50Ojp0ZXh0KCkgY29uc3QKIAogU3RyaW5nV2l0aERpcmVjdGlvbiBIVE1MVGl0
bGVFbGVtZW50Ojpjb21wdXRlZFRleHRXaXRoRGlyZWN0aW9uKCkKIHsKLSAgICBhdXRvIGRpcmVj
dGlvbiA9IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSOwogICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29t
cHV0ZWRTdHlsZSgpKQogICAgICAgICBkaXJlY3Rpb24gPSBjb21wdXRlZFN0eWxlLT5kaXJlY3Rp
b24oKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA0ZDU5NTBlMGNjMmJjY2U0YWEzMmRi
MjdkYTNkODA3YTAxMDk3ZDk1Li42ZTllNTE0NDBkMTRlZmFiOGMwNWU1YzY3YzIyZDgzNTcwOTg5
YmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTE1NywyOCArMTU3LDI4IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRGb250V2l0aG91dFVwZGF0aW5nU3R5bGUoY29uc3QgU3RyaW5n
JiBuZXdGb250CiAgICAgQVNTRVJUKHN0YXRlKCkuZm9udC5pc1BvcHVsYXRlZCgpKTsKIH0KIAot
aW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b1RleHREaXJl
Y3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0
eWxlKSBjb25zdAoraW5saW5lIFBBTDo6VGV4dERpcmVjdGlvbiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnRvVGV4dERpcmVjdGlvbihEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSoqIGNvbXB1dGVkU3R5bGUpIGNvbnN0CiB7CiAgICAgYXV0byogc3R5bGUgPSBjb21wdXRl
ZFN0eWxlIHx8IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OkluaGVyaXQgPyBjYW52YXMoKS5leGlz
dGluZ0NvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKGNvbXB1dGVkU3R5bGUpCiAg
ICAgICAgICpjb21wdXRlZFN0eWxlID0gc3R5bGU7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
ICAgICBjYXNlIERpcmVjdGlvbjo6SW5oZXJpdDoKLSAgICAgICAgcmV0dXJuIHN0eWxlID8gc3R5
bGUtPmRpcmVjdGlvbigpIDogVGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICByZXR1cm4gc3R5
bGUgPyBzdHlsZS0+ZGlyZWN0aW9uKCkgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICBj
YXNlIERpcmVjdGlvbjo6UnRsOgotICAgICAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6UlRMOwor
ICAgICAgICByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgY2FzZSBEaXJlY3Rp
b246Okx0cjoKLSAgICAgICAgcmV0dXJuIFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgcmV0
dXJuIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOworICAgIHJldHVybiBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUjsKIH0KIAogQ2FudmFzRGlyZWN0aW9uIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZGlyZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoc3RhdGUoKS5kaXJlY3Rpb24g
PT0gRGlyZWN0aW9uOjpJbmhlcml0KQogICAgICAgICBjYW52YXMoKS5kb2N1bWVudCgpLnVwZGF0
ZVN0eWxlSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gdG9UZXh0RGlyZWN0aW9uKHN0YXRlKCkuZGly
ZWN0aW9uKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBDYW52YXNEaXJlY3Rpb246OlJ0bCA6IENh
bnZhc0RpcmVjdGlvbjo6THRyOworICAgIHJldHVybiB0b1RleHREaXJlY3Rpb24oc3RhdGUoKS5k
aXJlY3Rpb24pID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMID8gQ2FudmFzRGlyZWN0aW9uOjpS
dGwgOiBDYW52YXNEaXJlY3Rpb246Okx0cjsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmZpbGxUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgZG91YmxlIHgsIGRvdWJsZSB5LCBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gbWF4V2lkdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IDZiNDhlOGNjZjU4
ODdmMTg5YjViYTY2ZGE1ZmIzN2UzNzYxMzQ0MTQuLjhkODQxZmZmODgxMGI1NTBkYjVkN2JiZThj
NGYxNDhjM2JiZGY1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIGRyYXdGb2N1c0lmTmVlZGVkSW50ZXJuYWwoY29uc3QgUGF0aCYsIEVsZW1lbnQm
KTsKIAotICAgIFRleHREaXJlY3Rpb24gdG9UZXh0RGlyZWN0aW9uKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OkRpcmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxl
ID0gbnVsbHB0cikgY29uc3Q7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRvVGV4dERpcmVjdGlv
bihDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpEaXJlY3Rpb24sIGNvbnN0IFJlbmRlclN0
eWxlKiogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCA2ZGVmZWI4MTJjMzcyMmMzOGVh
MmZjOGQwNzkxZmFlMjliMTYwZDZlLi4yN2UwZWY5NGNjNWE2YmI0YWY2NDlkZmU1MjRiNjdhNjQy
NWVkYWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMjM5OCw3ICsyMzk4LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIGRvdWJsZSB4LCBkb3VibGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIG5vcm1h
bGl6ZWRUZXh0ID0gbm9ybWFsaXplU3BhY2VzKHRleHQpOwotICAgIGF1dG8gZGlyZWN0aW9uID0g
KHN0YXRlKCkuZGlyZWN0aW9uID09IERpcmVjdGlvbjo6UnRsKSA/IFRleHREaXJlY3Rpb246OlJU
TCA6IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IChzdGF0ZSgpLmRp
cmVjdGlvbiA9PSBEaXJlY3Rpb246OlJ0bCkgPyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgIFRleHRSdW4gdGV4dFJ1bihub3JtYWxpemVkVGV4
dCwgMCwgMCwgQWxsb3dSaWdodEV4cGFuc2lvbiwgZGlyZWN0aW9uLCBmYWxzZSwgdHJ1ZSk7CiAg
ICAgZHJhd1RleHRVbmNoZWNrZWQodGV4dFJ1biwgeCwgeSwgZmlsbCwgbWF4V2lkdGgpOwogfQpA
QCAtMjUyMCw3ICsyNTIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpk
cmF3VGV4dFVuY2hlY2tlZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBkb3UKIFJlZjxUZXh0TWV0
cmljcz4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6bWVhc3VyZVRleHRJbnRlcm5hbChj
b25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgU3RyaW5nIG5vcm1hbGl6ZWRUZXh0ID0gbm9ybWFs
aXplU3BhY2VzKHRleHQpOwotICAgIGF1dG8gZGlyZWN0aW9uID0gKHN0YXRlKCkuZGlyZWN0aW9u
ID09IERpcmVjdGlvbjo6UnRsKSA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246
OkxUUjsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IChzdGF0ZSgpLmRpcmVjdGlvbiA9PSBEaXJlY3Rp
b246OlJ0bCkgPyBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA6IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSOwogICAgIFRleHRSdW4gdGV4dFJ1bihub3JtYWxpemVkVGV4dCwgMCwgMCwgQWxsb3dSaWdo
dEV4cGFuc2lvbiwgZGlyZWN0aW9uLCBmYWxzZSwgdHJ1ZSk7CiAgICAgcmV0dXJuIG1lYXN1cmVU
ZXh0SW50ZXJuYWwodGV4dFJ1bik7CiB9CkBAIC0yNTU1LDcgKzI1NTUsNyBAQCBSZWY8VGV4dE1l
dHJpY3M+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Om1lYXN1cmVUZXh0SW50ZXJuYWwo
Y29uc3QgVGV4dFJ1bgogICAgIHJldHVybiBtZXRyaWNzOwogfQogCi1GbG9hdFBvaW50IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRPZmZzZXQoZmxvYXQgd2lkdGgsIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uKQorRmxvYXRQb2ludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
Ojp0ZXh0T2Zmc2V0KGZsb2F0IHdpZHRoLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQog
ewogICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gZm9udFByb3h5KCktPmZvbnRNZXRyaWNzKCk7CiAg
ICAgRmxvYXRQb2ludCBvZmZzZXQ7CkBAIC0yNTc3LDcgKzI1NzcsNyBAQCBGbG9hdFBvaW50IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnRleHRPZmZzZXQoZmxvYXQgd2lkdGgsIFRleHRE
aXJlY3Rpb24gZAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBib29sIGlzUlRMID0gZGly
ZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICBib29sIGlzUlRMID0gZGlyZWN0aW9u
ID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMOwogICAgIGF1dG8gYWxpZ24gPSBzdGF0ZSgpLnRl
eHRBbGlnbjsKICAgICBpZiAoYWxpZ24gPT0gU3RhcnRUZXh0QWxpZ24pCiAgICAgICAgIGFsaWdu
ID0gaXNSVEwgPyBSaWdodFRleHRBbGlnbiA6IExlZnRUZXh0QWxpZ247CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmgKaW5kZXggZDRhZTBlNDEwY2M5NTNlOWI2YTg3ZTQyNmMzZTlmM2VmZjM0MjQ0Ni4uODE4OGE3
MDMzOWU2YzcyOGVhYjY1MzlhNGQ5NjNlOTgzNmQzZjI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApA
QCAtMzk2LDcgKzM5Niw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlcmVmb3JlLCBhbGwgZm9udCBv
cGVyYXRpb25zIG11c3QgcGFzcyB0aHJvdWdoIHRoZSBwcm94eS4KICAgICB2aXJ0dWFsIGNvbnN0
IEZvbnRQcm94eSogZm9udFByb3h5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0gICAgRmxvYXRQ
b2ludCB0ZXh0T2Zmc2V0KGZsb2F0IHdpZHRoLCBUZXh0RGlyZWN0aW9uKTsKKyAgICBGbG9hdFBv
aW50IHRleHRPZmZzZXQoZmxvYXQgd2lkdGgsIFBBTDo6VGV4dERpcmVjdGlvbik7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE1heFNhdmVDb3VudCA9IDEwMjQgKiAxNjsKICAgICBW
ZWN0b3I8U3RhdGUsIDE+IG1fc3RhdGVTdGFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCmluZGV4IGMzMDc3MDdmM2E3MjRkNjIwODAz
MzYwODJjYzhkZTU4NzVhNzBiOWYuLjRmZDYyNmFmZThhN2VlMWY5MjUwZmYwZWRhNjg3NWRhZjVj
NjQ3ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1i
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJF
bGVtZW50LmNwcApAQCAtMTY5LDEyICsxNjksMTIgQEAgdm9pZCBSZW5kZXJTbGlkZXJDb250YWlu
ZXI6OmxheW91dCgpCiAgICAgYXV0byYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
PigqZWxlbWVudCgpLT5zaGFkb3dIb3N0KCkpOwogICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGhhc1Zl
cnRpY2FsQXBwZWFyYW5jZShpbnB1dCk7CiAgICAgbXV0YWJsZVN0eWxlKCkuc2V0RmxleERpcmVj
dGlvbihpc1ZlcnRpY2FsID8gRmxleERpcmVjdGlvbjo6Q29sdW1uIDogRmxleERpcmVjdGlvbjo6
Um93KTsKLSAgICBUZXh0RGlyZWN0aW9uIG9sZFRleHREaXJlY3Rpb24gPSBzdHlsZSgpLmRpcmVj
dGlvbigpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBvbGRUZXh0RGlyZWN0aW9uID0gc3R5bGUo
KS5kaXJlY3Rpb24oKTsKICAgICBpZiAoaXNWZXJ0aWNhbCkgewogICAgICAgICAvLyBGSVhNRTog
V29yayBhcm91bmQgcm91bmRpbmcgaXNzdWVzIGluIFJUTCB2ZXJ0aWNhbCBzbGlkZXJzLiBXZSB3
YW50IHRoZW0gdG8KICAgICAgICAgLy8gcmVuZGVyIGlkZW50aWNhbGx5IHRvIExUUiB2ZXJ0aWNh
bCBzbGlkZXJzLiBXZSBjYW4gcmVtb3ZlIHRoaXMgd29yayBhcm91bmQgd2hlbgogICAgICAgICAv
LyBzdWJwaXhlbCByZW5kZXJpbmcgaXMgZW5hYmxlZCBvbiBhbGwgcG9ydHMuCi0gICAgICAgIG11
dGFibGVTdHlsZSgpLnNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uOjpMVFIpOworICAgICAgICBt
dXRhYmxlU3R5bGUoKS5zZXREaXJlY3Rpb24oUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpOwogICAg
IH0KIAogICAgIFJlbmRlckJveCogdGh1bWIgPSBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKSA/
IGlucHV0LnNsaWRlclRodW1iRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcAppbmRleCA1YjlhMmQzOTIwNDc5MTBlNzk1MmYzZTYzMjkyZDc3YThmOWZiMWZjLi42
MTEwZjQ5NjMyNzZmYzExYWIwM2ZmNTdkZGM5ZTlkYzY1MjRhMzVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAK
QEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6Om9wdGlvbmFsPFN0eWxlOjpFbGVtZW50U3R5bGU+IFRl
eHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoYwogICAgIG5ld1N0eWxl
LT5zZXRGbGV4R3JvdygxKTsKICAgICBuZXdTdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoIHsgMCwg
TGVuZ3RoVHlwZTo6Rml4ZWQgfSk7IC8vIE5lZWRlZCBmb3IgY29ycmVjdCBzaHJpbmtpbmcuCiAg
ICAgbmV3U3R5bGUtPnNldERpc3BsYXkoRGlzcGxheVR5cGU6OkJsb2NrKTsKLSAgICBuZXdTdHls
ZS0+c2V0RGlyZWN0aW9uKFRleHREaXJlY3Rpb246OkxUUik7CisgICAgbmV3U3R5bGUtPnNldERp
cmVjdGlvbihQQUw6OlRleHREaXJlY3Rpb246OkxUUik7CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
aGUgc2hhZG93IERPTSB0byBiZSBlZGl0YWJsZSwgc28gd2Ugc2V0IHRoaXMgYmxvY2sgdG8gcmVh
ZC1vbmx5IGluIGNhc2UgdGhlIGlucHV0IGl0c2VsZiBpcyBlZGl0YWJsZS4KICAgICBuZXdTdHls
ZS0+c2V0VXNlck1vZGlmeShVc2VyTW9kaWZ5OjpSZWFkT25seSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUl0ZW1z
QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVJdGVtc0J1aWxkZXIuY3BwCmluZGV4IDRiZjQwOTlhN2U4YjNmMmEwOGQ5MTVl
OTA5NmE1ZWIzZDU0M2Q5ZTEuLmRjYTVkNWUwMDI0YTNmNDQ2OGM4MjIyMGJjNTdkNjAzNzgxYzkz
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUl0ZW1zQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lSXRlbXNCdWlsZGVyLmNwcApAQCAtMTcy
LDMwICsxNzIsMzAgQEAgc3RhdGljIHZvaWQgcmVwbGFjZU5vblByZXNlcnZlZE5ld0xpbmVDaGFy
YWN0ZXJzQW5kQXBwZW5kKGNvbnN0IElubGluZVRleHRCb3gmIGkKIH0KIAogc3RydWN0IEJpZGlD
b250ZXh0IHsKLSAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGk7CisgICAgUEFMOjpFVW5pY29k
ZUJpZGkgdW5pY29kZUJpZGk7CiAgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uIHsgZmFs
c2UgfTsKIH07CiB1c2luZyBCaWRpQ29udGV4dFN0YWNrID0gVmVjdG9yPEJpZGlDb250ZXh0PjsK
LXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbnRlckV4aXRCaWRpQ29udGV4dChTdHJpbmdCdWls
ZGVyJiBwYXJhZ3JhcGhDb250ZW50QnVpbGRlciwgRVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpLCBi
b29sIGlzTFRSLCBib29sIGlzRW50ZXJpbmdCaWRpLCBCaWRpQ29udGV4dFN0YWNrJiBiaWRpQ29u
dGV4dFN0YWNrKQorc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVudGVyRXhpdEJpZGlDb250ZXh0
KFN0cmluZ0J1aWxkZXImIHBhcmFncmFwaENvbnRlbnRCdWlsZGVyLCBQQUw6OkVVbmljb2RlQmlk
aSB1bmljb2RlQmlkaSwgYm9vbCBpc0xUUiwgYm9vbCBpc0VudGVyaW5nQmlkaSwgQmlkaUNvbnRl
eHRTdGFjayYgYmlkaUNvbnRleHRTdGFjaykKIHsKICAgICBzd2l0Y2ggKHVuaWNvZGVCaWRpKSB7
Ci0gICAgY2FzZSBFVW5pY29kZUJpZGk6OlVCTm9ybWFsOgorICAgIGNhc2UgUEFMOjpFVW5pY29k
ZUJpZGk6OlVCTm9ybWFsOgogICAgICAgICAvLyBUaGUgYm94IGRvZXMgbm90IG9wZW4gYW4gYWRk
aXRpb25hbCBsZXZlbCBvZiBlbWJlZGRpbmcgd2l0aCByZXNwZWN0IHRvIHRoZSBiaWRpcmVjdGlv
bmFsIGFsZ29yaXRobS4KICAgICAgICAgLy8gRm9yIGlubGluZSBib3hlcywgaW1wbGljaXQgcmVv
cmRlcmluZyB3b3JrcyBhY3Jvc3MgYm94IGJvdW5kYXJpZXMuCiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRVVuaWNvZGVCaWRpOjpFbWJlZDoKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpF
bWJlZDoKICAgICAgICAgcGFyYWdyYXBoQ29udGVudEJ1aWxkZXIuYXBwZW5kKGlzRW50ZXJpbmdC
aWRpID8gKGlzTFRSID8gbGVmdFRvUmlnaHRFbWJlZCA6IHJpZ2h0VG9MZWZ0RW1iZWQpIDogcG9w
RGlyZWN0aW9uYWxGb3JtYXR0aW5nKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFVW5pY29k
ZUJpZGk6Ok92ZXJyaWRlOgorICAgIGNhc2UgUEFMOjpFVW5pY29kZUJpZGk6Ok92ZXJyaWRlOgog
ICAgICAgICBwYXJhZ3JhcGhDb250ZW50QnVpbGRlci5hcHBlbmQoaXNFbnRlcmluZ0JpZGkgPyAo
aXNMVFIgPyBsZWZ0VG9SaWdodE92ZXJyaWRlIDogcmlnaHRUb0xlZnRPdmVycmlkZSkgOiBwb3BE
aXJlY3Rpb25hbEZvcm1hdHRpbmcpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEVVbmljb2Rl
QmlkaTo6SXNvbGF0ZToKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlOgogICAg
ICAgICBwYXJhZ3JhcGhDb250ZW50QnVpbGRlci5hcHBlbmQoaXNFbnRlcmluZ0JpZGkgPyAoaXNM
VFIgPyBsZWZ0VG9SaWdodElzb2xhdGUgOiByaWdodFRvTGVmdElzb2xhdGUpIDogcG9wRGlyZWN0
aW9uYWxJc29sYXRlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFVW5pY29kZUJpZGk6OlBs
YWludGV4dDoKKyAgICBjYXNlIFBBTDo6RVVuaWNvZGVCaWRpOjpQbGFpbnRleHQ6CiAgICAgICAg
IHBhcmFncmFwaENvbnRlbnRCdWlsZGVyLmFwcGVuZChpc0VudGVyaW5nQmlkaSA/IGZpcnN0U3Ry
b25nSXNvbGF0ZSA6IHBvcERpcmVjdGlvbmFsSXNvbGF0ZSk7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRVVuaWNvZGVCaWRpOjpJc29sYXRlT3ZlcnJpZGU6CisgICAgY2FzZSBQQUw6OkVVbmlj
b2RlQmlkaTo6SXNvbGF0ZU92ZXJyaWRlOgogICAgICAgICBpZiAoaXNFbnRlcmluZ0JpZGkpIHsK
ICAgICAgICAgICAgIHBhcmFncmFwaENvbnRlbnRCdWlsZGVyLmFwcGVuZChmaXJzdFN0cm9uZ0lz
b2xhdGUpOwogICAgICAgICAgICAgcGFyYWdyYXBoQ29udGVudEJ1aWxkZXIuYXBwZW5kKGlzTFRS
ID8gbGVmdFRvUmlnaHRPdmVycmlkZSA6IHJpZ2h0VG9MZWZ0T3ZlcnJpZGUpOwpAQCAtMjQxLDcg
KzI0MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBidWlsZEJpZGlQYXJhZ3JhcGgoY29uc3QgUmVu
ZGVyU3R5bGUmIHJvb3RTdHlsZSwgY29uc3QgSW5saW5lCiAgICAgICAgIH0gZWxzZSBpZiAoaW5s
aW5lSXRlbS5pc0lubGluZUJveFN0YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0lubGluZUJveEVuZCgp
KSB7CiAgICAgICAgICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXdyaXRpbmct
bW9kZXMvI3VuaWNvZGUtYmlkaQogICAgICAgICAgICAgYXV0byYgc3R5bGUgPSBpbmxpbmVJdGVt
LnN0eWxlKCk7Ci0gICAgICAgICAgICBhdXRvIGluaXRpYXRlc0NvbnRyb2xDaGFyYWN0ZXIgPSBz
dHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpMb2dpY2FsICYmIHN0eWxlLnVuaWNvZGVCaWRp
KCkgIT0gRVVuaWNvZGVCaWRpOjpVQk5vcm1hbDsKKyAgICAgICAgICAgIGF1dG8gaW5pdGlhdGVz
Q29udHJvbENoYXJhY3RlciA9IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gT3JkZXI6OkxvZ2ljYWwg
JiYgc3R5bGUudW5pY29kZUJpZGkoKSAhPSBQQUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWw7CiAg
ICAgICAgICAgICBpZiAoIWluaXRpYXRlc0NvbnRyb2xDaGFyYWN0ZXIpIHsKICAgICAgICAgICAg
ICAgICAvLyBPcGFxdWUgaXRlbXMgZG8gbm90IGhhdmUgcG9zaXRpb24gaW4gdGhlIGJpZGkgcGFy
YWdyYXBoLiBUaGV5IGluaGVyaXQgdGhlaXIgYmlkaSBsZXZlbCBmcm9tIHRoZSBuZXh0IGlubGlu
ZSBpdGVtLgogICAgICAgICAgICAgICAgIGlubGluZUl0ZW1PZmZzZXRMaXN0LnVuY2hlY2tlZEFw
cGVuZCh7IH0pOwpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgSW5saW5lSXRlbXNCdWlsZGVyOjpi
cmVha0FuZENvbXB1dGVCaWRpTGV2ZWxzKElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykKICAgICB9
KTsKIAogICAgIFVCaURpTGV2ZWwgcm9vdEJpZGlMZXZlbCA9IFVCSURJX0RFRkFVTFRfTFRSOwot
ICAgIGJvb2wgdXNlSGV1cmlzdGljQmFzZURpcmVjdGlvbiA9IHJvb3QoKS5zdHlsZSgpLnVuaWNv
ZGVCaWRpKCkgPT0gRVVuaWNvZGVCaWRpOjpQbGFpbnRleHQ7CisgICAgYm9vbCB1c2VIZXVyaXN0
aWNCYXNlRGlyZWN0aW9uID0gcm9vdCgpLnN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQQUw6OkVV
bmljb2RlQmlkaTo6UGxhaW50ZXh0OwogICAgIGlmICghdXNlSGV1cmlzdGljQmFzZURpcmVjdGlv
bikKICAgICAgICAgcm9vdEJpZGlMZXZlbCA9IHJvb3QoKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IFVCSURJX0xUUiA6IFVCSURJX1JUTDsKIApAQCAtNTI0LDE0ICs1MjQsMTQg
QEAgdm9pZCBJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUJveFN0YXJ0KGNvbnN0IEJv
eCYgaW5saW5lQm94LCBJbmxpbmVJdGVtcyYKIHsKICAgICBpbmxpbmVJdGVtcy5hcHBlbmQoeyBp
bmxpbmVCb3gsIElubGluZUl0ZW06OlR5cGU6OklubGluZUJveFN0YXJ0IH0pOwogICAgIGF1dG8m
IHN0eWxlID0gaW5saW5lQm94LnN0eWxlKCk7Ci0gICAgbV9uZWVkc1Zpc3VhbFJlb3JkZXJpbmcg
PSBtX25lZWRzVmlzdWFsUmVvcmRlcmluZyB8fCAhc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpIHx8IChzdHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpMb2dpY2FsICYmIHN0eWxlLnVu
aWNvZGVCaWRpKCkgIT0gRVVuaWNvZGVCaWRpOjpVQk5vcm1hbCk7CisgICAgbV9uZWVkc1Zpc3Vh
bFJlb3JkZXJpbmcgPSBtX25lZWRzVmlzdWFsUmVvcmRlcmluZyB8fCAhc3R5bGUuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpIHx8IChzdHlsZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpMb2dpY2Fs
ICYmIHN0eWxlLnVuaWNvZGVCaWRpKCkgIT0gUEFMOjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsKTsK
IH0KIAogdm9pZCBJbmxpbmVJdGVtc0J1aWxkZXI6OmhhbmRsZUlubGluZUJveEVuZChjb25zdCBC
b3gmIGlubGluZUJveCwgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQogewogICAgIGlubGluZUl0
ZW1zLmFwcGVuZCh7IGlubGluZUJveCwgSW5saW5lSXRlbTo6VHlwZTo6SW5saW5lQm94RW5kIH0p
OwogICAgIC8vIElubGluZSBib3ggZW5kIGl0ZW0gaXRzZWxmIGNhbiBub3QgdHJpZ2dlciBiaWRp
IGNvbnRlbnQuCi0gICAgQVNTRVJUKG5lZWRzVmlzdWFsUmVvcmRlcmluZygpIHx8IGlubGluZUJv
eC5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSB8fCBpbmxpbmVCb3guc3R5bGUoKS5y
dGxPcmRlcmluZygpID09IE9yZGVyOjpWaXN1YWwgfHwgaW5saW5lQm94LnN0eWxlKCkudW5pY29k
ZUJpZGkoKSA9PSBFVW5pY29kZUJpZGk6OlVCTm9ybWFsKTsKKyAgICBBU1NFUlQobmVlZHNWaXN1
YWxSZW9yZGVyaW5nKCkgfHwgaW5saW5lQm94LnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpIHx8IGlubGluZUJveC5zdHlsZSgpLnJ0bE9yZGVyaW5nKCkgPT0gT3JkZXI6OlZpc3VhbCB8
fCBpbmxpbmVCb3guc3R5bGUoKS51bmljb2RlQmlkaSgpID09IFBBTDo6RVVuaWNvZGVCaWRpOjpV
Qk5vcm1hbCk7CiB9CiAKIHZvaWQgSW5saW5lSXRlbXNCdWlsZGVyOjpoYW5kbGVJbmxpbmVMZXZl
bEJveChjb25zdCBCb3gmIGxheW91dEJveCwgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
SW5saW5lTGluZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9p
bmxpbmUvSW5saW5lTGluZS5oCmluZGV4IDQwZjk1YWI3NTRkZWE2OWFkNTliODIyZTE2MmIwMzBj
MDNlZmIzNTMuLmNmZmZhOWNkMDQ0Zjk5YWU3MDExN2E4ZjAzMjgzMTk1ZjhhZDQ2YzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2lubGluZS9JbmxpbmVMaW5lLmgKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IElubGluZUxheW91dFVuaXQgdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOyB9CiAKICAgICAgICAgYm9vbCBzaG91bGRUcmFp
bGluZ1doaXRlc3BhY2VIYW5nKCkgY29uc3Q7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gaW5saW5l
RGlyZWN0aW9uKCkgY29uc3Q7CisgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBpbmxpbmVEaXJl
Y3Rpb24oKSBjb25zdDsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsZXR0ZXJTcGFjaW5nKCkg
Y29uc3Q7CiAgICAgICAgIGJvb2wgaGFzVGV4dENvbWJpbmUoKSBjb25zdDsKIApAQCAtMTU0LDcg
KzE1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgSW5saW5lRGlzcGxheTo6Qm94OjpFeHBhbnNpb24g
bV9leHBhbnNpb247CiAgICAgICAgIHN0cnVjdCBTdHlsZSB7CiAgICAgICAgICAgICBib29sIHNo
b3VsZFRyYWlsaW5nV2hpdGVzcGFjZUhhbmcgeyBmYWxzZSB9OwotICAgICAgICAgICAgVGV4dERp
cmVjdGlvbiBpbmxpbmVEaXJlY3Rpb24geyBUZXh0RGlyZWN0aW9uOjpSVEwgfTsKKyAgICAgICAg
ICAgIFBBTDo6VGV4dERpcmVjdGlvbiBpbmxpbmVEaXJlY3Rpb24geyBQQUw6OlRleHREaXJlY3Rp
b246OlJUTCB9OwogICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsZXR0ZXJTcGFjaW5nIHsg
MCB9OwogICAgICAgICAgICAgYm9vbCBoYXNUZXh0Q29tYmluZSB7IGZhbHNlIH07CiAgICAgICAg
IH07CkBAIC0yNjgsNyArMjY4LDcgQEAgaW5saW5lIGJvb2wgTGluZTo6UnVuOjpzaG91bGRUcmFp
bGluZ1doaXRlc3BhY2VIYW5nKCkgY29uc3QKICAgICByZXR1cm4gbV9zdHlsZS5zaG91bGRUcmFp
bGluZ1doaXRlc3BhY2VIYW5nOwogfQogCi1pbmxpbmUgVGV4dERpcmVjdGlvbiBMaW5lOjpSdW46
OmlubGluZURpcmVjdGlvbigpIGNvbnN0CitpbmxpbmUgUEFMOjpUZXh0RGlyZWN0aW9uIExpbmU6
OlJ1bjo6aW5saW5lRGlyZWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdHlsZS5pbmxp
bmVEaXJlY3Rpb247CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vSW5saW5lSXRlcmF0b3JCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9JbmxpbmVJdGVyYXRvckJveC5oCmluZGV4IDgxM2Y1YjBlNjU5MDM0MTNmZjQ2MmU0OWUx
Zjg5Mzc4MTg2MzZjN2UuLjYyZDFmYTk5OWZjNjk1NDAwNGU1M2U0NmVlODIwNjRiMGNiZjNiYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJ
dGVyYXRvckJveC5oCkBAIC03OCw4ICs3OCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCByaWdo
dG1vc3RDYXJldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IG1heGltdW1DYXJldE9mZnNldCgpIDogbWluaW11bUNhcmV0T2Zmc2V0KCk7IH0KIAogICAg
IHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsKCkgY29uc3Q7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBUZXh0RGlyZWN0aW9uOjpS
VEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KLSAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBkaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFI7IH0K
KyAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxl
dmVsKCkgJSAyID8gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246
OkxUUjsgfQorICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOyB9CiAKICAgICBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1v
ZGVyblBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvckJveE1vZGVyblBhdGguaAppbmRleCAyNTJhYWI4ZjM0NDExODc0ZTMxZmMyNzIzNDg0NzRk
N2RhNGU3MjlmLi40ZGQzYmE3YWRhMmMzYTY3MzRmZDYyOGVjNDA5N2IyOTJlZWVmYWY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JC
b3hNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lu
bGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oCkBAIC0yNjcsNyArMjY3LDcgQEAgcHJpdmF0ZToK
ICAgICBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZSYgbGluZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5saW5lQ29udGVudC0+bGluZUZvckJveChib3goKSk7IH0KIAogICAgIGNvbnN0IFJlbmRl
clRleHQmIHJlbmRlclRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0Pihy
ZW5kZXJlcigpKTsgfQotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gYmlkaUxldmVsKCkgJSAyID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6
TFRSOyB9CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGJpZGlMZXZlbCgpICUgMiA/IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFI7IH0KIAogICAgIFJlZlB0cjxjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5s
aW5lQ29udGVudD4gbV9pbmxpbmVDb250ZW50OwogICAgIHNpemVfdCBtX2JveEluZGV4IHsgMCB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0
ZXJhdG9yVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5s
aW5lSXRlcmF0b3JUZXh0Qm94LmNwcAppbmRleCAyNjBjZDk5OGQ1MmQyYWFmNGQ5MjU1MmYwYzJl
NmQyMmE2MTQ3ODAwLi4wNmVmNjRjY2MyYTBiMGY4ZWJlNGJlM2M0OGQ2YWM1ZjAwMTM0ZDE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0
b3JUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5s
aW5lSXRlcmF0b3JUZXh0Qm94LmNwcApAQCAtNzcsNyArNzcsNyBAQCBmbG9hdCBUZXh0Qm94Ojpw
b3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAgICAgICAgIHJldHVybiBs
b2dpY2FsTGVmdCgpOwogCiAgICAgYXV0byBbc3RhcnRPZmZzZXQsIGVuZE9mZnNldF0gPSBbJl0g
ewotICAgICAgICBpZiAoZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAgICAg
ICBpZiAoZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjpwYWlyIHsgc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAob2Zmc2V0KSwgbGVu
Z3RoKCkgfTsKICAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IDB1LCBzZWxlY3RhYmxlUmFuZ2Uo
KS5jbGFtcChvZmZzZXQpIH07CiAgICAgfSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQ292ZXJhZ2UuY3Bw
CmluZGV4IDZlMzAzNDUxNzM0ZmMwODc3YzM1OTk4NDhkODdkODNkNDU2ZDIwNTguLjEyMTkwN2Zl
YTNiMzIwMTZmMmUyOTgyYmRiNmFjMWFmNjRkNTM0ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Db3Zl
cmFnZS5jcHAKQEAgLTQzNCw3ICs0MzQsNyBAQCBzdGF0aWMgT3B0aW9uU2V0PEF2b2lkYW5jZVJl
YXNvbj4gY2FuVXNlRm9yU3R5bGUoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsCiAgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc092ZXJmbG93Tm90Vmlz
aWJsZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChzdHlsZS50ZXh0T3ZlcmZs
b3coKSA9PSBUZXh0T3ZlcmZsb3c6OkVsbGlwc2lzKQogICAgICAgICBTRVRfUkVBU09OX0FORF9S
RVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0T3ZlcmZsb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLSAgICBpZiAoIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSB8fCAoaXM8UmVu
ZGVyQmxvY2tGbG93PihyZW5kZXJlcikgJiYgc3R5bGUudW5pY29kZUJpZGkoKSA9PSBFVW5pY29k
ZUJpZGk6OlBsYWludGV4dCkpCisgICAgaWYgKCFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgfHwgKGlzPFJlbmRlckJsb2NrRmxvdz4ocmVuZGVyZXIpICYmIHN0eWxlLnVuaWNvZGVCaWRp
KCkgPT0gUEFMOjpFVW5pY29kZUJpZGk6OlBsYWludGV4dCkpCiAgICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd01heU5vdEJlTFRSLCByZWFzb25zLCBpbmNsdWRlUmVh
c29ucyk7CiAgICAgaWYgKHN0eWxlLndyaXRpbmdNb2RlKCkgIT0gV3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tKQogICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc05v
dFRvcFRvQm90dG9tLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgKaW5kZXggY2Q1ZjI4ZjE0NjFlOGEyZTZhZGJjMGQwMGU1OGRlZTU2ZDRk
MDczOC4uMDk5MTk5NGFkZTIxNTI5YzA2N2IyYzQ0M2NmYjJiMjI1MDNjMTEwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtMTIzLDcgKzEyMyw3IEBAIGNsYXNzIEVtcHR5
Q2hyb21lQ2xpZW50IDogcHVibGljIENocm9tZUNsaWVudCB7CiAgICAgdm9pZCBjb250ZW50c1Np
emVDaGFuZ2VkKEZyYW1lJiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0IGZpbmFsIHsgfQogICAgIHZv
aWQgaW50cmluc2ljQ29udGVudHNTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJikgY29uc3QgZmlu
YWwgeyB9CiAKLSAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgVGV4dERpcmVjdGlvbikgZmluYWwgeyB9
CisgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0Jiwg
dW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIFBBTDo6VGV4dERpcmVjdGlvbikgZmluYWwgeyB9CiAK
ICAgICB2b2lkIHByaW50KEZyYW1lJiwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpIGZpbmFs
IHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggMjJiMDBkZDk0ZGFmYWYyNTUxODg5OTk5
NjZmMWYzYmZmMzQwMDQ4MC4uNzY3ODRjY2U4ZjQ1ZjJiMmNhZDkzODY1ZTM2MTZiMTVjZWI0YTc2
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtMzQwLDE0ICszNDAsMTQgQEAgdm9pZCBDaHJv
bWU6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
dW5zaWduZWQgbW9kaWYKICAgICAgICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmNsaWVu
dCgpLnByZWZldGNoRE5TKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5ob3N0KCkudG9TdHJpbmco
KSk7CiAKICAgICBTdHJpbmcgdG9vbFRpcDsKLSAgICBUZXh0RGlyZWN0aW9uIHRvb2xUaXBEaXJl
Y3Rpb247CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIHRvb2xUaXBEaXJlY3Rpb247CiAgICAgZ2V0
VG9vbFRpcChyZXN1bHQsIHRvb2xUaXAsIHRvb2xUaXBEaXJlY3Rpb24pOwogICAgIG1fY2xpZW50
Lm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHJlc3VsdCwgbW9kaWZpZXJGbGFncywgdG9vbFRpcCwg
dG9vbFRpcERpcmVjdGlvbik7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KG1fcGFnZSwgcmVzdWx0LCBtb2RpZmllckZsYWdzKTsKIH0KIAot
dm9pZCBDaHJvbWU6OmdldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBTdHJp
bmcmIHRvb2xUaXAsIFRleHREaXJlY3Rpb24mIHRvb2xUaXBEaXJlY3Rpb24pCit2b2lkIENocm9t
ZTo6Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIFN0cmluZyYgdG9vbFRp
cCwgUEFMOjpUZXh0RGlyZWN0aW9uJiB0b29sVGlwRGlyZWN0aW9uKQogewogICAgIC8vIEZpcnN0
IHByaW9yaXR5IGlzIGEgcG90ZW50aWFsIHRvb2xUaXAgcmVwcmVzZW50aW5nIGEgc3BlbGxpbmcg
b3IgZ3JhbW1hciBlcnJvcgogICAgIHRvb2xUaXAgPSByZXN1bHQuc3BlbGxpbmdUb29sVGlwKHRv
b2xUaXBEaXJlY3Rpb24pOwpAQCAtMzY0LDcgKzM2NCw3IEBAIHZvaWQgQ2hyb21lOjpnZXRUb29s
VGlwKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGly
ZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybS0+cmVuZGVyZXIoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gZm9ybS0+cmVuZGVyZXIo
KS0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwRGlyZWN0aW9uID0gVGV4dERpcmVjdGlv
bjo6TFRSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXBEaXJlY3Rpb24gPSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIENocm9tZTo6
Z2V0VG9vbFRpcChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIFN0cmluZyYgdG9vbFRpcCwg
VGV4dERpcmVjdAogICAgICAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gcGFzcyB0aGlzIFVSTCB0
aHJvdWdoIHVzZXJWaXNpYmxlU3RyaW5nIG9uY2UgdGhhdCdzIGluIFdlYkNvcmUKICAgICAgICAg
ICAgIHRvb2xUaXAgPSByZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCk7CiAgICAgICAg
ICAgICAvLyBVUkwgYWx3YXlzIGRpc3BsYXkgYXMgTFRSLgotICAgICAgICAgICAgdG9vbFRpcERp
cmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgICAgIHRvb2xUaXBEaXJlY3Rp
b24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzk3
LDcgKzM5Nyw3IEBAIHZvaWQgQ2hyb21lOjpnZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0CiAgICAgICAgICAgICAgICAgLy8g
aW1wbGVtZW50YXRpb25zIGRvbid0IHVzZSB0ZXh0IGRpcmVjdGlvbiBpbmZvcm1hdGlvbiBmb3IK
ICAgICAgICAgICAgICAgICAvLyBDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
LiBXZSdsbCB3b3JrIG9uIHRvb2x0aXAgdGV4dAogICAgICAgICAgICAgICAgIC8vIGRpcmVjdGlv
biBkdXJpbmcgYmlkaSBjbGVhbnVwIGluIGZvcm0gaW5wdXRzLgotICAgICAgICAgICAgICAgIHRv
b2xUaXBEaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgICAgICAgICAgdG9v
bFRpcERpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKaW5kZXggMTI0MzljMTBjYzNmYzI2Mjg0
OWM3NzhmZWE2OTZlOGZkNDI5MzU1My4uODFkNTdjYWIwNjlkODAxMDU0ODI1NzBmZTM5ZDdlYTk3
OWVlNjExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeVBvcHVwT3BlbmluZ09ic2VydmVycygpIGNvbnN0Owog
Ci0gICAgdm9pZCBnZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBTdHJpbmcmLCBUZXh0
RGlyZWN0aW9uJik7CisgICAgdm9pZCBnZXRUb29sVGlwKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBT
dHJpbmcmLCBQQUw6OlRleHREaXJlY3Rpb24mKTsKIAogICAgIFBhZ2UmIG1fcGFnZTsKICAgICBD
aHJvbWVDbGllbnQmIG1fY2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXgg
MzUyZTAzZjBjNDE2YjYzODAwZTcxNDI5ZThjMjhhZTNjZGMyNjA5My4uYzhhODAxN2NiZWE2YTI2
NjRhN2I5NjlmODE0YTU2MzNhNWIxN2NkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CkBAIC0yNDQsNyArMjQ0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFVu
YXZhaWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVn
aW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKEVsZW1lbnQmLCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0IHsgfQotICAg
IHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0
JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGly
ZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNv
bnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJpbmcm
IHRvb2xUaXAsIFBBTDo6VGV4dERpcmVjdGlvbikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHBy
aW50KEZyYW1lJiwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpID0gMDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCmluZGV4IDA2MzdmMmQ5YTc5YzBmOTQxNzIzZDcxZGNjMTcxMzZmNGI3
NWFjODQuLjAzNjQyOGJhOTg5MzAwMzJhZjFjMzZjMjViMTU1NDAxODYwMmE0MzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTE2NywxNCArMTY3LDE0IEBAIFBhZ2luYXRpb246Ok1v
ZGUgcGFnaW5hdGlvbk1vZGVGb3JSZW5kZXJTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
CiAgICAgICAgIHJldHVybiBQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZDsKIAogICAgIGJvb2wgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUgPSBzdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwot
ICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHN0eWxlLmRpcmVjdGlvbigpOworICAg
IFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gc3R5bGUuZGlyZWN0aW9uKCk7CiAg
ICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUgPSBzdHlsZS53cml0aW5nTW9kZSgpOwogCiAgICAg
Ly8gcGFnZWQteCBhbHdheXMgY29ycmVzcG9uZHMgdG8gTGVmdFRvUmlnaHRQYWdpbmF0ZWQgb3Ig
UmlnaHRUb0xlZnRQYWdpbmF0ZWQuIElmIHRoZSBXcml0aW5nTW9kZQogICAgIC8vIGlzIGhvcml6
b250YWwsIHRoZW4gd2UgdXNlIFRleHREaXJlY3Rpb24gdG8gY2hvb3NlIGJldHdlZW4gdGhvc2Ug
b3B0aW9ucy4gSWYgdGhlIFdyaXRpbmdNb2RlCiAgICAgLy8gaXMgdmVydGljYWwsIHRoZW4gdGhl
IGRpcmVjdGlvbiBvZiB0aGUgdmVydGljYWxpdHkgZGljdGF0ZXMgdGhlIGNob2ljZS4KICAgICBp
ZiAob3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlBhZ2VkWCkgewotICAgICAgICBpZiAoKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlICYmIHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB8
fCB3cml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQpCisgICAgICAgIGlmICgo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUgJiYgdGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUikgfHwgd3JpdGluZ01vZGUgPT0gV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0KQog
ICAgICAgICAgICAgcmV0dXJuIFBhZ2luYXRpb246OkxlZnRUb1JpZ2h0UGFnaW5hdGVkOwogICAg
ICAgICByZXR1cm4gUGFnaW5hdGlvbjo6UmlnaHRUb0xlZnRQYWdpbmF0ZWQ7CiAgICAgfQpAQCAt
MTgyLDcgKzE4Miw3IEBAIFBhZ2luYXRpb246Ok1vZGUgcGFnaW5hdGlvbk1vZGVGb3JSZW5kZXJT
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgLy8gcGFnZWQteSBhbHdheXMgY29y
cmVzcG9uZHMgdG8gVG9wVG9Cb3R0b21QYWdpbmF0ZWQgb3IgQm90dG9tVG9Ub3BQYWdpbmF0ZWQu
IElmIHRoZSBXcml0aW5nTW9kZQogICAgIC8vIGlzIGhvcml6b250YWwsIHRoZW4gdGhlIGRpcmVj
dGlvbiBvZiB0aGUgaG9yaXpvbnRhbGl0eSBkaWN0YXRlcyB0aGUgY2hvaWNlLiBJZiB0aGUgV3Jp
dGluZ01vZGUKICAgICAvLyBpcyB2ZXJ0aWNhbCwgdGhlbiB3ZSB1c2UgVGV4dERpcmVjdGlvbiB0
byBjaG9vc2UgYmV0d2VlbiB0aG9zZSBvcHRpb25zLiAKLSAgICBpZiAod3JpdGluZ01vZGUgPT0g
V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tIHx8ICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgJiYg
dGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpKQorICAgIGlmICh3cml0aW5nTW9k
ZSA9PSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20gfHwgKCFpc0hvcml6b250YWxXcml0aW5nTW9k
ZSAmJiB0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKSkKICAgICAgICAg
cmV0dXJuIFBhZ2luYXRpb246OlRvcFRvQm90dG9tUGFnaW5hdGVkOwogICAgIHJldHVybiBQYWdp
bmF0aW9uOjpCb3R0b21Ub1RvcFBhZ2luYXRlZDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MueWFtbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFt
bAppbmRleCAyYWU3MGNiMWRhODRlOGNhZDNlY2NjMGM5ZmZlZjQzNmY4ZTg5ZjYwLi5kZWJhYWMy
YjVhYThiOWIyNjRmMDM5Mzc0NTc0Y2U5OWEyNGViOGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLnlhbWwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy55YW1sCkBAIC01MTMsMTAgKzUxMywxMCBAQCBTdG9yYWdlQmxvY2tpbmdQb2xpY3k6CiAKIFN5
c3RlbUxheW91dERpcmVjdGlvbjoKICAgdHlwZTogdWludDMyX3QKLSAgcmVmaW5lZFR5cGU6IFRl
eHREaXJlY3Rpb24KKyAgcmVmaW5lZFR5cGU6IFBBTDo6VGV4dERpcmVjdGlvbgogICBkZWZhdWx0
VmFsdWU6CiAgICAgV2ViQ29yZToKLSAgICAgIGRlZmF1bHQ6IFRleHREaXJlY3Rpb246OkxUUgor
ICAgICAgZGVmYXVsdDogUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIKIAogVGV4dEF1dG9zaXppbmdX
aW5kb3dTaXplT3ZlcnJpZGVIZWlnaHQ6CiAgIHR5cGU6IHVpbnQzMl90CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5nc0Jhc2UuaAppbmRleCA0MGRkYjhhN2Y3YWY4NDVkNGI2NWU2MzBmYjdhYjJlNjU0YmEx
YzkyLi44NDIyYWJjM2NhY2Q4MDUzMjNhYzhiNTM2MDNjMDNjMmQyYjBjZWY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3NCYXNlLmgKQEAgLTQwLDExICs0MCwxMSBAQAogI2luY2x1ZGUgIlBERklt
YWdlQ2FjaGluZ1BvbGljeS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VCbG9ja2luZ1BvbGljeS5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKLSNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5j
bHVkZSAiVGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvci5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCiAjaW5jbHVkZSAiVXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeS5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1J1bnRpbWVGbGFncy5oPgorI2luY2x1ZGUgPHBhbC90ZXh0
L1RleHREaXJlY3Rpb24uaD4KICNpbmNsdWRlIDx1bmljb2RlL3VzY3JpcHQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNw
cAppbmRleCA2OGM1NzYzMDk4YTg2OTc2YjFkY2E1OGUzMzdjMGFkNzY1MTc3ODMzLi4yZTY2MmUy
ODAzYjhhMzlkZDBjMWM4OTFjZGFmMjdkNzU5M2UzNTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKQEAgLTI2
NywxNyArMjY3LDE3IEBAIHN0YXRpYyBMYXlvdXRVbml0IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25P
ZmZzZXQoTGF5b3V0VW5pdCBtaW5Mb2NhdGlvbiwgTGF5b3V0VW5pCiAgICAgfQogfQogCi1zdGF0
aWMgc3RkOjpwYWlyPGJvb2wsIGJvb2w+IGF4ZXNGbGlwcGVkRm9yV3JpdGluZ01vZGVBbmREaXJl
Y3Rpb24oV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlv
bikKK3N0YXRpYyBzdGQ6OnBhaXI8Ym9vbCwgYm9vbD4gYXhlc0ZsaXBwZWRGb3JXcml0aW5nTW9k
ZUFuZERpcmVjdGlvbihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGlyZWN0aW9u
IHRleHREaXJlY3Rpb24pCiB7CiAgICAgLy8gdGV4dC1kaXJlY3Rpb24gZmxpcHMgdGhlIGlubGlu
ZSBheGlzIGFuZCB3cml0aW5nLW1vZGUgY2FuIGZsaXAgdGhlIGJsb2NrIGF4aXMuIFdoZXRoZXIg
b3IKICAgICAvLyBub3QgdGhlIHdyaXRpbmctbW9kZSBpcyB2ZXJ0aWNhbCBkZXRlcm1pbmVzIHRo
ZSBwaHlzaWNhbCBvcmllbnRhdGlvbiBvZiB0aGUgYmxvY2sgYW5kIGlubGluZSBheGVzLgogICAg
IGJvb2wgaGFzVmVydGljYWxXcml0aW5nTW9kZSA9IGlzVmVydGljYWxXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSk7CiAgICAgYm9vbCBibG9ja0F4aXNGbGlwcGVkID0gaXNGbGlwcGVkV3JpdGluZ01v
ZGUod3JpdGluZ01vZGUpOwotICAgIGJvb2wgaW5saW5lQXhpc0ZsaXBwZWQgPSB0ZXh0RGlyZWN0
aW9uID09IFRleHREaXJlY3Rpb246OlJUTDsKKyAgICBib29sIGlubGluZUF4aXNGbGlwcGVkID0g
dGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoaGFzVmVydGljYWxXcml0aW5nTW9kZSA/IGJsb2NrQXhpc0ZsaXBwZWQgOiBp
bmxpbmVBeGlzRmxpcHBlZCwgaGFzVmVydGljYWxXcml0aW5nTW9kZSA/IGlubGluZUF4aXNGbGlw
cGVkIDogYmxvY2tBeGlzRmxpcHBlZCk7CiB9CiAKLXZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JT
Y3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEsIGNvbnN0IFJlbmRl
ckJveCYgc2Nyb2xsaW5nRWxlbWVudEJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHNjcm9sbGluZ0Vs
ZW1lbnRTdHlsZSwgTGF5b3V0UmVjdCB2aWV3cG9ydFJlY3RJbkJvcmRlckJveENvb3JkaW5hdGVz
LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKQor
dm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJiBz
Y3JvbGxhYmxlQXJlYSwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBjb25z
dCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlLCBMYXlvdXRSZWN0IHZpZXdwb3J0
UmVjdEluQm9yZGVyQm94Q29vcmRpbmF0ZXMsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6
OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKIHsKICAgICBhdXRvIHNjcm9sbFNuYXBUeXBl
ID0gc2Nyb2xsaW5nRWxlbWVudFN0eWxlLnNjcm9sbFNuYXBUeXBlKCk7CiAgICAgY29uc3QgYXV0
byYgYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9ucyA9IHNjcm9sbGluZ0VsZW1lbnRCb3gudmll
dygpLmJveGVzV2l0aFNjcm9sbFNuYXBQb3NpdGlvbnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgKaW5kZXggN2E5NGJh
ODRiOGFhYzUzMWFjNGFkOTQzNmEyZDgwYmJkYjMwYTVkOC4uYWM0YzAyODdiZGE2NGNmNzQ1OTU4
YzAyYTZhZDU5OTU4Zjk1YTgyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmgKQEAgLTk3LDcgKzk3LDcgQEAgV0VCQ09S
RV9FWFBPUlQgc3RkOjpwYWlyPExheW91dFVuaXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBM
YXlvdXRTY3JvbGxTbmFwT2YKIC8vIFVwZGF0ZSB0aGUgc25hcCBvZmZzZXRzIGZvciB0aGlzIHNj
cm9sbGFibGUgYXJlYSwgZ2l2ZW4gdGhlIFJlbmRlckJveCBvZiB0aGUgc2Nyb2xsIGNvbnRhaW5l
ciwgdGhlIFJlbmRlclN0eWxlCiAvLyB3aGljaCBkZWZpbmVzIHRoZSBzY3JvbGwtc25hcCBwcm9w
ZXJ0aWVzLCBhbmQgdGhlIHZpZXdwb3J0IHJlY3RhbmdsZSB3aXRoIHRoZSBvcmlnaW4gYXQgdGhl
IHRvcCBsZWZ0IG9mCiAvLyB0aGUgc2Nyb2xsaW5nIGNvbnRhaW5lcidzIGJvcmRlciBib3guCi12
b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmLCBj
b25zdCBSZW5kZXJCb3gmIHNjcm9sbGluZ0VsZW1lbnRCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiBz
Y3JvbGxpbmdFbGVtZW50U3R5bGUsIExheW91dFJlY3Qgdmlld3BvcnRSZWN0SW5Cb3JkZXJCb3hD
b29yZGluYXRlcywgV3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24pOwordm9pZCB1cGRhdGVTbmFw
T2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJiwgY29uc3QgUmVuZGVyQm94
JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVu
dFN0eWxlLCBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdEluQm9yZGVyQm94Q29vcmRpbmF0ZXMsIFdy
aXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb24pOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYgdHMsIFNuYXBPZmZz
ZXQ8VD4gb2Zmc2V0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9w
dXBNZW51U3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgK
aW5kZXggZGJkZjNjNzRiMTk1YTU5NmJmNDk0MzJmYWU5YjMyMGYwYjQzMDNiNS4uNmRlY2E0OTY1
NjI5MDg5NWE2NjgzNDc4NGEyODg0MjM5ZmYxMWUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Qb3B1cE1lbnVTdHlsZS5oCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAg
IH07CiAKLSAgICBQb3B1cE1lbnVTdHlsZShjb25zdCBDb2xvciYgZm9yZWdyb3VuZCwgY29uc3Qg
Q29sb3ImIGJhY2tncm91bmQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBib29sIHZpc2libGUs
IGJvb2wgaXNEaXNwbGF5Tm9uZSwgYm9vbCBoYXNEZWZhdWx0QXBwZWFyYW5jZSwgTGVuZ3RoIHRl
eHRJbmRlbnQsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiwgYm9vbCBoYXNUZXh0RGlyZWN0
aW9uT3ZlcnJpZGUsIEJhY2tncm91bmRDb2xvclR5cGUgYmFja2dyb3VuZENvbG9yVHlwZSA9IERl
ZmF1bHRCYWNrZ3JvdW5kQ29sb3IsIFBvcHVwTWVudVR5cGUgbWVudVR5cGUgPSBTZWxlY3RQb3B1
cCwgUG9wdXBNZW51U2l6ZSBtZW51U2l6ZSA9IFBvcHVwTWVudVNpemVOb3JtYWwpCisgICAgUG9w
dXBNZW51U3R5bGUoY29uc3QgQ29sb3ImIGZvcmVncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgYm9vbCB2aXNpYmxlLCBib29sIGlzRGlzcGxh
eU5vbmUsIGJvb2wgaGFzRGVmYXVsdEFwcGVhcmFuY2UsIExlbmd0aCB0ZXh0SW5kZW50LCBQQUw6
OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiwgYm9vbCBoYXNUZXh0RGlyZWN0aW9uT3ZlcnJp
ZGUsIEJhY2tncm91bmRDb2xvclR5cGUgYmFja2dyb3VuZENvbG9yVHlwZSA9IERlZmF1bHRCYWNr
Z3JvdW5kQ29sb3IsIFBvcHVwTWVudVR5cGUgbWVudVR5cGUgPSBTZWxlY3RQb3B1cCwgUG9wdXBN
ZW51U2l6ZSBtZW51U2l6ZSA9IFBvcHVwTWVudVNpemVOb3JtYWwpCiAgICAgICAgIDogbV9mb3Jl
Z3JvdW5kQ29sb3IoZm9yZWdyb3VuZCkKICAgICAgICAgLCBtX2JhY2tncm91bmRDb2xvcihiYWNr
Z3JvdW5kKQogICAgICAgICAsIG1fZm9udChmb250KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0Rpc3BsYXlOb25lKCkgY29uc3QgeyByZXR1cm4gbV9pc0Rpc3BsYXlOb25l
OyB9CiAgICAgYm9vbCBoYXNEZWZhdWx0QXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
RGVmYXVsdEFwcGVhcmFuY2U7IH0KICAgICBMZW5ndGggdGV4dEluZGVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dEluZGVudDsgfQotICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dERpcmVjdGlvbjsgfQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RGlyZWN0aW9uOyB9CiAgICAgYm9v
bCBoYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX2hhc1RleHREaXJl
Y3Rpb25PdmVycmlkZTsgfQogICAgIEJhY2tncm91bmRDb2xvclR5cGUgYmFja2dyb3VuZENvbG9y
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yVHlwZTsgfQogICAgIFBvcHVw
TWVudVR5cGUgbWVudVR5cGUoKSBjb25zdCB7IHJldHVybiBtX21lbnVUeXBlOyB9CkBAIC04Miw3
ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzRGlzcGxheU5vbmU7CiAgICAgYm9vbCBt
X2hhc0RlZmF1bHRBcHBlYXJhbmNlOwogICAgIExlbmd0aCBtX3RleHRJbmRlbnQ7Ci0gICAgVGV4
dERpcmVjdGlvbiBtX3RleHREaXJlY3Rpb247CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIG1fdGV4
dERpcmVjdGlvbjsKICAgICBib29sIG1faGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlOwogICAgIEJh
Y2tncm91bmRDb2xvclR5cGUgbV9iYWNrZ3JvdW5kQ29sb3JUeXBlOwogICAgIFBvcHVwTWVudVR5
cGUgbV9tZW51VHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1JlY3RF
ZGdlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUmVjdEVkZ2VzLmgKaW5kZXggMGUxMjMw
MTkzMzYzNTRkN2NlZjI3ZDFmZGY3YTczMjM2MDUxOWZhYS4uMzI4YTgyZDE0ZTdmYjI0YzYxMzhl
Mzk3NTQyYjk2ZDkxY2E4NTRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UmVjdEVkZ2VzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUmVjdEVkZ2VzLmgKQEAg
LTc1LDE4ICs3NSwxOCBAQCBwdWJsaWM6CiAKICAgICBUJiBiZWZvcmUoV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUpIHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3JpdGlu
Z01vZGUsIExvZ2ljYWxCb3hTaWRlOjpCbG9ja1N0YXJ0KSk7IH0KICAgICBUJiBhZnRlcihXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSkgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2Fs
U2lkZSh3cml0aW5nTW9kZSwgTG9naWNhbEJveFNpZGU6OkJsb2NrRW5kKSk7IH0KLSAgICBUJiBz
dGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBU
ZXh0RGlyZWN0aW9uOjpMVFIpIHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNp
ZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBMb2dpY2FsQm94U2lkZTo6
SW5saW5lU3RhcnQpKTsgfQotICAgIFQmIGVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsgcmV0dXJuIGF0KG1h
cExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJl
Y3Rpb24pLCBMb2dpY2FsQm94U2lkZTo6SW5saW5lRW5kKSk7IH0KKyAgICBUJiBzdGFydChXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFBBTDo6
VGV4dERpcmVjdGlvbjo6TFRSKSB7IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxT
aWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgTG9naWNhbEJveFNpZGU6
OklubGluZVN0YXJ0KSk7IH0KKyAgICBUJiBlbmQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBB
TDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgeyBy
ZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGlu
Z01vZGUsIGRpcmVjdGlvbiksIExvZ2ljYWxCb3hTaWRlOjpJbmxpbmVFbmQpKTsgfQogCiAgICAg
Y29uc3QgVCYgYmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBh
dChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKHdyaXRpbmdNb2RlLCBMb2dpY2FsQm94U2lk
ZTo6QmxvY2tTdGFydCkpOyB9CiAgICAgY29uc3QgVCYgYWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUpIGNvbnN0IHsgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3Jp
dGluZ01vZGUsIExvZ2ljYWxCb3hTaWRlOjpCbG9ja0VuZCkpOyB9Ci0gICAgY29uc3QgVCYgc3Rh
cnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gVGV4
dERpcmVjdGlvbjo6TFRSKSBjb25zdCB7IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2lj
YWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgTG9naWNhbEJveFNp
ZGU6OklubGluZVN0YXJ0KSk7IH0KLSAgICBjb25zdCBUJiBlbmQoV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSKSBjb25z
dCB7IHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3
cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgTG9naWNhbEJveFNpZGU6OklubGluZUVuZCkpOyB9Cisg
ICAgY29uc3QgVCYgc3RhcnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgY29uc3QgeyByZXR1cm4g
YXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUs
IGRpcmVjdGlvbiksIExvZ2ljYWxCb3hTaWRlOjpJbmxpbmVTdGFydCkpOyB9CisgICAgY29uc3Qg
VCYgZW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0
aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpIGNvbnN0IHsgcmV0dXJuIGF0KG1hcExvZ2lj
YWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24p
LCBMb2dpY2FsQm94U2lkZTo6SW5saW5lRW5kKSk7IH0KIAogICAgIHZvaWQgc2V0QmVmb3JlKGNv
bnN0IFQmIGJlZm9yZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgdGhpcy0+YmVmb3JlKHdy
aXRpbmdNb2RlKSA9IGJlZm9yZTsgfQogICAgIHZvaWQgc2V0QWZ0ZXIoY29uc3QgVCYgYWZ0ZXIs
IFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IHRoaXMtPmFmdGVyKHdyaXRpbmdNb2RlKSA9IGFm
dGVyOyB9Ci0gICAgdm9pZCBzZXRTdGFydChjb25zdCBUJiBzdGFydCwgV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSKSB7
IHRoaXMtPnN0YXJ0KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pID0gc3RhcnQ7IH0KLSAgICB2b2lk
IHNldEVuZChjb25zdCBUJiBlbmQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246OkxUUikgeyB0aGlzLT5lbmQod3JpdGluZ01v
ZGUsIGRpcmVjdGlvbikgPSBlbmQ7IH0KKyAgICB2b2lkIHNldFN0YXJ0KGNvbnN0IFQmIHN0YXJ0
LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9
IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7IHRoaXMtPnN0YXJ0KHdyaXRpbmdNb2RlLCBkaXJl
Y3Rpb24pID0gc3RhcnQ7IH0KKyAgICB2b2lkIHNldEVuZChjb25zdCBUJiBlbmQsIFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFIpIHsgdGhpcy0+ZW5kKHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pID0gZW5k
OyB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVjdEVkZ2VzJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gbV9zaWRlcyA9PSBvdGhlci5tX3NpZGVzOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFJlY3RFZGdlcyYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fc2lkZXMgIT0gb3RoZXIu
bV9zaWRlczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggZmQ2MDJmM2Q1M2ZjYmI0MDFiYWQ0
MmM5MDE3N2JkMjFkZDg1MDI3MS4uZTRiMDBkOTNjMGVlMWQ0MTkzMWZhZjdkNmMzMGI4ZTA1MWRj
YzM2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBDb21w
bGV4VGV4dENvbnRyb2xsZXI6OmNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0eSgpCiAgICAgaWYg
KCFtX2V4cGFuc2lvbikKICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBG
b250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVu
Lmx0cigpID8gVGV4dERpcmVjdGlvbjo6TFRSIDogVGV4dERpcmVjdGlvbjo6UlRMLCBtX3J1bi5l
eHBhbnNpb25CZWhhdmlvcigpKS5maXJzdDsKKyAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudCA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1f
cnVuLnRleHQoKSwgbV9ydW4ubHRyKCkgPyBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA6IFBBTDo6
VGV4dERpcmVjdGlvbjo6UlRMLCBtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpKS5maXJzdDsKIAog
ICAgICAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCiAgICAgICAgICAgICBtX2V4
cGFuc2lvblBlck9wcG9ydHVuaXR5ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAppbmRleCA4MmViYTczYmFjNGM3NmZlYTBiYjYwZWJhNDQzNjgyZDIyYzdmZTFiLi4z
ZmU4ZDlmNDAwNmVjNjAwNWRiY2JlMmE5ZDgyY2FlYWMxMmJhYzE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0xOTAsNyArMTkwLDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICAgICBib29sIGNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0
IFVDaGFyKiwgc2l6ZV90KSBjb25zdDsKLSAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYXBwbHlUcmFu
c2Zvcm1zKEdseXBoQnVmZmVyJiwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWdu
ZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJl
c1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0
RGlyZWN0aW9uKSBjb25zdDsKKyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYXBwbHlUcmFuc2Zvcm1z
KEdseXBoQnVmZmVyJiwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVn
aW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBp
bmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBQQUw6OlRleHRE
aXJlY3Rpb24pIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyBudWxsb3B0IGlmIG5vbmUgb2YgdGhl
IGdseXBocyBhcmUgT1QtU1ZHIGdseXBocy4KICAgICBzdGQ6Om9wdGlvbmFsPEJpdFZlY3Rvcj4g
ZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCB1bnNpZ25lZCBjb3VudCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHAKaW5kZXggMmE3NjEzNjJjODNmYTY4NWI1MWM2ZWUwNTJjNmIxMzVjMDI1ZjlhMC4uNzBh
MzJhOTY1YTExYjZjZDU5ZWQ3YzMzMTk4MDU0MzgwN2U5YzA5ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMzAyLDcgKzMwMiw3
IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8
Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotZmxv
YXQgRm9udENhc2NhZGU6OndpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdWaWV3IHRleHQsIFRleHRE
aXJlY3Rpb24gdGV4dERpcmVjdGlvbikgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aEZv
clNpbXBsZVRleHQoU3RyaW5nVmlldyB0ZXh0LCBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVj
dGlvbikgY29uc3QKIHsKICAgICBpZiAodGV4dC5pc051bGwoKSB8fCB0ZXh0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC05NjUsNyArOTY1LDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6
aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyIGMpCiAgICAgcmV0dXJuIGlzQ0pLSWRlb2dy
YXBoKGMpOwogfQogCi1zdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9y
IGV4cGFuc2lvbkJlaGF2aW9yKQorc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2Fk
ZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFu
c2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQogewogICAgIHVuc2lnbmVkIGNvdW50ID0g
MDsKICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSAoZXhwYW5zaW9uQmVoYXZpb3IgJiBMZWZ0
RXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkTGVmdEV4cGFuc2lvbjsKQEAgLTk3Myw3ICs5NzMsNyBA
QCBzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTAogICAgICAgICArK2NvdW50OwogICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0RGly
ZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2ldKSkgewogICAgICAgICAg
ICAgICAgIGNvdW50Kys7CkBAIC0xMDAxLDcgKzEwMDEsNyBAQCBzdGQ6OnBhaXI8dW5zaWduZWQs
IGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29u
c3QgTAogICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihjb3VudCwgaXNBZnRlckV4cGFuc2lvbik7
CiB9CiAKLXN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5z
aW9uQmVoYXZpb3IpCitzdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCwgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IpCiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAg
IGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IChleHBhbnNpb25CZWhhdmlvciAmIExlZnRFeHBhbnNp
b25NYXNrKSA9PSBGb3JiaWRMZWZ0RXhwYW5zaW9uOwpAQCAtMTAwOSw3ICsxMDA5LDcgQEAgc3Rk
OjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudEludGVybmFsKGNvbnN0IFUKICAgICAgICAgKytjb3VudDsKICAgICAgICAgaXNBZnRlckV4
cGFuc2lvbiA9IHRydWU7CiAgICAgfQotICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlv
bjo6TFRSKSB7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAg
ICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpXTsKICAgICAgICAgICAgIGlm
ICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgewpAQCAtMTA2Myw3ICsxMDYzLDcgQEAgc3RkOjpw
YWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dEludGVybmFsKGNvbnN0IFUKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoY291bnQsIGlzQWZ0
ZXJFeHBhbnNpb24pOwogfQogCi1zdGQ6OnBhaXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRl
OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQor
c3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24sIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQogewogICAgIC8vIEZvciBl
YWNoIGNoYXJhY3RlciwgaXRlcmF0aW5nIGZyb20gbGVmdCB0byByaWdodDoKICAgICAvLyAgIElm
IGl0IGlzIHJlY29nbml6ZWQgYXMgYSBzcGFjZSwgaW5zZXJ0IGFuIG9wcG9ydHVuaXR5IGFmdGVy
IGl0CkBAIC0xMDc0LDEzICsxMDc0LDEzIEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9u
dENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoU3RyaW5nVmlldyBzdHJpCiAgICAg
cmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChzdHJpbmdWaWV3LmNoYXJh
Y3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGV4cGFuc2lvbkJlaGF2
aW9yKTsKIH0KIAotYm9vbCBGb250Q2FzY2FkZTo6bGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0
cmluZ1ZpZXcgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCitib29sIEZvbnRD
YXNjYWRlOjpsZWZ0RXhwYW5zaW9uT3Bwb3J0dW5pdHkoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBQ
QUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIGlmICghc3RyaW5nVmlldy5sZW5n
dGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVUNoYXIzMiBpbml0aWFsQ2hhcmFj
dGVyOwotICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgaWYg
KGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgewogICAgICAgICBpbml0aWFs
Q2hhcmFjdGVyID0gc3RyaW5nVmlld1swXTsKICAgICAgICAgaWYgKFUxNl9JU19MRUFEKGluaXRp
YWxDaGFyYWN0ZXIpICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAxICYmIFUxNl9JU19UUkFJTChz
dHJpbmdWaWV3WzFdKSkKICAgICAgICAgICAgIGluaXRpYWxDaGFyYWN0ZXIgPSBVMTZfR0VUX1NV
UFBMRU1FTlRBUlkoaW5pdGlhbENoYXJhY3Rlciwgc3RyaW5nVmlld1sxXSk7CkBAIC0xMDkzLDEz
ICsxMDkzLDEzIEBAIGJvb2wgRm9udENhc2NhZGU6OmxlZnRFeHBhbnNpb25PcHBvcnR1bml0eShT
dHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24KICAgICByZXR1cm4gY2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKSAmJiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9s
KGluaXRpYWxDaGFyYWN0ZXIpOwogfQogCi1ib29sIEZvbnRDYXNjYWRlOjpyaWdodEV4cGFuc2lv
bk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24pCitib29sIEZvbnRDYXNjYWRlOjpyaWdodEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1Zp
ZXcgc3RyaW5nVmlldywgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBpZiAo
IXN0cmluZ1ZpZXcubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFVDaGFy
MzIgZmluYWxDaGFyYWN0ZXI7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpM
VFIpIHsKKyAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAg
ICAgICAgIGZpbmFsQ2hhcmFjdGVyID0gc3RyaW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0g
MV07CiAgICAgICAgIGlmIChVMTZfSVNfVFJBSUwoZmluYWxDaGFyYWN0ZXIpICYmIHN0cmluZ1Zp
ZXcubGVuZ3RoKCkgPiAxICYmIFUxNl9JU19MRUFEKHN0cmluZ1ZpZXdbc3RyaW5nVmlldy5sZW5n
dGgoKSAtIDJdKSkKICAgICAgICAgICAgIGZpbmFsQ2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVN
RU5UQVJZKHN0cmluZ1ZpZXdbc3RyaW5nVmlldy5sZW5ndGgoKSAtIDJdLCBmaW5hbENoYXJhY3Rl
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaApp
bmRleCBjMzQ1NjgwMTdmY2RlOTgzZTZmNWFjNzBlZTE3ODNhOWY3M2U5MDUzLi5hMjA5OTMxYTlk
OGEyMTZmMzRjYzc4MmU2ODI4Mzk2MTgzMGJmOTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTEzMSw3ICsxMzEsNyBAQCBwdWJsaWM6
CiAKICAgICBmbG9hdCB3aWR0aE9mVGV4dFJhbmdlKGNvbnN0IFRleHRSdW4mLCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCB0bywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAw
LCBmbG9hdCogb3V0V2lkdGhCZWZvcmVSYW5nZSA9IG51bGxwdHIsIGZsb2F0KiBvdXRXaWR0aEFm
dGVyUmFuZ2UgPSBudWxscHRyKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCB3aWR0
aChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAw
LCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwotICAgIGZsb2F0IHdpZHRoRm9yU2ltcGxlVGV4
dChTdHJpbmdWaWV3IHRleHQsIFRleHREaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFIpIGNv
bnN0OworICAgIGZsb2F0IHdpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdWaWV3IHRleHQsIFBBTDo6
VGV4dERpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSBjb25zdDsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxUZXh0TGF5b3V0LCBUZXh0TGF5b3V0RGVsZXRlcj4gY3JlYXRlTGF5b3V0
KFJlbmRlclRleHQmLCBmbG9hdCB4UG9zLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSkgY29uc3Q7
CiAgICAgc3RhdGljIGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CkBAIC0x
ODUsMTIgKzE4NSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zICh0aGUgbnVtYmVyIG9m
IG9wcG9ydHVuaXRpZXMsIHdoZXRoZXIgdGhlIGxhc3QgZXhwYW5zaW9uIGlzIGEgdHJhaWxpbmcg
ZXhwYW5zaW9uKQogICAgIC8vIElmIHRoZXJlIGFyZSBubyBvcHBvcnR1bml0aWVzLCB0aGUgYm9v
bCB3aWxsIGJlIHRydWUgaWZmIHdlIGFyZSBmb3JiaWRkaW5nIGxlYWRpbmcgZXhwYW5zaW9ucy4K
LSAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KFN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yKTsKKyAg
ICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KFN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IpOwog
CiAgICAgLy8gV2hldGhlciBvciBub3QgdGhlcmUgaXMgYW4gZXhwYW5zaW9uIG9wcG9ydHVuaXR5
IGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBk
b2VzIG5vdCB0YWtlIGEgaXNBZnRlckV4cGFuc2lvbiBmbGFnOyB0aGlzIGFzc3VtZXMgdGhhdCBp
c0FmdGVyRXhwYW5zaW9uIGlzIGZhbHNlCi0gICAgc3RhdGljIGJvb2wgbGVmdEV4cGFuc2lvbk9w
cG9ydHVuaXR5KFN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24pOwotICAgIHN0YXRpYyBib29sIHJp
Z2h0RXhwYW5zaW9uT3Bwb3J0dW5pdHkoU3RyaW5nVmlldywgVGV4dERpcmVjdGlvbik7CisgICAg
c3RhdGljIGJvb2wgbGVmdEV4cGFuc2lvbk9wcG9ydHVuaXR5KFN0cmluZ1ZpZXcsIFBBTDo6VGV4
dERpcmVjdGlvbik7CisgICAgc3RhdGljIGJvb2wgcmlnaHRFeHBhbnNpb25PcHBvcnR1bml0eShT
dHJpbmdWaWV3LCBQQUw6OlRleHREaXJlY3Rpb24pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHZvaWQgc2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBib29sIHNob3VsZFVzZVNtb290aGluZygpOwpAQCAtMjM3LDggKzIzNyw4IEBAIHBy
aXZhdGU6CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsK
ICAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8p
IGNvbnN0OwogCi0gICAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBU
ZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvcik7Ci0gICAgc3RhdGljIHN0ZDo6cGFpcjx1
bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvcik7
CisgICAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudEludGVybmFsKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBQQUw6OlRleHRE
aXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yKTsKKyAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2ln
bmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIq
LCB1bnNpZ25lZCBsZW5ndGgsIFBBTDo6VGV4dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3Ip
OwogCiAgICAgZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBD
b21wbGV4VGV4dENvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA0OTQ4OGM1OTk2MzIxZmJmNjUyMjI3
N2JhMGM5NjllNTA3MGZkNWRkLi4xNmMxMGUyZGJiZmUyMzQ2YWMzNDBjODJhMTExYmY2YWUwZTE3
ZjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAotI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgog
I2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAi
RmlsdGVySW1hZ2UuaCIKQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlICJOdWxsR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgi
CisjaW5jbHVkZSA8cGFsL3RleHQvQmlkaVJlc29sdmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MjEsMjQgKzUyMSwyNCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Qmlk
aVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24g
Y3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogewotICAgIEJpZGlSZXNvbHZlcjxUZXh0Qm94SXRl
cmF0b3IsIEJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKLSAgICBiaWRpUmVzb2x2ZXIu
c2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0aW9uYWxPdmVy
cmlkZSgpKSk7CisgICAgUEFMOjpCaWRpUmVzb2x2ZXI8VGV4dEJveEl0ZXJhdG9yLCBQQUw6OkJp
ZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKKyAgICBiaWRpUmVzb2x2ZXIuc2V0U3RhdHVz
KFBBTDo6QmlkaVN0YXR1cyhydW4uZGlyZWN0aW9uKCksIHJ1bi5kaXJlY3Rpb25hbE92ZXJyaWRl
KCkpKTsKICAgICBiaWRpUmVzb2x2ZXIuc2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVz
KFRleHRCb3hJdGVyYXRvcigmcnVuLCAwKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvd25lcnNo
aXAgc2hvdWxkIGJlIHJldmVyc2VkLiBXZSBzaG91bGQgcGFzcyBCaWRpUnVuTGlzdAogICAgIC8v
IHRvIEJpZGlSZXNvbHZlciBpbiBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCi0gICAgQmlkaVJ1bkxp
c3Q8QmlkaUNoYXJhY3RlclJ1bj4mIGJpZGlSdW5zID0gYmlkaVJlc29sdmVyLnJ1bnMoKTsKKyAg
ICBQQUw6OkJpZGlSdW5MaXN0PFBBTDo6QmlkaUNoYXJhY3RlclJ1bj4mIGJpZGlSdW5zID0gYmlk
aVJlc29sdmVyLnJ1bnMoKTsKICAgICBiaWRpUmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5l
KFRleHRCb3hJdGVyYXRvcigmcnVuLCBydW4ubGVuZ3RoKCkpKTsKIAogICAgIGlmICghYmlkaVJ1
bnMucnVuQ291bnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRQb2ludCBjdXJyUG9p
bnQgPSBwb2ludDsKLSAgICBCaWRpQ2hhcmFjdGVyUnVuKiBiaWRpUnVuID0gYmlkaVJ1bnMuZmly
c3RSdW4oKTsKKyAgICBQQUw6OkJpZGlDaGFyYWN0ZXJSdW4qIGJpZGlSdW4gPSBiaWRpUnVucy5m
aXJzdFJ1bigpOwogICAgIHdoaWxlIChiaWRpUnVuKSB7CiAgICAgICAgIFRleHRSdW4gc3VicnVu
ID0gcnVuLnN1YlJ1bihiaWRpUnVuLT5zdGFydCgpLCBiaWRpUnVuLT5zdG9wKCkgLSBiaWRpUnVu
LT5zdGFydCgpKTsKICAgICAgICAgYm9vbCBpc1JUTCA9IGJpZGlSdW4tPmxldmVsKCkgJSAyOwot
ICAgICAgICBzdWJydW4uc2V0RGlyZWN0aW9uKGlzUlRMID8gVGV4dERpcmVjdGlvbjo6UlRMIDog
VGV4dERpcmVjdGlvbjo6TFRSKTsKKyAgICAgICAgc3VicnVuLnNldERpcmVjdGlvbihpc1JUTCA/
IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpOwogICAg
ICAgICBzdWJydW4uc2V0RGlyZWN0aW9uYWxPdmVycmlkZShiaWRpUnVuLT5kaXJPdmVycmlkZShm
YWxzZSkpOwogCiAgICAgICAgIGF1dG8gYWR2YW5jZSA9IGZvbnQuZHJhd1RleHQoKnRoaXMsIHN1
YnJ1biwgY3VyclBvaW50LCAwLCBzdGQ6Om51bGxvcHQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRp
bGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRp
ZXMuY3BwCmluZGV4IGI5Nzk5YTRkMTA2MWVkMjBhMWI1MGVkNTA2ODY1MWM1ZmVhNDY2YTQuLmZl
ZGE4ODJmMTI1MmE2NjUyZjRmY2IzZjk2NWQyNGI4MDk1ZGI4ODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwCkBAIC00OTUsNyAr
NDk1LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0RnJvbVBvbHlnb24o
Y29uc3QgRmxvYXRQb2ludEdyYXBoOjpQb2x5Z29uJgogfQogCiBQYXRoIFBhdGhVdGlsaXRpZXM6
OnBhdGhXaXRoU2hyaW5rV3JhcHBlZFJlY3RzRm9yT3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVjdHMsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlckRhdGEsCi0gICAgZmxvYXQgb3V0
bGluZU9mZnNldCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKKyAgICBmbG9hdCBvdXRsaW5lT2Zmc2V0LCBQ
QUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgQVNTRVJUKGJvcmRlckRhdGEuaGFzQm9yZGVy
UmFkaXVzKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
VXRpbGl0aWVzLmgKaW5kZXggNTAwMDQxYTJkNjQxOGM4MDQ3NWIxNzU2MTQ3NjhmY2JmYTY0M2Uy
NC4uMWJlZWM2MjQxNThkZTE1Yjk1N2UyNDk0M2Q0NzZmODhkYTg5YTY5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaApAQCAtMzgsNyAr
MzgsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhdGggcGF0aFdpdGhT
aHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCBy
YWRpdXMpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8UGF0aD4gcGF0aHNXaXRo
U2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
cmFkaXVzKTsKIAotICAgIHN0YXRpYyBQYXRoIHBhdGhXaXRoU2hyaW5rV3JhcHBlZFJlY3RzRm9y
T3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGNvbnN0IEJvcmRlckRhdGEmLCBmbG9h
dCBvdXRsaW5lT2Zmc2V0LCBUZXh0RGlyZWN0aW9uLCBXcml0aW5nTW9kZSwgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IpOworICAgIHN0YXRpYyBQYXRoIHBhdGhXaXRoU2hyaW5rV3JhcHBlZFJlY3Rz
Rm9yT3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGNvbnN0IEJvcmRlckRhdGEmLCBm
bG9hdCBvdXRsaW5lT2Zmc2V0LCBQQUw6OlRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlLCBmbG9h
dCBkZXZpY2VTY2FsZUZhY3Rvcik7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9UZXh0UnVuLmgKaW5kZXggMWQ0N2Q2NWQ2ODI0NjI2ZTE1OTI4ODAwZjQ2OTdjMjc2
Y2IyNzYzNC4uYmI0NjM4MDM3MWEzYTc3ZThlZDU2NjI2MjFjMGUzZjY5Y2E5NGI0YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaApAQCAtNDMsNyArNDMsNyBA
QCBzdHJ1Y3QgR2x5cGhEYXRhOwogY2xhc3MgVGV4dFJ1biB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dFJ1bihjb25zdCBTdHJpbmcmIHRl
eHQsIGZsb2F0IHhwb3MgPSAwLCBmbG9hdCBleHBhbnNpb24gPSAwLCBFeHBhbnNpb25CZWhhdmlv
ciBleHBhbnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNpb24sIFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uID0gVGV4dERpcmVjdGlvbjo6TFRSLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBm
YWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVlKQorICAgIGV4cGxpY2l0
IFRleHRSdW4oY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5z
aW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZhdWx0RXhw
YW5zaW9uLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFIsIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IGZhbHNlLCBib29sIGNoYXJhY3RlclNj
YW5Gb3JDb2RlUGF0aCA9IHRydWUpCiAgICAgICAgIDogbV90ZXh0KHRleHQpCiAgICAgICAgICwg
bV90YWJTaXplKDApCiAgICAgICAgICwgbV94cG9zKHhwb3MpCkBAIC01OSw3ICs1OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgQVNTRVJUKCFtX3RleHQuaXNOdWxsKCkpOwogICAgIH0KIAotICAgIGV4
cGxpY2l0IFRleHRSdW4oU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBmbG9hdCB4cG9zID0gMCwgZmxv
YXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBE
ZWZhdWx0RXhwYW5zaW9uLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IFRleHREaXJlY3Rpb246
OkxUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2Nh
bkZvckNvZGVQYXRoID0gdHJ1ZSkKKyAgICBleHBsaWNpdCBUZXh0UnVuKFN0cmluZ1ZpZXcgc3Ry
aW5nVmlldywgZmxvYXQgeHBvcyA9IDAsIGZsb2F0IGV4cGFuc2lvbiA9IDAsIEV4cGFuc2lvbkJl
aGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gRGVmYXVsdEV4cGFuc2lvbiwgUEFMOjpUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbiA9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSLCBib29sIGRpcmVjdGlv
bmFsT3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVl
KQogICAgICAgICA6IFRleHRSdW4oc3RyaW5nVmlldy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCks
IHhwb3MsIGV4cGFuc2lvbiwgZXhwYW5zaW9uQmVoYXZpb3IsIGRpcmVjdGlvbiwgZGlyZWN0aW9u
YWxPdmVycmlkZSwgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKQogICAgIHsKICAgICB9CkBAIC0x
MDIsMTUgKzEwMiwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRYUG9zKGZsb2F0IHhQb3MpIHsg
bV94cG9zID0geFBvczsgfQogICAgIGZsb2F0IGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwYW5zaW9uOyB9CiAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBj
b25zdCB7IHJldHVybiBtX2V4cGFuc2lvbkJlaGF2aW9yOyB9Ci0gICAgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0RGlyZWN0aW9uPihtX2Rp
cmVjdGlvbik7IH0KLSAgICBib29sIHJ0bCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRl
eHREaXJlY3Rpb24+KG1fZGlyZWN0aW9uKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7IH0KLSAgICBi
b29sIGx0cigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRleHREaXJlY3Rpb24+KG1fZGly
ZWN0aW9uKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBQQUw6OlRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpUZXh0RGlyZWN0aW9u
PihtX2RpcmVjdGlvbik7IH0KKyAgICBib29sIHJ0bCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PFBBTDo6VGV4dERpcmVjdGlvbj4obV9kaXJlY3Rpb24pID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6UlRMOyB9CisgICAgYm9vbCBsdHIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQQUw6
OlRleHREaXJlY3Rpb24+KG1fZGlyZWN0aW9uKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsg
fQogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0
aW9uYWxPdmVycmlkZTsgfQogICAgIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKCkgY29u
c3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGg7IH0KICAgICBib29sIHNwYWNp
bmdEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZVNwYWNpbmc7IH0KIAogICAgIHZv
aWQgZGlzYWJsZVNwYWNpbmcoKSB7IG1fZGlzYWJsZVNwYWNpbmcgPSB0cnVlOyB9Ci0gICAgdm9p
ZCBzZXREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIHsgbV9kaXJlY3Rpb24gPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlyZWN0aW9uKTsgfQorICAgIHZvaWQgc2V0RGlyZWN0aW9u
KFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIHsgbV9kaXJlY3Rpb24gPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZGlyZWN0aW9uKTsgfQogICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxPdmVycmlk
ZShib29sIG92ZXJyaWRlKSB7IG1fZGlyZWN0aW9uYWxPdmVycmlkZSA9IG92ZXJyaWRlOyB9CiAg
ICAgdm9pZCBzZXRDaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgoYm9vbCBzY2FuKSB7IG1fY2hhcmFj
dGVyU2NhbkZvckNvZGVQYXRoID0gc2NhbjsgfQogICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmNwcAppbmRleCBhNWFlMWFjMDAwZGE1Yjk1MmNjMjM0Mjc3YmJm
NjhiMTNkY2ExODc2Li5hM2M2M2FlMGYwMTUwMzljNTdhMjc2YjZkNTNiODMxYjlhMDk2MGQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9y
LmNwcApAQCAtNTIsNyArNTIsNyBAQCBXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZQogICAgIGlmICgh
bV9leHBhbnNpb24pCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwogICAg
IGVsc2UgewotICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9u
dENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5s
dHIoKSA/IFRleHREaXJlY3Rpb246OkxUUiA6IFRleHREaXJlY3Rpb246OlJUTCwgcnVuLmV4cGFu
c2lvbkJlaGF2aW9yKCkpLmZpcnN0OworICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4u
dGV4dCgpLCBtX3J1bi5sdHIoKSA/IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIDogUEFMOjpUZXh0
RGlyZWN0aW9uOjpSVEwsIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpKS5maXJzdDsKIAogICAgICAg
ICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCiAgICAgICAgICAgICBtX2V4cGFuc2lv
blBlck9wcG9ydHVuaXR5ID0gMDsKQEAgLTE4NCwxNCArMTg0LDE0IEBAIHZvaWQgV2lkdGhJdGVy
YXRvcjo6YXBwbHlJbml0aWFsQWR2YW5jZShHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEdseXBo
QnVmZmVyQWR2CiAKICAgICBBU1NFUlQobGFzdEdseXBoQ291bnQgfHwgKCF3aWR0aChtX2xlZnRv
dmVySW5pdGlhbEFkdmFuY2UpICYmICFoZWlnaHQobV9sZWZ0b3ZlckluaXRpYWxBZHZhbmNlKSkp
OwogCi0gICAgaWYgKG1fcnVuLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBs
YXN0R2x5cGhDb3VudCkgeworICAgIGlmIChtX3J1bi5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHRE
aXJlY3Rpb246OlJUTCAmJiBsYXN0R2x5cGhDb3VudCkgewogICAgICAgICBhdXRvJiB2aXN1YWxs
eUxhc3RBZHZhbmNlID0gKmdseXBoQnVmZmVyLmFkdmFuY2VzKGxhc3RHbHlwaENvdW50KTsKICAg
ICAgICAgZXhwYW5kV2l0aEluaXRpYWxBZHZhbmNlKHZpc3VhbGx5TGFzdEFkdmFuY2UsIG1fbGVm
dG92ZXJJbml0aWFsQWR2YW5jZSk7CiAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSB3aWR0aCht
X2xlZnRvdmVySW5pdGlhbEFkdmFuY2UpOwogICAgICAgICBtX2xlZnRvdmVySW5pdGlhbEFkdmFu
Y2UgPSBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCk7CiAgICAgfQogCi0gICAgaWYgKG1fcnVuLmRp
cmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICBpZiAobV9ydW4uZGlyZWN0aW9u
KCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgIG1fbGVmdG92ZXJJbml0aWFs
QWR2YW5jZSA9IGluaXRpYWxBZHZhbmNlOwogICAgIGVsc2UgewogICAgICAgICBpZiAobGFzdEds
eXBoQ291bnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCmluZGV4IDM2ZGQ3MGNiNWE2ZDI0ZWRjOTcy
ODBhNzY0MTQ3ZDU4NTljNDJkNTcuLmQ1NDJhMjlkM2E0NTUzYjNjNTYzZTk4ZDdiOWVmYzRjNWIz
NjhkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0
ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcApAQCAtNTkzLDcgKzU5Myw3IEBAIGZsb2F0IEZv
bnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIAogI2VuZGlmCiAK
LUdseXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpbm5pbmdHbHlwaEluZGV4LCB1bnNpZ25lZCBiZWdpbm5p
bmdTdHJpbmdJbmRleCwgYm9vbCBlbmFibGVLZXJuaW5nLCBib29sIHJlcXVpcmVzU2hhcGluZywg
Y29uc3QgQXRvbVN0cmluZyYgbG9jYWxlLCBTdHJpbmdWaWV3IHRleHQsIFRleHREaXJlY3Rpb24g
dGV4dERpcmVjdGlvbikgY29uc3QKK0dseXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRyYW5z
Zm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpbm5pbmdHbHlwaElu
ZGV4LCB1bnNpZ25lZCBiZWdpbm5pbmdTdHJpbmdJbmRleCwgYm9vbCBlbmFibGVLZXJuaW5nLCBi
b29sIHJlcXVpcmVzU2hhcGluZywgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlLCBTdHJpbmdWaWV3
IHRleHQsIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKSBjb25zdAogewogICAgIFVO
VVNFRF9QQVJBTShyZXF1aXJlc1NoYXBpbmcpOwogCkBAIC02MjQsNyArNjI0LDcgQEAgR2x5cGhC
dWZmZXJBZHZhbmNlIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsIHVuc2lnbmVkIGJlZ2kKICAgICAvLyBGSVhNRTogRW5hYmxlIGtlcm5pbmcgZm9yIHNpbmds
ZSBnbHlwaHMgd2hlbiByZGFyOi8vODIxOTU0MDUgaXMgZml4ZWQKICAgICBDVEZvbnRTaGFwZU9w
dGlvbnMgb3B0aW9ucyA9IGtDVEZvbnRTaGFwZVdpdGhDbHVzdGVyQ29tcG9zaXRpb24KICAgICAg
ICAgfCAoZW5hYmxlS2VybmluZyAmJiBudW1iZXJPZklucHV0R2x5cGhzID8ga0NURm9udFNoYXBl
V2l0aEtlcm5pbmcgOiAwKQotICAgICAgICB8ICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rp
b246OlJUTCA/IGtDVEZvbnRTaGFwZVJpZ2h0VG9MZWZ0IDogMCk7CisgICAgICAgIHwgKHRleHRE
aXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgPyBrQ1RGb250U2hhcGVSaWdodFRv
TGVmdCA6IDApOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNp
emUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKICAgICAgICAgZ2x5cGhCdWZmZXIub2Zm
c2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldIC09IGJlZ2lubmluZ1N0cmluZ0lu
ZGV4OwpAQCAtNzIxLDcgKzcyMSw3IEBAIEdseXBoQnVmZmVyQWR2YW5jZSBGb250OjphcHBseVRy
YW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpCiAgICAgLy8g
T24gdGhlIG90aGVyIGhhbmQsIENURm9udFNoYXBlR2x5cGhzKCkgYWNjZXB0cyB0aGUgYnVmZmVy
IGluIGxvZ2ljYWwgb3JkZXIgYnV0IHJldHVybnMgaXQgaW4gcGh5c2ljYWwKICAgICAvLyBvcmRl
ciwgd2hpY2ggbWVhbnMgdGhlIHNlY29uZCByZXZlcnNlKCkgaW4gdGhpcyBmdW5jdGlvbiBzdGls
bCBuZWVkcyB0byBleGVjdXRlIHdoZW4KICAgICAvLyBDVEZvbnRTaGFwZUdseXBocygpIGlzIGJl
aW5nIHVzZWQuCi0gICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQor
ICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAg
ICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNp
emUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgpOwogCiAgICAgQ1RGb250VHJhbnNmb3JtT3B0aW9u
cyBvcHRpb25zID0gKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlv
bmluZyA6IDApIHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZzsKQEAgLTczMSw3ICs3MzEs
NyBAQCBHbHlwaEJ1ZmZlckFkdmFuY2UgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVnaQogI2VuZGlmCiAKICAgICAvLyBTZWUgdGhlIGNv
bW1lbnQgYWJvdmUgaW4gdGhpcyBmdW5jdGlvbiB3aGVyZSB0aGUgb3RoZXIgY2FsbCB0byByZXZl
cnNlKCkgaXMuCi0gICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQor
ICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAg
ICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNp
emUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgpOwogCiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21l
dHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxlY3Rpb25HZW9tZXRyeS5j
cHAKaW5kZXggM2RkOTdjMTNlZDc0ZDBhMjdiNmIzZjExODdjZGU4YTQwN2NjMWMzNC4uY2ExZTc3
NGM3MWQ4OGZhNWE2NDljYzIzNjIzOTcxYWRkYzMyMDA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvU2VsZWN0aW9uR2VvbWV0cnkuY3BwCkBAIC00MCw3ICs0MCw3IEBA
IFNlbGVjdGlvbkdlb21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRyeShjb25zdCBGbG9hdFF1YWQmIHF1
YWQsIFNlbGVjdGlvblJlbmRlcmluZ0JlCiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSBz
b21lIG9mIHRoZXNlIGFyZ3VtZW50cyB0byBhbiBhdXhpbGxhcnkgc3RydWN0LgotU2VsZWN0aW9u
R2VvbWV0cnk6OlNlbGVjdGlvbkdlb21ldHJ5KGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgU2VsZWN0
aW9uUmVuZGVyaW5nQmVoYXZpb3IgYmVoYXZpb3IsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBp
bnQgbWluWCwgaW50IG1heFgsIGludCBtYXhZLCBpbnQgbGluZU51bWJlciwgYm9vbCBpc0xpbmVC
cmVhaywgYm9vbCBpc0ZpcnN0T25MaW5lLCBib29sIGlzTGFzdE9uTGluZSwgYm9vbCBjb250YWlu
c1N0YXJ0LCBib29sIGNvbnRhaW5zRW5kLCBib29sIGlzSG9yaXpvbnRhbCwgYm9vbCBpc0luRml4
ZWRQb3NpdGlvbiwgYm9vbCBpc1J1YnlUZXh0LCBpbnQgcGFnZU51bWJlcikKK1NlbGVjdGlvbkdl
b21ldHJ5OjpTZWxlY3Rpb25HZW9tZXRyeShjb25zdCBGbG9hdFF1YWQmIHF1YWQsIFNlbGVjdGlv
blJlbmRlcmluZ0JlaGF2aW9yIGJlaGF2aW9yLCBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9u
LCBpbnQgbWluWCwgaW50IG1heFgsIGludCBtYXhZLCBpbnQgbGluZU51bWJlciwgYm9vbCBpc0xp
bmVCcmVhaywgYm9vbCBpc0ZpcnN0T25MaW5lLCBib29sIGlzTGFzdE9uTGluZSwgYm9vbCBjb250
YWluc1N0YXJ0LCBib29sIGNvbnRhaW5zRW5kLCBib29sIGlzSG9yaXpvbnRhbCwgYm9vbCBpc0lu
Rml4ZWRQb3NpdGlvbiwgYm9vbCBpc1J1YnlUZXh0LCBpbnQgcGFnZU51bWJlcikKICAgICA6IG1f
cXVhZChxdWFkKQogICAgICwgbV9iZWhhdmlvcihiZWhhdmlvcikKICAgICAsIG1fZGlyZWN0aW9u
KGRpcmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TZWxl
Y3Rpb25HZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdl
b21ldHJ5LmgKaW5kZXggYzhhNGIxZWE4YTEyODY3NDQxNzg1NmEyYzBjNWI4NDdmOTRhZTY3MC4u
MzcyNTZiOGVhOGMwMzlmNjc2N2UwNDJhZTcwNjIwOGQ1ZDZjNmYwOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1NlbGVjdGlvbkdlb21ldHJ5LmgKQEAgLTQxLDcgKzQxLDcg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IFNlbGVjdGlvbkdlb21ldHJ5
KGNvbnN0IEZsb2F0UXVhZCYsIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yLCBib29sIGlzSG9y
aXpvbnRhbCwgaW50IGNvbHVtbk51bWJlcik7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1v
dmUgc29tZSBvZiB0aGVzZSBhcmd1bWVudHMgdG8gYW4gYXV4aWxsYXJ5IHN0cnVjdC4KLSAgICBT
ZWxlY3Rpb25HZW9tZXRyeShjb25zdCBGbG9hdFF1YWQmLCBTZWxlY3Rpb25SZW5kZXJpbmdCZWhh
dmlvciwgVGV4dERpcmVjdGlvbiwgaW50LCBpbnQsIGludCwgaW50LCBib29sLCBib29sLCBib29s
LCBib29sLCBib29sLCBib29sLCBib29sLCBib29sLCBpbnQpOworICAgIFNlbGVjdGlvbkdlb21l
dHJ5KGNvbnN0IEZsb2F0UXVhZCYsIFNlbGVjdGlvblJlbmRlcmluZ0JlaGF2aW9yLCBQQUw6OlRl
eHREaXJlY3Rpb24sIGludCwgaW50LCBpbnQsIGludCwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCwg
Ym9vbCwgYm9vbCwgYm9vbCwgYm9vbCwgaW50KTsKICAgICBTZWxlY3Rpb25HZW9tZXRyeSgpID0g
ZGVmYXVsdDsKICAgICB+U2VsZWN0aW9uR2VvbWV0cnkoKSA9IGRlZmF1bHQ7CiAKQEAgLTU2LDcg
KzU2LDcgQEAgcHVibGljOgogICAgIGludCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9p
c0hvcml6b250YWwgPyByZWN0KCkueSgpIDogcmVjdCgpLngoKTsgfQogICAgIGludCBsb2dpY2Fs
SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9pc0hvcml6b250YWwgPyByZWN0KCkuaGVpZ2h0KCkg
OiByZWN0KCkud2lkdGgoKTsgfQogCi0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQogICAgIGludCBtaW5YKCkgY29uc3Qg
eyByZXR1cm4gbV9taW5YOyB9CiAgICAgaW50IG1heFgoKSBjb25zdCB7IHJldHVybiBtX21heFg7
IH0KICAgICBpbnQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4WTsgfQpAQCAtNzcsNyArNzcs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMb2dpY2FsVG9wKGludCk7CiAgICAgdm9pZCBzZXRM
b2dpY2FsSGVpZ2h0KGludCk7CiAKLSAgICB2b2lkIHNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsgfQorICAgIHZvaWQgc2V0RGly
ZWN0aW9uKFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIHsgbV9kaXJlY3Rpb24gPSBkaXJl
Y3Rpb247IH0KICAgICB2b2lkIHNldE1pblgoaW50IG1pblgpIHsgbV9taW5YID0gbWluWDsgfQog
ICAgIHZvaWQgc2V0TWF4WChpbnQgbWF4WCkgeyBtX21heFggPSBtYXhYOyB9CiAgICAgdm9pZCBz
ZXRNYXhZKGludCBtYXhZKSB7IG1fbWF4WSA9IG1heFk7IH0KQEAgLTkzLDcgKzkzLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBGbG9hdFF1YWQgbV9xdWFkOwogICAgIFNlbGVjdGlvblJlbmRl
cmluZ0JlaGF2aW9yIG1fYmVoYXZpb3IgeyBTZWxlY3Rpb25SZW5kZXJpbmdCZWhhdmlvcjo6Q29h
bGVzY2VCb3VuZGluZ1JlY3RzIH07Ci0gICAgVGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbiB7IFRl
eHREaXJlY3Rpb246OkxUUiB9OworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbiB7
IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIH07CiAgICAgaW50IG1fbWluWCB7IDAgfTsKICAgICBp
bnQgbV9tYXhYIHsgMCB9OwogICAgIGludCBtX21heFkgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0NWNkMTBiZjM0ODYyYzhlZWVhMmI4NDFjNzVjN2ZkZGE5NmY5ZGZmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0IHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJpZGlDb250ZXh0LmgiCi0KLSNpbmNs
dWRlIDxtdXRleD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IFNhbWVTaXplQXNC
aWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlkaUNv
bnRleHQ+IHsKLSAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAxNjsKLSAgICB2b2lkKiBwYXJlbnQ7
Ci19OwotCi1DT01QSUxFX0FTU0VSVChzaXplb2YoQmlkaUNvbnRleHQpID09IHNpemVvZihTYW1l
U2l6ZUFzQmlkaUNvbnRleHQpLCBCaWRpQ29udGV4dF9zaG91bGRfc3RheV9zbWFsbCk7Ci0KLWlu
bGluZSBCaWRpQ29udGV4dDo6QmlkaUNvbnRleHQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJE
aXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1iZWRkaW5nU291cmNlIHNv
dXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKLSAgICA6IG1fbGV2ZWwobGV2ZWwpCi0gICAgLCBt
X2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgLCBtX292ZXJyaWRlKG92ZXJyaWRlKQotICAgICwg
bV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9wYXJlbnQocGFyZW50KQotewotfQotCi1pbmxpbmUg
UmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y3JlYXRlVW5jYWNoZWQodW5zaWduZWQgY2hh
ciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sIG92ZXJyaWRlLCBCaWRpRW1i
ZWRkaW5nU291cmNlIHNvdXJjZSwgQmlkaUNvbnRleHQqIHBhcmVudCkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBCaWRpQ29udGV4dChsZXZlbCwgZGlyZWN0aW9uLCBvdmVycmlkZSwgc291
cmNlLCBwYXJlbnQpKTsKLX0KLQotUmVmPEJpZGlDb250ZXh0PiBCaWRpQ29udGV4dDo6Y3JlYXRl
KHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBvdmVy
cmlkZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpCi17
Ci0gICAgQVNTRVJUKGRpcmVjdGlvbiA9PSAobGV2ZWwgJSAyID8gVV9SSUdIVF9UT19MRUZUIDog
VV9MRUZUX1RPX1JJR0hUKSk7Ci0KLSAgICBpZiAocGFyZW50KQotICAgICAgICByZXR1cm4gY3Jl
YXRlVW5jYWNoZWQobGV2ZWwsIGRpcmVjdGlvbiwgb3ZlcnJpZGUsIHNvdXJjZSwgcGFyZW50KTsK
LQotICAgIEFTU0VSVChsZXZlbCA8PSAxKTsKLSAgICBpZiAoIWxldmVsKSB7Ci0gICAgICAgIGlm
ICghb3ZlcnJpZGUpIHsKLSAgICAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8
QmlkaUNvbnRleHQ+PiBsdHJDb250ZXh0OwotICAgICAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIGx0ckNvbnRleHRPbmNlRmxhZzsKLSAgICAgICAgICAgIHN0ZDo6Y2FsbF9vbmNlKGx0ckNv
bnRleHRPbmNlRmxhZywgWyZdKCkgewotICAgICAgICAgICAgICAgIGx0ckNvbnRleHQuZ2V0KCkg
PSBjcmVhdGVVbmNhY2hlZCgwLCBVX0xFRlRfVE9fUklHSFQsIGZhbHNlLCBGcm9tU3R5bGVPckRP
TSwgMCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybiAqbHRyQ29udGV4dC5n
ZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8
QmlkaUNvbnRleHQ+PiBsdHJPdmVycmlkZUNvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBsdHJPdmVycmlkZUNvbnRleHRPbmNlRmxhZzsKLSAgICAgICAgc3RkOjpjYWxsX29u
Y2UobHRyT3ZlcnJpZGVDb250ZXh0T25jZUZsYWcsIFsmXSgpIHsKLSAgICAgICAgICAgIGx0ck92
ZXJyaWRlQ29udGV4dC5nZXQoKSA9IGNyZWF0ZVVuY2FjaGVkKDAsIFVfTEVGVF9UT19SSUdIVCwg
dHJ1ZSwgRnJvbVN0eWxlT3JET00sIDApOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICps
dHJPdmVycmlkZUNvbnRleHQuZ2V0KCk7Ci0gICAgfQotCi0gICAgaWYgKCFvdmVycmlkZSkgewot
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPEJpZGlDb250ZXh0Pj4gcnRsQ29u
dGV4dDsKLSAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHJ0bENvbnRleHRPbmNlRmxhZzsK
LSAgICAgICAgc3RkOjpjYWxsX29uY2UocnRsQ29udGV4dE9uY2VGbGFnLCBbJl0oKSB7Ci0gICAg
ICAgICAgICBydGxDb250ZXh0LmdldCgpID0gY3JlYXRlVW5jYWNoZWQoMSwgVV9SSUdIVF9UT19M
RUZULCBmYWxzZSwgRnJvbVN0eWxlT3JET00sIDApOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0
dXJuICpydGxDb250ZXh0LmdldCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxSZWZQdHI8QmlkaUNvbnRleHQ+PiBydGxPdmVycmlkZUNvbnRleHQ7Ci0gICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIHJ0bE92ZXJyaWRlQ29udGV4dE9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9v
bmNlKHJ0bE92ZXJyaWRlQ29udGV4dE9uY2VGbGFnLCBbJl0oKSB7Ci0gICAgICAgIHJ0bE92ZXJy
aWRlQ29udGV4dC5nZXQoKSA9IGNyZWF0ZVVuY2FjaGVkKDEsIFVfUklHSFRfVE9fTEVGVCwgdHJ1
ZSwgRnJvbVN0eWxlT3JET00sIDApOwotICAgIH0pOwotICAgIHJldHVybiAqcnRsT3ZlcnJpZGVD
b250ZXh0LmdldCgpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlZjxCaWRpQ29udGV4dD4gY29weUNv
bnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwoQmlkaUNvbnRleHQmIGNvbnRleHQsIEJpZGlDb250ZXh0
KiBwYXJlbnQpCi17Ci0gICAgYXV0byBuZXdMZXZlbCA9IHBhcmVudCA/IHBhcmVudC0+bGV2ZWwo
KSA6IDA7Ci0gICAgaWYgKGNvbnRleHQuZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKQotICAgICAg
ICBuZXdMZXZlbCA9IG5leHRHcmVhdGVyT2RkTGV2ZWwobmV3TGV2ZWwpOwotICAgIGVsc2UgaWYg
KHBhcmVudCkKLSAgICAgICAgbmV3TGV2ZWwgPSBuZXh0R3JlYXRlckV2ZW5MZXZlbChuZXdMZXZl
bCk7Ci0gICAgcmV0dXJuIEJpZGlDb250ZXh0OjpjcmVhdGUobmV3TGV2ZWwsIGNvbnRleHQuZGly
KCksIGNvbnRleHQub3ZlcnJpZGUoKSwgY29udGV4dC5zb3VyY2UoKSwgcGFyZW50KTsKLX0KLQot
Ly8gVGhlIEJpZGlDb250ZXh0IHN0YWNrIG11c3QgYmUgaW1tdXRhYmxlIC0tIHRoZXkncmUgcmUt
dXNlZCBmb3IgcmUtbGF5b3V0IGFmdGVyCi0vLyBET00gbW9kaWZpY2F0aW9uL2VkaXRpbmcgLS0g
c28gd2UgY29weSBhbGwgdGhlIG5vbi1Vbmljb2RlIGNvbnRleHRzLCBhbmQKLS8vIHJlY2FsY3Vs
YXRlIHRoZWlyIGxldmVscy4KLVJlZjxCaWRpQ29udGV4dD4gQmlkaUNvbnRleHQ6OmNvcHlTdGFj
a1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0NvbnRleHRzKCkKLXsKLSAgICBWZWN0b3I8QmlkaUNv
bnRleHQqLCA2ND4gY29udGV4dHM7Ci0gICAgZm9yIChhdXRvKiBhbmNlc3RvciA9IHRoaXM7IGFu
Y2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoYW5j
ZXN0b3ItPnNvdXJjZSgpICE9IEZyb21Vbmljb2RlKQotICAgICAgICAgICAgY29udGV4dHMuYXBw
ZW5kKGFuY2VzdG9yKTsKLSAgICB9Ci0gICAgQVNTRVJUKGNvbnRleHRzLnNpemUoKSk7Ci0gICAg
YXV0byB0b3BDb250ZXh0ID0gY29weUNvbnRleHRBbmRSZWJhc2VsaW5lTGV2ZWwoKmNvbnRleHRz
Lmxhc3QoKSwgbnVsbHB0cik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gY29udGV4dHMuc2l6ZSgp
IC0gMTsgaTsgLS1pKQotICAgICAgICB0b3BDb250ZXh0ID0gY29weUNvbnRleHRBbmRSZWJhc2Vs
aW5lTGV2ZWwoKmNvbnRleHRzW2kgLSAxXSwgdG9wQ29udGV4dC5wdHIoKSk7Ci0gICAgcmV0dXJu
IHRvcENvbnRleHQ7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBCaWRpQ29udGV4dCYgYzEs
IGNvbnN0IEJpZGlDb250ZXh0JiBjMikKLXsKLSAgICBpZiAoJmMxID09ICZjMikKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgaWYgKGMxLmxldmVsKCkgIT0gYzIubGV2ZWwoKSB8fCBjMS5vdmVy
cmlkZSgpICE9IGMyLm92ZXJyaWRlKCkgfHwgYzEuZGlyKCkgIT0gYzIuZGlyKCkgfHwgYzEuc291
cmNlKCkgIT0gYzIuc291cmNlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWMx
LnBhcmVudCgpKQotICAgICAgICByZXR1cm4gIWMyLnBhcmVudCgpOwotICAgIHJldHVybiBjMi5w
YXJlbnQoKSAmJiAqYzEucGFyZW50KCkgPT0gKmMyLnBhcmVudCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Jp
ZGlDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhOGQ5MDllZWE5MWI2MTllNTM5NDY5ZmRh
Y2ZjNGYzYTI2MDNkNzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHVuaWNv
ZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBCaWRpRW1i
ZWRkaW5nU291cmNlIHsgRnJvbVN0eWxlT3JET00sIEZyb21Vbmljb2RlIH07Ci0KLS8vIFVzZWQg
dG8ga2VlcCB0cmFjayBvZiBleHBsaWNpdCBlbWJlZGRpbmdzLgotY2xhc3MgQmlkaUNvbnRleHQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKLXB1YmxpYzoKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEJpZGlDb250ZXh0PiBjcmVhdGUodW5zaWduZWQg
Y2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUgPSBmYWxzZSwgQmlkaUVt
YmVkZGluZ1NvdXJjZSA9IEZyb21TdHlsZU9yRE9NLCBCaWRpQ29udGV4dCogcGFyZW50ID0gbnVs
bHB0cik7Ci0KLSAgICBCaWRpQ29udGV4dCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJl
bnQuZ2V0KCk7IH0KLSAgICB1bnNpZ25lZCBjaGFyIGxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9s
ZXZlbDsgfQotICAgIFVDaGFyRGlyZWN0aW9uIGRpcigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PFVDaGFyRGlyZWN0aW9uPihtX2RpcmVjdGlvbik7IH0KLSAgICBib29sIG92ZXJyaWRlKCkg
Y29uc3QgeyByZXR1cm4gbV9vdmVycmlkZTsgfQotICAgIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291
cmNlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlkaUVtYmVkZGluZ1NvdXJjZT4obV9z
b3VyY2UpOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8QmlkaUNvbnRleHQ+IGNvcHlTdGFj
a1JlbW92aW5nVW5pY29kZUVtYmVkZGluZ0NvbnRleHRzKCk7Ci0KLXByaXZhdGU6Ci0gICAgQmlk
aUNvbnRleHQodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJp
ZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2UsIEJpZGlDb250ZXh0KiBwYXJlbnQpOwotCi0gICAgc3Rh
dGljIFJlZjxCaWRpQ29udGV4dD4gY3JlYXRlVW5jYWNoZWQodW5zaWduZWQgY2hhciBsZXZlbCwg
VUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUsIEJpZGlFbWJlZGRpbmdTb3VyY2UsIEJpZGlD
b250ZXh0KiBwYXJlbnQpOwotCi0gICAgdW5zaWduZWQgbV9sZXZlbCA6IDY7IC8vIFRoZSBtYXhp
bWl1bSBiaWRpIGxldmVsIGlzIDYyOiBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkvI0V4
cGxpY2l0X0xldmVsc19hbmRfRGlyZWN0aW9ucwotICAgIHVuc2lnbmVkIG1fZGlyZWN0aW9uIDog
NTsgLy8gRGlyZWN0aW9uCi0gICAgdW5zaWduZWQgbV9vdmVycmlkZSA6IDE7Ci0gICAgdW5zaWdu
ZWQgbV9zb3VyY2UgOiAxOyAvLyBCaWRpRW1iZWRkaW5nU291cmNlCi0gICAgUmVmUHRyPEJpZGlD
b250ZXh0PiBtX3BhcmVudDsKLX07Ci0KLWlubGluZSB1bnNpZ25lZCBjaGFyIG5leHRHcmVhdGVy
T2RkTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkKLXsKLSAgICByZXR1cm4gKGxldmVsICsgMSkg
fCAxOwotfQotCi1pbmxpbmUgdW5zaWduZWQgY2hhciBuZXh0R3JlYXRlckV2ZW5MZXZlbCh1bnNp
Z25lZCBjaGFyIGxldmVsKQotewotICAgIHJldHVybiAobGV2ZWwgKyAyKSAmIH4xOwotfQotCi1i
b29sIG9wZXJhdG9yPT0oY29uc3QgQmlkaUNvbnRleHQmLCBjb25zdCBCaWRpQ29udGV4dCYpOwot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9C
aWRpUmVzb2x2ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlkOWU0NmUwODY1
NjhkYzkwN2FiNTg0ZGM0MjY2ODU3MDVmZGNmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNv
bHZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
My0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiQmlkaUNvbnRleHQuaCIKLSNpbmNsdWRlICJCaWRpUnVuTGlzdC5oIgotI2lu
Y2x1ZGUgIldyaXRpbmdNb2RlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyT2JqZWN0OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvcj4gY2xhc3MgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAg
dm9pZCByZXNldCgpCi0gICAgewotICAgICAgICBtX3RyYW5zaXRpb25zLmNsZWFyKCk7Ci0gICAg
ICAgIG1fY3VycmVudFRyYW5zaXRpb24gPSAwOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHN0YXJ0
SWdub3JpbmdTcGFjZXMoY29uc3QgSXRlcmF0b3ImIHRyYW5zaXRpb24pCi0gICAgewotICAgICAg
ICBBU1NFUlQoIShtX3RyYW5zaXRpb25zLnNpemUoKSAlIDIpKTsKLSAgICAgICAgbV90cmFuc2l0
aW9ucy5hcHBlbmQodHJhbnNpdGlvbik7Ci0gICAgfQotCi0gICAgdm9pZCBzdG9wSWdub3JpbmdT
cGFjZXMoY29uc3QgSXRlcmF0b3ImIHRyYW5zaXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlQo
bV90cmFuc2l0aW9ucy5zaXplKCkgJSAyKTsKLSAgICAgICAgbV90cmFuc2l0aW9ucy5hcHBlbmQo
dHJhbnNpdGlvbik7Ci0gICAgfQotCi0gICAgLy8gV2hlbiBpZ25vcmluZyBzcGFjZXMsIHRoaXMg
bmVlZHMgdG8gYmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgbmVlZCBsaW5lIGJveGVzIHN1Y2gg
YXMgUmVuZGVySW5saW5lcyBvcgotICAgIC8vIGhhcmQgbGluZSBicmVha3MgdG8gZW5zdXJlIHRo
YXQgdGhleSdyZSBub3QgaWdub3JlZC4KLSAgICB2b2lkIGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25v
cmVkU3BhY2VzKFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCi0gICAgewotICAgICAgICBJdGVyYXRv
ciB0cmFuc2l0aW9uKDAsICZyZW5kZXJlciwgMCk7Ci0gICAgICAgIHN0b3BJZ25vcmluZ1NwYWNl
cyh0cmFuc2l0aW9uKTsKLSAgICAgICAgc3RhcnRJZ25vcmluZ1NwYWNlcyh0cmFuc2l0aW9uKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGRlY3JlbWVudFRyYW5zaXRpb25BdChzaXplX3QgaW5kZXgpCi0g
ICAgewotICAgICAgICBtX3RyYW5zaXRpb25zW2luZGV4XS5mYXN0RGVjcmVtZW50KCk7Ci0gICAg
fQotCi0gICAgY29uc3QgVmVjdG9yPEl0ZXJhdG9yPiYgdHJhbnNpdGlvbnMoKSB7IHJldHVybiBt
X3RyYW5zaXRpb25zOyB9Ci0gICAgc2l6ZV90IG51bVRyYW5zaXRpb25zKCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc2l0aW9ucy5zaXplKCk7IH0KLSAgICBzaXplX3QgY3VycmVudFRyYW5zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUcmFuc2l0aW9uOyB9Ci0gICAgdm9pZCBzZXRDdXJy
ZW50VHJhbnNpdGlvbihzaXplX3QgY3VycmVudFRyYW5zaXRpb24pIHsgbV9jdXJyZW50VHJhbnNp
dGlvbiA9IGN1cnJlbnRUcmFuc2l0aW9uOyB9Ci0gICAgdm9pZCBpbmNyZW1lbnRDdXJyZW50VHJh
bnNpdGlvbigpIHsgKyttX2N1cnJlbnRUcmFuc2l0aW9uOyB9Ci0gICAgdm9pZCBkZWNyZW1lbnRO
dW1UcmFuc2l0aW9ucygpIHsgbV90cmFuc2l0aW9ucy5zaHJpbmsobV90cmFuc2l0aW9ucy5zaXpl
KCkgLSAxKTsgfQotICAgIGJvb2wgYmV0d2VlblRyYW5zaXRpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50VHJhbnNpdGlvbiAlIDI7IH0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPEl0ZXJhdG9y
PiBtX3RyYW5zaXRpb25zOwotICAgIHNpemVfdCBtX2N1cnJlbnRUcmFuc2l0aW9uIHsgMCB9Owot
fTsKLQotLy8gVGhlIEJpZGlTdGF0dXMgYXQgYSBnaXZlbiBwb3NpdGlvbiAodHlwaWNhbGx5IHRo
ZSBlbmQgb2YgYSBsaW5lKSBjYW4KLS8vIGJlIGNhY2hlZCBhbmQgdGhlbiB1c2VkIHRvIHJlc3Rh
cnQgYmlkaSByZXNvbHV0aW9uIGF0IHRoYXQgcG9zaXRpb24uCi1zdHJ1Y3QgQmlkaVN0YXR1cyB7
Ci0gICAgQmlkaVN0YXR1cygpID0gZGVmYXVsdDsKLQotICAgIC8vIENyZWF0ZXMgYSBCaWRpU3Rh
dHVzIHJlcHJlc2VudGluZyBhIG5ldyBwYXJhZ3JhcGggcm9vdCB3aXRoIGEgZGVmYXVsdCBkaXJl
Y3Rpb24uCi0gICAgLy8gVXNlcyBUZXh0RGlyZWN0aW9uIGFzIGl0IG9ubHkgaGFzIHR3byBwb3Nz
aWJpbGl0aWVzIGluc3RlYWQgb2YgVUNoYXJEaXJlY3Rpb24gd2hpY2ggaGFzIGF0IGxlYXN0IDE5
LgotICAgIEJpZGlTdGF0dXMoVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgaXNPdmVycmlk
ZSkKLSAgICAgICAgOiBlb3IoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IFVfTEVG
VF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVCkKLSAgICAgICAgLCBsYXN0U3Ryb25nKGVvcikK
LSAgICAgICAgLCBsYXN0KGVvcikKLSAgICAgICAgLCBjb250ZXh0KEJpZGlDb250ZXh0OjpjcmVh
dGUoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IDAgOiAxLCBlb3IsIGlzT3ZlcnJp
ZGUpKQotICAgIHsKLSAgICB9Ci0KLSAgICBCaWRpU3RhdHVzKFVDaGFyRGlyZWN0aW9uIGVvciwg
VUNoYXJEaXJlY3Rpb24gbGFzdFN0cm9uZywgVUNoYXJEaXJlY3Rpb24gbGFzdCwgUmVmUHRyPEJp
ZGlDb250ZXh0PiYmIGNvbnRleHQpCi0gICAgICAgIDogZW9yKGVvcikKLSAgICAgICAgLCBsYXN0
U3Ryb25nKGxhc3RTdHJvbmcpCi0gICAgICAgICwgbGFzdChsYXN0KQotICAgICAgICAsIGNvbnRl
eHQoV1RGTW92ZShjb250ZXh0KSkKLSAgICB7Ci0gICAgfQotCi0gICAgVUNoYXJEaXJlY3Rpb24g
ZW9yIHsgVV9PVEhFUl9ORVVUUkFMIH07Ci0gICAgVUNoYXJEaXJlY3Rpb24gbGFzdFN0cm9uZyB7
IFVfT1RIRVJfTkVVVFJBTCB9OwotICAgIFVDaGFyRGlyZWN0aW9uIGxhc3QgeyBVX09USEVSX05F
VVRSQUwgfTsKLSAgICBSZWZQdHI8QmlkaUNvbnRleHQ+IGNvbnRleHQ7Ci19OwotCi1zdHJ1Y3Qg
QmlkaUVtYmVkZGluZyB7Ci0gICAgQmlkaUVtYmVkZGluZyhVQ2hhckRpcmVjdGlvbiBkaXJlY3Rp
b24sIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlKQotICAgICAgICA6IGRpcmVjdGlvbihkaXJl
Y3Rpb24pCi0gICAgICAgICwgc291cmNlKHNvdXJjZSkKLSAgICB7Ci0gICAgfQotCi0gICAgVUNo
YXJEaXJlY3Rpb24gZGlyZWN0aW9uOwotICAgIEJpZGlFbWJlZGRpbmdTb3VyY2Ugc291cmNlOwot
fTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMxLCBj
b25zdCBCaWRpU3RhdHVzJiBzdGF0dXMyKQotewotICAgIHJldHVybiBzdGF0dXMxLmVvciA9PSBz
dGF0dXMyLmVvciAmJiBzdGF0dXMxLmxhc3QgPT0gc3RhdHVzMi5sYXN0ICYmIHN0YXR1czEubGFz
dFN0cm9uZyA9PSBzdGF0dXMyLmxhc3RTdHJvbmcgJiYgKihzdGF0dXMxLmNvbnRleHQpID09ICoo
c3RhdHVzMi5jb250ZXh0KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBCaWRp
U3RhdHVzJiBzdGF0dXMxLCBjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMyKQotewotICAgIHJldHVy
biAhKHN0YXR1czEgPT0gc3RhdHVzMik7Ci19Ci0KLXN0cnVjdCBCaWRpQ2hhcmFjdGVyUnVuIHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBCaWRpQ2hhcmFjdGVy
UnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBzdG9wLCBCaWRpQ29udGV4dCogY29udGV4dCwg
VUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKQotICAgICAgICA6IG1fc3RhcnQoc3RhcnQpCi0gICAg
ICAgICwgbV9zdG9wKHN0b3ApCi0gICAgICAgICwgbV9vdmVycmlkZShjb250ZXh0LT5vdmVycmlk
ZSgpKQotICAgIHsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwpCi0g
ICAgICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LT5kaXIoKTsKLQotICAgICAgICBtX2xldmVs
ID0gY29udGV4dC0+bGV2ZWwoKTsKLQotICAgICAgICAvLyBhZGQgbGV2ZWwgb2YgcnVuIChjYXNl
cyBJMSAmIEkyKQotICAgICAgICBpZiAobV9sZXZlbCAlIDIpIHsKLSAgICAgICAgICAgIGlmIChk
aXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUIHx8IGRpcmVjdGlvbiA9PSBVX0FSQUJJQ19OVU1C
RVIgfHwgZGlyZWN0aW9uID09IFVfRVVST1BFQU5fTlVNQkVSKQotICAgICAgICAgICAgICAgIG1f
bGV2ZWwrKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0g
VV9SSUdIVF9UT19MRUZUKQotICAgICAgICAgICAgICAgIG1fbGV2ZWwrKzsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBVX0FSQUJJQ19OVU1CRVIgfHwgZGlyZWN0aW9uID09IFVf
RVVST1BFQU5fTlVNQkVSKQotICAgICAgICAgICAgICAgIG1fbGV2ZWwgKz0gMjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIH5CaWRpQ2hhcmFjdGVyUnVuKCkKLSAgICB7Ci0gICAgICAgIC8vIERl
bGV0ZSB0aGUgbGlua2VkIGxpc3QgaW4gYSBsb29wIHRvIHByZXZlbnQgZGVzdHJ1Y3RvciByZWN1
cnNpb24uCi0gICAgICAgIGF1dG8gbmV4dCA9IFdURk1vdmUobV9uZXh0KTsKLSAgICAgICAgd2hp
bGUgKG5leHQpCi0gICAgICAgICAgICBuZXh0ID0gV1RGTW92ZShuZXh0LT5tX25leHQpOwotICAg
IH0KLQotICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQotICAg
IHVuc2lnbmVkIHN0b3AoKSBjb25zdCB7IHJldHVybiBtX3N0b3A7IH0KLSAgICB1bnNpZ25lZCBj
aGFyIGxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9sZXZlbDsgfQotICAgIGJvb2wgcmV2ZXJzZWQo
Ym9vbCB2aXN1YWxseU9yZGVyZWQpIHsgcmV0dXJuIG1fbGV2ZWwgJSAyICYmICF2aXN1YWxseU9y
ZGVyZWQ7IH0KLSAgICBib29sIGRpck92ZXJyaWRlKGJvb2wgdmlzdWFsbHlPcmRlcmVkKSB7IHJl
dHVybiBtX292ZXJyaWRlIHx8IHZpc3VhbGx5T3JkZXJlZDsgfQotCi0gICAgQmlkaUNoYXJhY3Rl
clJ1biogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiB0YWtlTmV4dCgpIHsgcmV0dXJuIFdURk1vdmUobV9u
ZXh0KTsgfQotICAgIHZvaWQgc2V0TmV4dChzdGQ6OnVuaXF1ZV9wdHI8QmlkaUNoYXJhY3RlclJ1
bj4mJiBuZXh0KSB7IG1fbmV4dCA9IFdURk1vdmUobmV4dCk7IH0KLQotcHJpdmF0ZToKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8QmlkaUNoYXJhY3RlclJ1bj4gbV9uZXh0OwotCi1wdWJsaWM6Ci0gICAg
dW5zaWduZWQgbV9zdGFydDsKLSAgICB1bnNpZ25lZCBtX3N0b3A7Ci0gICAgdW5zaWduZWQgY2hh
ciBtX2xldmVsOwotICAgIGJvb2wgbV9vdmVycmlkZSA6IDE7Ci0gICAgYm9vbCBtX2hhc0h5cGhl
biA6IDE7IC8vIFVzZWQgYnkgQmlkaVJ1biBzdWJjbGFzcyB3aGljaCBpcyBhIGxheWVyaW5nIHZp
b2xhdGlvbiBidXQgZW5hYmxlcyB1cyB0byBzYXZlIDggYnl0ZXMgcGVyIG9iamVjdCBvbiA2NC1i
aXQuCi19OwotCi1lbnVtIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIHsKLSAgICBOb1Zpc3VhbE92
ZXJyaWRlLAotICAgIFZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUsCi0gICAgVmlzdWFsUmlnaHRU
b0xlZnRPdmVycmlkZQotfTsKLQotLy8gQmlkaVJlc29sdmVyIGlzIFdlYktpdCdzIGltcGxlbWVu
dGF0aW9uIG9mIHRoZSBVbmljb2RlIEJpZGkgQWxnb3JpdGhtCi0vLyBodHRwOi8vdW5pY29kZS5v
cmcvcmVwb3J0cy90cjkKLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4s
IHR5cGVuYW1lIERlcml2ZWRDbGFzcz4gY2xhc3MgQmlkaVJlc29sdmVyQmFzZSB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQmlkaVJlc29sdmVyQmFzZSk7Ci1wdWJsaWM6Ci0gICAgY29uc3Qg
SXRlcmF0b3ImIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50OyB9Ci0gICAgdm9p
ZCBzZXRQb3NpdGlvbklnbm9yaW5nTmVzdGVkSXNvbGF0ZXMoY29uc3QgSXRlcmF0b3ImIHBvc2l0
aW9uKSB7IG1fY3VycmVudCA9IHBvc2l0aW9uOyB9Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25z
dCBJdGVyYXRvciYgcG9zaXRpb24sIHVuc2lnbmVkIG5lc3RlZElzb2xhdGVkQ291bnQpCi0gICAg
ewotICAgICAgICBtX2N1cnJlbnQgPSBwb3NpdGlvbjsKLSAgICAgICAgbV9uZXN0ZWRJc29sYXRl
Q291bnQgPSBuZXN0ZWRJc29sYXRlZENvdW50OwotICAgIH0KLQotICAgIHZvaWQgaW5jcmVtZW50
KCkgeyBzdGF0aWNfY2FzdDxEZXJpdmVkQ2xhc3MmPigqdGhpcykuaW5jcmVtZW50SW50ZXJuYWwo
KTsgfQotCi0gICAgQmlkaUNvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1
cy5jb250ZXh0LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRDb250ZXh0KFJlZlB0cjxCaWRpQ29udGV4
dD4mJiBjb250ZXh0KSB7IG1fc3RhdHVzLmNvbnRleHQgPSBXVEZNb3ZlKGNvbnRleHQpOyB9Ci0K
LSAgICB2b2lkIHNldExhc3REaXIoVUNoYXJEaXJlY3Rpb24gbGFzdERpcikgeyBtX3N0YXR1cy5s
YXN0ID0gbGFzdERpcjsgfQotICAgIHZvaWQgc2V0TGFzdFN0cm9uZ0RpcihVQ2hhckRpcmVjdGlv
biBsYXN0U3Ryb25nRGlyKSB7IG1fc3RhdHVzLmxhc3RTdHJvbmcgPSBsYXN0U3Ryb25nRGlyOyB9
Ci0gICAgdm9pZCBzZXRFb3JEaXIoVUNoYXJEaXJlY3Rpb24gZW9yRGlyKSB7IG1fc3RhdHVzLmVv
ciA9IGVvckRpcjsgfQotCi0gICAgVUNoYXJEaXJlY3Rpb24gZGlyKCkgY29uc3QgeyByZXR1cm4g
bV9kaXJlY3Rpb247IH0KLSAgICB2b2lkIHNldERpcihVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24p
IHsgbV9kaXJlY3Rpb24gPSBkaXJlY3Rpb247IH0KLQotICAgIGNvbnN0IEJpZGlTdGF0dXMmIHN0
YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9Ci0gICAgdm9pZCBzZXRTdGF0dXMoQmlk
aVN0YXR1cyBzdGF0dXMpIHsgbV9zdGF0dXMgPSBzdGF0dXM7IH0KLQotICAgIFdoaXRlc3BhY2VD
b2xsYXBzaW5nU3RhdGU8SXRlcmF0b3I+JiB3aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlKCkgeyBy
ZXR1cm4gbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlOyB9Ci0KLSAgICAvLyBUaGUgY3VycmVu
dCBhbGdvcml0aG0gaGFuZGxlcyBuZXN0ZWQgaXNvbGF0ZXMgb25lIGxheWVyIG9mIG5lc3Rpbmcg
YXQgYSB0aW1lLgotICAgIC8vIEJ1dCB3aGVuIHdlIGxheW91dCBlYWNoIGlzb2xhdGVkIHNwYW4s
IHdlIHdpbGwgd2FsayBpbnRvIChhbmQgaWdub3JlKSBhbGwKLSAgICAvLyBjaGlsZCBpc29sYXRl
ZCBzcGFucy4KLSAgICB2b2lkIGVudGVySXNvbGF0ZSgpIHsgbV9uZXN0ZWRJc29sYXRlQ291bnQr
KzsgfQotICAgIHZvaWQgZXhpdElzb2xhdGUoKSB7IEFTU0VSVChtX25lc3RlZElzb2xhdGVDb3Vu
dCA+PSAxKTsgbV9uZXN0ZWRJc29sYXRlQ291bnQtLTsgfQotICAgIGJvb2wgaW5Jc29sYXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9uZXN0ZWRJc29sYXRlQ291bnQ7IH0KLQotICAgIHZvaWQgZW1iZWQo
VUNoYXJEaXJlY3Rpb24sIEJpZGlFbWJlZGRpbmdTb3VyY2UpOwotICAgIGJvb2wgY29tbWl0RXhw
bGljaXRFbWJlZGRpbmcoKTsKLQotICAgIHZvaWQgY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGNvbnN0
IEl0ZXJhdG9yJiBlbmQsIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlID0gTm9WaXN1YWxPdmVycmlk
ZSwgYm9vbCBoYXJkTGluZUJyZWFrID0gZmFsc2UpOwotCi0gICAgQmlkaVJ1bkxpc3Q8UnVuPiYg
cnVucygpIHsgcmV0dXJuIG1fcnVuczsgfQotCi0gICAgLy8gRklYTUU6IFRoaXMgdXNlZCB0byBi
ZSBwYXJ0IG9mIGRlbGV0ZVJ1bnMoKSBidXQgd2FzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uLgotICAg
IC8vIEl0J3MgdW5jbGVhciBpZiB0aGlzIGlzIHN0aWxsIG5lZWRlZC4KLSAgICB2b2lkIG1hcmtD
dXJyZW50UnVuRW1wdHkoKSB7IG1fZW1wdHlSdW4gPSB0cnVlOyB9Ci0KLSAgICB2b2lkIHNldFdo
aXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKFJ1biYsIHNpemVfdCk7
Ci0gICAgdW5zaWduZWQgd2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRS
dW4oUnVuJik7Ci0KLXByb3RlY3RlZDoKLSAgICBCaWRpUmVzb2x2ZXJCYXNlKCkgPSBkZWZhdWx0
OwotCi0gICAgLy8gRklYTUU6IEluc3RlYWQgb2YgSW5saW5lQmlkaVJlc29sdmVycyBzdWJjbGFz
c2luZyB0aGlzIG1ldGhvZCwgd2Ugc2hvdWxkCi0gICAgLy8gcGFzcyBpbiBzb21lIHNvcnQgb2Yg
VHJhaXRzIG9iamVjdCB3aGljaCBrbm93cyBob3cgdG8gY3JlYXRlIHJ1bnMgZm9yIGFwcGVuZGlu
Zy4KLSAgICB2b2lkIGFwcGVuZFJ1bigpIHsgc3RhdGljX2Nhc3Q8RGVyaXZlZENsYXNzJj4oKnRo
aXMpLmFwcGVuZFJ1bkludGVybmFsKCk7IH0KLSAgICBib29sIG5lZWRzQ29udGludWVQYXN0RW5k
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRGVyaXZlZENsYXNzJj4oKnRoaXMp
Lm5lZWRzQ29udGludWVQYXN0RW5kSW50ZXJuYWwoKTsgfQotCi0gICAgSXRlcmF0b3IgbV9jdXJy
ZW50OwotICAgIC8vIHNvciBhbmQgZW9yIGFyZSAic3RhcnQgb2YgcnVuIiBhbmQgImVuZCBvZiBy
dW4iIHJlc3BlY3RpdmVseSBhbmQgY29ycmVwb25kCi0gICAgLy8gdG8gYWJyZXZpYXRpb25zIHVz
ZWQgaW4gVUJBIHNwZWM6IGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOS8jQkQ3Ci0gICAg
SXRlcmF0b3IgbV9zb3I7IC8vIFBvaW50cyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBj
dXJyZW50IHJ1bi4KLSAgICBJdGVyYXRvciBtX2VvcjsgLy8gUG9pbnRzIHRvIHRoZSBsYXN0IGNo
YXJhY3RlciBpbiB0aGUgY3VycmVudCBydW4uCi0gICAgSXRlcmF0b3IgbV9sYXN0OwotICAgIEJp
ZGlTdGF0dXMgbV9zdGF0dXM7Ci0gICAgVUNoYXJEaXJlY3Rpb24gbV9kaXJlY3Rpb24geyBVX09U
SEVSX05FVVRSQUwgfTsKLSAgICBJdGVyYXRvciBlbmRPZkxpbmU7Ci0gICAgYm9vbCBtX3JlYWNo
ZWRFbmRPZkxpbmUgeyBmYWxzZSB9OwotICAgIEl0ZXJhdG9yIG1fbGFzdEJlZm9yZUVUOyAvLyBC
ZWZvcmUgYSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SCi0gICAgYm9vbCBtX2VtcHR5UnVu
IHsgdHJ1ZSB9OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZWxvbmcgdG8gdGhl
IHJlc29sdmVyLCBidXQgcmF0aGVyIGJlIHBhc3NlZAotICAgIC8vIGludG8gY3JlYXRlQmlkaVJ1
bnNGb3JMaW5lIGJ5IHRoZSBjYWxsZXIuCi0gICAgQmlkaVJ1bkxpc3Q8UnVuPiBtX3J1bnM7Ci0K
LSAgICBXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlPEl0ZXJhdG9yPiBtX3doaXRlc3BhY2VDb2xs
YXBzaW5nU3RhdGU7Ci0KLSAgICB1bnNpZ25lZCBtX25lc3RlZElzb2xhdGVDb3VudCB7IDAgfTsK
LSAgICBIYXNoTWFwPFJ1biosIHVuc2lnbmVkPiBtX3doaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNp
dGlvbkZvcklzb2xhdGVkUnVuOwotCi1wcml2YXRlOgotICAgIHZvaWQgcmFpc2VFeHBsaWNpdEVt
YmVkZGluZ0xldmVsKFVDaGFyRGlyZWN0aW9uIGZyb20sIFVDaGFyRGlyZWN0aW9uIHRvKTsKLSAg
ICB2b2lkIGxvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbChVQ2hhckRpcmVjdGlvbiBmcm9tKTsK
LSAgICB2b2lkIGNoZWNrRGlyZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwoKTsKLQot
ICAgIHZvaWQgdXBkYXRlU3RhdHVzTGFzdEZyb21DdXJyZW50RGlyZWN0aW9uKFVDaGFyRGlyZWN0
aW9uKTsKLSAgICB2b2lkIHJlb3JkZXJSdW5zRnJvbUxldmVscygpOwotICAgIHZvaWQgaW5jcmVt
ZW50SW50ZXJuYWwoKSB7IG1fY3VycmVudC5pbmNyZW1lbnQoKTsgfQotICAgIHZvaWQgYXBwZW5k
UnVuSW50ZXJuYWwoKTsKLSAgICBib29sIG5lZWRzQ29udGludWVQYXN0RW5kSW50ZXJuYWwoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBWZWN0b3I8QmlkaUVtYmVkZGluZywgOD4gbV9j
dXJyZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4+Ci1jbGFzcyBCaWRpUmVzb2x2ZXIgOiBwdWJsaWMgQmlk
aVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBCaWRpUmVzb2x2ZXI8SXRlcmF0b3IsIFJ1bj4+
IHsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVu
YW1lIElzb2xhdGVSdW4+Ci1jbGFzcyBCaWRpUmVzb2x2ZXJXaXRoSXNvbGF0ZSA6IHB1YmxpYyBC
aWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlPEl0
ZXJhdG9yLCBSdW4sIElzb2xhdGVSdW4+PiB7Ci1wdWJsaWM6Ci0gICAgfkJpZGlSZXNvbHZlcldp
dGhJc29sYXRlKCk7Ci0KLSAgICB2b2lkIGluY3JlbWVudEludGVybmFsKCk7Ci0gICAgdm9pZCBh
cHBlbmRSdW5JbnRlcm5hbCgpOwotICAgIGJvb2wgbmVlZHNDb250aW51ZVBhc3RFbmRJbnRlcm5h
bCgpIGNvbnN0OwotICAgIFZlY3RvcjxJc29sYXRlUnVuPiYgaXNvbGF0ZWRSdW5zKCkgeyByZXR1
cm4gbV9pc29sYXRlZFJ1bnM7IH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8SXNvbGF0ZVJ1bj4g
bV9pc29sYXRlZFJ1bnM7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5h
bWUgUnVuLCB0eXBlbmFtZSBJc29sYXRlUnVuPgotaW5saW5lIEJpZGlSZXNvbHZlcldpdGhJc29s
YXRlPEl0ZXJhdG9yLCBSdW4sIElzb2xhdGVSdW4+Ojp+QmlkaVJlc29sdmVyV2l0aElzb2xhdGUo
KQotewotICAgIC8vIFRoZSBvd25lciBvZiB0aGlzIHJlc29sdmVyIHNob3VsZCBoYXZlIGhhbmRs
ZWQgdGhlIGlzb2xhdGVkIHJ1bnMuCi0gICAgQVNTRVJUKG1faXNvbGF0ZWRSdW5zLmlzRW1wdHko
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVu
YW1lIERlcml2ZWRDbGFzcz4KLXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBE
ZXJpdmVkQ2xhc3M+OjphcHBlbmRSdW5JbnRlcm5hbCgpCi17Ci0gICAgaWYgKCFtX2VtcHR5UnVu
ICYmICFtX2Vvci5hdEVuZCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbV9z
b3Iub2Zmc2V0KCk7Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG1fZW9yLm9mZnNldCgp
OwotCi0gICAgICAgIGlmICghZW5kT2ZMaW5lLmF0RW5kKCkgJiYgZW5kT2Zmc2V0ID49IGVuZE9m
TGluZS5vZmZzZXQoKSkgewotICAgICAgICAgICAgbV9yZWFjaGVkRW5kT2ZMaW5lID0gdHJ1ZTsK
LSAgICAgICAgICAgIGVuZE9mZnNldCA9IGVuZE9mTGluZS5vZmZzZXQoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChlbmRPZmZzZXQgPj0gc3RhcnRPZmZzZXQpCi0gICAgICAgICAgICBtX3J1
bnMuYXBwZW5kUnVuKG1ha2VVbmlxdWU8UnVuPihzdGFydE9mZnNldCwgZW5kT2Zmc2V0ICsgMSwg
Y29udGV4dCgpLCBtX2RpcmVjdGlvbikpOwotCi0gICAgICAgIG1fZW9yLmluY3JlbWVudCgpOwot
ICAgICAgICBtX3NvciA9IG1fZW9yOwotICAgIH0KLQotICAgIG1fZGlyZWN0aW9uID0gVV9PVEhF
Ul9ORVVUUkFMOwotICAgIG1fc3RhdHVzLmVvciA9IFVfT1RIRVJfTkVVVFJBTDsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENs
YXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46
OmVtYmVkKFVDaGFyRGlyZWN0aW9uIGRpciwgQmlkaUVtYmVkZGluZ1NvdXJjZSBzb3VyY2UpCi17
Ci0gICAgLy8gSXNvbGF0ZWQgc3BhbnMgY29tcHV0ZSBiYXNlIGRpcmVjdGlvbmFsaXR5IGR1cmlu
ZyB0aGVpciBvd24gVUJBIHJ1bi4KLSAgICAvLyBEbyBub3QgaW5zZXJ0IGZha2UgZW1iZWQgY2hh
cmFjdGVycyBvbmNlIHdlIGVudGVyIGFuIGlzb2xhdGVkIHNwYW4uCi0gICAgQVNTRVJUKCFpbklz
b2xhdGUoKSk7Ci0KLSAgICBBU1NFUlQoZGlyID09IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCB8
fCBkaXIgPT0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORyB8fCBkaXIgPT0gVV9MRUZUX1RPX1JJ
R0hUX09WRVJSSURFIHx8IGRpciA9PSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HIHx8IGRpciA9
PSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUpOwotICAgIG1fY3VycmVudEV4cGxpY2l0RW1iZWRk
aW5nU2VxdWVuY2UuYXBwZW5kKEJpZGlFbWJlZGRpbmcoZGlyLCBzb3VyY2UpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENs
YXNzPgotdm9pZCBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46
OmNoZWNrRGlyZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwoKQotewotICAgIEFTU0VS
VChtX3N0YXR1cy5lb3IgIT0gVV9PVEhFUl9ORVVUUkFMIHx8IG1fZW9yLmF0RW5kKCkpOwotICAg
IEFTU0VSVChtX3N0YXR1cy5sYXN0ICE9IFVfRElSX05PTl9TUEFDSU5HX01BUksKLSAgICAgICAg
JiYgbV9zdGF0dXMubGFzdCAhPSBVX0JPVU5EQVJZX05FVVRSQUwKLSAgICAgICAgJiYgbV9zdGF0
dXMubGFzdCAhPSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HCi0gICAgICAgICYmIG1fc3RhdHVz
Lmxhc3QgIT0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORwotICAgICAgICAmJiBtX3N0YXR1cy5s
YXN0ICE9IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERSAKLSAgICAgICAgJiYgbV9zdGF0dXMubGFz
dCAhPSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUKLSAgICAgICAgJiYgbV9zdGF0dXMubGFzdCAh
PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQpOwotICAgIGlmIChtX2RpcmVjdGlvbiA9PSBVX09U
SEVSX05FVVRSQUwpCi0gICAgICAgIG1fZGlyZWN0aW9uID0gbV9zdGF0dXMubGFzdFN0cm9uZyA9
PSBVX0xFRlRfVE9fUklHSFQgPyBVX0xFRlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQ7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERl
cml2ZWRDbGFzcz4KLXZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRvciwgUnVuLCBEZXJpdmVk
Q2xhc3M+Ojpsb3dlckV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoVUNoYXJEaXJlY3Rpb24gZnJvbSkK
LXsKLSAgICBpZiAoIW1fZW1wdHlSdW4gJiYgbV9lb3IgIT0gbV9sYXN0KSB7Ci0gICAgICAgIGNo
ZWNrRGlyZWN0aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwoKTsKLSAgICAgICAgLy8gYmlk
aS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgZW9yOyBuZWVkIHRvIGFwcGVuZCB0aGUg
YmlkaS5zb3ItYmlkaS5lb3IgcnVuIG9yIGV4dGVuZCBpdCB0aHJvdWdoIGJpZGkubGFzdAotICAg
ICAgICBpZiAoZnJvbSA9PSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgIC8vIGJpZGku
c29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IEwKLSAgICAgICAgICAgIGlmIChtX3N0YXR1
cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9zdGF0
dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9kaXJlY3Rpb24gPSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0
YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgbV9kaXJlY3Rp
b24gPSBVX0FSQUJJQ19OVU1CRVI7Ci0gICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hU
KSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgbV9kaXJl
Y3Rpb24gPSBVX0xFRlRfVE9fUklHSFQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSIHx8IG1fc3RhdHVzLmVvciA9PSBV
X0FSQUJJQ19OVU1CRVIgfHwgbV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQp
IHsKLSAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBV
X1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgIH0KLSAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAg
fQotCi0gICAgYXBwZW5kUnVuKCk7Ci0gICAgbV9lbXB0eVJ1biA9IHRydWU7Ci0KLSAgICAvLyBz
b3IgZm9yIHRoZSBuZXcgcnVuIGlzIGRldGVybWluZWQgYnkgdGhlIGhpZ2hlciBsZXZlbCAocnVs
ZSBYMTApCi0gICAgc2V0TGFzdERpcihmcm9tKTsKLSAgICBzZXRMYXN0U3Ryb25nRGlyKGZyb20p
OwotICAgIG1fZW9yID0gSXRlcmF0b3IoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0
b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdm9pZCBCaWRpUmVzb2x2
ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OnJhaXNlRXhwbGljaXRFbWJlZGRp
bmdMZXZlbChVQ2hhckRpcmVjdGlvbiBmcm9tLCBVQ2hhckRpcmVjdGlvbiB0bykKLXsKLSAgICBp
ZiAoIW1fZW1wdHlSdW4gJiYgbV9lb3IgIT0gbV9sYXN0KSB7Ci0gICAgICAgIGNoZWNrRGlyZWN0
aW9uSW5Mb3dlclJhaXNlRW1iZWRkaW5nTGV2ZWwoKTsKLSAgICAgICAgLy8gYmlkaS5zb3IgLi4u
IGJpZGkuZW9yIC4uLiBiaWRpLmxhc3QgZW9yOyBuZWVkIHRvIGFwcGVuZCB0aGUgYmlkaS5zb3It
YmlkaS5lb3IgcnVuIG9yIGV4dGVuZCBpdCB0aHJvdWdoIGJpZGkubGFzdAotICAgICAgICBpZiAo
dG8gPT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlk
aS5lb3IgLi4uIGJpZGkubGFzdCBMCi0gICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVf
RVVST1BFQU5fTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxhc3RTdHJv
bmcgIT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9u
ID0gVV9FVVJPUEVBTl9OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMuZW9yID09
IFVfQVJBQklDX05VTUJFUikgewotICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9BUkFC
SUNfTlVNQkVSOwotICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCAmJiBmcm9tID09
IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAg
ICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9MRUZUX1RPX1JJR0hUOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIKLSAgICAg
ICAgICAgIHx8IChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYgKG1fc3RhdHVz
Lmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUIHx8IGZyb20gPT0gVV9SSUdIVF9UT19MRUZU
KSkKLSAgICAgICAgICAgIHx8IChtX3N0YXR1cy5lb3IgIT0gVV9FVVJPUEVBTl9OVU1CRVIgJiYg
bV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQgJiYgZnJvbSA9PSBVX1JJR0hU
X1RPX0xFRlQpKSB7Ci0gICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgIG1fZGly
ZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAgICB9Ci0gICAgICAgIG1fZW9yID0gbV9s
YXN0OwotICAgIH0KLQotICAgIGFwcGVuZFJ1bigpOwotICAgIG1fZW1wdHlSdW4gPSB0cnVlOwot
Ci0gICAgc2V0TGFzdERpcih0byk7Ci0gICAgc2V0TGFzdFN0cm9uZ0Rpcih0byk7Ci0gICAgbV9l
b3IgPSBJdGVyYXRvcigpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvciwgdHlwZW5h
bWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Ci1ib29sIEJpZGlSZXNvbHZlckJhc2U8SXRl
cmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6Y29tbWl0RXhwbGljaXRFbWJlZGRpbmcoKQotewot
ICAgIC8vIFdoZW4gd2UncmUgImluSXNvbGF0ZSgpIiB3ZSdyZSByZXNvbHZpbmcgdGhlIHBhcmVu
dCBjb250ZXh0IHdoaWNoCi0gICAgLy8gaWdub3JlcyAoc2tpcHMgb3ZlcikgdGhlIGlzb2xhdGVk
IGNvbnRlbnQsIGluY2x1ZGluZyBlbWJlZGRpbmcgbGV2ZWxzLgotICAgIC8vIFdlIHNob3VsZCBu
ZXZlciBhY2NydWUgZW1iZWRkaW5nIGxldmVscyB3aGlsZSBza2lwcGluZyBvdmVyIGlzb2xhdGVk
IGNvbnRlbnQuCi0gICAgQVNTRVJUKCFpbklzb2xhdGUoKSB8fCBtX2N1cnJlbnRFeHBsaWNpdEVt
YmVkZGluZ1NlcXVlbmNlLmlzRW1wdHkoKSk7Ci0KLSAgICBhdXRvIGZyb21MZXZlbCA9IGNvbnRl
eHQoKS0+bGV2ZWwoKTsKLSAgICBSZWZQdHI8QmlkaUNvbnRleHQ+IHRvQ29udGV4dCA9IGNvbnRl
eHQoKTsKLQotICAgIGZvciAoYXV0byYgZW1iZWRkaW5nIDogbV9jdXJyZW50RXhwbGljaXRFbWJl
ZGRpbmdTZXF1ZW5jZSkgewotICAgICAgICBpZiAoZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1BP
UF9ESVJFQ1RJT05BTF9GT1JNQVQpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnRDb250
ZXh0ID0gdG9Db250ZXh0LT5wYXJlbnQoKSkKLSAgICAgICAgICAgICAgICB0b0NvbnRleHQgPSBw
YXJlbnRDb250ZXh0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVUNoYXJEaXJlY3Rp
b24gZGlyZWN0aW9uID0gKGVtYmVkZGluZy5kaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX0VN
QkVERElORyB8fCBlbWJlZGRpbmcuZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklE
RSkgPyBVX1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQ7Ci0gICAgICAgICAgICBib29s
IG92ZXJyaWRlID0gZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJ
REUgfHwgZW1iZWRkaW5nLmRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREU7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxldmVsID0gdG9Db250ZXh0LT5sZXZlbCgpOwotICAg
ICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlQpCi0gICAgICAgICAgICAg
ICAgbGV2ZWwgPSBuZXh0R3JlYXRlck9kZExldmVsKGxldmVsKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBsZXZlbCA9IG5leHRHcmVhdGVyRXZlbkxldmVsKGxldmVsKTsKLSAg
ICAgICAgICAgIGlmIChsZXZlbCA8IDYxKQotICAgICAgICAgICAgICAgIHRvQ29udGV4dCA9IEJp
ZGlDb250ZXh0OjpjcmVhdGUobGV2ZWwsIGRpcmVjdGlvbiwgb3ZlcnJpZGUsIGVtYmVkZGluZy5z
b3VyY2UsIHRvQ29udGV4dC5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHRv
TGV2ZWwgPSB0b0NvbnRleHQtPmxldmVsKCk7Ci0KLSAgICBpZiAodG9MZXZlbCA+IGZyb21MZXZl
bCkKLSAgICAgICAgcmFpc2VFeHBsaWNpdEVtYmVkZGluZ0xldmVsKGZyb21MZXZlbCAlIDIgPyBV
X1JJR0hUX1RPX0xFRlQgOiBVX0xFRlRfVE9fUklHSFQsIHRvTGV2ZWwgJSAyID8gVV9SSUdIVF9U
T19MRUZUIDogVV9MRUZUX1RPX1JJR0hUKTsKLSAgICBlbHNlIGlmICh0b0xldmVsIDwgZnJvbUxl
dmVsKQotICAgICAgICBsb3dlckV4cGxpY2l0RW1iZWRkaW5nTGV2ZWwoZnJvbUxldmVsICUgMiA/
IFVfUklHSFRfVE9fTEVGVCA6IFVfTEVGVF9UT19SSUdIVCk7Ci0KLSAgICBzZXRDb250ZXh0KFdU
Rk1vdmUodG9Db250ZXh0KSk7Ci0KLSAgICBtX2N1cnJlbnRFeHBsaWNpdEVtYmVkZGluZ1NlcXVl
bmNlLmNsZWFyKCk7Ci0KLSAgICByZXR1cm4gZnJvbUxldmVsICE9IHRvTGV2ZWw7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRD
bGFzcz4KLWlubGluZSB2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZl
ZENsYXNzPjo6dXBkYXRlU3RhdHVzTGFzdEZyb21DdXJyZW50RGlyZWN0aW9uKFVDaGFyRGlyZWN0
aW9uIGRpckN1cnJlbnQpCi17Ci0gICAgc3dpdGNoIChkaXJDdXJyZW50KSB7Ci0gICAgY2FzZSBV
X0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SOgotICAgICAgICBpZiAobV9zdGF0dXMubGFzdCAh
PSBVX0VVUk9QRUFOX05VTUJFUikKLSAgICAgICAgICAgIG1fc3RhdHVzLmxhc3QgPSBVX0VVUk9Q
RUFOX05VTUJFUl9URVJNSU5BVE9SOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVfRVVST1BF
QU5fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICBjYXNlIFVfQ09NTU9OX05VTUJFUl9TRVBBUkFUT1I6
Ci0gICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgotICAgIGNhc2UgVV9XSElURV9TUEFDRV9O
RVVUUkFMOgotICAgIGNhc2UgVV9PVEhFUl9ORVVUUkFMOgotICAgICAgICBzd2l0Y2ggKG1fc3Rh
dHVzLmxhc3QpIHsKLSAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6Ci0gICAgICAgIGNhc2Ug
VV9SSUdIVF9UT19MRUZUOgotICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6Ci0g
ICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6Ci0gICAgICAgIGNhc2UgVV9BUkFCSUNfTlVN
QkVSOgotICAgICAgICAgICAgbV9zdGF0dXMubGFzdCA9IGRpckN1cnJlbnQ7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1fc3RhdHVzLmxhc3QgPSBV
X09USEVSX05FVVRSQUw7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVX0RJ
Ul9OT05fU1BBQ0lOR19NQVJLOgotICAgIGNhc2UgVV9CT1VOREFSWV9ORVVUUkFMOgotICAgIGNh
c2UgVV9SSUdIVF9UT19MRUZUX0VNQkVERElORzoKLSAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9F
TUJFRERJTkc6Ci0gICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREU6Ci0gICAgY2FzZSBV
X0xFRlRfVE9fUklHSFRfT1ZFUlJJREU6Ci0gICAgY2FzZSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JN
QVQ6Ci0gICAgICAgIC8vIGlnbm9yZSB0aGVzZQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVf
RVVST1BFQU5fTlVNQkVSOgotICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBtX3N0YXR1cy5sYXN0ID0gZGlyQ3VycmVudDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2ZWRDbGFzcz4KLWlu
bGluZSB2b2lkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6
cmVvcmRlclJ1bnNGcm9tTGV2ZWxzKCkKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGxldmVsTG93ID0g
MTI4OwotICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWxIaWdoID0gMDsKLSAgICBmb3IgKFJ1biogcnVu
ID0gbV9ydW5zLmZpcnN0UnVuKCk7IHJ1bjsgcnVuID0gcnVuLT5uZXh0KCkpIHsKLSAgICAgICAg
bGV2ZWxIaWdoID0gc3RkOjptYXgocnVuLT5sZXZlbCgpLCBsZXZlbEhpZ2gpOwotICAgICAgICBs
ZXZlbExvdyA9IHN0ZDo6bWluKHJ1bi0+bGV2ZWwoKSwgbGV2ZWxMb3cpOwotICAgIH0KLQotICAg
IC8vIFRoaXMgaW1wbGVtZW50cyByZW9yZGVyaW5nIG9mIHRoZSBsaW5lIChMMiBhY2NvcmRpbmcg
dG8gQmlkaSBzcGVjKToKLSAgICAvLyBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkvI0wy
Ci0gICAgLy8gTDIuIEZyb20gdGhlIGhpZ2hlc3QgbGV2ZWwgZm91bmQgaW4gdGhlIHRleHQgdG8g
dGhlIGxvd2VzdCBvZGQgbGV2ZWwgb24gZWFjaCBsaW5lLAotICAgIC8vIHJldmVyc2UgYW55IGNv
bnRpZ3VvdXMgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCB0aGF0IGxldmVsIG9y
IGhpZ2hlci4KLQotICAgIC8vIFJldmVyc2luZyBpcyBvbmx5IGRvbmUgdXAgdG8gdGhlIGxvd2Vz
dCBvZGQgbGV2ZWwuCi0gICAgaWYgKCEobGV2ZWxMb3cgJSAyKSkKLSAgICAgICAgbGV2ZWxMb3cr
KzsKLQotICAgIHVuc2lnbmVkIGNvdW50ID0gbV9ydW5zLnJ1bkNvdW50KCkgLSAxOwotCi0gICAg
d2hpbGUgKGxldmVsSGlnaCA+PSBsZXZlbExvdykgewotICAgICAgICB1bnNpZ25lZCBpID0gMDsK
LSAgICAgICAgUnVuKiBydW4gPSBtX3J1bnMuZmlyc3RSdW4oKTsKLSAgICAgICAgd2hpbGUgKGkg
PCBjb3VudCkgewotICAgICAgICAgICAgZm9yICg7aSA8IGNvdW50ICYmIHJ1biAmJiBydW4tPmxl
dmVsKCkgPCBsZXZlbEhpZ2g7IGkrKykKLSAgICAgICAgICAgICAgICBydW4gPSBydW4tPm5leHQo
KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gaTsKLSAgICAgICAgICAgIGZvciAoO2kg
PD0gY291bnQgJiYgcnVuICYmIHJ1bi0+bGV2ZWwoKSA+PSBsZXZlbEhpZ2g7IGkrKykKLSAgICAg
ICAgICAgICAgICBydW4gPSBydW4tPm5leHQoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9
IGkgLSAxOwotICAgICAgICAgICAgbV9ydW5zLnJldmVyc2VSdW5zKHN0YXJ0LCBlbmQpOwotICAg
ICAgICB9Ci0gICAgICAgIGxldmVsSGlnaC0tOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgSXRlcmF0b3IsIHR5cGVuYW1lIFJ1biwgdHlwZW5hbWUgRGVyaXZlZENsYXNzPgotdm9pZCBC
aWRpUmVzb2x2ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIERlcml2ZWRDbGFzcz46OmNyZWF0ZUJpZGlS
dW5zRm9yTGluZShjb25zdCBJdGVyYXRvciYgZW5kLCBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBv
dmVycmlkZSwgYm9vbCBoYXJkTGluZUJyZWFrKQotewotICAgIEFTU0VSVChtX2RpcmVjdGlvbiA9
PSBVX09USEVSX05FVVRSQUwpOwotCi0gICAgaWYgKG92ZXJyaWRlICE9IE5vVmlzdWFsT3ZlcnJp
ZGUpIHsKLSAgICAgICAgbV9lbXB0eVJ1biA9IGZhbHNlOwotICAgICAgICBtX3NvciA9IG1fY3Vy
cmVudDsKLSAgICAgICAgbV9lb3IgPSBJdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAobV9jdXJy
ZW50ICE9IGVuZCAmJiAhbV9jdXJyZW50LmF0RW5kKCkpIHsKLSAgICAgICAgICAgIG1fZW9yID0g
bV9jdXJyZW50OwotICAgICAgICAgICAgaW5jcmVtZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAg
bV9kaXJlY3Rpb24gPSBvdmVycmlkZSA9PSBWaXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlID8gVV9M
RUZUX1RPX1JJR0hUIDogVV9SSUdIVF9UT19MRUZUOwotICAgICAgICBhcHBlbmRSdW4oKTsKLSAg
ICAgICAgbV9ydW5zLnNldExvZ2ljYWxseUxhc3RSdW4obV9ydW5zLmxhc3RSdW4oKSk7Ci0gICAg
ICAgIGlmIChvdmVycmlkZSA9PSBWaXN1YWxSaWdodFRvTGVmdE92ZXJyaWRlICYmIG1fcnVucy5y
dW5Db3VudCgpKQotICAgICAgICAgICAgbV9ydW5zLnJldmVyc2VSdW5zKDAsIG1fcnVucy5ydW5D
b3VudCgpIC0gMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2VtcHR5UnVuID0g
dHJ1ZTsKLQotICAgIG1fZW9yID0gSXRlcmF0b3IoKTsKLQotICAgIG1fbGFzdCA9IG1fY3VycmVu
dDsKLSAgICBib29sIHBhc3RFbmQgPSBmYWxzZTsKLSAgICBCaWRpUmVzb2x2ZXJCYXNlPEl0ZXJh
dG9yLCBSdW4sIERlcml2ZWRDbGFzcz4gc3RhdGVBdEVuZDsKLQotICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgIFVDaGFyRGlyZWN0aW9uIGRpckN1cnJlbnQ7Ci0gICAgICAgIGlmIChwYXN0RW5k
ICYmIChoYXJkTGluZUJyZWFrIHx8IG1fY3VycmVudC5hdEVuZCgpKSkgewotICAgICAgICAgICAg
QmlkaUNvbnRleHQqIGMgPSBjb250ZXh0KCk7Ci0gICAgICAgICAgICBpZiAoaGFyZExpbmVCcmVh
aykgewotICAgICAgICAgICAgICAgIC8vIEEgZGV2aWF0aW9uIGZyb20gdGhlIFVuaWNvZGUgQmlk
aSBBbGdvcml0aG0gaW4gb3JkZXIgdG8gbWF0Y2gKLSAgICAgICAgICAgICAgICAvLyBXaW5JRSBh
bmQgdXNlciBleHBlY3RhdGlvbnM6IGhhcmQgbGluZSBicmVha3MgcmVzZXQgYmlkaSBzdGF0ZQot
ICAgICAgICAgICAgICAgIC8vIGNvbWluZyBmcm9tIHVuaWNvZGUgYmlkaSBjb250cm9sIGNoYXJh
Y3RlcnMsIGJ1dCBub3QgdGhvc2UgZnJvbQotICAgICAgICAgICAgICAgIC8vIERPTSBub2RlcyB3
aXRoIHNwZWNpZmllZCBkaXJlY3Rpb25hbGl0eQotICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQu
c2V0Q29udGV4dChjLT5jb3B5U3RhY2tSZW1vdmluZ1VuaWNvZGVFbWJlZGRpbmdDb250ZXh0cygp
KTsKLQotICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBzdGF0ZUF0RW5kLmNvbnRleHQoKS0+
ZGlyKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5zZXRFb3JEaXIoZGlyQ3VycmVudCk7
Ci0gICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5zZXRMYXN0RGlyKGRpckN1cnJlbnQpOwotICAg
ICAgICAgICAgICAgIHN0YXRlQXRFbmQuc2V0TGFzdFN0cm9uZ0RpcihkaXJDdXJyZW50KTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGMtPnBhcmVudCgpKQot
ICAgICAgICAgICAgICAgICAgICBjID0gYy0+cGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgZGly
Q3VycmVudCA9IGMtPmRpcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZGlyQ3VycmVudCA9IG1fY3VycmVudC5kaXJlY3Rpb24oKTsKLSAgICAgICAgICAg
IGlmIChjb250ZXh0KCktPm92ZXJyaWRlKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgZGlyQ3Vy
cmVudCAhPSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HCi0gICAgICAgICAgICAgICAgICAgICYm
IGRpckN1cnJlbnQgIT0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORwotICAgICAgICAgICAgICAg
ICAgICAmJiBkaXJDdXJyZW50ICE9IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERQotICAgICAgICAg
ICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERQotICAg
ICAgICAgICAgICAgICAgICAmJiBkaXJDdXJyZW50ICE9IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1B
VCkKLSAgICAgICAgICAgICAgICBkaXJDdXJyZW50ID0gY29udGV4dCgpLT5kaXIoKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGRpckN1cnJlbnQgPT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFSSykKLSAg
ICAgICAgICAgICAgICBkaXJDdXJyZW50ID0gbV9zdGF0dXMubGFzdDsKLSAgICAgICAgfQotCi0j
aWYgUExBVEZPUk0oV0lOKQotICAgICAgICAvLyBPdXIgV2luZG93cyBidWlsZCBoYXNuJ3QgdXBk
YXRlZCBpdHMgaGVhZGVycyBmcm9tIElDVSA2LjEsIHdoaWNoIGRvZXNuJ3QgaGF2ZSB0aGVzZSBz
eW1ib2xzLgotICAgICAgICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX0ZJUlNUX1NUUk9OR19JU09M
QVRFID0gc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KDE5KTsKLSAgICAgICAgY29uc3QgVUNo
YXJEaXJlY3Rpb24gVV9MRUZUX1RPX1JJR0hUX0lTT0xBVEUgPSBzdGF0aWNfY2FzdDxVQ2hhckRp
cmVjdGlvbj4oMjApOwotICAgICAgICBjb25zdCBVQ2hhckRpcmVjdGlvbiBVX1JJR0hUX1RPX0xF
RlRfSVNPTEFURSA9IHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPigyMSk7Ci0gICAgICAgIGNv
bnN0IFVDaGFyRGlyZWN0aW9uIFVfUE9QX0RJUkVDVElPTkFMX0lTT0xBVEUgPSBzdGF0aWNfY2Fz
dDxVQ2hhckRpcmVjdGlvbj4oMjIpOwotI2VuZGlmCi0gICAgICAgIC8vIFdlIGlnbm9yZSBhbGwg
Y2hhcmFjdGVyIGRpcmVjdGlvbmFsaXR5IHdoaWxlIGluIHVuaWNvZGUtYmlkaTogaXNvbGF0ZSBz
cGFucy4KLSAgICAgICAgLy8gV2UnbGwgaGFuZGxlIG9yZGVyaW5nIHRoZSBpc29sYXRlZCBjaGFy
YWN0ZXJzIGluIGEgc2Vjb25kIHBhc3MuCi0gICAgICAgIGlmIChpbklzb2xhdGUoKSB8fCBkaXJD
dXJyZW50ID09IFVfRklSU1RfU1RST05HX0lTT0xBVEUgfHwgZGlyQ3VycmVudCA9PSBVX0xFRlRf
VE9fUklHSFRfSVNPTEFURSB8fCBkaXJDdXJyZW50ID09IFVfUklHSFRfVE9fTEVGVF9JU09MQVRF
IHx8IGRpckN1cnJlbnQgPT0gVV9QT1BfRElSRUNUSU9OQUxfSVNPTEFURSkKLSAgICAgICAgICAg
IGRpckN1cnJlbnQgPSBVX09USEVSX05FVVRSQUw7Ci0KLSAgICAgICAgQVNTRVJUKG1fc3RhdHVz
LmVvciAhPSBVX09USEVSX05FVVRSQUwgfHwgbV9lb3IuYXRFbmQoKSk7Ci0gICAgICAgIHN3aXRj
aCAoZGlyQ3VycmVudCkgewotCi0gICAgICAgIC8vIGVtYmVkZGluZyBhbmQgb3ZlcnJpZGVzIChY
MS1YOSBpbiB0aGUgQmlkaSBzcGVjcykKLSAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1C
RURESU5HOgotICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkc6Ci0gICAgICAg
IGNhc2UgVV9SSUdIVF9UT19MRUZUX09WRVJSSURFOgotICAgICAgICBjYXNlIFVfTEVGVF9UT19S
SUdIVF9PVkVSUklERToKLSAgICAgICAgY2FzZSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQ6Ci0g
ICAgICAgICAgICBlbWJlZChkaXJDdXJyZW50LCBGcm9tVW5pY29kZSk7Ci0gICAgICAgICAgICBj
b21taXRFeHBsaWNpdEVtYmVkZGluZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Ly8gc3Ryb25nIHR5cGVzCi0gICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgotICAgICAgICAg
ICAgc3dpdGNoKG1fc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRf
VE9fTEVGVDoKLSAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgICAgICAgICBj
YXNlIFVfQVJBQklDX05VTUJFUjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmxh
c3QgIT0gVV9FVVJPUEVBTl9OVU1CRVIgfHwgbV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRf
VE9fUklHSFQpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJP
UEVBTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9O
VU1CRVJfVEVSTUlOQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfQ09NTU9OX05VTUJFUl9T
RVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBVX0JMT0NLX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNl
IFVfU0VHTUVOVF9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNF
X05FVVRSQUw6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX09USEVSX05FVVRSQUw6Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9U
T19SSUdIVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBudW1iZXJzIG5l
ZWQgdG8gYmUgb24gYSBoaWdoZXIgZW1iZWRkaW5nIGxldmVsLCBzbyBsZXQncyBjbG9zZSB0aGF0
IHJ1bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9FVVJPUEVB
Tl9OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQoKS0+ZGlyKCkgIT0gVV9MRUZUX1RP
X1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBuZXV0cmFs
cyB0YWtlIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uLCB3aGljaCBpcyBSCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEFyYWJpYyBudW1iZXJzIGFyZSBhbHdheXMgb24gYSBoaWdoZXIgZW1iZWRk
aW5nIGxldmVsLCBzbyBsZXQncyBjbG9zZSB0aGF0IHJ1bgotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9kaXJlY3Rpb24gPSBVX0FSQUJJQ19OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRp
cigpICE9IFVfTEVGVF9UT19SSUdIVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uLCB3aGljaCBpcyBSCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBV
X0xFRlRfVE9fUklHSFQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vbGFzdCBzdHVmZiB0
YWtlcyBlbWJlZGRpbmcgZGlyCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCgp
LT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2VvciA9IG1fbGFzdDsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rp
b24gPSBVX1JJR0hUX1RPX0xFRlQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZW9yID0g
bV9jdXJyZW50OwotICAgICAgICAgICAgbV9zdGF0dXMuZW9yID0gVV9MRUZUX1RPX1JJR0hUOwot
ICAgICAgICAgICAgbV9zdGF0dXMubGFzdFN0cm9uZyA9IFVfTEVGVF9UT19SSUdIVDsKLSAgICAg
ICAgICAgIG1fZGlyZWN0aW9uID0gVV9MRUZUX1RPX1JJR0hUOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJQzoKLSAgICAgICAgY2FzZSBVX1JJ
R0hUX1RPX0xFRlQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fc3RhdHVzLmxhc3QpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKLSAgICAgICAgICAgICAgICBjYXNlIFVf
RVVST1BFQU5fTlVNQkVSOgotICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgot
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgRkFM
TFRIUk9VR0g7Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRP
UjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICAg
ICAgICAgIGNhc2UgVV9CT1VOREFSWV9ORVVUUkFMOgotICAgICAgICAgICAgICAgIGNhc2UgVV9C
TE9DS19TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9S
OgotICAgICAgICAgICAgICAgIGNhc2UgVV9XSElURV9TUEFDRV9ORVVUUkFMOgotICAgICAgICAg
ICAgICAgIGNhc2UgVV9PVEhFUl9ORVVUUkFMOgotICAgICAgICAgICAgICAgICAgICBpZiAobV9z
dGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQgJiYgY29udGV4dCgp
LT5kaXIoKSA9PSBVX0xFRlRfVE9fUklHSFQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9lb3IgPSBtX2xhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVN
QkVSKQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCgpLT5kaXIoKSA9PSBVX0xFRlRf
VE9fUklHSFQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lb3IgPSBtX2xhc3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1f
ZW9yID0gbV9jdXJyZW50OwotICAgICAgICAgICAgbV9zdGF0dXMuZW9yID0gVV9SSUdIVF9UT19M
RUZUOwotICAgICAgICAgICAgbV9zdGF0dXMubGFzdFN0cm9uZyA9IGRpckN1cnJlbnQ7Ci0gICAg
ICAgICAgICBtX2RpcmVjdGlvbiA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICAvLyB3ZWFrIHR5cGVzOgotCi0gICAgICAgIGNhc2UgVV9FVVJPUEVB
Tl9OVU1CRVI6Ci0gICAgICAgICAgICBpZiAobV9zdGF0dXMubGFzdFN0cm9uZyAhPSBVX1JJR0hU
X1RPX0xFRlRfQVJBQklDKSB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgbGFzdCBzdHJvbmcgd2Fz
IEFMIGNoYW5nZSBFTiB0byBBTgotICAgICAgICAgICAgICAgIHN3aXRjaCAobV9zdGF0dXMubGFz
dCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgotICAgICAg
ICAgICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fZW9yID0gbV9sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
VV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFVf
Q09NTU9OX05VTUJFUl9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9z
dGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUjoKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9TRUdN
RU5UX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05F
VVRSQUw6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9PVEhFUl9ORVVUUkFMOgotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXR1cy5sYXN0U3Ryb25nID09
IFVfUklHSFRfVE9fTEVGVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBF
TnMgb24gYm90aCBzaWRlcyBiZWhhdmUgbGlrZSBScywgc28gdGhlIG5ldXRyYWxzIHNob3VsZCBi
ZSBSLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXJtaW5hdGUgdGhlIEVO
IHJ1bi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgYW4gUiBydW4uCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFO
X05VTUJFUl9URVJNSU5BVE9SID8gbV9sYXN0QmVmb3JlRVQgOiBtX2xhc3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQmVnaW4gYSBuZXcgRU4gcnVuLgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVST1BFQU5fTlVNQkVSOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgQU4gcnVuLgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0
YXR1cy5sYXN0U3Ryb25nID09IFVfUklHSFRfVE9fTEVGVCB8fCBjb250ZXh0KCktPmRpcigpID09
IFVfUklHSFRfVE9fTEVGVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBN
YWtlIGFuIFIgcnVuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VvciA9IG1f
c3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IG1fbGFzdEJlZm9y
ZUVUIDogbV9sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlv
biA9IFVfUklHSFRfVE9fTEVGVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlZ2luIGEgbmV3
IEVOIHJ1bi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBV
X0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9SSUdI
VF9UT19MRUZUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSBS
IHJ1biB0byBpbmNsdWRlIHRoZSBuZXV0cmFscy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2VvciA9IG1fc3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/
IG1fbGFzdEJlZm9yZUVUIDogbV9sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlZ2luIGEgbmV3
IEVOIHJ1bi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9IFVfRVVS
T1BFQU5fTlVNQkVSOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
bV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgbV9zdGF0dXMuZW9yID0gVV9FVVJP
UEVBTl9OVU1CRVI7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJf
TkVVVFJBTCkKLSAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0xFRlRfVE9fUklH
SFQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBG
QUxMVEhST1VHSDsKLSAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6Ci0gICAgICAgICAgICBk
aXJDdXJyZW50ID0gVV9BUkFCSUNfTlVNQkVSOwotICAgICAgICAgICAgc3dpdGNoIChtX3N0YXR1
cy5sYXN0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0KCktPmRpcigpID09IFVfTEVGVF9UT19SSUdIVCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDOgotICAgICAgICAgICAg
ICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6Ci0gICAgICAgICAgICAgICAgICAgIG1fZW9yID0g
bV9sYXN0OwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJB
VE9SOgotICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0dXMuZW9yID09IFVfQVJBQklDX05V
TUJFUikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBGQUxMVEhST1VHSDsKLSAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1NF
UEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFU
T1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX0JPVU5EQVJZX05FVVRSQUw6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBVX0JMT0NLX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVfU0VH
TUVOVF9TRVBBUkFUT1I6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRS
QUw6Ci0gICAgICAgICAgICAgICAgY2FzZSBVX09USEVSX05FVVRSQUw6Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX3N0YXR1cy5lb3IgPT0gVV9BUkFCSUNfTlVNQkVSCi0gICAgICAgICAgICAg
ICAgICAgICAgICB8fCAobV9zdGF0dXMuZW9yID09IFVfRVVST1BFQU5fTlVNQkVSICYmIChtX3N0
YXR1cy5sYXN0U3Ryb25nID09IFVfUklHSFRfVE9fTEVGVCB8fCBjb250ZXh0KCktPmRpcigpID09
IFVfUklHSFRfVE9fTEVGVCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAobV9zdGF0dXMu
ZW9yICE9IFVfRVVST1BFQU5fTlVNQkVSICYmIG1fc3RhdHVzLmxhc3RTdHJvbmcgPT0gVV9MRUZU
X1RPX1JJR0hUICYmIGNvbnRleHQoKS0+ZGlyKCkgPT0gVV9SSUdIVF9UT19MRUZUKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGVybWluYXRlIHRoZSBydW4gYmVmb3JlIHRoZSBuZXV0
cmFscy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bigpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQmVnaW4gYW4gUiBydW4gZm9yIHRoZSBuZXV0cmFscy4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gVV9SSUdIVF9UT19MRUZUOwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG1fZGlyZWN0aW9uID09IFVfT1RIRVJfTkVVVFJBTCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gbV9zdGF0dXMubGFzdFN0cm9uZyA9
PSBVX0xFRlRfVE9fUklHSFQgPyBVX0xFRlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQ7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fZW9yID0gbV9sYXN0OwotICAgICAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBtX2VvciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgIG1fc3RhdHVzLmVvciA9IFVf
QVJBQklDX05VTUJFUjsKLSAgICAgICAgICAgIGlmIChtX2RpcmVjdGlvbiA9PSBVX09USEVSX05F
VVRSQUwpCi0gICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBVX0FSQUJJQ19OVU1CRVI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFU
T1I6Ci0gICAgICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6Ci0gICAg
ICAgICAgICBpZiAobV9zdGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUikgewotICAgICAg
ICAgICAgICAgIGRpckN1cnJlbnQgPSBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAg
ICBtX2VvciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgICAgICBtX3N0YXR1cy5lb3IgPSBkaXJD
dXJyZW50OwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXR1cy5sYXN0ICE9IFVfRVVST1BF
QU5fTlVNQkVSX1RFUk1JTkFUT1IpCi0gICAgICAgICAgICAgICAgbV9sYXN0QmVmb3JlRVQgPSBt
X2VtcHR5UnVuID8gbV9lb3IgOiBtX2xhc3Q7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAvLyBib3VuZGFyeSBuZXV0cmFscyBzaG91bGQgYmUgaWdub3JlZAotICAgICAgICBjYXNlIFVf
Qk9VTkRBUllfTkVVVFJBTDoKLSAgICAgICAgICAgIGlmIChtX2VvciA9PSBtX2xhc3QpCi0gICAg
ICAgICAgICAgICAgbV9lb3IgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIC8vIG5ldXRyYWxzCi0gICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogV2hhdCBkbyB3ZSBkbyB3aXRoIG5ld2xpbmUgYW5kIHBhcmFncmFw
aCBzZXBhcmF0b3JzIHRoYXQgY29tZSB0byBoZXJlPwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgcnVsZSBMMS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVfV0hJVEVf
U1BBQ0VfTkVVVFJBTDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVfT1RIRVJf
TkVVVFJBTDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGFzdEVuZCAmJiAobV9lb3IgPT0g
bV9jdXJyZW50IHx8ICFuZWVkc0NvbnRpbnVlUGFzdEVuZCgpKSkgewotICAgICAgICAgICAgaWYg
KCFtX3JlYWNoZWRFbmRPZkxpbmUpIHsKLSAgICAgICAgICAgICAgICBtX2VvciA9IGVuZE9mTGlu
ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fc3RhdHVzLmVvcikgewotICAgICAgICAgICAg
ICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBV
X1JJR0hUX1RPX0xFRlQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVS
OgotICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPSBtX3N0YXR1cy5lb3I7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBV
X0VVUk9QRUFOX05VTUJFUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0g
bV9zdGF0dXMubGFzdFN0cm9uZyA9PSBVX0xFRlRfVE9fUklHSFQgPyBVX0xFRlRfVE9fUklHSFQg
OiBVX0VVUk9QRUFOX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IGhhbmRsZSBuZXV0cmFscyBpbiB0aGlzIGNhc2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0ODE3Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXBwZW5kUnVuKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtX2N1cnJlbnQgPSBlbmQ7Ci0gICAgICAgICAgICBtX3N0
YXR1cyA9IHN0YXRlQXRFbmQubV9zdGF0dXM7Ci0gICAgICAgICAgICBtX3NvciA9IHN0YXRlQXRF
bmQubV9zb3I7IAotICAgICAgICAgICAgbV9lb3IgPSBzdGF0ZUF0RW5kLm1fZW9yOwotICAgICAg
ICAgICAgbV9sYXN0ID0gc3RhdGVBdEVuZC5tX2xhc3Q7Ci0gICAgICAgICAgICBtX3JlYWNoZWRF
bmRPZkxpbmUgPSBzdGF0ZUF0RW5kLm1fcmVhY2hlZEVuZE9mTGluZTsKLSAgICAgICAgICAgIG1f
bGFzdEJlZm9yZUVUID0gc3RhdGVBdEVuZC5tX2xhc3RCZWZvcmVFVDsKLSAgICAgICAgICAgIG1f
ZW1wdHlSdW4gPSBzdGF0ZUF0RW5kLm1fZW1wdHlSdW47Ci0gICAgICAgICAgICBtX2RpcmVjdGlv
biA9IFVfT1RIRVJfTkVVVFJBTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdXBkYXRlU3RhdHVzTGFzdEZyb21DdXJyZW50RGlyZWN0aW9uKGRpckN1cnJlbnQpOwot
ICAgICAgICBtX2xhc3QgPSBtX2N1cnJlbnQ7Ci0KLSAgICAgICAgaWYgKG1fZW1wdHlSdW4pIHsK
LSAgICAgICAgICAgIG1fc29yID0gbV9jdXJyZW50OwotICAgICAgICAgICAgbV9lbXB0eVJ1biA9
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5jcmVtZW50KCk7Ci0gICAgICAgIGlmICgh
bV9jdXJyZW50RXhwbGljaXRFbWJlZGRpbmdTZXF1ZW5jZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGJvb2wgY29tbWl0dGVkID0gY29tbWl0RXhwbGljaXRFbWJlZGRpbmcoKTsKLSAgICAgICAg
ICAgIGlmIChjb21taXR0ZWQgJiYgcGFzdEVuZCkgewotICAgICAgICAgICAgICAgIG1fY3VycmVu
dCA9IGVuZDsKLSAgICAgICAgICAgICAgICBtX3N0YXR1cyA9IHN0YXRlQXRFbmQubV9zdGF0dXM7
Ci0gICAgICAgICAgICAgICAgbV9zb3IgPSBzdGF0ZUF0RW5kLm1fc29yOyAKLSAgICAgICAgICAg
ICAgICBtX2VvciA9IHN0YXRlQXRFbmQubV9lb3I7Ci0gICAgICAgICAgICAgICAgbV9sYXN0ID0g
c3RhdGVBdEVuZC5tX2xhc3Q7Ci0gICAgICAgICAgICAgICAgbV9yZWFjaGVkRW5kT2ZMaW5lID0g
c3RhdGVBdEVuZC5tX3JlYWNoZWRFbmRPZkxpbmU7Ci0gICAgICAgICAgICAgICAgbV9sYXN0QmVm
b3JlRVQgPSBzdGF0ZUF0RW5kLm1fbGFzdEJlZm9yZUVUOwotICAgICAgICAgICAgICAgIG1fZW1w
dHlSdW4gPSBzdGF0ZUF0RW5kLm1fZW1wdHlSdW47Ci0gICAgICAgICAgICAgICAgbV9kaXJlY3Rp
b24gPSBVX09USEVSX05FVVRSQUw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXBhc3RFbmQgJiYgKG1fY3VycmVudCA9PSBl
bmQgfHwgbV9jdXJyZW50LmF0RW5kKCkpKSB7Ci0gICAgICAgICAgICBpZiAobV9lbXB0eVJ1bikK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHN0YXRlQXRFbmQubV9zdGF0dXMg
PSBtX3N0YXR1czsKLSAgICAgICAgICAgIHN0YXRlQXRFbmQubV9zb3IgPSBtX3NvcjsKLSAgICAg
ICAgICAgIHN0YXRlQXRFbmQubV9lb3IgPSBtX2VvcjsKLSAgICAgICAgICAgIHN0YXRlQXRFbmQu
bV9sYXN0ID0gbV9sYXN0OwotICAgICAgICAgICAgc3RhdGVBdEVuZC5tX3JlYWNoZWRFbmRPZkxp
bmUgPSBtX3JlYWNoZWRFbmRPZkxpbmU7Ci0gICAgICAgICAgICBzdGF0ZUF0RW5kLm1fbGFzdEJl
Zm9yZUVUID0gbV9sYXN0QmVmb3JlRVQ7Ci0gICAgICAgICAgICBzdGF0ZUF0RW5kLm1fZW1wdHlS
dW4gPSBtX2VtcHR5UnVuOwotICAgICAgICAgICAgZW5kT2ZMaW5lID0gbV9sYXN0OwotICAgICAg
ICAgICAgcGFzdEVuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX3J1bnMuc2V0
TG9naWNhbGx5TGFzdFJ1bihtX3J1bnMubGFzdFJ1bigpKTsKLSAgICByZW9yZGVyUnVuc0Zyb21M
ZXZlbHMoKTsKLSAgICBlbmRPZkxpbmUgPSBJdGVyYXRvcigpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgUnVuLCB0eXBlbmFtZSBEZXJpdmVkQ2xhc3M+Ci12b2lk
IEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZlZENsYXNzPjo6c2V0V2hpdGVz
cGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVuJiBydW4sIHNpemVfdCB0
cmFuc2l0aW9uKQotewotICAgIEFTU0VSVCghbV93aGl0ZXNwYWNlQ29sbGFwc2luZ1RyYW5zaXRp
b25Gb3JJc29sYXRlZFJ1bi5jb250YWlucygmcnVuKSk7Ci0gICAgbV93aGl0ZXNwYWNlQ29sbGFw
c2luZ1RyYW5zaXRpb25Gb3JJc29sYXRlZFJ1bi5hZGQoJnJ1biwgdHJhbnNpdGlvbik7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBSdW4sIHR5cGVuYW1lIERlcml2
ZWRDbGFzcz4KLXVuc2lnbmVkIEJpZGlSZXNvbHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgRGVyaXZl
ZENsYXNzPjo6d2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4oUnVu
JiBydW4pCi17Ci0gICAgcmV0dXJuIG1fd2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9y
SXNvbGF0ZWRSdW4udGFrZSgmcnVuKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2NjgzOGEyNTJjNWMzMjRkZDMwN2ZkOGZlNWI2MmNkNDkzOTkyYmVkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQmlkaVJ1bkxpc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgQmlkaVJ1bkxpc3RfaAotI2Rl
ZmluZSBCaWRpUnVuTGlzdF9oCi0KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotY2xhc3MgQmlkaVJ1bkxp
c3QgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJpZGlSdW5MaXN0KTsKLXB1YmxpYzoKLSAg
ICBCaWRpUnVuTGlzdCgpCi0gICAgICAgIDogbV9sYXN0UnVuKG51bGxwdHIpCi0gICAgICAgICwg
bV9sb2dpY2FsbHlMYXN0UnVuKG51bGxwdHIpCi0gICAgICAgICwgbV9ydW5Db3VudCgwKQotICAg
IHsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogT25jZSBCaWRpUmVzb2x2ZXIgbm8gbG9uZ2VyIG93
bnMgdGhlIEJpZGlSdW5MaXN0LAotICAgIC8vIHRoZW4gfkJpZGlSdW5MaXN0IHNob3VsZCBjYWxs
IGRlbGV0ZVJ1bnMoKSBhdXRvbWF0aWNhbGx5LgotCi0gICAgUnVuKiBmaXJzdFJ1bigpIGNvbnN0
IHsgcmV0dXJuIG1fZmlyc3RSdW4uZ2V0KCk7IH0KLSAgICBSdW4qIGxhc3RSdW4oKSBjb25zdCB7
IHJldHVybiBtX2xhc3RSdW47IH0KLSAgICBSdW4qIGxvZ2ljYWxseUxhc3RSdW4oKSBjb25zdCB7
IHJldHVybiBtX2xvZ2ljYWxseUxhc3RSdW47IH0KLSAgICB1bnNpZ25lZCBydW5Db3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcnVuQ291bnQ7IH0KLQotICAgIHZvaWQgYXBwZW5kUnVuKHN0ZDo6dW5p
cXVlX3B0cjxSdW4+JiYpOwotICAgIHZvaWQgcHJlcGVuZFJ1bihzdGQ6OnVuaXF1ZV9wdHI8UnVu
PiYmKTsKLQotICAgIHZvaWQgbW92ZVJ1blRvRW5kKFJ1biopOwotICAgIHZvaWQgbW92ZVJ1blRv
QmVnaW5uaW5nKFJ1biopOwotCi0gICAgdm9pZCBjbGVhcigpOwotICAgIHZvaWQgcmV2ZXJzZVJ1
bnModW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7Ci0gICAgdm9pZCByZW9yZGVyUnVuc0Zy
b21MZXZlbHMoKTsKLQotICAgIHZvaWQgc2V0TG9naWNhbGx5TGFzdFJ1bihSdW4qIHJ1bikgeyBt
X2xvZ2ljYWxseUxhc3RSdW4gPSBydW47IH0KLQotICAgIHZvaWQgcmVwbGFjZVJ1bldpdGhSdW5z
KFJ1biogdG9SZXBsYWNlLCBCaWRpUnVuTGlzdDxSdW4+JiBuZXdSdW5zKTsKLQotcHJpdmF0ZToK
LQotICAgIC8vIFRoZSBydW5zIGZvcm0gYSBzaW5nbHktbGlua2VkLWxpc3QsIHdoZXJlIHRoZSBs
aW5rcyAoUnVuOjptX25leHQpIGltcGx5IG93bmVyc2hpcCAoYW5kIGFyZSBvZiB0eXBlIHN0ZDo6
dW5pcXVlX3B0cikuCi0gICAgLy8gVGhlIHJhdyBwb2ludGVycyBiZWxvdyBwb2ludCBpbnRvIHRo
ZSBzaW5nbHktbGlua2VkLWxpc3QuCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gbV9maXJzdFJ1
bjsgLy8gVGhlIGhlYWQgb2YgdGhlIGxpc3QKLSAgICBSdW4qIG1fbGFzdFJ1bjsKLSAgICBSdW4q
IG1fbG9naWNhbGx5TGFzdFJ1bjsKLSAgICB1bnNpZ25lZCBtX3J1bkNvdW50OwotfTsKLQotdGVt
cGxhdGUgPGNsYXNzIFJ1bj4KLWlubGluZSB2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OmFwcGVuZFJ1
bihzdGQ6OnVuaXF1ZV9wdHI8UnVuPiYmIHJ1bikKLXsKLSAgICBpZiAoIW1fZmlyc3RSdW4pIHsK
LSAgICAgICAgbV9maXJzdFJ1biA9IFdURk1vdmUocnVuKTsKLSAgICAgICAgbV9sYXN0UnVuID0g
bV9maXJzdFJ1bi5nZXQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2xhc3RSdW4tPnNldE5l
eHQoV1RGTW92ZShydW4pKTsKLSAgICAgICAgbV9sYXN0UnVuID0gbV9sYXN0UnVuLT5uZXh0KCk7
Ci0gICAgfQotICAgIG1fcnVuQ291bnQrKzsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFJ1bj4KLWlu
bGluZSB2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnByZXBlbmRSdW4oc3RkOjp1bmlxdWVfcHRyPFJ1
bj4mJiBydW4pCi17Ci0gICAgQVNTRVJUKCFydW4tPm5leHQoKSk7Ci0KLSAgICBpZiAoIW1fbGFz
dFJ1bikKLSAgICAgICAgbV9sYXN0UnVuID0gcnVuLmdldCgpOwotICAgIGVsc2UKLSAgICAgICAg
cnVuLT5zZXROZXh0KFdURk1vdmUobV9maXJzdFJ1bikpOwotICAgIG1fZmlyc3RSdW4gPSBXVEZN
b3ZlKHJ1bik7Ci0gICAgbV9ydW5Db3VudCsrOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgot
aW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6bW92ZVJ1blRvRW5kKFJ1biogcnVuKQotewot
ICAgIEFTU0VSVChtX2ZpcnN0UnVuKTsKLSAgICBBU1NFUlQobV9sYXN0UnVuKTsKLSAgICBBU1NF
UlQocnVuLT5uZXh0KCkpOwotCi0gICAgUnVuKiBwcmV2aW91cyA9IG51bGxwdHI7Ci0gICAgUnVu
KiBjdXJyZW50ID0gbV9maXJzdFJ1bi5nZXQoKTsKLSAgICB3aGlsZSAoY3VycmVudCAhPSBydW4p
IHsKLSAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50OwotICAgICAgICBjdXJyZW50ID0gcHJldmlv
dXMtPm5leHQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXByZXZpb3VzKSB7Ci0gICAgICAgIEFTU0VS
VChtX2ZpcnN0UnVuLmdldCgpID09IHJ1bik7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+
IG9yaWdpbmFsRmlyc3RSdW4gPSBXVEZNb3ZlKG1fZmlyc3RSdW4pOwotICAgICAgICBtX2ZpcnN0
UnVuID0gb3JpZ2luYWxGaXJzdFJ1bi0+dGFrZU5leHQoKTsKLSAgICAgICAgbV9sYXN0UnVuLT5z
ZXROZXh0KFdURk1vdmUob3JpZ2luYWxGaXJzdFJ1bikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9IHByZXZpb3VzLT50YWtlTmV4dCgpOwotICAg
ICAgICBwcmV2aW91cy0+c2V0TmV4dChjdXJyZW50LT50YWtlTmV4dCgpKTsKLSAgICAgICAgbV9s
YXN0UnVuLT5zZXROZXh0KFdURk1vdmUodGFyZ2V0KSk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgUnVuPgotaW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6bW92ZVJ1blRvQmVnaW5u
aW5nKFJ1biogcnVuKQotewotICAgIEFTU0VSVChtX2ZpcnN0UnVuKTsKLSAgICBBU1NFUlQobV9s
YXN0UnVuKTsKLSAgICBBU1NFUlQocnVuICE9IG1fZmlyc3RSdW4uZ2V0KCkpOwotCi0gICAgUnVu
KiBwcmV2aW91cyA9IG1fZmlyc3RSdW4uZ2V0KCk7Ci0gICAgUnVuKiBjdXJyZW50ID0gcHJldmlv
dXMtPm5leHQoKTsKLSAgICB3aGlsZSAoY3VycmVudCAhPSBydW4pIHsKLSAgICAgICAgcHJldmlv
dXMgPSBjdXJyZW50OwotICAgICAgICBjdXJyZW50ID0gcHJldmlvdXMtPm5leHQoKTsKLSAgICB9
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91cy0+dGFrZU5leHQo
KTsKLSAgICBwcmV2aW91cy0+c2V0TmV4dChydW4tPnRha2VOZXh0KCkpOwotICAgIGlmIChydW4g
PT0gbV9sYXN0UnVuKQotICAgICAgICBtX2xhc3RSdW4gPSBwcmV2aW91czsKLQotICAgIHRhcmdl
dC0+c2V0TmV4dChXVEZNb3ZlKG1fZmlyc3RSdW4pKTsKLSAgICBtX2ZpcnN0UnVuID0gV1RGTW92
ZSh0YXJnZXQpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotdm9pZCBCaWRpUnVuTGlzdDxS
dW4+OjpyZXBsYWNlUnVuV2l0aFJ1bnMoUnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4m
IG5ld1J1bnMpCi17Ci0gICAgQVNTRVJUKG5ld1J1bnMucnVuQ291bnQoKSk7Ci0gICAgQVNTRVJU
KG1fZmlyc3RSdW4pOwotICAgIEFTU0VSVCh0b1JlcGxhY2UpOwotCi0gICAgbV9ydW5Db3VudCAr
PSBuZXdSdW5zLnJ1bkNvdW50KCkgLSAxOyAvLyBXZSBhcmUgYWRkaW5nIHRoZSBuZXcgcnVucyBh
bmQgcmVtb3ZpbmcgdG9SZXBsYWNlLgotCi0gICAgLy8gRml4IHVwIGFueSBwb2ludGVycyB3aGlj
aCBtYXkgZW5kIHVwIHN0YWxlLgotICAgIGlmIChtX2xhc3RSdW4gPT0gdG9SZXBsYWNlKQotICAg
ICAgICBtX2xhc3RSdW4gPSBuZXdSdW5zLmxhc3RSdW4oKTsKLSAgICBpZiAobV9sb2dpY2FsbHlM
YXN0UnVuID09IHRvUmVwbGFjZSkKLSAgICAgICAgbV9sb2dpY2FsbHlMYXN0UnVuID0gbmV3UnVu
cy5sb2dpY2FsbHlMYXN0UnVuKCk7Ci0KLSAgICBpZiAobV9maXJzdFJ1bi5nZXQoKSA9PSB0b1Jl
cGxhY2UpIHsKLSAgICAgICAgbmV3UnVucy5tX2xhc3RSdW4tPnNldE5leHQobV9maXJzdFJ1bi0+
dGFrZU5leHQoKSk7Ci0gICAgICAgIG1fZmlyc3RSdW4gPSBXVEZNb3ZlKG5ld1J1bnMubV9maXJz
dFJ1bik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRmluZCB0aGUgcnVuIGp1c3QgYmVmb3Jl
ICJ0b1JlcGxhY2UiIGluIHRoZSBsaXN0IG9mIHJ1bnMuCi0gICAgICAgIFJ1biogcHJldmlvdXNS
dW4gPSBtX2ZpcnN0UnVuLmdldCgpOwotICAgICAgICB3aGlsZSAocHJldmlvdXNSdW4tPm5leHQo
KSAhPSB0b1JlcGxhY2UpCi0gICAgICAgICAgICBwcmV2aW91c1J1biA9IHByZXZpb3VzUnVuLT5u
ZXh0KCk7Ci0gICAgICAgIEFTU0VSVChwcmV2aW91c1J1bik7Ci0KLSAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXNSdW4tPnRha2VOZXh0KCk7Ci0gICAgICAgIHBy
ZXZpb3VzUnVuLT5zZXROZXh0KFdURk1vdmUobmV3UnVucy5tX2ZpcnN0UnVuKSk7Ci0gICAgICAg
IG5ld1J1bnMubV9sYXN0UnVuLT5zZXROZXh0KHRhcmdldC0+dGFrZU5leHQoKSk7Ci0gICAgfQot
Ci0gICAgbmV3UnVucy5jbGVhcigpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotdm9pZCBC
aWRpUnVuTGlzdDxSdW4+OjpjbGVhcigpCi17Ci0gICAgbV9maXJzdFJ1biA9IG51bGxwdHI7Ci0g
ICAgbV9sYXN0UnVuID0gbnVsbHB0cjsKLSAgICBtX2xvZ2ljYWxseUxhc3RSdW4gPSBudWxscHRy
OwotICAgIG1fcnVuQ291bnQgPSAwOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotdm9pZCBC
aWRpUnVuTGlzdDxSdW4+OjpyZXZlcnNlUnVucyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5k
KQotewotICAgIGlmIChzdGFydCA+PSBlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGVuZCA8IG1fcnVuQ291bnQpOwotCi0gICAgLy8g
R2V0IHRoZSBpdGVtIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIHJ1bnMgdG8gcmV2ZXJzZSBhbmQg
cHV0IGl0IGluCi0gICAgLy8gfGJlZm9yZVN0YXJ0fC4gfGN1cnJ8IHNob3VsZCBwb2ludCB0byB0
aGUgZmlyc3QgcnVuIHRvIHJldmVyc2UuCi0gICAgUnVuKiBjdXJyID0gbV9maXJzdFJ1bi5nZXQo
KTsKLSAgICBSdW4qIGJlZm9yZVN0YXJ0ID0gbnVsbHB0cjsKLSAgICB1bnNpZ25lZCBpID0gMDsK
LSAgICBmb3IgKDsgaSA8IHN0YXJ0OyArK2kpIHsKLSAgICAgICAgYmVmb3JlU3RhcnQgPSBjdXJy
OwotICAgICAgICBjdXJyID0gY3Vyci0+bmV4dCgpOwotICAgIH0KLSAgICBSdW4qIHN0YXJ0UnVu
ID0gY3VycjsKLQotICAgIGZvciAoOyBpIDwgZW5kOyArK2kpCi0gICAgICAgIGN1cnIgPSBjdXJy
LT5uZXh0KCk7Ci0KLSAgICBpZiAoIWN1cnItPm5leHQoKSkKLSAgICAgICAgbV9sYXN0UnVuID0g
c3RhcnRSdW47Ci0KLSAgICAvLyBTdGFuZGFyZCAic2xpZGluZyB3aW5kb3ciIG9mIDMgcG9pbnRl
cnMKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBwcmV2aW91cyA9IGN1cnItPnRha2VOZXh0KCk7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gY3VycmVudCA9IGJlZm9yZVN0YXJ0ID8gYmVmb3Jl
U3RhcnQtPnRha2VOZXh0KCkgOiBXVEZNb3ZlKG1fZmlyc3RSdW4pOwotICAgIHdoaWxlIChjdXJy
ZW50KSB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IG5leHQgPSBjdXJyZW50LT50YWtl
TmV4dCgpOwotICAgICAgICBjdXJyZW50LT5zZXROZXh0KFdURk1vdmUocHJldmlvdXMpKTsKLSAg
ICAgICAgcHJldmlvdXMgPSBXVEZNb3ZlKGN1cnJlbnQpOwotICAgICAgICBjdXJyZW50ID0gV1RG
TW92ZShuZXh0KTsKLSAgICB9Ci0KLSAgICBpZiAoYmVmb3JlU3RhcnQpCi0gICAgICAgIGJlZm9y
ZVN0YXJ0LT5zZXROZXh0KFdURk1vdmUocHJldmlvdXMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
Zmlyc3RSdW4gPSBXVEZNb3ZlKHByZXZpb3VzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gQmlkaVJ1bkxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvU3RyaW5nV2l0aERpcmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TdHJpbmdXaXRoRGlyZWN0aW9uLmgKaW5kZXggMDJmNDQ4MjAwYzk0NGM0YWUxNGYx
Mjk4YzM4YjI5MTE4NzM1ZDEzOS4uY2FjMDE0YWMyZGNiZTBjMjliMDI5NWNlZDQyNzQyNjdiZDY0
YTAxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdXaXRo
RGlyZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdXaXRo
RGlyZWN0aW9uLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1
Y3QgU3RyaW5nV2l0aERpcmVjdGlvbiB7CiAgICAgU3RyaW5nIHN0cmluZzsKLSAgICBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbiB7IFRleHREaXJlY3Rpb246OkxUUiB9OworICAgIFBBTDo6VGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24geyBQQUw6OlRleHREaXJlY3Rpb246OkxUUiB9OwogfTsKIAogaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiBhLCBjb25zdCBT
dHJpbmdXaXRoRGlyZWN0aW9uJiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0RGlyZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHREaXJlY3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVmZTk3ZGVhMGE1
YjBiZTQ4N2ZiODJiMWRiMjU3ZDNlOTAzMzE0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHREaXJl
Y3Rpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIGNsYXNzIFRleHREaXJlY3Rp
b24gOiBib29sIHsgTFRSLCBSVEwgfTsKLQotaW5saW5lIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVj
dGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICByZXR1cm4gZGlyZWN0aW9uID09
IFRleHREaXJlY3Rpb246OkxUUjsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9Vbmljb2RlQmlkaS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9Vbmljb2RlQmlkaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQ5Y2ZlZmU2
NmM0Y2NmMzcyM2EwMjM1OWQ0NTcwNTcwMDFlMjYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29k
ZUJpZGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFVuaWNvZGVCaWRpX2gKLSNk
ZWZpbmUgVW5pY29kZUJpZGlfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gRVVuaWNv
ZGVCaWRpIHsKLSAgICBVQk5vcm1hbCwKLSAgICBFbWJlZCwKLSAgICBPdmVycmlkZSwKLSAgICBJ
c29sYXRlLAotICAgIFBsYWludGV4dCwKLSAgICBJc29sYXRlT3ZlcnJpZGUsCi19OyAKLQotaW5s
aW5lIGJvb2wgaXNJc29sYXRlZChjb25zdCBFVW5pY29kZUJpZGkmIHVuaWNvZGVCaWRpKQotewot
ICAgIHJldHVybiB1bmljb2RlQmlkaSA9PSBJc29sYXRlIHx8IHVuaWNvZGVCaWRpID09IElzb2xh
dGVPdmVycmlkZSB8fCB1bmljb2RlQmlkaSA9PSBQbGFpbnRleHQ7Ci19Ci0KLWlubGluZSBib29s
IGlzT3ZlcnJpZGUoRVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpKQotewotICAgIHJldHVybiB1bmlj
b2RlQmlkaSA9PSBPdmVycmlkZSB8fCB1bmljb2RlQmlkaSA9PSBJc29sYXRlT3ZlcnJpZGU7Ci19
Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1dyaXRpbmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2Rl
LmgKaW5kZXggZTIwN2EzNzQ4NDYxZmQ5ZjE5NmY4YzM3OTJmNDg5NTk1NTgwYjJmNC4uNDVlMjM0
ZmZhNDBmMjAzYTQ2MTk4MDAyYWEzYzU0NzE3NjNjNTYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Xcml0aW5nTW9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvV3JpdGluZ01vZGUuaApAQCAtMzEsOCArMzEsOCBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlIDxhcnJheT4KKyNpbmNs
dWRlIDxwYWwvdGV4dC9UZXh0RGlyZWN0aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDMsNyArNDMsNyBAQCBlbnVtIGNsYXNzIFdyaXRpbmdNb2RlIDogdWludDhfdCB7CiAgICAg
UmlnaHRUb0xlZnQgPSAzLCAvLyB2ZXJ0aWNhbC1ybAogfTsKIAotY29uc3RleHByIHVuc2lnbmVk
IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uKQorY29uc3RleHByIHVuc2lnbmVkIG1ha2VUZXh0Rmxvd0luaXRhbGl6
ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24p
CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih3cml0aW5nTW9kZSkgPDwgMSB8
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkaXJlY3Rpb24pOwogfQpAQCAtNTEsMTcgKzUxLDE3IEBA
IGNvbnN0ZXhwciB1bnNpZ25lZCBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uCiAvLyBEZWZpbmUgdGhlIHRleHQgZmxvdyBpbiB0ZXJt
cyBvZiB0aGUgd3JpdGluZyBtb2RlIGFuZCB0aGUgdGV4dCBkaXJlY3Rpb24uIFRoZSBmaXJzdAog
Ly8gcGFydCBpcyB0aGUgbGluZSBncm93aW5nIGRpcmVjdGlvbiBhbmQgdGhlIHNlY29uZCBwYXJ0
IGlzIHRoZSBibG9jayBncm93aW5nIGRpcmVjdGlvbi4KIGVudW0gVGV4dEZsb3cgewotICAgIElu
bGluZUVhc3RCbG9ja1NvdXRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6
VG9wVG9Cb3R0b20sIFRleHREaXJlY3Rpb246OkxUUiksCi0gICAgSW5saW5lV2VzdEJsb2NrU291
dGggPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSwgVGV4
dERpcmVjdGlvbjo6UlRMKSwKLSAgICBJbmxpbmVFYXN0QmxvY2tOb3J0aCA9IG1ha2VUZXh0Rmxv
d0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkJvdHRvbVRvVG9wLCBUZXh0RGlyZWN0aW9uOjpMVFIp
LAotICAgIElubGluZVdlc3RCbG9ja05vcnRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0
aW5nTW9kZTo6Qm90dG9tVG9Ub3AsIFRleHREaXJlY3Rpb246OlJUTCksCi0gICAgSW5saW5lU291
dGhCbG9ja0Vhc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpMZWZ0VG9S
aWdodCwgVGV4dERpcmVjdGlvbjo6TFRSKSwKLSAgICBJbmxpbmVTb3V0aEJsb2NrV2VzdCA9IG1h
a2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0LCBUZXh0RGlyZWN0
aW9uOjpSVEwpLAotICAgIElubGluZU5vcnRoQmxvY2tFYXN0ID0gbWFrZVRleHRGbG93SW5pdGFs
aXplcihXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQsIFRleHREaXJlY3Rpb246OkxUUiksCi0gICAg
SW5saW5lTm9ydGhCbG9ja1dlc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2Rl
OjpSaWdodFRvTGVmdCwgVGV4dERpcmVjdGlvbjo6UlRMKQorICAgIElubGluZUVhc3RCbG9ja1Nv
dXRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20sIFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSKSwKKyAgICBJbmxpbmVXZXN0QmxvY2tTb3V0aCA9IG1ha2VU
ZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tLCBQQUw6OlRleHREaXJl
Y3Rpb246OlJUTCksCisgICAgSW5saW5lRWFzdEJsb2NrTm9ydGggPSBtYWtlVGV4dEZsb3dJbml0
YWxpemVyKFdyaXRpbmdNb2RlOjpCb3R0b21Ub1RvcCwgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIp
LAorICAgIElubGluZVdlc3RCbG9ja05vcnRoID0gbWFrZVRleHRGbG93SW5pdGFsaXplcihXcml0
aW5nTW9kZTo6Qm90dG9tVG9Ub3AsIFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMKSwKKyAgICBJbmxp
bmVTb3V0aEJsb2NrRWFzdCA9IG1ha2VUZXh0Rmxvd0luaXRhbGl6ZXIoV3JpdGluZ01vZGU6Okxl
ZnRUb1JpZ2h0LCBQQUw6OlRleHREaXJlY3Rpb246OkxUUiksCisgICAgSW5saW5lU291dGhCbG9j
a1dlc3QgPSBtYWtlVGV4dEZsb3dJbml0YWxpemVyKFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCwg
UEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpLAorICAgIElubGluZU5vcnRoQmxvY2tFYXN0ID0gbWFr
ZVRleHRGbG93SW5pdGFsaXplcihXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQsIFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSKSwKKyAgICBJbmxpbmVOb3J0aEJsb2NrV2VzdCA9IG1ha2VUZXh0Rmxvd0lu
aXRhbGl6ZXIoV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0LCBQQUw6OlRleHREaXJlY3Rpb246OlJU
TCkKIH07CiAKLWNvbnN0ZXhwciBpbmxpbmUgVGV4dEZsb3cgbWFrZVRleHRGbG93KFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKK2NvbnN0ZXhwciBpbmxp
bmUgVGV4dEZsb3cgbWFrZVRleHRGbG93KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBQQUw6OlRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0Rmxv
dz4obWFrZVRleHRGbG93SW5pdGFsaXplcih3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSk7CiB9CkBA
IC05MywxMyArOTMsMTMgQEAgY29uc3RleHByIGlubGluZSBib29sIGlzRmxpcHBlZExpbmVzVGV4
dEZsb3coVGV4dEZsb3cgdGV4dGZsb3cpCiAvLyBMaW5lcyBoYXZlIHZlcnRpY2FsIG9yaWVudGF0
aW9uOyBtb2RlcyB2ZXJ0aWNhbC1sciBvciB2ZXJ0aWNhbC1ybC4KIGNvbnN0ZXhwciBpbmxpbmUg
Ym9vbCBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiB7Ci0g
ICAgcmV0dXJuIGlzVmVydGljYWxUZXh0RmxvdyhtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIFRl
eHREaXJlY3Rpb246OkxUUikpOworICAgIHJldHVybiBpc1ZlcnRpY2FsVGV4dEZsb3cobWFrZVRl
eHRGbG93KHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb246OkxUUikpOwogfQogCiAvLyBC
bG9jayBwcm9ncmVzc2lvbiBpbmNyZWFzZXMgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byBu
b3JtYWw7IG1vZGVzIHZlcnRpY2FsLXJsIG9yIGhvcml6b250YWwtYnQuCiBjb25zdGV4cHIgaW5s
aW5lIGJvb2wgaXNGbGlwcGVkV3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiB7
Ci0gICAgcmV0dXJuIGlzRmxpcHBlZFRleHRGbG93KG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwg
VGV4dERpcmVjdGlvbjo6TFRSKSk7CisgICAgcmV0dXJuIGlzRmxpcHBlZFRleHRGbG93KG1ha2VU
ZXh0Rmxvdyh3cml0aW5nTW9kZSwgUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpKTsKIH0KIAogLy8g
TGluZXMgaGF2ZSBob3Jpem9udGFsIG9yaWVudGF0aW9uOyBtb2RlcyBob3Jpem9udGFsLXRiIG9y
IGhvcml6b250YWwtYnQuCkBAIC0xMTEsNyArMTExLDcgQEAgY29uc3RleHByIGlubGluZSBib29s
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogLy8gQm90
dG9tIG9mIHRoZSBsaW5lIG9jY3VycyBlYXJsaWVyIGluIHRoZSBibG9jazsgbW9kZXMgdmVydGlj
YWwtbHIgb3IgaG9yaXpvbnRhbC1idC4KIGNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0ZsaXBwZWRM
aW5lc1dyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogewotICAgIHJldHVybiBp
c0ZsaXBwZWRMaW5lc1RleHRGbG93KG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgVGV4dERpcmVj
dGlvbjo6TFRSKSk7CisgICAgcmV0dXJuIGlzRmxpcHBlZExpbmVzVGV4dEZsb3cobWFrZVRleHRG
bG93KHdyaXRpbmdNb2RlLCBQQUw6OlRleHREaXJlY3Rpb246OkxUUikpOwogfQogCiBlbnVtIGNs
YXNzIExvZ2ljYWxCb3hTaWRlIDogdWludDhfdCB7CkBAIC0xOTEsNyArMTkxLDcgQEAgY29uc3Rl
eHByIGlubGluZSBCb3hTaWRlIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUoVGV4dEZsb3cg
dGV4dGZsb3csIExvZ2ljYWwKIGNvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSBtYXBMb2dpY2FsU2lk
ZVRvUGh5c2ljYWxTaWRlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBMb2dpY2FsQm94U2lkZSBs
b2dpY2FsU2lkZSkKIHsKICAgICAvLyBTZXQgdGhlIGRpcmVjdGlvbiBzdWNoIHRoYXQgc2lkZSBp
cyBtaXJyb3JlZCBpZiBpc0ZsaXBwZWRXcml0aW5nTW9kZSgpIGlzIHRydWUKLSAgICBUZXh0RGly
ZWN0aW9uIGRpcmVjdGlvbiA9IGlzRmxpcHBlZFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IFRl
eHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsKKyAgICBQQUw6OlRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uID0gaXNGbGlwcGVkV3JpdGluZ01vZGUod3JpdGluZ01vZGUpID8gUEFM
OjpUZXh0RGlyZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKICAgICByZXR1
cm4gbWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUs
IGRpcmVjdGlvbiksIGxvZ2ljYWxTaWRlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0JpZGlSdW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlS
dW4uY3BwCmluZGV4IDYxYWZlZWUzNDRiYjlhMTM3YWQ2N2UwOGIwNzk1Y2ZlZjQ4OTcxNjEuLmM5
MzMzYmQyZmUxYzgzYjQ3Njg1MTUyNTgwZmRhMDk5Y2JhNDE2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQmlkaVJ1bi5jcHAKQEAgLTMxLDggKzMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBERUZJTkVfREVCVUdfT05MWV9HTE9CQUwoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIsIGJp
ZGlSdW5Db3VudGVyLCAoIkJpZGlSdW4iKSk7CiAKLUJpZGlSdW46OkJpZGlSdW4odW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIHN0b3AsIFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIEJpZGlDb250ZXh0
KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlvbiBkaXIpCi0gICAgOiBCaWRpQ2hhcmFjdGVyUnVuKHN0
YXJ0LCBzdG9wLCBjb250ZXh0LCBkaXIpCitCaWRpUnVuOjpCaWRpUnVuKHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBzdG9wLCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBQQUw6OkJpZGlDb250ZXh0
KiBjb250ZXh0LCBVQ2hhckRpcmVjdGlvbiBkaXIpCisgICAgOiBQQUw6OkJpZGlDaGFyYWN0ZXJS
dW4oc3RhcnQsIHN0b3AsIGNvbnRleHQsIGRpcikKICAgICAsIG1fcmVuZGVyZXIocmVuZGVyZXIp
CiAgICAgLCBtX2JveChudWxscHRyKQogewpAQCAtNTMsOCArNTMsOCBAQCBCaWRpUnVuOjp+Qmlk
aVJ1bigpCiAKIHN0ZDo6dW5pcXVlX3B0cjxCaWRpUnVuPiBCaWRpUnVuOjp0YWtlTmV4dCgpCiB7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+IG5leHQgPSBCaWRpQ2hhcmFj
dGVyUnVuOjp0YWtlTmV4dCgpOwotICAgIEJpZGlDaGFyYWN0ZXJSdW4qIHJhdyA9IG5leHQucmVs
ZWFzZSgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQUw6OkJpZGlDaGFyYWN0ZXJSdW4+IG5leHQg
PSBQQUw6OkJpZGlDaGFyYWN0ZXJSdW46OnRha2VOZXh0KCk7CisgICAgUEFMOjpCaWRpQ2hhcmFj
dGVyUnVuKiByYXcgPSBuZXh0LnJlbGVhc2UoKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1
bj4gcmVzdWx0ID0gc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+KHN0YXRpY19jYXN0PEJpZGlSdW4q
PihyYXcpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0JpZGlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVu
LmgKaW5kZXggZWQ3NzQ1ZDdkMWZhMGY0ZWIzNjVkYTUyYjZlZDgwYmZlZWRhNTYxZi4uODk2NzA1
ODBhNmYwZTI2OTMxZGRjNWFmZjlmN2E4NTU3ZmNlZTgxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
QmlkaVJ1bi5oCkBAIC0yMywyMCArMjMsMjMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
IDxwYWwvdGV4dC9CaWRpUmVzb2x2ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
Ci0jaW5jbHVkZSAiQmlkaVJlc29sdmVyLmgiCisKK25hbWVzcGFjZSBQQUwgeworY2xhc3MgQmlk
aUNvbnRleHQ7Cit9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQmlkaUNvbnRleHQ7
CiBjbGFzcyBMZWdhY3lJbmxpbmVCb3g7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiAKLXN0cnVjdCBC
aWRpUnVuIDogQmlkaUNoYXJhY3RlclJ1biB7Ci0gICAgQmlkaVJ1bih1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgc3RvcCwgUmVuZGVyT2JqZWN0JiwgQmlkaUNvbnRleHQqLCBVQ2hhckRpcmVjdGlv
bik7CitzdHJ1Y3QgQmlkaVJ1biA6IFBBTDo6QmlkaUNoYXJhY3RlclJ1biB7CisgICAgQmlkaVJ1
bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgc3RvcCwgUmVuZGVyT2JqZWN0JiwgUEFMOjpCaWRp
Q29udGV4dCosIFVDaGFyRGlyZWN0aW9uKTsKICAgICB+QmlkaVJ1bigpOwogCi0gICAgQmlkaVJ1
biogbmV4dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJpZGlSdW4qPihCaWRpQ2hhcmFjdGVyUnVu
OjpuZXh0KCkpOyB9CisgICAgQmlkaVJ1biogbmV4dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJp
ZGlSdW4qPihQQUw6OkJpZGlDaGFyYWN0ZXJSdW46Om5leHQoKSk7IH0KICAgICBzdGQ6OnVuaXF1
ZV9wdHI8QmlkaVJ1bj4gdGFrZU5leHQoKTsKICAgICBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKCkg
eyByZXR1cm4gbV9yZW5kZXJlcjsgfQogICAgIExlZ2FjeUlubGluZUJveCogYm94KCkgeyByZXR1
cm4gbV9ib3g7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApp
bmRleCBmNmIxMWQ5ZDYyOWFjZmJmYjg3ODYwY2I3YjhjZDI4Y2ViYzFiMThiLi41NDQzOWIzZjQ5
OTc2OTM2ZmNmZGQwNDMwMGUwZWVjMGE0ZWFhOTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC0yMjcsOSArMjI3LDkgQEAgU3RyaW5nIEhpdFRlc3RS
ZXN1bHQ6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9
CiAKLVN0cmluZyBIaXRUZXN0UmVzdWx0OjpzcGVsbGluZ1Rvb2xUaXAoVGV4dERpcmVjdGlvbiYg
ZGlyKSBjb25zdAorU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNwZWxsaW5nVG9vbFRpcChQQUw6OlRl
eHREaXJlY3Rpb24mIGRpcikgY29uc3QKIHsKLSAgICBkaXIgPSBUZXh0RGlyZWN0aW9uOjpMVFI7
CisgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgLy8gUmV0dXJuIHRoZSB0
b29sIHRpcCBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9pbnQsIGlmIGFueS4gT25seSBt
YXJrZXJzIGFzc29jaWF0ZWQgd2l0aCBiYWQgZ3JhbW1hcgogICAgIC8vIGN1cnJlbnRseSBzdXBw
bHkgc3RyaW5ncywgYnV0IG1heWJlIHNvbWVkYXkgbWFya2VycyBhc3NvY2lhdGVkIHdpdGggbWlz
c3BlbGxlZCB3b3JkcyB3aWxsIGFsc28uCiAgICAgaWYgKCFtX2lubmVyTm9uU2hhcmVkTm9kZSkK
QEAgLTI1OCw5ICsyNTgsOSBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6cmVwbGFjZWRTdHJpbmco
KSBjb25zdAogICAgIHJldHVybiBtYXJrZXItPmRlc2NyaXB0aW9uKCk7CiB9ICAgIAogICAgIAot
U3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKK1N0
cmluZyBIaXRUZXN0UmVzdWx0Ojp0aXRsZShQQUw6OlRleHREaXJlY3Rpb24mIGRpcikgY29uc3QK
IHsKLSAgICBkaXIgPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgZGlyID0gUEFMOjpUZXh0RGly
ZWN0aW9uOjpMVFI7CiAgICAgLy8gRmluZCB0aGUgdGl0bGUgaW4gdGhlIG5lYXJlc3QgZW5jbG9z
aW5nIERPTSBub2RlLgogICAgIC8vIEZvciA8YXJlYT4gdGFncyBpbiBpbWFnZSBtYXBzLCB3YWxr
IHRoZSB0cmVlIGZvciB0aGUgPGFyZWE+LCBub3QgdGhlIDxpbWc+IHVzaW5nIGl0LgogICAgIGZv
ciAoTm9kZSogdGl0bGVOb2RlID0gbV9pbm5lck5vZGUuZ2V0KCk7IHRpdGxlTm9kZTsgdGl0bGVO
b2RlID0gdGl0bGVOb2RlLT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpKSB7CkBAIC0yNzcsNyArMjc3
LDcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnRpdGxlKFRleHREaXJlY3Rpb24mIGRpcikgY29u
c3QKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5l
clRleHRJZlRydW5jYXRlZChUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CitTdHJpbmcgSGl0VGVz
dFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVuY2F0ZWQoUEFMOjpUZXh0RGlyZWN0aW9uJiBkaXIpIGNv
bnN0CiB7CiAgICAgZm9yIChOb2RlKiB0cnVuY2F0ZWROb2RlID0gbV9pbm5lck5vZGUuZ2V0KCk7
IHRydW5jYXRlZE5vZGU7IHRydW5jYXRlZE5vZGUgPSB0cnVuY2F0ZWROb2RlLT5wYXJlbnRJbkNv
bXBvc2VkVHJlZSgpKSB7CiAgICAgICAgIGlmICghaXM8RWxlbWVudD4oKnRydW5jYXRlZE5vZGUp
KQpAQCAtMjk5LDcgKzI5OSw3IEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0Ojppbm5lclRleHRJZlRy
dW5jYXRlZChUZXh0RGlyZWN0aW9uJiBkaXIpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBkaXIgPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFI7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuaAppbmRleCAzNWFhODBiNzQ0MDhiMzAwNDJmY2IzNDVmMmU0ZDE5NDJl
MjI1OTE3Li40NDFiZDdmNjI5NTBkMGY4MzY4YjM2MzJkNzMzMDhiNjAzN2EzNmY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKQEAgLTk0LDEwICs5NCwxMCBAQCBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRnJhbWUqIHRhcmdldEZyYW1lKCkgY29uc3Q7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1NlbGVjdGVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgU3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBzcGVsbGluZ1Rvb2xUaXAoVGV4dERpcmVjdGlvbiYpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIFN0cmluZyBzcGVsbGluZ1Rvb2xUaXAoUEFMOjpUZXh0RGlyZWN0aW9uJikgY29uc3Q7
CiAgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIHRpdGxlKFRleHREaXJlY3Rpb24mKSBjb25zdDsKLSAgICBTdHJpbmcgaW5uZXJUZXh0
SWZUcnVuY2F0ZWQoVGV4dERpcmVjdGlvbiYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyB0aXRsZShQQUw6OlRleHREaXJlY3Rpb24mKSBjb25zdDsKKyAgICBTdHJpbmcgaW5uZXJU
ZXh0SWZUcnVuY2F0ZWQoUEFMOjpUZXh0RGlyZWN0aW9uJikgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgU3RyaW5nIGFsdERpc3BsYXlTdHJpbmcoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgdGl0bGVEaXNwbGF5U3RyaW5nKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQg
SW1hZ2UqIGltYWdlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lQm94UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94UGFpbnRlci5jcHAKaW5kZXggNWMxOWM5MzAwNjAwZTM3N2Q5MmVkNjNmMWU4YjllYTRlNmJj
YjZlZi4uNWFhZDFiZmIxNjhkNjhmM2QyOTIxODVhMDVhNzlmNmUwZDgzZTEyMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmNwcApAQCAtMzE5LDcgKzMx
OSw3IEBAIHZvaWQgSW5saW5lQm94UGFpbnRlcjo6cGFpbnRGaWxsTGF5ZXIoY29uc3QgQ29sb3Im
IGNvbG9yLCBjb25zdCBGaWxsTGF5ZXImIGZpbGxMCiAgICAgLy8gdGhlIHByZXZpb3VzIGxpbmUg
bGVmdCBvZmYuCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0T25MaW5lOwogICAgIExheW91
dFVuaXQgdG90YWxMb2dpY2FsV2lkdGg7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5kaXJl
Y3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5zdHls
ZSgpLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAgICAgICAgIGZv
ciAoYXV0byBib3ggPSBtX2lubGluZUJveC5wcmV2aW91c0lubGluZUJveCgpOyBib3g7IGJveC50
cmF2ZXJzZVByZXZpb3VzSW5saW5lQm94KCkpCiAgICAgICAgICAgICBsb2dpY2FsT2Zmc2V0T25M
aW5lICs9IGJveC0+bG9naWNhbFdpZHRoKCk7CiAgICAgICAgIHRvdGFsTG9naWNhbFdpZHRoID0g
bG9naWNhbE9mZnNldE9uTGluZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MZWdhY3lJbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxp
bmVCb3guaAppbmRleCBhOTI0ZjZhMmEyMDljNTQ0ODZhZTcxMWUzMjY4MTgyYTYxMmExMzQ2Li5l
NjAwZjQ0YmNiZDY2ZDMxNjZiNGY5OWQ0NzQ2OTQxMTdhMGVkNjQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUJveC5oCkBAIC0yMDgsOCArMjA4LDggQEAgcHVibGlj
OgogCiAgICAgdW5zaWduZWQgY2hhciBiaWRpTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2JpdGZp
ZWxkcy5iaWRpRW1iZWRkaW5nTGV2ZWwoKTsgfQogICAgIHZvaWQgc2V0QmlkaUxldmVsKHVuc2ln
bmVkIGNoYXIgbGV2ZWwpIHsgbV9iaXRmaWVsZHMuc2V0QmlkaUVtYmVkZGluZ0xldmVsKGxldmVs
KTsgfQotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxl
dmVsKCkgJSAyID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9Ci0g
ICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aW9u
KCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSOyB9CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGJpZGlMZXZlbCgpICUgMiA/IFBBTDo6VGV4dERpcmVjdGlv
bjo6UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBib29sIGlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUjsgfQogICAgIGludCBjYXJldExlZnRtb3N0T2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY2FyZXRNaW5PZmZzZXQoKSA6IGNhcmV0TWF4
T2Zmc2V0KCk7IH0KICAgICBpbnQgY2FyZXRSaWdodG1vc3RPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjYXJldE1heE9mZnNldCgpIDogY2FyZXRNaW5P
ZmZzZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
SW5saW5lSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVJ
dGVyYXRvci5oCmluZGV4IDdjNGI2N2I5MTFjMTY4N2M4MDZjZGY5NDc2ZGFiYzRjNzE4OTQ2MzAu
Ljc0Y2UzMzE5NzhkYmQ2YjJjNjMzNWQ4ODMwNDBjMTYwM2VjYjk1OTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVJdGVyYXRvci5oCkBAIC0xNDAsMTEgKzE0
MCwxMSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9y
JiBpdDEsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdAogICAgIHJldHVybiBpdDEub2Zmc2V0KCkg
IT0gaXQyLm9mZnNldCgpIHx8IGl0MS5yZW5kZXJlcigpICE9IGl0Mi5yZW5kZXJlcigpOwogfQog
Ci1zdGF0aWMgaW5saW5lIFVDaGFyRGlyZWN0aW9uIGVtYmVkQ2hhckZyb21EaXJlY3Rpb24oVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24sIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKK3N0YXRpYyBp
bmxpbmUgVUNoYXJEaXJlY3Rpb24gZW1iZWRDaGFyRnJvbURpcmVjdGlvbihQQUw6OlRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uLCBQQUw6OkVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKIHsKLSAgICBp
ZiAodW5pY29kZUJpZGkgPT0gRW1iZWQpCi0gICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gVGV4
dERpcmVjdGlvbjo6UlRMID8gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORyA6IFVfTEVGVF9UT19S
SUdIVF9FTUJFRERJTkc7Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpS
VEwgPyBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUgOiBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREU7
CisgICAgaWYgKHVuaWNvZGVCaWRpID09IFBBTDo6RVVuaWNvZGVCaWRpOjpFbWJlZCkKKyAgICAg
ICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCA/IFVfUklHSFRf
VE9fTEVGVF9FTUJFRERJTkcgOiBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HOworICAgIHJldHVy
biBkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgPyBVX1JJR0hUX1RPX0xFRlRf
T1ZFUlJJREUgOiBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREU7CiB9CiAKIHRlbXBsYXRlIDxjbGFz
cyBPYnNlcnZlcj4KQEAgLTE1NCw4ICsxNTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5
T2JzZXJ2ZXJFbnRlcmVkT2JqZWN0KE9ic2VydmVyKiBvYnNlcnZlciwgUmVuZGVyT2JqZWN0Kgog
ICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBvYmplY3Qt
PnN0eWxlKCk7Ci0gICAgRVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpID0gc3R5bGUudW5pY29kZUJp
ZGkoKTsKLSAgICBpZiAodW5pY29kZUJpZGkgPT0gVUJOb3JtYWwpIHsKKyAgICBQQUw6OkVVbmlj
b2RlQmlkaSB1bmljb2RlQmlkaSA9IHN0eWxlLnVuaWNvZGVCaWRpKCk7CisgICAgaWYgKHVuaWNv
ZGVCaWRpID09IFBBTDo6RVVuaWNvZGVCaWRpOjpVQk5vcm1hbCkgewogICAgICAgICAvLyBodHRw
Oi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLXdyaXRpbmctbW9kZXMvI3VuaWNvZGUtYmlkaQogICAg
ICAgICAvLyAiVGhlIGVsZW1lbnQgZG9lcyBub3Qgb3BlbiBhbiBhZGRpdGlvbmFsIGxldmVsIG9m
IGVtYmVkZGluZyB3aXRoIHJlc3BlY3QgdG8gdGhlIGJpZGlyZWN0aW9uYWwgYWxnb3JpdGhtLiIK
ICAgICAgICAgLy8gVGh1cyB3ZSBpZ25vcmUgYW55IHBvc3NpYmxlIGRpcj0gYXR0cmlidXRlIG9u
IHRoZSBzcGFuLgpAQCAtMTcxLDcgKzE3MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlP
YnNlcnZlckVudGVyZWRPYmplY3QoT2JzZXJ2ZXIqIG9ic2VydmVyLCBSZW5kZXJPYmplY3QqCiAg
ICAgfQogCiAgICAgaWYgKCFvYnNlcnZlci0+aW5Jc29sYXRlKCkpCi0gICAgICAgIG9ic2VydmVy
LT5lbWJlZChlbWJlZENoYXJGcm9tRGlyZWN0aW9uKHN0eWxlLmRpcmVjdGlvbigpLCB1bmljb2Rl
QmlkaSksIEZyb21TdHlsZU9yRE9NKTsKKyAgICAgICAgb2JzZXJ2ZXItPmVtYmVkKGVtYmVkQ2hh
ckZyb21EaXJlY3Rpb24oc3R5bGUuZGlyZWN0aW9uKCksIHVuaWNvZGVCaWRpKSwgUEFMOjpGcm9t
U3R5bGVPckRPTSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBPYnNlcnZlcj4KQEAgLTE4MCw4ICsx
ODAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5T2JzZXJ2ZXJXaWxsRXhpdE9iamVjdChP
YnNlcnZlciogb2JzZXJ2ZXIsIFJlbmRlck9iamVjdAogICAgIGlmICghb2JzZXJ2ZXIgfHwgIW9i
amVjdCB8fCAhb2JqZWN0LT5pc1JlbmRlcklubGluZSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkgPSBvYmplY3QtPnN0eWxlKCkudW5pY29kZUJpZGko
KTsKLSAgICBpZiAodW5pY29kZUJpZGkgPT0gVUJOb3JtYWwpCisgICAgUEFMOjpFVW5pY29kZUJp
ZGkgdW5pY29kZUJpZGkgPSBvYmplY3QtPnN0eWxlKCkudW5pY29kZUJpZGkoKTsKKyAgICBpZiAo
dW5pY29kZUJpZGkgPT0gUEFMOjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsKQogICAgICAgICByZXR1
cm47IC8vIE5vdGhpbmcgdG8gZG8gZm9yIHVuaWNvZGUtYmlkaTogbm9ybWFsCiAgICAgaWYgKGlz
SXNvbGF0ZWQodW5pY29kZUJpZGkpKSB7CiAgICAgICAgIG9ic2VydmVyLT5leGl0SXNvbGF0ZSgp
OwpAQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlPYnNlcnZlcldp
bGxFeGl0T2JqZWN0KE9ic2VydmVyKiBvYnNlcnZlciwgUmVuZGVyT2JqZWN0CiAKICAgICAvLyBP
dGhlcndpc2Ugd2UgcG9wIGFueSBlbWJlZC9vdmVycmlkZSBjaGFyYWN0ZXIgd2UgYWRkZWQgd2hl
biB3ZSBvcGVuZWQgdGhpcyB0YWcuCiAgICAgaWYgKCFvYnNlcnZlci0+aW5Jc29sYXRlKCkpCi0g
ICAgICAgIG9ic2VydmVyLT5lbWJlZChVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQsIEZyb21TdHls
ZU9yRE9NKTsKKyAgICAgICAgb2JzZXJ2ZXItPmVtYmVkKFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1B
VCwgUEFMOjpGcm9tU3R5bGVPckRPTSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0l0ZXJh
dG9yVGFyZ2V0KFJlbmRlck9iamVjdCogb2JqZWN0KQpAQCAtMzcxLDEyICszNzEsNiBAQCBBTFdB
WVNfSU5MSU5FIFVDaGFyRGlyZWN0aW9uIExlZ2FjeUlubGluZUl0ZXJhdG9yOjpkaXJlY3Rpb24o
KSBjb25zdAogICAgIHJldHVybiBVX09USEVSX05FVVRSQUw7CiB9CiAKLXRlbXBsYXRlPD4KLWlu
bGluZSB2b2lkIElubGluZUJpZGlSZXNvbHZlcjo6aW5jcmVtZW50SW50ZXJuYWwoKQotewotICAg
IG1fY3VycmVudC5pbmNyZW1lbnQodGhpcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0lz
b2xhdGVkSW5saW5lKFJlbmRlck9iamVjdCYgb2JqZWN0KQogewogICAgIHJldHVybiBvYmplY3Qu
aXNSZW5kZXJJbmxpbmUoKSAmJiBpc0lzb2xhdGVkKG9iamVjdC5zdHlsZSgpLnVuaWNvZGVCaWRp
KCkpOwpAQCAtNDE1LDYgKzQwOSwxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGxhY2Vob2xk
ZXJSdW5Gb3JJc29sYXRlZElubGluZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdgogICAgIHJl
c29sdmVyLnJ1bnMoKS5hcHBlbmRSdW4oV1RGTW92ZShpc29sYXRlZFJ1bikpOwogfQogCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBQQUwgeworCit0ZW1wbGF0ZTw+Citpbmxp
bmUgdm9pZCBXZWJDb3JlOjpJbmxpbmVCaWRpUmVzb2x2ZXI6OmluY3JlbWVudEludGVybmFsKCkK
K3sKKyAgICBtX2N1cnJlbnQuaW5jcmVtZW50KHRoaXMpOworfQorCiBjbGFzcyBJc29sYXRlVHJh
Y2tlciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSXNvbGF0ZVRyYWNrZXIodW5zaWduZWQgbmVz
dGVkSXNvbGF0ZUNvdW50KQpAQCAtNDM0LDI0ICs0MzgsMjQgQEAgcHVibGljOgogICAgIGJvb2wg
aW5Jc29sYXRlKCkgY29uc3QgeyByZXR1cm4gbV9uZXN0ZWRJc29sYXRlQ291bnQ7IH0KIAogICAg
IC8vIFdlIGRvbid0IGNhcmUgaWYgd2UgZW5jb3VudGVyIGJpZGkgZGlyZWN0aW9uYWwgb3ZlcnJp
ZGVzLgotICAgIHZvaWQgZW1iZWQoVUNoYXJEaXJlY3Rpb24sIEJpZGlFbWJlZGRpbmdTb3VyY2Up
IHsgfQorICAgIHZvaWQgZW1iZWQoVUNoYXJEaXJlY3Rpb24sIFBBTDo6QmlkaUVtYmVkZGluZ1Nv
dXJjZSkgeyB9CiAgICAgdm9pZCBjb21taXRFeHBsaWNpdEVtYmVkZGluZygpIHsgfQogCi0gICAg
dm9pZCBhZGRGYWtlUnVuSWZOZWNlc3NhcnkoUmVuZGVyT2JqZWN0JiBvYmosIHVuc2lnbmVkIHBv
cywgdW5zaWduZWQgZW5kLCBSZW5kZXJFbGVtZW50JiByb290LCBJbmxpbmVCaWRpUmVzb2x2ZXIm
IHJlc29sdmVyKQorICAgIHZvaWQgYWRkRmFrZVJ1bklmTmVjZXNzYXJ5KFdlYkNvcmU6OlJlbmRl
ck9iamVjdCYgb2JqLCB1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGVuZCwgV2ViQ29yZTo6UmVuZGVy
RWxlbWVudCYgcm9vdCwgV2ViQ29yZTo6SW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKICAg
ICB7CiAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBhZGQgYSBmYWtlIHJ1biBmb3IgYSBnaXZl
biBpc29sYXRlZCBzcGFuIG9uY2UgZHVyaW5nIGVhY2ggY2FsbCB0byBjcmVhdGVCaWRpUnVuc0Zv
ckxpbmUuCiAgICAgICAgIC8vIFdlJ2xsIGJlIGNhbGxlZCBmb3IgZXZlcnkgc3BhbiBpbnNpZGUg
dGhlIGlzb2xhdGVkIHNwYW4gc28gd2UganVzdCBpZ25vcmUgc3Vic2VxdWVudCBjYWxscy4KICAg
ICAgICAgLy8gV2UgYWxzbyBhdm9pZCBjcmVhdGluZyBhIGZha2UgcnVuIHVudGlsIHdlIGhpdCBh
IGNoaWxkIHRoYXQgd2FycmFudHMgb25lLCBlLmcuIHdlIHNraXAgZmxvYXRzLgotICAgICAgICBp
ZiAoUmVuZGVyQmxvY2s6OnNob3VsZFNraXBDcmVhdGluZ1J1bnNGb3JPYmplY3Qob2JqKSkKKyAg
ICAgICAgaWYgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzaG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9y
T2JqZWN0KG9iaikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICghbV9oYXZlQWRk
ZWRGYWtlUnVuRm9yUm9vdElzb2xhdGUpIHsKICAgICAgICAgICAgIC8vIG9iaiBhbmQgcG9zIHRv
Z2V0aGVyIGRlbm90ZSBhIHNpbmdsZSBwb3NpdGlvbiBpbiB0aGUgaW5saW5lLCBmcm9tIHdoaWNo
IHRoZSBwYXJzaW5nIG9mIHRoZSBpc29sYXRlIHdpbGwgc3RhcnQuCiAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBuZWVkIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgcnVuIGJlY2F1c2UgdGhpcyBpcyBp
bXBsaWNpdDogaXQgaXMgZWl0aGVyIGVuZE9mTGluZSBvciB0aGUgZW5kIG9mIHRoZQogICAgICAg
ICAgICAgLy8gaXNvbGF0ZSwgd2hlbiB3ZSBjYWxsIGNyZWF0ZUJpZGlSdW5zRm9yTGluZSBpdCB3
aWxsIHN0b3AgYXQgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgotICAgICAgICAgICAgYWRkUGxhY2Vo
b2xkZXJSdW5Gb3JJc29sYXRlZElubGluZShyZXNvbHZlciwgb2JqLCBwb3MsIHJvb3QpOworICAg
ICAgICAgICAgV2ViQ29yZTo6YWRkUGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZShyZXNv
bHZlciwgb2JqLCBwb3MsIHJvb3QpOwogICAgICAgICB9CiAgICAgICAgIG1faGF2ZUFkZGVkRmFr
ZVJ1bkZvclJvb3RJc29sYXRlID0gdHJ1ZTsKLSAgICAgICAgTGVnYWN5TGluZUxheW91dDo6YXBw
ZW5kUnVuc0Zvck9iamVjdChudWxscHRyLCBwb3MsIGVuZCwgb2JqLCByZXNvbHZlcik7CisgICAg
ICAgIFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmFwcGVuZFJ1bnNGb3JPYmplY3QobnVsbHB0
ciwgcG9zLCBlbmQsIG9iaiwgcmVzb2x2ZXIpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTQ2MCw3
ICs0NjQsNyBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8PgotaW5saW5lIHZvaWQgSW5saW5l
QmlkaVJlc29sdmVyOjphcHBlbmRSdW5JbnRlcm5hbCgpCitpbmxpbmUgdm9pZCBXZWJDb3JlOjpJ
bmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKCkKIHsKICAgICBpZiAoIW1fZW1w
dHlSdW4gJiYgIW1fZW9yLmF0RW5kKCkgJiYgIW1fcmVhY2hlZEVuZE9mTGluZSkgewogICAgICAg
ICAvLyBLZWVwIHRyYWNrIG9mIHdoZW4gd2UgZW50ZXIvbGVhdmUgInVuaWNvZGUtYmlkaTogaXNv
bGF0ZSIgaW5saW5lcy4KQEAgLTQ2OCwxNSArNDcyLDE1IEBAIGlubGluZSB2b2lkIElubGluZUJp
ZGlSZXNvbHZlcjo6YXBwZW5kUnVuSW50ZXJuYWwoKQogICAgICAgICAvLyBGSVhNRTogQ291bGQg
dGhpcyBpbml0aWFsaXplIGZyb20gdGhpcy0+aW5Jc29sYXRlKCkgaW5zdGVhZCBvZiB3YWxraW5n
IHVwIHRoZSByZW5kZXIgdHJlZT8KICAgICAgICAgSXNvbGF0ZVRyYWNrZXIgaXNvbGF0ZVRyYWNr
ZXIobnVtYmVyT2ZJc29sYXRlQW5jZXN0b3JzKG1fc29yKSk7CiAgICAgICAgIGludCBzdGFydCA9
IG1fc29yLm9mZnNldCgpOwotICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IG1fc29yLnJlbmRl
cmVyKCk7CisgICAgICAgIFdlYkNvcmU6OlJlbmRlck9iamVjdCogb2JqID0gbV9zb3IucmVuZGVy
ZXIoKTsKICAgICAgICAgd2hpbGUgKG9iaiAmJiBvYmogIT0gbV9lb3IucmVuZGVyZXIoKSAmJiBv
YmogIT0gZW5kT2ZMaW5lLnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIGlmIChpc29sYXRlVHJh
Y2tlci5pbklzb2xhdGUoKSkKICAgICAgICAgICAgICAgICBpc29sYXRlVHJhY2tlci5hZGRGYWtl
UnVuSWZOZWNlc3NhcnkoKm9iaiwgc3RhcnQsIG9iai0+bGVuZ3RoKCksICptX3Nvci5yb290KCks
ICp0aGlzKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBMZWdhY3lMaW5lTGF5
b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0KCZtX3J1bnMsIHN0YXJ0LCBvYmotPmxlbmd0aCgpLCAq
b2JqLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6
YXBwZW5kUnVuc0Zvck9iamVjdCgmbV9ydW5zLCBzdGFydCwgb2JqLT5sZW5ndGgoKSwgKm9iaiwg
KnRoaXMpOwogICAgICAgICAgICAgLy8gRklYTUU6IHN0YXJ0L29iaiBzaG91bGQgYmUgYW4gTGVn
YWN5SW5saW5lSXRlcmF0b3IgaW5zdGVhZCBvZiB0d28gc2VwYXJhdGUgdmFyaWFibGVzLgogICAg
ICAgICAgICAgc3RhcnQgPSAwOwotICAgICAgICAgICAgb2JqID0gbmV4dElubGluZVJlbmRlcmVy
U2tpcHBpbmdFbXB0eSgqbV9zb3Iucm9vdCgpLCBvYmosICZpc29sYXRlVHJhY2tlcik7CisgICAg
ICAgICAgICBvYmogPSBXZWJDb3JlOjpuZXh0SW5saW5lUmVuZGVyZXJTa2lwcGluZ0VtcHR5KCpt
X3Nvci5yb290KCksIG9iaiwgJmlzb2xhdGVUcmFja2VyKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAob2JqKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSBvYmogPT0gbV9lb3IucmVuZGVy
ZXIoKSA/IG1fZW9yLm9mZnNldCgpIDogVUlOVF9NQVg7CkBAIC00ODksNyArNDkzLDcgQEAgaW5s
aW5lIHZvaWQgSW5saW5lQmlkaVJlc29sdmVyOjphcHBlbmRSdW5JbnRlcm5hbCgpCiAgICAgICAg
ICAgICBpZiAoaXNvbGF0ZVRyYWNrZXIuaW5Jc29sYXRlKCkpCiAgICAgICAgICAgICAgICAgaXNv
bGF0ZVRyYWNrZXIuYWRkRmFrZVJ1bklmTmVjZXNzYXJ5KCpvYmosIHN0YXJ0LCBvYmotPmxlbmd0
aCgpLCAqbV9zb3Iucm9vdCgpLCAqdGhpcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgTGVnYWN5TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVjdCgmbV9ydW5zLCBzdGFy
dCwgZW5kLCAqb2JqLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6TGVnYWN5TGlu
ZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVjdCgmbV9ydW5zLCBzdGFydCwgZW5kLCAqb2JqLCAq
dGhpcyk7CiAgICAgICAgIH0KIAogICAgICAgICBtX2Vvci5pbmNyZW1lbnQoKTsKQEAgLTUwMSwx
MCArNTA1LDEwIEBAIGlubGluZSB2b2lkIElubGluZUJpZGlSZXNvbHZlcjo6YXBwZW5kUnVuSW50
ZXJuYWwoKQogfQogCiB0ZW1wbGF0ZTw+Ci1pbmxpbmUgYm9vbCBJbmxpbmVCaWRpUmVzb2x2ZXI6
Om5lZWRzQ29udGludWVQYXN0RW5kSW50ZXJuYWwoKSBjb25zdAoraW5saW5lIGJvb2wgV2ViQ29y
ZTo6SW5saW5lQmlkaVJlc29sdmVyOjpuZWVkc0NvbnRpbnVlUGFzdEVuZEludGVybmFsKCkgY29u
c3QKIHsKICAgICAvLyBXZSBkb24ndCBjb2xsZWN0IHJ1bnMgYmV5b25kIHRoZSBlbmRPZkxpbmUg
cmVuZGVyZXIuIFN0b3AgdHJhdmVyc2luZyB3aGVuIHRoZSBpdGVyYXRvciBtb3ZlcyB0byB0aGUg
bmV4dCByZW5kZXJlciB0byBwcmV2ZW50IE8obl4yKS4KICAgICByZXR1cm4gbV9jdXJyZW50LnJl
bmRlcmVyKCkgPT0gZW5kT2ZMaW5lLnJlbmRlcmVyKCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKK30gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUxpbmVMYXlvdXQuY3BwCmluZGV4IDhjZThmMWY3M2MyY2FmMTBiMjdkZDA3OWVlYTMwZDgw
Yjk5MzIyNDQuLjk4YzU4M2MwYTc1ZDA4M2JmNWE1OTg5MTQyOWMyMzBkODUzMGE1YWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHAKQEAgLTI2LDcg
KzI2LDYgQEAKICNpbmNsdWRlICJMZWdhY3lMaW5lTGF5b3V0LmgiCiAKICNpbmNsdWRlICJBWE9i
amVjdENhY2hlLmgiCi0jaW5jbHVkZSAiQmlkaVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQnJlYWtp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRmxv
YXRpbmdPYmplY3RzLmgiCkBAIC01Myw2ICs1Miw3IEBACiAjaW5jbHVkZSAiU1ZHUm9vdElubGlu
ZUJveC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVmVydGljYWxQb3NpdGlv
bkNhY2hlLmgiCisjaW5jbHVkZSA8cGFsL3RleHQvQmlkaVJlc29sdmVyLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MCw3ICs3MCw3
IEBAIExlZ2FjeUxpbmVMYXlvdXQ6On5MZWdhY3lMaW5lTGF5b3V0KCkKICAgICBsaW5lQm94ZXMo
KS5kZWxldGVMaW5lQm94VHJlZSgpOwogfTsKIAotc3RhdGljIHZvaWQgZGV0ZXJtaW5lRGlyZWN0
aW9uYWxpdHkoVGV4dERpcmVjdGlvbiYgZGlyLCBMZWdhY3lJbmxpbmVJdGVyYXRvciBpdGVyKQor
c3RhdGljIHZvaWQgZGV0ZXJtaW5lRGlyZWN0aW9uYWxpdHkoUEFMOjpUZXh0RGlyZWN0aW9uJiBk
aXIsIExlZ2FjeUlubGluZUl0ZXJhdG9yIGl0ZXIpCiB7CiAgICAgd2hpbGUgKCFpdGVyLmF0RW5k
KCkpIHsKICAgICAgICAgaWYgKGl0ZXIuYXRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkKQEAgLTc4LDEx
ICs3OCwxMSBAQCBzdGF0aWMgdm9pZCBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShUZXh0RGlyZWN0
aW9uJiBkaXIsIExlZ2FjeUlubGluZUl0ZXJhdG9yIGl0ZQogICAgICAgICBpZiAoVUNoYXIgY3Vy
cmVudCA9IGl0ZXIuY3VycmVudCgpKSB7CiAgICAgICAgICAgICBVQ2hhckRpcmVjdGlvbiBjaGFy
RGlyZWN0aW9uID0gdV9jaGFyRGlyZWN0aW9uKGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKGNo
YXJEaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgZGlyID0g
VGV4dERpcmVjdGlvbjo6TFRSOworICAgICAgICAgICAgICAgIGRpciA9IFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChjaGFyRGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCB8fCBjaGFyRGlyZWN0
aW9uID09IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMpIHsKLSAgICAgICAgICAgICAgICBkaXIgPSBU
ZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgICAgICAgICAgZGlyID0gUEFMOjpUZXh0RGlyZWN0
aW9uOjpSVEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC05NSw3ICs5NSw3IEBAIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4gY3Jl
YXRlUnVuKGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosCiAgICAgcmV0dXJu
IG1ha2VVbmlxdWU8QmlkaVJ1bj4oc3RhcnQsIGVuZCwgb2JqLCByZXNvbHZlci5jb250ZXh0KCks
IHJlc29sdmVyLmRpcigpKTsKIH0KIAotdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5z
Rm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJpZGlSdW4+KiBydW5zLCBpbnQgc3RhcnQsIGludCBlbmQs
IFJlbmRlck9iamVjdCYgb2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQordm9pZCBM
ZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0KFBBTDo6QmlkaVJ1bkxpc3Q8Qmlk
aVJ1bj4qIHJ1bnMsIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosIElubGlu
ZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCiB7CiAgICAgaWYgKHN0YXJ0ID4gZW5kIHx8IFJlbmRl
ckJsb2NrOjpzaG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9yT2JqZWN0KG9iaikpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI3OCw3ICsyNzgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBzdGF0aWMgaW5saW5lIGJvb2wgZW5kc1dpdGhIVE1MU3BhY2VzKGNvbnN0IENoYQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCByZWFjaGVkRW5kT2ZUZXh0UmVuZGVyZXIoY29u
c3QgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zKQorc3RhdGljIGJvb2wgcmVhY2hlZEVu
ZE9mVGV4dFJlbmRlcmVyKGNvbnN0IFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5z
KQogewogICAgIEJpZGlSdW4qIHJ1biA9IGJpZGlSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKICAg
ICBpZiAoIXJ1bikKQEAgLTI5Myw3ICsyOTMsNyBAQCBzdGF0aWMgYm9vbCByZWFjaGVkRW5kT2ZU
ZXh0UmVuZGVyZXIoY29uc3QgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zKQogICAgIHJl
dHVybiBlbmRzV2l0aEhUTUxTcGFjZXModGV4dC5jaGFyYWN0ZXJzMTYoKSwgcG9zaXRpb24sIGxl
bmd0aCk7CiB9CiAKLUxlZ2FjeVJvb3RJbmxpbmVCb3gqIExlZ2FjeUxpbmVMYXlvdXQ6OmNvbnN0
cnVjdExpbmUoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMaW5lSW5mbyYg
bGluZUluZm8pCitMZWdhY3lSb290SW5saW5lQm94KiBMZWdhY3lMaW5lTGF5b3V0Ojpjb25zdHJ1
Y3RMaW5lKFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMaW5lSW5m
byYgbGluZUluZm8pCiB7CiAgICAgQVNTRVJUKGJpZGlSdW5zLmZpcnN0UnVuKCkpOwogCkBAIC0z
NjMsNyArMzYzLDcgQEAgVGV4dEFsaWduTW9kZSBMZWdhY3lMaW5lTGF5b3V0Ojp0ZXh0QWxpZ25t
ZW50Rm9yTGluZShib29sIGVuZHNXaXRoU29mdEJyZWFrKSBjb24KICNpZiBFTkFCTEUoQ1NTM19U
RVhUKQogICAgIFRleHRKdXN0aWZ5IHRleHRKdXN0aWZ5ID0gc3R5bGUoKS50ZXh0SnVzdGlmeSgp
OwogICAgIGlmIChhbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSAmJiB0ZXh0SnVz
dGlmeSA9PSBUZXh0SnVzdGlmeTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuZGlyZWN0
aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gVGV4dEFsaWduTW9kZTo6TGVmdCA6IFRleHRB
bGlnbk1vZGU6OlJpZ2h0OworICAgICAgICByZXR1cm4gc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUiA/IFRleHRBbGlnbk1vZGU6OkxlZnQgOiBUZXh0QWxpZ25N
b2RlOjpSaWdodDsKICNlbmRpZgogCiAgICAgaWYgKGVuZHNXaXRoU29mdEJyZWFrKQpAQCAtNjMx
LDggKzYzMSw4IEBAIHZvaWQgTGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUV4cGFuc2lvbkZvckp1
c3RpZmllZFRleHQoQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSCiAKIHZvaWQgTGVnYWN5TGluZUxh
eW91dDo6dXBkYXRlTG9naWNhbFdpZHRoRm9yQWxpZ25tZW50KFJlbmRlckJsb2NrRmxvdyYgZmxv
dywgY29uc3QgVGV4dEFsaWduTW9kZSYgdGV4dEFsaWduLCBjb25zdCBMZWdhY3lSb290SW5saW5l
Qm94KiByb290SW5saW5lQm94LCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9n
aWNhbExlZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2lj
YWxXaWR0aCwgaW50IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCiB7Ci0gICAgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb247Ci0gICAgaWYgKHJvb3RJbmxpbmVCb3ggJiYgZmxvdy5zdHlsZSgpLnVu
aWNvZGVCaWRpKCkgPT0gUGxhaW50ZXh0KQorICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rp
b247CisgICAgaWYgKHJvb3RJbmxpbmVCb3ggJiYgZmxvdy5zdHlsZSgpLnVuaWNvZGVCaWRpKCkg
PT0gUEFMOjpFVW5pY29kZUJpZGk6OlBsYWludGV4dCkKICAgICAgICAgZGlyZWN0aW9uID0gcm9v
dElubGluZUJveC0+ZGlyZWN0aW9uKCk7CiAgICAgZWxzZQogICAgICAgICBkaXJlY3Rpb24gPSBm
bG93LnN0eWxlKCkuZGlyZWN0aW9uKCk7CkBAIC02NjcsMTMgKzY2NywxMyBAQCB2b2lkIExlZ2Fj
eUxpbmVMYXlvdXQ6OnVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVudChSZW5kZXJCbG9ja0Zs
b3cmIGZsb3csIGNvbgogICAgICAgICB9CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVj
dGlvbjo6TFRSKQorICAgICAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSKQogICAgICAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRCbG9jayhp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90
YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvclJpZ2h0QWxpZ25lZEJsb2NrKGlzTGVmdFRv
UmlnaHREaXJlY3Rpb24sIHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2lj
YWxXaWR0aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVj
dGlvbjo6TFRSKQorICAgICAgICBpZiAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6
TFRSKQogICAgICAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yUmlnaHRBbGlnbmVkQmxvY2so
aXNMZWZ0VG9SaWdodERpcmVjdGlvbiwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRv
dGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICB1cGRhdGVMb2dpY2FsV2lkdGhGb3JMZWZ0QWxpZ25lZEJsb2NrKGlzTGVmdFRv
UmlnaHREaXJlY3Rpb24sIHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2lj
YWxXaWR0aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKQEAgLTg5Nyw3ICs4OTcsNyBAQCBCaWRp
UnVuKiBMZWdhY3lMaW5lTGF5b3V0Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9y
U2VnbWVudChMZWdhY3lSb290SQogICAgIEJpZGlSdW4qIHByZXZpb3VzUnVuID0gbnVsbHB0cjsK
ICAgICBmb3IgKDsgcnVuOyBydW4gPSBydW4tPm5leHQoKSkgewogICAgICAgICBhdXRvIGNvbXB1
dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzID0gWyZleHBhbnNpb25PcHBvcnR1bml0aWVzLCAmZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCwgdGV4dEFsaWduLCAmaXNBZnRlckV4cGFuc2lvbl0gKFJl
bmRlckJsb2NrRmxvdyYgYmxvY2ssCi0gICAgICAgICAgICBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0
ZXh0Qm94LCBCaWRpUnVuKiBwcmV2aW91c1J1biwgQmlkaVJ1biogbmV4dFJ1biwgU3RyaW5nVmll
dyBzdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKKyAgICAgICAgICAgIExlZ2Fj
eUlubGluZVRleHRCb3gmIHRleHRCb3gsIEJpZGlSdW4qIHByZXZpb3VzUnVuLCBCaWRpUnVuKiBu
ZXh0UnVuLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24pCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChzdHJpbmdWaWV3LmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgICAgIC8vIEVtcHR5IHJ1bnMgc2hvdWxkIHN0aWxsIHByb2R1Y2UgYW4gZW50
cnkgaW4gZXhwYW5zaW9uT3Bwb3J0dW5pdGllcyBsaXN0IHNvIHRoYXQgdGhlIG51bWJlciBvZiBp
dGVtcyBtYXRjaGVzIHRoZSBudW1iZXIgb2YgcnVucy4KQEAgLTEwOTEsNyArMTA5MSw3IEBAIHN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgZmluZEZpcnN0VHJhaWxpbmdTcGFjZShjb25zdCBSZW5kZXJU
ZXh0JiBsYXN0VGV4dCwgY29uc3QKICAgICByZXR1cm4gZmlyc3RTcGFjZTsKIH0KIAotaW5saW5l
IEJpZGlSdW4qIExlZ2FjeUxpbmVMYXlvdXQ6OmhhbmRsZVRyYWlsaW5nU3BhY2VzKEJpZGlSdW5M
aXN0PEJpZGlSdW4+JiBiaWRpUnVucywgQmlkaUNvbnRleHQqIGN1cnJlbnRDb250ZXh0KQoraW5s
aW5lIEJpZGlSdW4qIExlZ2FjeUxpbmVMYXlvdXQ6OmhhbmRsZVRyYWlsaW5nU3BhY2VzKFBBTDo6
QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBQQUw6OkJpZGlDb250ZXh0KiBjdXJyZW50
Q29udGV4dCkKIHsKICAgICBpZiAoIWJpZGlSdW5zLnJ1bkNvdW50KCkKICAgICAgICAgfHwgIWJp
ZGlSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKS0+cmVuZGVyZXIoKS5zdHlsZSgpLmJyZWFrT25seUFm
dGVyV2hpdGVTcGFjZSgpCkBAIC0xMTEzLDE3ICsxMTEzLDE3IEBAIGlubGluZSBCaWRpUnVuKiBM
ZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVu
PiYgYmlkCiAgICAgaWYgKGZpcnN0U3BhY2UgPT0gdHJhaWxpbmdTcGFjZVJ1bi0+c3RvcCgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0g
c3R5bGUoKS5kaXJlY3Rpb24oKTsKLSAgICBib29sIHNob3VsZFJlb3JkZXIgPSB0cmFpbGluZ1Nw
YWNlUnVuICE9IChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gYmlkaVJ1bnMubGFz
dFJ1bigpIDogYmlkaVJ1bnMuZmlyc3RSdW4oKSk7CisgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgYm9vbCBzaG91bGRSZW9yZGVyID0g
dHJhaWxpbmdTcGFjZVJ1biAhPSAoZGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRS
ID8gYmlkaVJ1bnMubGFzdFJ1bigpIDogYmlkaVJ1bnMuZmlyc3RSdW4oKSk7CiAgICAgaWYgKGZp
cnN0U3BhY2UgIT0gdHJhaWxpbmdTcGFjZVJ1bi0+c3RhcnQoKSkgewotICAgICAgICBCaWRpQ29u
dGV4dCogYmFzZUNvbnRleHQgPSBjdXJyZW50Q29udGV4dDsKLSAgICAgICAgd2hpbGUgKEJpZGlD
b250ZXh0KiBwYXJlbnQgPSBiYXNlQ29udGV4dC0+cGFyZW50KCkpCisgICAgICAgIFBBTDo6Qmlk
aUNvbnRleHQqIGJhc2VDb250ZXh0ID0gY3VycmVudENvbnRleHQ7CisgICAgICAgIHdoaWxlIChQ
QUw6OkJpZGlDb250ZXh0KiBwYXJlbnQgPSBiYXNlQ29udGV4dC0+cGFyZW50KCkpCiAgICAgICAg
ICAgICBiYXNlQ29udGV4dCA9IHBhcmVudDsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qmlk
aVJ1bj4gbmV3VHJhaWxpbmdSdW4gPSBtYWtlVW5pcXVlPEJpZGlSdW4+KGZpcnN0U3BhY2UsIHRy
YWlsaW5nU3BhY2VSdW4tPm1fc3RvcCwgdHJhaWxpbmdTcGFjZVJ1bi0+cmVuZGVyZXIoKSwgYmFz
ZUNvbnRleHQsIFVfT1RIRVJfTkVVVFJBTCk7CiAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1f
c3RvcCA9IGZpcnN0U3BhY2U7CiAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4gPSBuZXdUcmFpbGlu
Z1J1bi5nZXQoKTsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIp
CisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIpCiAgICAg
ICAgICAgICBiaWRpUnVucy5hcHBlbmRSdW4oV1RGTW92ZShuZXdUcmFpbGluZ1J1bikpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBiaWRpUnVucy5wcmVwZW5kUnVuKFdURk1vdmUobmV3VHJh
aWxpbmdSdW4pKTsKQEAgLTExMzIsNyArMTEzMiw3IEBAIGlubGluZSBCaWRpUnVuKiBMZWdhY3lM
aW5lTGF5b3V0OjpoYW5kbGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlk
CiAgICAgaWYgKCFzaG91bGRSZW9yZGVyKQogICAgICAgICByZXR1cm4gdHJhaWxpbmdTcGFjZVJ1
bjsKIAotICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgaWYg
KGRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikgewogICAgICAgICBiaWRpUnVu
cy5tb3ZlUnVuVG9FbmQodHJhaWxpbmdTcGFjZVJ1bik7CiAgICAgICAgIHRyYWlsaW5nU3BhY2VS
dW4tPm1fbGV2ZWwgPSAwOwogICAgIH0gZWxzZSB7CkBAIC0xMTcwLDcgKzExNzAsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgc2V0VXBSZXNvbHZlclRvUmVzdW1lSW5Jc29sYXRlKElubGluZUJpZGlS
ZXNvbHZlciYgcmVzb2x2ZXIsCiB9CiAKIC8vIEZJWE1FOiBCaWRpUmVzb2x2ZXIgc2hvdWxkIGhh
dmUgdGhpcyBsb2dpYy4KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNl
Z21lbnQoSW5saW5lQmlkaVJlc29sdmVyJiB0b3BSZXNvbHZlciwgQmlkaVJ1bkxpc3Q8QmlkaVJ1
bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgZW5kT2ZSdW5zLCBWaXN1
YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlkZSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHkpCitzdGF0aWMgaW5saW5lIHZvaWQgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElubGlu
ZUJpZGlSZXNvbHZlciYgdG9wUmVzb2x2ZXIsIFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJp
ZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgZW5kT2ZSdW5zLCBQQUw6OlZpc3Vh
bERpcmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRlLCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5s
eSkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgYSBCaWRpUnVuTGlzdCBpbnRvIGNy
ZWF0ZUJpZGlSdW5zRm9yTGluZSBpbnN0ZWFkCiAgICAgLy8gb2YgdGhlIHJlc29sdmVyIG93bmlu
ZyB0aGUgcnVucy4KQEAgLTExOTYsMTUgKzExOTYsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIGNv
bnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVzb2x2ZXImIHRvcFJlc29sdmVy
LAogICAgICAgICBBU1NFUlQoaXNvbGF0ZWRJbmxpbmUpOwogCiAgICAgICAgIElubGluZUJpZGlS
ZXNvbHZlciBpc29sYXRlZFJlc29sdmVyOwotICAgICAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJp
ZGkgPSBpc29sYXRlZElubGluZS0+c3R5bGUoKS51bmljb2RlQmlkaSgpOwotICAgICAgICBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbjsKLSAgICAgICAgaWYgKHVuaWNvZGVCaWRpID09IFBsYWludGV4
dCkKKyAgICAgICAgUEFMOjpFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkgPSBpc29sYXRlZElubGlu
ZS0+c3R5bGUoKS51bmljb2RlQmlkaSgpOworICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGly
ZWN0aW9uOworICAgICAgICBpZiAodW5pY29kZUJpZGkgPT0gUEFMOjpFVW5pY29kZUJpZGk6OlBs
YWludGV4dCkKICAgICAgICAgICAgIGRldGVybWluZURpcmVjdGlvbmFsaXR5KGRpcmVjdGlvbiwg
TGVnYWN5SW5saW5lSXRlcmF0b3IoaXNvbGF0ZWRJbmxpbmUsICZpc29sYXRlZFJ1bi5vYmplY3Qs
IDApKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodW5pY29kZUJpZGkgPT0g
SXNvbGF0ZSB8fCB1bmljb2RlQmlkaSA9PSBJc29sYXRlT3ZlcnJpZGUpOworICAgICAgICAgICAg
QVNTRVJUKHVuaWNvZGVCaWRpID09IFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlIHx8IHVuaWNv
ZGVCaWRpID09IFBBTDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlT3ZlcnJpZGUpOwogICAgICAgICAg
ICAgZGlyZWN0aW9uID0gaXNvbGF0ZWRJbmxpbmUtPnN0eWxlKCkuZGlyZWN0aW9uKCk7CiAgICAg
ICAgIH0KLSAgICAgICAgaXNvbGF0ZWRSZXNvbHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyhkaXJl
Y3Rpb24sIGlzT3ZlcnJpZGUodW5pY29kZUJpZGkpKSk7CisgICAgICAgIGlzb2xhdGVkUmVzb2x2
ZXIuc2V0U3RhdHVzKFBBTDo6QmlkaVN0YXR1cyhkaXJlY3Rpb24sIGlzT3ZlcnJpZGUodW5pY29k
ZUJpZGkpKSk7CiAKICAgICAgICAgc2V0VXBSZXNvbHZlclRvUmVzdW1lSW5Jc29sYXRlKGlzb2xh
dGVkUmVzb2x2ZXIsIHRvcFJlc29sdmVyLCBpc29sYXRlZFJ1bi5ydW5Ub1JlcGxhY2UsIGlzb2xh
dGVkSW5saW5lLCAmc3RhcnRPYmplY3QpOwogCkBAIC0xMjE3LDcgKzEyMTcsNyBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElubGluZUJpZGlSZXNvbHZl
ciYgdG9wUmVzb2x2ZXIsCiAgICAgICAgIC8vIFdlIHN0b3AgYXQgdGhlIG5leHQgZW5kIG9mIGxp
bmU7IHdlIG1heSByZS1lbnRlciB0aGlzIGlzb2xhdGUgaW4gdGhlIG5leHQgY2FsbCB0byBjb25z
dHJ1Y3RCaWRpUnVucygpLgogICAgICAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQgZW5kIGFuZCBw
cmV2aW91c0xpbmVCcm9rZUNsZWFubHkgYmU/CiAgICAgICAgIC8vIHJuaXdhIHNheXMgcHJldmlv
dXNMaW5lQnJva2VDbGVhbmx5IGlzIGp1c3QgYSBXaW5JRSBoYWNrIGFuZCBjb3VsZCBhbHdheXMg
YmUgZmFsc2UgaGVyZT8KLSAgICAgICAgaXNvbGF0ZWRSZXNvbHZlci5jcmVhdGVCaWRpUnVuc0Zv
ckxpbmUoZW5kT2ZSdW5zLCBOb1Zpc3VhbE92ZXJyaWRlLCBwcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHkpOworICAgICAgICBpc29sYXRlZFJlc29sdmVyLmNyZWF0ZUJpZGlSdW5zRm9yTGluZShlbmRP
ZlJ1bnMsIFBBTDo6VmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGU6Ok5vVmlzdWFsT3ZlcnJpZGUsIHBy
ZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyBub3Qg
ZGVsZXRlIHRoZSBydW5zIGZyb20gdGhlIHJlc29sdmVyLgogICAgICAgICAvLyBXZSdyZSBub3Qg
Z3VhcmFudGVlZCB0byBnZXQgYW55IEJpZGlSdW5zIGluIHRoZSBwcmV2aW91cyBzdGVwLiBJZiB3
ZSBkb24ndCwgd2UgYWxsb3cgdGhlIHBsYWNlaG9sZGVyCiAgICAgICAgIC8vIGl0c2VsZiB0byBi
ZSB0dXJuZWQgaW50byBhbiBJbmxpbmVCb3guIFdlIGNhbid0IHJlbW92ZSBpdCBoZXJlIHdpdGhv
dXQgcG90ZW50aWFsbHkgbG9zaW5nIHRyYWNrIG9mCkBAIC0xMjM3LDcgKzEyMzcsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KElubGluZUJpZGlSZXNv
bHZlciYgdG9wUmVzb2x2ZXIsCiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24gY29uc3RydWN0cyBsaW5l
IGJveGVzIGZvciBhbGwgb2YgdGhlIHRleHQgcnVucyBpbiB0aGUgcmVzb2x2ZXIgYW5kIGNvbXB1
dGVzIHRoZWlyIHBvc2l0aW9uLgotTGVnYWN5Um9vdElubGluZUJveCogTGVnYWN5TGluZUxheW91
dDo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJpZGlMZXZlbCwgQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgZW5k
LCBMaW5lSW5mbyYgbGluZUluZm8sIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYgdmVydGljYWxQb3Np
dGlvbkNhY2hlLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBXb3JkTWVhc3VyZW1lbnRzJiB3
b3JkTWVhc3VyZW1lbnRzKQorTGVnYWN5Um9vdElubGluZUJveCogTGVnYWN5TGluZUxheW91dDo6
Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJpZGlMZXZlbCwgUEFMOjpCaWRp
UnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBl
bmQsIExpbmVJbmZvJiBsaW5lSW5mbywgVmVydGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNhbFBv
c2l0aW9uQ2FjaGUsIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIFdvcmRNZWFzdXJlbWVudHMm
IHdvcmRNZWFzdXJlbWVudHMpCiB7CiAgICAgaWYgKCFiaWRpUnVucy5ydW5Db3VudCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEzMzgsNyArMTMzOCw3IEBAIHZvaWQgTGVnYWN5TGlu
ZUxheW91dDo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
LCBib29sIGhhCiAgICAgLy8gV2UgYWxzbyBmaW5kIHRoZSBmaXJzdCBjbGVhbiBsaW5lIGFuZCBl
eHRyYWN0IHRoZXNlIGxpbmVzLiBXZSB3aWxsIGFkZCB0aGVtIGJhY2sKICAgICAvLyBpZiB3ZSBk
ZXRlcm1pbmUgdGhhdCB3ZSdyZSBhYmxlIHRvIHN5bmNocm9uaXplIGFmdGVyIGhhbmRsaW5nIGFs
bCBvdXIgZGlydHkgbGluZXMuCiAgICAgTGVnYWN5SW5saW5lSXRlcmF0b3IgY2xlYW5MaW5lU3Rh
cnQ7Ci0gICAgQmlkaVN0YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVzOworICAgIFBBTDo6QmlkaVN0
YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVzOwogICAgIGlmICghbGF5b3V0U3RhdGUuaXNGdWxsTGF5
b3V0KCkgJiYgc3RhcnRMaW5lKQogICAgICAgICBkZXRlcm1pbmVFbmRQb3NpdGlvbihsYXlvdXRT
dGF0ZSwgc3RhcnRMaW5lLCBjbGVhbkxpbmVTdGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1cyk7CiAK
QEAgLTEzNzgsNyArMTM3OCw3IEBAIGlubGluZSBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYg
TGVnYWN5TGluZUxheW91dDo6cmVzdGFydExheW91dFJ1bnNBbmRGbG9hdHNJCiAgICAgcmV0dXJu
IG9sZEVuZDsKIH0KIAotdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRz
SW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2ZXIm
IHJlc29sdmVyLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIGNv
bnN0IEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMsIHVuc2lnbmVkIGNvbnNlY3V0aXZl
SHlwaGVuYXRlZExpbmVzKQordm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxv
YXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2
ZXImIHJlc29sdmVyLCBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQs
IGNvbnN0IFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgdW5zaWduZWQgY29u
c2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpCiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
VG9Vc2UgPSBzdHlsZSgpOwogICAgIGJvb2wgcGFnaW5hdGVkID0gbGF5b3V0Q29udGV4dCgpLmxh
eW91dFN0YXRlKCkgJiYgbGF5b3V0Q29udGV4dCgpLmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGVk
KCk7CkBAIC0xNDMxLDE1ICsxNDMxLDE1IEBAIHZvaWQgTGVnYWN5TGluZUxheW91dDo6bGF5b3V0
UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICAg
ICAgICAgIGlmIChsYXN0Um9vdEJveCgpKQogICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCkt
PnNldExpbmVCcmVha0luZm8oZW5kLnJlbmRlcmVyKCksIGVuZC5vZmZzZXQoKSwgcmVzb2x2ZXIu
c3RhdHVzKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVmlzdWFsRGlyZWN0aW9u
T3ZlcnJpZGUgb3ZlcnJpZGUgPSAoc3R5bGVUb1VzZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpW
aXN1YWwgPyAoc3R5bGVUb1VzZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBW
aXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlIDogVmlzdWFsUmlnaHRUb0xlZnRPdmVycmlkZSkgOiBO
b1Zpc3VhbE92ZXJyaWRlKTsKKyAgICAgICAgICAgIFBBTDo6VmlzdWFsRGlyZWN0aW9uT3ZlcnJp
ZGUgb3ZlcnJpZGUgPSAoc3R5bGVUb1VzZS5ydGxPcmRlcmluZygpID09IE9yZGVyOjpWaXN1YWwg
PyAoc3R5bGVUb1VzZS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IFBB
TDo6VmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGU6OlZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUgOiBQ
QUw6OlZpc3VhbERpcmVjdGlvbk92ZXJyaWRlOjpWaXN1YWxSaWdodFRvTGVmdE92ZXJyaWRlKSA6
IFBBTDo6VmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGU6Ok5vVmlzdWFsT3ZlcnJpZGUpOwogCi0gICAg
ICAgICAgICBpZiAoaXNOZXdVQkFQYXJhZ3JhcGggJiYgc3R5bGVUb1VzZS51bmljb2RlQmlkaSgp
ID09IFBsYWludGV4dCAmJiAhcmVzb2x2ZXIuY29udGV4dCgpLT5wYXJlbnQoKSkgewotICAgICAg
ICAgICAgICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGVUb1VzZS5kaXJlY3Rpb24o
KTsKKyAgICAgICAgICAgIGlmIChpc05ld1VCQVBhcmFncmFwaCAmJiBzdHlsZVRvVXNlLnVuaWNv
ZGVCaWRpKCkgPT0gUEFMOjpFVW5pY29kZUJpZGk6OlBsYWludGV4dCAmJiAhcmVzb2x2ZXIuY29u
dGV4dCgpLT5wYXJlbnQoKSkgeworICAgICAgICAgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24gPSBzdHlsZVRvVXNlLmRpcmVjdGlvbigpOwogICAgICAgICAgICAgICAgIGRldGVy
bWluZURpcmVjdGlvbmFsaXR5KGRpcmVjdGlvbiwgcmVzb2x2ZXIucG9zaXRpb24oKSk7Ci0gICAg
ICAgICAgICAgICAgcmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMoZGlyZWN0aW9uLCBpc092
ZXJyaWRlKHN0eWxlVG9Vc2UudW5pY29kZUJpZGkoKSkpKTsKKyAgICAgICAgICAgICAgICByZXNv
bHZlci5zZXRTdGF0dXMoUEFMOjpCaWRpU3RhdHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZShzdHls
ZVRvVXNlLnVuaWNvZGVCaWRpKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBvd25lcnNoaXAgaXMgcmV2ZXJzZWQuIFdlIHNob3VsZCBvd24gdGhlIEJpZGlS
dW5MaXN0IGFuZCBwYXNzIGl0IHRvIGNyZWF0ZUJpZGlSdW5zRm9yTGluZS4KLSAgICAgICAgICAg
IEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucyA9IHJlc29sdmVyLnJ1bnMoKTsKKyAgICAg
ICAgICAgIFBBTDo6QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zID0gcmVzb2x2ZXIucnVu
cygpOwogICAgICAgICAgICAgY29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KHJlc29sdmVyLCBi
aWRpUnVucywgZW5kLCBvdmVycmlkZSwgbGF5b3V0U3RhdGUubGluZUluZm8oKS5wcmV2aW91c0xp
bmVCcm9rZUNsZWFubHkoKSk7CiAgICAgICAgICAgICBBU1NFUlQocmVzb2x2ZXIucG9zaXRpb24o
KSA9PSBlbmQpOwogCkBAIC0xOTYzLDE3ICsxOTYzLDE3IEBAIExlZ2FjeVJvb3RJbmxpbmVCb3gq
IExlZ2FjeUxpbmVMYXlvdXQ6OmRldGVybWluZVN0YXJ0UG9zaXRpb24oTGluZUxheW91dFN0YXRl
JiBsCiAgICAgICAgIHJlc29sdmVyLnNldFBvc2l0aW9uKGl0ZXIsIG51bWJlck9mSXNvbGF0ZUFu
Y2VzdG9ycyhpdGVyKSk7CiAgICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhsYXN0TGluZS0+bGlu
ZUJyZWFrQmlkaVN0YXR1cygpKTsKICAgICB9IGVsc2UgewotICAgICAgICBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0aW9uKCk7Ci0gICAgICAgIGlmIChzdHlsZSgpLnVu
aWNvZGVCaWRpKCkgPT0gUGxhaW50ZXh0KQorICAgICAgICBQQUw6OlRleHREaXJlY3Rpb24gZGly
ZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rpb24oKTsKKyAgICAgICAgaWYgKHN0eWxlKCkudW5pY29k
ZUJpZGkoKSA9PSBQQUw6OkVVbmljb2RlQmlkaTo6UGxhaW50ZXh0KQogICAgICAgICAgICAgZGV0
ZXJtaW5lRGlyZWN0aW9uYWxpdHkoZGlyZWN0aW9uLCBMZWdhY3lJbmxpbmVJdGVyYXRvcigmbV9m
bG93LCBmaXJzdElubGluZVJlbmRlcmVyU2tpcHBpbmdFbXB0eShtX2Zsb3cpLCAwKSk7Ci0gICAg
ICAgIHJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVzKGRpcmVjdGlvbiwgaXNPdmVycmlkZShz
dHlsZSgpLnVuaWNvZGVCaWRpKCkpKSk7CisgICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhQQUw6
OkJpZGlTdGF0dXMoZGlyZWN0aW9uLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJpZGkoKSkp
KTsKICAgICAgICAgTGVnYWN5SW5saW5lSXRlcmF0b3IgaXRlciA9IExlZ2FjeUlubGluZUl0ZXJh
dG9yKCZtX2Zsb3csIGZpcnN0SW5saW5lUmVuZGVyZXJTa2lwcGluZ0VtcHR5KG1fZmxvdywgJnJl
c29sdmVyKSwgMCk7CiAgICAgICAgIHJlc29sdmVyLnNldFBvc2l0aW9uKGl0ZXIsIG51bWJlck9m
SXNvbGF0ZUFuY2VzdG9ycyhpdGVyKSk7CiAgICAgfQogICAgIHJldHVybiBjdXJyZW50TGluZTsK
IH0KIAotdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpkZXRlcm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5
b3V0U3RhdGUmIGxheW91dFN0YXRlLCBMZWdhY3lSb290SW5saW5lQm94KiBzdGFydExpbmUsIExl
Z2FjeUlubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgQmlkaVN0YXR1cyYgY2xlYW5MaW5l
QmlkaVN0YXR1cykKK3ZvaWQgTGVnYWN5TGluZUxheW91dDo6ZGV0ZXJtaW5lRW5kUG9zaXRpb24o
TGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgTGVnYWN5Um9vdElubGluZUJveCogc3RhcnRM
aW5lLCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIFBBTDo6QmlkaVN0YXR1
cyYgY2xlYW5MaW5lQmlkaVN0YXR1cykKIHsKICAgICBhdXRvIGl0ZXJhdG9yRm9yRmlyc3REaXJ0
eUZsb2F0ID0gW10oTGluZUxheW91dFN0YXRlOjpGbG9hdExpc3QmIGZsb2F0cykgewogICAgICAg
ICBhdXRvIGxhc3RDbGVhbkZsb2F0ID0gZmxvYXRzLmxhc3RDbGVhbkZsb2F0KCk7CkBAIC0yMDg1
LDcgKzIwODUsNyBAQCBib29sIExlZ2FjeUxpbmVMYXlvdXQ6OmxpbmVXaWR0aEZvclBhZ2luYXRl
ZExpbmVDaGFuZ2VkKExlZ2FjeVJvb3RJbmxpbmVCb3gqIHJvbwogICAgIHJldHVybiByb290Qm94
LT5wYWdpbmF0ZWRMaW5lV2lkdGgoKSAhPSBtX2Zsb3cuYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9y
Q29udGVudChjdXJyZW50RnJhZ21lbnQpOwogfQogCi1ib29sIExlZ2FjeUxpbmVMYXlvdXQ6Om1h
dGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9yJiBlbmRMaW5l
U3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMpCitib29sIExlZ2FjeUxpbmVM
YXlvdXQ6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0
IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9y
JiBlbmRMaW5lU3RhcnQsIGNvbnN0IFBBTDo6QmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1cykKIHsK
ICAgICBpZiAocmVzb2x2ZXIucG9zaXRpb24oKSA9PSBlbmRMaW5lU3RhcnQpIHsKICAgICAgICAg
aWYgKHJlc29sdmVyLnN0YXR1cygpICE9IGVuZExpbmVTdGF0dXMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuaAppbmRleCAxMmFkN2M5NTgwMzZmMzU1MTI0N2Nm
NTUwYjIyMDI3NmQzYzZlN2M4Li5hNTc0OTVkY2U2MzRlZTJkZTAxNDk3MjcwNDI1ZmZlYzkyYmRh
ZDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmgKQEAg
LTMxLDkgKzMxLDE0IEBACiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNs
dWRlICJUcmFpbGluZ09iamVjdHMuaCIKIAorbmFtZXNwYWNlIFBBTCB7Cit0ZW1wbGF0ZSA8Y2xh
c3MgUnVuPiBjbGFzcyBCaWRpUnVuTGlzdDsKK2NsYXNzIEJpZGlDb250ZXh0Oworc3RydWN0IEJp
ZGlTdGF0dXM7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQmlkaUNvbnRleHQ7
CiBjbGFzcyBGbG9hdGluZ09iamVjdDsKIGNsYXNzIEZsb2F0V2l0aFJlY3Q7CiBjbGFzcyBGcmFt
ZVZpZXdMYXlvdXRDb250ZXh0OwpAQCAtNDYsMTAgKzUxLDggQEAgY2xhc3MgUmVuZGVyT2JqZWN0
OwogY2xhc3MgUmVuZGVyUnVieVJ1bjsKIGNsYXNzIExlZ2FjeVJvb3RJbmxpbmVCb3g7CiBjbGFz
cyBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGU7Ci1zdHJ1Y3QgQmlkaVN0YXR1czsKIHN0cnVjdCBXb3Jk
TWVhc3VyZW1lbnQ7CiAKLXRlbXBsYXRlIDxjbGFzcyBSdW4+IGNsYXNzIEJpZGlSdW5MaXN0Owog
dHlwZWRlZiBWZWN0b3I8V29yZE1lYXN1cmVtZW50LCA2ND4gV29yZE1lYXN1cmVtZW50czsKIAog
Y2xhc3MgTGVnYWN5TGluZUxheW91dCB7CkBAIC02NiwxNCArNjksMTQgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBsYXlvdXRMaW5lQm94ZXMoYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0
JiByZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pOwog
Ci0gICAgTGVnYWN5Um9vdElubGluZUJveCogY29uc3RydWN0TGluZShCaWRpUnVuTGlzdDxCaWRp
UnVuPiYsIGNvbnN0IExpbmVJbmZvJik7CisgICAgTGVnYWN5Um9vdElubGluZUJveCogY29uc3Ry
dWN0TGluZShQQUw6OkJpZGlSdW5MaXN0PEJpZGlSdW4+JiwgY29uc3QgTGluZUluZm8mKTsKICAg
ICBib29sIHBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoY29uc3QgRmxvYXRpbmdPYmplY3QmIG5ld0Zs
b2F0LCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgTGluZUluZm8m
LCBMaW5lV2lkdGgmKTsKICAgICB2b2lkIGFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKCk7
CiAKICAgICBzaXplX3QgbGluZUNvdW50KCkgY29uc3Q7CiAgICAgc2l6ZV90IGxpbmVDb3VudFVu
dGlsKGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gqKSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lk
IGFwcGVuZFJ1bnNGb3JPYmplY3QoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4qLCBpbnQgc3RhcnQsIGlu
dCBlbmQsIFJlbmRlck9iamVjdCYsIElubGluZUJpZGlSZXNvbHZlciYpOworICAgIHN0YXRpYyB2
b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3QoUEFMOjpCaWRpUnVuTGlzdDxCaWRpUnVuPiosIGludCBz
dGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiwgSW5saW5lQmlkaVJlc29sdmVyJik7CiAgICAg
c3RhdGljIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoRm9yQWxpZ25tZW50KFJlbmRlckJsb2NrRmxv
dyYsIGNvbnN0IFRleHRBbGlnbk1vZGUmLCBjb25zdCBMZWdhY3lSb290SW5saW5lQm94KiwgQmlk
aVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxM
b2dpY2FsV2lkdGgsIGZsb2F0JiBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50KTsKIAogcHJpdmF0ZToKQEAgLTg5LDIwICs5MiwyMCBAQCBwcml2YXRl
OgogICAgIEJpZGlSdW4qIGNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50
KExlZ2FjeVJvb3RJbmxpbmVCb3gqLCBjb25zdCBMaW5lSW5mbyYsIFRleHRBbGlnbk1vZGUsIGZs
b2F0JiBsb2dpY2FsTGVmdCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgQmlkaVJ1biog
Zmlyc3RSdW4sIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIEdseXBoT3ZlcmZsb3dBbmRGYWxs
YmFja0ZvbnRzTWFwJiwgVmVydGljYWxQb3NpdGlvbkNhY2hlJiwgV29yZE1lYXN1cmVtZW50cyYp
OwogICAgIHZvaWQgcmVtb3ZlSW5saW5lQm94KEJpZGlSdW4mLCBjb25zdCBMZWdhY3lSb290SW5s
aW5lQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlQmxvY2tEaXJlY3Rpb25Qb3NpdGlvbnNG
b3JMaW5lKExlZ2FjeVJvb3RJbmxpbmVCb3gqLCBCaWRpUnVuKiBmaXJzdFJ1biwgR2x5cGhPdmVy
Zmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9u
Q2FjaGUmKTsKLSAgICBpbmxpbmUgQmlkaVJ1biogaGFuZGxlVHJhaWxpbmdTcGFjZXMoQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBCaWRpQ29udGV4dCogY3VycmVudENvbnRleHQpOwor
ICAgIGlubGluZSBCaWRpUnVuKiBoYW5kbGVUcmFpbGluZ1NwYWNlcyhQQUw6OkJpZGlSdW5MaXN0
PEJpZGlSdW4+JiBiaWRpUnVucywgUEFMOjpCaWRpQ29udGV4dCogY3VycmVudENvbnRleHQpOwog
ICAgIHZvaWQgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKEZsb2F0aW5nT2JqZWN0Jik7
Ci0gICAgTGVnYWN5Um9vdElubGluZUJveCogY3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVu
c2lnbmVkIGJpZGlMZXZlbCwgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBM
ZWdhY3lJbmxpbmVJdGVyYXRvciYgZW5kLCBMaW5lSW5mbyYsIFZlcnRpY2FsUG9zaXRpb25DYWNo
ZSYsIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIFdvcmRNZWFzdXJlbWVudHMmKTsKKyAgICBM
ZWdhY3lSb290SW5saW5lQm94KiBjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnModW5zaWduZWQg
YmlkaUxldmVsLCBQQUw6OkJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGVn
YWN5SW5saW5lSXRlcmF0b3ImIGVuZCwgTGluZUluZm8mLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUm
LCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBXb3JkTWVhc3VyZW1lbnRzJik7CiAgICAgdm9p
ZCBsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYsIGJvb2wgaGFzSW5saW5lQ2hp
bGQpOwogICAgIGlubGluZSBjb25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgcmVzdGFydExheW91
dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExheW91dFVuaXQgb2xkTG9naWNhbEhlaWdodCwgTGF5b3V0
VW5pdCBuZXdMb2dpY2FsSGVpZ2h0LCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSwgSW5saW5lQmlkaVJlc29sdmVyJiwgIGNvbnN0IExlZ2FjeUlubGluZUl0ZXJhdG9y
JiBvbGRFbmQpOwotICAgIHZvaWQgbGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91
dFN0YXRlJiwgSW5saW5lQmlkaVJlc29sdmVyJiwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3Im
IGNsZWFuTGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1
bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcyk7CisgICAgdm9pZCBsYXlvdXRSdW5z
QW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBj
b25zdCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IFBBTDo6Qmlk
aVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5h
dGVkTGluZXMpOwogICAgIHZvaWQgcmVhdHRhY2hDbGVhbkxpbmVGbG9hdHMoTGVnYWN5Um9vdElu
bGluZUJveCYgY2xlYW5MaW5lLCBMYXlvdXRVbml0IGRlbHRhLCBib29sIGlzRmlyc3RDbGVhbkxp
bmUpOwogICAgIHZvaWQgbGlua1RvRW5kTGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYpOwog
ICAgIHZvaWQgY2hlY2tGbG9hdEluQ2xlYW5MaW5lKExlZ2FjeVJvb3RJbmxpbmVCb3gmIGNsZWFu
TGluZSwgUmVuZGVyQm94JiBmbG9hdEJveE9uQ2xlYW5MaW5lLCBGbG9hdFdpdGhSZWN0JiBtYXRj
aGluZ0Zsb2F0V2l0aFJlY3QsIGJvb2wmIGVuY291bnRlcmVkTmV3RmxvYXQsIGJvb2wmIGRpcnRp
ZWRCeUZsb2F0KTsKICAgICBMZWdhY3lSb290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFydFBvc2l0
aW9uKExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYpOwotICAgIHZvaWQgZGV0
ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiwgTGVnYWN5Um9vdElubGluZUJveCog
c3RhcnRMaW5lLCBMZWdhY3lJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIEJpZGlTdGF0
dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMpOworICAgIHZvaWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24o
TGluZUxheW91dFN0YXRlJiwgTGVnYWN5Um9vdElubGluZUJveCogc3RhcnRMaW5lLCBMZWdhY3lJ
bmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIFBBTDo6QmlkaVN0YXR1cyYgY2xlYW5MaW5l
QmlkaVN0YXR1cyk7CiAgICAgYm9vbCBjaGVja1BhZ2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUo
TGluZUxheW91dFN0YXRlJik7CiAgICAgYm9vbCBsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hh
bmdlZChMZWdhY3lSb290SW5saW5lQm94KiByb290Qm94LCBMYXlvdXRVbml0IGxpbmVEZWx0YSwg
UmVuZGVyRnJhZ21lbnRlZEZsb3cqKSBjb25zdDsKLSAgICBib29sIG1hdGNoZWRFbmRMaW5lKExp
bmVMYXlvdXRTdGF0ZSYsIGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYsIGNvbnN0IExlZ2FjeUlu
bGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0
dXMpOworICAgIGJvb2wgbWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiwgY29uc3QgSW5s
aW5lQmlkaVJlc29sdmVyJiwgY29uc3QgTGVnYWN5SW5saW5lSXRlcmF0b3ImIGVuZExpbmVTdGFy
dCwgY29uc3QgUEFMOjpCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzKTsKICAgICB2b2lkIGRlbGV0
ZUVsbGlwc2lzTGluZUJveGVzKCk7CiAgICAgdm9pZCBjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93
KCk7CiAgICAgdm9pZCB1cGRhdGVGcmFnbWVudEZvckxpbmUoTGVnYWN5Um9vdElubGluZUJveCop
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJ
bmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVC
b3guY3BwCmluZGV4IDhlMWEwZmJlZjU2Y2Y2MTBlZDE3ZmFkN2M1ZTg0Y2E2NGM3NWQwMmIuLjc1
YWU0YWY3NWQ0ODA0NzZiYjQ1OTBiYjczNDUxOWZjNDkyMzhhNjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lSb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5jcHAKQEAgLTIwLDcgKzIwLDYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMZWdhY3lSb290SW5saW5lQm94Lmgi
CiAKLSNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMzksNiArMzgs
NyBAQAogI2luY2x1ZGUgIlJlbmRlclJ1YnlUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIgorI2luY2x1ZGUgPHBhbC90ZXh0
L0JpZGlSZXNvbHZlci5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE5OSwxMCArMTk5LDEwIEBAIHZvaWQgTGVnYWN5Um9vdElu
bGluZUJveDo6YWRqdXN0UG9zaXRpb24oZmxvYXQgZHgsIGZsb2F0IGR5KQogdm9pZCBMZWdhY3lS
b290SW5saW5lQm94OjpjaGlsZFJlbW92ZWQoTGVnYWN5SW5saW5lQm94KiBib3gpCiB7CiAgICAg
aWYgKCZib3gtPnJlbmRlcmVyKCkgPT0gbV9saW5lQnJlYWtPYmopCi0gICAgICAgIHNldExpbmVC
cmVha0luZm8obnVsbHB0ciwgMCwgQmlkaVN0YXR1cygpKTsKKyAgICAgICAgc2V0TGluZUJyZWFr
SW5mbyhudWxscHRyLCAwLCBQQUw6OkJpZGlTdGF0dXMoKSk7CiAKICAgICBmb3IgKGF1dG8qIHBy
ZXYgPSBwcmV2Um9vdEJveCgpOyBwcmV2ICYmIHByZXYtPmxpbmVCcmVha09iaigpID09ICZib3gt
PnJlbmRlcmVyKCk7IHByZXYgPSBwcmV2LT5wcmV2Um9vdEJveCgpKSB7Ci0gICAgICAgIHByZXYt
PnNldExpbmVCcmVha0luZm8obnVsbHB0ciwgMCwgQmlkaVN0YXR1cygpKTsKKyAgICAgICAgcHJl
di0+c2V0TGluZUJyZWFrSW5mbyhudWxscHRyLCAwLCBQQUw6OkJpZGlTdGF0dXMoKSk7CiAgICAg
ICAgIHByZXYtPm1hcmtEaXJ0eSgpOwogICAgIH0KIH0KQEAgLTU5OCwxMiArNTk4LDEyIEBAIFJl
bmRlckJsb2NrRmxvdyYgTGVnYWN5Um9vdElubGluZUJveDo6YmxvY2tGbG93KCkgY29uc3QKICAg
ICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlcigpKTsKIH0KIAotQmlk
aVN0YXR1cyBMZWdhY3lSb290SW5saW5lQm94OjpsaW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3QK
K1BBTDo6QmlkaVN0YXR1cyBMZWdhY3lSb290SW5saW5lQm94OjpsaW5lQnJlYWtCaWRpU3RhdHVz
KCkgY29uc3QKIHsgCiAgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1f
bGluZUJyZWFrQmlkaVN0YXR1c0VvciksIHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPihtX2xp
bmVCcmVha0JpZGlTdGF0dXNMYXN0U3Ryb25nKSwgc3RhdGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+
KG1fbGluZUJyZWFrQmlkaVN0YXR1c0xhc3QpLCBtX2xpbmVCcmVha0NvbnRleHQuY29weVJlZigp
IH07CiB9CiAKLXZvaWQgTGVnYWN5Um9vdElubGluZUJveDo6c2V0TGluZUJyZWFrSW5mbyhSZW5k
ZXJPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgYnJlYWtQb3NpdGlvbiwgY29uc3QgQmlkaVN0YXR1
cyYgc3RhdHVzKQordm9pZCBMZWdhY3lSb290SW5saW5lQm94OjpzZXRMaW5lQnJlYWtJbmZvKFJl
bmRlck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBicmVha1Bvc2l0aW9uLCBjb25zdCBQQUw6OkJp
ZGlTdGF0dXMmIHN0YXR1cykKIHsKICAgICBtX2xpbmVCcmVha09iaiA9IG9iamVjdDsKICAgICBt
X2xpbmVCcmVha1BvcyA9IGJyZWFrUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guaAppbmRleCBlY2VlMjY0ZGI1YzMyOWY1NGZkZDA4ZWYx
OWFhYzA2ZTA4MDQzNmU1Li5lNTliNjQ2MmU4ODI5YjVmNjVlYzk5NzY1MTZhYjI1NTQwZmMzNDAw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJv
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lSb290SW5saW5lQm94LmgK
QEAgLTIwLDExICsyMCwxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJpZGlDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lRmxvd0JveC5oIgogI2luY2x1ZGUgIlJlbmRl
ckJveC5oIgorI2luY2x1ZGUgPHBhbC90ZXh0L0JpZGlDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KIAorbmFtZXNwYWNlIFBBTCB7CitzdHJ1Y3QgQmlkaVN0YXR1czsKK30KKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtMzMsNyArMzcs
NiBAQCBjbGFzcyBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzOwogY2xhc3MgUmVuZGVyQmxv
Y2tGbG93OwogY2xhc3MgUmVuZGVyRnJhZ21lbnRDb250YWluZXI7CiAKLXN0cnVjdCBCaWRpU3Rh
dHVzOwogc3RydWN0IEdhcFJlY3RzOwogCiBjbGFzcyBMZWdhY3lSb290SW5saW5lQm94IDogcHVi
bGljIExlZ2FjeUlubGluZUZsb3dCb3gsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxMZWdhY3lSb290
SW5saW5lQm94PiB7CkBAIC05MSw4ICs5NCw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBSZW5k
ZXJPYmplY3QqIGxpbmVCcmVha09iaigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJyZWFrT2JqLmdl
dCgpOyB9Ci0gICAgQmlkaVN0YXR1cyBsaW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRMaW5lQnJlYWtJbmZvKFJlbmRlck9iamVjdCosIHVuc2lnbmVkIGJyZWFrUG9zLCBj
b25zdCBCaWRpU3RhdHVzJik7CisgICAgUEFMOjpCaWRpU3RhdHVzIGxpbmVCcmVha0JpZGlTdGF0
dXMoKSBjb25zdDsKKyAgICB2b2lkIHNldExpbmVCcmVha0luZm8oUmVuZGVyT2JqZWN0KiwgdW5z
aWduZWQgYnJlYWtQb3MsIGNvbnN0IFBBTDo6QmlkaVN0YXR1cyYpOwogCiAgICAgdW5zaWduZWQg
bGluZUJyZWFrUG9zKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQnJlYWtQb3M7IH0KICAgICB2b2lk
IHNldExpbmVCcmVha1Bvcyh1bnNpZ25lZCBwKSB7IG1fbGluZUJyZWFrUG9zID0gcDsgfQpAQCAt
MjAyLDcgKzIwNSw3IEBAIHByaXZhdGU6CiAgICAgLy8gV2hlcmUgdGhpcyBsaW5lIGVuZGVkLiBU
aGUgZXhhY3Qgb2JqZWN0IGFuZCB0aGUgcG9zaXRpb24gd2l0aGluIHRoYXQgb2JqZWN0IGFyZSBz
dG9yZWQgc28gdGhhdAogICAgIC8vIHdlIGNhbiBjcmVhdGUgYW4gTGVnYWN5SW5saW5lSXRlcmF0
b3IgYmVnaW5uaW5nIGp1c3QgYWZ0ZXIgdGhlIGVuZCBvZiB0aGlzIGxpbmUuCiAgICAgV2Vha1B0
cjxSZW5kZXJPYmplY3Q+IG1fbGluZUJyZWFrT2JqOwotICAgIFJlZlB0cjxCaWRpQ29udGV4dD4g
bV9saW5lQnJlYWtDb250ZXh0OworICAgIFJlZlB0cjxQQUw6OkJpZGlDb250ZXh0PiBtX2xpbmVC
cmVha0NvbnRleHQ7CiAKICAgICBMYXlvdXRVbml0IG1fbGluZVRvcDsKICAgICBMYXlvdXRVbml0
IG1fbGluZUJvdHRvbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmlu
ZGV4IDgzYzgxMDQxMGFhMmFkN2E3NjEzODllZmJjNGIwODQzYWI0YzA5ZDMuLmY2NTllMTU1Yjk3
OTc4NjYwOTc0NDRhYWRlNmYyOWU3MzRkMTRjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcApAQCAtMzA4OCw3ICszMDg4LDcgQEAgY29uc3QgY2hhciogUmVuZGVy
QmxvY2s6OnJlbmRlck5hbWUoKSBjb25zdAogCiBUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKLSAg
ICBhdXRvIHRleHREaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgYXV0byB0ZXh0
RGlyZWN0aW9uID0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgYm9vbCBkaXJlY3Rpb25h
bE92ZXJyaWRlID0gc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6VmlzdWFsOwogICAgIGlm
IChmbGFncyAhPSBEZWZhdWx0VGV4dFJ1bkZsYWdzKSB7CiAgICAgICAgIGlmIChmbGFncyAmIFJl
c3BlY3REaXJlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4
IGJjNGMzMTBlOGFjYzRjMGMyOThhMzM4NDNmYTUyMGNmMmE4YjMxNWYuLjU2NTE4NzQyMWEyYWZh
MmFkZTJjOTU0NjdiZDkwYmVkNDkwNjA3ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCkBAIC03OSwxMCArNzksMTAgQEAKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFwUG9pbnRz
LmgiCi0jaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRl
LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxw
YWwvdGV4dC9UZXh0RGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgogCkBAIC0zNzc3LDE0ICszNzc3LDE0IEBA
IHN0YXRpYyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZShMZW5ndGgmIGxvZ2ljYWxM
ZWZ0LCBMZW5ndGgmIGxvZ2ljYWxSaWdoCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlck9i
amVjdCogcGFyZW50ID0gY2hpbGQtPnBhcmVudCgpOwotICAgIFRleHREaXJlY3Rpb24gcGFyZW50
RGlyZWN0aW9uID0gcGFyZW50LT5zdHlsZSgpLmRpcmVjdGlvbigpOworICAgIFBBTDo6VGV4dERp
cmVjdGlvbiBwYXJlbnREaXJlY3Rpb24gPSBwYXJlbnQtPnN0eWxlKCkuZGlyZWN0aW9uKCk7CiAK
ICAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2luZyBlbmNsb3NpbmdCb3goKSB3aGljaCBpcyB3cm9u
ZyBmb3IgYWJzb2x1dGVseQogICAgIC8vIHBvc2l0aW9uZWQgZ3JpZCBpdGVtcywgYXMgdGhleSBy
ZWx5IG9uIHRoZSBncmlkIGFyZWEuIFNvIGZvciBncmlkIGl0ZW1zIGlmCiAgICAgLy8gYm90aCAi
bGVmdCIgYW5kICJyaWdodCIgcHJvcGVydGllcyBhcmUgImF1dG8iLCB3ZSBjYW4gY29uc2lkZXIg
dGhhdCBvbmUgb2YKICAgICAvLyB0aGVtIChkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbikgaXMg
c2ltcGx5ICIwIi4KICAgICBpZiAocGFyZW50LT5pc1JlbmRlckdyaWQoKSAmJiBwYXJlbnQgPT0g
Y2hpbGQtPmNvbnRhaW5pbmdCbG9jaygpKSB7Ci0gICAgICAgIGlmIChwYXJlbnREaXJlY3Rpb24g
PT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAocGFyZW50RGlyZWN0aW9uID09IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgbG9naWNhbExlZnQuc2V0VmFsdWUo
TGVuZ3RoVHlwZTo6Rml4ZWQsIDApOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2dpY2Fs
UmlnaHQuc2V0VmFsdWUoTGVuZ3RoVHlwZTo6Rml4ZWQsIDApOwpAQCAtMzc5Miw3ICszNzkyLDcg
QEAgc3RhdGljIHZvaWQgY29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNh
bExlZnQsIExlbmd0aCYgbG9naWNhbFJpZ2gKICAgICB9CiAKICAgICAvLyBGb3Igb3J0aG9nb25h
bCBmbG93cyB3ZSBkb24ndCBjYXJlIHdoZXRoZXIgdGhlIHBhcmVudCBpcyBMVFIgb3IgUlRMIGJl
Y2F1c2UgaXQgZG9lcyBub3QgYWZmZWN0IHRoZSBwb3NpdGlvbiBpbiBvdXIgaW5saW5lIGF4aXMu
Ci0gICAgaWYgKHBhcmVudERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgfHwgaXNPcnRo
b2dvbmFsKCpjaGlsZCwgKnBhcmVudCkpIHsKKyAgICBpZiAocGFyZW50RGlyZWN0aW9uID09IFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSIHx8IGlzT3J0aG9nb25hbCgqY2hpbGQsICpwYXJlbnQpKSB7
CiAgICAgICAgIExheW91dFVuaXQgc3RhdGljUG9zaXRpb24gPSBpc09ydGhvZ29uYWwoKmNoaWxk
LCAqcGFyZW50KSA/IGNoaWxkLT5sYXllcigpLT5zdGF0aWNCbG9ja1Bvc2l0aW9uKCkgLSBjb250
YWluZXJCbG9jay5ib3JkZXJCZWZvcmUoKSA6IGNoaWxkLT5sYXllcigpLT5zdGF0aWNJbmxpbmVQ
b3NpdGlvbigpIC0gY29udGFpbmVyQmxvY2suYm9yZGVyTG9naWNhbExlZnQoKTsKICAgICAgICAg
Zm9yIChhdXRvKiBjdXJyZW50ID0gcGFyZW50OyBjdXJyZW50ICYmIGN1cnJlbnQgIT0gJmNvbnRh
aW5lckJsb2NrOyBjdXJyZW50ID0gY3VycmVudC0+Y29udGFpbmVyKCkpIHsKICAgICAgICAgICAg
IGlmICghaXM8UmVuZGVyQm94PigqY3VycmVudCkpCkBAIC0zODgxLDcgKzM4ODEsNyBAQCB2b2lk
IFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgoTG9naWNhbEV4dGVudENv
bXB1dGVkVmFsdWVzJiBjb21wdQogICAgIC8vIFVzZSB0aGUgY29udGFpbmVyIGJsb2NrJ3MgZGly
ZWN0aW9uIGV4Y2VwdCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBzdGF0aWMgZGlzdGFuY2UKICAgICAv
LyBUaGlzIGNvbmZvcm1zIHdpdGggdGhlIHJlZmVyZW5jZSByZXN1bHRzIGZvciBhYnNwb3MtcmVw
bGFjZWQtd2lkdGgtbWFyZ2luLTAwMC5odG0KICAgICAvLyBvZiB0aGUgQ1NTIDIuMSB0ZXN0IHN1
aXRlCi0gICAgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24gPSBjb250YWluZXJCbG9j
ay5zdHlsZSgpLmRpcmVjdGlvbigpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiBjb250YWluZXJE
aXJlY3Rpb24gPSBjb250YWluZXJCbG9jay5zdHlsZSgpLmRpcmVjdGlvbigpOwogCiAgICAgYm9v
bCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIGNvbnN0IExh
eW91dFVuaXQgYm9yZGVyc1BsdXNQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0
aCgpOwpAQCAtNDAxNCw3ICs0MDE0LDcgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUxvZ2ljYWxMZWZ0
UG9zaXRpb25lZE9mZnNldChMYXlvdXRVbml0JiBsb2dpY2FsTGVmdFBvcywgY29uc3QKICAgICAg
ICAgbG9naWNhbExlZnRQb3MgKz0gKGNoaWxkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
Y29udGFpbmVyQmxvY2suYm9yZGVyTGVmdCgpIDogY29udGFpbmVyQmxvY2suYm9yZGVyVG9wKCkp
OwogfQogCi12b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2lu
ZyhTaXplVHlwZSB3aWR0aFR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJv
eE1vZGVsT2JqZWN0JiBjb250YWluZXJCbG9jaywgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJl
Y3Rpb24sCit2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2lu
ZyhTaXplVHlwZSB3aWR0aFR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgsIGNvbnN0IFJlbmRlckJv
eE1vZGVsT2JqZWN0JiBjb250YWluZXJCbG9jaywgUEFMOjpUZXh0RGlyZWN0aW9uIGNvbnRhaW5l
ckRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGJvcmRl
cnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExlbmd0aCBsb2dpY2FsTGVmdCwgTGVuZ3RoIGxvZ2ljYWxSaWdodCwgTGVuZ3Ro
IG1hcmdpbkxvZ2ljYWxMZWZ0LCBMZW5ndGggbWFyZ2luTG9naWNhbFJpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9naWNhbEV4dGVudENv
bXB1dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKQEAgLTQwNzgsNyArNDA3OCw3IEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKFNpemVU
eXBlIHdpZHRoVHlwZSwgTGVuZ3RoIGxvCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIFVzZSB0aGUgY29udGFpbmluZyBibG9jaydzIGRpcmVjdGlvbiByYXRoZXIgdGhh
biB0aGUgcGFyZW50IGJsb2NrJ3MKICAgICAgICAgICAgICAgICAvLyBwZXIgQ1NTIDIuMSByZWZl
cmVuY2UgdGVzdCBhYnNwb3Mtbm9uLXJlcGxhY2VkLXdpZHRoLW1hcmdpbi0wMDAuCi0gICAgICAg
ICAgICAgICAgaWYgKGNvbnRhaW5lckRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSKSB7CiAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxvZ2ljYWxMZWZ0VmFsdWUg
PSAwOwogICAgICAgICAgICAgICAgICAgICBtYXJnaW5Mb2dpY2FsUmlnaHRWYWx1ZSA9IGF2YWls
YWJsZVNwYWNlOyAvLyB3aWxsIGJlIG5lZ2F0aXZlCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
QEAgLTQxMDEsNyArNDEwMSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWxXaWR0aFVzaW5nKFNpemVUeXBlIHdpZHRoVHlwZSwgTGVuZ3RoIGxvCiAKICAgICAgICAg
ICAgIC8vIFVzZSB0aGUgY29udGFpbmluZyBibG9jaydzIGRpcmVjdGlvbiByYXRoZXIgdGhhbiB0
aGUgcGFyZW50IGJsb2NrJ3MKICAgICAgICAgICAgIC8vIHBlciBDU1MgMi4xIHJlZmVyZW5jZSB0
ZXN0IGFic3Bvcy1ub24tcmVwbGFjZWQtd2lkdGgtbWFyZ2luLTAwMC4KLSAgICAgICAgICAgIGlm
ICghaXNPcnRob2dvbmFsKCp0aGlzLCBjb250YWluZXJCbG9jaykgJiYgY29udGFpbmVyRGlyZWN0
aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICAgICAgICAgIGlmICghaXNPcnRob2dvbmFs
KCp0aGlzLCBjb250YWluZXJCbG9jaykgJiYgY29udGFpbmVyRGlyZWN0aW9uID09IFBBTDo6VGV4
dERpcmVjdGlvbjo6UlRMKQogICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0VmFsdWUgPSAoYXZh
aWxhYmxlU3BhY2UgKyBsb2dpY2FsTGVmdFZhbHVlKSAtIG1hcmdpbkxvZ2ljYWxMZWZ0VmFsdWUg
LSBtYXJnaW5Mb2dpY2FsUmlnaHRWYWx1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC00
MjMxLDcgKzQyMzEsNyBAQCBzdGF0aWMgdm9pZCBjb21wdXRlQmxvY2tTdGF0aWNEaXN0YW5jZShM
ZW5ndGgmIGxvZ2ljYWxUb3AsIExlbmd0aCYgbG9naWNhbEJvdHRvbQogCiAgICAgLy8gSWYgdGhl
IHBhcmVudCBpcyBSVEwgdGhlbiB3ZSBuZWVkIHRvIGZsaXAgdGhlIGNvb3JkaW5hdGUgYnkgc2V0
dGluZyB0aGUgbG9naWNhbCBib3R0b20gaW5zdGVhZCBvZiB0aGUgbG9naWNhbCB0b3AuIFRoYXQg
b25seSBuZWVkcwogICAgIC8vIHRvIGJlIGRvbmUgaW4gY2FzZSBvZiBvcnRob2dvbmFsIHdyaXRp
bmcgbW9kZXMsIGZvciBob3Jpem9udGFsIG9uZXMgdGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBw
YXJlbnQgZG9lcyBub3QgYWZmZWN0IHRoZSBibG9jayBwb3NpdGlvbi4KLSAgICBpZiAocGFyZW50
LT5zdHlsZSgpLmRpcmVjdGlvbigpICE9IFRleHREaXJlY3Rpb246OkxUUiAmJiBpc09ydGhvZ29u
YWwoKmNoaWxkLCAqcGFyZW50KSkKKyAgICBpZiAocGFyZW50LT5zdHlsZSgpLmRpcmVjdGlvbigp
ICE9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSICYmIGlzT3J0aG9nb25hbCgqY2hpbGQsICpwYXJl
bnQpKQogICAgICAgICBsb2dpY2FsQm90dG9tLnNldFZhbHVlKExlbmd0aFR5cGU6OkZpeGVkLCBz
dGF0aWNMb2dpY2FsVG9wKTsKICAgICBlbHNlCiAgICAgICAgIGxvZ2ljYWxUb3Auc2V0VmFsdWUo
TGVuZ3RoVHlwZTo6Rml4ZWQsIHN0YXRpY0xvZ2ljYWxUb3ApOwpAQCAtNDUzNiw3ICs0NTM2LDcg
QEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoUmVwbGFjZWQo
TG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWUKIAogICAgIC8vIFRvIG1hdGNoIFdpbklFLCBpbiBx
dWlya3MgbW9kZSB1c2UgdGhlIHBhcmVudCdzICdkaXJlY3Rpb24nIHByb3BlcnR5CiAgICAgLy8g
aW5zdGVhZCBvZiB0aGUgY29udGFpbmVyIGJsb2NrJ3MuCi0gICAgVGV4dERpcmVjdGlvbiBjb250
YWluZXJEaXJlY3Rpb24gPSBjb250YWluZXJCbG9jay5zdHlsZSgpLmRpcmVjdGlvbigpOworICAg
IFBBTDo6VGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24gPSBjb250YWluZXJCbG9jay5z
dHlsZSgpLmRpcmVjdGlvbigpOwogCiAgICAgLy8gVmFyaWFibGVzIHRvIHNvbHZlLgogICAgIGJv
b2wgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKQEAgLTQ2MDIsNyAr
NDYwMiw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFJl
cGxhY2VkKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlCiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBVc2UgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBkaXJlY3Rpb24gcmF0aGVyIHRo
YW4gdGhlIHBhcmVudCBibG9jaydzCiAgICAgICAgICAgICAvLyBwZXIgQ1NTIDIuMSByZWZlcmVu
Y2UgdGVzdCBhYnNwb3MtcmVwbGFjZWQtd2lkdGgtbWFyZ2luLTAwMC4KLSAgICAgICAgICAgIGlm
IChjb250YWluZXJEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKSB7CisgICAgICAgICAg
ICBpZiAoY29udGFpbmVyRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSB7CiAg
ICAgICAgICAgICAgICAgbWFyZ2luTG9naWNhbExlZnRBbGlhcyA9IDA7CiAgICAgICAgICAgICAg
ICAgbWFyZ2luTG9naWNhbFJpZ2h0QWxpYXMgPSBkaWZmZXJlbmNlOyAvLyB3aWxsIGJlIG5lZ2F0
aXZlCiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDY1MCw3ICs0NjUwLDcgQEAgdm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoUmVwbGFjZWQoTG9naWNhbEV4dGVu
dENvbXB1dGVkVmFsdWUKICAgICAgICAgbG9naWNhbFJpZ2h0VmFsdWUgPSB2YWx1ZUZvckxlbmd0
aChsb2dpY2FsUmlnaHQsIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGxvZ2ljYWxM
ZWZ0VmFsdWUgPSB2YWx1ZUZvckxlbmd0aChsb2dpY2FsTGVmdCwgY29udGFpbmVyTG9naWNhbFdp
ZHRoKTsKICAgICAgICAgLy8gSWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgcmlnaHQtdG8tbGVm
dCwgdGhlbiBwdXNoIHRoZSBsZWZ0IHBvc2l0aW9uIGFzIGZhciB0byB0aGUgcmlnaHQgYXMgcG9z
c2libGUKLSAgICAgICAgaWYgKGNvbnRhaW5lckRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpS
VEwpIHsKKyAgICAgICAgaWYgKGNvbnRhaW5lckRpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rp
b246OlJUTCkgewogICAgICAgICAgICAgaW50IHRvdGFsTG9naWNhbFdpZHRoID0gY29tcHV0ZWRW
YWx1ZXMubV9leHRlbnQgKyBsb2dpY2FsTGVmdFZhbHVlICsgbG9naWNhbFJpZ2h0VmFsdWUgKyAg
bWFyZ2luTG9naWNhbExlZnRBbGlhcyArIG1hcmdpbkxvZ2ljYWxSaWdodEFsaWFzOwogICAgICAg
ICAgICAgbG9naWNhbExlZnRWYWx1ZSA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAtICh0b3RhbExv
Z2ljYWxXaWR0aCAtIGxvZ2ljYWxMZWZ0VmFsdWUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggYjIyNWE3YjI2ZTYzNDBlYzA2NDUzNTFlMWM4NzkwZTgw
NDAwNDY1Yi4uOWIzYTRlMGRkMzMxOTE4NjgxMjEyYjhkNTkxMGM1YWE5MjUxZGYxNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNzU3LDcgKzc1Nyw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCByZXBhaW50TGF5ZXJSZWN0c0ZvckltYWdlKFdyYXBwZWRJbWFnZVB0ciwgY29u
c3QgRmlsbExheWVyJiBsYXllcnMsIGJvb2wgZHJhd2luZ0JhY2tncm91bmQpOwogCiAgICAgdm9p
ZCBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFs
dWVzJikgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5n
KFNpemVUeXBlLCBMZW5ndGggbG9naWNhbFdpZHRoLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVj
dCYgY29udGFpbmVyQmxvY2ssIFRleHREaXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uLAorICAg
IHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhTaXplVHlwZSwgTGVuZ3Ro
IGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNvbnRhaW5lckJsb2Nr
LCBQQUw6OlRleHREaXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxX
aWR0aCwgTGF5b3V0VW5pdCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBsb2dpY2FsTGVmdCwgTGVuZ3RoIGxvZ2lj
YWxSaWdodCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxMZWZ0LCBMZW5ndGggbWFyZ2luTG9naWNhbFJp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dpY2Fs
RXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKaW5kZXggN2UxOGZm
MGE2ZTVmZWE0MmQ2MzZhNDhlMTEwNzJjNjM2MzI3NGI4Yi4uZWEzNDE4ODY0N2UzOWRjY2YyYjgw
MWNkM2FkYWM1ODcxMGRkZWU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKQEAgLTEwNDMsNyArMTA0Myw3
IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcChGbGV4
Qm94SXRlcmF0b3ImIGl0ZXJhdG9yLCBib29sCiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRl
ZCgpOwogCiAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGRvbid0IHN1cHBvcnQgUlRMLgotICAg
ICAgICBpZiAoc3R5bGUoKS5kaXJlY3Rpb24oKSAhPSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAg
ICAgIGlmIChzdHlsZSgpLmRpcmVjdGlvbigpICE9IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gR2V0IHRoZSBsYXN0IGxpbmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCmlu
ZGV4IDI2NWI4OTRmMzNmMmExM2E0MmNkZDg1MDI4OWM2ODgwY2Y5NGFlOWMuLmRjODE4NTk3OTcy
MjBhMzMxMDRjOTI3MGJkZGUzYzQ2ZTk1MjA1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIHZv
aWQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgLy8gSWYg
dGhlIGZyYWdtZW50cyBoYXZlIG5vbi11bmlmb3JtIGxvZ2ljYWwgd2lkdGhzLCB0aGVuIGluc2Vy
dCBpbnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIFJlbmRlckZyYWdtZW50ZWRGbG93LgogICAgIGZv
ciAoYXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdtZW50TGlzdCkgewogICAgICAgICBMYXlvdXRVbml0
IGZyYWdtZW50TG9naWNhbFdpZHRoID0gZnJhZ21lbnQtPnBhZ2VMb2dpY2FsV2lkdGgoKTsKLSAg
ICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4
dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2ljYWxXaWR0aCAtIGZyYWdtZW50TG9naWNhbFdp
ZHRoOworICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gc3R5bGUoKS5kaXJlY3Rpb24o
KSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IDBfbHUgOiBsb2dpY2FsV2lkdGggLSBmcmFn
bWVudExvZ2ljYWxXaWR0aDsKICAgICAgICAgZnJhZ21lbnQtPnNldFJlbmRlckJveEZyYWdtZW50
SW5mbyh0aGlzLCBsb2dpY2FsTGVmdCwgZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGZhbHNlKTsKICAg
ICB9CiB9CkBAIC04NDIsNyArODQyLDcgQEAgdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6dXBk
YXRlRnJhZ21lbnRzRnJhZ21lbnRlZEZsb3dQb3J0aW9uUmVjdCgpCiAgICAgICAgIExheW91dFVu
aXQgZnJhZ21lbnRMb2dpY2FsV2lkdGggPSBmcmFnbWVudC0+cGFnZUxvZ2ljYWxXaWR0aCgpOwog
ICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbEhlaWdodCA9IHN0ZDo6bWluPExheW91
dFVuaXQ+KFJlbmRlckZyYWdtZW50ZWRGbG93OjptYXhMb2dpY2FsSGVpZ2h0KCkgLSBsb2dpY2Fs
SGVpZ2h0LCBmcmFnbWVudC0+bG9naWNhbEhlaWdodE9mQWxsRnJhZ21lbnRlZEZsb3dDb250ZW50
KCkpOwogCi0gICAgICAgIExheW91dFJlY3QgZnJhZ21lbnRSZWN0KHN0eWxlKCkuZGlyZWN0aW9u
KCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2ljYWxXaWR0aCgpIC0gZnJhZ21l
bnRMb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQsIGZyYWdtZW50TG9naWNhbFdpZHRoLCBmcmFn
bWVudExvZ2ljYWxIZWlnaHQpOworICAgICAgICBMYXlvdXRSZWN0IGZyYWdtZW50UmVjdChzdHls
ZSgpLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gMF9sdSA6IGxvZ2lj
YWxXaWR0aCgpIC0gZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQsIGZyYWdtZW50
TG9naWNhbFdpZHRoLCBmcmFnbWVudExvZ2ljYWxIZWlnaHQpOwogCiAgICAgICAgIGZyYWdtZW50
LT5zZXRGcmFnbWVudGVkRmxvd1BvcnRpb25SZWN0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBmcmFnbWVudFJlY3QgOiBmcmFnbWVudFJlY3QudHJhbnNwb3NlZFJlY3QoKSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApp
bmRleCBmMjk1MDRhMmYzMmU4NWFkNTgzMjdmNjZhMzRiMTkxMjhiNmQ2ODc4Li45YTRmMzk5MzZh
MzliYWJhNjk1MDQ0MjdhMmJiOTZmOTFmNWNmYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCkBAIC0xODIsNyArMTgyLDcg
QEAgYm9vbCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzaG91bGRQbGFjZVZlcnRpY2FsU2Nyb2xs
YmFyT25MZWZ0KCkgY29uc3QKICAgICBjYXNlIFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3k6
OkNvbnRlbnQ6CiAgICAgICAgIHJldHVybiBzdHlsZSgpLnNob3VsZFBsYWNlVmVydGljYWxTY3Jv
bGxiYXJPbkxlZnQoKTsKICAgICBjYXNlIFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3k6OlN5
c3RlbToKLSAgICAgICAgcmV0dXJuIHNldHRpbmdzKCkuc3lzdGVtTGF5b3V0RGlyZWN0aW9uKCkg
PT0gVGV4dERpcmVjdGlvbjo6UlRMOworICAgICAgICByZXR1cm4gc2V0dGluZ3MoKS5zeXN0ZW1M
YXlvdXREaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTDsKICAgICB9CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHN0eWxlKCkuc2hvdWxkUGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uTGVmdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHAKaW5kZXggYWUyODIyYzZlZGVhNjk2YzA4ZDZiMzkxNTU1ZjdjNTIzNmI2NDJm
OC4uZmUzNzczZGNhYmRmNTVlMTc0YmYxMzA4YWZlNWQ5NWU1MGM2NDFhNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCkBAIC0zNSw3ICszNSw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAj
aW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCi0jaW5jbHVkZSAiVW5pY29kZUJpZGkuaCIK
KyNpbmNsdWRlIDxwYWwvdGV4dC9Vbmljb2RlQmlkaS5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CkBAIC03Nyw3ICs3Nyw3IEBAIFJlbmRlclN0eWxlIFJlbmRlckxpc3RJ
dGVtOjpjb21wdXRlTWFya2VyU3R5bGUoKSBjb25zdAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRW
YXJpYW50TnVtZXJpY1NwYWNpbmcoRm9udFZhcmlhbnROdW1lcmljU3BhY2luZzo6VGFidWxhck51
bWJlcnMpOwogICAgIG1hcmtlclN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnRE
ZXNjcmlwdGlvbikpOwogICAgIG1hcmtlclN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1
bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKLSAgICBtYXJrZXJTdHlsZS5zZXRVbmljb2RlQmlkaShF
VW5pY29kZUJpZGk6Oklzb2xhdGUpOworICAgIG1hcmtlclN0eWxlLnNldFVuaWNvZGVCaWRpKFBB
TDo6RVVuaWNvZGVCaWRpOjpJc29sYXRlKTsKICAgICBtYXJrZXJTdHlsZS5zZXRXaGl0ZVNwYWNl
KFdoaXRlU3BhY2U6OlByZSk7CiAgICAgbWFya2VyU3R5bGUuc2V0VGV4dFRyYW5zZm9ybShUZXh0
VHJhbnNmb3JtOjpOb25lKTsKICAgICByZXR1cm4gbWFya2VyU3R5bGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKaW5kZXggYjEzNDZhMTA1YjczMjhlNThmNWZi
YTdlOTgwOTI2Y2ExOTk4MWU5MC4uZTRkMDM0ZjUwYzg5ZTc1YzMzNzViNGI5MjM0OTAyMTM5YjU0
MWQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcApAQCAt
MTAzLDEzICsxMDMsMTMgQEAgTWFycXVlZURpcmVjdGlvbiBSZW5kZXJNYXJxdWVlOjpkaXJlY3Rp
b24oKSBjb25zdAogICAgIC8vIEZJWE1FOiBTdXBwb3J0IHRoZSBDU1MzICJhdXRvIiB2YWx1ZSBm
b3IgZGV0ZXJtaW5pbmcgdGhlIGRpcmVjdGlvbiBvZiB0aGUgbWFycXVlZS4KICAgICAvLyBGb3Ig
bm93IGp1c3QgbWFwIE1hcnF1ZWVEaXJlY3Rpb246OkF1dG8gdG8gTWFycXVlZURpcmVjdGlvbjo6
QmFja3dhcmQKICAgICBNYXJxdWVlRGlyZWN0aW9uIHJlc3VsdCA9IG1fbGF5ZXItPnJlbmRlcmVy
KCkuc3R5bGUoKS5tYXJxdWVlRGlyZWN0aW9uKCk7Ci0gICAgVGV4dERpcmVjdGlvbiBkaXIgPSBt
X2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkuZGlyZWN0aW9uKCk7CisgICAgUEFMOjpUZXh0RGly
ZWN0aW9uIGRpciA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5kaXJlY3Rpb24oKTsKICAg
ICBpZiAocmVzdWx0ID09IE1hcnF1ZWVEaXJlY3Rpb246OkF1dG8pCiAgICAgICAgIHJlc3VsdCA9
IE1hcnF1ZWVEaXJlY3Rpb246OkJhY2t3YXJkOwogICAgIGlmIChyZXN1bHQgPT0gTWFycXVlZURp
cmVjdGlvbjo6Rm9yd2FyZCkKLSAgICAgICAgcmVzdWx0ID0gKGRpciA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIpID8gTWFycXVlZURpcmVjdGlvbjo6UmlnaHQgOiBNYXJxdWVlRGlyZWN0aW9uOjpMZWZ0
OworICAgICAgICByZXN1bHQgPSAoZGlyID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKSA/IE1h
cnF1ZWVEaXJlY3Rpb246OlJpZ2h0IDogTWFycXVlZURpcmVjdGlvbjo6TGVmdDsKICAgICBpZiAo
cmVzdWx0ID09IE1hcnF1ZWVEaXJlY3Rpb246OkJhY2t3YXJkKQotICAgICAgICByZXN1bHQgPSAo
ZGlyID09IFRleHREaXJlY3Rpb246OkxUUikgPyBNYXJxdWVlRGlyZWN0aW9uOjpMZWZ0IDogTWFy
cXVlZURpcmVjdGlvbjo6UmlnaHQ7CisgICAgICAgIHJlc3VsdCA9IChkaXIgPT0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFIpID8gTWFycXVlZURpcmVjdGlvbjo6TGVmdCA6IE1hcnF1ZWVEaXJlY3Rp
b246OlJpZ2h0OwogICAgIAogICAgIC8vIE5vdyB3ZSBoYXZlIHRoZSByZWFsIGRpcmVjdGlvbi4g
IE5leHQgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBpbmNyZW1lbnQgaXMgbmVnYXRpdmUuCiAgICAg
Ly8gSWYgc28sIHRoZW4gd2UgcmV2ZXJzZSB0aGUgZGlyZWN0aW9uLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKaW5kZXggNDA1NjFmMWQxZmZjNGMyMzA2NGE0
NTNhNzk1MTA0YmYyYWI5NTIyNy4uMzc1MzI1ZDkyOGVlNTkzZDgyYmQ5MjgyODljNTdjMzA0Mjgy
ZGYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCkBA
IC0xMzIsMTYgKzEzMiwxNiBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxl
KCkKICAgICAgICAgLy8gSXRlbXMgaW4gdGhlIHBvcHVwIHdpbGwgbm90IHJlc3BlY3QgdGhlIENT
UyB0ZXh0LWFsaWduIGFuZCBkaXJlY3Rpb24gcHJvcGVydGllcywKICAgICAgICAgLy8gc28gd2Ug
bXVzdCBhZGp1c3Qgb3VyIG93biBzdHlsZSB0byBtYXRjaC4KICAgICAgICAgaW5uZXJTdHlsZS5z
ZXRUZXh0QWxpZ24oVGV4dEFsaWduTW9kZTo6TGVmdCk7Ci0gICAgICAgIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uID0gKG1fYnV0dG9uVGV4dCAmJiBtX2J1dHRvblRleHQtPnRleHQoKS5kZWZhdWx0
V3JpdGluZ0RpcmVjdGlvbigpID09IFVfUklHSFRfVE9fTEVGVCkgPyBUZXh0RGlyZWN0aW9uOjpS
VEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7CisgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24gPSAobV9idXR0b25UZXh0ICYmIG1fYnV0dG9uVGV4dC0+dGV4dCgpLmRlZmF1bHRXcml0
aW5nRGlyZWN0aW9uKCkgPT0gVV9SSUdIVF9UT19MRUZUKSA/IFBBTDo6VGV4dERpcmVjdGlvbjo6
UlRMIDogUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFI7CiAgICAgICAgIGlubmVyU3R5bGUuc2V0RGly
ZWN0aW9uKGRpcmVjdGlvbik7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB9IGVsc2Ug
aWYgKGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUoKS5zZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93
c01lbnVXcml0aW5nRGlyZWN0aW9uKCkpIHsKLSAgICAgICAgaW5uZXJTdHlsZS5zZXRUZXh0QWxp
Z24oc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBUZXh0QWxpZ25N
b2RlOjpMZWZ0IDogVGV4dEFsaWduTW9kZTo6UmlnaHQpOwotICAgICAgICBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbjsKLSAgICAgICAgRVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpOworICAgICAgICBp
bm5lclN0eWxlLnNldFRleHRBbGlnbihzdHlsZSgpLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERp
cmVjdGlvbjo6TFRSID8gVGV4dEFsaWduTW9kZTo6TGVmdCA6IFRleHRBbGlnbk1vZGU6OlJpZ2h0
KTsKKyAgICAgICAgUEFMOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICAgICAgUEFMOjpF
VW5pY29kZUJpZGkgdW5pY29kZUJpZGk7CiAgICAgICAgIGlmIChtdWx0aXBsZSgpICYmIHNlbGVj
dGVkT3B0aW9uQ291bnQoKnRoaXMpICE9IDEpIHsKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9ICht
X2J1dHRvblRleHQgJiYgbV9idXR0b25UZXh0LT50ZXh0KCkuZGVmYXVsdFdyaXRpbmdEaXJlY3Rp
b24oKSA9PSBVX1JJR0hUX1RPX0xFRlQpID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVj
dGlvbjo6TFRSOwotICAgICAgICAgICAgdW5pY29kZUJpZGkgPSBVQk5vcm1hbDsKKyAgICAgICAg
ICAgIGRpcmVjdGlvbiA9IChtX2J1dHRvblRleHQgJiYgbV9idXR0b25UZXh0LT50ZXh0KCkuZGVm
YXVsdFdyaXRpbmdEaXJlY3Rpb24oKSA9PSBVX1JJR0hUX1RPX0xFRlQpID8gUEFMOjpUZXh0RGly
ZWN0aW9uOjpSVEwgOiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKKyAgICAgICAgICAgIHVuaWNv
ZGVCaWRpID0gUEFMOjpFVW5pY29kZUJpZGk6OlVCTm9ybWFsOwogICAgICAgICB9IGVsc2UgaWYg
KG1fb3B0aW9uU3R5bGUpIHsKICAgICAgICAgICAgIGRpcmVjdGlvbiA9IG1fb3B0aW9uU3R5bGUt
PmRpcmVjdGlvbigpOwogICAgICAgICAgICAgdW5pY29kZUJpZGkgPSBtX29wdGlvblN0eWxlLT51
bmljb2RlQmlkaSgpOwpAQCAtNTc0LDcgKzU3NCw3IEBAIGNvbnN0IGludCBlbmRPZkxpbmVQYWRk
aW5nID0gMjsKIAogTGF5b3V0VW5pdCBSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQo
KSBjb25zdAogewotICAgIGlmICgoc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RQYXJ0IHx8IHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0
dG9uUGFydCkgJiYgc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpIHsK
KyAgICBpZiAoKHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCB8
fCBzdHlsZSgpLmVmZmVjdGl2ZUFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpICYm
IHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpIHsKICAgICAg
ICAgLy8gRm9yIHRoZXNlIGFwcGVhcmFuY2UgdmFsdWVzLCB0aGUgdGhlbWUgYXBwbGllcyBwYWRk
aW5nIHRvIGxlYXZlIHJvb20gZm9yIHRoZQogICAgICAgICAvLyBkcm9wLWRvd24gYnV0dG9uLiBC
dXQgbGVhdmluZyByb29tIGZvciB0aGUgYnV0dG9uIGluc2lkZSB0aGUgcG9wdXAgbWVudSBpdHNl
bGYKICAgICAgICAgLy8gbG9va3Mgc3RyYW5nZSwgc28gd2UgcmV0dXJuIGEgc21hbGwgZGVmYXVs
dCBwYWRkaW5nIHRvIGF2b2lkIGhhdmluZyBhIGxhcmdlIGVtcHR5CkBAIC01ODgsNyArNTg4LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJNZW51TGlzdDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAog
CiBMYXlvdXRVbml0IFJlbmRlck1lbnVMaXN0OjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAog
ewotICAgIGlmICgoc3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0
IHx8IHN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkg
JiYgc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgaWYgKChz
dHlsZSgpLmVmZmVjdGl2ZUFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgfHwgc3R5bGUoKS5l
ZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSAmJiBzdHlsZSgpLmRp
cmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICByZXR1cm4gZW5k
T2ZMaW5lUGFkZGluZzsKIAogICAgIHJldHVybiBwYWRkaW5nUmlnaHQoKSArIG1faW5uZXJCbG9j
ay0+cGFkZGluZ1JpZ2h0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCmluZGV4IGJmYWZiZTQ3YTc5M2RjNGVjOGU2Njg4MjNjYjY1ZWNlMzg4ZDdhNjUuLjZmZGU1
NzUwMDMwNTA4NTUzZWE0M2UwMDVmMTFkYTllMTM3YTY5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0yMzIwLDcgKzIzMjAsNyBAQCBhdXRvIFJlbmRl
ck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJpZXNJbnRlcm5hbChjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UpCiAgICAgICAgIGlmIChnZW9tZXRyaWVzW2pdLmJlaGF2aW9yKCkgPT0gU2Vs
ZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OlVzZUluZGl2aWR1YWxRdWFkcykKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBhdXRvJiBwcmV2aW91c1JlY3QgPSBnZW9tZXRyaWVzW2ogLSAx
XTsKLSAgICAgICAgYm9vbCBwcmV2aW91c1JlY3RNYXlOb3RSZWFjaFJpZ2h0RWRnZSA9IChwcmV2
aW91c1JlY3QuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSICYmIHByZXZpb3VzUmVj
dC5jb250YWluc0VuZCgpKSB8fCAocHJldmlvdXNSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJl
Y3Rpb246OlJUTCAmJiBwcmV2aW91c1JlY3QuY29udGFpbnNTdGFydCgpKTsKKyAgICAgICAgYm9v
bCBwcmV2aW91c1JlY3RNYXlOb3RSZWFjaFJpZ2h0RWRnZSA9IChwcmV2aW91c1JlY3QuZGlyZWN0
aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgJiYgcHJldmlvdXNSZWN0LmNvbnRhaW5z
RW5kKCkpIHx8IChwcmV2aW91c1JlY3QuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpSVEwgJiYgcHJldmlvdXNSZWN0LmNvbnRhaW5zU3RhcnQoKSk7CiAgICAgICAgIGlmIChwcmV2
aW91c1JlY3RNYXlOb3RSZWFjaFJpZ2h0RWRnZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBpbnQgYWRqdXN0ZWRXaWR0aCA9IGdlb21ldHJpZXNbal0ubG9naWNhbExlZnQoKSAtIHBy
ZXZpb3VzUmVjdC5sb2dpY2FsTGVmdCgpOwpAQCAtMjMzNywxMCArMjMzNywxMCBAQCBhdXRvIFJl
bmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvbkdlb21ldHJpZXNJbnRlcm5hbChjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHNlbGVj
dGlvbkdlb21ldHJ5LmJlaGF2aW9yKCkgPT0gU2VsZWN0aW9uUmVuZGVyaW5nQmVoYXZpb3I6OlVz
ZUluZGl2aWR1YWxRdWFkcykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2Vs
ZWN0aW9uR2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMICYmIHNlbGVj
dGlvbkdlb21ldHJ5LmlzRmlyc3RPbkxpbmUoKSkgeworICAgICAgICBpZiAoc2VsZWN0aW9uR2Vv
bWV0cnkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwgJiYgc2VsZWN0aW9u
R2VvbWV0cnkuaXNGaXJzdE9uTGluZSgpKSB7CiAgICAgICAgICAgICBzZWxlY3Rpb25HZW9tZXRy
eS5zZXRMb2dpY2FsV2lkdGgoc2VsZWN0aW9uR2VvbWV0cnkubG9naWNhbFdpZHRoKCkgKyBzZWxl
Y3Rpb25HZW9tZXRyeS5sb2dpY2FsTGVmdCgpIC0gc2VsZWN0aW9uR2VvbWV0cnkubWluWCgpKTsK
ICAgICAgICAgICAgIHNlbGVjdGlvbkdlb21ldHJ5LnNldExvZ2ljYWxMZWZ0KHNlbGVjdGlvbkdl
b21ldHJ5Lm1pblgoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uR2VvbWV0cnkuZGly
ZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSICYmIHNlbGVjdGlvbkdlb21ldHJ5LmlzTGFz
dE9uTGluZSgpKQorICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbkdlb21ldHJ5LmRpcmVjdGlv
bigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSICYmIHNlbGVjdGlvbkdlb21ldHJ5LmlzTGFz
dE9uTGluZSgpKQogICAgICAgICAgICAgc2VsZWN0aW9uR2VvbWV0cnkuc2V0TG9naWNhbFdpZHRo
KHNlbGVjdGlvbkdlb21ldHJ5Lm1heFgoKSAtIHNlbGVjdGlvbkdlb21ldHJ5LmxvZ2ljYWxMZWZ0
KCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1t
CmluZGV4IGQ3NWY1OWZlYzc1OGI4NDMwZWI0YzcwZDBiZDEzNzE1ZjNmNDBlZjIuLmE2ZWVjMTcx
M2YwNTk4YmVhN2FhOTI4MmFlMjljM2FlYmIwMDY2YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTcwNSw3ICs3MDUsNyBAQCBMZW5ndGhCb3ggUmVu
ZGVyVGhlbWVJT1M6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm94KGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgY29ucwogICAgIH0KIAogICAgIGlmIChzdHlsZS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkg
PT0gTWVudWxpc3RCdXR0b25QYXJ0KSB7Ci0gICAgICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9
PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OlJUTCkKICAgICAgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIHN0
YXRpY19jYXN0PGludD4ocGFkZGluZyArIHN0eWxlLmJvcmRlclRvcFdpZHRoKCkpIH07CiAgICAg
ICAgIHJldHVybiB7IDAsIHN0YXRpY19jYXN0PGludD4ocGFkZGluZyArIHN0eWxlLmJvcmRlclRv
cFdpZHRoKCkpLCAwLCAwIH07CiAgICAgfQpAQCAtODQ3LDcgKzg0Nyw3IEBAIHZvaWQgUmVuZGVy
VGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJCb3gm
IGJveCwgY29uc3QKICNlbmRpZgogCiAgICAgYXV0byYgc3R5bGUgPSBib3guc3R5bGUoKTsKLSAg
ICBib29sIGlzUlRMID0gc3R5bGUuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMOwor
ICAgIGJvb2wgaXNSVEwgPSBzdHlsZS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246
OlJUTDsKICAgICBmbG9hdCBib3JkZXJUb3BXaWR0aCA9IHN0eWxlLmJvcmRlclRvcFdpZHRoKCk7
CiAgICAgRmxvYXRSZWN0IGNsaXAocmVjdC54KCkgKyBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSwg
cmVjdC55KCkgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpLCByZWN0LndpZHRoKCkgLSBzdHlsZS5i
b3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSAtIHN0eWxlLmJvcmRlclRvcFdpZHRoKCkgLSBzdHlsZS5ib3JkZXJCb3R0b21XaWR0aCgpKTsK
ICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9y
bUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpp
bmRleCA5NjQ4NTYxMGFmYTAyYzFjZWI1MThhNTJlYjMyMDE3MTFiOThlNjA3Li4xMTEzNzE2MDhh
MDNkNjU0NGU3YzVlZWUyY2NjMTgzMGQ3ZTQ3NjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC0xNTQyLDcgKzE1NDIsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKGNvbnN0IFJlbmRlck9iamVjdCYg
bywgY29uc3QgUAogCiB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBib29sIGlzUlRMID0gcmVuZGVy
ZXIuc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgYm9vbCBp
c1JUTCA9IHJlbmRlcmVyLnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9u
OjpSVEw7CiAgICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHJlY3QueCgpICsgcmVuZGVyZXIu
c3R5bGUoKS5ib3JkZXJMZWZ0V2lkdGgoKSwKICAgICAgICAgcmVjdC55KCkgKyByZW5kZXJlci5z
dHlsZSgpLmJvcmRlclRvcFdpZHRoKCksCiAgICAgICAgIHJlY3Qud2lkdGgoKSAtIHJlbmRlcmVy
LnN0eWxlKCkuYm9yZGVyTGVmdFdpZHRoKCkgLSByZW5kZXJlci5zdHlsZSgpLmJvcmRlclJpZ2h0
V2lkdGgoKSwKQEAgLTE2NTAsNyArMTY1MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlKSBjCiBM
ZW5ndGhCb3ggUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm94KGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgU2V0dGluZ3MmKSBjb25zdAogewogICAgIGlmIChzdHls
ZS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KSB7Ci0gICAgICAgIGNvbnN0
IGludCogcGFkZGluZyA9IHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5
bGUpLCBzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpOworICAgICAgICBj
b25zdCBpbnQqIHBhZGRpbmcgPSBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250
KHN0eWxlKSwgc3R5bGUuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpOwog
ICAgICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KHBhZGRpbmdbdG9wUGFkZGluZ10gKiBz
dHlsZS5lZmZlY3RpdmVab29tKCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihwYWRk
aW5nW3JpZ2h0UGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpLAogICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihwYWRkaW5nW2JvdHRvbVBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZl
Wm9vbSgpKSwKQEAgLTE2NjEsNyArMTY2MSw3IEBAIExlbmd0aEJveCBSZW5kZXJUaGVtZU1hYzo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zCiAg
ICAgICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIChzdHlsZS5jb21wdXRl
ZEZvbnRQaXhlbFNpemUoKSAvIGJhc2VGb250U2l6ZSk7CiAgICAgICAgIGZsb2F0IHJpZ2h0UGFk
ZGluZyA9IGNlaWxmKGFycm93V2lkdGggKyAoYXJyb3dQYWRkaW5nQmVmb3JlICsgYXJyb3dQYWRk
aW5nQWZ0ZXIgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20o
KSk7CiAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAq
IHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09
IFRleHREaXJlY3Rpb246OlJUTCkKKyAgICAgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFBB
TDo6VGV4dERpcmVjdGlvbjo6UlRMKQogICAgICAgICAgICAgc3RkOjpzd2FwKHJpZ2h0UGFkZGlu
ZywgbGVmdFBhZGRpbmcpOwogICAgICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxl
ZFBvcHVwUGFkZGluZ1RvcCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSksCiAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KHJpZ2h0UGFkZGluZyksCkBAIC0xNzEyLDcgKzE3MTIsNyBAQCB2b2lk
IFJlbmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmpl
Y3QmIG8sIGNvbnN0IEludFNpegogICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9m
ZiB0aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8uCiAgICAgc2V0Q29udHJvbFNpemUo
cG9wdXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwgYnV0dG9uU2l6ZSwgby5zdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKSk7CiAKLSAgICBwb3B1cEJ1dHRvbi51c2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uID0gby5zdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5T
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAgcG9wdXBCdXR0b24udXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbiA9IG8uc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDog
TlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAKICAgICAvLyBVcGRh
dGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlQ2hlY2tlZFN0
YXRlKHBvcHVwQnV0dG9uLCBvKTsKQEAgLTIxMzAsNyArMjEzMCw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlckJveCYgYm94
LCBjb25zdCBQCiAgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gYWRqdXN0ZWRSZXN1bHRCdXR0
b25SZWN0KFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3Qoc25hcHBlZElu
dFJlY3QoaW5wdXRCb3guY29udGVudEJveFJlY3QoKSkpXSk7CiAgICAgLy8gQWRqdXN0IHBvc2l0
aW9uIGJhc2VkIG9uIHRoZSBjb250ZW50IGRpcmVjdGlvbi4KICAgICBmbG9hdCBhZGp1c3RlZFhQ
b3NpdGlvbjsKLSAgICBpZiAoYm94LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlv
bjo6UlRMKQorICAgIGlmIChib3guc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OlJUTCkKICAgICAgICAgYWRqdXN0ZWRYUG9zaXRpb24gPSBpbnB1dEJveC5jb250ZW50
Qm94UmVjdCgpLm1heFgoKSAtIGxvY2FsQm91bmRzLnNpemUoKS53aWR0aCgpOwogICAgIGVsc2UK
ICAgICAgICAgYWRqdXN0ZWRYUG9zaXRpb24gPSBpbnB1dEJveC5jb250ZW50Qm94UmVjdCgpLngo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCmluZGV4IDEx
MmJiMTk0NjE4N2FkNmRkY2U0OTIyZTgwYzFkNTQ3NWUwYzM0MTEuLmY3NWViMmEyZmE4NWE0NzUw
MzM2MzhhZmZkNGQ0NmFmZTUyNmQyNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0Qm94UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRCb3hQYWludGVyLmNwcApAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6
OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKCkKICAgICAgICAgICAgIGlmICghdGV4dEJv
eCgpLmlzSG9yaXpvbnRhbCgpKSB7CiAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxl
Y3Rpb25DbGlwT3V0UmVjdC5tb3ZlKDAsIGxvZ2ljYWxXaWR0aEJlZm9yZVJhbmdlKTsKICAgICAg
ICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0LnNldEhlaWdodChs
b2dpY2FsU2VsZWN0aW9uV2lkdGgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0Qm94KCku
ZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKSB7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRleHRCb3goKS5kaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OlJUTCkgewog
ICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QubW92ZShs
b2dpY2FsV2lkdGhBZnRlclJhbmdlLCAwKTsKICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlv
blNlbGVjdGlvbkNsaXBPdXRSZWN0LnNldFdpZHRoKGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCk7CiAg
ICAgICAgICAgICB9IGVsc2UgewpAQCAtNDM1LDkgKzQzNSw5IEBAIHZvaWQgVGV4dEJveFBhaW50
ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKCkKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBtaXJyb3JSVExTZWdtZW50KGZsb2F0IGxvZ2ljYWxXaWR0aCwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24sIGZsb2F0JiBzdGFydCwgZmxvYXQgd2lkdGgpCitzdGF0aWMgaW5saW5lIHZv
aWQgbWlycm9yUlRMU2VnbWVudChmbG9hdCBsb2dpY2FsV2lkdGgsIFBBTDo6VGV4dERpcmVjdGlv
biBkaXJlY3Rpb24sIGZsb2F0JiBzdGFydCwgZmxvYXQgd2lkdGgpCiB7Ci0gICAgaWYgKGRpcmVj
dGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgaWYgKGRpcmVjdGlvbiA9PSBQQUw6OlRl
eHREaXJlY3Rpb246OkxUUikKICAgICAgICAgcmV0dXJuOwogICAgIHN0YXJ0ID0gbG9naWNhbFdp
ZHRoIC0gd2lkdGggLSBzdGFydDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xp
bmUvQnJlYWtpbmdDb250ZXh0LmgKaW5kZXggYjAwN2NiOGYyOWQ3NWZiYWFmMmM4MjM0ODAzYjEx
NjE1MTgxZjk1ZS4uOWY0MWVmYTIyZGI4OWE0Y2ZhZGNlZTI5ODU3NDk1OThiY2I0YWI1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgKQEAg
LTI0Myw2ICsyNDMsMTUgQEAgaW5saW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0OjppbmNyZW1lbnQo
KQogICAgIG1fYXRTdGFydCA9IGZhbHNlOwogfQogCisvLyBXaGVuIGlnbm9yaW5nIHNwYWNlcywg
dGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBuZWVkIGxpbmUgYm94ZXMg
c3VjaCBhcyBSZW5kZXJJbmxpbmVzIG9yCisvLyBoYXJkIGxpbmUgYnJlYWtzIHRvIGVuc3VyZSB0
aGF0IHRoZXkncmUgbm90IGlnbm9yZWQuCitpbmxpbmUgdm9pZCBlbnN1cmVMaW5lQm94SW5zaWRl
SWdub3JlZFNwYWNlcyhMaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSYgc3RhdGUsIFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgTGVnYWN5SW5saW5lSXRlcmF0b3IgdHJhbnNpdGlv
bigwLCAmcmVuZGVyZXIsIDApOworICAgIHN0YXRlLnN0b3BJZ25vcmluZ1NwYWNlcyh0cmFuc2l0
aW9uKTsKKyAgICBzdGF0ZS5zdGFydElnbm9yaW5nU3BhY2VzKHRyYW5zaXRpb24pOworfQorCiBp
bmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUJSKFVzZWRDbGVhciYgdXNlZENsZWFy
KQogewogICAgIGlmIChmaXRzT25MaW5lT3JIYW5nc0F0RW5kKCkpIHsKQEAgLTI2NCw3ICsyNzMs
NyBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUJSKFVzZWRDbGVhciYgdXNl
ZENsZWFyKQogICAgICAgICAvLyBuZWVkIHRvIGNoZWNrIGZvciBmbG9hdHMgdG8gY2xlYXIgLSBz
byBpZiB3ZSdyZSBpZ25vcmluZyBzcGFjZXMsIHN0b3AgaWdub3JpbmcgdGhlbSBhbmQgYWRkIGEK
ICAgICAgICAgLy8gcnVuIGZvciB0aGlzIG9iamVjdC4KICAgICAgICAgaWYgKG1faWdub3JpbmdT
cGFjZXMgJiYgUmVuZGVyU3R5bGU6OnVzZWRDbGVhcihicikgIT0gVXNlZENsZWFyOjpOb25lKQot
ICAgICAgICAgICAgbV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94
SW5zaWRlSWdub3JlZFNwYWNlcyhicik7CisgICAgICAgICAgICBlbnN1cmVMaW5lQm94SW5zaWRl
SWdub3JlZFNwYWNlcyhtX2xpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLCBicik7CiAgICAg
ICAgIC8vIElmIHdlIHdlcmUgcHJlY2VkZWQgYnkgY29sbGFwc2luZyBzcGFjZSBhbmQgYXJlIGlu
IGEgcmlnaHQtYWxpZ25lZCBjb250YWluZXIgd2UgbmVlZCB0byBlbnN1cmUgdGhlIHNwYWNlIGdl
dHMKICAgICAgICAgLy8gY29sbGFwc2VkIGF3YXkgc28gdGhhdCBpdCBkb2Vzbid0IHB1c2ggdGhl
IHRleHQgb3V0IGZyb20gdGhlIGNvbnRhaW5lcidzIHJpZ2h0LWhhbmQgZWRnZS4KICAgICAgICAg
Ly8gRklYTUU6IERvIHRoaXMgcmVnYXJkbGVzcyBvZiB0aGUgY29udGFpbmVyJ3MgYWxpZ25tZW50
IC0gd2lsbCByZXF1aXJlIHJlYmFzZWxpbmluZyBhIGxvdCBvZiB0ZXN0IHJlc3VsdHMuCkBAIC0z
NDcsNyArMzU2LDcgQEAgaW5saW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVPdXRPZkZs
b3dQb3NpdGlvbmVkKFZlY3RvcjxSZW5kZXJCb3gqPiYgcG9zaXQKICAgICAvLyB0aGVuIHN0YXJ0
IGlnbm9yaW5nIHNwYWNlcyBhZ2Fpbi4KICAgICBpZiAoaXNJbmxpbmVUeXBlIHx8IGJveC5jb250
YWluZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICBpZiAobV9pZ25vcmluZ1NwYWNl
cykKLSAgICAgICAgICAgIG1fbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuZW5zdXJlTGlu
ZUJveEluc2lkZUlnbm9yZWRTcGFjZXMoYm94KTsKKyAgICAgICAgICAgIGVuc3VyZUxpbmVCb3hJ
bnNpZGVJZ25vcmVkU3BhY2VzKG1fbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUsIGJveCk7
CiAgICAgICAgIG1fdHJhaWxpbmdPYmplY3RzLmFwcGVuZEJveElmTmVlZGVkKGJveCk7CiAgICAg
fSBlbHNlCiAgICAgICAgIHBvc2l0aW9uZWRPYmplY3RzLmFwcGVuZCgmYm94KTsKQEAgLTQxNSw3
ICs0MjQsNyBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUVtcHR5SW5saW5l
KCkKICAgICAgICAgICAgIG1fbGluZUluZm8uc2V0RW1wdHkoZmFsc2UsICZtX2Jsb2NrLCAmbV93
aWR0aCk7CiAgICAgICAgIGlmIChtX2lnbm9yaW5nU3BhY2VzKSB7CiAgICAgICAgICAgICBtX3Ry
YWlsaW5nT2JqZWN0cy5jbGVhcigpOwotICAgICAgICAgICAgbV9saW5lV2hpdGVzcGFjZUNvbGxh
cHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcygqbV9jdXJyZW50LnJl
bmRlcmVyKCkpOworICAgICAgICAgICAgZW5zdXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMo
bV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSwgKm1fY3VycmVudC5yZW5kZXJlcigpKTsK
ICAgICAgICAgfSBlbHNlIGlmIChtX2Jsb2NrU3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYg
bV9yZXNvbHZlci5wb3NpdGlvbigpLnJlbmRlcmVyKCkgPT0gbV9jdXJyZW50LnJlbmRlcmVyKCkK
ICAgICAgICAgICAgICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdChtX2Js
b2NrLCBtX2N1cnJlbnQucmVuZGVyZXIoKSwgbV9saW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0
ZSkpIHsKICAgICAgICAgICAgIC8vIExpa2Ugd2l0aCBsaXN0IG1hcmtlcnMsIHdlIHN0YXJ0IGln
bm9yaW5nIHNwYWNlcyB0byBtYWtlIHN1cmUgdGhhdCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCmluZGV4IGJlMmZlYTE1NDVhZmE0
YTY1NTI2YjlhZjY3YmI0ODliMzQ0MWI2NzUuLjU4MDAwZWVjNWE0NGVlNTliNjBkN2JlYTAyMmFi
OWE1NmQwYjVlNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL1Ry
YWlsaW5nT2JqZWN0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJh
aWxpbmdPYmplY3RzLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIFRyYWlsaW5nT2JqZWN0czo6
dXBkYXRlV2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uc0ZvclRyYWlsaW5nQm94ZXMoTGlu
ZQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYm94ZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIGlmIChjdXJyZW50VHJhbnNpdGlvbiA+PSBsaW5lV2hpdGVzcGFjZUNvbGxh
cHNpbmdTdGF0ZS5udW1UcmFuc2l0aW9ucygpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgZG9u
J3QgaGF2ZSBhIHRyYW5zaXRpb24gZm9yIHRoaXMgYm94IHlldC4KLSAgICAgICAgICAgICAgICBs
aW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNw
YWNlcyhtX2JveGVzW2ldKTsKKyAgICAgICAgICAgICAgICBlbnN1cmVMaW5lQm94SW5zaWRlSWdu
b3JlZFNwYWNlcyhsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSwgbV9ib3hlc1tpXSk7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChsaW5lV2hpdGVzcGFj
ZUNvbGxhcHNpbmdTdGF0ZS50cmFuc2l0aW9ucygpW2N1cnJlbnRUcmFuc2l0aW9uXS5yZW5kZXJl
cigpID09ICYobV9ib3hlc1tpXS5nZXQoKSkpOwogICAgICAgICAgICAgICAgIEFTU0VSVChsaW5l
V2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS50cmFuc2l0aW9ucygpW2N1cnJlbnRUcmFuc2l0aW9u
ICsgMV0ucmVuZGVyZXIoKSA9PSAmKG1fYm94ZXNbaV0uZ2V0KCkpKTsKQEAgLTY2LDcgKzY2LDcg
QEAgdm9pZCBUcmFpbGluZ09iamVjdHM6OnVwZGF0ZVdoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNp
dGlvbnNGb3JUcmFpbGluZ0JveGVzKExpbmUKICAgICAgICAgTGVnYWN5SW5saW5lSXRlcmF0b3Ig
ZW5kTWlkKDAsIG1fd2hpdGVzcGFjZSwgcG9zKTsKICAgICAgICAgbGluZVdoaXRlc3BhY2VDb2xs
YXBzaW5nU3RhdGUuc3RhcnRJZ25vcmluZ1NwYWNlcyhlbmRNaWQpOwogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fYm94ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBsaW5lV2hp
dGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5lbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNlcyht
X2JveGVzW2ldKTsKKyAgICAgICAgICAgIGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2Vz
KGxpbmVXaGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlLCBtX2JveGVzW2ldKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0
cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmgKaW5k
ZXggMzZlYTNiYjdlOGU4MmIyNTJkZDE1MGEzMDY3YmE4ZDA3ZTQ3N2MyYy4uYzJiZTkzYjU1NDY2
NDY0MTA3MjZlOGUyNGUwMDg0Y2IxMzUxOGQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmgKQEAgLTI2LDYgKzI2LDEyIEBACiAKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKK25hbWVzcGFjZSBQQUwgewordGVtcGxhdGUgPGNsYXNzIEl0
ZXJhdG9yLCBjbGFzcyBSdW4+IGNsYXNzIEJpZGlSZXNvbHZlcjsKK3RlbXBsYXRlIDxjbGFzcyBJ
dGVyYXRvciwgY2xhc3MgUnVuLCBjbGFzcyBJc29sYXRlUnVuPiBjbGFzcyBCaWRpUmVzb2x2ZXJX
aXRoSXNvbGF0ZTsKK3RlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4gY2xhc3MgV2hpdGVzcGFjZUNv
bGxhcHNpbmdTdGF0ZTsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMZWdhY3lJ
bmxpbmVJdGVyYXRvcjsKQEAgLTM1LDExICs0MSw4IEBAIGNsYXNzIFJlbmRlclRleHQ7CiBzdHJ1
Y3QgQmlkaVJ1bjsKIHN0cnVjdCBCaWRpSXNvbGF0ZWRSdW47CiAKLXRlbXBsYXRlIDxjbGFzcyBJ
dGVyYXRvciwgY2xhc3MgUnVuPiBjbGFzcyBCaWRpUmVzb2x2ZXI7Ci10ZW1wbGF0ZSA8Y2xhc3Mg
SXRlcmF0b3IsIGNsYXNzIFJ1biwgY2xhc3MgSXNvbGF0ZVJ1bj4gY2xhc3MgQmlkaVJlc29sdmVy
V2l0aElzb2xhdGU7Ci10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+IGNsYXNzIFdoaXRlc3BhY2VD
b2xsYXBzaW5nU3RhdGU7Ci10eXBlZGVmIEJpZGlSZXNvbHZlcldpdGhJc29sYXRlPExlZ2FjeUlu
bGluZUl0ZXJhdG9yLCBCaWRpUnVuLCBCaWRpSXNvbGF0ZWRSdW4+IElubGluZUJpZGlSZXNvbHZl
cjsKLXR5cGVkZWYgV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZTxMZWdhY3lJbmxpbmVJdGVyYXRv
cj4gTGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU7Cit1c2luZyBJbmxpbmVCaWRpUmVzb2x2
ZXIgPSBQQUw6OkJpZGlSZXNvbHZlcldpdGhJc29sYXRlPExlZ2FjeUlubGluZUl0ZXJhdG9yLCBC
aWRpUnVuLCBCaWRpSXNvbGF0ZWRSdW4+OwordXNpbmcgTGluZVdoaXRlc3BhY2VDb2xsYXBzaW5n
U3RhdGUgPSBQQUw6OldoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGU8TGVnYWN5SW5saW5lSXRlcmF0
b3I+OwogCiBjbGFzcyBUcmFpbGluZ09iamVjdHMgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAppbmRleCBl
ZDhmMjBmOTg1YmFhMjU0NzQ4NDFiMjY4YTQ1NDk3OTY0ZWYyZWJlLi5iMmRiNDhjZGI4NjM1OGNj
OTQyZGMxYTdjNzk2NjlkNmU4N2U2NzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApAQCAtODksNyArODksNyBAQCBM
YXlvdXRVbml0IFJlbmRlck1hdGhNTEJsb2NrOjptYXRoQXhpc0hlaWdodCgpIGNvbnN0CiAKIExh
eW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6Om1pcnJvcklmTmVlZGVkKExheW91dFVuaXQgaG9y
aXpvbnRhbE9mZnNldCwgTGF5b3V0VW5pdCBib3hXaWR0aCkgY29uc3QKIHsKLSAgICBpZiAoc3R5
bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgaWYgKHN0eWxlKCku
ZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgIHJldHVybiBs
b2dpY2FsV2lkdGgoKSAtIGJveFdpZHRoIC0gaG9yaXpvbnRhbE9mZnNldDsKIAogICAgIHJldHVy
biBob3Jpem9udGFsT2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAppbmRleCBhYTFmZTU1MmExODNhYWQz
MjJiY2IzNGQxMDhmZTFhYWMxMzM1MTUwLi5hYTM5NGJlMjRhMTVlYTg1ZDhkZWU5MTVmMzJlNjY2
MTcyNWYyNjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcApAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5
b3V0VW5pdCBwYWdlTG9nCiAgICAgICAgIHNldExvZ2ljYWxXaWR0aCh3aWR0aCk7CiAKICAgICAg
ICAgLy8gV2UgdGhlbiBtb3ZlIHRoZSBjaGlsZHJlbiB0byB0YWtlIHNwYWNpbmcgaW50byBhY2Nv
dW50LgotICAgICAgICBMYXlvdXRQb2ludCBob3Jpem9udGFsU2hpZnQoc3R5bGUoKS5kaXJlY3Rp
b24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBsZWFkaW5nU3BhY2VWYWx1ZSA6IC1sZWFkaW5n
U3BhY2VWYWx1ZSwgMF9sdSk7CisgICAgICAgIExheW91dFBvaW50IGhvcml6b250YWxTaGlmdChz
dHlsZSgpLmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gbGVhZGluZ1Nw
YWNlVmFsdWUgOiAtbGVhZGluZ1NwYWNlVmFsdWUsIDBfbHUpOwogICAgICAgICBmb3IgKGF1dG8q
IGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmdCb3goKSkKICAgICAgICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+bG9jYXRpb24o
KSArIGhvcml6b250YWxTaGlmdCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggMjhmZTM5YTk2YTA2Y2E2YWJkZmFlZGZkZDA0
MzM5Y2M3ZjI5MjFhMy4uNDRlZDQ4NmU3NDY1NzRkOGM3NWRkYzhmNjlhNGIxM2Q5MTg2YzViOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBA
IC0xODAsNyArMTgwLDcgQEAgUmVuZGVyU3R5bGU6OlJlbmRlclN0eWxlKENyZWF0ZURlZmF1bHRT
dHlsZVRhZykKICAgICBtX25vbkluaGVyaXRlZEZsYWdzLnZlcnRpY2FsQWxpZ24gPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaW5pdGlhbFZlcnRpY2FsQWxpZ24oKSk7CiAgICAgbV9ub25Jbmhlcml0
ZWRGbGFncy5jbGVhciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbml0aWFsQ2xlYXIoKSk7CiAg
ICAgbV9ub25Jbmhlcml0ZWRGbGFncy5wb3NpdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihp
bml0aWFsUG9zaXRpb24oKSk7Ci0gICAgbV9ub25Jbmhlcml0ZWRGbGFncy51bmljb2RlQmlkaSA9
IGluaXRpYWxVbmljb2RlQmlkaSgpOworICAgIG1fbm9uSW5oZXJpdGVkRmxhZ3MudW5pY29kZUJp
ZGkgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5pdGlhbFVuaWNvZGVCaWRpKCkpOwogICAgIG1f
bm9uSW5oZXJpdGVkRmxhZ3MuZmxvYXRpbmcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5pdGlh
bEZsb2F0aW5nKCkpOwogICAgIG1fbm9uSW5oZXJpdGVkRmxhZ3MudGFibGVMYXlvdXQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaW5pdGlhbFRhYmxlTGF5b3V0KCkpOwogICAgIG1fbm9uSW5oZXJp
dGVkRmxhZ3MuaGFzRXhwbGljaXRseVNldEJvcmRlclJhZGl1cyA9IGZhbHNlOwpAQCAtMjgwNiw3
ICsyODA2LDcgQEAgVXNlZENsZWFyIFJlbmRlclN0eWxlOjp1c2VkQ2xlYXIoY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlcikKICAgICBjYXNlIENsZWFyOjpJbmxpbmVTdGFydDoKICAgICBjYXNl
IENsZWFyOjpJbmxpbmVFbmQ6CiAgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrRGlyZWN0aW9u
ID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuZGlyZWN0aW9uKCk7Ci0gICAg
ICAgIGlmIChjb250YWluaW5nQmxvY2tEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQor
ICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrRGlyZWN0aW9uID09IFBBTDo6VGV4dERpcmVjdGlv
bjo6UlRMKQogICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVkVmFsdWUgPT0gQ2xlYXI6OklubGlu
ZVN0YXJ0ID8gVXNlZENsZWFyOjpSaWdodCA6IFVzZWRDbGVhcjo6TGVmdDsKICAgICAgICAgcmV0
dXJuIGNvbXB1dGVkVmFsdWUgPT0gQ2xlYXI6OklubGluZVN0YXJ0ID8gVXNlZENsZWFyOjpMZWZ0
IDogVXNlZENsZWFyOjpSaWdodDsKICAgICB9CkBAIC0yODI3LDcgKzI4MjcsNyBAQCBVc2VkRmxv
YXQgUmVuZGVyU3R5bGU6OnVzZWRGbG9hdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQog
ICAgIGNhc2UgRmxvYXQ6OklubGluZVN0YXJ0OgogICAgIGNhc2UgRmxvYXQ6OklubGluZUVuZDoK
ICAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tEaXJlY3Rpb24gPSByZW5kZXJlci5jb250YWlu
aW5nQmxvY2soKS0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKLSAgICAgICAgaWYgKGNvbnRhaW5pbmdC
bG9ja0RpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGlmIChjb250YWlu
aW5nQmxvY2tEaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpCiAgICAgICAgICAg
ICByZXR1cm4gY29tcHV0ZWRWYWx1ZSA9PSBGbG9hdDo6SW5saW5lU3RhcnQgPyBVc2VkRmxvYXQ6
OlJpZ2h0IDogVXNlZEZsb2F0OjpMZWZ0OwogICAgICAgICByZXR1cm4gY29tcHV0ZWRWYWx1ZSA9
PSBGbG9hdDo6SW5saW5lU3RhcnQgPyBVc2VkRmxvYXQ6OkxlZnQgOiBVc2VkRmxvYXQ6OlJpZ2h0
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgK
aW5kZXggMjcyYTE5NmVlY2ZiZGUwMDhhOTk4NGUwYTQ1MjkzMmE5MDBlOTIyOC4uNTExYmZiYmFh
ODY2NTY1YmVhM2Q0NDdjMzgwNDVmNjIyMmE2MDUwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTcwLDggKzcwLDggQEAKICNpbmNsdWRlICJU
b3VjaEFjdGlvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJVbmljb2RlQmlkaS5o
IgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxwYWwvdGV4dC9Vbmljb2RlQmlkaS5oPgog
I2luY2x1ZGUgPHd0Zi9EYXRhUmVmLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTM0OCw3ICszNDgsNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgTGVuZ3RoQm94JiBjbGlwKCkgY29uc3QgeyByZXR1cm4gbV92aXN1YWxEYXRhLT5j
bGlwOyB9CiAgICAgYm9vbCBoYXNDbGlwKCkgY29uc3QgeyByZXR1cm4gbV92aXN1YWxEYXRhLT5o
YXNDbGlwOyB9CiAKLSAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxFVW5pY29kZUJpZGk+KG1fbm9uSW5oZXJpdGVkRmxhZ3MudW5pY29kZUJp
ZGkpOyB9CisgICAgUEFMOjpFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxQQUw6OkVVbmljb2RlQmlkaT4obV9ub25Jbmhlcml0ZWRGbGFncy51bmlj
b2RlQmlkaSk7IH0KIAogICAgIENsZWFyIGNsZWFyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2xlYXI+KG1fbm9uSW5oZXJpdGVkRmxhZ3MuY2xlYXIpOyB9CiAgICAgc3RhdGljIFVzZWRD
bGVhciB1c2VkQ2xlYXIoY29uc3QgUmVuZGVyT2JqZWN0Jik7CkBAIC0zOTQsOCArMzk0LDggQEAg
cHVibGljOgogICAgIAogICAgIFRleHRab29tIHRleHRab29tKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VGV4dFpvb20+KG1fcmFyZUluaGVyaXRlZERhdGEtPnRleHRab29tKTsgfQogCi0g
ICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0RGlyZWN0aW9uPihtX2luaGVyaXRlZEZsYWdzLmRpcmVjdGlvbik7IH0KLSAgICBib29sIGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkaXJlY3Rpb24oKSA9PSBUZXh0
RGlyZWN0aW9uOjpMVFI7IH0KKyAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UEFMOjpUZXh0RGlyZWN0aW9uPihtX2luaGVyaXRlZEZs
YWdzLmRpcmVjdGlvbik7IH0KKyAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBkaXJlY3Rpb24oKSA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsgfQogICAg
IGJvb2wgaGFzRXhwbGljaXRseVNldERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbm9uSW5o
ZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRseVNldERpcmVjdGlvbjsgfQogCiAgICAgY29uc3QgTGVu
Z3RoJiBzcGVjaWZpZWRMaW5lSGVpZ2h0KCkgY29uc3Q7CkBAIC05NjUsNyArOTY1LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0Q2xpcChMZW5ndGgmJiB0b3AsIExlbmd0aCYmIHJpZ2h0LCBMZW5n
dGgmJiBib3R0b20sIExlbmd0aCYmIGxlZnQpOwogICAgIHZvaWQgc2V0Q2xpcChMZW5ndGhCb3gm
JiBib3gpIHsgU0VUX1ZBUihtX3Zpc3VhbERhdGEsIGNsaXAsIFdURk1vdmUoYm94KSk7IH0KIAot
ICAgIHZvaWQgc2V0VW5pY29kZUJpZGkoRVVuaWNvZGVCaWRpIHYpIHsgbV9ub25Jbmhlcml0ZWRG
bGFncy51bmljb2RlQmlkaSA9IHY7IH0KKyAgICB2b2lkIHNldFVuaWNvZGVCaWRpKFBBTDo6RVVu
aWNvZGVCaWRpIHYpIHsgbV9ub25Jbmhlcml0ZWRGbGFncy51bmljb2RlQmlkaSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPih2KTsgfQogCiAgICAgdm9pZCBzZXRDbGVhcihDbGVhciB2KSB7IG1fbm9u
SW5oZXJpdGVkRmxhZ3MuY2xlYXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odik7IH0KICAgICB2
b2lkIHNldFRhYmxlTGF5b3V0KFRhYmxlTGF5b3V0VHlwZSB2KSB7IG1fbm9uSW5oZXJpdGVkRmxh
Z3MudGFibGVMYXlvdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odik7IH0KQEAgLTk5Myw3ICs5
OTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oVGV4dFVu
ZGVybGluZVBvc2l0aW9uIHBvc2l0aW9uKSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwg
dGV4dFVuZGVybGluZVBvc2l0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pKTsg
fQogICAgIHZvaWQgc2V0VGV4dFVuZGVybGluZU9mZnNldChUZXh0VW5kZXJsaW5lT2Zmc2V0IHRl
eHRVbmRlcmxpbmVPZmZzZXQpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0VW5k
ZXJsaW5lT2Zmc2V0LCB0ZXh0VW5kZXJsaW5lT2Zmc2V0KTsgfQogICAgIHZvaWQgc2V0VGV4dERl
Y29yYXRpb25UaGlja25lc3MoVGV4dERlY29yYXRpb25UaGlja25lc3MgdGV4dERlY29yYXRpb25U
aGlja25lc3MpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0RGVjb3JhdGlvblRo
aWNrbmVzcywgdGV4dERlY29yYXRpb25UaGlja25lc3MpOyB9Ci0gICAgdm9pZCBzZXREaXJlY3Rp
b24oVGV4dERpcmVjdGlvbiB2KSB7IG1faW5oZXJpdGVkRmxhZ3MuZGlyZWN0aW9uID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHYpOyB9CisgICAgdm9pZCBzZXREaXJlY3Rpb24oUEFMOjpUZXh0RGly
ZWN0aW9uIHYpIHsgbV9pbmhlcml0ZWRGbGFncy5kaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4odik7IH0KICAgICB2b2lkIHNldEhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb24oYm9vbCB2
KSB7IG1fbm9uSW5oZXJpdGVkRmxhZ3MuaGFzRXhwbGljaXRseVNldERpcmVjdGlvbiA9IHY7IH0K
ICAgICB2b2lkIHNldExpbmVIZWlnaHQoTGVuZ3RoJiYpOwogICAgIGJvb2wgc2V0Wm9vbShmbG9h
dCk7CkBAIC0xNTU5LDcgKzE1NTksNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgQ2xlYXIgaW5p
dGlhbENsZWFyKCkgeyByZXR1cm4gQ2xlYXI6Ok5vbmU7IH0KICAgICBzdGF0aWMgRGlzcGxheVR5
cGUgaW5pdGlhbERpc3BsYXkoKSB7IHJldHVybiBEaXNwbGF5VHlwZTo6SW5saW5lOyB9Ci0gICAg
c3RhdGljIEVVbmljb2RlQmlkaSBpbml0aWFsVW5pY29kZUJpZGkoKSB7IHJldHVybiBVQk5vcm1h
bDsgfQorICAgIHN0YXRpYyBQQUw6OkVVbmljb2RlQmlkaSBpbml0aWFsVW5pY29kZUJpZGkoKSB7
IHJldHVybiBQQUw6OkVVbmljb2RlQmlkaTo6VUJOb3JtYWw7IH0KICAgICBzdGF0aWMgUG9zaXRp
b25UeXBlIGluaXRpYWxQb3NpdGlvbigpIHsgcmV0dXJuIFBvc2l0aW9uVHlwZTo6U3RhdGljOyB9
CiAgICAgc3RhdGljIFZlcnRpY2FsQWxpZ24gaW5pdGlhbFZlcnRpY2FsQWxpZ24oKSB7IHJldHVy
biBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTsgfQogICAgIHN0YXRpYyBGbG9hdCBpbml0aWFsRmxv
YXRpbmcoKSB7IHJldHVybiBGbG9hdDo6Tm9uZTsgfQpAQCAtMTU3NSw3ICsxNTc1LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBDYXB0aW9uU2lkZSBpbml0aWFsQ2FwdGlvblNpZGUoKSB7IHJldHVy
biBDYXB0aW9uU2lkZTo6VG9wOyB9CiAgICAgc3RhdGljIENvbHVtbkF4aXMgaW5pdGlhbENvbHVt
bkF4aXMoKSB7IHJldHVybiBDb2x1bW5BeGlzOjpBdXRvOyB9CiAgICAgc3RhdGljIENvbHVtblBy
b2dyZXNzaW9uIGluaXRpYWxDb2x1bW5Qcm9ncmVzc2lvbigpIHsgcmV0dXJuIENvbHVtblByb2dy
ZXNzaW9uOjpOb3JtYWw7IH0KLSAgICBzdGF0aWMgVGV4dERpcmVjdGlvbiBpbml0aWFsRGlyZWN0
aW9uKCkgeyByZXR1cm4gVGV4dERpcmVjdGlvbjo6TFRSOyB9CisgICAgc3RhdGljIFBBTDo6VGV4
dERpcmVjdGlvbiBpbml0aWFsRGlyZWN0aW9uKCkgeyByZXR1cm4gUEFMOjpUZXh0RGlyZWN0aW9u
OjpMVFI7IH0KICAgICBzdGF0aWMgV3JpdGluZ01vZGUgaW5pdGlhbFdyaXRpbmdNb2RlKCkgeyBy
ZXR1cm4gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOyB9CiAgICAgc3RhdGljIFRleHRDb21iaW5l
IGluaXRpYWxUZXh0Q29tYmluZSgpIHsgcmV0dXJuIFRleHRDb21iaW5lOjpOb25lOyB9CiAgICAg
c3RhdGljIFRleHRPcmllbnRhdGlvbiBpbml0aWFsVGV4dE9yaWVudGF0aW9uKCkgeyByZXR1cm4g
VGV4dE9yaWVudGF0aW9uOjpNaXhlZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvRWxlbWVu
dFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IGZlZmE0ODVjYWZiZjRiYmM4NGJlOTVmNDU5YTc5OWUy
NzY4ZDY1ZjUuLjczNmIyMGRhNDUyNTc5MTIwY2U3YzJiMGQxYzI1NjQ5NzA5NjA1YjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKQEAgLTU0MSw3
ICs1NDEsNyBAQCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFJ1bGVzKGJvb2wg
bWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzLCBib29sIGluYwogICAgICAgICBpZiAoaXM8SFRNTEVs
ZW1lbnQ+KHN0eWxlZEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBib29sIGlzQXV0bzsKICAgICAg
ICAgICAgIGF1dG8gdGV4dERpcmVjdGlvbiA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihzdHlsZWRF
bGVtZW50KS5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOwotICAg
ICAgICAgICAgYXV0byYgcHJvcGVydGllcyA9IHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlv
bjo6TFRSID8gbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlv
bigpOworICAgICAgICAgICAgYXV0byYgcHJvcGVydGllcyA9IHRleHREaXJlY3Rpb24gPT0gUEFM
OjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRv
TGVmdERlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAgICAg
ICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHsgJnByb3BlcnRpZXMgfSwgRGVjbGFyYXRpb25Pcmln
aW46OkF1dGhvcik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1BhZ2VSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29s
bGVjdG9yLmNwcAppbmRleCAyMjk5ZjhjNjM3OWI1MDk0OTJhMWExZmZhNTIzMDZhMWFhMTY4OWI0
Li4yOGIyYzQ3ODgxOTU4OTNmNDY2YzIwNmRkMTRjZTVlNGM3N2Q0YjAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBj
b25zdCBTdHlsZVJ1bGVQYWdlCiAKIGJvb2wgUGFnZVJ1bGVDb2xsZWN0b3I6OmlzTGVmdFBhZ2Uo
aW50IHBhZ2VJbmRleCkgY29uc3QKIHsKLSAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IG1fcm9v
dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgYm9vbCBpc0ZpcnN0UGFnZUxl
ZnQgPSBtX3Jvb3REaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAgICAgcmV0
dXJuIChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5oCmluZGV4IGU0NTJjNzQ0YTYwNGI0
ZTI3NDExN2Y1NmE3ZGM5MTAxNmY3YjhlNjUuLjVlNGNmMGI1ZDBjOTBmNTVmM2E0MGVhODE5MDVi
ZjdiZDhmY2Y2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29s
bGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuaApA
QCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgU3R5bGUgewogCiBjbGFzcyBQYWdlUnVsZUNvbGxl
Y3RvciB7CiBwdWJsaWM6Ci0gICAgUGFnZVJ1bGVDb2xsZWN0b3IoU2NvcGVSdWxlU2V0cyYgcnVs
ZVNldHMsIFRleHREaXJlY3Rpb24gcm9vdERpcmVjdGlvbikKKyAgICBQYWdlUnVsZUNvbGxlY3Rv
cihTY29wZVJ1bGVTZXRzJiBydWxlU2V0cywgUEFMOjpUZXh0RGlyZWN0aW9uIHJvb3REaXJlY3Rp
b24pCiAgICAgICAgIDogbV9ydWxlU2V0cyhydWxlU2V0cykKICAgICAgICAgLCBtX3Jvb3REaXJl
Y3Rpb24ocm9vdERpcmVjdGlvbikKICAgICB7IH0KQEAgLTUxLDcgKzUxLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBt
YXRjaGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHJ1bGVzLCBib29sIGlz
TGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogCiAg
ICAgU2NvcGVSdWxlU2V0cyYgbV9ydWxlU2V0czsKLSAgICBUZXh0RGlyZWN0aW9uIG1fcm9vdERp
cmVjdGlvbjsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gbV9yb290RGlyZWN0aW9uOwogCiAgICAg
TWF0Y2hSZXN1bHQgbV9yZXN1bHQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvUHJvcGVydHlDYXNjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2Nh
ZGUuaAppbmRleCA1MDY0Zjc4MWIzNGU3MDY1ODQwMTMwMjVmOGI5NWVjNjgxYTc2ODRhLi5kYmJl
ZDQxZmM3NGRjMGJjY2FkMzU1OWY3MDIyMzczYTVjOWRmNzYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9Qcm9wZXJ0eUNhc2NhZGUuaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBJ
bmNsdWRlZFByb3BlcnRpZXMgeyBBbGwsIEluaGVyaXRlZE9ubHkgfTsKIAogICAgIHN0cnVjdCBE
aXJlY3Rpb24gewotICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb247CisgICAgICAg
IFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uOwogICAgICAgICBXcml0aW5nTW9kZSB3
cml0aW5nTW9kZTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFsU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0
aW5ncy5oCmluZGV4IGYxYTdlMjIxMTIwZTcxYTk2OTkxYjMyMzNhMzg1NDMwMzE4OWQ1YjAuLmY5
OGNjOWEzMDgyNzhjMTQ5NWU2YTlhNmVjYWIyYTJlOTUxNjhmZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICB1c2luZyBVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5ID0gV2ViQ29yZTo6VXNlckludGVy
ZmFjZURpcmVjdGlvblBvbGljeTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRVc2VySW50ZXJm
YWNlRGlyZWN0aW9uUG9saWN5KFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3kpOwogCi0gICAg
dXNpbmcgU3lzdGVtTGF5b3V0RGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbjsKKyAgICB1c2luZyBT
eXN0ZW1MYXlvdXREaXJlY3Rpb24gPSBQQUw6OlRleHREaXJlY3Rpb247CiAgICAgRXhjZXB0aW9u
T3I8dm9pZD4gc2V0U3lzdGVtTGF5b3V0RGlyZWN0aW9uKFN5c3RlbUxheW91dERpcmVjdGlvbik7
CiAKICAgICB1c2luZyBGb250TG9hZFRpbWluZ092ZXJyaWRlID0gV2ViQ29yZTo6Rm9udExvYWRU
aW1pbmdPdmVycmlkZTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwcml2YXRlOgogICAgICAgICBXZWJD
b3JlOjpFZGl0aW5nQmVoYXZpb3JUeXBlIG1fb3JpZ2luYWxFZGl0aW5nQmVoYXZpb3I7CiAgICAg
ICAgIFdlYkNvcmU6OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBtX3N0b3JhZ2VCbG9ja2luZ1BvbGlj
eTsKICAgICAgICAgV2ViQ29yZTo6VXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeSBtX3VzZXJJ
bnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3k7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gbV9zeXN0ZW1M
YXlvdXREaXJlY3Rpb247CisgICAgICAgIFBBTDo6VGV4dERpcmVjdGlvbiBtX3N5c3RlbUxheW91
dERpcmVjdGlvbjsKICAgICAgICAgV2ViQ29yZTo6UERGSW1hZ2VDYWNoaW5nUG9saWN5IG1fcGRm
SW1hZ2VDYWNoaW5nUG9saWN5OwogICAgICAgICBXZWJDb3JlOjpGb3JjZWRBY2Nlc3NpYmlsaXR5
VmFsdWUgbV9mb3JjZWRDb2xvcnNBcmVJbnZlcnRlZEFjY2Vzc2liaWxpdHlWYWx1ZTsKICAgICAg
ICAgV2ViQ29yZTo6Rm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlIG1fZm9yY2VkRGlzcGxheUlzTW9u
b2Nocm9tZUFjY2Vzc2liaWxpdHlWYWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAppbmRleCAzYzI3NGM1MDYyMzA4ZWVjZTE1ZDdmYWY3ZGUxNTcyMjU4Y2Q0YTRkLi5lODcyOWFl
MDU1ZmIwMzdjZjI5MGEyOTc2NWU3YWZmN2NlMDJlMzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCkBAIC0zOTA5LDcgKzM5MDksNyBAQCBTdHJpbmcgSW50ZXJuYWxzOjp0b29s
VGlwRnJvbUVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBIaXRUZXN0UmVz
dWx0IHJlc3VsdDsKICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKCZlbGVtZW50KTsKLSAgICBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwog
ICAgIHJldHVybiByZXN1bHQudGl0bGUoZGlyZWN0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggYzg5ODY4N2IyMjZjY2U0
YjRmM2I4YjFhODVjYmVjNzk1OGI2N2FiNi4uYTBkM2EwODlhY2ViNDBhYjY4ZmJhNjI3NWMxOWRi
MzNlNDI0OTA4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwCkBAIC0xMzE2LDcgKzEzMTYsNyBAQCBzdGQ6Om9wdGlvbmFsPFNlbGVjdGlvbkdl
b21ldHJ5PiBBcmd1bWVudENvZGVyPFNlbGVjdGlvbkdlb21ldHJ5Pjo6ZGVjb2RlKERlY29kZQog
ICAgIHVpbnQzMl90IGRpcmVjdGlvbjsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRpcmVjdGlv
bikpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgc2VsZWN0aW9uR2VvbWV0cnku
c2V0RGlyZWN0aW9uKChUZXh0RGlyZWN0aW9uKWRpcmVjdGlvbik7CisgICAgc2VsZWN0aW9uR2Vv
bWV0cnkuc2V0RGlyZWN0aW9uKChQQUw6OlRleHREaXJlY3Rpb24pZGlyZWN0aW9uKTsKIAogICAg
IGludCBpbnRWYWx1ZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGludFZhbHVlKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0uY3BwCmluZGV4IGYwMDQ1NGViNzI5NjM3MDBjMTIzY2Jk
MTQ0ODZlM2YyOWFmMzhkMDIuLmMwMjk5Yzc3ZWMzZWU2MTcwOTk1NzkzOTU0MmE2MTEwOTUzYTI0
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUG9wdXBJdGVtLmNwcApAQCAtMzMsNyArMzMsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViUG9wdXBJdGVtOjpXZWJQb3B1cEl0ZW0oKQogICAg
IDogbV90eXBlKFR5cGU6Okl0ZW0pCi0gICAgLCBtX3RleHREaXJlY3Rpb24oV2ViQ29yZTo6VGV4
dERpcmVjdGlvbjo6TFRSKQorICAgICwgbV90ZXh0RGlyZWN0aW9uKFBBTDo6VGV4dERpcmVjdGlv
bjo6TFRSKQogICAgICwgbV9oYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUoZmFsc2UpCiAgICAgLCBt
X2lzRW5hYmxlZCh0cnVlKQogICAgICwgbV9pc1NlbGVjdGVkKGZhbHNlKQpAQCAtNDIsNyArNDIs
NyBAQCBXZWJQb3B1cEl0ZW06OldlYlBvcHVwSXRlbSgpCiAKIFdlYlBvcHVwSXRlbTo6V2ViUG9w
dXBJdGVtKFR5cGUgdHlwZSkKICAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV90ZXh0RGlyZWN0
aW9uKFdlYkNvcmU6OlRleHREaXJlY3Rpb246OkxUUikKKyAgICAsIG1fdGV4dERpcmVjdGlvbihQ
QUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAsIG1faGFzVGV4dERpcmVjdGlvbk92ZXJyaWRl
KGZhbHNlKQogICAgICwgbV9pc0VuYWJsZWQodHJ1ZSkKICAgICAsIG1faXNMYWJlbChmYWxzZSkK
QEAgLTUwLDcgKzUwLDcgQEAgV2ViUG9wdXBJdGVtOjpXZWJQb3B1cEl0ZW0oVHlwZSB0eXBlKQog
ewogfQogCi1XZWJQb3B1cEl0ZW06OldlYlBvcHVwSXRlbShUeXBlIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uLCBib29sIGhhc1Rl
eHREaXJlY3Rpb25PdmVycmlkZSwgY29uc3QgU3RyaW5nJiB0b29sVGlwLCBjb25zdCBTdHJpbmcm
IGFjY2Vzc2liaWxpdHlUZXh0LCBib29sIGlzRW5hYmxlZCwgYm9vbCBpc0xhYmVsLCBib29sIGlz
U2VsZWN0ZWQpCitXZWJQb3B1cEl0ZW06OldlYlBvcHVwSXRlbShUeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgdGV4dCwgUEFMOjpUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24sIGJvb2wgaGFzVGV4
dERpcmVjdGlvbk92ZXJyaWRlLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIGNvbnN0IFN0cmluZyYg
YWNjZXNzaWJpbGl0eVRleHQsIGJvb2wgaXNFbmFibGVkLCBib29sIGlzTGFiZWwsIGJvb2wgaXNT
ZWxlY3RlZCkKICAgICA6IG1fdHlwZSh0eXBlKQogICAgICwgbV90ZXh0KHRleHQpCiAgICAgLCBt
X3RleHREaXJlY3Rpb24odGV4dERpcmVjdGlvbikKQEAgLTg2LDcgKzg2LDcgQEAgc3RkOjpvcHRp
b25hbDxXZWJQb3B1cEl0ZW0+IFdlYlBvcHVwSXRlbTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVj
b2RlcikKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRleHQpKQogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgIAotICAgIFdlYkNvcmU6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlv
bjsKKyAgICBQQUw6OlRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbjsKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRleHREaXJlY3Rpb24pKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQb3B1cEl0ZW0uaCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5oCmluZGV4IDJjMzc1NDVlY2M2YzcyZjhkZmZi
M2IwODFhZTU5ZWU2Yjc5MjU3ZDMuLjliOGI0NjQ5YWUyNDY0ZDJjMDM0M2IxNTY5OWQyZWE4MWFl
Yjc0YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBvcHVwSXRlbS5oCkBAIC00NCwxNCArNDQsMTQg
QEAgc3RydWN0IFdlYlBvcHVwSXRlbSB7CiAKICAgICBXZWJQb3B1cEl0ZW0oKTsKICAgICBXZWJQ
b3B1cEl0ZW0oVHlwZSk7Ci0gICAgV2ViUG9wdXBJdGVtKFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4
dCwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiwgYm9vbCBoYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUs
IGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgY29uc3QgU3RyaW5nJiBhY2Nlc3NpYmlsaXR5VGV4dCwg
Ym9vbCBpc0VuYWJsZWQsIGJvb2wgaXNMYWJlbCwgYm9vbCBpc1NlbGVjdGVkKTsKKyAgICBXZWJQ
b3B1cEl0ZW0oVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBQQUw6OlRleHREaXJlY3Rpb24sIGJv
b2wgaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIGNvbnN0
IFN0cmluZyYgYWNjZXNzaWJpbGl0eVRleHQsIGJvb2wgaXNFbmFibGVkLCBib29sIGlzTGFiZWws
IGJvb2wgaXNTZWxlY3RlZCk7CiAKICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25z
dDsKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJQb3B1cEl0ZW0+IGRlY29kZShJUEM6OkRl
Y29kZXImKTsKIAogICAgIFR5cGUgbV90eXBlOwogICAgIFN0cmluZyBtX3RleHQ7Ci0gICAgV2Vi
Q29yZTo6VGV4dERpcmVjdGlvbiBtX3RleHREaXJlY3Rpb247CisgICAgUEFMOjpUZXh0RGlyZWN0
aW9uIG1fdGV4dERpcmVjdGlvbjsKICAgICBib29sIG1faGFzVGV4dERpcmVjdGlvbk92ZXJyaWRl
OwogICAgIFN0cmluZyBtX3Rvb2xUaXA7CiAgICAgU3RyaW5nIG1fYWNjZXNzaWJpbGl0eVRleHQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRl
eCA1MmQ2Mzk1ZjAwNjNiNmE5Y2NiMDYwNGJhYjJmOGM0MTI4Y2JiZThjLi40OTMzZWMxMWZhNTBj
ZGFmYjU2ZDgwOGM1ODFkYWFiMTJhOWQ3NmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KQEAgLTUwNyw3ICs1MDcsNyBAQCBzdGF0aWMgdm9p
ZCBoYXJkd2FyZUtleWJvYXJkQXZhaWxhYmlsaXR5Q2hhbmdlZENhbGxiYWNrKENGTm90aWZpY2F0
aW9uQ2VudGVyUmVmLAogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5wcmVmZXJlbmNlcygpLT5zZXRJ
bmxpbmVNZWRpYVBsYXliYWNrUmVxdWlyZXNQbGF5c0lubGluZUF0dHJpYnV0ZSghIVtfY29uZmln
dXJhdGlvbiBfaW5saW5lTWVkaWFQbGF5YmFja1JlcXVpcmVzUGxheXNJbmxpbmVBdHRyaWJ1dGVd
KTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+cHJlZmVyZW5jZXMoKS0+c2V0QWxsb3dzUGljdHVy
ZUluUGljdHVyZU1lZGlhUGxheWJhY2soISFbX2NvbmZpZ3VyYXRpb24gYWxsb3dzUGljdHVyZUlu
UGljdHVyZU1lZGlhUGxheWJhY2tdICYmIHNob3VsZEFsbG93UGljdHVyZUluUGljdHVyZU1lZGlh
UGxheWJhY2soKSk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnByZWZlcmVuY2VzKCktPnNldFVz
ZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3koc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdlYkNvcmU6
OlVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3k6OkNvbnRlbnQpKTsKLSAgICBwYWdlQ29uZmln
dXJhdGlvbi0+cHJlZmVyZW5jZXMoKS0+c2V0U3lzdGVtTGF5b3V0RGlyZWN0aW9uKHN0YXRpY19j
YXN0PHVpbnQzMl90PihXZWJDb3JlOjpUZXh0RGlyZWN0aW9uOjpMVFIpKTsKKyAgICBwYWdlQ29u
ZmlndXJhdGlvbi0+cHJlZmVyZW5jZXMoKS0+c2V0U3lzdGVtTGF5b3V0RGlyZWN0aW9uKHN0YXRp
Y19jYXN0PHVpbnQzMl90PihQQUw6OlRleHREaXJlY3Rpb246OkxUUikpOwogICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5wcmVmZXJlbmNlcygpLT5zZXRBbGxvd1NldHRpbmdBbnlYSFJIZWFkZXJGcm9t
RmlsZVVSTHMoc2hvdWxkQWxsb3dTZXR0aW5nQW55WEhSSGVhZGVyRnJvbUZpbGVVUkxzKCkpOwog
ICAgIHBhZ2VDb25maWd1cmF0aW9uLT5wcmVmZXJlbmNlcygpLT5zZXRTaG91bGREZWNpZGVQb2xp
Y3lCZWZvcmVMb2FkaW5nUXVpY2tMb29rUHJldmlldyghIVtfY29uZmlndXJhdGlvbiBfc2hvdWxk
RGVjaWRlUG9saWN5QmVmb3JlTG9hZGluZ1F1aWNrTG9va1ByZXZpZXddKTsKICNpZiBFTkFCTEUo
REVWSUNFX09SSUVOVEFUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKaW5kZXggYjc5MDMyOTUyMjFkNzFkOTc5ZjQ4YjZkNjZmNmZhYTc3NTEyN2IwMi4uMmJhNTI0
N2RmMGEzNTFhMjQ0ZmQ0ZDU0ZDJhZTFkYzRiYjdlY2Q3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC02ODc2LDcgKzY4NzYsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2hvd1BvcHVwTWVudShjb25zdCBJbnRSZWN0JiByZWN0LCB1aW50NjRfdCB0ZXh0RGly
ZWN0aW9uLCBjbwogCiAgICAgLy8gU2hvd2luZyBhIHBvcHVwIG1lbnUgcnVucyBhIG5lc3RlZCBy
dW5sb29wLCB3aGljaCBjYW4gaGFuZGxlIG1lc3NhZ2VzIHRoYXQgY2F1c2UgfHRoaXN8IHRvIGdl
dCBjbG9zZWQuCiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gcHJvdGVjdCgqdGhpcyk7Ci0gICAgbV9h
Y3RpdmVQb3B1cE1lbnUtPnNob3dQb3B1cE1lbnUocmVjdCwgc3RhdGljX2Nhc3Q8VGV4dERpcmVj
dGlvbj4odGV4dERpcmVjdGlvbiksIG1fcGFnZVNjYWxlRmFjdG9yLCBpdGVtcywgZGF0YSwgc2Vs
ZWN0ZWRJbmRleCk7CisgICAgbV9hY3RpdmVQb3B1cE1lbnUtPnNob3dQb3B1cE1lbnUocmVjdCwg
c3RhdGljX2Nhc3Q8UEFMOjpUZXh0RGlyZWN0aW9uPih0ZXh0RGlyZWN0aW9uKSwgbV9wYWdlU2Nh
bGVGYWN0b3IsIGl0ZW1zLCBkYXRhLCBzZWxlY3RlZEluZGV4KTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OmhpZGVQb3B1cE1lbnUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUG9wdXBNZW51UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBvcHVw
TWVudVByb3h5LmgKaW5kZXggNjFkZWUyZTRiNjY4MGE0YTdiNjg5YTQwZDA3NGMzZTIyMGM2MTIx
Yi4uZWQyOTM5ZTJmZjI2YTUwYzZiMDA1ODMxNzc1OTg4OGMyZGRjMTdkNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUG9wdXBNZW51UHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQb3B1cE1lbnVQcm94eS5oCkBAIC02MSw3ICs2MSw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNob3dQb3B1cE1lbnUoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiwgZG91Ymxl
IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBjb25z
dCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2hvd1BvcHVwTWVudShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUEFM
OjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2Vi
UG9wdXBJdGVtPiYgaXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYsIGludDMyX3Qg
c2VsZWN0ZWRJbmRleCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlUG9wdXBNZW51KCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxUcmFja2luZygpIHsgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpp
bmRleCA1YTNiMGQ3ZWUxZWQwNGU5NzhiNDg1ZmM0MWUxNWFmYWNkYmM2ZWU2Li5kZGVlYmE4M2Rm
MWMxYzY5YzNjZGEyODI4ZTY5ZmY0MGQyNGY1MGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTMwMzYs
NyArMzAzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NhbWVQYWlyKFVJR2VzdHVyZVJlY29n
bml6ZXIgKmEsIFVJR2VzdHVyZVJlY29nbml6ZXIgKmIsIFVJCiAgICAgcmV0dXJuIGNyZWF0ZU5T
QXJyYXkoc2VsZWN0aW9uR2VvbWV0cmllcywgW10gKGF1dG8mIGdlb21ldHJ5KSB7CiAgICAgICAg
IGF1dG8gd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVjdGlvblJlY3RdOwogICAgICAg
ICB3ZWJSZWN0LnJlY3QgPSBnZW9tZXRyeS5yZWN0KCk7Ci0gICAgICAgIHdlYlJlY3Qud3JpdGlu
Z0RpcmVjdGlvbiA9IGdlb21ldHJ5LmRpcmVjdGlvbigpID09IFdlYkNvcmU6OlRleHREaXJlY3Rp
b246OkxUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0
aW9uUmlnaHRUb0xlZnQ7CisgICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGdlb21l
dHJ5LmRpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gV0tXcml0aW5nRGly
ZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKICAgICAg
ICAgd2ViUmVjdC5pc0xpbmVCcmVhayA9IGdlb21ldHJ5LmlzTGluZUJyZWFrKCk7CiAgICAgICAg
IHdlYlJlY3QuaXNGaXJzdE9uTGluZSA9IGdlb21ldHJ5LmlzRmlyc3RPbkxpbmUoKTsKICAgICAg
ICAgd2ViUmVjdC5pc0xhc3RPbkxpbmUgPSBnZW9tZXRyeS5pc0xhc3RPbkxpbmUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1RleHRTZWxlY3Rpb25SZWN0Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0KaW5k
ZXggZTMxZGM4MDUyZTJmMDJiNzA4MDNjMzlmZTBmMTExYjM4ODNlMTc1MS4uMDE0MDE4MDdiNjVj
YWM4OTFhMDFjNWUwNzU0NjhjODA3ZGQyODZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0KQEAgLTEzOCw3ICsxMzgsNyBAQAog
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KIC0gKFVJVGV4dFdyaXRpbmdEaXJl
Y3Rpb24pd3JpdGluZ0RpcmVjdGlvbgogewotICAgIHJldHVybiBfc2VsZWN0aW9uR2VvbWV0cnku
ZGlyZWN0aW9uKCkgPT0gV2ViQ29yZTo6VGV4dERpcmVjdGlvbjo6TFRSID8gVUlUZXh0V3JpdGlu
Z0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogVUlUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0
OworICAgIHJldHVybiBfc2VsZWN0aW9uR2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gUEFMOjpUZXh0
RGlyZWN0aW9uOjpMVFIgPyBVSVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBVSVRl
eHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiB9CiBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19FTkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dl
YlBvcHVwTWVudVByb3h5TWFjLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9w
dXBNZW51UHJveHlNYWMuaAppbmRleCAwOTBlMTQ5ODI1NDEzYmQwODNjN2I0MjIzOGZlMGZjYTg4
MmNjNDVmLi4wYzcwNzgwZDFmNmFkZTI3NDY0NDI2ZjM5YjRkZDk0MTUzMjkxMjA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMuaApA
QCAtNDYsMTQgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICB9CiAgICAgfldlYlBvcHVwTWVudVByb3h5
TWFjKCk7CiAKLSAgICB2b2lkIHNob3dQb3B1cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IFdlYkNvcmU6OlRleHREaXJlY3Rpb24sIGRvdWJsZSBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFZl
Y3RvcjxXZWJQb3B1cEl0ZW0+JiwgY29uc3QgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhJiwgaW50MzJf
dCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHNob3dQb3B1cE1lbnUoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIFBBTDo6VGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZh
Y3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVu
dURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOwogICAgIHZvaWQgaGlkZVBv
cHVwTWVudSgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2FuY2VsVHJhY2tpbmcoKSBvdmVycmlkZTsK
IAogcHJpdmF0ZToKICAgICBXZWJQb3B1cE1lbnVQcm94eU1hYyhOU1ZpZXcgKiwgV2ViUG9wdXBN
ZW51UHJveHk6OkNsaWVudCYpOwogCi0gICAgdm9pZCBwb3B1bGF0ZShjb25zdCBWZWN0b3I8V2Vi
UG9wdXBJdGVtPiYsIE5TRm9udCAqLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKTsKKyAgICB2b2lk
IHBvcHVsYXRlKGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiwgTlNGb250ICosIFBBTDo6VGV4
dERpcmVjdGlvbik7CiAKICAgICBSZXRhaW5QdHI8TlNQb3BVcEJ1dHRvbkNlbGw+IG1fcG9wdXA7
CiAgICAgTlNWaWV3ICptX3dlYlZpZXc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMubW0KaW5kZXggOGVmM2MwZDdmYTc1ZjIyZGI5YTE0
ZDIwOGRjZWU3N2Q2OTljZjRjYy4uNTRlN2I1MWQ3NWZkZmI2YmI3ZDA0OTgxOWJhYmI1NmM2OTBm
ZDkxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVu
dVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1l
bnVQcm94eU1hYy5tbQpAQCAtNTUsNyArNTUsNyBAQCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6fldl
YlBvcHVwTWVudVByb3h5TWFjKCkKICAgICAgICAgW21fcG9wdXAgc2V0Q29udHJvbFZpZXc6bmls
XTsKIH0KIAotdm9pZCBXZWJQb3B1cE1lbnVQcm94eU1hYzo6cG9wdWxhdGUoY29uc3QgVmVjdG9y
PFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBOU0ZvbnQgKmZvbnQsIFRleHREaXJlY3Rpb24gbWVudVRl
eHREaXJlY3Rpb24pCit2b2lkIFdlYlBvcHVwTWVudVByb3h5TWFjOjpwb3B1bGF0ZShjb25zdCBW
ZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIE5TRm9udCAqZm9udCwgUEFMOjpUZXh0RGlyZWN0
aW9uIG1lbnVUZXh0RGlyZWN0aW9uKQogewogICAgIGlmIChtX3BvcHVwKQogICAgICAgICBbbV9w
b3B1cCByZW1vdmVBbGxJdGVtc107CkBAIC03NSw5ICs3NSw5IEBAIHZvaWQgV2ViUG9wdXBNZW51
UHJveHlNYWM6OnBvcHVsYXRlKGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgTlNG
b250ICpmCiAgICAgICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IFttX3BvcHVwIGxhc3RJ
dGVtXTsKIAogICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBw
YXJhZ3JhcGhTdHlsZSA9IGFkb3B0TlMoW1tOU1BhcmFncmFwaFN0eWxlIGRlZmF1bHRQYXJhZ3Jh
cGhTdHlsZV0gbXV0YWJsZUNvcHldKTsKLSAgICAgICAgICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3
cml0aW5nRGlyZWN0aW9uID0gaXRlbXNbaV0ubV90ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rp
b246OkxUUiA/IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNXcml0aW5nRGlyZWN0
aW9uUmlnaHRUb0xlZnQ7CisgICAgICAgICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0Rp
cmVjdGlvbiA9IGl0ZW1zW2ldLm1fdGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246
OkxUUiA/IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNXcml0aW5nRGlyZWN0aW9u
UmlnaHRUb0xlZnQ7CiAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0QmFzZVdyaXRpbmdE
aXJlY3Rpb246d3JpdGluZ0RpcmVjdGlvbl07Ci0gICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUg
c2V0QWxpZ25tZW50Om1lbnVUZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5T
VGV4dEFsaWdubWVudExlZnQgOiBOU1RleHRBbGlnbm1lbnRSaWdodF07CisgICAgICAgICAgICBb
cGFyYWdyYXBoU3R5bGUgc2V0QWxpZ25tZW50Om1lbnVUZXh0RGlyZWN0aW9uID09IFBBTDo6VGV4
dERpcmVjdGlvbjo6TFRSID8gTlNUZXh0QWxpZ25tZW50TGVmdCA6IE5TVGV4dEFsaWdubWVudFJp
Z2h0XTsKICAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1
dGVzID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0
c0FuZEtleXM6CiAgICAgICAgICAgICAgICAgcGFyYWdyYXBoU3R5bGUuZ2V0KCksIE5TUGFyYWdy
YXBoU3R5bGVBdHRyaWJ1dGVOYW1lLAogICAgICAgICAgICAgICAgIGZvbnQsIE5TRm9udEF0dHJp
YnV0ZU5hbWUsCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlNYWM6OnBv
cHVsYXRlKGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgTlNGb250ICpmCiAgICAg
fQogfQogCi12b2lkIFdlYlBvcHVwTWVudVByb3h5TWFjOjpzaG93UG9wdXBNZW51KGNvbnN0IElu
dFJlY3QmIHJlY3QsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2Fs
ZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBjb25zdCBQbGF0Zm9y
bVBvcHVwTWVudURhdGEmIGRhdGEsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQgV2ViUG9w
dXBNZW51UHJveHlNYWM6OnNob3dQb3B1cE1lbnUoY29uc3QgSW50UmVjdCYgcmVjdCwgUEFMOjpU
ZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24sIGRvdWJsZSBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0
IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgY29uc3QgUGxhdGZvcm1Qb3B1cE1lbnVEYXRh
JiBkYXRhLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgQVNTRVJUKGhhc1Byb2Nlc3NQ
cml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQ29tbXVuaWNhdGVXaXRoV2luZG93U2VydmVy
KSk7CiAgICAgTlNGb250ICpmb250OwpAQCAtMTIzLDEwICsxMjMsMTAgQEAgdm9pZCBXZWJQb3B1
cE1lbnVQcm94eU1hYzo6c2hvd1BvcHVwTWVudShjb25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGly
ZWN0aW9uIHRleHQKIAogICAgIFttX3BvcHVwIGF0dGFjaFBvcFVwV2l0aEZyYW1lOnJlY3QgaW5W
aWV3Om1fd2ViVmlld107CiAgICAgW21fcG9wdXAgc2VsZWN0SXRlbUF0SW5kZXg6c2VsZWN0ZWRJ
bmRleF07Ci0gICAgW21fcG9wdXAgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0
RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRU
b0xlZnRdOworICAgIFttX3BvcHVwIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4
dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
UmlnaHRUb0xlZnRdOwogCiAgICAgTlNNZW51ICptZW51ID0gW21fcG9wdXAgbWVudV07Ci0gICAg
W21lbnUgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFRl
eHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1Jp
Z2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOworICAgIFtt
ZW51IHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBQQUw6
OlRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRU
b1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOwogCiAg
ICAgLy8gVGhlc2UgdmFsdWVzIHdlcmUgYm9ycm93ZWQgZnJvbSBBcHBLaXQgdG8gbWF0Y2ggdGhl
aXIgcGxhY2VtZW50IG9mIHRoZSBtZW51LgogICAgIGNvbnN0IGludCBwb3BPdmVySG9yaXpvbnRh
bEFkanVzdCA9IC0xMzsKQEAgLTE0MSwxOCArMTQxLDE4IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJv
eHlNYWM6OnNob3dQb3B1cE1lbnUoY29uc3QgSW50UmVjdCYgcmVjdCwgVGV4dERpcmVjdGlvbiB0
ZXh0CiAgICAgICAgIGlmICh0aXRsZUZyYW1lLnNpemUud2lkdGggPD0gMCB8fCB0aXRsZUZyYW1l
LnNpemUuaGVpZ2h0IDw9IDApCiAgICAgICAgICAgICB0aXRsZUZyYW1lID0gcmVjdDsKICAgICAg
ICAgZmxvYXQgdmVydGljYWxPZmZzZXQgPSByb3VuZGYoKE5TTWF4WShyZWN0KSAtIE5TTWF4WSh0
aXRsZUZyYW1lKSkgKyBOU0hlaWdodCh0aXRsZUZyYW1lKSkgKyAxOwotICAgICAgICBpZiAodGV4
dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgICAgIGlmICh0ZXh0RGlyZWN0
aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICAgICAgbG9jYXRpb24gPSBO
U01ha2VQb2ludChOU01pblgocmVjdCkgKyBwb3BPdmVySG9yaXpvbnRhbEFkanVzdCwgTlNNYXhZ
KHJlY3QpIC0gdmVydGljYWxPZmZzZXQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2Nh
dGlvbiA9IE5TTWFrZVBvaW50KE5TTWF4WChyZWN0KSAtIHBvcE92ZXJIb3Jpem9udGFsQWRqdXN0
LCBOU01heFkocmVjdCkgLSB2ZXJ0aWNhbE9mZnNldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBpZiAodGV4
dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAgIGxvY2F0
aW9uID0gTlNNYWtlUG9pbnQoTlNNaW5YKHJlY3QpICsgcG9wVW5kZXJIb3Jpem9udGFsQWRqdXN0
LCBOU01heFkocmVjdCkgKyBwb3BVbmRlclZlcnRpY2FsQWRqdXN0KTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbG9jYXRpb24gPSBOU01ha2VQb2ludChOU01heFgocmVjdCkgLSBwb3BVbmRl
ckhvcml6b250YWxBZGp1c3QsIE5TTWF4WShyZWN0KSArIHBvcFVuZGVyVmVydGljYWxBZGp1c3Qp
OwogICAgIH0KICAgICBSZXRhaW5QdHI8TlNWaWV3PiBkdW1teVZpZXcgPSBhZG9wdE5TKFtbTlNW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnJlY3RdKTsKLSAgICBbZHVtbXlWaWV3LmdldCgpIHNl
dFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0
aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5T
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKKyAgICBbZHVtbXlWaWV3
LmdldCgpIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBQ
QUw6OlRleHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxl
ZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOwog
ICAgIFttX3dlYlZpZXcgYWRkU3VidmlldzpkdW1teVZpZXcuZ2V0KCldOwogICAgIGxvY2F0aW9u
ID0gW2R1bW15VmlldyBjb252ZXJ0UG9pbnQ6bG9jYXRpb24gZnJvbVZpZXc6bV93ZWJWaWV3XTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCBjN2NmNTg3NWM5NDNiNzkxOTJhZWJkMjg2MjNi
MmIxYmM3NDdkY2M1Li4yNzIxMDVlMjM5NDdkMzhlODJjZjUxNzc4NTNhMGE4YjYzM2Y3MTc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtNzExLDcgKzcxMSw3IEBAIHZvaWQgV2ViQ2hyb21l
Q2xpZW50Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoRWxlbWVudCYgZWxlbWVudCwg
UmVuZGVyRW1iCiAgICAgVU5VU0VEX1BBUkFNKHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKTsK
IH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MsIGNv
bnN0IFN0cmluZyYgdG9vbFRpcCwgVGV4dERpcmVjdGlvbikKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50
Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVz
dWx0LCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIFBBTDo6
VGV4dERpcmVjdGlvbikKIHsKICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IHVzZXJEYXRhOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKaW5kZXggZGE1YWNkMTM5NWNjOTI0MDhmZmRjYzJhMDJiODMxMTI4Njhm
OTY3ZS4uODBhNjVmYTc3M2VkNTQyNjVhODgxYmU4ZDRjMjdjNzhiOTMxZjkzZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaApAQCAtMTQxLDcgKzE0MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRV
bmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9i
amVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0IGZpbmFsOwogICAgIHZvaWQg
dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKFdlYkNvcmU6OkVsZW1lbnQmLCBXZWJDb3Jl
OjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0
IGZpbmFsOwogCi0gICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncywgY29uc3QgU3RyaW5nJiB0
b29sVGlwLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRGlk
TW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBt
b2RpZmllckZsYWdzLCBjb25zdCBTdHJpbmcmIHRvb2xUaXAsIFBBTDo6VGV4dERpcmVjdGlvbikg
ZmluYWw7CiAKICAgICB2b2lkIHByaW50KFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6
U3RyaW5nV2l0aERpcmVjdGlvbiYpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDk0MmVkYzYyM2E0ZTY1M2JiMTg4YWVlMDUwNjQ0
YTNmNGEwMzJlODkuLmI2NTNjMTFiMjFiZDkyYjliMzk2M2ZiMTUyNjNjZWEyYjRkNDJlYWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zOTY1
LDcgKzM5NjUsNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlBy
ZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogICAgIHNldHRpbmdzLnNldFZpZGVvUGxheWJhY2tSZXF1
aXJlc1VzZXJHZXN0dXJlKHJlcXVpcmVzVXNlckdlc3R1cmVGb3JNZWRpYSB8fCBzdG9yZS5nZXRC
b29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnJlcXVpcmVzVXNlckdlc3R1cmVGb3JW
aWRlb1BsYXliYWNrS2V5KCkpKTsKICAgICBzZXR0aW5ncy5zZXRBdWRpb1BsYXliYWNrUmVxdWly
ZXNVc2VyR2VzdHVyZShyZXF1aXJlc1VzZXJHZXN0dXJlRm9yTWVkaWEgfHwgc3RvcmUuZ2V0Qm9v
bFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpyZXF1aXJlc1VzZXJHZXN0dXJlRm9yQXVk
aW9QbGF5YmFja0tleSgpKSk7CiAgICAgc2V0dGluZ3Muc2V0VXNlckludGVyZmFjZURpcmVjdGlv
blBvbGljeShzdGF0aWNfY2FzdDxXZWJDb3JlOjpVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5
PihzdG9yZS5nZXRVSW50MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6dXNlckludGVy
ZmFjZURpcmVjdGlvblBvbGljeUtleSgpKSkpOwotICAgIHNldHRpbmdzLnNldFN5c3RlbUxheW91
dERpcmVjdGlvbihzdGF0aWNfY2FzdDxUZXh0RGlyZWN0aW9uPihzdG9yZS5nZXRVSW50MzJWYWx1
ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6c3lzdGVtTGF5b3V0RGlyZWN0aW9uS2V5KCkpKSk7
CisgICAgc2V0dGluZ3Muc2V0U3lzdGVtTGF5b3V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PFBBTDo6
VGV4dERpcmVjdGlvbj4oc3RvcmUuZ2V0VUludDMyVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNL
ZXk6OnN5c3RlbUxheW91dERpcmVjdGlvbktleSgpKSkpOwogICAgIHNldHRpbmdzLnNldEphdmFT
Y3JpcHRSdW50aW1lRmxhZ3Moc3RhdGljX2Nhc3Q8UnVudGltZUZsYWdzPihzdG9yZS5nZXRVSW50
MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6amF2YVNjcmlwdFJ1bnRpbWVGbGFnc0tl
eSgpKSkpOwogICAgIHNldHRpbmdzLnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShzdGF0aWNfY2Fz
dDxTdG9yYWdlQmxvY2tpbmdQb2xpY3k+KHN0b3JlLmdldFVJbnQzMlZhbHVlRm9yS2V5KFdlYlBy
ZWZlcmVuY2VzS2V5OjpzdG9yYWdlQmxvY2tpbmdQb2xpY3lLZXkoKSkpKTsKICAgICBzZXR0aW5n
cy5zZXRGcmFtZUZsYXR0ZW5pbmcoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVu
Y2VzS2V5OjpmcmFtZUZsYXR0ZW5pbmdFbmFibGVkS2V5KCkpID8gV2ViQ29yZTo6RnJhbWVGbGF0
dGVuaW5nOjpGdWxseUVuYWJsZWQgOiBXZWJDb3JlOjpGcmFtZUZsYXR0ZW5pbmc6OkRpc2FibGVk
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW0KaW5kZXggMDZkNTVmMTA4N2NhNDAyYzk1NWVhNWI1ODIxNDczNDAyMTE0MDBmMC4uYTVi
OWQ5ODkxNDE1ZmVjMmE2ODI3MDI1N2ZiYWQ4NzE2YzJkNjNiNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTMyNzYsNyAr
MzI3Niw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbj4gV2ViUGFn
ZTo6Zm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbigpCiAgICAgICAgIGJvb2wgaW5GaXhlZCA9IGZh
bHNlOwogICAgICAgICByZW5kZXJlci0+bG9jYWxUb0NvbnRhaW5lclBvaW50KEZsb2F0UG9pbnQo
KSwgbnVsbHB0ciwgVXNlVHJhbnNmb3JtcywgJmluRml4ZWQpOwogICAgICAgICBpbmZvcm1hdGlv
bi5pbnNpZGVGaXhlZFBvc2l0aW9uID0gaW5GaXhlZDsKLSAgICAgICAgaW5mb3JtYXRpb24uaXNS
VEwgPSByZW5kZXJlci0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEw7
CisgICAgICAgIGluZm9ybWF0aW9uLmlzUlRMID0gcmVuZGVyZXItPnN0eWxlKCkuZGlyZWN0aW9u
KCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEw7CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQogICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQppbmRleCAyMTRlNTcxYzA3NTg2ZDMyMjJlOWE4
NmZiOGZmNDhjYWE2OTAxNWM3Li5jYmVkMDIwZmViMDhjZThmMjJjZmJmYzU0NjQ0ZmIyOWRhOGMy
MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUlPUy5tbQpAQCAtMjA5LDcgKzIwOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVj
dGlvbkdlb21ldHJpZXMocmFuZ2UpLCBbXSAoYXV0byYgZ2VvbWV0cnkpIHsKICAgICAgICAgYXV0
byB3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVjdF07CiAgICAgICAgIHdl
YlJlY3QucmVjdCA9IGdlb21ldHJ5LnJlY3QoKTsKLSAgICAgICAgd2ViUmVjdC53cml0aW5nRGly
ZWN0aW9uID0gZ2VvbWV0cnkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gV0tX
cml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVm
dDsKKyAgICAgICAgd2ViUmVjdC53cml0aW5nRGlyZWN0aW9uID0gZ2VvbWV0cnkuZGlyZWN0aW9u
KCkgPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBXS1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9S
aWdodCA6IFdLV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwogICAgICAgICB3ZWJSZWN0Lmlz
TGluZUJyZWFrID0gZ2VvbWV0cnkuaXNMaW5lQnJlYWsoKTsKICAgICAgICAgd2ViUmVjdC5pc0Zp
cnN0T25MaW5lID0gZ2VvbWV0cnkuaXNGaXJzdE9uTGluZSgpOwogICAgICAgICB3ZWJSZWN0Lmlz
TGFzdE9uTGluZSA9IGdlb21ldHJ5LmlzTGFzdE9uTGluZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9u
Lm1tCmluZGV4IDIzYzdkMzM5NjU5Y2U1MzY2OTBhYmMwZmNjYzlhNWZkYWE0MmYxYTMuLjE5NTIz
NTk5MTRhMTFhZGIzYjM2YzA2Yzg1MTEzMzUwNzgxNGMxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRp
b24ubW0KQEAgLTEyNywxMCArMTI3LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogfQog
CiAKLS0gKFRleHREaXJlY3Rpb24pdGV4dERpcmVjdGlvbgorLSAoUEFMOjpUZXh0RGlyZWN0aW9u
KXRleHREaXJlY3Rpb24KIHsKICAgICAvLyBUT0RPOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gVGV4
dERpcmVjdGlvbjo6TFRSOworICAgIHJldHVybiBQQUw6OlRleHREaXJlY3Rpb246OkxUUjsKIH0K
IAogLSAoQk9PTClkaXJlY3Rpb25Jc0Rvd25zdHJlYW06KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0
aW9uKWRpcmVjdGlvbgpAQCAtMTQyLDcgKzE0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogICAgICAgICByZXR1cm4gWUVTOwogICAgIAogICAgIAotICAgIGlmIChbc2VsZiB0ZXh0RGly
ZWN0aW9uXSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisgICAgaWYgKFtzZWxmIHRleHREaXJlY3Rp
b25dID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSKQogICAgICAgICByZXR1cm4gKGRpcmVjdGlv
biA9PSBXZWJUZXh0QWRqdXN0bWVudFJpZ2h0KTsKICAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBX
ZWJUZXh0QWRqdXN0bWVudExlZnQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvV2ViVmlldy9XZWJQREZWaWV3SU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3Mv
V2ViVmlldy9XZWJQREZWaWV3SU9TLm1tCmluZGV4IDNlZDQyZGQwYzUzZjY3M2FlNDVmMmU3NDFh
MTc2NDYzNDAzMGE2NjEuLmJjZGRkMzI5NmIyZTc2OGQ0Y2UxYThmMDhlZDUwODdiYmJmYzY5MDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYlZpZXcvV2ViUERGVmlld0lP
Uy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJWaWV3L1dlYlBERlZpZXdJT1Mu
bW0KQEAgLTI5Nyw3ICsyOTcsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNyZWF0
ZUNHQ29sb3JXaXRoRGV2aWNlV2hpdGUoQ0dGbG9hdCB3aGl0ZSwgQ0dGbG9hdAogCiAgICAgaWYg
KHRpdGxlICYmIENGU3RyaW5nR2V0TGVuZ3RoKHRpdGxlLmdldCgpKSkgewogICAgICAgICBfdGl0
bGUgPSAoTlNTdHJpbmcgKil0aXRsZS5nZXQoKTsKLSAgICAgICAgY29yZShbc2VsZiBfZnJhbWVd
KS0+bG9hZGVyKCkuY2xpZW50KCkuZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoeyBfdGl0bGUuZ2V0
KCksIFRleHREaXJlY3Rpb246OkxUUiB9KTsKKyAgICAgICAgY29yZShbc2VsZiBfZnJhbWVdKS0+
bG9hZGVyKCkuY2xpZW50KCkuZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoeyBfdGl0bGUuZ2V0KCks
IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIH0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW0KaW5kZXggMDI2
NGI1N2MyM2UyYjdjYzg4N2I5ZDYwYTI1NmYxNzc4YTNhYjRmYy4uYTk1ZmNjOWM2MWEwYjdlMTQ3
ZWNjM2E2NGIwZWJlNWYxNDNlNDcyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tCkBAIC0xOTksNyArMTk5LDcgQEAgc3Rh
dGljIE5TU3RyaW5nKiBOU1N0cmluZ09yTmlsKFN0cmluZyBjb3JlU3RyaW5nKQogCiAtIChOU1N0
cmluZyAqKV9zcGVsbGluZ1Rvb2xUaXAKIHsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcjsKKyAgICBQ
QUw6OlRleHREaXJlY3Rpb24gZGlyOwogICAgIHJldHVybiBOU1N0cmluZ09yTmlsKF9yZXN1bHQt
PnNwZWxsaW5nVG9vbFRpcChkaXIpKTsKIH0KIApAQCAtMjM2LDcgKzIzNiw3IEBAIHN0YXRpYyBO
U1N0cmluZyogTlNTdHJpbmdPck5pbChTdHJpbmcgY29yZVN0cmluZykKIAogLSAoTlNTdHJpbmcg
KilfdGl0bGUKIHsKLSAgICBUZXh0RGlyZWN0aW9uIGRpcjsKKyAgICBQQUw6OlRleHREaXJlY3Rp
b24gZGlyOwogICAgIHJldHVybiBOU1N0cmluZ09yTmlsKF9yZXN1bHQtPnRpdGxlKGRpcikpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9Q
b3B1cE1lbnVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9Q
b3B1cE1lbnVNYWMubW0KaW5kZXggM2RlYjEyNWY3OTNkOGMyNmI4ZTgwYjNmODM3YjRmNmMwM2Jl
ZGM1My4uNmZjMTFmOGZhYzQ5ODM4ODBlM2FjMGU4ZWM3MTNhODM4ZTE0YjdmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1h
Yy5tbQpAQCAtNjgsOCArNjgsOCBAQCB2b2lkIFBvcHVwTWVudU1hYzo6cG9wdWxhdGUoKQogICAg
IGlmICghbV9jbGllbnQtPnNob3VsZFBvcE92ZXIoKSkKICAgICAgICAgW21fcG9wdXAgYWRkSXRl
bVdpdGhUaXRsZTpAIiJdOwogCi0gICAgVGV4dERpcmVjdGlvbiBtZW51VGV4dERpcmVjdGlvbiA9
IG1fY2xpZW50LT5tZW51U3R5bGUoKS50ZXh0RGlyZWN0aW9uKCk7Ci0gICAgW21fcG9wdXAgc2V0
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjptZW51VGV4dERpcmVjdGlvbiA9PSBUZXh0RGly
ZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6
IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKKyAgICBQQUw6OlRl
eHREaXJlY3Rpb24gbWVudVRleHREaXJlY3Rpb24gPSBtX2NsaWVudC0+bWVudVN0eWxlKCkudGV4
dERpcmVjdGlvbigpOworICAgIFttX3BvcHVwIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b246bWVudVRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKIAogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgaW50
IHNpemUgPSBtX2NsaWVudC0+bGlzdFNpemUoKTsKQEAgLTkyLDggKzkyLDggQEAgdm9pZCBQb3B1
cE1lbnVNYWM6OnBvcHVsYXRlKCkKICAgICAgICAgfQogCiAgICAgICAgIFJldGFpblB0cjxOU011
dGFibGVQYXJhZ3JhcGhTdHlsZT4gcGFyYWdyYXBoU3R5bGUgPSBhZG9wdE5TKFtbTlNQYXJhZ3Jh
cGhTdHlsZSBkZWZhdWx0UGFyYWdyYXBoU3R5bGVdIG11dGFibGVDb3B5XSk7Ci0gICAgICAgIFtw
YXJhZ3JhcGhTdHlsZSBzZXRBbGlnbm1lbnQ6bWVudVRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVj
dGlvbjo6TFRSID8gTlNUZXh0QWxpZ25tZW50TGVmdCA6IE5TVGV4dEFsaWdubWVudFJpZ2h0XTsK
LSAgICAgICAgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBzdHlsZS50ZXh0
RGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gTlNXcml0aW5nRGlyZWN0aW9uTGVm
dFRvUmlnaHQgOiBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKyAgICAgICAgW3BhcmFn
cmFwaFN0eWxlIHNldEFsaWdubWVudDptZW51VGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJl
Y3Rpb246OkxUUiA/IE5TVGV4dEFsaWdubWVudExlZnQgOiBOU1RleHRBbGlnbm1lbnRSaWdodF07
CisgICAgICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uID0gc3R5bGUudGV4
dERpcmVjdGlvbigpID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNXcml0aW5nRGlyZWN0
aW9uTGVmdFRvUmlnaHQgOiBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKICAgICAgICAg
W3BhcmFncmFwaFN0eWxlIHNldEJhc2VXcml0aW5nRGlyZWN0aW9uOndyaXRpbmdEaXJlY3Rpb25d
OwogICAgICAgICBpZiAoc3R5bGUuaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlKCkpIHsKICAgICAg
ICAgICAgIFJldGFpblB0cjxOU051bWJlcj4gd3JpdGluZ0RpcmVjdGlvblZhbHVlID0gYWRvcHRO
UyhbW05TTnVtYmVyIGFsbG9jXSBpbml0V2l0aEludGVnZXI6d3JpdGluZ0RpcmVjdGlvbiArIE5T
V3JpdGluZ0RpcmVjdGlvbk92ZXJyaWRlXSk7CkBAIC0xNDMsMTQgKzE0MywxNCBAQCB2b2lkIFBv
cHVwTWVudU1hYzo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBGcmFtZVZpZXcqIHYsIGludCBzZWxl
Y3RlZEluZGV4KQogCiAgICAgTlNWaWV3KiB2aWV3ID0gdi0+ZG9jdW1lbnRWaWV3KCk7CiAKLSAg
ICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBtX2NsaWVudC0+bWVudVN0eWxlKCkudGV4
dERpcmVjdGlvbigpOworICAgIFBBTDo6VGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gbV9j
bGllbnQtPm1lbnVTdHlsZSgpLnRleHREaXJlY3Rpb24oKTsKIAogICAgIFttX3BvcHVwIGF0dGFj
aFBvcFVwV2l0aEZyYW1lOnIgaW5WaWV3OnZpZXddOwogICAgIFttX3BvcHVwIHNlbGVjdEl0ZW1B
dEluZGV4OnNlbGVjdGVkSW5kZXhdOwotICAgIFttX3BvcHVwIHNldFVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKKyAgICBbbV9wb3B1cCBzZXRVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBO
U1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKIAogICAgIE5TTWVudSAqbWVudSA9IFttX3Bv
cHVwIG1lbnVdOwotICAgIFttZW51IHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4
dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0
VG9MZWZ0XTsKKyAgICBbbWVudSBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHRE
aXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJp
Z2h0VG9MZWZ0XTsKIAogICAgIE5TUG9pbnQgbG9jYXRpb247CiAgICAgQ1RGb250UmVmIGZvbnQg
PSBtX2NsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCk7
CkBAIC0xNjgsMTIgKzE2OCwxMiBAQCB2b2lkIFBvcHVwTWVudU1hYzo6c2hvdyhjb25zdCBJbnRS
ZWN0JiByLCBGcmFtZVZpZXcqIHYsIGludCBzZWxlY3RlZEluZGV4KQogICAgICAgICBhdXRvIGRl
ZmF1bHRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVVSUZvbnRGb3JMYW5ndWFnZShrQ1RGb250
VUlGb250U3lzdGVtLCBDVEZvbnRHZXRTaXplKGZvbnQpLCBuaWwpKTsKICAgICAgICAgdmVydE9m
ZnNldCArPSBDVEZvbnRHZXREZXNjZW50KGZvbnQpIC0gQ1RGb250R2V0RGVzY2VudChkZWZhdWx0
Rm9udC5nZXQoKSk7CiAgICAgICAgIHZlcnRPZmZzZXQgPSBmbWluZihOU0hlaWdodChyKSwgdmVy
dE9mZnNldCk7Ci0gICAgICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxU
UikKKyAgICAgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIp
CiAgICAgICAgICAgICBsb2NhdGlvbiA9IE5TTWFrZVBvaW50KE5TTWluWChyKSArIHBvcE92ZXJI
b3Jpem9udGFsQWRqdXN0LCBOU01heFkocikgLSB2ZXJ0T2Zmc2V0KTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbG9jYXRpb24gPSBOU01ha2VQb2ludChOU01heFgocikgLSBwb3BPdmVySG9y
aXpvbnRhbEFkanVzdCwgTlNNYXhZKHIpIC0gdmVydE9mZnNldCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKQorICAgICAgICBp
ZiAodGV4dERpcmVjdGlvbiA9PSBQQUw6OlRleHREaXJlY3Rpb246OkxUUikKICAgICAgICAgICAg
IGxvY2F0aW9uID0gTlNNYWtlUG9pbnQoTlNNaW5YKHIpICsgcG9wVW5kZXJIb3Jpem9udGFsQWRq
dXN0LCBOU01heFkocikgKyBwb3BVbmRlclZlcnRpY2FsQWRqdXN0KTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbG9jYXRpb24gPSBOU01ha2VQb2ludChOU01heFgocikgLSBwb3BVbmRlckhv
cml6b250YWxBZGp1c3QsIE5TTWF4WShyKSArIHBvcFVuZGVyVmVydGljYWxBZGp1c3QpOwpAQCAt
MTg2LDcgKzE4Niw3IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpzaG93KGNvbnN0IEludFJlY3QmIHIs
IEZyYW1lVmlldyogdiwgaW50IHNlbGVjdGVkSW5kZXgpCiAgICAgUmVmPFBvcHVwTWVudU1hYz4g
cHJvdGVjdG9yKCp0aGlzKTsKIAogICAgIFJldGFpblB0cjxOU1ZpZXc+IGR1bW15VmlldyA9IGFk
b3B0TlMoW1tOU1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6cl0pOwotICAgIFtkdW1teVZpZXcu
Z2V0KCkgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IFRl
eHREaXJlY3Rpb246OkxUUiA/IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1Jp
Z2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnRdOworICAgIFtk
dW1teVZpZXcuZ2V0KCkgc2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0
aW9uID09IFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRv
TGVmdF07CiAgICAgW3ZpZXcgYWRkU3VidmlldzpkdW1teVZpZXcuZ2V0KCldOwogICAgIGxvY2F0
aW9uID0gW2R1bW15VmlldyBjb252ZXJ0UG9pbnQ6bG9jYXRpb24gZnJvbVZpZXc6dmlld107CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IDgyMjM3OGY0MDYzZjBiYWYzMDQ4Y2QzMDBjYTY0MjIy
ODNkZTgwYjkuLmRhZjUzMmQwZWRjYjEwNjhiNzA4ZDNjNTZiYjRhYjgyZDZlNTdiMmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oCkBAIC0xMTgsNyArMTE4LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgc2hv
dWxkVW5hdmFpbGFibGVQbHVnaW5NZXNzYWdlQmVCdXR0b24oV2ViQ29yZTo6UmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSBjb25zdCBmaW5hbDsKICAgICB2
b2lkIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChXZWJDb3JlOjpFbGVtZW50JiwgV2Vi
Q29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSBj
b25zdCBmaW5hbDsKLSAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzLCBjb25zdCBTdHJpbmcm
LCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKSBmaW5hbDsKKyAgICB2b2lkIG1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmll
ckZsYWdzLCBjb25zdCBTdHJpbmcmLCBQQUw6OlRleHREaXJlY3Rpb24pIGZpbmFsOwogCiAgICAg
dm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXgg
MzYzNGY3YTYwMjE0NjE5ZWNmZWFmMGFlZDllYmZjZTcyMTBmMWExYS4uNDllMzdhZmQwNWFiZjFm
NTA5ZmFmNjk4NmYzYmQwZjNlMjEzMDliOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQpAQCAtNjM0LDcg
KzYzNCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNs
aWNrZWQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyRW1iCiAgICAgQ2FsbFVJRGVsZWdhdGUobV93
ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpkaWRQcmVzc01pc3NpbmdQbHVnaW5CdXR0b246KSwg
a2l0KCZlbGVtZW50KSk7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVP
dmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVy
RmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgVGV4dERpcmVjdGlvbikKK3ZvaWQgV2ViQ2hy
b21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MsIGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgUEFM
OjpUZXh0RGlyZWN0aW9uKQogewogICAgIGF1dG8gZWxlbWVudCA9IGFkb3B0TlMoW1tXZWJFbGVt
ZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0OnJlc3VsdF0pOwogICAg
IFttX3dlYlZpZXcgX21vdXNlRGlkTW92ZU92ZXJFbGVtZW50OmVsZW1lbnQuZ2V0KCkgbW9kaWZp
ZXJGbGFnczptb2RpZmllckZsYWdzXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXgg
NDNlNjNmNDU2MzQ1ZWNmMWM5MjRlNWI3NzJhNmY1NDE3M2E5MTQyYi4uYzNiNGZjMGY0MzIzNDQ3
N2ZjYzExOTM1MjRjNzA1NjNjYjNlY2U0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0K
QEAgLTE0NjUsNyArMTQ2NSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRp
b25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKQogICAgIC8vIGxpa2UgdGhlIG9uZXMgdGhhdCBTYWZh
cmkgdXNlcyBmb3IgYm9va21hcmtzIGl0IGlzIHRoZSBvbmx5IHdheSB0aGUgRG9jdW1lbnRMb2Fk
ZXIKICAgICAvLyB3aWxsIGdldCB0aGUgcHJvcGVyIHRpdGxlLgogICAgIGlmIChhdXRvIGRvY3Vt
ZW50TG9hZGVyID0gW2RhdGFTb3VyY2UgX2RvY3VtZW50TG9hZGVyXSkKLSAgICAgICAgZG9jdW1l
bnRMb2FkZXItPnNldFRpdGxlKHsgW2RhdGFTb3VyY2UgcGFnZVRpdGxlXSwgV2ViQ29yZTo6VGV4
dERpcmVjdGlvbjo6TFRSIH0pOworICAgICAgICBkb2N1bWVudExvYWRlci0+c2V0VGl0bGUoeyBb
ZGF0YVNvdXJjZSBwYWdlVGl0bGVdLCBQQUw6OlRleHREaXJlY3Rpb246OkxUUiB9KTsKIAogICAg
IGlmIChhdXRvKiBvd25lckVsZW1lbnQgPSBjb3JlRnJhbWUtPm93bmVyRWxlbWVudCgpKQogICAg
ICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+c2V0Q2FuSGF2ZVNjcm9sbGJhcnMob3duZXJFbGVtZW50
LT5zY3JvbGxpbmdNb2RlKCkgIT0gV2ViQ29yZTo6U2Nyb2xsYmFyTW9kZTo6QWx3YXlzT2ZmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDBlMDVi
MThkNjk2Mzk4MjhkNDMzYzQ2ZDc5MjFjZjcwZGU3ZGY5ZDEuLjk2MTJiYmJiNDU2YTUzYzE3YWEz
N2E4NDZkZGVmMmE1MTY3OTcwZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQpAQCAtMjI3Miw3ICsyMjcyLDcgQEAgc3RhdGljIFdlYkZyYW1lTG9hZFR5
cGUgdG9XZWJGcmFtZUxvYWRUeXBlKFdlYkNvcmU6OkZyYW1lTG9hZFR5cGUgZnJhbWVMb2FkVHlw
ZSkKICAgICBhdXRvIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAgICAgaWYgKCFj
b3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBjb3JlRnJhbWUtPmxvYWRlcigpLmNsaWVu
dCgpLmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKHsgdGl0bGUsIFdlYkNvcmU6OlRleHREaXJlY3Rp
b246OkxUUiB9KTsKKyAgICBjb3JlRnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmRpc3BhdGNoRGlk
UmVjZWl2ZVRpdGxlKHsgdGl0bGUsIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSIH0pOwogfQogCiAj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZTBlNjIwNDZhNjQ3NmExZjI1MmRlOTllNGY0NzEw
MDdiZGI5NGE1Li4zMWI1MzYyNjJmYzIzYzE1ZjM2NTliNmJjOTk2MWUyMjZjZmNlY2JlIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTkgQEAKKzIwMjEtMTItMjcgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNv
bT4KKworICAgICAgICBNb3ZlIEJpZGlSZXNvbHZlciB0byBQQUwKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDcxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2Vycy9jcHAucHk6CisgICAgICAgIChjaGVja19sYW5ndWFnZSk6CisgICAgICAgIChjaGVj
a19pZGVudGlmaWVyX25hbWVfaW5fZGVjbGFyYXRpb24pOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvU3RyaW5nV2l0aERpcmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIxLTEyLTI2ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVthMTF5
XSBTdG9wIHNldHRpbmcgbWFuYWdlcy1kZXNjZW5kYW50cyBvbiB3ZWIgcHJvY2VzcyByb290IG9i
amVjdCB3aXRoIEFUU1BJCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NoZWNrZXJzL2NwcC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMv
Y3BwLnB5CmluZGV4IDRkZmU3NzlhNzAxMzRmNmJjMmNmYmI1MTljZjY0NjYzMDIzYzVkNGEuLmM1
ZTc0OGY0Y2RmOWU1ZjU1NWUwYzUyODU5MWQzOGRjYmY2ZGQxOWYgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CkBAIC0yNTAzLDcgKzI1MDMsNyBAQCBk
ZWYgY2hlY2tfbmFtZXNwYWNlX2luZGVudGF0aW9uKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwg
ZmlsZV9leHRlbnNpb24sIGZpbGVfcwogCiAKICMgRW51bSBkZWNsYXJhdGlvbiBhbGxvd2xpc3QK
LV9BTExPV19BTExfVVBQRVJDQVNFX0VOVU0gPSBbJ0pTVG9rZW5UeXBlJywgJ01lcmlkaWVtJ10K
K19BTExPV19BTExfVVBQRVJDQVNFX0VOVU0gPSBbJ0pTVG9rZW5UeXBlJywgJ01lcmlkaWVtJywg
J1RleHREaXJlY3Rpb24nXQogCiAKIGRlZiBjaGVja19lbnVtX2Nhc2luZyhjbGVhbl9saW5lcywg
bGluZV9udW1iZXIsIGVudW1fc3RhdGUsIGVycm9yKToKQEAgLTM5NTUsNyArMzk1NSw3IEBAIGRl
ZiBjaGVja19sYW5ndWFnZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxl
X2V4dGVuc2lvbiwgaW5jbHVkZV9zCiAgICAgbWF0Y2hlZCA9IHJlLm1hdGNoKHInXHMqKChjb25z
dHxtdXRhYmxlKVxzKyk/KFthLXpBLVpfXVthLXpBLVowLTlfXSopXHMrW2EtekEtWl9dW2EtekEt
WjAtOV9dKlxzKjpccypcZCtccyo7JywgbGluZSkKICAgICBpZiBtYXRjaGVkOgogICAgICAgICAj
IE1ha2Ugc3VyZSB0aGUgdHlwZSBpcyBhbiBlbnVtIGFuZCBub3QgYW4gaW50ZWdyYWwgdHlwZQot
ICAgICAgICBpZiBub3QgbWF0Y2gocidib29sfGNoYXJ8KHNob3J0KFxzK2ludCk/KXxpbnR8bG9u
ZyhccysobG9uZ3xpbnQpKXwoc2lnbmVkfHVuc2lnbmVkKShccytpbnQpPycsIG1hdGNoZWQuZ3Jv
dXAoMykpOgorICAgICAgICBpZiBub3QgbWF0Y2gocidib29sfGNoYXJ8KHNob3J0KFxzK2ludCk/
KXxpbnR8dT9pbnQoOHwxNnwzMnw2NClfdHxsb25nKFxzKyhsb25nfGludCkpfChzaWduZWR8dW5z
aWduZWQpKFxzK2ludCk/JywgbWF0Y2hlZC5ncm91cCgzKSk6CiAgICAgICAgICAgICBlcnJvcihs
aW5lX251bWJlciwgJ3J1bnRpbWUvZW51bV9iaXRmaWVsZHMnLCA1LAogICAgICAgICAgICAgICAg
ICAgJ1BsZWFzZSBkZWNsYXJlIGVudW0gYml0ZmllbGRzIGFzIHVuc2lnbmVkIGludGVncmFsIHR5
cGVzLicpCiAKQEAgLTQxMjAsNiArNDEyMCwxMCBAQCBkZWYgY2hlY2tfaWRlbnRpZmllcl9uYW1l
X2luX2RlY2xhcmF0aW9uKGZpbGVuYW1lLCBsaW5lX251bWJlciwgbGluZSwgZmlsZV9zdGF0ZQog
ICAgICAgICAgICAgICAgIGFuZCBub3QgbW9kaWZpZWRfaWRlbnRpZmllciA9PSAiREZHX09QRVJB
VElPTiIKICAgICAgICAgICAgICAgICBhbmQgbm90IG1vZGlmaWVkX2lkZW50aWZpZXIgPT0gIkxP
R19DSEFOTkVMIgogICAgICAgICAgICAgICAgIGFuZCBub3QgbW9kaWZpZWRfaWRlbnRpZmllciA9
PSAiV1RGX0dVQVJERURfQllfTE9DSyIKKyAgICAgICAgICAgICAgICBhbmQgbm90IG1vZGlmaWVk
X2lkZW50aWZpZXIgPT0gIlVfRklSU1RfU1RST05HX0lTT0xBVEUiCisgICAgICAgICAgICAgICAg
YW5kIG5vdCBtb2RpZmllZF9pZGVudGlmaWVyID09ICJVX0xFRlRfVE9fUklHSFRfSVNPTEFURSIK
KyAgICAgICAgICAgICAgICBhbmQgbm90IG1vZGlmaWVkX2lkZW50aWZpZXIgPT0gIlVfUklHSFRf
VE9fTEVGVF9JU09MQVRFIgorICAgICAgICAgICAgICAgIGFuZCBub3QgbW9kaWZpZWRfaWRlbnRp
ZmllciA9PSAiVV9QT1BfRElSRUNUSU9OQUxfSVNPTEFURSIKICAgICAgICAgICAgICAgICBhbmQg
bm90IG1vZGlmaWVkX2lkZW50aWZpZXIuZmluZCgnY2hyb25vX2xpdGVyYWxzJykgPj0gMCk6CiAg
ICAgICAgICAgICAgICAgZXJyb3IobGluZV9udW1iZXIsICdyZWFkYWJpbGl0eS9uYW1pbmcvdW5k
ZXJzY29yZXMnLCA0LCBpZGVudGlmaWVyICsgIiBpcyBpbmNvcnJlY3RseSBuYW1lZC4gRG9uJ3Qg
dXNlIHVuZGVyc2NvcmVzIGluIHlvdXIgaWRlbnRpZmllciBuYW1lcy4iKQogCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVy
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwCmluZGV4IGJjZjAzMjk1NWJlMmViZGZmZTY5M2Q4YThiYmQ4MmJmOTQyZjlkOTku
LmRiNWYyMTY1MzRjOTA2MTQ0ZmVlMWE3NzczZjEzNzdjNjZiM2RhOTkgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwCkBAIC0zNTAsNyArMzUwLDcgQEAgVEVTVF9GKENvbXBsZXhUZXh0Q29udHJvbGxl
clRlc3QsIFRvdGFsV2lkdGhXaXRoSnVzdGlmaWNhdGlvbikKIAogICAgIFVDaGFyIGNoYXJhY3Rl
cnNbXSA9IHsgMHg2NDQsICcgJywgMHg2NDQsICcgJywgMHg2NDQgfTsKICAgICBzaXplX3QgY2hh
cmFjdGVyc0xlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY2hhcmFjdGVycyk7Ci0gICAgVGV4dFJ1
biB0ZXh0UnVuKFN0cmluZ1ZpZXcoY2hhcmFjdGVycywgY2hhcmFjdGVyc0xlbmd0aCksIDAsIDE0
LCBEZWZhdWx0RXhwYW5zaW9uLCBUZXh0RGlyZWN0aW9uOjpSVEwpOworICAgIFRleHRSdW4gdGV4
dFJ1bihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnNMZW5ndGgpLCAwLCAxNCwgRGVm
YXVsdEV4cGFuc2lvbiwgUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwpOwogICAgIGF1dG8gcnVuID0g
Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKGFkdmFuY2VzLCBv
cmlnaW5zLCB7IDUsIDYsIDcsIDgsIDkgfSwgeyA0LCAzLCAyLCAxLCAwIH0sIGluaXRpYWxBZHZh
bmNlLCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAsIGNoYXJhY3RlcnNMZW5ndGgs
IDAsIDUsIGZhbHNlKTsKICAgICBWZWN0b3I8UmVmPENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29t
cGxleFRleHRSdW4+PiBydW5zOwogICAgIHJ1bnMuYXBwZW5kKFdURk1vdmUocnVuKSk7CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RyaW5nV2l0aERpcmVj
dGlvbi5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RyaW5nV2l0aERp
cmVjdGlvbi5jcHAKaW5kZXggYmQ5NDVmYmRiZWE5MTA1ZDhjOTg3ZWRhNTY2NzMzZTEyOGY4Y2Q1
Mi4uMjcxOGU2ODJiYTU1YzAzZTI5OWIwZDMwYWUwZjlhNjViNDA2YzYxMSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0cmluZ1dpdGhEaXJlY3Rpb24uY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TdHJpbmdXaXRoRGlyZWN0
aW9uLmNwcApAQCAtMzMsMTMgKzMzLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJl
YW0mIG9zLCBjb25zdCBUZXh0RGlyZWN0aW9uJiBkaXJlY3Rpb24pCitzdGQ6Om9zdHJlYW0mIG9w
ZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgUEFMOjpUZXh0RGlyZWN0aW9uJiBkaXJl
Y3Rpb24pCiB7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBjYXNlIFRleHREaXJlY3Rp
b246OkxUUjoKKyAgICBjYXNlIFBBTDo6VGV4dERpcmVjdGlvbjo6TFRSOgogICAgICAgICBvcyA8
PCAiVGV4dERpcmVjdGlvbjo6TFRSIjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0RGly
ZWN0aW9uOjpSVEw6CisgICAgY2FzZSBQQUw6OlRleHREaXJlY3Rpb246OlJUTDoKICAgICAgICAg
b3MgPDwgIlRleHREaXJlY3Rpb246OlJUTCI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTUy
LDQ1ICs1Miw0NSBAQCBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIFRFU1QoU3RyaW5nV2l0
aERpcmVjdGlvbiwgVHJ1bmNhdGVBdEVuZFdpdGhMZWZ0VG9SaWdodFN0cmluZykKIHsKLSAgICBT
dHJpbmdXaXRoRGlyZWN0aW9uIHN0cmluZyB7ICJDYXBwdWNjaW5vIiwgVGV4dERpcmVjdGlvbjo6
TFRSIH07CisgICAgU3RyaW5nV2l0aERpcmVjdGlvbiBzdHJpbmcgeyAiQ2FwcHVjY2lubyIsIFBB
TDo6VGV4dERpcmVjdGlvbjo6TFRSIH07CiAgICAgU3RyaW5nV2l0aERpcmVjdGlvbiByZXN1bHQ7
CiAKICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5nLCAwKTsKLSAgICBFWFBFQ1Rf
RVEoVGV4dERpcmVjdGlvbjo6TFRSLCByZXN1bHQuZGlyZWN0aW9uKTsKKyAgICBFWFBFQ1RfRVEo
UEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsIHJlc3VsdC5kaXJlY3Rpb24pOwogICAgIEVYUEVDVF9F
USgiIiwgcmVzdWx0LnN0cmluZyk7CiAKICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3Ry
aW5nLCAxKTsKLSAgICBFWFBFQ1RfRVEoVGV4dERpcmVjdGlvbjo6TFRSLCByZXN1bHQuZGlyZWN0
aW9uKTsKKyAgICBFWFBFQ1RfRVEoUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsIHJlc3VsdC5kaXJl
Y3Rpb24pOwogICAgIEVYUEVDVF9FUSgiQyIsIHJlc3VsdC5zdHJpbmcpOwogCiAgICAgcmVzdWx0
ID0gdHJ1bmNhdGVGcm9tRW5kKHN0cmluZywgMik7Ci0gICAgRVhQRUNUX0VRKFRleHREaXJlY3Rp
b246OkxUUiwgcmVzdWx0LmRpcmVjdGlvbik7CisgICAgRVhQRUNUX0VRKFBBTDo6VGV4dERpcmVj
dGlvbjo6TFRSLCByZXN1bHQuZGlyZWN0aW9uKTsKICAgICBFWFBFQ1RfRVEoIkNhIiwgcmVzdWx0
LnN0cmluZyk7CiAKICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3RyaW5nLCAxMDAwKTsK
LSAgICBFWFBFQ1RfRVEoVGV4dERpcmVjdGlvbjo6TFRSLCByZXN1bHQuZGlyZWN0aW9uKTsKKyAg
ICBFWFBFQ1RfRVEoUEFMOjpUZXh0RGlyZWN0aW9uOjpMVFIsIHJlc3VsdC5kaXJlY3Rpb24pOwog
ICAgIEVYUEVDVF9FUSgiQ2FwcHVjY2lubyIsIHJlc3VsdC5zdHJpbmcpOwogfQogCiBURVNUKFN0
cmluZ1dpdGhEaXJlY3Rpb24sIFRydW5jYXRlQXRFbmRXaXRoUmlnaHRUb0xlZnRTdHJpbmcpCiB7
Ci0gICAgU3RyaW5nV2l0aERpcmVjdGlvbiBzdHJpbmcgeyBTdHJpbmc6OmZyb21VVEY4KCLXp9a4
16TWvNeV1rzXpta0J9eZ16DXlda5IiksIFRleHREaXJlY3Rpb246OlJUTCB9OworICAgIFN0cmlu
Z1dpdGhEaXJlY3Rpb24gc3RyaW5nIHsgU3RyaW5nOjpmcm9tVVRGOCgi16fWuNek1rzXlda816bW
tCfXmdeg15XWuSIpLCBQQUw6OlRleHREaXJlY3Rpb246OlJUTCB9OwogICAgIFN0cmluZ1dpdGhE
aXJlY3Rpb24gcmVzdWx0OwogCiAgICAgcmVzdWx0ID0gdHJ1bmNhdGVGcm9tRW5kKHN0cmluZywg
MCk7Ci0gICAgRVhQRUNUX0VRKFRleHREaXJlY3Rpb246OlJUTCwgcmVzdWx0LmRpcmVjdGlvbik7
CisgICAgRVhQRUNUX0VRKFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0aW9u
KTsKICAgICBFWFBFQ1RfRVEoIiIsIHJlc3VsdC5zdHJpbmcpOwogCiAgICAgcmVzdWx0ID0gdHJ1
bmNhdGVGcm9tRW5kKHN0cmluZywgMSk7Ci0gICAgRVhQRUNUX0VRKFRleHREaXJlY3Rpb246OlJU
TCwgcmVzdWx0LmRpcmVjdGlvbik7CisgICAgRVhQRUNUX0VRKFBBTDo6VGV4dERpcmVjdGlvbjo6
UlRMLCByZXN1bHQuZGlyZWN0aW9uKTsKICAgICBFWFBFQ1RfRVEoU3RyaW5nOjpmcm9tVVRGOCgi
16ciKSwgcmVzdWx0LnN0cmluZyk7CiAKICAgICByZXN1bHQgPSB0cnVuY2F0ZUZyb21FbmQoc3Ry
aW5nLCAyKTsKLSAgICBFWFBFQ1RfRVEoVGV4dERpcmVjdGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0
aW9uKTsKKyAgICBFWFBFQ1RfRVEoUEFMOjpUZXh0RGlyZWN0aW9uOjpSVEwsIHJlc3VsdC5kaXJl
Y3Rpb24pOwogICAgIEVYUEVDVF9FUShTdHJpbmc6OmZyb21VVEY4KCLXp9a4IiksIHJlc3VsdC5z
dHJpbmcpOwogCiAgICAgcmVzdWx0ID0gdHJ1bmNhdGVGcm9tRW5kKHN0cmluZywgMTAwMCk7Ci0g
ICAgRVhQRUNUX0VRKFRleHREaXJlY3Rpb246OlJUTCwgcmVzdWx0LmRpcmVjdGlvbik7CisgICAg
RVhQRUNUX0VRKFBBTDo6VGV4dERpcmVjdGlvbjo6UlRMLCByZXN1bHQuZGlyZWN0aW9uKTsKICAg
ICBFWFBFQ1RfRVEoU3RyaW5nOjpmcm9tVVRGOCgi16fWuNek1rzXlda816bWtCfXmdeg15XWuSIp
LCByZXN1bHQuc3RyaW5nKTsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="473845"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>