<?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>51605</bug_id>
          
          <creation_ts>2010-12-25 00:11:46 -0800</creation_ts>
          <short_desc>Move ANGLE to Sources/ThirdParty</short_desc>
          <delta_ts>2010-12-26 21:51:58 -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>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>51606</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>mjs</cc>
    
    <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>326801</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-25 00:11:46 -0800</bug_when>
    <thetext>This move looks pretty easy.  I don&apos;t think it should affect the Chromium build as Chromium pulls in ANGLE directly via the Google Code project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326803</commentid>
    <comment_count>1</comment_count>
      <attachid>77435</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-25 00:15:11 -0800</bug_when>
    <thetext>Created attachment 77435
mr. patch

This looks easy.  Maybe deceptively easy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326805</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-12-25 00:54:49 -0800</bug_when>
    <thetext>Please coordinate landing this with someone from Apple. It’ll require that we update some of our internal build scripts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326806</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-25 00:59:14 -0800</bug_when>
    <thetext>Who should I coordinate with?  I&apos;m just finishing some some local testing, but I think this patch is ready to go whenever its convenient on the Apple side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326808</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-12-25 01:02:45 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Who should I coordinate with?  I&apos;m just finishing some some local testing, but I think this patch is ready to go whenever its convenient on the Apple side.

Anyone that’s around at the time that you go to land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326809</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-25 01:04:28 -0800</bug_when>
    <thetext>&gt; Anyone that’s around at the time that you go to land it.

If I landed it in the next 30 minutes, would you be around?  I&apos;m also happy to wait until normal business hours.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326810</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-12-25 01:06:26 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Anyone that’s around at the time that you go to land it.
&gt; 
&gt; If I landed it in the next 30 minutes, would you be around?  I&apos;m also happy to wait until normal business hours.

I’m not near a computer so I couldn’t make the necessary changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326811</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-25 01:07:57 -0800</bug_when>
    <thetext>&gt; I’m not near a computer so I couldn’t make the necessary changes.

Ok.  No problem.  I hope the holidays are finding you well.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326812</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-25 01:17:55 -0800</bug_when>
    <thetext>** BUILD SUCCEEDED **

This patch build cleanly on Apple Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326912</commentid>
    <comment_count>9</comment_count>
      <attachid>77435</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-26 13:28:26 -0800</bug_when>
    <thetext>Comment on attachment 77435
mr. patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326964</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-26 21:51:58 -0800</bug_when>
    <thetext>Landed in 74674.  Maciej has kindly offered to make the internal change.  Thanks everyone.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77435</attachid>
            <date>2010-12-25 00:15:11 -0800</date>
            <delta_ts>2010-12-26 13:28:26 -0800</delta_ts>
            <desc>mr. patch</desc>
            <filename>move-angle.patch</filename>
            <type>text/plain</type>
            <size>1607324</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDc0NjU4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTY2IEBACisyMDEwLTEy
LTI1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBBTkdMRSB0byBTb3VyY2VzL1RoaXJk
UGFydHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUx
NjA1CisKKyAgICAgICAgQWN0dWFsbHkgbW92ZSBBTkdMRSBhbmQgdXBkYXRlIHRoZSBNYWtlZmls
ZS4KKworICAgICAgICAqIEFOR0xFOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL0FOR0xFLnhj
b2RlcHJvajogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL0NvbmZpZ3VyYXRpb25zOiBSZW1v
dmVkLgorICAgICAgICAqIEFOR0xFL0NvbmZpZ3VyYXRpb25zL0FOR0xFLnhjY29uZmlnOiBSZW1v
dmVkLgorICAgICAgICAqIEFOR0xFL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc6IFJlbW92
ZWQuCisgICAgICAgICogQU5HTEUvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmln
OiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL01ha2VmaWxlOiBSZW1vdmVkLgorICAgICAgICAq
IEFOR0xFL2luY2x1ZGU6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvaW5jbHVkZS9FR0w6IFJl
bW92ZWQuCisgICAgICAgICogQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmg6IFJlbW92ZWQuCisgICAg
ICAgICogQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0Lmg6IFJlbW92ZWQuCisgICAgICAgICogQU5H
TEUvaW5jbHVkZS9FR0wvZWdscGxhdGZvcm0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9p
bmNsdWRlL0dMRVMyOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMnBsYXRmb3JtLmg6IFJlbW92
ZWQuCisgICAgICAgICogQU5HTEUvaW5jbHVkZS9HTFNMQU5HOiBSZW1vdmVkLgorICAgICAgICAq
IEFOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmg6IFJlbW92ZWQuCisgICAgICAgICog
QU5HTEUvaW5jbHVkZS9LSFI6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvaW5jbHVkZS9LSFIv
a2hycGxhdGZvcm0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmM6IFJlbW92ZWQuCisg
ICAgICAgICogQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvajogUmVtb3ZlZC4KKyAgICAg
ICAgKiBBTkdMRS9zcmMvYnVpbGRfYW5nbGUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogUmVt
b3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tbW9uOiBSZW1vdmVkLgorICAgICAgICAqIEFO
R0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3Ny
Yy9jb21tb24vZGVidWcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21tb24v
ZGVidWcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGlsZXI6IFJlbW92ZWQu
CisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oOiBSZW1vdmVkLgorICAg
ICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBBTkdMRS9zcmMvY29tcGlsZXIvQ29tbW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogQU5H
TEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdM
RS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3Ny
Yy9jb21waWxlci9JbmZvU2luay5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21w
aWxlci9Jbml0aWFsaXplLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGls
ZXIvSW5pdGlhbGl6ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplRGxsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZURsbC5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9J
bml0aWFsaXplR2xvYmFscy5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0Lmg6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3Jj
L2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9z
cmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9z
cmMvY29tcGlsZXIvTU1hcC5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRHTFNMLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0R0xTTC5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRITFNMLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0
SExTTC5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBl
ci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oOiBSZW1v
dmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFsaXZlLmg6IFJl
bW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmg6IFJlbW92ZWQu
CisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmg6IFJlbW92ZWQuCisgICAgICAgICog
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIEFOR0xFL3NyYy9jb21waWxlci9UeXBlcy5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xF
L3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9z
cmMvY29tcGlsZXIvZGVidWcuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21w
aWxlci9kZWJ1Zy5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9nbHNs
YW5nLmw6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueTog
UmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6IFJlbW92
ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmg6IFJl
bW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9wb3NpeC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3I6IFJlbW92ZWQuCisg
ICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmM6IFJlbW92ZWQu
CisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmg6IFJlbW92
ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmg6
IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
YzogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2Nw
cC5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
Y3Bwc3RydWN0LmM6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9tZW1vcnkuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL21lbW9yeS5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmg6IFJlbW92ZWQuCisgICAgICAgICog
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmM6IFJlbW92ZWQuCisgICAg
ICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmg6IFJlbW92ZWQu
CisgICAgICAgICogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJv
bHMuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3N5bWJvbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL3Rva2Vucy5jOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvdG9rZW5zLmg6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2NvbXBp
bGVyL3Rvb2xzOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9jb21waWxlci91bmlzdGQu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvbGliRUdMOiBSZW1vdmVkLgorICAgICAg
ICAqIEFOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdM
RS9zcmMvbGliRUdML0NvbmZpZy5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9saWJF
R0wvRGlzcGxheS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2xpYkVHTC9EaXNw
bGF5Lmg6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuZGVmOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xF
L3NyYy9saWJFR0wvbGliRUdMLnZjcHJvajogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMv
bGliRUdML21haW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9saWJFR0wvbWFp
bi5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9saWJHTEVTdjI6IFJlbW92ZWQuCisg
ICAgICAgICogQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBBTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9z
cmMvbGliR0xFU3YyL0J1ZmZlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2xp
YkdMRVN2Mi9CdWZmZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9saWJHTEVTdjIvQ29u
dGV4dC5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZm
ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZm
ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oOiBSZW1v
dmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVmQ291bnRPYmplY3QuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVmQ291bnRPYmplY3QuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFn
ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnk6IFJlbW92ZWQuCisgICAgICAgICogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRl
eERhdGFNYW5hZ2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvbGliR0xFU3Yy
L2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUv
c3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBB
TkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L3ZlcnRleGNvbnZlcnNpb24uaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmOiBSZW1vdmVkLgor
ICAgICAgICAqIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvajogUmVtb3ZlZC4K
KyAgICAgICAgKiBBTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oOiBSZW1vdmVkLgorICAgICAgICAqIEFOR0xF
L3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBTkdMRS9zcmMv
bGliR0xFU3YyL3V0aWxpdGllcy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogQU5HTEUvc3JjL2xp
YkdMRVN2Mi91dGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNYWtlZmlsZToKKyAgICAg
ICAgKiBTb3VyY2VzL1RoaXJkUGFydHk6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMvVGhpcmRQ
YXJ0eS9BTkdMRTogQ29waWVkIGZyb20gQU5HTEUuCisKIDIwMTAtMTItMjQgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZWQgbWFrZWZpbGVzIHVzZWQgYnkg
QXBwbGUgZW5naW5lZXJzIHRvIGZpeCBidWlsZCB3aXRoIHRoZQpJbmRleDogTWFrZWZpbGUKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTWFrZWZpbGUJKHJldmlzaW9uIDc0NjU4KQorKysgTWFrZWZpbGUJKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw0IEBACi1NT0RVTEVTID0gSmF2YVNjcmlwdENvcmUgU291cmNl
cy9KYXZhU2NyaXB0R2x1ZSBBTkdMRSBXZWJDb3JlIFdlYktpdCBXZWJLaXQyIFRvb2xzIAorTU9E
VUxFUyA9IEphdmFTY3JpcHRDb3JlIFNvdXJjZXMvSmF2YVNjcmlwdEdsdWUgU291cmNlcy9UaGly
ZFBhcnR5L0FOR0xFIFdlYkNvcmUgV2ViS2l0IFdlYktpdDIgVG9vbHMgCiAKIGFsbDoKIAlAZm9y
IGRpciBpbiAkKE1PRFVMRVMpOyBkbyAke01BS0V9ICRAIC1DICQkZGlyOyBleGl0X3N0YXR1cz0k
JD87IFwKSW5kZXg6IEFOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDU4MiArMCwwIEBACi0yMDEwLTEyLTAxICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtlbkBh
cHBsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KLQotICAgICAgICB2
Y3Byb2ogY2hhbmdlcyBjYW4ndCBiZSBhcHBsaWVkIGNsZWFubHkgYnkgdGhlIFdpbmRvd3MgRVdT
IGJvdAotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAz
MjgKLQotICAgICAgICAqIHNyYy9saWJFR0wvbGliRUdMLnZjcHJvajogQWRkZWQgcHJvcGVydHkg
c3ZuOmVvbC1zdHlsZS4KLSAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2o6
IEFkZGVkIHByb3BlcnR5IHN2bjplb2wtc3R5bGUuCi0KLTIwMTAtMTEtMDMgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgotCi0gICAgICAgIFVwZGF0ZWQgWGNvZGUgcHJvamVjdHMgYnkg
b3BlbmluZyB0aGVtIHdpdGggWGNvZGUgMy4yLjQuCi0gICAgICAgIFVwZGF0ZWQgc3ZuOmlnbm9y
ZSBmb3IgWGNvZGUgcHJvamVjdHMuCi0KLSAgICAgICAgKiBBTkdMRS54Y29kZXByb2o6IEFkZGVk
IHByb3BlcnR5IHN2bjppZ25vcmUuCi0gICAgICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogVXBkYXRlZCB3aXRoIFhjb2RlIDMuMi40LgotICAgICAgICAqIHNyYy9idWlsZF9h
bmdsZS54Y29kZXByb2o6IEFkZGVkIHByb3BlcnR5IHN2bjppZ25vcmUuCi0gICAgICAgICogc3Jj
L2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFVwZGF0ZWQgd2l0aCBYY29k
ZSAzLjIuNC4KLQotMjAxMC0wOS0wMSAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgotCi0g
ICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KLQotICAgICAgICBSb2xsIEFOR0xF
IHVuZGVyIHdlYmtpdCB0byByNDAyCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NTAwNAotCi0gICAgICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKLSAgICAgICAgKiBpbmNsdWRlL0dMRVMyL2dsMmV4dC5oOgotICAgICAgICAqIGlu
Y2x1ZGUvR0xTTEFORy9SZXNvdXJjZUxpbWl0cy5oOiBSZW1vdmVkLgotICAgICAgICAqIGluY2x1
ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmg6Ci0gICAgICAgICogc3JjL2NvbXBpbGVyL0Jhc2VUeXBl
cy5oOgotICAgICAgICAoZ2V0UHJlY2lzaW9uU3RyaW5nKToKLSAgICAgICAgKGdldEJhc2ljU3Ry
aW5nKToKLSAgICAgICAgKElzU2FtcGxlcik6Ci0gICAgICAgIChnZXRRdWFsaWZpZXJTdHJpbmcp
OgotICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcDoKLSAgICAgICAgKEJ1aWx0
SW5Db25zdGFudHMpOgotICAgICAgICAoSWRlbnRpZnlCdWlsdElucyk6Ci0gICAgICAgICogc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemUuaDoKLSAgICAgICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZURsbC5jcHA6Ci0gICAgICAgIChJbml0UHJvY2Vzcyk6Ci0gICAgICAgIChEZXRhY2hQcm9jZXNz
KToKLSAgICAgICAgKEluaXRUaHJlYWQpOgotICAgICAgICAoRGV0YWNoVGhyZWFkKToKLSAgICAg
ICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oOgotICAgICAgICAqIHNyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0Lmg6Ci0gICAgICAgICogc3JjL2NvbXBpbGVyL0ludGVy
bWVkaWF0ZS5jcHA6Ci0gICAgICAgIChHZXRIaWdoZXJQcmVjaXNpb24pOgotICAgICAgICAoVElu
dGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aCk6Ci0gICAgICAgIChUSW50ZXJtZWRpYXRlOjpzZXRB
Z2dyZWdhdGVPcGVyYXRvcik6Ci0gICAgICAgIChUSW50ZXJtZWRpYXRlOjphZGRDb21tYSk6Ci0g
ICAgICAgIChUSW50ZXJtZWRpYXRlOjpwb3N0UHJvY2Vzcyk6Ci0gICAgICAgIChUSW50ZXJtQmlu
YXJ5Ojpwcm9tb3RlKToKLSAgICAgICAgKENvbXBhcmVTdHJ1Y3QpOgotICAgICAgICAqIHNyYy9j
b21waWxlci9PdXRwdXRHTFNMLmNwcDoKLSAgICAgICAgKFRPdXRwdXRHTFNMOjp3cml0ZUZ1bmN0
aW9uUGFyYW1ldGVycyk6Ci0gICAgICAgIChUT3V0cHV0R0xTTDo6dmlzaXRVbmFyeSk6Ci0gICAg
ICAgIChUT3V0cHV0R0xTTDo6dmlzaXRCcmFuY2gpOgotICAgICAgICAqIHNyYy9jb21waWxlci9P
dXRwdXRITFNMLmNwcDoKLSAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpoZWFkZXIpOgotICAgICAg
ICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KToKLSAgICAgICAgKHNoOjpPdXRwdXRITFNM
Ojp2aXNpdEFnZ3JlZ2F0ZSk6Ci0gICAgICAgIChzaDo6T3V0cHV0SExTTDo6aGFuZGxlRXhjZXNz
aXZlTG9vcCk6Ci0gICAgICAgIChzaDo6T3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IpOgotICAg
ICAgICAqIHNyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHA6Ci0gICAgICAgIChUUGFyc2VDb250
ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlY2spOgotICAgICAgICAoVFBhcnNlQ29udGV4dDo6c2Ft
cGxlckVycm9yQ2hlY2spOgotICAgICAgICAoVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNr
KToKLSAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbik6Ci0gICAgICAgIChUUGFy
c2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIpOgotICAgICAgICAoVFBhcnNlQ29udGV4dDo6
YWRkQ29uc3RydWN0b3IpOgotICAgICAgICAoVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3Qp
OgotICAgICAgICAoRnJlZVBhcnNlQ29udGV4dEluZGV4KToKLSAgICAgICAgKEdldEdsb2JhbFBh
cnNlQ29udGV4dCk6Ci0gICAgICAgICogc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oOgotICAgICAg
ICAoVFBvb2xBbGxvY2F0b3I6OnRIZWFkZXI6OnRIZWFkZXIpOgotICAgICAgICAocG9vbF9hbGxv
Y2F0b3I6OmFsbG9jYXRlKToKLSAgICAgICAgKHBvb2xfYWxsb2NhdG9yOjpkZWFsbG9jYXRlKToK
LSAgICAgICAgKiBzcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHA6Ci0gICAgICAgIChTaEluaXRp
YWxpemUpOgotICAgICAgICAoU2hGaW5hbGl6ZSk6Ci0gICAgICAgIChTaEluaXRCdWlsdEluUmVz
b3VyY2UpOgotICAgICAgICAqIHNyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHA6Ci0gICAgICAg
IChUVHlwZTo6Z2V0U3RydWN0U2l6ZSk6Ci0gICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJvbFRh
YmxlLmg6Ci0gICAgICAgIChUVmFyaWFibGU6OnNldFF1YWxpZmllcik6Ci0gICAgICAgICogc3Jj
L2NvbXBpbGVyL1R5cGVzLmg6Ci0gICAgICAgIChUVHlwZTo6VFR5cGUpOgotICAgICAgICAoVFR5
cGU6OmdldEJhc2ljVHlwZSk6Ci0gICAgICAgIChUVHlwZTo6c2V0QmFzaWNUeXBlKToKLSAgICAg
ICAgKFRUeXBlOjpnZXRQcmVjaXNpb24pOgotICAgICAgICAoVFR5cGU6OnNldFByZWNpc2lvbik6
Ci0gICAgICAgIChUVHlwZTo6Z2V0UXVhbGlmaWVyKToKLSAgICAgICAgKFRUeXBlOjpzZXRRdWFs
aWZpZXIpOgotICAgICAgICAoVFR5cGU6OmdldE5vbWluYWxTaXplKToKLSAgICAgICAgKFRUeXBl
OjpzZXROb21pbmFsU2l6ZSk6Ci0gICAgICAgIChUVHlwZTo6aXNNYXRyaXgpOgotICAgICAgICAo
VFR5cGU6OnNldE1hdHJpeCk6Ci0gICAgICAgIChUVHlwZTo6aXNBcnJheSk6Ci0gICAgICAgIChU
VHlwZTo6Z2V0QXJyYXlTaXplKToKLSAgICAgICAgKFRUeXBlOjpzZXRBcnJheVNpemUpOgotICAg
ICAgICAoVFR5cGU6OmdldE1heEFycmF5U2l6ZSk6Ci0gICAgICAgIChUVHlwZTo6c2V0TWF4QXJy
YXlTaXplKToKLSAgICAgICAgKFRUeXBlOjpjbGVhckFycmF5bmVzcyk6Ci0gICAgICAgIChUVHlw
ZTo6c2V0QXJyYXlJbmZvcm1hdGlvblR5cGUpOgotICAgICAgICAoVFR5cGU6OmdldEFycmF5SW5m
b3JtYXRpb25UeXBlKToKLSAgICAgICAgKFRUeXBlOjppc1ZlY3Rvcik6Ci0gICAgICAgIChUVHlw
ZTo6aXNTY2FsYXIpOgotICAgICAgICAoVFR5cGU6OnNldFN0cnVjdCk6Ci0gICAgICAgIChUVHlw
ZTo6Z2V0VHlwZU5hbWUpOgotICAgICAgICAoVFR5cGU6OnNldFR5cGVOYW1lKToKLSAgICAgICAg
KFRUeXBlOjppc0ZpZWxkKToKLSAgICAgICAgKFRUeXBlOjpnZXRGaWVsZE5hbWUpOgotICAgICAg
ICAoVFR5cGU6OnNldEZpZWxkTmFtZSk6Ci0gICAgICAgIChUVHlwZTo6Z2V0QmFzaWNTdHJpbmcp
OgotICAgICAgICAoVFR5cGU6OmdldFByZWNpc2lvblN0cmluZyk6Ci0gICAgICAgIChUVHlwZTo6
Z2V0UXVhbGlmaWVyU3RyaW5nKToKLSAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy5sOgot
ICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nLnk6Ci0gICAgICAgICogc3JjL2NvbXBpbGVy
L2ludGVybWVkaWF0ZS5oOgotICAgICAgICAoVEludGVybU5vZGU6OmdldExpbmUpOgotICAgICAg
ICAoVEludGVybU5vZGU6OnNldExpbmUpOgotICAgICAgICAoVEludGVybVR5cGVkOjpnZXRBc1R5
cGVkKToKLSAgICAgICAgKFRJbnRlcm1UeXBlZDo6c2V0VHlwZSk6Ci0gICAgICAgIChUSW50ZXJt
VHlwZWQ6OmdldFR5cGUpOgotICAgICAgICAoVEludGVybVR5cGVkOjpnZXRUeXBlUG9pbnRlcik6
Ci0gICAgICAgIChUSW50ZXJtVHlwZWQ6OmdldEJhc2ljVHlwZSk6Ci0gICAgICAgIChUSW50ZXJt
VHlwZWQ6OmdldFF1YWxpZmllcik6Ci0gICAgICAgIChUSW50ZXJtVHlwZWQ6OmdldFByZWNpc2lv
bik6Ci0gICAgICAgIChUSW50ZXJtVHlwZWQ6OmdldE5vbWluYWxTaXplKToKLSAgICAgICAgKFRJ
bnRlcm1UeXBlZDo6aXNNYXRyaXgpOgotICAgICAgICAoVEludGVybVR5cGVkOjppc0FycmF5KToK
LSAgICAgICAgKFRJbnRlcm1UeXBlZDo6aXNWZWN0b3IpOgotICAgICAgICAoVEludGVybVR5cGVk
Ojppc1NjYWxhcik6Ci0gICAgICAgIChUSW50ZXJtVHlwZWQ6OmdldEJhc2ljU3RyaW5nKToKLSAg
ICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0UXVhbGlmaWVyU3RyaW5nKToKLSAgICAgICAgKFRJbnRl
cm1TeW1ib2w6OmdldElkKToKLSAgICAgICAgKFRJbnRlcm1TeW1ib2w6OmdldFN5bWJvbCk6Ci0g
ICAgICAgIChUSW50ZXJtT3BlcmF0b3I6OnNldE9wKToKLSAgICAgICAgKFRJbnRlcm1CaW5hcnk6
OnNldExlZnQpOgotICAgICAgICAoVEludGVybUJpbmFyeTo6c2V0UmlnaHQpOgotICAgICAgICAo
VEludGVybUJpbmFyeTo6Z2V0TGVmdCk6Ci0gICAgICAgIChUSW50ZXJtQmluYXJ5OjpnZXRSaWdo
dCk6Ci0gICAgICAgIChUSW50ZXJtVW5hcnk6OnNldE9wZXJhbmQpOgotICAgICAgICAoVEludGVy
bVVuYXJ5OjpnZXRPcGVyYW5kKToKLSAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OmdldEFzQWdn
cmVnYXRlKToKLSAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OmdldFNlcXVlbmNlKToKLSAgICAg
ICAgKFRJbnRlcm1BZ2dyZWdhdGU6OnNldE5hbWUpOgotICAgICAgICAoVEludGVybUFnZ3JlZ2F0
ZTo6Z2V0TmFtZSk6Ci0gICAgICAgIChUSW50ZXJtQWdncmVnYXRlOjpzZXRVc2VyRGVmaW5lZCk6
Ci0gICAgICAgIChUSW50ZXJtQWdncmVnYXRlOjppc1VzZXJEZWZpbmVkKToKLSAgICAgICAgKFRJ
bnRlcm1BZ2dyZWdhdGU6OmdldFF1YWxpZmllcik6Ci0gICAgICAgIChUSW50ZXJtQWdncmVnYXRl
OjpzZXRPcHRpbWl6ZSk6Ci0gICAgICAgIChUSW50ZXJtQWdncmVnYXRlOjpzZXREZWJ1Zyk6Ci0g
ICAgICAgIChUSW50ZXJtU2VsZWN0aW9uOjpnZXRDb25kaXRpb24pOgotICAgICAgICAoVEludGVy
bVNlbGVjdGlvbjo6Z2V0VHJ1ZUJsb2NrKToKLSAgICAgICAgKFRJbnRlcm1TZWxlY3Rpb246Omdl
dEZhbHNlQmxvY2spOgotICAgICAgICAoVEludGVybVNlbGVjdGlvbjo6Z2V0QXNTZWxlY3Rpb25O
b2RlKToKLSAgICAgICAgKiBzcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHA6Ci0gICAgICAgIChU
Q29uc3RUcmF2ZXJzZXI6OlRDb25zdFRyYXZlcnNlcik6Ci0gICAgICAgICogc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9hdG9tLmM6Ci0gICAgICAgIChJbml0QXRvbVRhYmxlKToKLSAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaDoKLSAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL2NvbXBpbGUuaDoKLSAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2NwcC5jOgotICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmg6
Ci0gICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYzoKLSAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jOgotICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5Lmg6Ci0gICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9wYXJzZXIuaDoKLSAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3ByZXByb2Nlc3MuaDoKLSAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5u
ZXIuYzoKLSAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaDoKLSAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oOgotICAgICAgICAq
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jOgotICAgICAgICAoTmV3U3ltYm9s
KToKLSAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaDoKLSAgICAg
ICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jOgotICAgICAgICAoUmVjb3Jk
VG9rZW4pOgotICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmg6Ci0g
ICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKLSAgICAgICAgKGVnbDo6RGlzcGxheTo6
RGlzcGxheSk6Ci0gICAgICAgIChlZ2w6OkRpc3BsYXk6OmluaXRpYWxpemUpOgotICAgICAgICAo
ZWdsOjpEaXNwbGF5Ojp0ZXJtaW5hdGUpOgotICAgICAgICAoZWdsOjpEaXNwbGF5OjpjcmVhdGVE
ZXZpY2UpOgotICAgICAgICAoZWdsOjpEaXNwbGF5OjpjcmVhdGVXaW5kb3dTdXJmYWNlKToKLSAg
ICAgICAgKGVnbDo6RGlzcGxheTo6Y3JlYXRlQ29udGV4dCk6Ci0gICAgICAgIChlZ2w6OkRpc3Bs
YXk6OmdldE11bHRpU2FtcGxlU3VwcG9ydCk6Ci0gICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldENv
bXByZXNzZWRUZXh0dXJlU3VwcG9ydCk6Ci0gICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5Lmg6
Ci0gICAgICAgICogc3JjL2xpYkVHTC9TdXJmYWNlLmNwcDoKLSAgICAgICAgKGVnbDo6U3VyZmFj
ZTo6U3VyZmFjZSk6Ci0gICAgICAgIChlZ2w6OlN1cmZhY2U6OnJlc2V0U3dhcENoYWluKToKLSAg
ICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0V2luZG93SGFuZGxlKToKLSAgICAgICAgKGVnbDo6U3Vy
ZmFjZTo6d3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKToKLSAgICAgICAgKGVnbDo6U3VyZmFjZTo6
YXBwbHlGbGlwU3RhdGUpOgotICAgICAgICAoZWdsOjpTdXJmYWNlOjpyZWxlYXNlUmVjb3JkZWRT
dGF0ZSk6Ci0gICAgICAgIChlZ2w6OlN1cmZhY2U6OmNoZWNrRm9yV2luZG93UmVzaXplKToKLSAg
ICAgICAgKGVnbDo6U3VyZmFjZTo6c3dhcCk6Ci0gICAgICAgICogc3JjL2xpYkVHTC9TdXJmYWNl
Lmg6Ci0gICAgICAgICogc3JjL2xpYkVHTC9saWJFR0wuY3BwOgotICAgICAgICAqIHNyYy9saWJF
R0wvbGliRUdMLnZjcHJvajoKLSAgICAgICAgKiBzcmMvbGliR0xFU3YyL0JsaXQuY3BwOgotICAg
ICAgICAoZ2w6OkJsaXQ6OnNldFZlcnRleFNoYWRlcik6Ci0gICAgICAgIChnbDo6QmxpdDo6c2V0
UGl4ZWxTaGFkZXIpOgotICAgICAgICAoZ2w6OkJsaXQ6OnNldEZvcm1hdENvbnZlcnRTaGFkZXJz
KToKLSAgICAgICAgKiBzcmMvbGliR0xFU3YyL0J1ZmZlci5jcHA6Ci0gICAgICAgIChnbDo6QnVm
ZmVyOjpCdWZmZXIpOgotICAgICAgICAqIHNyYy9saWJHTEVTdjIvQnVmZmVyLmg6Ci0gICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcDoKLSAgICAgICAgKGdsOjpDb250ZXh0OjpDb250
ZXh0KToKLSAgICAgICAgKGdsOjpDb250ZXh0Ojp+Q29udGV4dCk6Ci0gICAgICAgIChnbDo6Q29u
dGV4dDo6bWFrZUN1cnJlbnQpOgotICAgICAgICAoZ2w6OkNvbnRleHQ6Om1hcmtBbGxTdGF0ZURp
cnR5KToKLSAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUpOgot
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSk6Ci0gICAgICAg
IChnbDo6Q29udGV4dDo6Z2V0UmVuZGVyYnVmZmVySGFuZGxlKToKLSAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSk6Ci0gICAgICAgIChnbDo6Q29udGV4dDo6c2V0VmVy
dGV4QXR0cmliU3RhdGUpOgotICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZUJ1ZmZlcik6Ci0g
ICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlUHJvZ3JhbSk6Ci0gICAgICAgIChnbDo6Q29udGV4
dDo6Y3JlYXRlU2hhZGVyKToKLSAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVUZXh0dXJlKToK
LSAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIpOgotICAgICAgICAoZ2w6
OkNvbnRleHQ6OmRlbGV0ZUJ1ZmZlcik6Ci0gICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlU2hh
ZGVyKToKLSAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVQcm9ncmFtKToKLSAgICAgICAgKGds
OjpDb250ZXh0OjpkZWxldGVUZXh0dXJlKToKLSAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVS
ZW5kZXJidWZmZXIpOgotICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEJ1ZmZlcik6Ci0gICAgICAg
IChnbDo6Q29udGV4dDo6Z2V0U2hhZGVyKToKLSAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRQcm9n
cmFtKToKLSAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRUZXh0dXJlKToKLSAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRSZW5kZXJidWZmZXIpOgotICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlYWRG
cmFtZWJ1ZmZlcik6Ci0gICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVyKToK
LSAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIpOgotICAgICAgICAoZ2w6OkNv
bnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZmZXIpOgotICAgICAgICAoZ2w6OkNvbnRleHQ6OmJp
bmRUZXh0dXJlMkQpOgotICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcCk6
Ci0gICAgICAgIChnbDo6Q29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZlcik6Ci0gICAgICAgIChn
bDo6Q29udGV4dDo6YmluZERyYXdGcmFtZWJ1ZmZlcik6Ci0gICAgICAgIChnbDo6Q29udGV4dDo6
YmluZFJlbmRlcmJ1ZmZlcik6Ci0gICAgICAgIChnbDo6Q29udGV4dDo6dXNlUHJvZ3JhbSk6Ci0g
ICAgICAgIChnbDo6Q29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKToKLSAgICAgICAgKGdsOjpD
b250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKToKLSAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRGcmFtZWJ1ZmZlcik6Ci0gICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QXJyYXlCdWZmZXIpOgot
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcik6Ci0gICAgICAgIChn
bDo6Q29udGV4dDo6Z2V0Q3VycmVudFByb2dyYW0pOgotICAgICAgICAoZ2w6OkNvbnRleHQ6Omdl
dFRleHR1cmUyRCk6Ci0gICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZUN1YmVNYXApOgot
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKToKLSAgICAgICAgKGdsOjpD
b250ZXh0OjpnZXRGbG9hdHYpOgotICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEludGVnZXJ2KToK
LSAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8pOgotICAgICAgICAo
Z2w6OkNvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KToKLSAgICAgICAgKGdsOjpDb250ZXh0Ojph
cHBseVN0YXRlKToKLSAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseUluZGV4QnVmZmVyKToKLSAg
ICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKLSAgICAgICAgKGdsOjpDb250ZXh0Ojpj
bGVhcik6Ci0gICAgICAgIChnbDo6Q29udGV4dDo6ZmluaXNoKToKLSAgICAgICAgKGdsOjpDb250
ZXh0OjpmbHVzaCk6Ci0gICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNTaGFkZXJNb2RlbDMp
OgotICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMpOgotICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKToKLSAgICAgICAgKGds
OjpDb250ZXh0OjpzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcyk6Ci0gICAgICAgIChnbDo6Q29u
dGV4dDo6ZGV0YWNoQnVmZmVyKToKLSAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRhY2hUZXh0dXJl
KToKLSAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRhY2hGcmFtZWJ1ZmZlcik6Ci0gICAgICAgIChn
bDo6Q29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKToKLSAgICAgICAgKGdsOjpDb250ZXh0Ojpn
ZXRJbmNvbXBsZXRlVGV4dHVyZSk6Ci0gICAgICAgIChnbDo6Q29udGV4dDo6aW5pdEV4dGVuc2lv
blN0cmluZyk6Ci0gICAgICAgIChnbDo6Q29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKToKLSAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuaDoKLSAgICAgICAgKGdsOjpBdHRyaWJ1dGVTdGF0
ZTo6QXR0cmlidXRlU3RhdGUpOgotICAgICAgICAqIHNyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
Y3BwOgotICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpGcmFtZWJ1ZmZlcik6Ci0gICAgICAgIChn
bDo6RnJhbWVidWZmZXI6On5GcmFtZWJ1ZmZlcik6Ci0gICAgICAgIChnbDo6RnJhbWVidWZmZXI6
Omxvb2t1cFJlbmRlcmJ1ZmZlcik6Ci0gICAgICAgIChnbDo6RnJhbWVidWZmZXI6OnNldENvbG9y
YnVmZmVyKToKLSAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIpOgotICAg
ICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpzZXRTdGVuY2lsYnVmZmVyKToKLSAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6ZGV0YWNoVGV4dHVyZSk6Ci0gICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmRl
dGFjaFJlbmRlcmJ1ZmZlcik6Ci0gICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldFJlbmRlclRh
cmdldFNlcmlhbCk6Ci0gICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldCk6
Ci0gICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbCk6Ci0gICAgICAgIChn
bDo6RnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyU2VyaWFsKToKLSAgICAgICAgKGdsOjpGcmFt
ZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlclNlcmlhbCk6Ci0gICAgICAgIChnbDo6RnJhbWVidWZm
ZXI6OmdldENvbG9yYnVmZmVyKToKLSAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhi
dWZmZXIpOgotICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKToKLSAg
ICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJIYW5kbGUpOgotICAgICAgICAo
Z2w6OkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlckhhbmRsZSk6Ci0gICAgICAgIChnbDo6RnJh
bWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJIYW5kbGUpOgotICAgICAgICAoZ2w6OkZyYW1lYnVm
ZmVyOjpoYXNTdGVuY2lsKToKLSAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6aXNNdWx0aXNhbXBs
ZSk6Ci0gICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcyk6Ci0gICAgICAgIChn
bDo6RGVmYXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVidWZmZXIpOgotICAgICAgICAoZ2w6
OkZyYW1lYnVmZmVyOjpnZXRTYW1wbGVzKToKLSAgICAgICAgKGdsOjpEZWZhdWx0RnJhbWVidWZm
ZXI6OmNvbXBsZXRlbmVzcyk6Ci0gICAgICAgICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5o
OgotICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHA6Ci0gICAgICAgIChnbDo6UHJv
Z3JhbTo6UHJvZ3JhbSk6Ci0gICAgICAgIChnbDo6UHJvZ3JhbTo6flByb2dyYW0pOgotICAgICAg
ICAoZ2w6OlByb2dyYW06OmF0dGFjaFNoYWRlcik6Ci0gICAgICAgIChnbDo6UHJvZ3JhbTo6ZGV0
YWNoU2hhZGVyKToKLSAgICAgICAgKGdsOjpQcm9ncmFtOjpsaW5rVmFyeWluZ3MpOgotICAgICAg
ICAoZ2w6OlByb2dyYW06OmxpbmspOgotICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6Ci0g
ICAgICAgIChnbDo6UHJvZ3JhbTo6cmVsZWFzZSk6Ci0gICAgICAgIChnbDo6UHJvZ3JhbTo6YWRk
UmVmKToKLSAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRSZWZDb3VudCk6Ci0gICAgICAgIChnbDo6
UHJvZ3JhbTo6Z2V0RHhWaWV3cG9ydExvY2F0aW9uKToKLSAgICAgICAgKiBzcmMvbGliR0xFU3Yy
L1Byb2dyYW0uaDoKLSAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmNwcDog
QWRkZWQuCi0gICAgICAgIChnbDo6UmVmQ291bnRPYmplY3Q6OlJlZkNvdW50T2JqZWN0KToKLSAg
ICAgICAgKGdsOjpSZWZDb3VudE9iamVjdDo6flJlZkNvdW50T2JqZWN0KToKLSAgICAgICAgKGds
OjpSZWZDb3VudE9iamVjdDo6YWRkUmVmKToKLSAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdDo6
cmVsZWFzZSk6Ci0gICAgICAgIChnbDo6UmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0
KToKLSAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlZkNvdW50T2JqZWN0Lmg6IEFkZGVkLgotICAg
ICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0OjppZCk6Ci0gICAgICAgIChnbDo6UmVmQ291bnRPYmpl
Y3RCaW5kaW5nUG9pbnRlcjo6UmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcik6Ci0gICAgICAg
IChnbDo6UmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6flJlZkNvdW50T2JqZWN0QmluZGlu
Z1BvaW50ZXIpOgotICAgICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6Omdl
dCk6Ci0gICAgICAgIChnbDo6UmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6aWQpOgotICAg
ICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6Om9wZXJhdG9yICEgKToKLSAg
ICAgICAgKGdsOjpCaW5kaW5nUG9pbnRlcjo6c2V0KToKLSAgICAgICAgKGdsOjpCaW5kaW5nUG9p
bnRlcjo6Z2V0KToKLSAgICAgICAgKGdsOjpCaW5kaW5nUG9pbnRlcjo6b3BlcmF0b3IgLT4gKToK
LSAgICAgICAgKiBzcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHA6Ci0gICAgICAgIChnbDo6
UmVuZGVyYnVmZmVyOjpSZW5kZXJidWZmZXIpOgotICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6
flJlbmRlcmJ1ZmZlcik6Ci0gICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjppc0NvbG9yYnVmZmVy
KToKLSAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmlzRGVwdGhidWZmZXIpOgotICAgICAgICAo
Z2w6OlJlbmRlcmJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVyKToKLSAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXI6OmdldFJlbmRlclRhcmdldCk6Ci0gICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRE
ZXB0aFN0ZW5jaWwpOgotICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0V2lkdGgpOgotICAg
ICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0SGVpZ2h0KToKLSAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXI6OmdldEZvcm1hdCk6Ci0gICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXREM0RGb3Jt
YXQpOgotICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0U2VyaWFsKToKLSAgICAgICAgKGds
OjpSZW5kZXJidWZmZXI6OnNldFN0b3JhZ2UpOgotICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0
b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgotICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0
b3JhZ2U6On5SZW5kZXJidWZmZXJTdG9yYWdlKToKLSAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJT
dG9yYWdlOjppc0NvbG9yYnVmZmVyKToKLSAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdl
Ojppc0RlcHRoYnVmZmVyKToKLSAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc1N0
ZW5jaWxidWZmZXIpOgotICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRl
clRhcmdldCk6Ci0gICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0RGVwdGhTdGVu
Y2lsKToKLSAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRXaWR0aCk6Ci0gICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0SGVpZ2h0KToKLSAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJTdG9yYWdlOjpzZXRTaXplKToKLSAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJT
dG9yYWdlOjpnZXRGb3JtYXQpOgotICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omdl
dEQzREZvcm1hdCk6Ci0gICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0U2FtcGxl
cyk6Ci0gICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0U2VyaWFsKToKLSAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCk6Ci0gICAgICAgIChnbDo6
Q29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKToKLSAgICAgICAgKGdsOjpDb2xvcmJ1ZmZlcjo6aXND
b2xvcmJ1ZmZlcik6Ci0gICAgICAgIChnbDo6Q29sb3JidWZmZXI6OmdldFJlZFNpemUpOgotICAg
ICAgICAoZ2w6OkNvbG9yYnVmZmVyOjpnZXRHcmVlblNpemUpOgotICAgICAgICAoZ2w6OkNvbG9y
YnVmZmVyOjpnZXRCbHVlU2l6ZSk6Ci0gICAgICAgIChnbDo6Q29sb3JidWZmZXI6OmdldEFscGhh
U2l6ZSk6Ci0gICAgICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZm
ZXIpOgotICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZl
cik6Ci0gICAgICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjppc0RlcHRoYnVmZmVyKToKLSAg
ICAgICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcik6Ci0gICAgICAg
IChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFNpemUpOgotICAgICAgICAoZ2w6OkRl
cHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0U3RlbmNpbFNpemUpOgotICAgICAgICAoZ2w6OkRlcHRoU3Rl
bmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKToKLSAgICAgICAgKGdsOjpEZXB0aGJ1ZmZlcjo6
RGVwdGhidWZmZXIpOgotICAgICAgICAoZ2w6OkRlcHRoYnVmZmVyOjp+RGVwdGhidWZmZXIpOgot
ICAgICAgICAoZ2w6OkRlcHRoYnVmZmVyOjppc0RlcHRoYnVmZmVyKToKLSAgICAgICAgKGdsOjpE
ZXB0aGJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVyKToKLSAgICAgICAgKGdsOjpTdGVuY2lsYnVmZmVy
OjpTdGVuY2lsYnVmZmVyKToKLSAgICAgICAgKGdsOjpTdGVuY2lsYnVmZmVyOjp+U3RlbmNpbGJ1
ZmZlcik6Ci0gICAgICAgIChnbDo6U3RlbmNpbGJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcik6Ci0gICAg
ICAgIChnbDo6U3RlbmNpbGJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVyKToKLSAgICAgICAgKiBzcmMv
bGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oOgotICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0
U3RvcmFnZSk6Ci0gICAgICAgICogc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwOiBB
ZGRlZC4KLSAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OlJlc291cmNlTWFuYWdlcik6Ci0g
ICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjp+UmVzb3VyY2VNYW5hZ2VyKToKLSAgICAgICAg
KGdsOjpSZXNvdXJjZU1hbmFnZXI6OmFkZFJlZik6Ci0gICAgICAgIChnbDo6UmVzb3VyY2VNYW5h
Z2VyOjpyZWxlYXNlKToKLSAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZUJ1ZmZl
cik6Ci0gICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVTaGFkZXIpOgotICAgICAg
ICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Y3JlYXRlUHJvZ3JhbSk6Ci0gICAgICAgIChnbDo6UmVz
b3VyY2VNYW5hZ2VyOjpjcmVhdGVUZXh0dXJlKToKLSAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFn
ZXI6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6Ci0gICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpk
ZWxldGVCdWZmZXIpOgotICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6ZGVsZXRlU2hhZGVy
KToKLSAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVByb2dyYW0pOgotICAgICAg
ICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6ZGVsZXRlVGV4dHVyZSk6Ci0gICAgICAgIChnbDo6UmVz
b3VyY2VNYW5hZ2VyOjpkZWxldGVSZW5kZXJidWZmZXIpOgotICAgICAgICAoZ2w6OlJlc291cmNl
TWFuYWdlcjo6Z2V0QnVmZmVyKToKLSAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmdldFNo
YWRlcik6Ci0gICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpnZXRUZXh0dXJlKToKLSAgICAg
ICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmdldFByb2dyYW0pOgotICAgICAgICAoZ2w6OlJlc291
cmNlTWFuYWdlcjo6Z2V0UmVuZGVyYnVmZmVyKToKLSAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFn
ZXI6OnNldFJlbmRlcmJ1ZmZlcik6Ci0gICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpjaGVj
a0J1ZmZlckFsbG9jYXRpb24pOgotICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Y2hlY2tU
ZXh0dXJlQWxsb2NhdGlvbik6Ci0gICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpjaGVja1Jl
bmRlcmJ1ZmZlckFsbG9jYXRpb24pOgotICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVzb3VyY2VN
YW5hZ2VyLmg6IEFkZGVkLgotICAgICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmNwcDoKLSAg
ICAgICAgKGdsOjpTaGFkZXI6OlNoYWRlcik6Ci0gICAgICAgIChnbDo6U2hhZGVyOjphZGRSZWYp
OgotICAgICAgICAoZ2w6OlNoYWRlcjo6cmVsZWFzZSk6Ci0gICAgICAgIChnbDo6U2hhZGVyOjpn
ZXRSZWZDb3VudCk6Ci0gICAgICAgIChnbDo6U2hhZGVyOjpwYXJzZVZhcnlpbmdzKToKLSAgICAg
ICAgKGdsOjpWZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcik6Ci0gICAgICAgIChnbDo6RnJhZ21l
bnRTaGFkZXI6OkZyYWdtZW50U2hhZGVyKToKLSAgICAgICAgKiBzcmMvbGliR0xFU3YyL1NoYWRl
ci5oOgotICAgICAgICAqIHNyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHA6Ci0gICAgICAgIChnbDo6
VGV4dHVyZTo6SW1hZ2U6OkltYWdlKToKLSAgICAgICAgKGdsOjpUZXh0dXJlOjpUZXh0dXJlKToK
LSAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXRCbGl0dGVyKToKLSAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZWxlY3RGb3JtYXQpOgotICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRJbWFnZURhdGEpOgot
ICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRBbHBoYUltYWdlRGF0YSk6Ci0gICAgICAgIChnbDo6
VGV4dHVyZTo6bG9hZEx1bWluYW5jZUltYWdlRGF0YSk6Ci0gICAgICAgIChnbDo6VGV4dHVyZTo6
bG9hZEx1bWluYW5jZUFscGhhSW1hZ2VEYXRhKToKLSAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2Fk
UkdCVUJ5dGVJbWFnZURhdGEpOgotICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRSR0I1NjVJbWFn
ZURhdGEpOgotICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRSR0JBVUJ5dGVJbWFnZURhdGEpOgot
ICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRSR0JBNDQ0NEltYWdlRGF0YSk6Ci0gICAgICAgIChn
bDo6VGV4dHVyZTo6bG9hZFJHQkE1NTUxSW1hZ2VEYXRhKToKLSAgICAgICAgKGdsOjpUZXh0dXJl
Ojpsb2FkQkdSQUltYWdlRGF0YSk6Ci0gICAgICAgIChnbDo6VGV4dHVyZTo6Y3JlYXRlU3VyZmFj
ZSk6Ci0gICAgICAgIChnbDo6VGV4dHVyZTo6c2V0SW1hZ2UpOgotICAgICAgICAoZ2w6OlRleHR1
cmU6OnNldENvbXByZXNzZWRJbWFnZSk6Ci0gICAgICAgIChnbDo6VGV4dHVyZTo6c3ViSW1hZ2Up
OgotICAgICAgICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCk6Ci0gICAgICAgIChn
bDo6VGV4dHVyZTJEOjpUZXh0dXJlMkQpOgotICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0Rm9y
bWF0KToKLSAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZSk6Ci0gICAg
ICAgIChnbDo6VGV4dHVyZTJEOjpzdWJJbWFnZSk6Ci0gICAgICAgIChnbDo6VGV4dHVyZTJEOjpz
dWJJbWFnZUNvbXByZXNzZWQpOgotICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weUltYWdlKToK
LSAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZSk6Ci0gICAgICAgIChnbDo6VGV4
dHVyZTJEOjppc0NvbXByZXNzZWQpOgotICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0Q29sb3Ji
dWZmZXIpOgotICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcCk6Ci0g
ICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEZvcm1hdCk6Ci0gICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZSk6Ci0gICAgICAgIChnbDo6VGV4dHVyZUN1
YmVNYXA6OnN1YkltYWdlKToKLSAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2VD
b21wcmVzc2VkKToKLSAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKToK
LSAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKToKLSAgICAgICAgKGdsOjpU
ZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKToKLSAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1h
cDo6Z2V0Q29sb3JidWZmZXIpOgotICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmVDb2xvcmJ1
ZmZlclByb3h5OjphZGRSZWYpOgotICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmVDb2xvcmJ1
ZmZlclByb3h5OjpyZWxlYXNlKToKLSAgICAgICAgKGdsOjpUZXh0dXJlOjpUZXh0dXJlQ29sb3Ji
dWZmZXJQcm94eTo6Z2V0V2lkdGgpOgotICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmVDb2xv
cmJ1ZmZlclByb3h5OjpnZXRIZWlnaHQpOgotICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmVD
b2xvcmJ1ZmZlclByb3h5OjpnZXRGb3JtYXQpOgotICAgICAgICAqIHNyYy9saWJHTEVTdjIvVGV4
dHVyZS5oOgotICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKLSAgICAgICAg
KiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWY6Ci0gICAgICAgICogc3JjL2xpYkdMRVN2Mi9s
aWJHTEVTdjIudmNwcm9qOgotICAgICAgICAqIHNyYy9saWJHTEVTdjIvbWFpbi5oOgotICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcDoKLSAgICAgICAgKGdsOjpDb21wdXRlQ29t
cHJlc3NlZFBpdGNoKToKLSAgICAgICAgKGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUpOgotICAg
ICAgICAoZ2w6OklzQ29tcHJlc3NlZCk6Ci0gICAgICAgIChnbDo6Q29tcHV0ZVBpeGVsU2l6ZSk6
Ci0gICAgICAgIChnbDo6Q2hlY2tUZXh0dXJlRm9ybWF0VHlwZSk6Ci0gICAgICAgIChlczJkeDo6
Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdCk6Ci0gICAgICAgIChlczJkeDo6R2V0U2FtcGxlc0Zy
b21NdWx0aXNhbXBsZVR5cGUpOgotICAgICAgICAoZXMyZHg6OkdldE11bHRpc2FtcGxlVHlwZUZy
b21TYW1wbGVzKToKLSAgICAgICAgKiBzcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgotCi0yMDEw
LTA4LTE3ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KLQotICAgICAgICBVbnJl
dmlld2VkLgotCi0gICAgICAgIE1vdmVkIHByZXZpb3VzIGxpbmsgZXJyb3IgZml4IHRvIEJhc2Uu
eGNjb25maWcuCi0KLSAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgot
ICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc6Ci0KLTIwMTAtMDgtMTcgIENo
cmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgotCi0gICAgICAgIFVucmV2aWV3ZWQuCi0K
LSAgICAgICAgR290IHJpZCBvZiBsaW5rIGVycm9ycyBpbiBXZWJDb3JlLgotCi0gICAgICAgIENo
YW5nZWQgR0NDX0lOTElORVNfQVJFX1BSSVZBVEVfRVhURVJOIHRvIFlFUyBhbmQKLSAgICAgICAg
R0NDX1NZTUJPTFNfUFJJVkFURV9FWFRFUk4gdG8gTk8gdG8gbWF0Y2ggV2ViQ29yZQotICAgICAg
ICBmbGFncy4KLQotICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Ci0K
LTIwMTAtMDgtMDQgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgotCi0gICAgICAg
IFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KLQotICAgICAgICBVcGRhdGUgQU5HTEUgdG8g
cjM1MgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM1
MDAKLQotICAgICAgICBVcGRhdGVkIEFOR0xFIHRvIHIzNTIgKEp1bHkgMjYsIDIwMTApLiBCdWls
dCBXZWJLaXQgdG8gdGVzdC4KLQotICAgICAgICAqIGluY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5n
Lmg6Ci0gICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwOgotICAgICAgICAoQnVp
bHRJbkZ1bmN0aW9uc0NvbW1vbik6Ci0gICAgICAgIChCdWlsdEluRnVuY3Rpb25zVmVydGV4KToK
LSAgICAgICAgKEJ1aWx0SW5GdW5jdGlvbnNGcmFnbWVudCk6Ci0gICAgICAgIChTdGFuZGFyZFVu
aWZvcm1zKToKLSAgICAgICAgKERlZmF1bHRQcmVjaXNpb25WZXJ0ZXgpOgotICAgICAgICAoRGVm
YXVsdFByZWNpc2lvbkZyYWdtZW50KToKLSAgICAgICAgKEJ1aWx0SW5Db25zdGFudHMpOgotICAg
ICAgICAoVEJ1aWx0SW5zOjppbml0aWFsaXplKToKLSAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMp
OgotICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplLmg6Ci0gICAgICAgIChUQnVpbHRJ
bnM6OmdldEJ1aWx0SW5TdHJpbmdzKToKLSAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0R0xT
TC5jcHA6Ci0gICAgICAgIChUT3V0cHV0R0xTTDo6dmlzaXRTZWxlY3Rpb24pOgotICAgICAgICAq
IHNyYy9jb21waWxlci9TaEhhbmRsZS5oOgotICAgICAgICAoVENvbXBpbGVyOjpnZXRMYW5ndWFn
ZSk6Ci0gICAgICAgIChUQ29tcGlsZXI6OmdldFNwZWMpOgotICAgICAgICAoVENvbXBpbGVyOjpn
ZXRTeW1ib2xUYWJsZSk6Ci0gICAgICAgIChUQ29tcGlsZXI6OmdldEluZm9TaW5rKToKLSAgICAg
ICAgKiBzcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHA6Ci0gICAgICAgIChJbml0aWFsaXplU3lt
Ym9sVGFibGUpOgotICAgICAgICAoR2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUpOgotICAgICAg
ICAoU2hJbml0aWFsaXplKToKLSAgICAgICAgKFNoQ29uc3RydWN0Q29tcGlsZXIpOgotICAgICAg
ICAoU2hGaW5hbGl6ZSk6Ci0gICAgICAgIChTaENvbXBpbGUpOgotICAgICAgICAqIHNyYy9jb21w
aWxlci9TeW1ib2xUYWJsZS5oOgotICAgICAgICAoVFN5bWJvbFRhYmxlOjphdEJ1aWx0SW5MZXZl
bCk6Ci0gICAgICAgIChUU3ltYm9sVGFibGU6OmF0R2xvYmFsTGV2ZWwpOgotICAgICAgICAoVFN5
bWJvbFRhYmxlOjpwdXNoKToKLSAgICAgICAgKFRTeW1ib2xUYWJsZTo6Z2V0R2xvYmFsTGV2ZWwp
OgotICAgICAgICAoVFN5bWJvbFRhYmxlOjpjdXJyZW50TGV2ZWwpOgotICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvU2hhZGVyLmNwcDoKLSAgICAgICAgKGdsOjpTaGFkZXI6OlNoYWRlcik6Ci0gICAg
ICAgIChnbDo6U2hhZGVyOjpjb21waWxlVG9ITFNMKToKLQotMjAxMC0wOC0wMyAgTWFyayBSb3dl
ICA8bXJvd2VAYXBwbGUuY29tPgotCi0gICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEFkZWxlIFBl
dGVyc29uLgotCi0gICAgICAgIFJlbW92ZSBzb21lIHVubmVjZXNzYXJ5IGZpbGVzIGZyb20gdGhl
IEFOR0xFIHRyZWUuCi0KLSAgICAgICAgKiBzcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5iaXNv
bjogUmVtb3ZlZC4KLSAgICAgICAgKiBzcmMvY29tcGlsZXIvdG9vbHMvQ09QWUlORy5mbGV4OiBS
ZW1vdmVkLgotICAgICAgICAqIHNyYy9jb21waWxlci90b29scy9SRUFETUU6IFJlbW92ZWQuCi0g
ICAgICAgICogc3JjL2NvbXBpbGVyL3Rvb2xzL2Jpc29uLmhhaXJ5OiBSZW1vdmVkLgotICAgICAg
ICAqIHNyYy9jb21waWxlci90b29scy9iaXNvbi5zaW1wbGU6IFJlbW92ZWQuCi0KLTIwMTAtMDgt
MDMgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KLQotICAgICAgICBSdWJiZXItc3RhbXBl
ZCBieSBBZGVsZSBQZXRlcnNvbi4KLQotICAgICAgICBDbGVhbiB1cCB0aGUgQU5HTEUgWGNvZGUg
cHJvamVjdC4KLQotICAgICAgICBNYWluIGNoYW5nZXMgaW5jbHVkZToKLSAgICAgICAg4oCiIEFk
ZGluZyBhIFByb2R1Y3Rpb24gY29uZmlndXJhdGlvbi4KLSAgICAgICAg4oCiIE1vZGlmeWluZyB0
aGUgbGlicmFyeSBuYW1lIGZyb20gbGliYW5nbGUuYSB0byBsaWJBTkdMRS5hLgotICAgICAgICDi
gKIgSW5zdGFsbGluZyB0aGUgaGVhZGVycyBpbiBhIHN1YmRpcmVjdG9yeSBvZiAvdXNyL2xvY2Fs
L2luY2x1ZGUgdG8gYXZvaWQgcG9sbHV0aW5nIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgotICAg
ICAgICDigKIgR2VuZXJhdGluZyBkZXJpdmVkIHNvdXJjZXMgaW4gdG8gdGhlIGJ1aWx0IHByb2R1
Y3RzIGRpcmVjdG9yeSBzbyB0aGV5J3JlIHNhdmVkIGFsb25nIHdpdGggdGhlIHN5bXJvb3QuCi0g
ICAgICAgIOKAoiBTd2l0Y2hpbmcgdG8gdXNpbmcgLnhjY29uZmlnIGZpbGVzIGZvciBtYXhpbXVt
IGNsZWFubGluZXNzLgotCi0gICAgICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKLSAgICAgICAgKiBDb25maWd1cmF0aW9ucy9BTkdMRS54Y2NvbmZpZzogQWRkZWQuCi0gICAg
ICAgICogQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzogQWRkZWQuCi0gICAgICAgICogQ29u
ZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnOiBBZGRlZC4KLQotMjAxMC0wOC0wMiAg
UGF1bCBTYXdheWEgIDxwc2F3YXlhQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBB
ZGVsZSBQZXRlcnNvbi4KLQotICAgICAgICBBZGQgQU5HTEUgbGlicmFyeSB0byBXZWJLaXQuIEZy
b20gdGhlIHJlcG9zaXRvcnkgKGh0dHA6Ly9hbmdsZXByb2plY3QuZ29vZ2xlY29kZS5jb20pIGFz
IG9mIEp1bHkgMjIuCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00Mjc4OQotCkluZGV4OiBBTkdMRS9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9N
YWtlZmlsZQkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9NYWtlZmlsZQkod29ya2luZyBjb3B5
KQpAQCAtMSArMCwwIEBACi1pbmNsdWRlIC4uL01ha2VmaWxlLnNoYXJlZApJbmRleDogQU5HTEUv
QU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9BTkdM
RS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL0FO
R0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIxICsw
LDAgQEAKLS8vICEkKlVURjgqJCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9
IHsKLQl9OwotCW9iamVjdFZlcnNpb24gPSA0MjsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQ
QlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCQlGQjM5RDI3MTEyMDBGMzVBMDAwODhFNjkgLyogQ29k
ZUdlbkdMU0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLzsgfTsKLQkJ
RkIzOUQyNzUxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBk
ZWJ1Zy5jcHAgKi87IH07Ci0JCUZCMzlEMjc5MTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZvU2luay5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIy
QTEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuY3BwICovOyB9OwotCQlGQjM5RDI3QjEyMDBG
MzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyQzEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6
ZS5jcHAgKi87IH07Ci0JCUZCMzlEMjdEMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlE
MjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLzsgfTsKLQkJRkIzOUQy
ODExMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzMjEyMDBGMzVBMDAwODhFNjkgLyog
SW50ZXJtZWRpYXRlLmNwcCAqLzsgfTsKLQkJRkIzOUQyODMxMjAwRjM1QTAwMDg4RTY5IC8qIGlu
dGVybU91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGQjM5RDIzNDEyMDBGMzVBMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLzsgfTsKLQkJRkIz
OUQyODQxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjM1MTIwMEYzNUEwMDA4OEU2
OSAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi87IH07Ci0JCUZCMzlEMjg4MTIwMEYzNUEwMDA4OEU2
OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXgu
Y3BwICovOyB9OwotCQlGQjM5RDI4QTEyMDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIzQjEy
MDBGMzVBMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAgKi87IH07Ci0JCUZCMzlEMjhFMTIwMEYz
NUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjNGMTIwMEYzNUEwMDA4OEU2OSAvKiBwYXJzZUNvbnN0
LmNwcCAqLzsgfTsKLQkJRkIzOUQyOEYxMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjQw
MTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07Ci0JCUZCMzlEMjkxMTIw
MEYzNUEwMDA4OEU2OSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xBbGxv
Yy5jcHAgKi87IH07Ci0JCUZCMzlEMjkzMTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDI0NTEyMDBGMzVB
MDAwODhFNjkgLyogYXRvbS5jICovOyB9OwotCQlGQjM5RDI5NjEyMDBGMzVBMDAwODhFNjkgLyog
Y3BwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi87IH07Ci0JCUZCMzlEMjk4MTIwMEYzNUEw
MDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZCMzlEMjRBMTIwMEYzNUEwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyAqLzsg
fTsKLQkJRkIzOUQyOTkxMjAwRjM1QTAwMDg4RTY5IC8qIG1lbW9yeS5jIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNEIxMjAwRjM1QTAwMDg4RTY5
IC8qIG1lbW9yeS5jICovOyB9OwotCQlGQjM5RDI5RDEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5l
ci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQy
NEYxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLzsgfTsKLQkJRkIzOUQyQTAxMjAwRjM1
QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZCMzlEMjUyMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi87IH07
Ci0JCUZCMzlEMkEyMTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU0MTIwMEYzNUEwMDA4OEU2OSAv
KiB0b2tlbnMuYyAqLzsgfTsKLQkJRkIzOUQyQTQxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmll
ckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZCMzlEMjU2MTIwMEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgKi87IH07Ci0J
CUZCMzlEMkE2MTIwMEYzNUEwMDA4OEU2OSAvKiBSZW1vdmVUcmVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjU4MTIwMEYzNUEwMDA4OEU2
OSAvKiBSZW1vdmVUcmVlLmNwcCAqLzsgfTsKLQkJRkIzOUQyQTgxMjAwRjM1QTAwMDg4RTY5IC8q
IFNoYWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkIzOUQyNUExMjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovOyB9Owot
CQlGQjM5RDJBQTEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNUMxMjAwRjM1QTAwMDg4
RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLzsgfTsKLQkJRkIzOUQyQUMxMjAwRjM1QTAwMDg4RTY5
IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZCMzlEMjY4MTIwMEYzNUEwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5j
cHAgKi87IH07Ci0JCUZCMzlEMkIxMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyNkQx
MjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi87IH07Ci0JCUZCMzlENzIzMTIw
MTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlENzIwMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nLmNw
cCAqLzsgfTsKLQkJRkIzOUQ3MjQxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlENzIyMTIw
MTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5jcHAgKi87IH07Ci0JCUZCMzlENzZFMTIwMTEw
RkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLS8qIEVuZCBQ
QlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rp
b24gKi8KLQkJNUQ3QzU5QzUxMjA4QzY4QjAwMUM4NzNFIC8qIEFOR0xFLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEFOR0xFLnhjY29uZmlnOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1RDdDNTlDNjEyMDhDNjhCMDAxQzg3M0UgLyogQmFzZS54Y2NvbmZp
ZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1RDdDNTlDNzEyMDhDNjhCMDAxQzg3M0UgLyogRGVidWdS
ZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVs
ZWFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQwRDExMjAw
RjBFMzAwMDg4RTY5IC8qIGxpYkFOR0xFLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IGxpYkFOR0xFLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCUZCMzlE
MTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMTg3MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxODgxMjAwRjI2MjAwMDg4RTY5
IC8qIENvZGVHZW5ITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUdlbkhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDE4OTEyMDBGMjYyMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE4QTEyMDBGMjYyMDAwODhFNjkgLyogQ29uc3RhbnRVbmlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMThCMTIwMEYyNjIwMDA4OEU2OSAvKiBkZWJ1Zy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUlu
SW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IGRlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOEMxMjAwRjI2
MjAwMDg4RTY5IC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGRl
YnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMThEMTIwMEYyNjIwMDA4
OEU2OSAvKiBnbHNsYW5nLmwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmxleDsgcGF0aCA9IGdsc2xh
bmcubDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOEUxMjAwRjI2MjAwMDg4
RTY5IC8qIGdsc2xhbmcueSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IGdsc2xh
bmcueTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOEYxMjAwRjI2MjAwMDg4
RTY5IC8qIEluZm9TaW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDE5MDEyMDBGMjYyMDAwODhFNjkgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mb1NpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxOTExMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4
ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0
aWFsaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxOTIxMjAwRjI2
MjAwMDg4RTY5IC8qIEluaXRpYWxpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW5pdGlhbGl6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5MzEy
MDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5NDEyMDBGMjYyMDAwODhFNjkgLyog
SW5pdGlhbGl6ZURsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFs
aXplRGxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk1MTIwMEYyNjIw
MDA4OEU2OSAvKiBJbml0aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbml0aWFsaXplR2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDE5NjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTk3MTIwMEYyNjIwMDA4OEU2OSAv
KiBJbnRlcm1lZGlhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlcm1lZGlhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDE5ODEyMDBGMjYyMDAwODhFNjkgLyogaW50ZXJtZWRpYXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5OTEyMDBGMjYyMDAwODhFNjkgLyogaW50ZXJtT3V0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNs
dWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
OUExMjAwRjI2MjAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtVHJhdmVyc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5QjEyMDBGMjYyMDAwODhF
NjkgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gbG9jYWxpbnRlcm1lZGlhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIz
OUQxOUMxMjAwRjI2MjAwMDg4RTY5IC8qIE1NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5RDEy
MDBGMjYyMDAwODhFNjkgLyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IG9zaW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDE5
RTEyMDBGMjYyMDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBvc3NvdXJjZV9wb3NpeC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMTlGMTIwMEYyNjIwMDA4OEU2
OSAvKiBvc3NvdXJjZV93aW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBvc3NvdXJjZV93aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGQjM5RDFBMDEyMDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUlu
SW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE91dHB1dEdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBMTEy
MDBGMjYyMDAwODhFNjkgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPdXRwdXRHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUEyMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0SExTTC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUEzMTIwMEYyNjIwMDA4OEU2OSAvKiBP
dXRwdXRITFNMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE91dHB1dEhMU0wu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQTQxMjAwRjI2MjAwMDg4RTY5
IC8qIHBhcnNlQ29uc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkIzOUQxQTUxMjAwRjI2MjAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRl
eCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFy
c2VIZWxwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFBNjEyMDBG
MjYyMDAwODhFNjkgLyogUGFyc2VIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGFyc2VIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
QTcxMjAwRjI2MjAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUE4MTIwMEYyNjIwMDA4OEU2OSAvKiBQb29s
QWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9vbEFsbG9jLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUFBMTIwMEYyNjIwMDA4OEU2OSAvKiBh
dG9tLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQUIxMjAwRjI2MjAwMDg4RTY5IC8qIGF0b20uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYXRvbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGQjM5RDFBQzEyMDBGMjYyMDAwODhFNjkgLyogY29tcGlsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb21waWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMUFEMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuYyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY3BwLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMUFFMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gY3BwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUFGMTIwMEYyNjIwMDA4OEU2OSAvKiBjcHBzdHJ1Y3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5jOyBwYXRoID0gY3Bwc3RydWN0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUIwMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5jOyBwYXRoID0gbWVtb3J5LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUIxMTIwMEYyNjIwMDA4OEU2OSAvKiBtZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gbWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUIy
MTIwMEYyNjIwMDA4OEU2OSAvKiBwYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gcGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUIzMTIw
MEYyNjIwMDA4OEU2OSAvKiBwcmVwcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IHByZXByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
QjQxMjAwRjI2MjAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5j
OyBwYXRoID0gc2Nhbm5lci5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFC
NTEyMDBGMjYyMDAwODhFNjkgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBzY2FubmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUI2
MTIwMEYyNjIwMDA4OEU2OSAvKiBzbGdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gc2xnbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlE
MUI3MTIwMEYyNjIwMDA4OEU2OSAvKiBzeW1ib2xzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
YzsgcGF0aCA9IHN5bWJvbHMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQx
QjgxMjAwRjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gc3ltYm9scy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFC
OTEyMDBGMjYyMDAwODhFNjkgLyogdG9rZW5zLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsg
cGF0aCA9IHRva2Vucy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFCQTEy
MDBGMjYyMDAwODhFNjkgLyogdG9rZW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IHRva2Vucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFCQjEyMDBG
MjYyMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJbkluZGV4ID0gMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUJDMTIwMEYyNjIwMDA4OEU2OSAvKiBR
dWFsaWZpZXJBbGl2ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZp
ZXJBbGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFCRDEyMDBGMjYy
MDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGQjM5RDFCRTEyMDBGMjYyMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVUcmVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUJGMTIwMEYyNjIwMDA4OEU2OSAvKiBTaGFkZXJM
YW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSBTaGFkZXJMYW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIz
OUQxQzAxMjAwRjI2MjAwMDg4RTY5IC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNoSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMUMxMTIwMEYyNjIwMDA4OEU2OSAvKiBTeW1ib2xUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQzIxMjAwRjI2MjAwMDg4RTY5
IC8qIFN5bWJvbFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJv
bFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUNCMTIwMEYyNjIw
MDA4OEU2OSAvKiB0cmFuc2xhdG9yX2NvbW1vbi52Y3Byb2ogKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsg
cGF0aCA9IHRyYW5zbGF0b3JfY29tbW9uLnZjcHJvajsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQxQ0MxMjAwRjI2MjAwMDg4RTY5IC8qIHRyYW5zbGF0b3JfaGxzbC52Y3Byb2og
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHRleHQueG1s
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gdHJhbnNsYXRvcl9obHNsLnZjcHJvajsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0QxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5z
bGF0b3JHTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlGQjM5RDFDRTEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxQ0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0
b3JITFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmNsdWRlSW5JbmRleCA9IDA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDFEMDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQxRDExMjAwRjI2MjAwMDg4RTY5IC8qIFR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDFE
MzEyMDBGMjYyMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDFENDEyMDBGMjYyMDAwODhFNjkgLyogdW5pc3RkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IHVuaXN0ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBCYXNlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQyMjIxMjAwRjM1QTAwMDg4RTY5IC8qIENvZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMjQxMjAwRjM1QTAwMDg4RTY5IC8qIENvbW1vbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUZCMzlEMjI1MTIwMEYzNUEwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBDb25zdGFudFVuaW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjI2MTIwMEYzNUEwMDA4OEU2OSAvKiBk
ZWJ1Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkZWJ1Zy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjI3MTIwMEYzNUEwMDA4OEU2OSAv
KiBkZWJ1Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkZWJ1Zy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIyODEyMDBGMzVBMDAwODhFNjkgLyogZ2xz
bGFuZy5sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5sZXg7IHBhdGggPSBnbHNsYW5nLmw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjI5MTIwMEYzNUEwMDA4OEU2OSAvKiBnbHNs
YW5nLnkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnlhY2M7IHBhdGggPSBnbHNsYW5nLnk7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZv
U2luay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZvU2luay5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjJCMTIwMEYzNUEwMDA4OEU2
OSAvKiBJbmZvU2luay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5mb1Np
bmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMkMxMjAwRjM1QTAwMDg4
RTY5IC8qIEluaXRpYWxpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjJE
MTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZC
MzlEMjJFMTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemVEbGwuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlGQjM5RDIyRjEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURs
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gSW5pdGlhbGl6ZURsbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzMDEyMDBGMzVBMDAwODhFNjkgLyog
SW5pdGlhbGl6ZUdsb2JhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IElu
aXRpYWxpemVHbG9iYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjMx
MTIwMEYzNUEwMDA4OEU2OSAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSBJbml0aWFsaXplUGFyc2VDb250ZXh0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1l
ZGlhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZXJtZWRp
YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMzMxMjAwRjM1QTAw
MDg4RTY5IC8qIGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRo
ID0gaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjM0
MTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQyMzUxMjAwRjM1QTAwMDg4RTY5IC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyMzYxMjAwRjM1QTAwMDg4RTY5IC8qIGxvY2Fs
aW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBsb2NhbGlu
dGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzNzEyMDBG
MzVBMDAwODhFNjkgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0g
TU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzODEyMDBGMzVBMDAw
ODhFNjkgLyogb3NpbmNsdWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG9z
aW5jbHVkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzOTEyMDBGMzVB
MDAwODhFNjkgLyogb3Nzb3VyY2VfcG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gb3Nzb3VyY2VfcG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDIzQTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3VyY2Vfd2luLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG9zc291cmNlX3dpbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRH
TFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE91dHB1dEdMU0wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzQzEyMDBGMzVBMDAwODhF
NjkgLyogT3V0cHV0R0xTTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gT3V0
cHV0R0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDIzRjEyMDBGMzVB
MDAwODhFNjkgLyogcGFyc2VDb25zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBwYXJzZUNvbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIz
OUQyNDAxMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlSGVscGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkIzOUQyNDExMjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBQYXJzZUhlbHBlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0MjEyMDBGMzVBMDAwODhFNjkgLyogUG9vbEFsbG9j
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvb2xBbGxvYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjQzMTIwMEYzNUEwMDA4OEU2OSAv
KiBQb29sQWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFBvb2xBbGxv
Yy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0NTEyMDBGMzVBMDAwODhF
NjkgLyogYXRvbS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBhdG9tLmM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjQ2MTIwMEYzNUEwMDA4OEU2OSAvKiBh
dG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNDcxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI0ODEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcC5jOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGQjM5RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNwcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDI0QTEyMDBGMzVBMDAwODhFNjkgLyogY3Bwc3RydWN0LmMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGQjM5RDI0QjEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuYzsgcGF0aCA9IG1lbW9yeS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDI0QzEyMDBGMzVBMDAwODhFNjkgLyogbWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI0RDEyMDBGMzVBMDAwODhFNjkgLyogcGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IHBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5
RDI0RTEyMDBGMzVBMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBwcmVwcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMjRGMTIwMEYzNUEwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkIzOUQyNTAxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gc2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
QjM5RDI1MTEyMDBGMzVBMDAwODhFNjkgLyogc2xnbG9iYWxzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IHNsZ2xvYmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDI1MjEyMDBGMzVBMDAwODhFNjkgLyogc3ltYm9scy5jICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmM7IHBhdGggPSBzeW1ib2xzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZCMzlEMjUzMTIwMEYzNUEwMDA4OEU2OSAvKiBzeW1ib2xzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IHN5bWJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkIzOUQyNTQxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5jICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmM7IHBhdGggPSB0b2tlbnMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIz
OUQyNTUxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSB0b2tlbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQy
NTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNTcxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBRdWFsaWZpZXJBbGl2ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyog
UmVtb3ZlVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1v
dmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNTkxMjAwRjM1
QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0
aCA9IFJlbW92ZVRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNUEx
MjAwRjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2hhZGVyTGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZCMzlEMjVCMTIwMEYzNUEwMDA4OEU2OSAvKiBTaEhhbmRsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxl
RW5jb2RpbmcgPSA0OyBwYXRoID0gU2hIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkIzOUQyNUMxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNUQxMjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRh
YmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBTeW1ib2xUYWJsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2ODEyMDBGMzVBMDAwODhFNjkgLyog
VHJhbnNsYXRvckdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2
OTEyMDBGMzVBMDAwODhFNjkgLyogVHJhbnNsYXRvckdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29k
aW5nID0gNDsgcGF0aCA9IFRyYW5zbGF0b3JHTFNMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2OSAvKiBUeXBlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxl
RW5jb2RpbmcgPSA0OyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDI2RTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2Vs
ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBVbmZvbGRTZWxlY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyNkYxMjAwRjM1QTAwMDg4RTY5IC8q
IHVuaXN0ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1bmlzdGQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNo
YWRlckxhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFNoYWRlckxhbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzOUQ3MjAxMjAxMDMyMDAwMDg4RTY5
IC8qIGdsc2xhbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZ2xz
bGFuZy5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9BTkdMRS9nbHNsYW5nLmNwcDsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJRkIzOUQ3MjExMjAxMDMyMDAwMDg4RTY5
IC8qIGdsc2xhbmdfdGFiLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGdsc2xh
bmdfdGFiLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9BTkdMRS9nbHNsYW5nX3RhYi5oOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlGQjM5RDcyMjEyMDEwMzIwMDAwODhF
NjkgLyogZ2xzbGFuZ190YWIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gZ2xzbGFuZ190YWIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvQU5HTEUvZ2xzbGFuZ190
YWIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotLyogRW5kIFBCWEZp
bGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCi0JCUZCMzlEMENGMTIwMEYwRTMwMDA4OEU2OSAvKiBGcmFtZXdvcmtzICov
ID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCi0JCTVEN0M1
OUM0MTIwOEM2OEIwMDFDODczRSAvKiBDb25maWd1cmF0aW9ucyAqLyA9IHsKLQkJCWlzYSA9IFBC
WEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJNUQ3QzU5QzUxMjA4QzY4QjAwMUM4NzNFIC8q
IEFOR0xFLnhjY29uZmlnICovLAotCQkJCTVEN0M1OUM2MTIwOEM2OEIwMDFDODczRSAvKiBCYXNl
LnhjY29uZmlnICovLAotCQkJCTVEN0M1OUM3MTIwOEM2OEIwMDFDODczRSAvKiBEZWJ1Z1JlbGVh
c2UueGNjb25maWcgKi8sCi0JCQkpOwotCQkJcGF0aCA9IENvbmZpZ3VyYXRpb25zOwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRkIzOUQwNkUxMjAwRUQ5MjAwMDg4RTY5ID0g
ewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDIyMDEyMDBG
MzVBMDAwODhFNjkgLyogY29tcGlsZXIgKi8sCi0JCQkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5
IC8qIFNvdXJjZSAqLywKLQkJCQlGQjM5RDBDQjEyMDBFRjk0MDAwODhFNjkgLyogSW50ZXJtZWRp
YXRlcyAqLywKLQkJCQk1RDdDNTlDNDEyMDhDNjhCMDAxQzg3M0UgLyogQ29uZmlndXJhdGlvbnMg
Ki8sCi0JCQkJRkIzOUQwQ0MxMjAwRUY5QjAwMDg4RTY5IC8qIFByb2R1Y3RzICovLAotCQkJKTsK
LQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUZCMzlEMDg0MTIwMEVERUIwMDA4
OEU2OSAvKiBTb3VyY2UgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0g
KAotCQkJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAvKiBHTFNMQU5HICovLAotCQkJCUZCMzlE
MTg1MTIwMEYyNjIwMDA4OEU2OSAvKiBjb21waWxlciAqLywKLQkJCSk7Ci0JCQluYW1lID0gU291
cmNlOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRkIzOUQwQ0IxMjAwRUY5
NDAwMDg4RTY5IC8qIEludGVybWVkaWF0ZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJ
CWNoaWxkcmVuID0gKAotCQkJCUZCMzlENzIwMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nLmNw
cCAqLywKLQkJCQlGQjM5RDcyMTEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuaCAqLywK
LQkJCQlGQjM5RDcyMjEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuY3BwICovLAotCQkJ
KTsKLQkJCW5hbWUgPSBJbnRlcm1lZGlhdGVzOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
LQkJfTsKLQkJRkIzOUQwQ0MxMjAwRUY5QjAwMDg4RTY5IC8qIFByb2R1Y3RzICovID0gewotCQkJ
aXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDBEMTEyMDBGMEUzMDAw
ODhFNjkgLyogbGliQU5HTEUuYSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlGQjM5RDE4NTEyMDBGMjYyMDAwODhFNjkg
LyogY29tcGlsZXIgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAot
CQkJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLywKLQkJCQlGQjM5
RDE4NzEyMDBGMjYyMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovLAotCQkJCUZCMzlEMTg4
MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuSExTTC5jcHAgKi8sCi0JCQkJRkIzOUQxODkxMjAw
RjI2MjAwMDg4RTY5IC8qIENvbW1vbi5oICovLAotCQkJCUZCMzlEMThBMTIwMEYyNjIwMDA4OEU2
OSAvKiBDb25zdGFudFVuaW9uLmggKi8sCi0JCQkJRkIzOUQxOEIxMjAwRjI2MjAwMDg4RTY5IC8q
IGRlYnVnLmNwcCAqLywKLQkJCQlGQjM5RDE4QzEyMDBGMjYyMDAwODhFNjkgLyogZGVidWcuaCAq
LywKLQkJCQlGQjM5RDE4RDEyMDBGMjYyMDAwODhFNjkgLyogZ2xzbGFuZy5sICovLAotCQkJCUZC
MzlEMThFMTIwMEYyNjIwMDA4OEU2OSAvKiBnbHNsYW5nLnkgKi8sCi0JCQkJRkIzOUQxOEYxMjAw
RjI2MjAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKLQkJCQlGQjM5RDE5MDEyMDBGMjYyMDAw
ODhFNjkgLyogSW5mb1NpbmsuaCAqLywKLQkJCQlGQjM5RDE5MTEyMDBGMjYyMDAwODhFNjkgLyog
SW5pdGlhbGl6ZS5jcHAgKi8sCi0JCQkJRkIzOUQxOTIxMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRp
YWxpemUuaCAqLywKLQkJCQlGQjM5RDE5MzEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZURs
bC5jcHAgKi8sCi0JCQkJRkIzOUQxOTQxMjAwRjI2MjAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwu
aCAqLywKLQkJCQlGQjM5RDE5NTEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZUdsb2JhbHMu
aCAqLywKLQkJCQlGQjM5RDE5NjEyMDBGMjYyMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oICovLAotCQkJCUZCMzlEMTk3MTIwMEYyNjIwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUu
Y3BwICovLAotCQkJCUZCMzlEMTk4MTIwMEYyNjIwMDA4OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAq
LywKLQkJCQlGQjM5RDE5OTEyMDBGMjYyMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLywKLQkJ
CQlGQjM5RDE5QTEyMDBGMjYyMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAotCQkJ
CUZCMzlEMTlCMTIwMEYyNjIwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAotCQkJ
CUZCMzlEMTlDMTIwMEYyNjIwMDA4OEU2OSAvKiBNTWFwLmggKi8sCi0JCQkJRkIzOUQxOUQxMjAw
RjI2MjAwMDg4RTY5IC8qIG9zaW5jbHVkZS5oICovLAotCQkJCUZCMzlEMTlFMTIwMEYyNjIwMDA4
OEU2OSAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8sCi0JCQkJRkIzOUQxOUYxMjAwRjI2MjAwMDg4
RTY5IC8qIG9zc291cmNlX3dpbi5jcHAgKi8sCi0JCQkJRkIzOUQxQTAxMjAwRjI2MjAwMDg4RTY5
IC8qIE91dHB1dEdMU0wuY3BwICovLAotCQkJCUZCMzlEMUExMTIwMEYyNjIwMDA4OEU2OSAvKiBP
dXRwdXRHTFNMLmggKi8sCi0JCQkJRkIzOUQxQTIxMjAwRjI2MjAwMDg4RTY5IC8qIE91dHB1dEhM
U0wuY3BwICovLAotCQkJCUZCMzlEMUEzMTIwMEYyNjIwMDA4OEU2OSAvKiBPdXRwdXRITFNMLmgg
Ki8sCi0JCQkJRkIzOUQxQTQxMjAwRjI2MjAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwICovLAot
CQkJCUZCMzlEMUE1MTIwMEYyNjIwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi8sCi0JCQkJ
RkIzOUQxQTYxMjAwRjI2MjAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8sCi0JCQkJRkIzOUQx
QTcxMjAwRjI2MjAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8sCi0JCQkJRkIzOUQxQTgxMjAw
RjI2MjAwMDg4RTY5IC8qIFBvb2xBbGxvYy5oICovLAotCQkJCUZCMzlEMUE5MTIwMEYyNjIwMDA4
OEU2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCi0JCQkJRkIzOUQxQkIxMjAwRjI2MjAwMDg4RTY5IC8q
IFF1YWxpZmllckFsaXZlLmNwcCAqLywKLQkJCQlGQjM5RDFCQzEyMDBGMjYyMDAwODhFNjkgLyog
UXVhbGlmaWVyQWxpdmUuaCAqLywKLQkJCQlGQjM5RDFCRDEyMDBGMjYyMDAwODhFNjkgLyogUmVt
b3ZlVHJlZS5jcHAgKi8sCi0JCQkJRkIzOUQxQkUxMjAwRjI2MjAwMDg4RTY5IC8qIFJlbW92ZVRy
ZWUuaCAqLywKLQkJCQlGQjM5RDFCRjEyMDBGMjYyMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAg
Ki8sCi0JCQkJRkIzOUQxQzAxMjAwRjI2MjAwMDg4RTY5IC8qIFNoSGFuZGxlLmggKi8sCi0JCQkJ
RkIzOUQxQzExMjAwRjI2MjAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLywKLQkJCQlGQjM5
RDFDMjEyMDBGMjYyMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLywKLQkJCQlGQjM5RDFDQjEy
MDBGMjYyMDAwODhFNjkgLyogdHJhbnNsYXRvcl9jb21tb24udmNwcm9qICovLAotCQkJCUZCMzlE
MUNDMTIwMEYyNjIwMDA4OEU2OSAvKiB0cmFuc2xhdG9yX2hsc2wudmNwcm9qICovLAotCQkJCUZC
MzlEMUNEMTIwMEYyNjIwMDA4OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgKi8sCi0JCQkJRkIz
OUQxQ0UxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmggKi8sCi0JCQkJRkIzOUQx
Q0YxMjAwRjI2MjAwMDg4RTY5IC8qIFRyYW5zbGF0b3JITFNMLmNwcCAqLywKLQkJCQlGQjM5RDFE
MDEyMDBGMjYyMDAwODhFNjkgLyogVHJhbnNsYXRvckhMU0wuaCAqLywKLQkJCQlGQjM5RDFEMTEy
MDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLywKLQkJCQlGQjM5RDFEMjEyMDBGMjYyMDAwODhF
NjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLywKLQkJCQlGQjM5RDFEMzEyMDBGMjYyMDAwODhFNjkg
LyogVW5mb2xkU2VsZWN0LmggKi8sCi0JCQkJRkIzOUQxRDQxMjAwRjI2MjAwMDg4RTY5IC8qIHVu
aXN0ZC5oICovLAotCQkJKTsKLQkJCWluY2x1ZGVJbkluZGV4ID0gMDsKLQkJCW5hbWUgPSBjb21w
aWxlcjsKLQkJCXBhdGggPSBzcmMvY29tcGlsZXI7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwotCQl9OwotCQlGQjM5RDFBOTEyMDBGMjYyMDAwODhFNjkgLyogcHJlcHJvY2Vzc29yICovID0g
ewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlGQjM5RDFBQTEyMDBG
MjYyMDAwODhFNjkgLyogYXRvbS5jICovLAotCQkJCUZCMzlEMUFCMTIwMEYyNjIwMDA4OEU2OSAv
KiBhdG9tLmggKi8sCi0JCQkJRkIzOUQxQUMxMjAwRjI2MjAwMDg4RTY5IC8qIGNvbXBpbGUuaCAq
LywKLQkJCQlGQjM5RDFBRDEyMDBGMjYyMDAwODhFNjkgLyogY3BwLmMgKi8sCi0JCQkJRkIzOUQx
QUUxMjAwRjI2MjAwMDg4RTY5IC8qIGNwcC5oICovLAotCQkJCUZCMzlEMUFGMTIwMEYyNjIwMDA4
OEU2OSAvKiBjcHBzdHJ1Y3QuYyAqLywKLQkJCQlGQjM5RDFCMDEyMDBGMjYyMDAwODhFNjkgLyog
bWVtb3J5LmMgKi8sCi0JCQkJRkIzOUQxQjExMjAwRjI2MjAwMDg4RTY5IC8qIG1lbW9yeS5oICov
LAotCQkJCUZCMzlEMUIyMTIwMEYyNjIwMDA4OEU2OSAvKiBwYXJzZXIuaCAqLywKLQkJCQlGQjM5
RDFCMzEyMDBGMjYyMDAwODhFNjkgLyogcHJlcHJvY2Vzcy5oICovLAotCQkJCUZCMzlEMUI0MTIw
MEYyNjIwMDA4OEU2OSAvKiBzY2FubmVyLmMgKi8sCi0JCQkJRkIzOUQxQjUxMjAwRjI2MjAwMDg4
RTY5IC8qIHNjYW5uZXIuaCAqLywKLQkJCQlGQjM5RDFCNjEyMDBGMjYyMDAwODhFNjkgLyogc2xn
bG9iYWxzLmggKi8sCi0JCQkJRkIzOUQxQjcxMjAwRjI2MjAwMDg4RTY5IC8qIHN5bWJvbHMuYyAq
LywKLQkJCQlGQjM5RDFCODEyMDBGMjYyMDAwODhFNjkgLyogc3ltYm9scy5oICovLAotCQkJCUZC
MzlEMUI5MTIwMEYyNjIwMDA4OEU2OSAvKiB0b2tlbnMuYyAqLywKLQkJCQlGQjM5RDFCQTEyMDBG
MjYyMDAwODhFNjkgLyogdG9rZW5zLmggKi8sCi0JCQkpOwotCQkJaW5jbHVkZUluSW5kZXggPSAw
OwotCQkJcGF0aCA9IHByZXByb2Nlc3NvcjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0J
CX07Ci0JCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9IHsKLQkJCWlz
YSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJRkIzOUQyMjExMjAwRjM1QTAwMDg4
RTY5IC8qIEJhc2VUeXBlcy5oICovLAotCQkJCUZCMzlEMjIyMTIwMEYzNUEwMDA4OEU2OSAvKiBD
b2RlR2VuR0xTTC5jcHAgKi8sCi0JCQkJRkIzOUQyMjQxMjAwRjM1QTAwMDg4RTY5IC8qIENvbW1v
bi5oICovLAotCQkJCUZCMzlEMjI1MTIwMEYzNUEwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmgg
Ki8sCi0JCQkJRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLywKLQkJCQlG
QjM5RDIyNzEyMDBGMzVBMDAwODhFNjkgLyogZGVidWcuaCAqLywKLQkJCQlGQjM5RDIyODEyMDBG
MzVBMDAwODhFNjkgLyogZ2xzbGFuZy5sICovLAotCQkJCUZCMzlEMjI5MTIwMEYzNUEwMDA4OEU2
OSAvKiBnbHNsYW5nLnkgKi8sCi0JCQkJRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9T
aW5rLmNwcCAqLywKLQkJCQlGQjM5RDIyQjEyMDBGMzVBMDAwODhFNjkgLyogSW5mb1NpbmsuaCAq
LywKLQkJCQlGQjM5RDIyQzEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZS5jcHAgKi8sCi0J
CQkJRkIzOUQyMkQxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemUuaCAqLywKLQkJCQlGQjM5
RDIyRTEyMDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8sCi0JCQkJRkIzOUQy
MkYxMjAwRjM1QTAwMDg4RTY5IC8qIEluaXRpYWxpemVEbGwuaCAqLywKLQkJCQlGQjM5RDIzMDEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZUdsb2JhbHMuaCAqLywKLQkJCQlGQjM5RDIzMTEy
MDBGMzVBMDAwODhFNjkgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oICovLAotCQkJCUZCMzlE
MjMyMTIwMEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwICovLAotCQkJCUZCMzlEMjMz
MTIwMEYzNUEwMDA4OEU2OSAvKiBpbnRlcm1lZGlhdGUuaCAqLywKLQkJCQlGQjM5RDIzNDEyMDBG
MzVBMDAwODhFNjkgLyogaW50ZXJtT3V0LmNwcCAqLywKLQkJCQlGQjM5RDIzNTEyMDBGMzVBMDAw
ODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovLAotCQkJCUZCMzlEMjM2MTIwMEYzNUEwMDA4
OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAotCQkJCUZCMzlEMjM3MTIwMEYzNUEwMDA4
OEU2OSAvKiBNTWFwLmggKi8sCi0JCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zaW5j
bHVkZS5oICovLAotCQkJCUZCMzlEMjM5MTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJjZV9wb3Np
eC5jcHAgKi8sCi0JCQkJRkIzOUQyM0ExMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3dpbi5j
cHAgKi8sCi0JCQkJRkIzOUQyM0IxMjAwRjM1QTAwMDg4RTY5IC8qIE91dHB1dEdMU0wuY3BwICov
LAotCQkJCUZCMzlEMjNDMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNMLmggKi8sCi0JCQkJ
RkIzOUQyM0YxMjAwRjM1QTAwMDg4RTY5IC8qIHBhcnNlQ29uc3QuY3BwICovLAotCQkJCUZCMzlE
MjQwMTIwMEYzNUEwMDA4OEU2OSAvKiBQYXJzZUhlbHBlci5jcHAgKi8sCi0JCQkJRkIzOUQyNDEx
MjAwRjM1QTAwMDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8sCi0JCQkJRkIzOUQyNDIxMjAwRjM1
QTAwMDg4RTY5IC8qIFBvb2xBbGxvYy5jcHAgKi8sCi0JCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4
RTY5IC8qIFBvb2xBbGxvYy5oICovLAotCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBw
cmVwcm9jZXNzb3IgKi8sCi0JCQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmll
ckFsaXZlLmNwcCAqLywKLQkJCQlGQjM5RDI1NzEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVy
QWxpdmUuaCAqLywKLQkJCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5j
cHAgKi8sCi0JCQkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywK
LQkJCQlGQjM5RDI1QTEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgKi8sCi0JCQkJ
RkIzOUQyNUIxMjAwRjM1QTAwMDg4RTY5IC8qIFNoSGFuZGxlLmggKi8sCi0JCQkJRkIzOUQyNUMx
MjAwRjM1QTAwMDg4RTY5IC8qIFN5bWJvbFRhYmxlLmNwcCAqLywKLQkJCQlGQjM5RDI1RDEyMDBG
MzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuaCAqLywKLQkJCQlGQjM5RDI2ODEyMDBGMzVBMDAw
ODhFNjkgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAotCQkJCUZCMzlEMjY5MTIwMEYzNUEwMDA4
OEU2OSAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAotCQkJCUZCMzlEMjZDMTIwMEYzNUEwMDA4OEU2
OSAvKiBUeXBlcy5oICovLAotCQkJCUZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRT
ZWxlY3QuY3BwICovLAotCQkJCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxl
Y3QuaCAqLywKLQkJCQlGQjM5RDI2RjEyMDBGMzVBMDAwODhFNjkgLyogdW5pc3RkLmggKi8sCi0J
CQkpOwotCQkJbmFtZSA9IGNvbXBpbGVyOwotCQkJcGF0aCA9IHNyYy9jb21waWxlcjsKLQkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAv
KiBwcmVwcm9jZXNzb3IgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0g
KAotCQkJCUZCMzlEMjQ1MTIwMEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgKi8sCi0JCQkJRkIzOUQy
NDYxMjAwRjM1QTAwMDg4RTY5IC8qIGF0b20uaCAqLywKLQkJCQlGQjM5RDI0NzEyMDBGMzVBMDAw
ODhFNjkgLyogY29tcGlsZS5oICovLAotCQkJCUZCMzlEMjQ4MTIwMEYzNUEwMDA4OEU2OSAvKiBj
cHAuYyAqLywKLQkJCQlGQjM5RDI0OTEyMDBGMzVBMDAwODhFNjkgLyogY3BwLmggKi8sCi0JCQkJ
RkIzOUQyNEExMjAwRjM1QTAwMDg4RTY5IC8qIGNwcHN0cnVjdC5jICovLAotCQkJCUZCMzlEMjRC
MTIwMEYzNUEwMDA4OEU2OSAvKiBtZW1vcnkuYyAqLywKLQkJCQlGQjM5RDI0QzEyMDBGMzVBMDAw
ODhFNjkgLyogbWVtb3J5LmggKi8sCi0JCQkJRkIzOUQyNEQxMjAwRjM1QTAwMDg4RTY5IC8qIHBh
cnNlci5oICovLAotCQkJCUZCMzlEMjRFMTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzLmgg
Ki8sCi0JCQkJRkIzOUQyNEYxMjAwRjM1QTAwMDg4RTY5IC8qIHNjYW5uZXIuYyAqLywKLQkJCQlG
QjM5RDI1MDEyMDBGMzVBMDAwODhFNjkgLyogc2Nhbm5lci5oICovLAotCQkJCUZCMzlEMjUxMTIw
MEYzNUEwMDA4OEU2OSAvKiBzbGdsb2JhbHMuaCAqLywKLQkJCQlGQjM5RDI1MjEyMDBGMzVBMDAw
ODhFNjkgLyogc3ltYm9scy5jICovLAotCQkJCUZCMzlEMjUzMTIwMEYzNUEwMDA4OEU2OSAvKiBz
eW1ib2xzLmggKi8sCi0JCQkJRkIzOUQyNTQxMjAwRjM1QTAwMDg4RTY5IC8qIHRva2Vucy5jICov
LAotCQkJCUZCMzlEMjU1MTIwMEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuaCAqLywKLQkJCSk7Ci0J
CQlwYXRoID0gcHJlcHJvY2Vzc29yOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsK
LQkJRkIzOUQyQkQxMjAwRjNFNjAwMDg4RTY5IC8qIEdMU0xBTkcgKi8gPSB7Ci0JCQlpc2EgPSBQ
QlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAv
KiBTaGFkZXJMYW5nLmggKi8sCi0JCQkpOwotCQkJbmFtZSA9IEdMU0xBTkc7Ci0JCQlwYXRoID0g
aW5jbHVkZS9HTFNMQU5HOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8qIEVu
ZCBQQlhHcm91cCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNl
Y3Rpb24gKi8KLQkJRkIzOUQ3N0IxMjAxMTEwQzAwMDg4RTY5IC8qIEhlYWRlcnMgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQlGQjM5RDc2RTEyMDExMEZDMDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCQlGQjM5RDBE
MDEyMDBGMEUzMDAwODhFNjkgLyogQU5HTEUgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJn
ZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gRkIzOUQwRDYxMjAwRjExRTAwMDg4RTY5
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJBTkdMRSIg
Ki87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQlGQjM5RDc3QjEyMDExMTBDMDAwODhFNjkgLyog
SGVhZGVycyAqLywKLQkJCQlGQjM5RDBERTEyMDBGMTkxMDAwODhFNjkgLyogR2VuZXJhdGUgZ2xz
bGFuZyBsZXhlciAqLywKLQkJCQlGQjM5RDMxQzEyMDBGNjkyMDAwODhFNjkgLyogR2VuZXJhdGUg
Z2xzbGFuZyBwYXJzZXIgKi8sCi0JCQkJRkIzOUQwQ0UxMjAwRjBFMzAwMDg4RTY5IC8qIFNvdXJj
ZXMgKi8sCi0JCQkJRkIzOUQwQ0YxMjAwRjBFMzAwMDg4RTY5IC8qIEZyYW1ld29ya3MgKi8sCi0J
CQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkp
OwotCQkJbmFtZSA9IEFOR0xFOwotCQkJcHJvZHVjdE5hbWUgPSBhbmdsZTsKLQkJCXByb2R1Y3RS
ZWZlcmVuY2UgPSBGQjM5RDBEMTEyMDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLzsKLQkJ
CXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOwot
CQl9OwotLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFBy
b2plY3Qgc2VjdGlvbiAqLwotCQlGQjM5RDA3MDEyMDBFRDkyMDAwODhFNjkgLyogUHJvamVjdCBv
YmplY3QgKi8gPSB7Ci0JCQlpc2EgPSBQQlhQcm9qZWN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
TGlzdCA9IEZCMzlEMDczMTIwMEVEOTIwMDA4OEU2OSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWFByb2plY3QgIkFOR0xFIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0g
Ilhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNTY2Fu
bmVkRm9yRW5jb2RpbmdzID0gMDsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQlFbmdsaXNoLAot
CQkJCUphcGFuZXNlLAotCQkJCUZyZW5jaCwKLQkJCQlHZXJtYW4sCi0JCQkpOwotCQkJbWFpbkdy
b3VwID0gRkIzOUQwNkUxMjAwRUQ5MjAwMDg4RTY5OwotCQkJcHJvamVjdERpclBhdGggPSAiIjsK
LQkJCXByb2plY3RSb290ID0gIiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCUZCMzlEMEQwMTIwMEYw
RTMwMDA4OEU2OSAvKiBBTkdMRSAqLywKLQkJCSk7Ci0JCX07Ci0vKiBFbmQgUEJYUHJvamVjdCBz
ZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICov
Ci0JCUZCMzlEMERFMTIwMEYxOTEwMDA4OEU2OSAvKiBHZW5lcmF0ZSBnbHNsYW5nIGxleGVyICov
ID0gewotCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25N
YXNrID0gMTI7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0gKAotCQkJCSIk
KFNSQ1JPT1QpL3NyYy9jb21waWxlci9nbHNsYW5nLmwiLAotCQkJKTsKLQkJCW5hbWUgPSAiR2Vu
ZXJhdGUgZ2xzbGFuZyBsZXhlciI7Ci0JCQlvdXRwdXRQYXRocyA9ICgKLQkJCQkiJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzLyQoUFJPSkVDVF9OQU1FKS9nbHNsYW5nLmNwcCIs
Ci0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlz
aGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hlbGxTY3JpcHQgPSAibWtkaXIgLXAgXCIke0JVSUxU
X1BST0RVQ1RTX0RJUn0vRGVyaXZlZFNvdXJjZXMvJHtQUk9KRUNUX05BTUV9XCJcbmZsZXggLS1u
b2xpbmUgLS1ub3VuaXN0ZCBcIi0tb3V0ZmlsZT0ke0JVSUxUX1BST0RVQ1RTX0RJUn0vRGVyaXZl
ZFNvdXJjZXMvJHtQUk9KRUNUX05BTUV9L2dsc2xhbmcuY3BwXCIgXCIke1NSQ1JPT1R9L3NyYy9j
b21waWxlci9nbHNsYW5nLmxcIlxuIjsKLQkJfTsKLQkJRkIzOUQzMUMxMjAwRjY5MjAwMDg4RTY5
IC8qIEdlbmVyYXRlIGdsc2xhbmcgcGFyc2VyICovID0gewotCQkJaXNhID0gUEJYU2hlbGxTY3Jp
cHRCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVz
ID0gKAotCQkJKTsKLQkJCWlucHV0UGF0aHMgPSAoCi0JCQkJIiQoU1JDUk9PVCkvc3JjL2NvbXBp
bGVyL2dsc2xhbmcueSIsCi0JCQkpOwotCQkJbmFtZSA9ICJHZW5lcmF0ZSBnbHNsYW5nIHBhcnNl
ciI7Ci0JCQlvdXRwdXRQYXRocyA9ICgKLQkJCQkiJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzLyQoUFJPSkVDVF9OQU1FKS9nbHNsYW5nX3RhYi5jcHAiLAotCQkJCSIkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvJChQUk9KRUNUX05BTUUpL2dsc2xhbmdfdGFi
LmgiLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwot
CQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKLQkJCXNoZWxsU2NyaXB0ID0gIm1rZGlyIC1wIFwiJHtC
VUlMVF9QUk9EVUNUU19ESVJ9L0Rlcml2ZWRTb3VyY2VzLyR7UFJPSkVDVF9OQU1FfVwiXG5iaXNv
biAtLW5vLWxpbmVzIFwiLS1kZWZpbmVzPSR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291
cmNlcy8ke1BST0pFQ1RfTkFNRX0vZ2xzbGFuZ190YWIuaFwiIFwiLS1za2VsZXRvbj15YWNjLmNc
IiBcIi0tb3V0cHV0PSR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcy8ke1BST0pF
Q1RfTkFNRX0vZ2xzbGFuZ190YWIuY3BwXCIgXCIke1NSQ1JPT1R9L3NyYy9jb21waWxlci9nbHNs
YW5nLnlcIlxuIjsKLQkJfTsKLS8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCUZCMzlE
MENFMTIwMEYwRTMwMDA4OEU2OSAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMg
PSAoCi0JCQkJRkIzOUQ3MjMxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJRkIzOUQ3MjQxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUZCMzlEMjcxMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xT
TC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkgLyogZGVi
dWcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyNzkxMjAwRjM1QTAwMDg4RTY5IC8qIElu
Zm9TaW5rLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjdCMTIwMEYzNUEwMDA4OEU2OSAv
KiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjdEMTIwMEYzNUEwMDA4
OEU2OSAvKiBJbml0aWFsaXplRGxsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjgxMTIw
MEYzNUEwMDA4OEU2OSAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIz
OUQyODMxMjAwRjM1QTAwMDg4RTY5IC8qIGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlGQjM5RDI4NDEyMDBGMzVBMDAwODhFNjkgLyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJRkIzOUQyODgxMjAwRjM1QTAwMDg4RTY5IC8qIG9zc291cmNlX3Bvc2l4LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjhBMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRH
TFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjhFMTIwMEYzNUEwMDA4OEU2OSAvKiBw
YXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjhGMTIwMEYzNUEwMDA4OEU2
OSAvKiBQYXJzZUhlbHBlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5MTEyMDBGMzVB
MDAwODhFNjkgLyogUG9vbEFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMjkzMTIw
MEYzNUEwMDA4OEU2OSAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5NjEyMDBG
MzVBMDAwODhFNjkgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5ODEyMDBGMzVB
MDAwODhFNjkgLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5OTEyMDBG
MzVBMDAwODhFNjkgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjM5RDI5RDEyMDBG
MzVBMDAwODhFNjkgLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyQTAxMjAw
RjM1QTAwMDg4RTY5IC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkEyMTIw
MEYzNUEwMDA4OEU2OSAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkE0MTIw
MEYzNUEwMDA4OEU2OSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlG
QjM5RDJBNjEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlGQjM5RDJBODEyMDBGMzVBMDAwODhFNjkgLyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlGQjM5RDJBQTEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJRkIzOUQyQUMxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JH
TFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCMzlEMkIxMTIwMEYzNUEwMDA4OEU2OSAvKiBV
bmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYU291cmNlc0J1aWxkUGhh
c2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICov
Ci0JCTVEN0M1OURCMTIwOEM2QzMwMDFDODczRSAvKiBQcm9kdWN0aW9uICovID0gewotCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9
IDVEN0M1OUM2MTIwOEM2OEIwMDFDODczRSAvKiBCYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUHJvZHVjdGlvbjsKLQkJfTsKLQkJNUQ3QzU5
REMxMjA4QzZDMzAwMUM4NzNFIC8qIFByb2R1Y3Rpb24gKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gNUQ3QzU5QzUx
MjA4QzY4QjAwMUM4NzNFIC8qIEFOR0xFLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9
IHsKLQkJCX07Ci0JCQluYW1lID0gUHJvZHVjdGlvbjsKLQkJfTsKLQkJRkIzOUQwNzExMjAwRUQ5
MjAwMDg4RTY5IC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDVEN0M1OUM3MTIwOEM2OEIwMDFDODcz
RSAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJ
CUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOwotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJ
fTsKLQkJRkIzOUQwNzIxMjAwRUQ5MjAwMDg4RTY5IC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0g
NUQ3QzU5QzcxMjA4QzY4QjAwMUM4NzNFIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJ
CWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCUZC
MzlEMEQyMTIwMEYwRTQwMDA4OEU2OSAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSA1RDdDNTlDNTEy
MDhDNjhCMDAxQzg3M0UgLyogQU5HTEUueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0g
ewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJRkIzOUQwRDMxMjAwRjBFNDAwMDg4
RTY5IC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJ
CWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gNUQ3QzU5QzUxMjA4QzY4QjAwMUM4NzNFIC8q
IEFOR0xFLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1l
ID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICov
Ci0KLS8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQlGQjM5RDA3MzEy
MDBFRDkyMDAwODhFNjkgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0
ICJBTkdMRSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRD
b25maWd1cmF0aW9ucyA9ICgKLQkJCQlGQjM5RDA3MTEyMDBFRDkyMDAwODhFNjkgLyogRGVidWcg
Ki8sCi0JCQkJRkIzOUQwNzIxMjAwRUQ5MjAwMDg4RTY5IC8qIFJlbGVhc2UgKi8sCi0JCQkJNUQ3
QzU5REIxMjA4QzZDMzAwMUM4NzNFIC8qIFByb2R1Y3Rpb24gKi8sCi0JCQkpOwotCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gUHJvZHVjdGlvbjsKLQkJfTsKLQkJRkIzOUQwRDYxMjAwRjExRTAwMDg4RTY5IC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJBTkdMRSIgKi8gPSB7Ci0J
CQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgK
LQkJCQlGQjM5RDBEMjEyMDBGMEU0MDAwODhFNjkgLyogRGVidWcgKi8sCi0JCQkJRkIzOUQwRDMx
MjAwRjBFNDAwMDg4RTY5IC8qIFJlbGVhc2UgKi8sCi0JCQkJNUQ3QzU5REMxMjA4QzZDMzAwMUM4
NzNFIC8qIFByb2R1Y3Rpb24gKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKLQkJ
fTsKLS8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KLQl9OwotCXJvb3RPYmpl
Y3QgPSBGQjM5RDA3MDEyMDBFRDkyMDAwODhFNjkgLyogUHJvamVjdCBvYmplY3QgKi87Ci19Cklu
ZGV4OiBBTkdMRS9Db25maWd1cmF0aW9ucy9BTkdMRS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9Db25maWd1cmF0aW9ucy9BTkdMRS54Y2NvbmZpZwkocmV2aXNpb24gNzQ2NTgpCisrKyBB
TkdMRS9Db25maWd1cmF0aW9ucy9BTkdMRS54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICswLDAgQEAKLVBST0RVQ1RfTkFNRSA9IEFOR0xFOwotCi1IRUFERVJfU0VBUkNIX1BBVEhTID0g
aW5jbHVkZSBzcmM7Ci1JTlNUQUxMX1BBVEggPSAvdXNyL2xvY2FsL2xpYjsKLVBVQkxJQ19IRUFE
RVJTX0ZPTERFUl9QQVRIID0gL3Vzci9sb2NhbC9pbmNsdWRlL0FOR0xFOwpJbmRleDogQU5HTEUv
Q29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9Db25maWd1
cmF0aW9ucy9CYXNlLnhjY29uZmlnCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL0NvbmZpZ3Vy
YXRpb25zL0Jhc2UueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBAQAotREVB
RF9DT0RFX1NUUklQUElORyA9IFlFUzsKLURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9IGR3YXJm
OwotR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OTsKLUdDQ19ERUJVR0dJTkdfU1lNQk9M
UyA9IGRlZmF1bHQ7Ci1HQ0NfRU5BQkxFX0NQUF9FWENFUFRJT05TID0gTk87Ci1HQ0NfRU5BQkxF
X0NQUF9SVFRJID0gTk87Ci1HQ0NfRU5BQkxFX09CSkNfRVhDRVBUSU9OUyA9IFlFUzsKLUdDQ19F
TkFCTEVfT0JKQ19HQyA9IHN1cHBvcnRlZDsKLUdDQ19FTkFCTEVfU1lNQk9MX1NFUEFSQVRJT04g
PSBOTzsKLUdDQ19GQVNUX09CSkNfRElTUEFUQ0ggPSBZRVM7Ci1HQ0NfTU9ERUxfVFVOSU5HID0g
RzU7Ci1HQ0NfT0JKQ19DQUxMX0NYWF9DRFRPUlMgPSBZRVM7Ci1HQ0NfT1BUSU1JWkFUSU9OX0xF
VkVMID0gczsKLUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBOTzsKLUdDQ19JTkxJTkVT
X0FSRV9QUklWQVRFX0VYVEVSTiA9IFlFUzsKLUdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0g
Tk87Ci1HQ0NfVEhSRUFEU0FGRV9TVEFUSUNTID0gTk87Ci1HQ0NfVFJFQVRfV0FSTklOR1NfQVNf
RVJST1JTID0gTk87Ci1HQ0NfV0FSTl9BQk9VVF9ERVBSRUNBVEVEX0ZVTkNUSU9OUyA9IE5POwot
TElOS0VSX0RJU1BMQVlTX01BTkdMRURfTkFNRVMgPSBZRVM7Ci1QUkVCSU5ESU5HID0gTk87Ci1T
VFJJUF9JTlNUQUxMRURfUFJPRFVDVCA9IE5POwotCi0KLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9O
X01BSk9SID0gJChNQUNfT1NfWF9WRVJTSU9OX01BSk9SKTsKLQotCi0vLyBVc2UgR0NDIDQuMiB3
aXRoIFhjb2RlIDMuMSwgd2hpY2ggaW5jbHVkZXMgR0NDIDQuMiBidXQgZGVmYXVsdHMgdG8gR0ND
IDQuMC4KLS8vIE5vdGUgdGhhdCBYY29kZSB2ZXJzaW9ucyBhcyBuZXcgYXMgMy4xLjIgdXNlIFhD
T0RFX1ZFUlNJT05fQUNUVUFMIGZvciB0aGUgbWlub3IgdmVyc2lvbgotLy8gbnVtYmVyLiAgTmV3
ZXIgdmVyc2lvbnMgb2YgWGNvZGUgdXNlIFhDT0RFX1ZFUlNJT05fTUlOT1IgZm9yIHRoZSBtaW5v
ciB2ZXJzaW9uLCBhbmQKLS8vIFhDT0RFX1ZFUlNJT05fQUNUVUFMIGZvciB0aGUgZnVsbCB2ZXJz
aW9uIG51bWJlci4KLVRBUkdFVF9HQ0NfVkVSU0lPTiA9ICQoVEFSR0VUX0dDQ19WRVJTSU9OXyQo
VEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKTsKLVRBUkdFVF9HQ0NfVkVSU0lPTl8gPSAk
KFRBUkdFVF9HQ0NfVkVSU0lPTl8xMDQwKTsKLVRBUkdFVF9HQ0NfVkVSU0lPTl8xMDQwID0gR0ND
XzQwOwotVEFSR0VUX0dDQ19WRVJTSU9OXzEwNTAgPSAkKFRBUkdFVF9HQ0NfVkVSU0lPTl8xMDUw
XyQoWENPREVfVkVSU0lPTl9NSU5PUikpOwotVEFSR0VUX0dDQ19WRVJTSU9OXzEwNTBfID0gJChU
QVJHRVRfR0NDX1ZFUlNJT05fMTA1MF8kKFhDT0RFX1ZFUlNJT05fQUNUVUFMKSk7Ci1UQVJHRVRf
R0NDX1ZFUlNJT05fMTA1MF8wMzEwID0gR0NDXzQyOwotVEFSR0VUX0dDQ19WRVJTSU9OXzEwNTBf
MDMyMCA9IEdDQ180MjsKLVRBUkdFVF9HQ0NfVkVSU0lPTl8xMDYwID0gR0NDXzQyOwotVEFSR0VU
X0dDQ19WRVJTSU9OXzEwNzAgPSBMTFZNX0dDQ180MjsKLQotR0NDX1ZFUlNJT04gPSAkKEdDQ19W
RVJTSU9OXyQoVEFSR0VUX0dDQ19WRVJTSU9OKSk7Ci1HQ0NfVkVSU0lPTl9HQ0NfNDAgPSA0LjA7
Ci1HQ0NfVkVSU0lPTl9HQ0NfNDIgPSA0LjI7Ci1HQ0NfVkVSU0lPTl9MTFZNX0dDQ180MiA9IGNv
bS5hcHBsZS5jb21waWxlcnMubGx2bWdjYzQyOwotCi0vLyBJZiB0aGUgdGFyZ2V0IE1hYyBPUyBY
IHZlcnNpb24gZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgTWFjIE9TIFggdmVyc2lvbiB0aGVu
IHdlJ2xsIHdhbnQgdG8gYnVpbGQgdXNpbmcgdGhlIHRhcmdldCB2ZXJzaW9uJ3MgU0RLLgotU0RL
Uk9PVCA9ICQoU0RLUk9PVF8kKE1BQ19PU19YX1ZFUlNJT05fTUFKT1IpXyQoVEFSR0VUX01BQ19P
U19YX1ZFUlNJT05fTUFKT1IpKTsKLVNES1JPT1RfMTA1MF8xMDQwID0gbWFjb3N4MTAuNGludGVy
bmFsOwotU0RLUk9PVF8xMDYwXzEwNDAgPSBtYWNvc3gxMC40aW50ZXJuYWw7Ci1TREtST09UXzEw
NjBfMTA1MCA9IG1hY29zeDEwLjVpbnRlcm5hbDsKLVNES1JPT1RfMTA3MF8xMDQwID0gbWFjb3N4
MTAuNGludGVybmFsOwotU0RLUk9PVF8xMDcwXzEwNTAgPSBtYWNvc3gxMC41aW50ZXJuYWw7Ci1T
REtST09UXzEwNzBfMTA2MCA9IG1hY29zeDEwLjZpbnRlcm5hbDsKSW5kZXg6IEFOR0xFL0NvbmZp
Z3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9Db25m
aWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlzaW9uIDc0NjU4KQorKysgQU5H
TEUvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDE5ICswLDAgQEAKLSNpbmNsdWRlICJCYXNlLnhjY29uZmlnIgotCi1BUkNIUyA9ICQoQVJD
SFNfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikpOwotQVJDSFNfID0gJChBUkNIU18x
MDQwKTsKLUFSQ0hTXzEwNDAgPSAkKE5BVElWRV9BUkNIKTsKLUFSQ0hTXzEwNTAgPSAkKE5BVElW
RV9BUkNIKTsKLUFSQ0hTXzEwNjAgPSAkKEFSQ0hTX1NUQU5EQVJEXzMyXzY0X0JJVCk7Ci1BUkNI
U18xMDcwID0gJChBUkNIU19TVEFOREFSRF8zMl82NF9CSVQpOwotCi1PTkxZX0FDVElWRV9BUkNI
ID0gWUVTOwotCi1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAkKE1BQ09TWF9ERVBMT1lNRU5U
X1RBUkdFVF8kKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SKSk7Ci1NQUNPU1hfREVQTE9Z
TUVOVF9UQVJHRVRfID0gMTAuNDsKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDQwID0gMTAu
NDsKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDUwID0gMTAuNTsKLU1BQ09TWF9ERVBMT1lN
RU5UX1RBUkdFVF8xMDYwID0gMTAuNjsKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDcwID0g
MTAuNzsKLQotR0NDX1dBUk5fQUJPVVRfREVQUkVDQVRFRF9GVU5DVElPTlMgPSBZRVM7CkluZGV4
OiBBTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0VH
TC9lZ2wuaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwzMjkgKzAsMCBAQAotLyogLSotIG1vZGU6IGM7IHRhYi13aWR0aDog
ODsgLSotICovCi0vKiB2aTogc2V0IHN3PTQgdHM9ODogKi8KLS8qIFJlZmVyZW5jZSB2ZXJzaW9u
IG9mIGVnbC5oIGZvciBFR0wgMS40LgotICogJFJldmlzaW9uOiA5MzU2ICQgb24gJERhdGU6IDIw
MDktMTAtMjEgMDI6NTI6MjUgLTA3MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKLSAqLwotCi0vKgot
KiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgotKioKLSoq
IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy
c29uIG9idGFpbmluZyBhCi0qKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0
ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0qKiAiTWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4g
dGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSoqIHdpdGhvdXQg
bGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz
aCwKLSoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg
TWF0ZXJpYWxzLCBhbmQgdG8KLSoqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1hdGVyaWFs
cyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0qKiB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnM6Ci0qKgotKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy
bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLSoqIGluIGFsbCBjb3BpZXMgb3Igc3Vi
c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KLSoqCi0qKiBUSEUgTUFURVJJQUxT
IEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotKiog
RVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS
QU5USUVTIE9GCi0qKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCi0qKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQotKiogQ0xBSU0sIERB
TUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD
VCwKLSoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05O
RUNUSU9OIFdJVEggVEhFCi0qKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H
UyBJTiBUSEUgTUFURVJJQUxTLgotKi8KLQotI2lmbmRlZiBfX2VnbF9oXwotI2RlZmluZSBfX2Vn
bF9oXwotCi0vKiBBbGwgcGxhdGZvcm0tZGVwZW5kZW50IHR5cGVzIGFuZCBtYWNybyBib2lsZXJw
bGF0ZSAoc3VjaCBhcyBFR0xBUEkKLSAqIGFuZCBFR0xBUElFTlRSWSkgc2hvdWxkIGdvIGluIGVn
bHBsYXRmb3JtLmguCi0gKi8KLSNpbmNsdWRlIDxFR0wvZWdscGxhdGZvcm0uaD4KLQotI2lmZGVm
IF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vKiBFR0wgVHlwZXMgKi8KLS8q
IEVHTGludCBpcyBkZWZpbmVkIGluIGVnbHBsYXRmb3JtLmggKi8KLXR5cGVkZWYgdW5zaWduZWQg
aW50IEVHTEJvb2xlYW47Ci10eXBlZGVmIHVuc2lnbmVkIGludCBFR0xlbnVtOwotdHlwZWRlZiB2
b2lkICpFR0xDb25maWc7Ci10eXBlZGVmIHZvaWQgKkVHTENvbnRleHQ7Ci10eXBlZGVmIHZvaWQg
KkVHTERpc3BsYXk7Ci10eXBlZGVmIHZvaWQgKkVHTFN1cmZhY2U7Ci10eXBlZGVmIHZvaWQgKkVH
TENsaWVudEJ1ZmZlcjsKLQotLyogRUdMIFZlcnNpb25pbmcgKi8KLSNkZWZpbmUgRUdMX1ZFUlNJ
T05fMV8wCQkJMQotI2RlZmluZSBFR0xfVkVSU0lPTl8xXzEJCQkxCi0jZGVmaW5lIEVHTF9WRVJT
SU9OXzFfMgkJCTEKLSNkZWZpbmUgRUdMX1ZFUlNJT05fMV8zCQkJMQotI2RlZmluZSBFR0xfVkVS
U0lPTl8xXzQJCQkxCi0KLS8qIEVHTCBFbnVtZXJhbnRzLiBCaXRtYXNrcyBhbmQgb3RoZXIgZXhj
ZXB0aW9uYWwgY2FzZXMgYXNpZGUsIG1vc3QKLSAqIGVudW1zIGFyZSBhc3NpZ25lZCB1bmlxdWUg
dmFsdWVzIHN0YXJ0aW5nIGF0IDB4MzAwMC4KLSAqLwotCi0vKiBFR0wgYWxpYXNlcyAqLwotI2Rl
ZmluZSBFR0xfRkFMU0UJCQkwCi0jZGVmaW5lIEVHTF9UUlVFCQkJMQotCi0vKiBPdXQtb2YtYmFu
ZCBoYW5kbGUgdmFsdWVzICovCi0jZGVmaW5lIEVHTF9ERUZBVUxUX0RJU1BMQVkJCSgoRUdMTmF0
aXZlRGlzcGxheVR5cGUpMCkKLSNkZWZpbmUgRUdMX05PX0NPTlRFWFQJCQkoKEVHTENvbnRleHQp
MCkKLSNkZWZpbmUgRUdMX05PX0RJU1BMQVkJCQkoKEVHTERpc3BsYXkpMCkKLSNkZWZpbmUgRUdM
X05PX1NVUkZBQ0UJCQkoKEVHTFN1cmZhY2UpMCkKLQotLyogT3V0LW9mLWJhbmQgYXR0cmlidXRl
IHZhbHVlICovCi0jZGVmaW5lIEVHTF9ET05UX0NBUkUJCQkoKEVHTGludCktMSkKLQotLyogRXJy
b3JzIC8gR2V0RXJyb3IgcmV0dXJuIHZhbHVlcyAqLwotI2RlZmluZSBFR0xfU1VDQ0VTUwkJCTB4
MzAwMAotI2RlZmluZSBFR0xfTk9UX0lOSVRJQUxJWkVECQkweDMwMDEKLSNkZWZpbmUgRUdMX0JB
RF9BQ0NFU1MJCQkweDMwMDIKLSNkZWZpbmUgRUdMX0JBRF9BTExPQwkJCTB4MzAwMwotI2RlZmlu
ZSBFR0xfQkFEX0FUVFJJQlVURQkJMHgzMDA0Ci0jZGVmaW5lIEVHTF9CQURfQ09ORklHCQkJMHgz
MDA1Ci0jZGVmaW5lIEVHTF9CQURfQ09OVEVYVAkJCTB4MzAwNgotI2RlZmluZSBFR0xfQkFEX0NV
UlJFTlRfU1VSRkFDRQkJMHgzMDA3Ci0jZGVmaW5lIEVHTF9CQURfRElTUExBWQkJCTB4MzAwOAot
I2RlZmluZSBFR0xfQkFEX01BVENICQkJMHgzMDA5Ci0jZGVmaW5lIEVHTF9CQURfTkFUSVZFX1BJ
WE1BUAkJMHgzMDBBCi0jZGVmaW5lIEVHTF9CQURfTkFUSVZFX1dJTkRPVwkJMHgzMDBCCi0jZGVm
aW5lIEVHTF9CQURfUEFSQU1FVEVSCQkweDMwMEMKLSNkZWZpbmUgRUdMX0JBRF9TVVJGQUNFCQkJ
MHgzMDBECi0jZGVmaW5lIEVHTF9DT05URVhUX0xPU1QJCTB4MzAwRQkvKiBFR0wgMS4xIC0gSU1H
X3Bvd2VyX21hbmFnZW1lbnQgKi8KLQotLyogUmVzZXJ2ZWQgMHgzMDBGLTB4MzAxRiBmb3IgYWRk
aXRpb25hbCBlcnJvcnMgKi8KLQotLyogQ29uZmlnIGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgRUdM
X0JVRkZFUl9TSVpFCQkJMHgzMDIwCi0jZGVmaW5lIEVHTF9BTFBIQV9TSVpFCQkJMHgzMDIxCi0j
ZGVmaW5lIEVHTF9CTFVFX1NJWkUJCQkweDMwMjIKLSNkZWZpbmUgRUdMX0dSRUVOX1NJWkUJCQkw
eDMwMjMKLSNkZWZpbmUgRUdMX1JFRF9TSVpFCQkJMHgzMDI0Ci0jZGVmaW5lIEVHTF9ERVBUSF9T
SVpFCQkJMHgzMDI1Ci0jZGVmaW5lIEVHTF9TVEVOQ0lMX1NJWkUJCTB4MzAyNgotI2RlZmluZSBF
R0xfQ09ORklHX0NBVkVBVAkJMHgzMDI3Ci0jZGVmaW5lIEVHTF9DT05GSUdfSUQJCQkweDMwMjgK
LSNkZWZpbmUgRUdMX0xFVkVMCQkJMHgzMDI5Ci0jZGVmaW5lIEVHTF9NQVhfUEJVRkZFUl9IRUlH
SFQJCTB4MzAyQQotI2RlZmluZSBFR0xfTUFYX1BCVUZGRVJfUElYRUxTCQkweDMwMkIKLSNkZWZp
bmUgRUdMX01BWF9QQlVGRkVSX1dJRFRICQkweDMwMkMKLSNkZWZpbmUgRUdMX05BVElWRV9SRU5E
RVJBQkxFCQkweDMwMkQKLSNkZWZpbmUgRUdMX05BVElWRV9WSVNVQUxfSUQJCTB4MzAyRQotI2Rl
ZmluZSBFR0xfTkFUSVZFX1ZJU1VBTF9UWVBFCQkweDMwMkYKLSNkZWZpbmUgRUdMX1NBTVBMRVMJ
CQkweDMwMzEKLSNkZWZpbmUgRUdMX1NBTVBMRV9CVUZGRVJTCQkweDMwMzIKLSNkZWZpbmUgRUdM
X1NVUkZBQ0VfVFlQRQkJMHgzMDMzCi0jZGVmaW5lIEVHTF9UUkFOU1BBUkVOVF9UWVBFCQkweDMw
MzQKLSNkZWZpbmUgRUdMX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUUJMHgzMDM1Ci0jZGVmaW5lIEVH
TF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRQkweDMwMzYKLSNkZWZpbmUgRUdMX1RSQU5TUEFSRU5U
X1JFRF9WQUxVRQkweDMwMzcKLSNkZWZpbmUgRUdMX05PTkUJCQkweDMwMzgJLyogQXR0cmliIGxp
c3QgdGVybWluYXRvciAqLwotI2RlZmluZSBFR0xfQklORF9UT19URVhUVVJFX1JHQgkJMHgzMDM5
Ci0jZGVmaW5lIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQQkweDMwM0EKLSNkZWZpbmUgRUdMX01J
Tl9TV0FQX0lOVEVSVkFMCQkweDMwM0IKLSNkZWZpbmUgRUdMX01BWF9TV0FQX0lOVEVSVkFMCQkw
eDMwM0MKLSNkZWZpbmUgRUdMX0xVTUlOQU5DRV9TSVpFCQkweDMwM0QKLSNkZWZpbmUgRUdMX0FM
UEhBX01BU0tfU0laRQkJMHgzMDNFCi0jZGVmaW5lIEVHTF9DT0xPUl9CVUZGRVJfVFlQRQkJMHgz
MDNGCi0jZGVmaW5lIEVHTF9SRU5ERVJBQkxFX1RZUEUJCTB4MzA0MAotI2RlZmluZSBFR0xfTUFU
Q0hfTkFUSVZFX1BJWE1BUAkJMHgzMDQxCS8qIFBzZXVkby1hdHRyaWJ1dGUgKG5vdCBxdWVyeWFi
bGUpICovCi0jZGVmaW5lIEVHTF9DT05GT1JNQU5UCQkJMHgzMDQyCi0KLS8qIFJlc2VydmVkIDB4
MzA0MS0weDMwNEYgZm9yIGFkZGl0aW9uYWwgY29uZmlnIGF0dHJpYnV0ZXMgKi8KLQotLyogQ29u
ZmlnIGF0dHJpYnV0ZSB2YWx1ZXMgKi8KLSNkZWZpbmUgRUdMX1NMT1dfQ09ORklHCQkJMHgzMDUw
CS8qIEVHTF9DT05GSUdfQ0FWRUFUIHZhbHVlICovCi0jZGVmaW5lIEVHTF9OT05fQ09ORk9STUFO
VF9DT05GSUcJMHgzMDUxCS8qIEVHTF9DT05GSUdfQ0FWRUFUIHZhbHVlICovCi0jZGVmaW5lIEVH
TF9UUkFOU1BBUkVOVF9SR0IJCTB4MzA1MgkvKiBFR0xfVFJBTlNQQVJFTlRfVFlQRSB2YWx1ZSAq
LwotI2RlZmluZSBFR0xfUkdCX0JVRkZFUgkJCTB4MzA4RQkvKiBFR0xfQ09MT1JfQlVGRkVSX1RZ
UEUgdmFsdWUgKi8KLSNkZWZpbmUgRUdMX0xVTUlOQU5DRV9CVUZGRVIJCTB4MzA4RgkvKiBFR0xf
Q09MT1JfQlVGRkVSX1RZUEUgdmFsdWUgKi8KLQotLyogTW9yZSBjb25maWcgYXR0cmlidXRlIHZh
bHVlcywgZm9yIEVHTF9URVhUVVJFX0ZPUk1BVCAqLwotI2RlZmluZSBFR0xfTk9fVEVYVFVSRQkJ
CTB4MzA1QwotI2RlZmluZSBFR0xfVEVYVFVSRV9SR0IJCQkweDMwNUQKLSNkZWZpbmUgRUdMX1RF
WFRVUkVfUkdCQQkJMHgzMDVFCi0jZGVmaW5lIEVHTF9URVhUVVJFXzJECQkJMHgzMDVGCi0KLS8q
IENvbmZpZyBhdHRyaWJ1dGUgbWFzayBiaXRzICovCi0jZGVmaW5lIEVHTF9QQlVGRkVSX0JJVAkJ
CTB4MDAwMQkvKiBFR0xfU1VSRkFDRV9UWVBFIG1hc2sgYml0cyAqLwotI2RlZmluZSBFR0xfUElY
TUFQX0JJVAkJCTB4MDAwMgkvKiBFR0xfU1VSRkFDRV9UWVBFIG1hc2sgYml0cyAqLwotI2RlZmlu
ZSBFR0xfV0lORE9XX0JJVAkJCTB4MDAwNAkvKiBFR0xfU1VSRkFDRV9UWVBFIG1hc2sgYml0cyAq
LwotI2RlZmluZSBFR0xfVkdfQ09MT1JTUEFDRV9MSU5FQVJfQklUCTB4MDAyMAkvKiBFR0xfU1VS
RkFDRV9UWVBFIG1hc2sgYml0cyAqLwotI2RlZmluZSBFR0xfVkdfQUxQSEFfRk9STUFUX1BSRV9C
SVQJMHgwMDQwCS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICovCi0jZGVmaW5lIEVHTF9N
VUxUSVNBTVBMRV9SRVNPTFZFX0JPWF9CSVQgMHgwMjAwCS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFz
ayBiaXRzICovCi0jZGVmaW5lIEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQgMHgwNDAw
CS8qIEVHTF9TVVJGQUNFX1RZUEUgbWFzayBiaXRzICovCi0KLSNkZWZpbmUgRUdMX09QRU5HTF9F
U19CSVQJCTB4MDAwMQkvKiBFR0xfUkVOREVSQUJMRV9UWVBFIG1hc2sgYml0cyAqLwotI2RlZmlu
ZSBFR0xfT1BFTlZHX0JJVAkJCTB4MDAwMgkvKiBFR0xfUkVOREVSQUJMRV9UWVBFIG1hc2sgYml0
cyAqLwotI2RlZmluZSBFR0xfT1BFTkdMX0VTMl9CSVQJCTB4MDAwNAkvKiBFR0xfUkVOREVSQUJM
RV9UWVBFIG1hc2sgYml0cyAqLwotI2RlZmluZSBFR0xfT1BFTkdMX0JJVAkJCTB4MDAwOAkvKiBF
R0xfUkVOREVSQUJMRV9UWVBFIG1hc2sgYml0cyAqLwotCi0vKiBRdWVyeVN0cmluZyB0YXJnZXRz
ICovCi0jZGVmaW5lIEVHTF9WRU5ET1IJCQkweDMwNTMKLSNkZWZpbmUgRUdMX1ZFUlNJT04JCQkw
eDMwNTQKLSNkZWZpbmUgRUdMX0VYVEVOU0lPTlMJCQkweDMwNTUKLSNkZWZpbmUgRUdMX0NMSUVO
VF9BUElTCQkJMHgzMDhECi0KLS8qIFF1ZXJ5U3VyZmFjZSAvIFN1cmZhY2VBdHRyaWIgLyBDcmVh
dGVQYnVmZmVyU3VyZmFjZSB0YXJnZXRzICovCi0jZGVmaW5lIEVHTF9IRUlHSFQJCQkweDMwNTYK
LSNkZWZpbmUgRUdMX1dJRFRICQkJMHgzMDU3Ci0jZGVmaW5lIEVHTF9MQVJHRVNUX1BCVUZGRVIJ
CTB4MzA1OAotI2RlZmluZSBFR0xfVEVYVFVSRV9GT1JNQVQJCTB4MzA4MAotI2RlZmluZSBFR0xf
VEVYVFVSRV9UQVJHRVQJCTB4MzA4MQotI2RlZmluZSBFR0xfTUlQTUFQX1RFWFRVUkUJCTB4MzA4
MgotI2RlZmluZSBFR0xfTUlQTUFQX0xFVkVMCQkweDMwODMKLSNkZWZpbmUgRUdMX1JFTkRFUl9C
VUZGRVIJCTB4MzA4NgotI2RlZmluZSBFR0xfVkdfQ09MT1JTUEFDRQkJMHgzMDg3Ci0jZGVmaW5l
IEVHTF9WR19BTFBIQV9GT1JNQVQJCTB4MzA4OAotI2RlZmluZSBFR0xfSE9SSVpPTlRBTF9SRVNP
TFVUSU9OCTB4MzA5MAotI2RlZmluZSBFR0xfVkVSVElDQUxfUkVTT0xVVElPTgkJMHgzMDkxCi0j
ZGVmaW5lIEVHTF9QSVhFTF9BU1BFQ1RfUkFUSU8JCTB4MzA5MgotI2RlZmluZSBFR0xfU1dBUF9C
RUhBVklPUgkJMHgzMDkzCi0jZGVmaW5lIEVHTF9NVUxUSVNBTVBMRV9SRVNPTFZFCQkweDMwOTkK
LQotLyogRUdMX1JFTkRFUl9CVUZGRVIgdmFsdWVzIC8gQmluZFRleEltYWdlIC8gUmVsZWFzZVRl
eEltYWdlIGJ1ZmZlciB0YXJnZXRzICovCi0jZGVmaW5lIEVHTF9CQUNLX0JVRkZFUgkJCTB4MzA4
NAotI2RlZmluZSBFR0xfU0lOR0xFX0JVRkZFUgkJMHgzMDg1Ci0KLS8qIE9wZW5WRyBjb2xvciBz
cGFjZXMgKi8KLSNkZWZpbmUgRUdMX1ZHX0NPTE9SU1BBQ0Vfc1JHQgkJMHgzMDg5CS8qIEVHTF9W
R19DT0xPUlNQQUNFIHZhbHVlICovCi0jZGVmaW5lIEVHTF9WR19DT0xPUlNQQUNFX0xJTkVBUgkw
eDMwOEEJLyogRUdMX1ZHX0NPTE9SU1BBQ0UgdmFsdWUgKi8KLQotLyogT3BlblZHIGFscGhhIGZv
cm1hdHMgKi8KLSNkZWZpbmUgRUdMX1ZHX0FMUEhBX0ZPUk1BVF9OT05QUkUJMHgzMDhCCS8qIEVH
TF9BTFBIQV9GT1JNQVQgdmFsdWUgKi8KLSNkZWZpbmUgRUdMX1ZHX0FMUEhBX0ZPUk1BVF9QUkUJ
CTB4MzA4QwkvKiBFR0xfQUxQSEFfRk9STUFUIHZhbHVlICovCi0KLS8qIENvbnN0YW50IHNjYWxl
IGZhY3RvciBieSB3aGljaCBmcmFjdGlvbmFsIGRpc3BsYXkgcmVzb2x1dGlvbnMgJgotICogYXNw
ZWN0IHJhdGlvIGFyZSBzY2FsZWQgd2hlbiBxdWVyaWVkIGFzIGludGVnZXIgdmFsdWVzLgotICov
Ci0jZGVmaW5lIEVHTF9ESVNQTEFZX1NDQUxJTkcJCTEwMDAwCi0KLS8qIFVua25vd24gZGlzcGxh
eSByZXNvbHV0aW9uL2FzcGVjdCByYXRpbyAqLwotI2RlZmluZSBFR0xfVU5LTk9XTgkJCSgoRUdM
aW50KS0xKQotCi0vKiBCYWNrIGJ1ZmZlciBzd2FwIGJlaGF2aW9ycyAqLwotI2RlZmluZSBFR0xf
QlVGRkVSX1BSRVNFUlZFRAkJMHgzMDk0CS8qIEVHTF9TV0FQX0JFSEFWSU9SIHZhbHVlICovCi0j
ZGVmaW5lIEVHTF9CVUZGRVJfREVTVFJPWUVECQkweDMwOTUJLyogRUdMX1NXQVBfQkVIQVZJT1Ig
dmFsdWUgKi8KLQotLyogQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIgYnVmZmVyIHR5cGVz
ICovCi0jZGVmaW5lIEVHTF9PUEVOVkdfSU1BR0UJCTB4MzA5NgotCi0vKiBRdWVyeUNvbnRleHQg
dGFyZ2V0cyAqLwotI2RlZmluZSBFR0xfQ09OVEVYVF9DTElFTlRfVFlQRQkJMHgzMDk3Ci0KLS8q
IENyZWF0ZUNvbnRleHQgYXR0cmlidXRlcyAqLwotI2RlZmluZSBFR0xfQ09OVEVYVF9DTElFTlRf
VkVSU0lPTgkweDMwOTgKLQotLyogTXVsdGlzYW1wbGUgcmVzb2x1dGlvbiBiZWhhdmlvcnMgKi8K
LSNkZWZpbmUgRUdMX01VTFRJU0FNUExFX1JFU09MVkVfREVGQVVMVCAweDMwOUEJLyogRUdMX01V
TFRJU0FNUExFX1JFU09MVkUgdmFsdWUgKi8KLSNkZWZpbmUgRUdMX01VTFRJU0FNUExFX1JFU09M
VkVfQk9YCTB4MzA5QgkvKiBFR0xfTVVMVElTQU1QTEVfUkVTT0xWRSB2YWx1ZSAqLwotCi0vKiBC
aW5kQVBJL1F1ZXJ5QVBJIHRhcmdldHMgKi8KLSNkZWZpbmUgRUdMX09QRU5HTF9FU19BUEkJCTB4
MzBBMAotI2RlZmluZSBFR0xfT1BFTlZHX0FQSQkJCTB4MzBBMQotI2RlZmluZSBFR0xfT1BFTkdM
X0FQSQkJCTB4MzBBMgotCi0vKiBHZXRDdXJyZW50U3VyZmFjZSB0YXJnZXRzICovCi0jZGVmaW5l
IEVHTF9EUkFXCQkJMHgzMDU5Ci0jZGVmaW5lIEVHTF9SRUFECQkJMHgzMDVBCi0KLS8qIFdhaXRO
YXRpdmUgZW5naW5lcyAqLwotI2RlZmluZSBFR0xfQ09SRV9OQVRJVkVfRU5HSU5FCQkweDMwNUIK
LQotLyogRUdMIDEuMiB0b2tlbnMgcmVuYW1lZCBmb3IgY29uc2lzdGVuY3kgaW4gRUdMIDEuMyAq
LwotI2RlZmluZSBFR0xfQ09MT1JTUEFDRQkJCUVHTF9WR19DT0xPUlNQQUNFCi0jZGVmaW5lIEVH
TF9BTFBIQV9GT1JNQVQJCUVHTF9WR19BTFBIQV9GT1JNQVQKLSNkZWZpbmUgRUdMX0NPTE9SU1BB
Q0Vfc1JHQgkJRUdMX1ZHX0NPTE9SU1BBQ0Vfc1JHQgotI2RlZmluZSBFR0xfQ09MT1JTUEFDRV9M
SU5FQVIJCUVHTF9WR19DT0xPUlNQQUNFX0xJTkVBUgotI2RlZmluZSBFR0xfQUxQSEFfRk9STUFU
X05PTlBSRQkJRUdMX1ZHX0FMUEhBX0ZPUk1BVF9OT05QUkUKLSNkZWZpbmUgRUdMX0FMUEhBX0ZP
Uk1BVF9QUkUJCUVHTF9WR19BTFBIQV9GT1JNQVRfUFJFCi0KLS8qIEVHTCBleHRlbnNpb25zIG11
c3QgcmVxdWVzdCBlbnVtIGJsb2NrcyBmcm9tIHRoZSBLaHJvbm9zCi0gKiBBUEkgUmVnaXN0cmFy
LCB3aG8gbWFpbnRhaW5zIHRoZSBlbnVtZXJhbnQgcmVnaXN0cnkuIFN1Ym1pdAotICogYSBidWcg
aW4gS2hyb25vcyBCdWd6aWxsYSBhZ2FpbnN0IHRhc2sgIlJlZ2lzdHJ5Ii4KLSAqLwotCi0KLQot
LyogRUdMIEZ1bmN0aW9ucyAqLwotCi1FR0xBUEkgRUdMaW50IEVHTEFQSUVOVFJZIGVnbEdldEVy
cm9yKHZvaWQpOwotCi1FR0xBUEkgRUdMRGlzcGxheSBFR0xBUElFTlRSWSBlZ2xHZXREaXNwbGF5
KEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlfaWQpOwotRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsSW5pdGlhbGl6ZShFR0xEaXNwbGF5IGRweSwgRUdMaW50ICptYWpvciwgRUdM
aW50ICptaW5vcik7Ci1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xUZXJtaW5hdGUo
RUdMRGlzcGxheSBkcHkpOwotCi1FR0xBUEkgY29uc3QgY2hhciAqIEVHTEFQSUVOVFJZIGVnbFF1
ZXJ5U3RyaW5nKEVHTERpc3BsYXkgZHB5LCBFR0xpbnQgbmFtZSk7Ci0KLUVHTEFQSSBFR0xCb29s
ZWFuIEVHTEFQSUVOVFJZIGVnbEdldENvbmZpZ3MoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyAq
Y29uZmlncywKLQkJCSBFR0xpbnQgY29uZmlnX3NpemUsIEVHTGludCAqbnVtX2NvbmZpZyk7Ci1F
R0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xDaG9vc2VDb25maWcoRUdMRGlzcGxheSBk
cHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QsCi0JCQkgICBFR0xDb25maWcgKmNvbmZpZ3Ms
IEVHTGludCBjb25maWdfc2l6ZSwKLQkJCSAgIEVHTGludCAqbnVtX2NvbmZpZyk7Ci1FR0xBUEkg
RUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xHZXRDb25maWdBdHRyaWIoRUdMRGlzcGxheSBkcHks
IEVHTENvbmZpZyBjb25maWcsCi0JCQkgICAgICBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZh
bHVlKTsKLQotRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlV2luZG93U3Vy
ZmFjZShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywKLQkJCQkgIEVHTE5hdGl2ZVdp
bmRvd1R5cGUgd2luLAotCQkJCSAgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7Ci1FR0xBUEkg
RUdMU3VyZmFjZSBFR0xBUElFTlRSWSBlZ2xDcmVhdGVQYnVmZmVyU3VyZmFjZShFR0xEaXNwbGF5
IGRweSwgRUdMQ29uZmlnIGNvbmZpZywKLQkJCQkgICBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0
KTsKLUVHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVBpeG1hcFN1cmZhY2Uo
RUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsCi0JCQkJICBFR0xOYXRpdmVQaXhtYXBU
eXBlIHBpeG1hcCwKLQkJCQkgIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwotRUdMQVBJIEVH
TEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsRGVzdHJveVN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVH
TFN1cmZhY2Ugc3VyZmFjZSk7Ci1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVy
eVN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwKLQkJCSAgIEVHTGlu
dCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOwotCi1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElF
TlRSWSBlZ2xCaW5kQVBJKEVHTGVudW0gYXBpKTsKLUVHTEFQSSBFR0xlbnVtIEVHTEFQSUVOVFJZ
IGVnbFF1ZXJ5QVBJKHZvaWQpOwotCi1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xX
YWl0Q2xpZW50KHZvaWQpOwotCi1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xSZWxl
YXNlVGhyZWFkKHZvaWQpOwotCi1FR0xBUEkgRUdMU3VyZmFjZSBFR0xBUElFTlRSWSBlZ2xDcmVh
dGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcigKLQkgICAgICBFR0xEaXNwbGF5IGRweSwgRUdMZW51
bSBidWZ0eXBlLCBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAotCSAgICAgIEVHTENvbmZpZyBjb25m
aWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwotCi1FR0xBUEkgRUdMQm9vbGVhbiBFR0xB
UElFTlRSWSBlZ2xTdXJmYWNlQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmZh
Y2UsCi0JCQkgICAgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50IHZhbHVlKTsKLUVHTEFQSSBFR0xC
b29sZWFuIEVHTEFQSUVOVFJZIGVnbEJpbmRUZXhJbWFnZShFR0xEaXNwbGF5IGRweSwgRUdMU3Vy
ZmFjZSBzdXJmYWNlLCBFR0xpbnQgYnVmZmVyKTsKLUVHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVO
VFJZIGVnbFJlbGVhc2VUZXhJbWFnZShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNl
LCBFR0xpbnQgYnVmZmVyKTsKLQotCi1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xT
d2FwSW50ZXJ2YWwoRUdMRGlzcGxheSBkcHksIEVHTGludCBpbnRlcnZhbCk7Ci0KLQotRUdMQVBJ
IEVHTENvbnRleHQgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlQ29udGV4dChFR0xEaXNwbGF5IGRweSwg
RUdMQ29uZmlnIGNvbmZpZywKLQkJCSAgICBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQsCi0JCQkg
ICAgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7Ci1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElF
TlRSWSBlZ2xEZXN0cm95Q29udGV4dChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgpOwot
RUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsTWFrZUN1cnJlbnQoRUdMRGlzcGxheSBk
cHksIEVHTFN1cmZhY2UgZHJhdywKLQkJCSAgRUdMU3VyZmFjZSByZWFkLCBFR0xDb250ZXh0IGN0
eCk7Ci0KLUVHTEFQSSBFR0xDb250ZXh0IEVHTEFQSUVOVFJZIGVnbEdldEN1cnJlbnRDb250ZXh0
KHZvaWQpOwotRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsR2V0Q3VycmVudFN1cmZh
Y2UoRUdMaW50IHJlYWRkcmF3KTsKLUVHTEFQSSBFR0xEaXNwbGF5IEVHTEFQSUVOVFJZIGVnbEdl
dEN1cnJlbnREaXNwbGF5KHZvaWQpOwotRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWds
UXVlcnlDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCwKLQkJCSAgIEVHTGlu
dCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOwotCi1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElF
TlRSWSBlZ2xXYWl0R0wodm9pZCk7Ci1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xX
YWl0TmF0aXZlKEVHTGludCBlbmdpbmUpOwotRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkg
ZWdsU3dhcEJ1ZmZlcnMoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSk7Ci1FR0xB
UEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xDb3B5QnVmZmVycyhFR0xEaXNwbGF5IGRweSwg
RUdMU3VyZmFjZSBzdXJmYWNlLAotCQkJICBFR0xOYXRpdmVQaXhtYXBUeXBlIHRhcmdldCk7Ci0K
LS8qIFRoaXMgaXMgYSBnZW5lcmljIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSwgd2hvc2UgbmFtZSBp
bmRpY2F0ZXMgaXQgbXVzdAotICogYmUgY2FzdCB0byB0aGUgcHJvcGVyIHR5cGUgKmFuZCBjYWxs
aW5nIGNvbnZlbnRpb24qIGJlZm9yZSB1c2UuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKl9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpKHZvaWQpOwotCi0vKiBOb3csIGRlZmlu
ZSBlZ2xHZXRQcm9jQWRkcmVzcyB1c2luZyB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBwdHIuIHR5cGUg
Ki8KLUVHTEFQSSBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIEVHTEFQ
SUVOVFJZCi0gICAgICAgZWdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUpOwot
Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19lZ2xfaF8gKi8K
SW5kZXg6IEFOR0xFL2luY2x1ZGUvRUdML2VnbGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL2lu
Y2x1ZGUvRUdML2VnbGV4dC5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL2luY2x1ZGUvRUdM
L2VnbGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyMiArMCwwIEBACi0jaWZuZGVmIF9fZWds
ZXh0X2hfCi0jZGVmaW5lIF9fZWdsZXh0X2hfCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJu
ICJDIiB7Ci0jZW5kaWYKLQotLyoKLSoqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IFRoZSBLaHJv
bm9zIEdyb3VwIEluYy4KLSoqCi0qKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl
IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotKiogY29weSBvZiB0aGlzIHNv
ZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotKiogIk1h
dGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwg
aW5jbHVkaW5nCi0qKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks
IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0qKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQv
b3Igc2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCi0qKiBwZXJtaXQgcGVyc29u
cyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0
bwotKiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKioKLSoqIFRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCi0q
KiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBNYXRlcmlhbHMu
Ci0qKgotKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS
QU5UWSBPRiBBTlkgS0lORCwKLSoqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO
T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotKiogTUVSQ0hBTlRBQklMSVRZLCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgotKiogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCi0qKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBG
Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQotKiogTUFURVJJQUxTIE9SIFRI
RSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KLSovCi0KLSNpbmNsdWRl
IDxFR0wvZWdscGxhdGZvcm0uaD4KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEhlYWRlciBmaWxlIHZlcnNpb24g
bnVtYmVyICovCi0vKiBDdXJyZW50IHZlcnNpb24gYXQgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9y
ZWdpc3RyeS9lZ2wvICovCi0vKiAkUmV2aXNpb246IDEwNzk1ICQgb24gJERhdGU6IDIwMTAtMDMt
MTkgMTc6MDQ6MTcgLTA3MDAgKEZyaSwgMTkgTWFyIDIwMTApICQgKi8KLSNkZWZpbmUgRUdMX0VH
TEVYVF9WRVJTSU9OIDUKLQotI2lmbmRlZiBFR0xfS0hSX2NvbmZpZ19hdHRyaWJzCi0jZGVmaW5l
IEVHTF9LSFJfY29uZmlnX2F0dHJpYnMgMQotI2RlZmluZSBFR0xfQ09ORk9STUFOVF9LSFIJCQkw
eDMwNDIJLyogRUdMQ29uZmlnIGF0dHJpYnV0ZSAqLwotI2RlZmluZSBFR0xfVkdfQ09MT1JTUEFD
RV9MSU5FQVJfQklUX0tIUgkweDAwMjAJLyogRUdMX1NVUkZBQ0VfVFlQRSBiaXRmaWVsZCAqLwot
I2RlZmluZSBFR0xfVkdfQUxQSEFfRk9STUFUX1BSRV9CSVRfS0hSCQkweDAwNDAJLyogRUdMX1NV
UkZBQ0VfVFlQRSBiaXRmaWVsZCAqLwotI2VuZGlmCi0KLSNpZm5kZWYgRUdMX0tIUl9sb2NrX3N1
cmZhY2UKLSNkZWZpbmUgRUdMX0tIUl9sb2NrX3N1cmZhY2UgMQotI2RlZmluZSBFR0xfUkVBRF9T
VVJGQUNFX0JJVF9LSFIJCTB4MDAwMQkvKiBFR0xfTE9DS19VU0FHRV9ISU5UX0tIUiBiaXRmaWVs
ZCAqLwotI2RlZmluZSBFR0xfV1JJVEVfU1VSRkFDRV9CSVRfS0hSCQkweDAwMDIJLyogRUdMX0xP
Q0tfVVNBR0VfSElOVF9LSFIgYml0ZmllbGQgKi8KLSNkZWZpbmUgRUdMX0xPQ0tfU1VSRkFDRV9C
SVRfS0hSCQkweDAwODAJLyogRUdMX1NVUkZBQ0VfVFlQRSBiaXRmaWVsZCAqLwotI2RlZmluZSBF
R0xfT1BUSU1BTF9GT1JNQVRfQklUX0tIUgkJMHgwMTAwCS8qIEVHTF9TVVJGQUNFX1RZUEUgYml0
ZmllbGQgKi8KLSNkZWZpbmUgRUdMX01BVENIX0ZPUk1BVF9LSFIJCQkweDMwNDMJLyogRUdMQ29u
ZmlnIGF0dHJpYnV0ZSAqLwotI2RlZmluZSBFR0xfRk9STUFUX1JHQl81NjVfRVhBQ1RfS0hSCQkw
eDMwQzAJLyogRUdMX01BVENIX0ZPUk1BVF9LSFIgdmFsdWUgKi8KLSNkZWZpbmUgRUdMX0ZPUk1B
VF9SR0JfNTY1X0tIUgkJCTB4MzBDMQkvKiBFR0xfTUFUQ0hfRk9STUFUX0tIUiB2YWx1ZSAqLwot
I2RlZmluZSBFR0xfRk9STUFUX1JHQkFfODg4OF9FWEFDVF9LSFIJCTB4MzBDMgkvKiBFR0xfTUFU
Q0hfRk9STUFUX0tIUiB2YWx1ZSAqLwotI2RlZmluZSBFR0xfRk9STUFUX1JHQkFfODg4OF9LSFIJ
CTB4MzBDMwkvKiBFR0xfTUFUQ0hfRk9STUFUX0tIUiB2YWx1ZSAqLwotI2RlZmluZSBFR0xfTUFQ
X1BSRVNFUlZFX1BJWEVMU19LSFIJCTB4MzBDNAkvKiBlZ2xMb2NrU3VyZmFjZUtIUiBhdHRyaWJ1
dGUgKi8KLSNkZWZpbmUgRUdMX0xPQ0tfVVNBR0VfSElOVF9LSFIJCQkweDMwQzUJLyogZWdsTG9j
a1N1cmZhY2VLSFIgYXR0cmlidXRlICovCi0jZGVmaW5lIEVHTF9CSVRNQVBfUE9JTlRFUl9LSFIJ
CQkweDMwQzYJLyogZWdsUXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLwotI2RlZmluZSBFR0xfQklU
TUFQX1BJVENIX0tIUgkJCTB4MzBDNwkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCi0j
ZGVmaW5lIEVHTF9CSVRNQVBfT1JJR0lOX0tIUgkJCTB4MzBDOAkvKiBlZ2xRdWVyeVN1cmZhY2Ug
YXR0cmlidXRlICovCi0jZGVmaW5lIEVHTF9CSVRNQVBfUElYRUxfUkVEX09GRlNFVF9LSFIJCTB4
MzBDOQkvKiBlZ2xRdWVyeVN1cmZhY2UgYXR0cmlidXRlICovCi0jZGVmaW5lIEVHTF9CSVRNQVBf
UElYRUxfR1JFRU5fT0ZGU0VUX0tIUgkweDMwQ0EJLyogZWdsUXVlcnlTdXJmYWNlIGF0dHJpYnV0
ZSAqLwotI2RlZmluZSBFR0xfQklUTUFQX1BJWEVMX0JMVUVfT0ZGU0VUX0tIUgkweDMwQ0IJLyog
ZWdsUXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLwotI2RlZmluZSBFR0xfQklUTUFQX1BJWEVMX0FM
UEhBX09GRlNFVF9LSFIJMHgzMENDCS8qIGVnbFF1ZXJ5U3VyZmFjZSBhdHRyaWJ1dGUgKi8KLSNk
ZWZpbmUgRUdMX0JJVE1BUF9QSVhFTF9MVU1JTkFOQ0VfT0ZGU0VUX0tIUgkweDMwQ0QJLyogZWds
UXVlcnlTdXJmYWNlIGF0dHJpYnV0ZSAqLwotI2RlZmluZSBFR0xfTE9XRVJfTEVGVF9LSFIJCQkw
eDMwQ0UJLyogRUdMX0JJVE1BUF9PUklHSU5fS0hSIHZhbHVlICovCi0jZGVmaW5lIEVHTF9VUFBF
Ul9MRUZUX0tIUgkJCTB4MzBDRgkvKiBFR0xfQklUTUFQX09SSUdJTl9LSFIgdmFsdWUgKi8KLSNp
ZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKLUVHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZ
IGVnbExvY2tTdXJmYWNlS0hSIChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTFN1cmZhY2Ugc3VyZmFj
ZSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7Ci1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElF
TlRSWSBlZ2xVbmxvY2tTdXJmYWNlS0hSIChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTFN1cmZhY2Ug
c3VyZmFjZSk7Ci0jZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCi10eXBlZGVmIEVH
TEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xMT0NLU1VSRkFDRUtIUlBST0MpIChFR0xEaXNw
bGF5IGRpc3BsYXksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlz
dCk7Ci10eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xVTkxPQ0tTVVJGQUNF
S0hSUFJPQykgKEVHTERpc3BsYXkgZGlzcGxheSwgRUdMU3VyZmFjZSBzdXJmYWNlKTsKLSNlbmRp
ZgotCi0jaWZuZGVmIEVHTF9LSFJfaW1hZ2UKLSNkZWZpbmUgRUdMX0tIUl9pbWFnZSAxCi0jZGVm
aW5lIEVHTF9OQVRJVkVfUElYTUFQX0tIUgkJCTB4MzBCMAkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0
YXJnZXQgKi8KLXR5cGVkZWYgdm9pZCAqRUdMSW1hZ2VLSFI7Ci0jZGVmaW5lIEVHTF9OT19JTUFH
RV9LSFIJCQkoKEVHTEltYWdlS0hSKTApCi0jaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCi1F
R0xBUEkgRUdMSW1hZ2VLSFIgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlSW1hZ2VLSFIgKEVHTERpc3Bs
YXkgZHB5LCBFR0xDb250ZXh0IGN0eCwgRUdMZW51bSB0YXJnZXQsIEVHTENsaWVudEJ1ZmZlciBi
dWZmZXIsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwotRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsRGVzdHJveUltYWdlS0hSIChFR0xEaXNwbGF5IGRweSwgRUdMSW1hZ2VLSFIg
aW1hZ2UpOwotI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwotdHlwZWRlZiBFR0xJ
bWFnZUtIUiAoRUdMQVBJRU5UUllQIFBGTkVHTENSRUFURUlNQUdFS0hSUFJPQykgKEVHTERpc3Bs
YXkgZHB5LCBFR0xDb250ZXh0IGN0eCwgRUdMZW51bSB0YXJnZXQsIEVHTENsaWVudEJ1ZmZlciBi
dWZmZXIsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwotdHlwZWRlZiBFR0xCb29sZWFuIChF
R0xBUElFTlRSWVAgUEZORUdMREVTVFJPWUlNQUdFS0hSUFJPQykgKEVHTERpc3BsYXkgZHB5LCBF
R0xJbWFnZUtIUiBpbWFnZSk7Ci0jZW5kaWYKLQotI2lmbmRlZiBFR0xfS0hSX3ZnX3BhcmVudF9p
bWFnZQotI2RlZmluZSBFR0xfS0hSX3ZnX3BhcmVudF9pbWFnZSAxCi0jZGVmaW5lIEVHTF9WR19Q
QVJFTlRfSU1BR0VfS0hSCQkJMHgzMEJBCS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLwot
I2VuZGlmCi0KLSNpZm5kZWYgRUdMX0tIUl9nbF90ZXh0dXJlXzJEX2ltYWdlCi0jZGVmaW5lIEVH
TF9LSFJfZ2xfdGV4dHVyZV8yRF9pbWFnZSAxCi0jZGVmaW5lIEVHTF9HTF9URVhUVVJFXzJEX0tI
UgkJCTB4MzBCMQkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KLSNkZWZpbmUgRUdMX0dM
X1RFWFRVUkVfTEVWRUxfS0hSCQkweDMwQkMJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgYXR0cmlidXRl
ICovCi0jZW5kaWYKLQotI2lmbmRlZiBFR0xfS0hSX2dsX3RleHR1cmVfY3ViZW1hcF9pbWFnZQot
I2RlZmluZSBFR0xfS0hSX2dsX3RleHR1cmVfY3ViZW1hcF9pbWFnZSAxCi0jZGVmaW5lIEVHTF9H
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1hfS0hSCTB4MzBCMwkvKiBlZ2xDcmVhdGVJbWFn
ZUtIUiB0YXJnZXQgKi8KLSNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WF9LSFIJMHgzMEI0CS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLwotI2RlZmluZSBFR0xf
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZX0tIUgkweDMwQjUJLyogZWdsQ3JlYXRlSW1h
Z2VLSFIgdGFyZ2V0ICovCi0jZGVmaW5lIEVHTF9HTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1lfS0hSCTB4MzBCNgkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KLSNkZWZpbmUgRUdM
X0dMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWl9LSFIJMHgzMEI3CS8qIGVnbENyZWF0ZUlt
YWdlS0hSIHRhcmdldCAqLwotI2RlZmluZSBFR0xfR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9aX0tIUgkweDMwQjgJLyogZWdsQ3JlYXRlSW1hZ2VLSFIgdGFyZ2V0ICovCi0jZW5kaWYKLQot
I2lmbmRlZiBFR0xfS0hSX2dsX3RleHR1cmVfM0RfaW1hZ2UKLSNkZWZpbmUgRUdMX0tIUl9nbF90
ZXh0dXJlXzNEX2ltYWdlIDEKLSNkZWZpbmUgRUdMX0dMX1RFWFRVUkVfM0RfS0hSCQkJMHgzMEIy
CS8qIGVnbENyZWF0ZUltYWdlS0hSIHRhcmdldCAqLwotI2RlZmluZSBFR0xfR0xfVEVYVFVSRV9a
T0ZGU0VUX0tIUgkJMHgzMEJECS8qIGVnbENyZWF0ZUltYWdlS0hSIGF0dHJpYnV0ZSAqLwotI2Vu
ZGlmCi0KLSNpZm5kZWYgRUdMX0tIUl9nbF9yZW5kZXJidWZmZXJfaW1hZ2UKLSNkZWZpbmUgRUdM
X0tIUl9nbF9yZW5kZXJidWZmZXJfaW1hZ2UgMQotI2RlZmluZSBFR0xfR0xfUkVOREVSQlVGRkVS
X0tIUgkJCTB4MzBCOQkvKiBlZ2xDcmVhdGVJbWFnZUtIUiB0YXJnZXQgKi8KLSNlbmRpZgotCi0j
aWZuZGVmIEVHTF9LSFJfcmV1c2FibGVfc3luYwotI2RlZmluZSBFR0xfS0hSX3JldXNhYmxlX3N5
bmMgMQotCi10eXBlZGVmIHZvaWQqIEVHTFN5bmNLSFI7Ci10eXBlZGVmIGtocm9ub3NfdXRpbWVf
bmFub3NlY29uZHNfdCBFR0xUaW1lS0hSOwotCi0jZGVmaW5lIEVHTF9TWU5DX1NUQVRVU19LSFIJ
CQkweDMwRjEKLSNkZWZpbmUgRUdMX1NJR05BTEVEX0tIUgkJCTB4MzBGMgotI2RlZmluZSBFR0xf
VU5TSUdOQUxFRF9LSFIJCQkweDMwRjMKLSNkZWZpbmUgRUdMX1RJTUVPVVRfRVhQSVJFRF9LSFIJ
CQkweDMwRjUKLSNkZWZpbmUgRUdMX0NPTkRJVElPTl9TQVRJU0ZJRURfS0hSCQkweDMwRjYKLSNk
ZWZpbmUgRUdMX1NZTkNfVFlQRV9LSFIJCQkweDMwRjcKLSNkZWZpbmUgRUdMX1NZTkNfUkVVU0FC
TEVfS0hSCQkJMHgzMEZBCi0jZGVmaW5lIEVHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVF9LSFIJ
CTB4MDAwMQkvKiBlZ2xDbGllbnRXYWl0U3luY0tIUiA8ZmxhZ3M+IGJpdGZpZWxkICovCi0jZGVm
aW5lIEVHTF9GT1JFVkVSX0tIUgkJCQkweEZGRkZGRkZGRkZGRkZGRkZ1bGwKLSNkZWZpbmUgRUdM
X05PX1NZTkNfS0hSCQkJCSgoRUdMU3luY0tIUikwKQotI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9U
WVBFUwotRUdMQVBJIEVHTFN5bmNLSFIgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlU3luY0tIUihFR0xE
aXNwbGF5IGRweSwgRUdMZW51bSB0eXBlLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLUVH
TEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbERlc3Ryb3lTeW5jS0hSKEVHTERpc3BsYXkg
ZHB5LCBFR0xTeW5jS0hSIHN5bmMpOwotRUdMQVBJIEVHTGludCBFR0xBUElFTlRSWSBlZ2xDbGll
bnRXYWl0U3luY0tIUihFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xpbnQgZmxh
Z3MsIEVHTFRpbWVLSFIgdGltZW91dCk7Ci1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xTaWduYWxTeW5jS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGVudW0g
bW9kZSk7Ci1FR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xHZXRTeW5jQXR0cmliS0hS
KEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGlu
dCAqdmFsdWUpOwotI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwotdHlwZWRlZiBF
R0xTeW5jS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFU1lOQ0tIUlBST0MpIChFR0xEaXNw
bGF5IGRweSwgRUdMZW51bSB0eXBlLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLXR5cGVk
ZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RST1lTWU5DS0hSUFJPQykgKEVH
TERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMpOwotdHlwZWRlZiBFR0xpbnQgKEVHTEFQSUVO
VFJZUCBQRk5FR0xDTElFTlRXQUlUU1lOQ0tIUlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMU3lu
Y0tIUiBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVLSFIgdGltZW91dCk7Ci10eXBlZGVmIEVH
TEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTSUdOQUxTWU5DS0hSUFJPQykgKEVHTERpc3Bs
YXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGVudW0gbW9kZSk7Ci10eXBlZGVmIEVHTEJvb2xl
YW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xHRVRTWU5DQVRUUklCS0hSUFJPQykgKEVHTERpc3BsYXkg
ZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOwot
I2VuZGlmCi0KLSNpZm5kZWYgRUdMX0tIUl9pbWFnZV9iYXNlCi0jZGVmaW5lIEVHTF9LSFJfaW1h
Z2VfYmFzZSAxCi0vKiBNb3N0IGludGVyZmFjZXMgZGVmaW5lZCBieSBFR0xfS0hSX2ltYWdlX3Bp
eG1hcCBhYm92ZSAqLwotI2RlZmluZSBFR0xfSU1BR0VfUFJFU0VSVkVEX0tIUgkJCTB4MzBEMgkv
KiBlZ2xDcmVhdGVJbWFnZUtIUiBhdHRyaWJ1dGUgKi8KLSNlbmRpZgotCi0jaWZuZGVmIEVHTF9L
SFJfaW1hZ2VfcGl4bWFwCi0jZGVmaW5lIEVHTF9LSFJfaW1hZ2VfcGl4bWFwIDEKLS8qIEludGVy
ZmFjZXMgZGVmaW5lZCBieSBFR0xfS0hSX2ltYWdlIGFib3ZlICovCi0jZW5kaWYKLQotI2lmbmRl
ZiBFR0xfSU1HX2NvbnRleHRfcHJpb3JpdHkKLSNkZWZpbmUgRUdMX0lNR19jb250ZXh0X3ByaW9y
aXR5IDEKLSNkZWZpbmUgRUdMX0NPTlRFWFRfUFJJT1JJVFlfTEVWRUxfSU1HCQkweDMxMDAKLSNk
ZWZpbmUgRUdMX0NPTlRFWFRfUFJJT1JJVFlfSElHSF9JTUcJCTB4MzEwMQotI2RlZmluZSBFR0xf
Q09OVEVYVF9QUklPUklUWV9NRURJVU1fSU1HCQkweDMxMDIKLSNkZWZpbmUgRUdMX0NPTlRFWFRf
UFJJT1JJVFlfTE9XX0lNRwkJMHgzMTAzCi0jZW5kaWYKLQotI2lmbmRlZiBFR0xfTlZfY292ZXJh
Z2Vfc2FtcGxlCi0jZGVmaW5lIEVHTF9OVl9jb3ZlcmFnZV9zYW1wbGUgMQotI2RlZmluZSBFR0xf
Q09WRVJBR0VfQlVGRkVSU19OViAweDMwRTAKLSNkZWZpbmUgRUdMX0NPVkVSQUdFX1NBTVBMRVNf
TlYgMHgzMEUxCi0jZW5kaWYKLQotI2lmbmRlZiBFR0xfTlZfZGVwdGhfbm9ubGluZWFyCi0jZGVm
aW5lIEVHTF9OVl9kZXB0aF9ub25saW5lYXIgMQotI2RlZmluZSBFR0xfREVQVEhfRU5DT0RJTkdf
TlYgMHgzMEUyCi0jZGVmaW5lIEVHTF9ERVBUSF9FTkNPRElOR19OT05FX05WIDAKLSNkZWZpbmUg
RUdMX0RFUFRIX0VOQ09ESU5HX05PTkxJTkVBUl9OViAweDMwRTMKLSNlbmRpZgotCi0jaWZuZGVm
IEVHTF9OVl9zeW5jCi0jZGVmaW5lIEVHTF9OVl9zeW5jIDEKLSNkZWZpbmUgRUdMX1NZTkNfUFJJ
T1JfQ09NTUFORFNfQ09NUExFVEVfTlYJMHgzMEU2Ci0jZGVmaW5lIEVHTF9TWU5DX1NUQVRVU19O
VgkJCTB4MzBFNwotI2RlZmluZSBFR0xfU0lHTkFMRURfTlYJCQkJMHgzMEU4Ci0jZGVmaW5lIEVH
TF9VTlNJR05BTEVEX05WCQkJMHgzMEU5Ci0jZGVmaW5lIEVHTF9TWU5DX0ZMVVNIX0NPTU1BTkRT
X0JJVF9OVgkJMHgwMDAxCi0jZGVmaW5lIEVHTF9GT1JFVkVSX05WCQkJCTB4RkZGRkZGRkZGRkZG
RkZGRnVsbAotI2RlZmluZSBFR0xfQUxSRUFEWV9TSUdOQUxFRF9OVgkJCTB4MzBFQQotI2RlZmlu
ZSBFR0xfVElNRU9VVF9FWFBJUkVEX05WCQkJMHgzMEVCCi0jZGVmaW5lIEVHTF9DT05ESVRJT05f
U0FUSVNGSUVEX05WCQkweDMwRUMKLSNkZWZpbmUgRUdMX1NZTkNfVFlQRV9OVgkJCTB4MzBFRAot
I2RlZmluZSBFR0xfU1lOQ19DT05ESVRJT05fTlYJCQkweDMwRUUKLSNkZWZpbmUgRUdMX1NZTkNf
RkVOQ0VfTlYJCQkweDMwRUYKLSNkZWZpbmUgRUdMX05PX1NZTkNfTlYJCQkJKChFR0xTeW5jTlYp
MCkKLXR5cGVkZWYgdm9pZCogRUdMU3luY05WOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcg
RUdMVGltZU5WOwotI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUwotRUdMU3luY05WIGVnbENy
ZWF0ZUZlbmNlU3luY05WIChFR0xEaXNwbGF5IGRweSwgRUdMZW51bSBjb25kaXRpb24sIGNvbnN0
IEVHTGludCAqYXR0cmliX2xpc3QpOwotRUdMQm9vbGVhbiBlZ2xEZXN0cm95U3luY05WIChFR0xT
eW5jTlYgc3luYyk7Ci1FR0xCb29sZWFuIGVnbEZlbmNlTlYgKEVHTFN5bmNOViBzeW5jKTsKLUVH
TGludCBlZ2xDbGllbnRXYWl0U3luY05WIChFR0xTeW5jTlYgc3luYywgRUdMaW50IGZsYWdzLCBF
R0xUaW1lTlYgdGltZW91dCk7Ci1FR0xCb29sZWFuIGVnbFNpZ25hbFN5bmNOViAoRUdMU3luY05W
IHN5bmMsIEVHTGVudW0gbW9kZSk7Ci1FR0xCb29sZWFuIGVnbEdldFN5bmNBdHRyaWJOViAoRUdM
U3luY05WIHN5bmMsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOwotI2VuZGlmIC8q
IEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwotdHlwZWRlZiBFR0xTeW5jTlYgKEVHTEFQSUVOVFJZ
UCBQRk5FR0xDUkVBVEVGRU5DRVNZTkNOVlBST0MpIChFR0xEaXNwbGF5IGRweSwgRUdMZW51bSBj
b25kaXRpb24sIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwotdHlwZWRlZiBFR0xCb29sZWFu
IChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWVNZTkNOVlBST0MpIChFR0xTeW5jTlYgc3luYyk7
Ci10eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xGRU5DRU5WUFJPQykgKEVH
TFN5bmNOViBzeW5jKTsKLXR5cGVkZWYgRUdMaW50IChFR0xBUElFTlRSWVAgUEZORUdMQ0xJRU5U
V0FJVFNZTkNOVlBST0MpIChFR0xTeW5jTlYgc3luYywgRUdMaW50IGZsYWdzLCBFR0xUaW1lTlYg
dGltZW91dCk7Ci10eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTSUdOQUxT
WU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMsIEVHTGVudW0gbW9kZSk7Ci10eXBlZGVmIEVHTEJv
b2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xHRVRTWU5DQVRUUklCTlZQUk9DKSAoRUdMU3luY05W
IHN5bmMsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOwotI2VuZGlmCi0KLSNpZmRl
ZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZgpJbmRleDogQU5HTEUvaW5jbHVkZS9F
R0wvZWdscGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0VHTC9lZ2xwbGF0
Zm9ybS5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3Jt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEwICswLDAgQEAKLSNpZm5kZWYgX19lZ2xwbGF0Zm9y
bV9oXwotI2RlZmluZSBfX2VnbHBsYXRmb3JtX2hfCi0KLS8qCi0qKiBDb3B5cmlnaHQgKGMpIDIw
MDctMjAwOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCi0qKgotKiogUGVybWlzc2lvbiBpcyBoZXJl
YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSoq
IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp
bGVzICh0aGUKLSoqICJNYXRlcmlhbHMiKSwgdG8gZGVhbCBpbiB0aGUgTWF0ZXJpYWxzIHdpdGhv
dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotKiogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdo
dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotKiogZGlzdHJpYnV0ZSwg
c3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBNYXRlcmlhbHMsIGFuZCB0bwot
KiogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgTWF0ZXJpYWxzIGFyZSBmdXJuaXNoZWQgdG8g
ZG8gc28sIHN1YmplY3QgdG8KLSoqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSoqCi0qKiBU
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs
bCBiZSBpbmNsdWRlZAotKiogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv
ZiB0aGUgTWF0ZXJpYWxzLgotKioKLSoqIFRIRSBNQVRFUklBTFMgQVJFIFBST1ZJREVEICJBUyBJ
UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0qKiBFWFBSRVNTIE9SIElNUExJRUQs
IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSoqIE1FUkNI
QU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ
TkdFTUVOVC4KLSoqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI
T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCi0qKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAotKiogVE9SVCBPUiBPVEhF
UldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLSoq
IE1BVEVSSUFMUyBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBNQVRFUklBTFMu
Ci0qLwotCi0vKiBQbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIGVn
bC5oCi0gKiAkUmV2aXNpb246IDk3MjQgJCBvbiAkRGF0ZTogMjAwOS0xMi0wMiAwMjowNTozMyAt
MDgwMCAoV2VkLCAwMiBEZWMgMjAwOSkgJAotICoKLSAqIEFkb3B0ZXJzIG1heSBtb2RpZnkga2hy
cGxhdGZvcm0uaCBhbmQgdGhpcyBmaWxlIHRvIHN1aXQgdGhlaXIgcGxhdGZvcm0uCi0gKiBZb3Ug
YXJlIGVuY291cmFnZWQgdG8gc3VibWl0IGFsbCBtb2RpZmljYXRpb25zIHRvIHRoZSBLaHJvbm9z
IGdyb3VwIHNvIHRoYXQKLSAqIHRoZXkgY2FuIGJlIGluY2x1ZGVkIGluIGZ1dHVyZSB2ZXJzaW9u
cyBvZiB0aGlzIGZpbGUuICBQbGVhc2Ugc3VibWl0IGNoYW5nZXMKLSAqIGJ5IHNlbmRpbmcgdGhl
bSB0byB0aGUgcHVibGljIEtocm9ub3MgQnVnemlsbGEgKGh0dHA6Ly9raHJvbm9zLm9yZy9idWd6
aWxsYSkKLSAqIGJ5IGZpbGluZyBhIGJ1ZyBhZ2FpbnN0IHByb2R1Y3QgIkVHTCIgY29tcG9uZW50
ICJSZWdpc3RyeSIuCi0gKi8KLQotI2luY2x1ZGUgPEtIUi9raHJwbGF0Zm9ybS5oPgotCi0vKiBN
YWNyb3MgdXNlZCBpbiBFR0wgZnVuY3Rpb24gcHJvdG90eXBlIGRlY2xhcmF0aW9ucy4KLSAqCi0g
KiBFR0wgZnVuY3Rpb25zIHNob3VsZCBiZSBwcm90b3R5cGVkIGFzOgotICoKLSAqIEVHTEFQSSBy
ZXR1cm4tdHlwZSBFR0xBUElFTlRSWSBlZ2xGdW5jdGlvbihhcmd1bWVudHMpOwotICogdHlwZWRl
ZiByZXR1cm4tdHlwZSAoRVhQQVBJRU5UUllQIFBGTkVHTEZVTkNUSU9OUFJPQykgKGFyZ3VtZW50
cyk7Ci0gKgotICogS0hST05PU19BUElDQUxMIGFuZCBLSFJPTk9TX0FQSUVOVFJZIGFyZSBkZWZp
bmVkIGluIEtIUi9raHJwbGF0Zm9ybS5oCi0gKi8KLQotI2lmbmRlZiBFR0xBUEkKLSNkZWZpbmUg
RUdMQVBJIEtIUk9OT1NfQVBJQ0FMTAotI2VuZGlmCi0KLSNpZm5kZWYgRUdMQVBJRU5UUlkKLSNk
ZWZpbmUgRUdMQVBJRU5UUlkgIEtIUk9OT1NfQVBJRU5UUlkKLSNlbmRpZgotI2RlZmluZSBFR0xB
UElFTlRSWVAgRUdMQVBJRU5UUlkqCi0KLS8qIFRoZSB0eXBlcyBOYXRpdmVEaXNwbGF5VHlwZSwg
TmF0aXZlV2luZG93VHlwZSwgYW5kIE5hdGl2ZVBpeG1hcFR5cGUKLSAqIGFyZSBhbGlhc2VzIG9m
IHdpbmRvdy1zeXN0ZW0tZGVwZW5kZW50IHR5cGVzLCBzdWNoIGFzIFggRGlzcGxheSAqIG9yCi0g
KiBXaW5kb3dzIERldmljZSBDb250ZXh0LiBUaGV5IG11c3QgYmUgZGVmaW5lZCBpbiBwbGF0Zm9y
bS1zcGVjaWZpYwotICogY29kZSBiZWxvdy4gVGhlIEVHTC1wcmVmaXhlZCB2ZXJzaW9ucyBvZiBO
YXRpdmUqVHlwZSBhcmUgdGhlIHNhbWUKLSAqIHR5cGVzLCByZW5hbWVkIGluIEVHTCAxLjMgc28g
YWxsIHR5cGVzIGluIHRoZSBBUEkgc3RhcnQgd2l0aCAiRUdMIi4KLSAqLwotCi0jaWYgZGVmaW5l
ZChfV0lOMzIpIHx8IGRlZmluZWQoX19WQzMyX18pICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pICYm
ICFkZWZpbmVkKF9fU0NJVEVDSF9TTkFQX18pIC8qIFdpbjMyIGFuZCBXaW5DRSAqLwotI2lmbmRl
ZiBXSU4zMl9MRUFOX0FORF9NRUFOCi0jZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gMQotI2Vu
ZGlmCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi10eXBlZGVmIEhEQyAgICAgRUdMTmF0aXZlRGlz
cGxheVR5cGU7Ci10eXBlZGVmIEhCSVRNQVAgRUdMTmF0aXZlUGl4bWFwVHlwZTsKLXR5cGVkZWYg
SFdORCAgICBFR0xOYXRpdmVXaW5kb3dUeXBlOwotCi0jZWxpZiBkZWZpbmVkKF9fV0lOU0NXX18p
IHx8IGRlZmluZWQoX19TWU1CSUFOMzJfXykgIC8qIFN5bWJpYW4gKi8KLQotdHlwZWRlZiBpbnQg
ICBFR0xOYXRpdmVEaXNwbGF5VHlwZTsKLXR5cGVkZWYgdm9pZCAqRUdMTmF0aXZlV2luZG93VHlw
ZTsKLXR5cGVkZWYgdm9pZCAqRUdMTmF0aXZlUGl4bWFwVHlwZTsKLQotI2VsaWYgZGVmaW5lZChf
X3VuaXhfXykKLQotLyogWDExICh0ZW50YXRpdmUpICAqLwotI2luY2x1ZGUgPFgxMS9YbGliLmg+
Ci0jaW5jbHVkZSA8WDExL1h1dGlsLmg+Ci0KLXR5cGVkZWYgRGlzcGxheSAqRUdMTmF0aXZlRGlz
cGxheVR5cGU7Ci10eXBlZGVmIFBpeG1hcCAgIEVHTE5hdGl2ZVBpeG1hcFR5cGU7Ci10eXBlZGVm
IFdpbmRvdyAgIEVHTE5hdGl2ZVdpbmRvd1R5cGU7Ci0KLSNlbHNlCi0jZXJyb3IgIlBsYXRmb3Jt
IG5vdCByZWNvZ25pemVkIgotI2VuZGlmCi0KLS8qIEVHTCAxLjIgdHlwZXMsIHJlbmFtZWQgZm9y
IGNvbnNpc3RlbmN5IGluIEVHTCAxLjMgKi8KLXR5cGVkZWYgRUdMTmF0aXZlRGlzcGxheVR5cGUg
TmF0aXZlRGlzcGxheVR5cGU7Ci10eXBlZGVmIEVHTE5hdGl2ZVBpeG1hcFR5cGUgIE5hdGl2ZVBp
eG1hcFR5cGU7Ci10eXBlZGVmIEVHTE5hdGl2ZVdpbmRvd1R5cGUgIE5hdGl2ZVdpbmRvd1R5cGU7
Ci0KLQotLyogRGVmaW5lIEVHTGludC4gVGhpcyBtdXN0IGJlIGEgc2lnbmVkIGludGVncmFsIHR5
cGUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4KLSAqIGFsbCBsZWdhbCBhdHRyaWJ1dGUgbmFtZXMg
YW5kIHZhbHVlcyBwYXNzZWQgaW50byBhbmQgb3V0IG9mIEVHTCwgd2hldGhlcgotICogdGhlaXIg
dHlwZSBpcyBib29sZWFuLCBiaXRtYXNrLCBlbnVtZXJhbnQgKHN5bWJvbGljIGNvbnN0YW50KSwg
aW50ZWdlciwKLSAqIGhhbmRsZSwgb3Igb3RoZXIuICBXaGlsZSBpbiBnZW5lcmFsIGEgMzItYml0
IGludGVnZXIgd2lsbCBzdWZmaWNlLCBpZgotICogaGFuZGxlcyBhcmUgNjQgYml0IHR5cGVzLCB0
aGVuIEVHTGludCBzaG91bGQgYmUgZGVmaW5lZCBhcyBhIHNpZ25lZCA2NC1iaXQKLSAqIGludGVn
ZXIgdHlwZS4KLSAqLwotdHlwZWRlZiBraHJvbm9zX2ludDMyX3QgRUdMaW50OwotCi0jZW5kaWYg
LyogX19lZ2xwbGF0Zm9ybV9oICovCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgJKHJldmlzaW9uIDc0NjU4KQor
KysgQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MjEgKzAs
MCBAQAotI2lmbmRlZiBfX2dsMl9oXwotI2RlZmluZSBfX2dsMl9oXwotCi0vKiAkUmV2aXNpb246
IDEwNjAyICQgb24gJERhdGU6OiAyMDEwLTAzLTA0IDIyOjM1OjM0IC0wODAwICMkICovCi0KLSNp
bmNsdWRlIDxHTEVTMi9nbDJwbGF0Zm9ybS5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVy
biAiQyIgewotI2VuZGlmCi0KLS8qCi0gKiBUaGlzIGRvY3VtZW50IGlzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBTR0kgRnJlZSBTb2Z0d2FyZSBCIExpY2Vuc2UgVmVyc2lvbgotICogMi4wLiBGb3IgZGV0
YWlscywgc2VlIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQi8gLgotICovCi0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICogRGF0YSB0eXBlIGRlZmluaXRpb25zCi0gKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLQotdHlwZWRlZiB2b2lkICAgICAgICAgICAgIEdMdm9pZDsKLXR5cGVkZWYgY2hhciAg
ICAgICAgICAgICBHTGNoYXI7Ci10eXBlZGVmIHVuc2lnbmVkIGludCAgICAgR0xlbnVtOwotdHlw
ZWRlZiB1bnNpZ25lZCBjaGFyICAgIEdMYm9vbGVhbjsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAg
ICBHTGJpdGZpZWxkOwotdHlwZWRlZiBraHJvbm9zX2ludDhfdCAgIEdMYnl0ZTsKLXR5cGVkZWYg
c2hvcnQgICAgICAgICAgICBHTHNob3J0OwotdHlwZWRlZiBpbnQgICAgICAgICAgICAgIEdMaW50
OwotdHlwZWRlZiBpbnQgICAgICAgICAgICAgIEdMc2l6ZWk7Ci10eXBlZGVmIGtocm9ub3NfdWlu
dDhfdCAgR0x1Ynl0ZTsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICBHTHVzaG9ydDsKLXR5cGVk
ZWYgdW5zaWduZWQgaW50ICAgICBHTHVpbnQ7Ci10eXBlZGVmIGtocm9ub3NfZmxvYXRfdCAgR0xm
bG9hdDsKLXR5cGVkZWYga2hyb25vc19mbG9hdF90ICBHTGNsYW1wZjsKLXR5cGVkZWYga2hyb25v
c19pbnQzMl90ICBHTGZpeGVkOwotCi0vKiBHTCB0eXBlcyBmb3IgaGFuZGxpbmcgbGFyZ2UgdmVy
dGV4IGJ1ZmZlciBvYmplY3RzICovCi10eXBlZGVmIGtocm9ub3NfaW50cHRyX3QgR0xpbnRwdHI7
Ci10eXBlZGVmIGtocm9ub3Nfc3NpemVfdCAgR0xzaXplaXB0cjsKLQotLyogT3BlbkdMIEVTIGNv
cmUgdmVyc2lvbnMgKi8KLSNkZWZpbmUgR0xfRVNfVkVSU0lPTl8yXzAgICAgICAgICAgICAgICAg
IDEKLQotLyogQ2xlYXJCdWZmZXJNYXNrICovCi0jZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQg
ICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVCAg
ICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQgICAgICAg
ICAgICAgICAweDAwMDA0MDAwCi0KLS8qIEJvb2xlYW4gKi8KLSNkZWZpbmUgR0xfRkFMU0UgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR0xfVFJVRSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEKLQotLyogQmVnaW5Nb2RlICovCi0jZGVmaW5lIEdMX1BPSU5UUyAgICAgICAg
ICAgICAgICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUgR0xfTElORVMgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBHTF9MSU5FX0xPT1AgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDAyCi0jZGVmaW5lIEdMX0xJTkVfU1RSSVAgICAgICAgICAgICAgICAgICAgICAweDAw
MDMKLSNkZWZpbmUgR0xfVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAotI2Rl
ZmluZSBHTF9UUklBTkdMRV9TVFJJUCAgICAgICAgICAgICAgICAgMHgwMDA1Ci0jZGVmaW5lIEdM
X1RSSUFOR0xFX0ZBTiAgICAgICAgICAgICAgICAgICAweDAwMDYKLQotLyogQWxwaGFGdW5jdGlv
biAobm90IHN1cHBvcnRlZCBpbiBFUzIwKSAqLwotLyogICAgICBHTF9ORVZFUiAqLwotLyogICAg
ICBHTF9MRVNTICovCi0vKiAgICAgIEdMX0VRVUFMICovCi0vKiAgICAgIEdMX0xFUVVBTCAqLwot
LyogICAgICBHTF9HUkVBVEVSICovCi0vKiAgICAgIEdMX05PVEVRVUFMICovCi0vKiAgICAgIEdM
X0dFUVVBTCAqLwotLyogICAgICBHTF9BTFdBWVMgKi8KLQotLyogQmxlbmRpbmdGYWN0b3JEZXN0
ICovCi0jZGVmaW5lIEdMX1pFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5l
IEdMX09ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEdMX1NSQ19DT0xP
UiAgICAgICAgICAgICAgICAgICAgICAweDAzMDAKLSNkZWZpbmUgR0xfT05FX01JTlVTX1NSQ19D
T0xPUiAgICAgICAgICAgIDB4MDMwMQotI2RlZmluZSBHTF9TUkNfQUxQSEEgICAgICAgICAgICAg
ICAgICAgICAgMHgwMzAyCi0jZGVmaW5lIEdMX09ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAg
ICAweDAzMDMKLSNkZWZpbmUgR0xfRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDB4MDMw
NAotI2RlZmluZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAgICAgMHgwMzA1Ci0KLS8q
IEJsZW5kaW5nRmFjdG9yU3JjICovCi0vKiAgICAgIEdMX1pFUk8gKi8KLS8qICAgICAgR0xfT05F
ICovCi0jZGVmaW5lIEdMX0RTVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAweDAzMDYKLSNk
ZWZpbmUgR0xfT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgIDB4MDMwNwotI2RlZmluZSBH
TF9TUkNfQUxQSEFfU0FUVVJBVEUgICAgICAgICAgICAgMHgwMzA4Ci0vKiAgICAgIEdMX1NSQ19B
TFBIQSAqLwotLyogICAgICBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBICovCi0vKiAgICAgIEdMX0RT
VF9BTFBIQSAqLwotLyogICAgICBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBICovCi0KLS8qIEJsZW5k
RXF1YXRpb25TZXBhcmF0ZSAqLwotI2RlZmluZSBHTF9GVU5DX0FERCAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDA2Ci0jZGVmaW5lIEdMX0JMRU5EX0VRVUFUSU9OICAgICAgICAgICAgICAgICAw
eDgwMDkKLSNkZWZpbmUgR0xfQkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAgIDB4ODAwOSAg
ICAvKiBzYW1lIGFzIEJMRU5EX0VRVUFUSU9OICovCi0jZGVmaW5lIEdMX0JMRU5EX0VRVUFUSU9O
X0FMUEhBICAgICAgICAgICAweDg4M0QKLQotLyogQmxlbmRTdWJ0cmFjdCAqLwotI2RlZmluZSBH
TF9GVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgMHg4MDBBCi0jZGVmaW5lIEdMX0ZVTkNf
UkVWRVJTRV9TVUJUUkFDVCAgICAgICAgICAweDgwMEIKLQotLyogU2VwYXJhdGUgQmxlbmQgRnVu
Y3Rpb25zICovCi0jZGVmaW5lIEdMX0JMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICAweDgw
QzgKLSNkZWZpbmUgR0xfQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAgIDB4ODBDOQotI2Rl
ZmluZSBHTF9CTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgMHg4MENBCi0jZGVmaW5lIEdM
X0JMRU5EX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAweDgwQ0IKLSNkZWZpbmUgR0xfQ09OU1RB
TlRfQ09MT1IgICAgICAgICAgICAgICAgIDB4ODAwMQotI2RlZmluZSBHTF9PTkVfTUlOVVNfQ09O
U1RBTlRfQ09MT1IgICAgICAgMHg4MDAyCi0jZGVmaW5lIEdMX0NPTlNUQU5UX0FMUEhBICAgICAg
ICAgICAgICAgICAweDgwMDMKLSNkZWZpbmUgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICAg
ICAgIDB4ODAwNAotI2RlZmluZSBHTF9CTEVORF9DT0xPUiAgICAgICAgICAgICAgICAgICAgMHg4
MDA1Ci0KLS8qIEJ1ZmZlciBPYmplY3RzICovCi0jZGVmaW5lIEdMX0FSUkFZX0JVRkZFUiAgICAg
ICAgICAgICAgICAgICAweDg4OTIKLSNkZWZpbmUgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIgICAg
ICAgICAgIDB4ODg5MwotI2RlZmluZSBHTF9BUlJBWV9CVUZGRVJfQklORElORyAgICAgICAgICAg
MHg4ODk0Ci0jZGVmaW5lIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAweDg4OTUK
LQotI2RlZmluZSBHTF9TVFJFQU1fRFJBVyAgICAgICAgICAgICAgICAgICAgMHg4OEUwCi0jZGVm
aW5lIEdMX1NUQVRJQ19EUkFXICAgICAgICAgICAgICAgICAgICAweDg4RTQKLSNkZWZpbmUgR0xf
RFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgIDB4ODhFOAotCi0jZGVmaW5lIEdMX0JVRkZF
Ul9TSVpFICAgICAgICAgICAgICAgICAgICAweDg3NjQKLSNkZWZpbmUgR0xfQlVGRkVSX1VTQUdF
ICAgICAgICAgICAgICAgICAgIDB4ODc2NQotCi0jZGVmaW5lIEdMX0NVUlJFTlRfVkVSVEVYX0FU
VFJJQiAgICAgICAgICAweDg2MjYKLQotLyogQ3VsbEZhY2VNb2RlICovCi0jZGVmaW5lIEdMX0ZS
T05UICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDQKLSNkZWZpbmUgR0xfQkFDSyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNQotI2RlZmluZSBHTF9GUk9OVF9BTkRfQkFDSyAg
ICAgICAgICAgICAgICAgMHgwNDA4Ci0KLS8qIERlcHRoRnVuY3Rpb24gKi8KLS8qICAgICAgR0xf
TkVWRVIgKi8KLS8qICAgICAgR0xfTEVTUyAqLwotLyogICAgICBHTF9FUVVBTCAqLwotLyogICAg
ICBHTF9MRVFVQUwgKi8KLS8qICAgICAgR0xfR1JFQVRFUiAqLwotLyogICAgICBHTF9OT1RFUVVB
TCAqLwotLyogICAgICBHTF9HRVFVQUwgKi8KLS8qICAgICAgR0xfQUxXQVlTICovCi0KLS8qIEVu
YWJsZUNhcCAqLwotI2RlZmluZSBHTF9URVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgMHgw
REUxCi0jZGVmaW5lIEdMX0NVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICAweDBCNDQKLSNk
ZWZpbmUgR0xfQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEJFMgotI2RlZmluZSBH
TF9ESVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQkQwCi0jZGVmaW5lIEdMX1NURU5D
SUxfVEVTVCAgICAgICAgICAgICAgICAgICAweDBCOTAKLSNkZWZpbmUgR0xfREVQVEhfVEVTVCAg
ICAgICAgICAgICAgICAgICAgIDB4MEI3MQotI2RlZmluZSBHTF9TQ0lTU09SX1RFU1QgICAgICAg
ICAgICAgICAgICAgMHgwQzExCi0jZGVmaW5lIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAg
ICAgICAweDgwMzcKLSNkZWZpbmUgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAgICAgIDB4
ODA5RQotI2RlZmluZSBHTF9TQU1QTEVfQ09WRVJBR0UgICAgICAgICAgICAgICAgMHg4MEEwCi0K
LS8qIEVycm9yQ29kZSAqLwotI2RlZmluZSBHTF9OT19FUlJPUiAgICAgICAgICAgICAgICAgICAg
ICAgMAotI2RlZmluZSBHTF9JTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgMHgwNTAwCi0j
ZGVmaW5lIEdMX0lOVkFMSURfVkFMVUUgICAgICAgICAgICAgICAgICAweDA1MDEKLSNkZWZpbmUg
R0xfSU5WQUxJRF9PUEVSQVRJT04gICAgICAgICAgICAgIDB4MDUwMgotI2RlZmluZSBHTF9PVVRf
T0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgMHgwNTA1Ci0KLS8qIEZyb250RmFjZURpcmVjdGlv
biAqLwotI2RlZmluZSBHTF9DVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOTAwCi0j
ZGVmaW5lIEdMX0NDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5MDEKLQotLyogR2V0
UE5hbWUgKi8KLSNkZWZpbmUgR0xfTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDB4MEIy
MQotI2RlZmluZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgMHg4NDZECi0jZGVm
aW5lIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICAweDg0NkUKLSNkZWZpbmUgR0xf
Q1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgIDB4MEI0NQotI2RlZmluZSBHTF9GUk9OVF9G
QUNFICAgICAgICAgICAgICAgICAgICAgMHgwQjQ2Ci0jZGVmaW5lIEdMX0RFUFRIX1JBTkdFICAg
ICAgICAgICAgICAgICAgICAweDBCNzAKLSNkZWZpbmUgR0xfREVQVEhfV1JJVEVNQVNLICAgICAg
ICAgICAgICAgIDB4MEI3MgotI2RlZmluZSBHTF9ERVBUSF9DTEVBUl9WQUxVRSAgICAgICAgICAg
ICAgMHgwQjczCi0jZGVmaW5lIEdMX0RFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAgICAweDBC
NzQKLSNkZWZpbmUgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgIDB4MEI5MQotI2Rl
ZmluZSBHTF9TVEVOQ0lMX0ZVTkMgICAgICAgICAgICAgICAgICAgMHgwQjkyCi0jZGVmaW5lIEdM
X1NURU5DSUxfRkFJTCAgICAgICAgICAgICAgICAgICAweDBCOTQKLSNkZWZpbmUgR0xfU1RFTkNJ
TF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgIDB4MEI5NQotI2RlZmluZSBHTF9TVEVOQ0lMX1BBU1Nf
REVQVEhfUEFTUyAgICAgICAgMHgwQjk2Ci0jZGVmaW5lIEdMX1NURU5DSUxfUkVGICAgICAgICAg
ICAgICAgICAgICAweDBCOTcKLSNkZWZpbmUgR0xfU1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAg
ICAgIDB4MEI5MwotI2RlZmluZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSyAgICAgICAgICAgICAgMHgw
Qjk4Ci0jZGVmaW5lIEdMX1NURU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICAweDg4MDAKLSNk
ZWZpbmUgR0xfU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgIDB4ODgwMQotI2RlZmluZSBH
TF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgMHg4ODAyCi0jZGVmaW5lIEdMX1NURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICAweDg4MDMKLSNkZWZpbmUgR0xfU1RFTkNJTF9CQUNL
X1JFRiAgICAgICAgICAgICAgIDB4OENBMwotI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVf
TUFTSyAgICAgICAgMHg4Q0E0Ci0jZGVmaW5lIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0sgICAg
ICAgICAweDhDQTUKLSNkZWZpbmUgR0xfVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgIDB4
MEJBMgotI2RlZmluZSBHTF9TQ0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgMHgwQzEwCi0v
KiAgICAgIEdMX1NDSVNTT1JfVEVTVCAqLwotI2RlZmluZSBHTF9DT0xPUl9DTEVBUl9WQUxVRSAg
ICAgICAgICAgICAgMHgwQzIyCi0jZGVmaW5lIEdMX0NPTE9SX1dSSVRFTUFTSyAgICAgICAgICAg
ICAgICAweDBDMjMKLSNkZWZpbmUgR0xfVU5QQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAgIDB4
MENGNQotI2RlZmluZSBHTF9QQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgMHgwRDA1Ci0j
ZGVmaW5lIEdMX01BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICAweDBEMzMKLSNkZWZpbmUg
R0xfTUFYX1ZJRVdQT1JUX0RJTVMgICAgICAgICAgICAgIDB4MEQzQQotI2RlZmluZSBHTF9TVUJQ
SVhFTF9CSVRTICAgICAgICAgICAgICAgICAgMHgwRDUwCi0jZGVmaW5lIEdMX1JFRF9CSVRTICAg
ICAgICAgICAgICAgICAgICAgICAweDBENTIKLSNkZWZpbmUgR0xfR1JFRU5fQklUUyAgICAgICAg
ICAgICAgICAgICAgIDB4MEQ1MwotI2RlZmluZSBHTF9CTFVFX0JJVFMgICAgICAgICAgICAgICAg
ICAgICAgMHgwRDU0Ci0jZGVmaW5lIEdMX0FMUEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICAw
eDBENTUKLSNkZWZpbmUgR0xfREVQVEhfQklUUyAgICAgICAgICAgICAgICAgICAgIDB4MEQ1Ngot
I2RlZmluZSBHTF9TVEVOQ0lMX0JJVFMgICAgICAgICAgICAgICAgICAgMHgwRDU3Ci0jZGVmaW5l
IEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICAweDJBMDAKLS8qICAgICAgR0xfUE9M
WUdPTl9PRkZTRVRfRklMTCAqLwotI2RlZmluZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1IgICAg
ICAgICAgMHg4MDM4Ci0jZGVmaW5lIEdMX1RFWFRVUkVfQklORElOR18yRCAgICAgICAgICAgICAw
eDgwNjkKLSNkZWZpbmUgR0xfU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAgICAgIDB4ODBBOAot
I2RlZmluZSBHTF9TQU1QTEVTICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEE5Ci0jZGVmaW5l
IEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRSAgICAgICAgICAweDgwQUEKLSNkZWZpbmUgR0xfU0FN
UExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgIDB4ODBBQgotCi0vKiBHZXRUZXh0dXJlUGFyYW1l
dGVyICovCi0vKiAgICAgIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiAqLwotLyogICAgICBHTF9URVhU
VVJFX01JTl9GSUxURVIgKi8KLS8qICAgICAgR0xfVEVYVFVSRV9XUkFQX1MgKi8KLS8qICAgICAg
R0xfVEVYVFVSRV9XUkFQX1QgKi8KLQotI2RlZmluZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJF
X0ZPUk1BVFMgMHg4NkEyCi0jZGVmaW5lIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAg
ICAweDg2QTMKLQotLyogSGludE1vZGUgKi8KLSNkZWZpbmUgR0xfRE9OVF9DQVJFICAgICAgICAg
ICAgICAgICAgICAgIDB4MTEwMAotI2RlZmluZSBHTF9GQVNURVNUICAgICAgICAgICAgICAgICAg
ICAgICAgMHgxMTAxCi0jZGVmaW5lIEdMX05JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICAw
eDExMDIKLQotLyogSGludFRhcmdldCAqLwotI2RlZmluZSBHTF9HRU5FUkFURV9NSVBNQVBfSElO
VCAgICAgICAgICAgIDB4ODE5MgotCi0vKiBEYXRhVHlwZSAqLwotI2RlZmluZSBHTF9CWVRFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAwCi0jZGVmaW5lIEdMX1VOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICAgICAweDE0MDEKLSNkZWZpbmUgR0xfU0hPUlQgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MTQwMgotI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAg
ICAgMHgxNDAzCi0jZGVmaW5lIEdMX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0
MDQKLSNkZWZpbmUgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgIDB4MTQwNQotI2Rl
ZmluZSBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDA2Ci0jZGVmaW5lIEdM
X0ZJWEVEICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MEMKLQotLyogUGl4ZWxGb3JtYXQg
Ki8KLSNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UICAgICAgICAgICAgICAgIDB4MTkwMgotI2Rl
ZmluZSBHTF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA2Ci0jZGVmaW5lIEdM
X1JHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDcKLSNkZWZpbmUgR0xfUkdCQSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwOAotI2RlZmluZSBHTF9MVU1JTkFOQ0UgICAg
ICAgICAgICAgICAgICAgICAgMHgxOTA5Ci0jZGVmaW5lIEdMX0xVTUlOQU5DRV9BTFBIQSAgICAg
ICAgICAgICAgICAweDE5MEEKLQotLyogUGl4ZWxUeXBlICovCi0vKiAgICAgIEdMX1VOU0lHTkVE
X0JZVEUgKi8KLSNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgIDB4ODAz
MwotI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgMHg4MDM0Ci0jZGVm
aW5lIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICAweDgzNjMKLQotLyogU2hhZGVy
cyAqLwotI2RlZmluZSBHTF9GUkFHTUVOVF9TSEFERVIgICAgICAgICAgICAgICAgICAweDhCMzAK
LSNkZWZpbmUgR0xfVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAgICAgMHg4QjMxCi0jZGVm
aW5lIEdMX01BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgIDB4ODg2OQotI2RlZmluZSBH
TF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyAgICAgICAweDhERkIKLSNkZWZpbmUgR0xfTUFY
X1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAgICAgMHg4REZDCi0jZGVmaW5lIEdMX01BWF9DT01C
SU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIDB4OEI0RAotI2RlZmluZSBHTF9NQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFMgICAweDhCNEMKLSNkZWZpbmUgR0xfTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgICAgICAgICAgMHg4ODcyCi0jZGVmaW5lIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZF
Q1RPUlMgICAgIDB4OERGRAotI2RlZmluZSBHTF9TSEFERVJfVFlQRSAgICAgICAgICAgICAgICAg
ICAgICAweDhCNEYKLSNkZWZpbmUgR0xfREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg
MHg4QjgwCi0jZGVmaW5lIEdMX0xJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDB4OEI4
MgotI2RlZmluZSBHTF9WQUxJREFURV9TVEFUVVMgICAgICAgICAgICAgICAgICAweDhCODMKLSNk
ZWZpbmUgR0xfQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgMHg4Qjg1Ci0jZGVmaW5l
IEdMX0FDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgIDB4OEI4NgotI2RlZmluZSBHTF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIICAgICAgICAweDhCODcKLSNkZWZpbmUgR0xfQUNUSVZF
X0FUVFJJQlVURVMgICAgICAgICAgICAgICAgMHg4Qjg5Ci0jZGVmaW5lIEdMX0FDVElWRV9BVFRS
SUJVVEVfTUFYX0xFTkdUSCAgICAgIDB4OEI4QQotI2RlZmluZSBHTF9TSEFESU5HX0xBTkdVQUdF
X1ZFUlNJT04gICAgICAgICAweDhCOEMKLSNkZWZpbmUgR0xfQ1VSUkVOVF9QUk9HUkFNICAgICAg
ICAgICAgICAgICAgMHg4QjhECi0KLS8qIFN0ZW5jaWxGdW5jdGlvbiAqLwotI2RlZmluZSBHTF9O
RVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCi0jZGVmaW5lIEdMX0xFU1MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDAyMDEKLSNkZWZpbmUgR0xfRVFVQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MDIwMgotI2RlZmluZSBHTF9MRVFVQUwgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwMjAzCi0jZGVmaW5lIEdMX0dSRUFURVIgICAgICAgICAgICAgICAgICAgICAg
ICAweDAyMDQKLSNkZWZpbmUgR0xfTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDIw
NQotI2RlZmluZSBHTF9HRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA2Ci0jZGVm
aW5lIEdMX0FMV0FZUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDcKLQotLyogU3RlbmNp
bE9wICovCi0vKiAgICAgIEdMX1pFUk8gKi8KLSNkZWZpbmUgR0xfS0VFUCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MUUwMAotI2RlZmluZSBHTF9SRVBMQUNFICAgICAgICAgICAgICAgICAg
ICAgICAgMHgxRTAxCi0jZGVmaW5lIEdMX0lOQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDFFMDIKLSNkZWZpbmUgR0xfREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMwot
I2RlZmluZSBHTF9JTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNTBBCi0jZGVmaW5l
IEdMX0lOQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICAweDg1MDcKLSNkZWZpbmUgR0xfREVD
Ul9XUkFQICAgICAgICAgICAgICAgICAgICAgIDB4ODUwOAotCi0vKiBTdHJpbmdOYW1lICovCi0j
ZGVmaW5lIEdMX1ZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICAweDFGMDAKLSNkZWZpbmUg
R0xfUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMQotI2RlZmluZSBHTF9WRVJT
SU9OICAgICAgICAgICAgICAgICAgICAgICAgMHgxRjAyCi0jZGVmaW5lIEdMX0VYVEVOU0lPTlMg
ICAgICAgICAgICAgICAgICAgICAweDFGMDMKLQotLyogVGV4dHVyZU1hZ0ZpbHRlciAqLwotI2Rl
ZmluZSBHTF9ORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgMHgyNjAwCi0jZGVmaW5lIEdM
X0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAweDI2MDEKLQotLyogVGV4dHVyZU1pbkZp
bHRlciAqLwotLyogICAgICBHTF9ORUFSRVNUICovCi0vKiAgICAgIEdMX0xJTkVBUiAqLwotI2Rl
ZmluZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUICAgICAgICAgMHgyNzAwCi0jZGVmaW5lIEdM
X0xJTkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICAweDI3MDEKLSNkZWZpbmUgR0xfTkVBUkVT
VF9NSVBNQVBfTElORUFSICAgICAgICAgIDB4MjcwMgotI2RlZmluZSBHTF9MSU5FQVJfTUlQTUFQ
X0xJTkVBUiAgICAgICAgICAgMHgyNzAzCi0KLS8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCi0j
ZGVmaW5lIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICAweDI4MDAKLSNkZWZpbmUg
R0xfVEVYVFVSRV9NSU5fRklMVEVSICAgICAgICAgICAgIDB4MjgwMQotI2RlZmluZSBHTF9URVhU
VVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgMHgyODAyCi0jZGVmaW5lIEdMX1RFWFRVUkVfV1JB
UF9UICAgICAgICAgICAgICAgICAweDI4MDMKLQotLyogVGV4dHVyZVRhcmdldCAqLwotLyogICAg
ICBHTF9URVhUVVJFXzJEICovCi0jZGVmaW5lIEdMX1RFWFRVUkUgICAgICAgICAgICAgICAgICAg
ICAgICAweDE3MDIKLQotI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQICAgICAgICAgICAgICAg
MHg4NTEzCi0jZGVmaW5lIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICAweDg1MTQK
LSNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAgIDB4ODUxNQotI2RlZmlu
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggICAgMHg4NTE2Ci0jZGVmaW5lIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICAweDg1MTcKLSNkZWZpbmUgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9ZICAgIDB4ODUxOAotI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ogICAgMHg4NTE5Ci0jZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWiAgICAweDg1MUEKLSNkZWZpbmUgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAg
IDB4ODUxQwotCi0vKiBUZXh0dXJlVW5pdCAqLwotI2RlZmluZSBHTF9URVhUVVJFMCAgICAgICAg
ICAgICAgICAgICAgICAgMHg4NEMwCi0jZGVmaW5lIEdMX1RFWFRVUkUxICAgICAgICAgICAgICAg
ICAgICAgICAweDg0QzEKLSNkZWZpbmUgR0xfVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRDMgotI2RlZmluZSBHTF9URVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMz
Ci0jZGVmaW5lIEdMX1RFWFRVUkU0ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzQKLSNkZWZp
bmUgR0xfVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNQotI2RlZmluZSBHTF9U
RVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM2Ci0jZGVmaW5lIEdMX1RFWFRVUkU3
ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzcKLSNkZWZpbmUgR0xfVEVYVFVSRTggICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRDOAotI2RlZmluZSBHTF9URVhUVVJFOSAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NEM5Ci0jZGVmaW5lIEdMX1RFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAg
ICAweDg0Q0EKLSNkZWZpbmUgR0xfVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgIDB4ODRD
QgotI2RlZmluZSBHTF9URVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgMHg4NENDCi0jZGVm
aW5lIEdMX1RFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICAweDg0Q0QKLSNkZWZpbmUgR0xf
VEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRQotI2RlZmluZSBHTF9URVhUVVJF
MTUgICAgICAgICAgICAgICAgICAgICAgMHg4NENGCi0jZGVmaW5lIEdMX1RFWFRVUkUxNiAgICAg
ICAgICAgICAgICAgICAgICAweDg0RDAKLSNkZWZpbmUgR0xfVEVYVFVSRTE3ICAgICAgICAgICAg
ICAgICAgICAgIDB4ODREMQotI2RlZmluZSBHTF9URVhUVVJFMTggICAgICAgICAgICAgICAgICAg
ICAgMHg4NEQyCi0jZGVmaW5lIEdMX1RFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICAweDg0
RDMKLSNkZWZpbmUgR0xfVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgIDB4ODRENAotI2Rl
ZmluZSBHTF9URVhUVVJFMjEgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ1Ci0jZGVmaW5lIEdM
X1RFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICAweDg0RDYKLSNkZWZpbmUgR0xfVEVYVFVS
RTIzICAgICAgICAgICAgICAgICAgICAgIDB4ODRENwotI2RlZmluZSBHTF9URVhUVVJFMjQgICAg
ICAgICAgICAgICAgICAgICAgMHg4NEQ4Ci0jZGVmaW5lIEdMX1RFWFRVUkUyNSAgICAgICAgICAg
ICAgICAgICAgICAweDg0RDkKLSNkZWZpbmUgR0xfVEVYVFVSRTI2ICAgICAgICAgICAgICAgICAg
ICAgIDB4ODREQQotI2RlZmluZSBHTF9URVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgMHg4
NERCCi0jZGVmaW5lIEdMX1RFWFRVUkUyOCAgICAgICAgICAgICAgICAgICAgICAweDg0REMKLSNk
ZWZpbmUgR0xfVEVYVFVSRTI5ICAgICAgICAgICAgICAgICAgICAgIDB4ODRERAotI2RlZmluZSBH
TF9URVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgMHg4NERFCi0jZGVmaW5lIEdMX1RFWFRV
UkUzMSAgICAgICAgICAgICAgICAgICAgICAweDg0REYKLSNkZWZpbmUgR0xfQUNUSVZFX1RFWFRV
UkUgICAgICAgICAgICAgICAgIDB4ODRFMAotCi0vKiBUZXh0dXJlV3JhcE1vZGUgKi8KLSNkZWZp
bmUgR0xfUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkwMQotI2RlZmluZSBHTF9D
TEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgMHg4MTJGCi0jZGVmaW5lIEdMX01JUlJPUkVE
X1JFUEVBVCAgICAgICAgICAgICAgICAweDgzNzAKLQotLyogVW5pZm9ybSBUeXBlcyAqLwotI2Rl
ZmluZSBHTF9GTE9BVF9WRUMyICAgICAgICAgICAgICAgICAgICAgMHg4QjUwCi0jZGVmaW5lIEdM
X0ZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICAweDhCNTEKLSNkZWZpbmUgR0xfRkxPQVRf
VkVDNCAgICAgICAgICAgICAgICAgICAgIDB4OEI1MgotI2RlZmluZSBHTF9JTlRfVkVDMiAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QjUzCi0jZGVmaW5lIEdMX0lOVF9WRUMzICAgICAgICAgICAg
ICAgICAgICAgICAweDhCNTQKLSNkZWZpbmUgR0xfSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI1NQotI2RlZmluZSBHTF9CT09MICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjU2Ci0jZGVmaW5lIEdMX0JPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICAweDhCNTcKLSNk
ZWZpbmUgR0xfQk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgIDB4OEI1OAotI2RlZmluZSBH
TF9CT09MX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgMHg4QjU5Ci0jZGVmaW5lIEdMX0ZMT0FU
X01BVDIgICAgICAgICAgICAgICAgICAgICAweDhCNUEKLSNkZWZpbmUgR0xfRkxPQVRfTUFUMyAg
ICAgICAgICAgICAgICAgICAgIDB4OEI1QgotI2RlZmluZSBHTF9GTE9BVF9NQVQ0ICAgICAgICAg
ICAgICAgICAgICAgMHg4QjVDCi0jZGVmaW5lIEdMX1NBTVBMRVJfMkQgICAgICAgICAgICAgICAg
ICAgICAweDhCNUUKLSNkZWZpbmUgR0xfU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgIDB4
OEI2MAotCi0vKiBWZXJ0ZXggQXJyYXlzICovCi0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfRU5BQkxFRCAgICAgICAgMHg4NjIyCi0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlf
U0laRSAgICAgICAgICAgMHg4NjIzCi0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RS
SURFICAgICAgICAgMHg4NjI0Ci0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAg
ICAgICAgICAgMHg4NjI1Ci0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpF
RCAgICAgMHg4ODZBCi0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiAgICAg
ICAgMHg4NjQ1Ci0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcg
MHg4ODlGCi0KLS8qIFJlYWQgRm9ybWF0ICovCi0jZGVmaW5lIEdMX0lNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfVFlQRSAgIDB4OEI5QQotI2RlZmluZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9S
RUFEX0ZPUk1BVCAweDhCOUIKLQotLyogU2hhZGVyIFNvdXJjZSAqLwotI2RlZmluZSBHTF9DT01Q
SUxFX1NUQVRVUyAgICAgICAgICAgICAgICAgMHg4QjgxCi0jZGVmaW5lIEdMX0lORk9fTE9HX0xF
TkdUSCAgICAgICAgICAgICAgICAweDhCODQKLSNkZWZpbmUgR0xfU0hBREVSX1NPVVJDRV9MRU5H
VEggICAgICAgICAgIDB4OEI4OAotI2RlZmluZSBHTF9TSEFERVJfQ09NUElMRVIgICAgICAgICAg
ICAgICAgMHg4REZBCi0KLS8qIFNoYWRlciBCaW5hcnkgKi8KLSNkZWZpbmUgR0xfU0hBREVSX0JJ
TkFSWV9GT1JNQVRTICAgICAgICAgIDB4OERGOAotI2RlZmluZSBHTF9OVU1fU0hBREVSX0JJTkFS
WV9GT1JNQVRTICAgICAgMHg4REY5Ci0KLS8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5
cGVzICovCi0jZGVmaW5lIEdMX0xPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICAweDhERjAK
LSNkZWZpbmUgR0xfTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgIDB4OERGMQotI2RlZmlu
ZSBHTF9ISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgMHg4REYyCi0jZGVmaW5lIEdMX0xP
V19JTlQgICAgICAgICAgICAgICAgICAgICAgICAweDhERjMKLSNkZWZpbmUgR0xfTUVESVVNX0lO
VCAgICAgICAgICAgICAgICAgICAgIDB4OERGNAotI2RlZmluZSBHTF9ISUdIX0lOVCAgICAgICAg
ICAgICAgICAgICAgICAgMHg4REY1Ci0KLS8qIEZyYW1lYnVmZmVyIE9iamVjdC4gKi8KLSNkZWZp
bmUgR0xfRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgIDB4OEQ0MAotI2RlZmluZSBHTF9S
RU5ERVJCVUZGRVIgICAgICAgICAgICAgICAgICAgMHg4RDQxCi0KLSNkZWZpbmUgR0xfUkdCQTQg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NgotI2RlZmluZSBHTF9SR0I1X0ExICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDU3Ci0jZGVmaW5lIEdMX1JHQjU2NSAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhENjIKLSNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMTYgICAgICAgICAg
ICAgIDB4ODFBNQotI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYICAgICAgICAgICAgICAgICAgMHgx
OTAxCi0jZGVmaW5lIEdMX1NURU5DSUxfSU5ERVg4ICAgICAgICAgICAgICAgICAweDhENDgKLQot
I2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgMHg4RDQyCi0jZGVmaW5l
IEdMX1JFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAgICAgICAweDhENDMKLSNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgIDB4OEQ0NAotI2RlZmluZSBHTF9SRU5ERVJCVUZG
RVJfUkVEX1NJWkUgICAgICAgICAgMHg4RDUwCi0jZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9HUkVF
Tl9TSVpFICAgICAgICAweDhENTEKLSNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0JMVUVfU0laRSAg
ICAgICAgIDB4OEQ1MgotI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAg
MHg4RDUzCi0jZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9ERVBUSF9TSVpFICAgICAgICAweDhENTQK
LSNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAgIDB4OEQ1NQotCi0jZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgIDB4OENE
MAotI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAg
ICAweDhDRDEKLSNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVM
ICAgICAgICAgMHg4Q0QyCi0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVS
RV9DVUJFX01BUF9GQUNFIDB4OENEMwotCi0jZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwICAg
ICAgICAgICAgICAweDhDRTAKLSNkZWZpbmUgR0xfREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAg
ICAgIDB4OEQwMAotI2RlZmluZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgMHg4
RDIwCi0KLSNkZWZpbmUgR0xfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLQotI2Rl
ZmluZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICAweDhDRDUK
LSNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgMHg4
Q0Q2Ci0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5U
IDB4OENENwotI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgICAg
ICAgICAweDhDRDkKLSNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAg
ICAgICAgICAgMHg4Q0RECi0KLSNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQklORElORyAgICAgICAg
ICAgIDB4OENBNgotI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgMHg4
Q0E3Ci0jZGVmaW5lIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRSAgICAgICAgICAweDg0RTgKLQot
I2RlZmluZSBHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiAgMHgwNTA2Ci0KLS8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICogR0wgY29yZSBmdW5jdGlvbnMuCi0gKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
LQotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xBY3RpdmVUZXh0dXJlIChH
TGVudW0gdGV4dHVyZSk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEF0
dGFjaFNoYWRlciAoR0x1aW50IHByb2dyYW0sIEdMdWludCBzaGFkZXIpOwotR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kQXR0cmliTG9jYXRpb24gKEdMdWludCBwcm9n
cmFtLCBHTHVpbnQgaW5kZXgsIGNvbnN0IEdMY2hhciogbmFtZSk7Ci1HTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRCdWZmZXIgKEdMZW51bSB0YXJnZXQsIEdMdWludCBi
dWZmZXIpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kRnJhbWVi
dWZmZXIgKEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcik7Ci1HTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRSZW5kZXJidWZmZXIgKEdMZW51bSB0YXJnZXQs
IEdMdWludCByZW5kZXJidWZmZXIpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xCaW5kVGV4dHVyZSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IHRleHR1cmUpOwotR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZENvbG9yIChHTGNsYW1wZiByZWQs
IEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7Ci1HTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRXF1YXRpb24gKCBHTGVudW0gbW9k
ZSApOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZEVxdWF0aW9u
U2VwYXJhdGUgKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKTsKLUdMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRGdW5jIChHTGVudW0gc2ZhY3RvciwgR0xl
bnVtIGRmYWN0b3IpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVu
ZEZ1bmNTZXBhcmF0ZSAoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0Fs
cGhhLCBHTGVudW0gZHN0QWxwaGEpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xCdWZmZXJEYXRhIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0IEdM
dm9pZCogZGF0YSwgR0xlbnVtIHVzYWdlKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQnVmZmVyU3ViRGF0YSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBH
THNpemVpcHRyIHNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7Ci1HTF9BUElDQUxMIEdMZW51bSAg
ICAgICBHTF9BUElFTlRSWSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMgKEdMZW51bSB0YXJnZXQp
OwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhciAoR0xiaXRmaWVs
ZCBtYXNrKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJDb2xv
ciAoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYg
YWxwaGEpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckRlcHRo
ZiAoR0xjbGFtcGYgZGVwdGgpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xDbGVhclN0ZW5jaWwgKEdMaW50IHMpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xDb2xvck1hc2sgKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29s
ZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbENvbXBpbGVTaGFkZXIgKEdMdWludCBzaGFkZXIpOwotR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRCAoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9p
ZCogZGF0YSk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOwotR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4SW1hZ2UyRCAoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7Ci1HTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlUZXhTdWJJbWFnZTJEIChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotR0xfQVBJQ0FMTCBHTHVp
bnQgICAgICAgR0xfQVBJRU5UUlkgZ2xDcmVhdGVQcm9ncmFtICh2b2lkKTsKLUdMX0FQSUNBTEwg
R0x1aW50ICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlU2hhZGVyIChHTGVudW0gdHlwZSk7Ci1H
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEN1bGxGYWNlIChHTGVudW0gbW9k
ZSk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZUJ1ZmZlcnMg
KEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBidWZmZXJzKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlRnJhbWVidWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdM
dWludCogZnJhbWVidWZmZXJzKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsRGVsZXRlUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOwotR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVSZW5kZXJidWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdM
dWludCogcmVuZGVyYnVmZmVycyk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbERlbGV0ZVNoYWRlciAoR0x1aW50IHNoYWRlcik7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbERlbGV0ZVRleHR1cmVzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCog
dGV4dHVyZXMpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aEZ1
bmMgKEdMZW51bSBmdW5jKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
RGVwdGhNYXNrIChHTGJvb2xlYW4gZmxhZyk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbERlcHRoUmFuZ2VmIChHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcik7Ci1H
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbERldGFjaFNoYWRlciAoR0x1aW50
IHByb2dyYW0sIEdMdWludCBzaGFkZXIpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xEaXNhYmxlIChHTGVudW0gY2FwKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5IChHTHVpbnQgaW5kZXgpOwotR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzIChHTGVudW0gbW9k
ZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHMgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRW5hYmxlIChHTGVudW0gY2FwKTsKLUdMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkgKEdMdWludCBpbmRl
eCk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEZpbmlzaCAodm9pZCk7
Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEZsdXNoICh2b2lkKTsKLUdM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVy
dGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBh
dHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwp
OwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGcm9udEZhY2UgKEdMZW51
bSBtb2RlKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuQnVmZmVy
cyAoR0xzaXplaSBuLCBHTHVpbnQqIGJ1ZmZlcnMpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZW5lcmF0ZU1pcG1hcCAoR0xlbnVtIHRhcmdldCk7Ci1HTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdlbkZyYW1lYnVmZmVycyAoR0xzaXplaSBuLCBH
THVpbnQqIGZyYW1lYnVmZmVycyk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbEdlblJlbmRlcmJ1ZmZlcnMgKEdMc2l6ZWkgbiwgR0x1aW50KiByZW5kZXJidWZmZXJzKTsK
LUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuVGV4dHVyZXMgKEdMc2l6
ZWkgbiwgR0x1aW50KiB0ZXh0dXJlcyk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldEFjdGl2ZUF0dHJpYiAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xz
aXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUs
IEdMY2hhciogbmFtZSk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdl
dEFjdGl2ZVVuaWZvcm0gKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVm
c2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIq
IG5hbWUpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRhY2hl
ZFNoYWRlcnMgKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIG1heGNvdW50LCBHTHNpemVpKiBjb3Vu
dCwgR0x1aW50KiBzaGFkZXJzKTsKLUdMX0FQSUNBTEwgaW50ICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsR2V0QXR0cmliTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUp
OwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCb29sZWFudiAoR0xl
bnVtIHBuYW1lLCBHTGJvb2xlYW4qIHBhcmFtcyk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldEJ1ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpOwotR0xfQVBJQ0FMTCBHTGVudW0gICAgICAgR0xfQVBJRU5U
UlkgZ2xHZXRFcnJvciAodm9pZCk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldEZsb2F0diAoR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOwotR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwg
R0xpbnQqIHBhcmFtcyk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdl
dEludGVnZXJ2IChHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOwotR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRQcm9ncmFtaXYgKEdMdWludCBwcm9ncmFtLCBHTGVu
dW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRQcm9ncmFtSW5mb0xvZyAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmc2l6
ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpOwotR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVyaXYgKEdMdWludCBzaGFkZXIsIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcyk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldFNoYWRlckluZm9Mb2cgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQgKEdMZW51bSBzaGFkZXJ0eXBlLCBH
TGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQqIHJhbmdlLCBHTGludCogcHJlY2lzaW9uKTsKLUdM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVyU291cmNlIChHTHVp
bnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBzb3Vy
Y2UpOwotR0xfQVBJQ0FMTCBjb25zdCBHTHVieXRlKiBHTF9BUElFTlRSWSBnbEdldFN0cmluZyAo
R0xlbnVtIG5hbWUpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRU
ZXhQYXJhbWV0ZXJmdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJh
bXMpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRUZXhQYXJhbWV0
ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKLUdMX0FQ
SUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9ybWZ2IChHTHVpbnQgcHJv
Z3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcyk7Ci1HTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1pdiAoR0x1aW50IHByb2dyYW0sIEdMaW50
IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKTsKLUdMX0FQSUNBTEwgaW50ICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2V0VW5pZm9ybUxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFy
KiBuYW1lKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4
QXR0cmliZnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOwot
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAo
R0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOwotR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydiAoR0x1aW50
IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBvaW50ZXIpOwotR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xIaW50IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gbW9kZSk7
Ci1HTF9BUElDQUxMIEdMYm9vbGVhbiAgICBHTF9BUElFTlRSWSBnbElzQnVmZmVyIChHTHVpbnQg
YnVmZmVyKTsKLUdMX0FQSUNBTEwgR0xib29sZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNFbmFibGVk
IChHTGVudW0gY2FwKTsKLUdMX0FQSUNBTEwgR0xib29sZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNG
cmFtZWJ1ZmZlciAoR0x1aW50IGZyYW1lYnVmZmVyKTsKLUdMX0FQSUNBTEwgR0xib29sZWFuICAg
IEdMX0FQSUVOVFJZIGdsSXNQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7Ci1HTF9BUElDQUxMIEdM
Ym9vbGVhbiAgICBHTF9BUElFTlRSWSBnbElzUmVuZGVyYnVmZmVyIChHTHVpbnQgcmVuZGVyYnVm
ZmVyKTsKLUdMX0FQSUNBTEwgR0xib29sZWFuICAgIEdMX0FQSUVOVFJZIGdsSXNTaGFkZXIgKEdM
dWludCBzaGFkZXIpOwotR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgR0xfQVBJRU5UUlkgZ2xJc1Rl
eHR1cmUgKEdMdWludCB0ZXh0dXJlKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsTGluZVdpZHRoIChHTGZsb2F0IHdpZHRoKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsTGlua1Byb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKLUdMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsUGl4ZWxTdG9yZWkgKEdMZW51bSBwbmFtZSwgR0xp
bnQgcGFyYW0pOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQb2x5Z29u
T2Zmc2V0IChHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cyk7Ci1HTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbFJlYWRQaXhlbHMgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x2
b2lkKiBwaXhlbHMpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWxl
YXNlU2hhZGVyQ29tcGlsZXIgKHZvaWQpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLUdMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2FtcGxlQ292ZXJhZ2UgKEdMY2xhbXBmIHZhbHVlLCBH
TGJvb2xlYW4gaW52ZXJ0KTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
U2Npc3NvciAoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJCaW5hcnkgKEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50KiBzaGFkZXJzLCBHTGVudW0gYmluYXJ5Zm9ybWF0LCBjb25z
dCBHTHZvaWQqIGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJTb3VyY2UgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMY2hhcioqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCk7Ci1HTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxGdW5jIChHTGVudW0gZnVuYywg
R0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xp
bnQgcmVmLCBHTHVpbnQgbWFzayk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFN0ZW5jaWxNYXNrIChHTHVpbnQgbWFzayk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTHVpbnQgbWFz
ayk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxPcCAoR0xl
bnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKLUdMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbE9wU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVu
dW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpOwotR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBp
eGVscyk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRl
cmYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSk7Ci1HTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRlcmZ2IChHTGVudW0gdGFy
Z2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtcyk7Ci1HTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRlcmkgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xUZXhQYXJhbWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25z
dCBHTGludCogcGFyYW1zKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
VGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOwotR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMWYgKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0
IHgpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMWZ2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdik7Ci1HTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xaSAoR0xpbnQgbG9jYXRpb24s
IEdMaW50IHgpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3Jt
MWl2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOwotR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMmYgKEdMaW50IGxvY2F0
aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm0yZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0KiB2KTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTJpIChHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7Ci1HTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCogdik7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm0zZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5
LCBHTGZsb2F0IHopOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlm
b3JtM2Z2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdik7
Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zaSAoR0xpbnQg
bG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopOwotR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM2l2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQqIHYpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xVbmlmb3JtNGYgKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xm
bG9hdCB6LCBHTGZsb2F0IHcpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xVbmlmb3JtNGZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCogdik7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00aSAo
R0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpOwotR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtNGl2IChHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOwotR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4MmZ2IChHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOwot
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4M2Z2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xV
bmlmb3JtTWF0cml4NGZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xVc2VQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7Ci1HTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZhbGlkYXRlUHJvZ3JhbSAoR0x1aW50IHByb2dy
YW0pOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIx
ZiAoR0x1aW50IGluZHgsIEdMZmxvYXQgeCk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbFZlcnRleEF0dHJpYjFmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZh
bHVlcyk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJp
YjJmIChHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOwotR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIyZnYgKEdMdWludCBpbmR4LCBjb25z
dCBHTGZsb2F0KiB2YWx1ZXMpOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xWZXJ0ZXhBdHRyaWIzZiAoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZs
b2F0IHopOwotR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRy
aWIzZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOwotR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWI0ZiAoR0x1aW50IGluZHgsIEdM
ZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7Ci1HTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjRmdiAoR0x1aW50IGluZHgsIGNv
bnN0IEdMZmxvYXQqIHZhbHVlcyk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFZlcnRleEF0dHJpYlBvaW50ZXIgKEdMdWludCBpbmR4LCBHTGludCBzaXplLCBHTGVudW0g
dHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQq
IHB0cik7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFZpZXdwb3J0IChH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSNpZmRl
ZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX2dsMl9oXyAqLwpJbmRleDog
QU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRl
L0dMRVMyL2dsMmV4dC5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL2luY2x1ZGUvR0xFUzIv
Z2wyZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODMxICswLDAgQEAKLSNpZm5kZWYgX19nbDJl
eHRfaF8KLSNkZWZpbmUgX19nbDJleHRfaF8KLQotLyogJFJldmlzaW9uOiAxMDc5OCAkIG9uICRE
YXRlOjogMjAxMC0wMy0xOSAxNzozNDozMCAtMDcwMCAjJCAqLwotCi0jaWZkZWYgX19jcGx1c3Bs
dXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8qCi0gKiBUaGlzIGRvY3VtZW50IGlzIGxpY2Vu
c2VkIHVuZGVyIHRoZSBTR0kgRnJlZSBTb2Z0d2FyZSBCIExpY2Vuc2UgVmVyc2lvbgotICogMi4w
LiBGb3IgZGV0YWlscywgc2VlIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQi8gLgot
ICovCi0KLSNpZm5kZWYgR0xfQVBJRU5UUllQCi0jICAgZGVmaW5lIEdMX0FQSUVOVFJZUCBHTF9B
UElFTlRSWSoKLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKLSAqIE9FUyBleHRlbnNpb24g
dG9rZW5zCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIEdMX09FU19jb21wcmVzc2VkX0VUQzFf
UkdCOF90ZXh0dXJlICovCi0jaWZuZGVmIEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0
dXJlCi0jZGVmaW5lIEdMX0VUQzFfUkdCOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4RDY0Ci0jZW5kaWYKLQotLyogR0xfT0VTX2NvbXByZXNzZWRfcGFsZXR0
ZWRfdGV4dHVyZSAqLwotI2lmbmRlZiBHTF9PRVNfY29tcHJlc3NlZF9wYWxldHRlZF90ZXh0dXJl
Ci0jZGVmaW5lIEdMX1BBTEVUVEU0X1JHQjhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QjkwCi0jZGVmaW5lIEdMX1BBTEVUVEU0X1JHQkE4X09FUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjkxCi0jZGVmaW5lIEdMX1BBTEVUVEU0X1I1X0c2
X0I1X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjkyCi0jZGVmaW5lIEdM
X1BBTEVUVEU0X1JHQkE0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjkzCi0jZGVmaW5lIEdMX1BBTEVUVEU0X1JHQjVfQTFfT0VTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4Qjk0Ci0jZGVmaW5lIEdMX1BBTEVUVEU4X1JHQjhfT0VTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qjk1Ci0jZGVmaW5lIEdMX1BBTEVUVEU4X1JH
QkE4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qjk2Ci0jZGVmaW5l
IEdMX1BBTEVUVEU4X1I1X0c2X0I1X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4Qjk3Ci0jZGVmaW5lIEdMX1BBTEVUVEU4X1JHQkE0X09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4Qjk4Ci0jZGVmaW5lIEdMX1BBTEVUVEU4X1JHQjVfQTFfT0VTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qjk5Ci0jZW5kaWYKLQotLyogR0xfT0VT
X2RlcHRoMjQgKi8KLSNpZm5kZWYgR0xfT0VTX2RlcHRoMjQKLSNkZWZpbmUgR0xfREVQVEhfQ09N
UE9ORU5UMjRfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxQTYKLSNlbmRp
ZgotCi0vKiBHTF9PRVNfZGVwdGgzMiAqLwotI2lmbmRlZiBHTF9PRVNfZGVwdGgzMgotI2RlZmlu
ZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODFBNwotI2VuZGlmCi0KLS8qIEdMX09FU19kZXB0aF90ZXh0dXJlICovCi0vKiBObyBuZXcg
dG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCi0KLS8qIEdMX09FU19FR0xf
aW1hZ2UgKi8KLSNpZm5kZWYgR0xfT0VTX0VHTF9pbWFnZQotdHlwZWRlZiB2b2lkKiBHTGVnbElt
YWdlT0VTOwotI2VuZGlmCi0KLS8qIEdMX09FU19lbGVtZW50X2luZGV4X3VpbnQgKi8KLSNpZm5k
ZWYgR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludAotI2RlZmluZSBHTF9VTlNJR05FRF9JTlQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNQotI2VuZGlmCi0KLS8q
IEdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgKi8KLSNpZm5kZWYgR0xfT0VTX2dldF9wcm9ncmFt
X2JpbmFyeQotI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhfT0VTICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODc0MQotI2RlZmluZSBHTF9OVU1fUFJPR1JBTV9CSU5BUllfRk9S
TUFUU19PRVMgICAgICAgICAgICAgICAgICAgICAgIDB4ODdGRQotI2RlZmluZSBHTF9QUk9HUkFN
X0JJTkFSWV9GT1JNQVRTX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODdGRgotI2Vu
ZGlmCi0KLS8qIEdMX09FU19tYXBidWZmZXIgKi8KLSNpZm5kZWYgR0xfT0VTX21hcGJ1ZmZlcgot
I2RlZmluZSBHTF9XUklURV9PTkxZX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODhCOQotI2RlZmluZSBHTF9CVUZGRVJfQUNDRVNTX09FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODhCQgotI2RlZmluZSBHTF9CVUZGRVJfTUFQUEVEX09F
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhCQwotI2RlZmluZSBHTF9C
VUZGRVJfTUFQX1BPSU5URVJfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhC
RAotI2VuZGlmCi0KLS8qIEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAqLwotI2lmbmRlZiBH
TF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwKLSNkZWZpbmUgR0xfREVQVEhfU1RFTkNJTF9PRVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjkKLSNkZWZpbmUgR0xfVU5T
SUdORURfSU5UXzI0XzhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RkEK
LSNkZWZpbmUgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg4RjAKLSNlbmRpZgotCi0vKiBHTF9PRVNfcmdiOF9yZ2JhOCAqLwotI2lmbmRl
ZiBHTF9PRVNfcmdiOF9yZ2JhOAotI2RlZmluZSBHTF9SR0I4X09FUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1MQotI2RlZmluZSBHTF9SR0JBOF9PRVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1OAotI2VuZGlm
Ci0KLS8qIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAqLwotI2lmbmRlZiBHTF9PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMKLSNkZWZpbmUgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVf
SElOVF9PRVMgICAgICAgICAgICAgICAgICAweDhCOEIKLSNlbmRpZgotCi0vKiBHTF9PRVNfc3Rl
bmNpbDEgKi8KLSNpZm5kZWYgR0xfT0VTX3N0ZW5jaWwxCi0jZGVmaW5lIEdMX1NURU5DSUxfSU5E
RVgxX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQ2Ci0jZW5kaWYK
LQotLyogR0xfT0VTX3N0ZW5jaWw0ICovCi0jaWZuZGVmIEdMX09FU19zdGVuY2lsNAotI2RlZmlu
ZSBHTF9TVEVOQ0lMX0lOREVYNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEQ0NwotI2VuZGlmCi0KLS8qIEdMX09FU190ZXh0dXJlXzNEICovCi0jaWZuZGVmIEdMX09F
U190ZXh0dXJlXzNECi0jZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SX09FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MDcyCi0jZGVmaW5lIEdMX1RFWFRVUkVfM0RfT0VTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZGCi0jZGVmaW5lIEdMX1RF
WFRVUkVfQklORElOR18zRF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZB
Ci0jZGVmaW5lIEdMX01BWF8zRF9URVhUVVJFX1NJWkVfT0VTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDczCi0jZGVmaW5lIEdMX1NBTVBMRVJfM0RfT0VTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjVGCi0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfVEVYVFVSRV8zRF9aT0ZGU0VUX09FUyAgICAgICAgMHg4Q0Q0Ci0jZW5kaWYKLQot
LyogR0xfT0VTX3RleHR1cmVfZmxvYXQgKi8KLS8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBi
eSB0aGlzIGV4dGVuc2lvbi4gKi8KLQotLyogR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICov
Ci0vKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCi0KLS8q
IEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgKi8KLSNpZm5kZWYgR0xfT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdAotI2RlZmluZSBHTF9IQUxGX0ZMT0FUX09FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEQ2MQotI2VuZGlmCi0KLS8qIEdMX09FU190ZXh0dXJlX2hhbGZf
ZmxvYXRfbGluZWFyICovCi0vKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRl
bnNpb24uICovCi0KLS8qIEdMX09FU190ZXh0dXJlX25wb3QgKi8KLS8qIE5vIG5ldyB0b2tlbnMg
aW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KLQotLyogR0xfT0VTX3ZlcnRleF9hcnJh
eV9vYmplY3QgKi8KLSNpZm5kZWYgR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSNkZWZpbmUg
R0xfVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg1QjUKLSNlbmRpZgotCi0vKiBHTF9PRVNfdmVydGV4X2hhbGZfZmxvYXQgKi8KLS8qIEdMX0hB
TEZfRkxPQVRfT0VTIGRlZmluZWQgaW4gR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBhbHJlYWR5
LiAqLwotCi0vKiBHTF9PRVNfdmVydGV4X3R5cGVfMTBfMTBfMTBfMiAqLwotI2lmbmRlZiBHTF9P
RVNfdmVydGV4X3R5cGVfMTBfMTBfMTBfMgotI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfMTBfMTBf
MTBfMl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGNgotI2RlZmluZSBHTF9JTlRf
MTBfMTBfMTBfMl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGNwot
I2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgotICogQU1EIGV4dGVuc2lvbiB0b2tlbnMKLSAq
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KLQotLyogR0xfQU1EX2NvbXByZXNzZWRfM0RDX3RleHR1cmUgKi8K
LSNpZm5kZWYgR0xfQU1EX2NvbXByZXNzZWRfM0RDX3RleHR1cmUKLSNkZWZpbmUgR0xfM0RDX1hf
QU1EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3RjkKLSNk
ZWZpbmUgR0xfM0RDX1hZX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg3RkEKLSNlbmRpZgotCi0vKiBHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZSAq
LwotI2lmbmRlZiBHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZQotI2RlZmluZSBHTF9BVENf
UkdCX0FNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM5Mgot
I2RlZmluZSBHTF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEM5MwotI2RlZmluZSBHTF9BVENfUkdCQV9JTlRFUlBPTEFURURfQUxQSEFfQU1E
ICAgICAgICAgICAgICAgICAgICAgIDB4ODdFRQotI2VuZGlmCi0KLS8qIEdMX0FNRF9wZXJmb3Jt
YW5jZV9tb25pdG9yICovCi0jaWZuZGVmIEdMX0FNRF9wZXJmb3JtYW5jZV9tb25pdG9yCi0jZGVm
aW5lIEdMX0NPVU5URVJfVFlQRV9BTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4QkMwCi0jZGVmaW5lIEdMX0NPVU5URVJfUkFOR0VfQU1EICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QkMxCi0jZGVmaW5lIEdMX1VOU0lHTkVEX0lOVDY0X0FNRCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkMyCi0jZGVmaW5lIEdMX1BFUkNF
TlRBR0VfQU1EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkMzCi0j
ZGVmaW5lIEdMX1BFUkZNT05fUkVTVUxUX0FWQUlMQUJMRV9BTUQgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QkM0Ci0jZGVmaW5lIEdMX1BFUkZNT05fUkVTVUxUX1NJWkVfQU1EICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QkM1Ci0jZGVmaW5lIEdMX1BFUkZNT05fUkVTVUxUX0FN
RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkM2Ci0jZW5kaWYKLQotLyog
R0xfQU1EX3Byb2dyYW1fYmluYXJ5X1o0MDAgKi8KLSNpZm5kZWYgR0xfQU1EX3Byb2dyYW1fYmlu
YXJ5X1o0MDAKLSNkZWZpbmUgR0xfWjQwMF9CSU5BUllfQU1EICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg3NDAKLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKLSAq
IEVYVCBleHRlbnNpb24gdG9rZW5zCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIEdMX0VYVF9i
bGVuZF9taW5tYXggKi8KLSNpZm5kZWYgR0xfRVhUX2JsZW5kX21pbm1heAotI2RlZmluZSBHTF9N
SU5fRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAw
NwotI2RlZmluZSBHTF9NQVhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODAwOAotI2VuZGlmCi0KLS8qIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVy
ICovCi0jaWZuZGVmIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyCi0jZGVmaW5lIEdMX0NPTE9S
X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwCi0j
ZGVmaW5lIEdMX0RFUFRIX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgxODAxCi0jZGVmaW5lIEdMX1NURU5DSUxfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgxODAyCi0jZW5kaWYKLQotLyogR0xfRVhUX211bHRpX2Ry
YXdfYXJyYXlzICovCi0vKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNp
b24uICovCi0KLS8qIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICovCi0jaWZuZGVmIEdMX0VYVF9y
ZWFkX2Zvcm1hdF9iZ3JhCi0jZGVmaW5lIEdMX0JHUkFfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEUxCi0jZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JU
XzRfNF80XzRfUkVWX0VYVCAgICAgICAgICAgICAgICAgICAgICAgMHg4MzY1Ci0jZGVmaW5lIEdM
X1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCAgICAgICAgICAgICAgICAgICAgICAgMHg4
MzY2Ci0jZW5kaWYKLQotLyogR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljICovCi0j
aWZuZGVmIEdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotI2RlZmluZSBHTF9URVhU
VVJFX01BWF9BTklTT1RST1BZX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGRQot
I2RlZmluZSBHTF9NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODRGRgotI2VuZGlmCi0KLS8qIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4
OCAqLwotI2lmbmRlZiBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKLSNkZWZpbmUgR0xf
QkdSQV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
RTEKLSNlbmRpZgotCi0vKiBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBfMTBfUkVWICovCi0j
aWZuZGVmIEdMX0VYVF90ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYKLSNkZWZpbmUgR0xfVU5T
SUdORURfSU5UXzJfMTBfMTBfMTBfUkVWX0VYVCAgICAgICAgICAgICAgICAgICAgICAweDgzNjgK
LSNlbmRpZgotCi0vKiBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxICovCi0jaWZuZGVm
IEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKLSNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDgzRjAKLSNkZWZpbmUg
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAw
eDgzRjEKLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKLSAqIElNRyBleHRlbnNpb24gdG9r
ZW5zCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIEdMX0lNR19wcm9ncmFtX2JpbmFyeSAqLwot
I2lmbmRlZiBHTF9JTUdfcHJvZ3JhbV9iaW5hcnkKLSNkZWZpbmUgR0xfU0dYX1BST0dSQU1fQklO
QVJZX0lNRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMzAKLSNlbmRpZgotCi0v
KiBHTF9JTUdfcmVhZF9mb3JtYXQgKi8KLSNpZm5kZWYgR0xfSU1HX3JlYWRfZm9ybWF0Ci0jZGVm
aW5lIEdMX0JHUkFfSU1HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MEUxCi0jZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0lNRyAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MzY1Ci0jZW5kaWYKLQotLyogR0xfSU1HX3NoYWRlcl9iaW5h
cnkgKi8KLSNpZm5kZWYgR0xfSU1HX3NoYWRlcl9iaW5hcnkKLSNkZWZpbmUgR0xfU0dYX0JJTkFS
WV9JTUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDMEEKLSNlbmRp
ZgotCi0vKiBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAqLwotI2lmbmRlZiBHTF9J
TUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YwotI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQl9Q
VlJUQ180QlBQVjFfSU1HICAgICAgICAgICAgICAgICAgICAgIDB4OEMwMAotI2RlZmluZSBHTF9D
T01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HICAgICAgICAgICAgICAgICAgICAgIDB4OEMw
MQotI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRyAgICAgICAgICAg
ICAgICAgICAgIDB4OEMwMgotI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYx
X0lNRyAgICAgICAgICAgICAgICAgICAgIDB4OEMwMwotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKgotICogTlYgZXh0ZW5zaW9uIHRva2VucwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBH
TF9OVl9mZW5jZSAqLwotI2lmbmRlZiBHTF9OVl9mZW5jZQotI2RlZmluZSBHTF9BTExfQ09NUExF
VEVEX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGMgotI2RlZmlu
ZSBHTF9GRU5DRV9TVEFUVVNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRGMwotI2RlZmluZSBHTF9GRU5DRV9DT05ESVRJT05fTlYgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRGNAotI2VuZGlmCi0KLS8qIEdMX05WX2NvdmVyYWdlX3NhbXBs
ZSAqLwotI2lmbmRlZiBHTF9OVl9jb3ZlcmFnZV9zYW1wbGUKLSNkZWZpbmUgR0xfQ09WRVJBR0Vf
Q09NUE9ORU5UX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFRDAKLSNkZWZp
bmUgR0xfQ09WRVJBR0VfQ09NUE9ORU5UNF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhFRDEKLSNkZWZpbmUgR0xfQ09WRVJBR0VfQVRUQUNITUVOVF9OViAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhFRDIKLSNkZWZpbmUgR0xfQ09WRVJBR0VfQlVGRkVSU19OViAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFRDMKLSNkZWZpbmUgR0xfQ09WRVJB
R0VfU0FNUExFU19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFRDQKLSNk
ZWZpbmUgR0xfQ09WRVJBR0VfQUxMX0ZSQUdNRU5UU19OViAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhFRDUKLSNkZWZpbmUgR0xfQ09WRVJBR0VfRURHRV9GUkFHTUVOVFNfTlYgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhFRDYKLSNkZWZpbmUgR0xfQ09WRVJBR0VfQVVUT01BVElD
X05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFRDcKLSNkZWZpbmUgR0xfQ09W
RVJBR0VfQlVGRkVSX0JJVF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAK
LSNlbmRpZgotCi0vKiBHTF9OVl9kZXB0aF9ub25saW5lYXIgKi8KLSNpZm5kZWYgR0xfTlZfZGVw
dGhfbm9ubGluZWFyCi0jZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2X05PTkxJTkVBUl9OViAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RTJDCi0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
Ci0gKiBRQ09NIGV4dGVuc2lvbiB0b2tlbnMKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogR0xf
UUNPTV9kcml2ZXJfY29udHJvbCAqLwotLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRo
aXMgZXh0ZW5zaW9uLiAqLwotCi0vKiBHTF9RQ09NX2V4dGVuZGVkX2dldCAqLwotI2lmbmRlZiBH
TF9RQ09NX2V4dGVuZGVkX2dldAotI2RlZmluZSBHTF9URVhUVVJFX1dJRFRIX1FDT00gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJEMgotI2RlZmluZSBHTF9URVhUVVJFX0hF
SUdIVF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJEMwotI2RlZmlu
ZSBHTF9URVhUVVJFX0RFUFRIX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEJENAotI2RlZmluZSBHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9RQ09NICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEJENQotI2RlZmluZSBHTF9URVhUVVJFX0ZPUk1BVF9RQ09NICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJENgotI2RlZmluZSBHTF9URVhUVVJF
X1RZUEVfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJENwotI2Rl
ZmluZSBHTF9URVhUVVJFX0lNQUdFX1ZBTElEX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEJEOAotI2RlZmluZSBHTF9URVhUVVJFX05VTV9MRVZFTFNfUUNPTSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEJEOQotI2RlZmluZSBHTF9URVhUVVJFX1RBUkdFVF9RQ09N
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJEQQotI2RlZmluZSBHTF9URVhU
VVJFX09CSkVDVF9WQUxJRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEJEQgot
I2RlZmluZSBHTF9TVEFURV9SRVNUT1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEJEQwotI2VuZGlmCi0KLS8qIEdMX1FDT01fZXh0ZW5kZWRfZ2V0MiAqLwotLyog
Tm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLwotCi0vKiBHTF9R
Q09NX3BlcmZtb25fZ2xvYmFsX21vZGUgKi8KLSNpZm5kZWYgR0xfUUNPTV9wZXJmbW9uX2dsb2Jh
bF9tb2RlCi0jZGVmaW5lIEdMX1BFUkZNT05fR0xPQkFMX01PREVfUUNPTSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4RkEwCi0jZW5kaWYKLQotLyogR0xfUUNPTV93cml0ZW9ubHlfcmVu
ZGVyaW5nICovCi0jaWZuZGVmIEdMX1FDT01fd3JpdGVvbmx5X3JlbmRlcmluZwotI2RlZmluZSBH
TF9XUklURU9OTFlfUkVOREVSSU5HX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODgyMwotI2VuZGlmCi0KLS8qIEdMX1FDT01fdGlsZWRfcmVuZGVyaW5nICovCi0jaWZuZGVmIEdM
X1FDT01fdGlsZWRfcmVuZGVyaW5nCi0jZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQwX1FDT00g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBHTF9DT0xP
Ul9CVUZGRVJfQklUMV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAw
MDIKLSNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVDJfUUNPTSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQzX1FDT00g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBHTF9DT0xP
Ul9CVUZGRVJfQklUNF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAw
MTAKLSNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVDVfUUNPTSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQ2X1FDT00g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBHTF9DT0xP
Ul9CVUZGRVJfQklUN19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAw
ODAKLSNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVDBfUUNPTSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQxX1FDT00g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBHTF9ERVBU
SF9CVUZGRVJfQklUMl9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0
MDAKLSNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVDNfUUNPTSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQ0X1FDT00g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBHTF9ERVBU
SF9CVUZGRVJfQklUNV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIw
MDAKLSNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVDZfUUNPTSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIEdMX0RFUFRIX0JVRkZFUl9CSVQ3X1FDT00g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQwX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAw
MDAKLSNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUMV9RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDJfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQzX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAw
MDAKLSNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUNF9RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIEdMX1NURU5DSUxfQlVGRkVSX0JJVDVfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQ2X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAw
MDAKLSNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUN19RQ09NICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQw
X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBHTF9NVUxU
SVNBTVBMRV9CVUZGRVJfQklUMV9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAw
MDAKLSNkZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDJfUUNPTSAgICAgICAgICAgICAg
ICAgICAgICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQz
X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAotI2RlZmluZSBHTF9NVUxU
SVNBTVBMRV9CVUZGRVJfQklUNF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAw
MDAKLSNkZWZpbmUgR0xfTVVMVElTQU1QTEVfQlVGRkVSX0JJVDVfUUNPTSAgICAgICAgICAgICAg
ICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIEdMX01VTFRJU0FNUExFX0JVRkZFUl9CSVQ2
X1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBHTF9NVUxU
SVNBTVBMRV9CVUZGRVJfQklUN19RQ09NICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAw
MDAKLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKLSAqIEFOR0xFIGV4dGVuc2lvbiB0b2tl
bnMKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAq
LwotI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0Ci0jZGVmaW5lIEdMX1JFQURfRlJB
TUVCVUZGRVJfQU5HTEUgICAgICAgICAweDhDQTgKLSNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZF
Ul9BTkdMRSAgICAgICAgIDB4OENBOQotI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJ
TkdfQU5HTEUgMHg4Q0E2IC8vIGFsaWFzIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcKLSNkZWZpbmUg
R0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFIDB4OENBQQotI2VuZGlmCi0KLS8qIEdM
X0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCi0jaWZuZGVmIEdMX0FOR0xFX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlCi0jZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0FOR0xF
ICAgICAgICAgICAgICAgICAgIDB4OENBQgotI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX01VTFRJU0FNUExFX0FOR0xFICAgICAweDhENTYKLSNkZWZpbmUgR0xfTUFYX1NBTVBMRVNf
QU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDU3Ci0jZW5kaWYKLQotLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qCi0gKiBFbmQgb2YgZXh0ZW5zaW9uIHRva2Vucywgc3RhcnQgb2YgY29ycmVz
cG9uZGluZyBleHRlbnNpb24gZnVuY3Rpb25zCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKgotICogT0VTIGV4dGVuc2lvbiBmdW5jdGlvbnMKLSAqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KLQotLyogR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUgKi8KLSNpZm5k
ZWYgR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUKLSNkZWZpbmUgR0xfT0VTX2Nv
bXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUgMQotI2VuZGlmCi0KLS8qIEdMX09FU19jb21wcmVz
c2VkX3BhbGV0dGVkX3RleHR1cmUgKi8KLSNpZm5kZWYgR0xfT0VTX2NvbXByZXNzZWRfcGFsZXR0
ZWRfdGV4dHVyZQotI2RlZmluZSBHTF9PRVNfY29tcHJlc3NlZF9wYWxldHRlZF90ZXh0dXJlIDEK
LSNlbmRpZgotCi0vKiBHTF9PRVNfZGVwdGgyNCAqLwotI2lmbmRlZiBHTF9PRVNfZGVwdGgyNAot
I2RlZmluZSBHTF9PRVNfZGVwdGgyNCAxCi0jZW5kaWYKLQotLyogR0xfT0VTX2RlcHRoMzIgKi8K
LSNpZm5kZWYgR0xfT0VTX2RlcHRoMzIKLSNkZWZpbmUgR0xfT0VTX2RlcHRoMzIgMQotI2VuZGlm
Ci0KLS8qIEdMX09FU19kZXB0aF90ZXh0dXJlICovCi0jaWZuZGVmIEdMX09FU19kZXB0aF90ZXh0
dXJlCi0jZGVmaW5lIEdMX09FU19kZXB0aF90ZXh0dXJlIDEKLSNlbmRpZgotCi0vKiBHTF9PRVNf
RUdMX2ltYWdlICovCi0jaWZuZGVmIEdMX09FU19FR0xfaW1hZ2UKLSNkZWZpbmUgR0xfT0VTX0VH
TF9pbWFnZSAxCi0jaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwotR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsRUdMSW1hZ2VUYXJnZXRUZXh0dXJlMkRPRVMgKEdMZW51bSB0YXJnZXQsIEdM
ZWdsSW1hZ2VPRVMgaW1hZ2UpOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRUdMSW1h
Z2VUYXJnZXRSZW5kZXJidWZmZXJTdG9yYWdlT0VTIChHTGVudW0gdGFyZ2V0LCBHTGVnbEltYWdl
T0VTIGltYWdlKTsKLSNlbmRpZgotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFR0xJ
TUFHRVRBUkdFVFRFWFRVUkUyRE9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVnbEltYWdlT0VT
IGltYWdlKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRUdMSU1BR0VUQVJHRVRS
RU5ERVJCVUZGRVJTVE9SQUdFT0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZWdsSW1hZ2VPRVMg
aW1hZ2UpOwotI2VuZGlmCi0KLS8qIEdMX09FU19lbGVtZW50X2luZGV4X3VpbnQgKi8KLSNpZm5k
ZWYgR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludAotI2RlZmluZSBHTF9PRVNfZWxlbWVudF9pbmRl
eF91aW50IDEKLSNlbmRpZgotCi0vKiBHTF9PRVNfZmJvX3JlbmRlcl9taXBtYXAgKi8KLSNpZm5k
ZWYgR0xfT0VTX2Zib19yZW5kZXJfbWlwbWFwCi0jZGVmaW5lIEdMX09FU19mYm9fcmVuZGVyX21p
cG1hcCAxCi0jZW5kaWYKLQotLyogR0xfT0VTX2ZyYWdtZW50X3ByZWNpc2lvbl9oaWdoICovCi0j
aWZuZGVmIEdMX09FU19mcmFnbWVudF9wcmVjaXNpb25faGlnaAotI2RlZmluZSBHTF9PRVNfZnJh
Z21lbnRfcHJlY2lzaW9uX2hpZ2ggMQotI2VuZGlmCi0KLS8qIEdMX09FU19nZXRfcHJvZ3JhbV9i
aW5hcnkgKi8KLSNpZm5kZWYgR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeQotI2RlZmluZSBHTF9P
RVNfZ2V0X3Byb2dyYW1fYmluYXJ5IDEKLSNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQcm9ncmFtQmluYXJ5T0VTIChHTHVpbnQgcHJv
Z3JhbSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMZW51bSAqYmluYXJ5Rm9y
bWF0LCBHTHZvaWQgKmJpbmFyeSk7Ci1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xQcm9n
cmFtQmluYXJ5T0VTIChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1hdCwgY29uc3Qg
R0x2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0aCk7Ci0jZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMR0VUUFJPR1JBTUJJTkFSWU9FU1BST0MpIChHTHVpbnQgcHJvZ3JhbSwg
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMZW51bSAqYmluYXJ5Rm9ybWF0LCBH
THZvaWQgKmJpbmFyeSk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBST0dSQU1C
SU5BUllPRVNQUk9DKSAoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlGb3JtYXQsIGNvbnN0
IEdMdm9pZCAqYmluYXJ5LCBHTGludCBsZW5ndGgpOwotI2VuZGlmCi0KLS8qIEdMX09FU19tYXBi
dWZmZXIgKi8KLSNpZm5kZWYgR0xfT0VTX21hcGJ1ZmZlcgotI2RlZmluZSBHTF9PRVNfbWFwYnVm
ZmVyIDEKLSNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9BUElDQUxMIHZvaWQqIEdMX0FQ
SUVOVFJZIGdsTWFwQnVmZmVyT0VTIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYWNjZXNzKTsKLUdM
X0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZIGdsVW5tYXBCdWZmZXJPRVMgKEdMZW51bSB0
YXJnZXQpOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0QnVmZmVyUG9pbnRlcnZP
RVMgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcGFyYW1zKTsKLSNlbmRp
ZgotdHlwZWRlZiB2b2lkKiAoR0xfQVBJRU5UUllQIFBGTkdMTUFQQlVGRkVST0VTUFJPQykgKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhY2Nlc3MpOwotdHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVO
VFJZUCBQRk5HTFVOTUFQQlVGRkVST0VTUFJPQykgKEdMZW51bSB0YXJnZXQpOwotdHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRCVUZGRVJQT0lOVEVSVk9FU1BST0MpIChHTGVudW0g
dGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBhcmFtcyk7Ci0jZW5kaWYKLQotLyogR0xf
T0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICovCi0jaWZuZGVmIEdMX09FU19wYWNrZWRfZGVwdGhf
c3RlbmNpbAotI2RlZmluZSBHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgMQotI2VuZGlmCi0K
LS8qIEdMX09FU19yZ2I4X3JnYmE4ICovCi0jaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4Ci0jZGVm
aW5lIEdMX09FU19yZ2I4X3JnYmE4IDEKLSNlbmRpZgotCi0vKiBHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgKi8KLSNpZm5kZWYgR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCi0jZGVmaW5l
IEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAxCi0jZW5kaWYKLQotLyogR0xfT0VTX3N0ZW5j
aWwxICovCi0jaWZuZGVmIEdMX09FU19zdGVuY2lsMQotI2RlZmluZSBHTF9PRVNfc3RlbmNpbDEg
MQotI2VuZGlmCi0KLS8qIEdMX09FU19zdGVuY2lsNCAqLwotI2lmbmRlZiBHTF9PRVNfc3RlbmNp
bDQKLSNkZWZpbmUgR0xfT0VTX3N0ZW5jaWw0IDEKLSNlbmRpZgotCi0vKiBHTF9PRVNfdGV4dHVy
ZV8zRCAqLwotI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV8zRAotI2RlZmluZSBHTF9PRVNfdGV4dHVy
ZV8zRCAxCi0jaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsVGV4SW1hZ2UzRE9FUyAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgsIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCogcGl4ZWxzKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFRleFN1YkltYWdl
M0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4
ZWxzKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbENvcHlUZXhTdWJJbWFnZTNET0VT
IChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRleElt
YWdlM0RPRVMgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBi
b3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOwotR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlM0RPRVMgKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7Ci1HTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1ZmZlclRleHR1cmUzRE9FUyAoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0
dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgem9mZnNldCk7Ci0jZW5kaWYKLXR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMVEVYSU1BR0UzRE9FU1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOwotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xURVhTVUJJTUFHRTNET0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMQ09QWVRFWFNVQklNQUdFM0RPRVNQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLXR5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMQ09NUFJFU1NFRFRFWElNQUdFM0RPRVNQUk9DKSAoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNp
emUsIGNvbnN0IEdMdm9pZCogZGF0YSk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TENPTVBSRVNTRURURVhTVUJJTUFHRTNET0VTUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTNET0VTKSAoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBs
ZXZlbCwgR0xpbnQgem9mZnNldCk7Ci0jZW5kaWYKLQotLyogR0xfT0VTX3RleHR1cmVfZmxvYXQg
Ki8KLSNpZm5kZWYgR0xfT0VTX3RleHR1cmVfZmxvYXQKLSNkZWZpbmUgR0xfT0VTX3RleHR1cmVf
ZmxvYXQgMQotI2VuZGlmCi0KLS8qIEdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciAqLwotI2lm
bmRlZiBHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIKLSNkZWZpbmUgR0xfT0VTX3RleHR1cmVf
ZmxvYXRfbGluZWFyIDEKLSNlbmRpZgotCi0vKiBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0ICov
Ci0jaWZuZGVmIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQKLSNkZWZpbmUgR0xfT0VTX3RleHR1
cmVfaGFsZl9mbG9hdCAxCi0jZW5kaWYKLQotLyogR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9s
aW5lYXIgKi8KLSNpZm5kZWYgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIKLSNkZWZp
bmUgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIgMQotI2VuZGlmCi0KLS8qIEdMX09F
U190ZXh0dXJlX25wb3QgKi8KLSNpZm5kZWYgR0xfT0VTX3RleHR1cmVfbnBvdAotI2RlZmluZSBH
TF9PRVNfdGV4dHVyZV9ucG90IDEKLSNlbmRpZgotCi0vKiBHTF9PRVNfdmVydGV4X2FycmF5X29i
amVjdCAqLwotI2lmbmRlZiBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAotI2RlZmluZSBHTF9P
RVNfdmVydGV4X2FycmF5X29iamVjdCAxCi0jaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwotR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQmluZFZlcnRleEFycmF5T0VTIChHTHVpbnQgYXJy
YXkpOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlVmVydGV4QXJyYXlzT0VT
IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqYXJyYXlzKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbEdlblZlcnRleEFycmF5c09FUyAoR0xzaXplaSBuLCBHTHVpbnQgKmFycmF5cyk7
Ci1HTF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRSWSBnbElzVmVydGV4QXJyYXlPRVMgKEdM
dWludCBhcnJheSk7Ci0jZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQklO
RFZFUlRFWEFSUkFZT0VTUFJPQykgKEdMdWludCBhcnJheSk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTERFTEVURVZFUlRFWEFSUkFZU09FU1BST0MpIChHTHNpemVpIG4sIGNvbnN0
IEdMdWludCAqYXJyYXlzKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VOVkVS
VEVYQVJSQVlTT0VTUFJPQykgKEdMc2l6ZWkgbiwgR0x1aW50ICphcnJheXMpOwotdHlwZWRlZiBH
TGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DKSAoR0x1aW50
IGFycmF5KTsKLSNlbmRpZgotCi0vKiBHTF9PRVNfdmVydGV4X2hhbGZfZmxvYXQgKi8KLSNpZm5k
ZWYgR0xfT0VTX3ZlcnRleF9oYWxmX2Zsb2F0Ci0jZGVmaW5lIEdMX09FU192ZXJ0ZXhfaGFsZl9m
bG9hdCAxCi0jZW5kaWYKLQotLyogR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEwXzIgKi8KLSNp
Zm5kZWYgR0xfT0VTX3ZlcnRleF90eXBlXzEwXzEwXzEwXzIKLSNkZWZpbmUgR0xfT0VTX3ZlcnRl
eF90eXBlXzEwXzEwXzEwXzIgMQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgotICogQU1E
IGV4dGVuc2lvbiBmdW5jdGlvbnMKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogR0xfQU1EX2Nv
bXByZXNzZWRfM0RDX3RleHR1cmUgKi8KLSNpZm5kZWYgR0xfQU1EX2NvbXByZXNzZWRfM0RDX3Rl
eHR1cmUKLSNkZWZpbmUgR0xfQU1EX2NvbXByZXNzZWRfM0RDX3RleHR1cmUgMQotI2VuZGlmCi0K
LS8qIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlICovCi0jaWZuZGVmIEdMX0FNRF9jb21w
cmVzc2VkX0FUQ190ZXh0dXJlCi0jZGVmaW5lIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJl
IDEKLSNlbmRpZgotCi0vKiBBTURfcGVyZm9ybWFuY2VfbW9uaXRvciAqLwotI2lmbmRlZiBHTF9B
TURfcGVyZm9ybWFuY2VfbW9uaXRvcgotI2RlZmluZSBHTF9BTURfcGVyZm9ybWFuY2VfbW9uaXRv
ciAxCi0jaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsR2V0UGVyZk1vbml0b3JHcm91cHNBTUQgKEdMaW50ICpudW1Hcm91cHMsIEdMc2l6ZWkg
Z3JvdXBzU2l6ZSwgR0x1aW50ICpncm91cHMpOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsR2V0UGVyZk1vbml0b3JDb3VudGVyc0FNRCAoR0x1aW50IGdyb3VwLCBHTGludCAqbnVtQ291
bnRlcnMsIEdMaW50ICptYXhBY3RpdmVDb3VudGVycywgR0xzaXplaSBjb3VudGVyU2l6ZSwgR0x1
aW50ICpjb3VudGVycyk7Ci1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQZXJmTW9u
aXRvckdyb3VwU3RyaW5nQU1EIChHTHVpbnQgZ3JvdXAsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGNoYXIgKmdyb3VwU3RyaW5nKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElF
TlRSWSBnbEdldFBlcmZNb25pdG9yQ291bnRlclN0cmluZ0FNRCAoR0x1aW50IGdyb3VwLCBHTHVp
bnQgY291bnRlciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqY291
bnRlclN0cmluZyk7Ci1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQZXJmTW9uaXRv
ckNvdW50ZXJJbmZvQU1EIChHTHVpbnQgZ3JvdXAsIEdMdWludCBjb3VudGVyLCBHTGVudW0gcG5h
bWUsIEdMdm9pZCAqZGF0YSk7Ci1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZW5QZXJm
TW9uaXRvcnNBTUQgKEdMc2l6ZWkgbiwgR0x1aW50ICptb25pdG9ycyk7Ci1HTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xEZWxldGVQZXJmTW9uaXRvcnNBTUQgKEdMc2l6ZWkgbiwgR0x1aW50
ICptb25pdG9ycyk7Ci1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xTZWxlY3RQZXJmTW9u
aXRvckNvdW50ZXJzQU1EIChHTHVpbnQgbW9uaXRvciwgR0xib29sZWFuIGVuYWJsZSwgR0x1aW50
IGdyb3VwLCBHTGludCBudW1Db3VudGVycywgR0x1aW50ICpjb3VudGVyc0xpc3QpOwotR0xfQVBJ
Q0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQmVnaW5QZXJmTW9uaXRvckFNRCAoR0x1aW50IG1vbml0
b3IpOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRW5kUGVyZk1vbml0b3JBTUQgKEdM
dWludCBtb25pdG9yKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFBlcmZNb25p
dG9yQ291bnRlckRhdGFBTUQgKEdMdWludCBtb25pdG9yLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkg
ZGF0YVNpemUsIEdMdWludCAqZGF0YSwgR0xpbnQgKmJ5dGVzV3JpdHRlbik7Ci0jZW5kaWYKLXR5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUEVSRk1PTklUT1JHUk9VUFNBTURQUk9D
KSAoR0xpbnQgKm51bUdyb3VwcywgR0xzaXplaSBncm91cHNTaXplLCBHTHVpbnQgKmdyb3Vwcyk7
Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNT05JVE9SQ09VTlRFUlNB
TURQUk9DKSAoR0x1aW50IGdyb3VwLCBHTGludCAqbnVtQ291bnRlcnMsIEdMaW50ICptYXhBY3Rp
dmVDb3VudGVycywgR0xzaXplaSBjb3VudGVyU2l6ZSwgR0x1aW50ICpjb3VudGVycyk7Ci10eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNT05JVE9SR1JPVVBTVFJJTkdBTURQ
Uk9DKSAoR0x1aW50IGdyb3VwLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xj
aGFyICpncm91cFN0cmluZyk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBF
UkZNT05JVE9SQ09VTlRFUlNUUklOR0FNRFBST0MpIChHTHVpbnQgZ3JvdXAsIEdMdWludCBjb3Vu
dGVyLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpjb3VudGVyU3Ry
aW5nKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUEVSRk1PTklUT1JDT1VO
VEVSSU5GT0FNRFBST0MpIChHTHVpbnQgZ3JvdXAsIEdMdWludCBjb3VudGVyLCBHTGVudW0gcG5h
bWUsIEdMdm9pZCAqZGF0YSk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFTlBF
UkZNT05JVE9SU0FNRFBST0MpIChHTHNpemVpIG4sIEdMdWludCAqbW9uaXRvcnMpOwotdHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xERUxFVEVQRVJGTU9OSVRPUlNBTURQUk9DKSAoR0xz
aXplaSBuLCBHTHVpbnQgKm1vbml0b3JzKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMU0VMRUNUUEVSRk1PTklUT1JDT1VOVEVSU0FNRFBST0MpIChHTHVpbnQgbW9uaXRvciwgR0xi
b29sZWFuIGVuYWJsZSwgR0x1aW50IGdyb3VwLCBHTGludCBudW1Db3VudGVycywgR0x1aW50ICpj
b3VudGVyc0xpc3QpOwotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xCRUdJTlBFUkZN
T05JVE9SQU1EUFJPQykgKEdMdWludCBtb25pdG9yKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMRU5EUEVSRk1PTklUT1JBTURQUk9DKSAoR0x1aW50IG1vbml0b3IpOwotdHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQRVJGTU9OSVRPUkNPVU5URVJEQVRBQU1EUFJP
QykgKEdMdWludCBtb25pdG9yLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgZGF0YVNpemUsIEdMdWlu
dCAqZGF0YSwgR0xpbnQgKmJ5dGVzV3JpdHRlbik7Ci0jZW5kaWYKLQotLyogR0xfQU1EX3Byb2dy
YW1fYmluYXJ5X1o0MDAgKi8KLSNpZm5kZWYgR0xfQU1EX3Byb2dyYW1fYmluYXJ5X1o0MDAKLSNk
ZWZpbmUgR0xfQU1EX3Byb2dyYW1fYmluYXJ5X1o0MDAgMQotI2VuZGlmCi0KLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKgotICogRVhUIGV4dGVuc2lvbiBmdW5jdGlvbnMKLSAqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
LQotLyogR0xfRVhUX2JsZW5kX21pbm1heCAqLwotI2lmbmRlZiBHTF9FWFRfYmxlbmRfbWlubWF4
Ci0jZGVmaW5lIEdMX0VYVF9ibGVuZF9taW5tYXggMQotI2VuZGlmCi0KLS8qIEdMX0VYVF9kaXNj
YXJkX2ZyYW1lYnVmZmVyICovCi0jaWZuZGVmIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyCi0j
ZGVmaW5lIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyIDEKLSNpZmRlZiBHTF9HTEVYVF9QUk9U
T1RZUEVTCi1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEaXNjYXJkRnJhbWVidWZmZXJF
WFQgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSAq
YXR0YWNobWVudHMpOwotI2VuZGlmCi10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERJ
U0NBUkRGUkFNRUJVRkZFUkVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFj
aG1lbnRzLCBjb25zdCBHTGVudW0gKmF0dGFjaG1lbnRzKTsKLSNlbmRpZgotCi0jaWZuZGVmIEdM
X0VYVF9tdWx0aV9kcmF3X2FycmF5cwotI2RlZmluZSBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMg
MQotI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbE11bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBHTGludCAqLCBHTHNpemVpICosIEdMc2l6
ZWkpOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3RWxlbWVudHNFWFQg
KEdMZW51bSwgY29uc3QgR0xzaXplaSAqLCBHTGVudW0sIGNvbnN0IEdMdm9pZCogKiwgR0xzaXpl
aSk7Ci0jZW5kaWYgLyogR0xfR0xFWFRfUFJPVE9UWVBFUyAqLwotdHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xNVUxUSURSQVdBUlJBWVNFWFRQUk9DKSAoR0xlbnVtIG1vZGUsIEdMaW50
ICpmaXJzdCwgR0xzaXplaSAqY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKLXR5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMTVVMVElEUkFXRUxFTUVOVFNFWFRQUk9DKSAoR0xlbnVtIG1v
ZGUsIGNvbnN0IEdMc2l6ZWkgKmNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiAqaW5k
aWNlcywgR0xzaXplaSBwcmltY291bnQpOwotI2VuZGlmCi0KLS8qIEdMX0VYVF9yZWFkX2Zvcm1h
dF9iZ3JhICovCi0jaWZuZGVmIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhCi0jZGVmaW5lIEdMX0VY
VF9yZWFkX2Zvcm1hdF9iZ3JhIDEKLSNlbmRpZgotCi0vKiBHTF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMgKi8KLSNpZm5kZWYgR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
Ci0jZGVmaW5lIEdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyAxCi0jZW5kaWYKLQot
LyogR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICovCi0jaWZuZGVmIEdMX0VYVF90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OAotI2RlZmluZSBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4
ODggMQotI2VuZGlmCi0KLS8qIEdMX0VYVF90ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYgKi8K
LSNpZm5kZWYgR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEwX1JFVgotI2RlZmluZSBHTF9F
WFRfdGV4dHVyZV90eXBlXzJfMTBfMTBfMTBfUkVWIDEKLSNlbmRpZgotCi0vKiBHTF9FWFRfdGV4
dHVyZV9jb21wcmVzc2lvbl9keHQxICovCi0jaWZuZGVmIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNz
aW9uX2R4dDEKLSNkZWZpbmUgR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAxCi0jZW5k
aWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCi0gKiBJTUcgZXh0ZW5zaW9uIGZ1bmN0aW9ucwotICot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwotCi0vKiBHTF9JTUdfcHJvZ3JhbV9iaW5hcnkgKi8KLSNpZm5kZWYg
R0xfSU1HX3Byb2dyYW1fYmluYXJ5Ci0jZGVmaW5lIEdMX0lNR19wcm9ncmFtX2JpbmFyeSAxCi0j
ZW5kaWYKLQotLyogR0xfSU1HX3JlYWRfZm9ybWF0ICovCi0jaWZuZGVmIEdMX0lNR19yZWFkX2Zv
cm1hdAotI2RlZmluZSBHTF9JTUdfcmVhZF9mb3JtYXQgMQotI2VuZGlmCi0KLS8qIEdMX0lNR19z
aGFkZXJfYmluYXJ5ICovCi0jaWZuZGVmIEdMX0lNR19zaGFkZXJfYmluYXJ5Ci0jZGVmaW5lIEdM
X0lNR19zaGFkZXJfYmluYXJ5IDEKLSNlbmRpZgotCi0vKiBHTF9JTUdfdGV4dHVyZV9jb21wcmVz
c2lvbl9wdnJ0YyAqLwotI2lmbmRlZiBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0Ywot
I2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAxCi0jZW5kaWYKLQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qCi0gKiBOViBleHRlbnNpb24gZnVuY3Rpb25zCi0gKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCi0KLS8qIEdMX05WX2ZlbmNlICovCi0jaWZuZGVmIEdMX05WX2ZlbmNlCi0jZGVmaW5l
IEdMX05WX2ZlbmNlIDEKLSNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xEZWxldGVGZW5jZXNOViAoR0xzaXplaSwgY29uc3QgR0x1aW50ICop
OwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2VuRmVuY2VzTlYgKEdMc2l6ZWksIEdM
dWludCAqKTsKLUdMX0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZIGdsSXNGZW5jZU5WIChH
THVpbnQpOwotR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xUZXN0RmVuY2VOViAo
R0x1aW50KTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldEZlbmNlaXZOViAoR0x1
aW50LCBHTGVudW0sIEdMaW50ICopOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRmlu
aXNoRmVuY2VOViAoR0x1aW50KTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFNldEZl
bmNlTlYgKEdMdWludCwgR0xlbnVtKTsKLSNlbmRpZgotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xERUxFVEVGRU5DRVNOVlBST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCAqZmVu
Y2VzKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VORkVOQ0VTTlZQUk9DKSAo
R0xzaXplaSBuLCBHTHVpbnQgKmZlbmNlcyk7Ci10eXBlZGVmIEdMYm9vbGVhbiAoR0xfQVBJRU5U
UllQIFBGTkdMSVNGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSk7Ci10eXBlZGVmIEdMYm9vbGVh
biAoR0xfQVBJRU5UUllQIFBGTkdMVEVTVEZFTkNFTlZQUk9DKSAoR0x1aW50IGZlbmNlKTsKLXR5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VURkVOQ0VJVk5WUFJPQykgKEdMdWludCBm
ZW5jZSwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMRklOSVNIRkVOQ0VOVlBST0MpIChHTHVpbnQgZmVuY2UpOwotdHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTRVRGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSwgR0xl
bnVtIGNvbmRpdGlvbik7Ci0jZW5kaWYKLQotLyogR0xfTlZfY292ZXJhZ2Vfc2FtcGxlICovCi0j
aWZuZGVmIEdMX05WX2NvdmVyYWdlX3NhbXBsZQotI2RlZmluZSBHTF9OVl9jb3ZlcmFnZV9zYW1w
bGUgMQotI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElF
TlRSWSBnbENvdmVyYWdlTWFza05WIChHTGJvb2xlYW4gbWFzayk7Ci1HTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xDb3ZlcmFnZU9wZXJhdGlvbk5WIChHTGVudW0gb3BlcmF0aW9uKTsKLSNl
bmRpZgotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xDT1ZFUkFHRU1BU0tOVlBST0Mp
IChHTGJvb2xlYW4gbWFzayk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPVkVS
QUdFT1BFUkFUSU9OTlZQUk9DKSAoR0xlbnVtIG9wZXJhdGlvbik7Ci0jZW5kaWYKLQotLyogR0xf
TlZfZGVwdGhfbm9ubGluZWFyICovCi0jaWZuZGVmIEdMX05WX2RlcHRoX25vbmxpbmVhcgotI2Rl
ZmluZSBHTF9OVl9kZXB0aF9ub25saW5lYXIgMQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KgotICogUUNPTSBleHRlbnNpb24gZnVuY3Rpb25zCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8q
IEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgKi8KLSNpZm5kZWYgR0xfUUNPTV9kcml2ZXJfY29udHJv
bAotI2RlZmluZSBHTF9RQ09NX2RyaXZlcl9jb250cm9sIDEKLSNpZmRlZiBHTF9HTEVYVF9QUk9U
T1RZUEVTCi1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXREcml2ZXJDb250cm9sc1FD
T00gKEdMaW50ICpudW0sIEdMc2l6ZWkgc2l6ZSwgR0x1aW50ICpkcml2ZXJDb250cm9scyk7Ci1H
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXREcml2ZXJDb250cm9sU3RyaW5nUUNPTSAo
R0x1aW50IGRyaXZlckNvbnRyb2wsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGNoYXIgKmRyaXZlckNvbnRyb2xTdHJpbmcpOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsRW5hYmxlRHJpdmVyQ29udHJvbFFDT00gKEdMdWludCBkcml2ZXJDb250cm9sKTsKLUdMX0FQ
SUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERpc2FibGVEcml2ZXJDb250cm9sUUNPTSAoR0x1aW50
IGRyaXZlckNvbnRyb2wpOwotI2VuZGlmCi10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEdFVERSSVZFUkNPTlRST0xTUUNPTVBST0MpIChHTGludCAqbnVtLCBHTHNpemVpIHNpemUsIEdM
dWludCAqZHJpdmVyQ29udHJvbHMpOwotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xH
RVREUklWRVJDT05UUk9MU1RSSU5HUUNPTVBST0MpIChHTHVpbnQgZHJpdmVyQ29udHJvbCwgR0xz
aXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqZHJpdmVyQ29udHJvbFN0cmlu
Zyk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVOQUJMRURSSVZFUkNPTlRST0xR
Q09NUFJPQykgKEdMdWludCBkcml2ZXJDb250cm9sKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMRElTQUJMRURSSVZFUkNPTlRST0xRQ09NUFJPQykgKEdMdWludCBkcml2ZXJDb250
cm9sKTsKLSNlbmRpZgotCi0vKiBHTF9RQ09NX2V4dGVuZGVkX2dldCAqLwotI2lmbmRlZiBHTF9R
Q09NX2V4dGVuZGVkX2dldAotI2RlZmluZSBHTF9RQ09NX2V4dGVuZGVkX2dldCAxCi0jaWZkZWYg
R0xfR0xFWFRfUFJPVE9UWVBFUwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0
VGV4dHVyZXNRQ09NIChHTHVpbnQgKnRleHR1cmVzLCBHTGludCBtYXhUZXh0dXJlcywgR0xpbnQg
Km51bVRleHR1cmVzKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldEJ1ZmZl
cnNRQ09NIChHTHVpbnQgKmJ1ZmZlcnMsIEdMaW50IG1heEJ1ZmZlcnMsIEdMaW50ICpudW1CdWZm
ZXJzKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldFJlbmRlcmJ1ZmZlcnNR
Q09NIChHTHVpbnQgKnJlbmRlcmJ1ZmZlcnMsIEdMaW50IG1heFJlbmRlcmJ1ZmZlcnMsIEdMaW50
ICpudW1SZW5kZXJidWZmZXJzKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdl
dEZyYW1lYnVmZmVyc1FDT00gKEdMdWludCAqZnJhbWVidWZmZXJzLCBHTGludCBtYXhGcmFtZWJ1
ZmZlcnMsIEdMaW50ICpudW1GcmFtZWJ1ZmZlcnMpOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsRXh0R2V0VGV4TGV2ZWxQYXJhbWV0ZXJpdlFDT00gKEdMdWludCB0ZXh0dXJlLCBHTGVu
dW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Ci1HTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xFeHRUZXhPYmplY3RTdGF0ZU92ZXJyaWRlaVFDT00g
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwotR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsRXh0R2V0VGV4U3ViSW1hZ2VRQ09NIChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTHZvaWQgKnRleGVscyk7Ci1HTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xFeHRHZXRCdWZmZXJQb2ludGVydlFDT00gKEdMZW51bSB0YXJnZXQsIEdMdm9pZCAq
KnBhcmFtcyk7Ci0jZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VU
VEVYVFVSRVNRQ09NUFJPQykgKEdMdWludCAqdGV4dHVyZXMsIEdMaW50IG1heFRleHR1cmVzLCBH
TGludCAqbnVtVGV4dHVyZXMpOwotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRH
RVRCVUZGRVJTUUNPTVBST0MpIChHTHVpbnQgKmJ1ZmZlcnMsIEdMaW50IG1heEJ1ZmZlcnMsIEdM
aW50ICpudW1CdWZmZXJzKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VU
UkVOREVSQlVGRkVSU1FDT01QUk9DKSAoR0x1aW50ICpyZW5kZXJidWZmZXJzLCBHTGludCBtYXhS
ZW5kZXJidWZmZXJzLCBHTGludCAqbnVtUmVuZGVyYnVmZmVycyk7Ci10eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTEVYVEdFVEZSQU1FQlVGRkVSU1FDT01QUk9DKSAoR0x1aW50ICpmcmFt
ZWJ1ZmZlcnMsIEdMaW50IG1heEZyYW1lYnVmZmVycywgR0xpbnQgKm51bUZyYW1lYnVmZmVycyk7
Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVYVEdFVFRFWExFVkVMUEFSQU1FVEVS
SVZRQ09NUFJPQykgKEdMdWludCB0ZXh0dXJlLCBHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEVYVFRFWE9CSkVDVFNUQVRFT1ZFUlJJREVJUUNPTVBST0MpIChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMRVhUR0VUVEVYU1VCSU1BR0VRQ09NUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMdm9pZCAqdGV4ZWxzKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
RVhUR0VUQlVGRkVSUE9JTlRFUlZRQ09NUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMdm9pZCAqKnBh
cmFtcyk7Ci0jZW5kaWYKLQotLyogR0xfUUNPTV9leHRlbmRlZF9nZXQyICovCi0jaWZuZGVmIEdM
X1FDT01fZXh0ZW5kZWRfZ2V0MgotI2RlZmluZSBHTF9RQ09NX2V4dGVuZGVkX2dldDIgMQotI2lm
ZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4
dEdldFNoYWRlcnNRQ09NIChHTHVpbnQgKnNoYWRlcnMsIEdMaW50IG1heFNoYWRlcnMsIEdMaW50
ICpudW1TaGFkZXJzKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEV4dEdldFByb2dy
YW1zUUNPTSAoR0x1aW50ICpwcm9ncmFtcywgR0xpbnQgbWF4UHJvZ3JhbXMsIEdMaW50ICpudW1Q
cm9ncmFtcyk7Ci1HTF9BUElDQUxMIEdMYm9vbGVhbiBHTF9BUElFTlRSWSBnbEV4dElzUHJvZ3Jh
bUJpbmFyeVFDT00gKEdMdWludCBwcm9ncmFtKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEV4dEdldFByb2dyYW1CaW5hcnlTb3VyY2VRQ09NIChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVt
IHNoYWRlcnR5cGUsIEdMY2hhciAqc291cmNlLCBHTGludCAqbGVuZ3RoKTsKLSNlbmRpZgotdHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFWFRHRVRTSEFERVJTUUNPTVBST0MpIChHTHVp
bnQgKnNoYWRlcnMsIEdMaW50IG1heFNoYWRlcnMsIEdMaW50ICpudW1TaGFkZXJzKTsKLXR5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRVhUR0VUUFJPR1JBTVNRQ09NUFJPQykgKEdMdWlu
dCAqcHJvZ3JhbXMsIEdMaW50IG1heFByb2dyYW1zLCBHTGludCAqbnVtUHJvZ3JhbXMpOwotdHlw
ZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTEVYVElTUFJPR1JBTUJJTkFSWVFDT01Q
Uk9DKSAoR0x1aW50IHByb2dyYW0pOwotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xF
WFRHRVRQUk9HUkFNQklOQVJZU09VUkNFUUNPTVBST0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVt
IHNoYWRlcnR5cGUsIEdMY2hhciAqc291cmNlLCBHTGludCAqbGVuZ3RoKTsKLSNlbmRpZgotCi0v
KiBHTF9RQ09NX3BlcmZtb25fZ2xvYmFsX21vZGUgKi8KLSNpZm5kZWYgR0xfUUNPTV9wZXJmbW9u
X2dsb2JhbF9tb2RlCi0jZGVmaW5lIEdMX1FDT01fcGVyZm1vbl9nbG9iYWxfbW9kZSAxCi0jZW5k
aWYKLQotLyogR0xfUUNPTV93cml0ZW9ubHlfcmVuZGVyaW5nICovCi0jaWZuZGVmIEdMX1FDT01f
d3JpdGVvbmx5X3JlbmRlcmluZwotI2RlZmluZSBHTF9RQ09NX3dyaXRlb25seV9yZW5kZXJpbmcg
MQotI2VuZGlmCi0KLS8qIEdMX1FDT01fdGlsZWRfcmVuZGVyaW5nICovCi0jaWZuZGVmIEdMX1FD
T01fdGlsZWRfcmVuZGVyaW5nCi0jZGVmaW5lIEdMX1FDT01fdGlsZWRfcmVuZGVyaW5nIDEKLSNp
ZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xT
dGFydFRpbGluZ1FDT00gKEdMdWludCB4LCBHTHVpbnQgeSwgR0x1aW50IHdpZHRoLCBHTHVpbnQg
aGVpZ2h0LCBHTGJpdGZpZWxkIHByZXNlcnZlTWFzayk7Ci1HTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xFbmRUaWxpbmdRQ09NIChHTGJpdGZpZWxkIHByZXNlcnZlTWFzayk7Ci0jZW5kaWYK
LXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMU1RBUlRUSUxJTkdRQ09NUFJPQykgKEdM
dWludCB4LCBHTHVpbnQgeSwgR0x1aW50IHdpZHRoLCBHTHVpbnQgaGVpZ2h0LCBHTGJpdGZpZWxk
IHByZXNlcnZlTWFzayk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVORFRJTElO
R1FDT01QUk9DKSAoR0xiaXRmaWVsZCBwcmVzZXJ2ZU1hc2spOwotI2VuZGlmCi0KLS8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKgotICogQU5HTEUgZXh0ZW5zaW9uIGZ1bmN0aW9ucwotICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwotCi0vKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICovCi0jaWZuZGVmIEdMX0FOR0xF
X2ZyYW1lYnVmZmVyX2JsaXQKLSNkZWZpbmUgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAxCi0j
aWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGds
QmxpdEZyYW1lYnVmZmVyQU5HTEUgKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3Jj
WDEsIEdMaW50IHNyY1kxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50
IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcik7Ci0jZW5kaWYKLXR5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMQkxJVEZSQU1FQlVGRkVSQU5HTEVQUk9DKSAoR0xpbnQgc3Jj
WDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgw
LCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1h
c2ssIEdMZW51bSBmaWx0ZXIpOwotI2VuZGlmCi0KLS8qIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlICovCi0jaWZuZGVmIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCi0j
ZGVmaW5lIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIDEKLSNpZmRlZiBHTF9HTEVY
VF9QUk9UT1RZUEVTCi1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGVBTkdMRSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKLSNlbmRpZgotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJC
VUZGRVJTVE9SQUdFTVVMVElTQU1QTEVBTkdMRVBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVp
IHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwot
fQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX2dsMmV4dF9oXyAqLwpJbmRleDogQU5HTEUvaW5jbHVk
ZS9HTEVTMi9nbDJwbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvR0xFUzIv
Z2wycGxhdGZvcm0uaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9pbmNsdWRlL0dMRVMyL2ds
MnBsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzAgKzAsMCBAQAotI2lmbmRlZiBfX2ds
MnBsYXRmb3JtX2hfCi0jZGVmaW5lIF9fZ2wycGxhdGZvcm1faF8KLQotLyogJFJldmlzaW9uOiAx
MDYwMiAkIG9uICREYXRlOjogMjAxMC0wMy0wNCAyMjozNTozNCAtMDgwMCAjJCAqLwotCi0vKgot
ICogVGhpcyBkb2N1bWVudCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0dJIEZyZWUgU29mdHdhcmUg
QiBMaWNlbnNlIFZlcnNpb24KLSAqIDIuMC4gRm9yIGRldGFpbHMsIHNlZSBodHRwOi8vb3NzLnNn
aS5jb20vcHJvamVjdHMvRnJlZUIvIC4KLSAqLwotCi0vKiBQbGF0Zm9ybS1zcGVjaWZpYyB0eXBl
cyBhbmQgZGVmaW5pdGlvbnMgZm9yIE9wZW5HTCBFUyAyLlggIGdsMi5oCi0gKgotICogQWRvcHRl
cnMgbWF5IG1vZGlmeSBraHJwbGF0Zm9ybS5oIGFuZCB0aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBw
bGF0Zm9ybS4KLSAqIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBzdWJtaXQgYWxsIG1vZGlmaWNhdGlv
bnMgdG8gdGhlIEtocm9ub3MgZ3JvdXAgc28gdGhhdAotICogdGhleSBjYW4gYmUgaW5jbHVkZWQg
aW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSBzdWJtaXQgY2hhbmdlcwot
ICogYnkgc2VuZGluZyB0aGVtIHRvIHRoZSBwdWJsaWMgS2hyb25vcyBCdWd6aWxsYSAoaHR0cDov
L2tocm9ub3Mub3JnL2J1Z3ppbGxhKQotICogYnkgZmlsaW5nIGEgYnVnIGFnYWluc3QgcHJvZHVj
dCAiT3BlbkdMLUVTIiBjb21wb25lbnQgIlJlZ2lzdHJ5Ii4KLSAqLwotCi0jaW5jbHVkZSA8S0hS
L2tocnBsYXRmb3JtLmg+Ci0KLSNpZm5kZWYgR0xfQVBJQ0FMTAotI2RlZmluZSBHTF9BUElDQUxM
ICBLSFJPTk9TX0FQSUNBTEwKLSNlbmRpZgotCi0jaWZuZGVmIEdMX0FQSUVOVFJZCi0jZGVmaW5l
IEdMX0FQSUVOVFJZIEtIUk9OT1NfQVBJRU5UUlkKLSNlbmRpZgotCi0jZW5kaWYgLyogX19nbDJw
bGF0Zm9ybV9oXyAqLwpJbmRleDogQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCShyZXZpc2lv
biA3NDY1OCkKKysrIEFOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTI4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0jaWZuZGVmIF9DT01Q
SUxFUl9JTlRFUkZBQ0VfSU5DTFVERURfCi0jZGVmaW5lIF9DT01QSUxFUl9JTlRFUkZBQ0VfSU5D
TFVERURfCi0KLS8vCi0vLyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZh
Y2UgYmV0d2VlbiBhbiBPR0wgZHJpdmVyCi0vLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29t
cGlsZXIuCi0vLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0v
LwotLy8gRHJpdmVyIG11c3QgY2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcgYW55
IG90aGVyCi0vLyBjb21waWxlciBvcGVyYXRpb25zLgotLy8gSWYgdGhlIGZ1bmN0aW9uIHN1Y2Nl
ZWRzLCB0aGUgcmV0dXJuIHZhbHVlIGlzIG5vbnplcm8sIGVsc2UgemVyby4KLS8vCi1pbnQgU2hJ
bml0aWFsaXplKCk7Ci0vLwotLy8gRHJpdmVyIHNob3VsZCBjYWxsIHRoaXMgYXQgc2h1dGRvd24u
Ci0vLyBJZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsIHRoZSByZXR1cm4gdmFsdWUgaXMgbm9uemVy
bywgZWxzZSB6ZXJvLgotLy8KLWludCBTaEZpbmFsaXplKCk7Ci0vLwotLy8gVHlwZXMgb2YgbGFu
Z3VhZ2VzIHRoZSBjb21waWxlciBjYW4gY29uc3VtZS4KLS8vCi10eXBlZGVmIGVudW0gewotICAg
IEVTaExhbmdWZXJ0ZXgsCi0gICAgRVNoTGFuZ0ZyYWdtZW50LAotICAgIEVTaExhbmdDb3VudCwK
LX0gRVNoTGFuZ3VhZ2U7Ci0KLS8vCi0vLyBUaGUgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiBjb21w
aWxlciBjb25mb3JtcyB0by4KLS8vIEl0IGN1cnJlbnRseSBzdXBwb3J0cyBPcGVuR0wgRVMgYW5k
IFdlYkdMIHNwZWNpZmljYXRpb25zLgotLy8KLXR5cGVkZWYgZW51bSB7Ci0gICAgRVNoU3BlY0dM
RVMyLAotICAgIEVTaFNwZWNXZWJHTCwKLX0gRVNoU3BlYzsKLQotLy8KLS8vIEltcGxlbWVudGF0
aW9uIGRlcGVuZGVudCBidWlsdC1pbiByZXNvdXJjZXMgKGNvbnN0YW50cyBhbmQgZXh0ZW5zaW9u
cykuCi0vLyBUaGUgbmFtZXMgZm9yIHRoZXNlIHJlc291cmNlcyBoYXMgYmVlbiBvYnRhaW5lZCBi
eSBzdHJpcHBpbmcgZ2xfL0dMXy4KLS8vCi10eXBlZGVmIHN0cnVjdAotewotICAgIC8vIENvbnN0
YW50cy4KLSAgICBpbnQgTWF4VmVydGV4QXR0cmliczsKLSAgICBpbnQgTWF4VmVydGV4VW5pZm9y
bVZlY3RvcnM7Ci0gICAgaW50IE1heFZhcnlpbmdWZWN0b3JzOwotICAgIGludCBNYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0czsKLSAgICBpbnQgTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0czsK
LSAgICBpbnQgTWF4VGV4dHVyZUltYWdlVW5pdHM7Ci0gICAgaW50IE1heEZyYWdtZW50VW5pZm9y
bVZlY3RvcnM7Ci0gICAgaW50IE1heERyYXdCdWZmZXJzOwotCi0gICAgLy8gRXh0ZW5zaW9ucy4K
LSAgICAvLyBTZXQgdG8gMSB0byBlbmFibGUgdGhlIGV4dGVuc2lvbiwgZWxzZSAwLgotICAgIGlu
dCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7Ci19IFRCdWlsdEluUmVzb3VyY2U7Ci0KLS8vCi0v
LyBJbml0aWFsaXplIGJ1aWx0LWluIHJlc291cmNlcyB3aXRoIG1pbmltdW0gZXhwZWN0ZWQgdmFs
dWVzLgotLy8KLXZvaWQgU2hJbml0QnVpbHRJblJlc291cmNlKFRCdWlsdEluUmVzb3VyY2UqIHJl
c291cmNlcyk7Ci0KLS8vCi0vLyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIHRoZSBjb21waWxlci4K
LS8vCi10eXBlZGVmIGVudW0gewotICAgIEVTaE9wdE5vR2VuZXJhdGlvbiwKLSAgICBFU2hPcHRO
b25lLAotICAgIEVTaE9wdFNpbXBsZSwgICAgICAgLy8gT3B0aW1pemF0aW9ucyB0aGF0IGNhbiBi
ZSBkb25lIHF1aWNrbHkKLSAgICBFU2hPcHRGdWxsLCAgICAgICAgIC8vIE9wdGltaXphdGlvbnMg
dGhhdCB3aWxsIHRha2UgbW9yZSB0aW1lCi19IEVTaE9wdGltaXphdGlvbkxldmVsOwotCi1lbnVt
IFREZWJ1Z09wdGlvbnMgewotICAgIEVEZWJ1Z09wTm9uZSAgICAgICAgICAgICAgID0gMHgwMDAs
Ci0gICAgRURlYnVnT3BJbnRlcm1lZGlhdGUgICAgICAgPSAweDAwMSwgIC8vIFdyaXRlcyBpbnRl
cm1lZGlhdGUgdHJlZSBpbnRvIGluZm8tbG9nLgotfTsKLQotLy8KLS8vIFNoSGFuZGxlIGhlbGQg
YnkgYnV0IG9wYXF1ZSB0byB0aGUgZHJpdmVyLiAgSXQgaXMgYWxsb2NhdGVkLAotLy8gbWFuYWdl
ZCwgYW5kIGRlLWFsbG9jYXRlZCBieSB0aGUgY29tcGlsZXIuIEl0J3MgY29udGVudHMgCi0vLyBh
cmUgZGVmaW5lZCBieSBhbmQgdXNlZCBieSB0aGUgY29tcGlsZXIuCi0vLwotLy8gSWYgaGFuZGxl
IGNyZWF0aW9uIGZhaWxzLCAwIHdpbGwgYmUgcmV0dXJuZWQuCi0vLwotdHlwZWRlZiB2b2lkKiBT
aEhhbmRsZTsKLQotLy8KLS8vIERyaXZlciBjYWxscyB0aGVzZSB0byBjcmVhdGUgYW5kIGRlc3Ry
b3kgY29tcGlsZXIgb2JqZWN0cy4KLS8vCi1TaEhhbmRsZSBTaENvbnN0cnVjdENvbXBpbGVyKEVT
aExhbmd1YWdlLCBFU2hTcGVjLCBjb25zdCBUQnVpbHRJblJlc291cmNlKik7Ci12b2lkIFNoRGVz
dHJ1Y3QoU2hIYW5kbGUpOwotCi0vLwotLy8gVGhlIHJldHVybiB2YWx1ZSBvZiBTaENvbXBpbGUg
aXMgYm9vbGVhbiwgaW5kaWNhdGluZwotLy8gc3VjY2VzcyBvciBmYWlsdXJlLgotLy8KLS8vIFRo
ZSBpbmZvLWxvZyBzaG91bGQgYmUgd3JpdHRlbiBieSBTaENvbXBpbGUgaW50byAKLS8vIFNoSGFu
ZGxlLCBzbyBpdCBjYW4gYW5zd2VyIGZ1dHVyZSBxdWVyaWVzLgotLy8KLWludCBTaENvbXBpbGUo
Ci0gICAgY29uc3QgU2hIYW5kbGUsCi0gICAgY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5n
c1tdLAotICAgIGNvbnN0IGludCBudW1TdHJpbmdzLAotICAgIGNvbnN0IEVTaE9wdGltaXphdGlv
bkxldmVsLAotICAgIGludCBkZWJ1Z09wdGlvbnMKLSAgICApOwotCi0vLwotLy8gQWxsIHRoZSBm
b2xsb3dpbmcgcmV0dXJuIDAgaWYgdGhlIGluZm9ybWF0aW9uIGlzIG5vdAotLy8gYXZhaWxhYmxl
IGluIHRoZSBvYmplY3QgcGFzc2VkIGRvd24sIG9yIHRoZSBvYmplY3QgaXMgYmFkLgotLy8KLWNv
bnN0IGNoYXIqIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSk7Ci1jb25zdCBjaGFyKiBTaEdl
dE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNl
bmRpZgotCi0jZW5kaWYgLy8gX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KSW5kZXg6IEFO
R0xFL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVk
ZS9LSFIva2hycGxhdGZvcm0uaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9pbmNsdWRlL0tI
Ui9raHJwbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI2OSArMCwwIEBACi0jaWZuZGVm
IF9fa2hycGxhdGZvcm1faF8KLSNkZWZpbmUgX19raHJwbGF0Zm9ybV9oXwotCi0vKgotKiogQ29w
eXJpZ2h0IChjKSAyMDA4LTIwMDkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgotKioKLSoqIFBlcm1p
c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i
dGFpbmluZyBhCi0qKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9j
dW1lbnRhdGlvbiBmaWxlcyAodGhlCi0qKiAiTWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1h
dGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLSoqIHdpdGhvdXQgbGltaXRh
dGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLSoq
IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJp
YWxzLCBhbmQgdG8KLSoqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUg
ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi0qKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnM6Ci0qKgotKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv
biBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLSoqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp
YWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KLSoqCi0qKiBUSEUgTUFURVJJQUxTIEFSRSBQ
Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotKiogRVhQUkVT
UyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT
IE9GCi0qKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFORCBOT05JTkZSSU5HRU1FTlQuCi0qKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBP
UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQotKiogQ0xBSU0sIERBTUFHRVMg
T1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKLSoq
IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O
IFdJVEggVEhFCi0qKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBU
SEUgTUFURVJJQUxTLgotKi8KLQotLyogS2hyb25vcyBwbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcyBh
bmQgZGVmaW5pdGlvbnMuCi0gKgotICogJFJldmlzaW9uOiA5MzU2ICQgb24gJERhdGU6IDIwMDkt
MTAtMjEgMDI6NTI6MjUgLTA3MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKLSAqCi0gKiBBZG9wdGVy
cyBtYXkgbW9kaWZ5IHRoaXMgZmlsZSB0byBzdWl0IHRoZWlyIHBsYXRmb3JtLiBBZG9wdGVycyBh
cmUKLSAqIGVuY291cmFnZWQgdG8gc3VibWl0IHBsYXRmb3JtIHNwZWNpZmljIG1vZGlmaWNhdGlv
bnMgdG8gdGhlIEtocm9ub3MKLSAqIGdyb3VwIHNvIHRoYXQgdGhleSBjYW4gYmUgaW5jbHVkZWQg
aW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZmlsZS4KLSAqIFBsZWFzZSBzdWJtaXQgY2hhbmdl
cyBieSBzZW5kaW5nIHRoZW0gdG8gdGhlIHB1YmxpYyBLaHJvbm9zIEJ1Z3ppbGxhCi0gKiAoaHR0
cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKSBieSBmaWxpbmcgYSBidWcgYWdhaW5zdCBwcm9kdWN0
Ci0gKiAiS2hyb25vcyAoZ2VuZXJhbCkiIGNvbXBvbmVudCAiUmVnaXN0cnkiLgotICoKLSAqIEEg
cHJlZGVmaW5lZCB0ZW1wbGF0ZSB3aGljaCBmaWxscyBpbiBzb21lIG9mIHRoZSBidWcgZmllbGRz
IGNhbiBiZQotICogcmVhY2hlZCB1c2luZyBodHRwOi8vdGlueXVybC5jb20va2hycGxhdGZvcm0t
aC1idWdyZXBvcnQsIGJ1dCB5b3UKLSAqIG11c3QgY3JlYXRlIGEgQnVnemlsbGEgbG9naW4gZmly
c3QuCi0gKgotICoKLSAqIFNlZSB0aGUgSW1wbGVtZW50ZXIncyBHdWlkZWxpbmVzIGZvciBpbmZv
cm1hdGlvbiBhYm91dCB3aGVyZSB0aGlzIGZpbGUKLSAqIHNob3VsZCBiZSBsb2NhdGVkIG9uIHlv
dXIgc3lzdGVtIGFuZCBmb3IgbW9yZSBkZXRhaWxzIG9mIGl0cyB1c2U6Ci0gKiAgICBodHRwOi8v
d3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2ltcGxlbWVudGVyc19ndWlkZS5wZGYKLSAqCi0gKiBU
aGlzIGZpbGUgc2hvdWxkIGJlIGluY2x1ZGVkIGFzCi0gKiAgICAgICAgI2luY2x1ZGUgPEtIUi9r
aHJwbGF0Zm9ybS5oPgotICogYnkgS2hyb25vcyBjbGllbnQgQVBJIGhlYWRlciBmaWxlcyB0aGF0
IHVzZSBpdHMgdHlwZXMgYW5kIGRlZmluZXMuCi0gKgotICogVGhlIHR5cGVzIGluIGtocnBsYXRm
b3JtLmggc2hvdWxkIG9ubHkgYmUgdXNlZCB0byBkZWZpbmUgQVBJLXNwZWNpZmljIHR5cGVzLgot
ICoKLSAqIFR5cGVzIGRlZmluZWQgaW4ga2hycGxhdGZvcm0uaDoKLSAqICAgIGtocm9ub3NfaW50
OF90ICAgICAgICAgICAgICBzaWduZWQgICA4ICBiaXQKLSAqICAgIGtocm9ub3NfdWludDhfdCAg
ICAgICAgICAgICB1bnNpZ25lZCA4ICBiaXQKLSAqICAgIGtocm9ub3NfaW50MTZfdCAgICAgICAg
ICAgICBzaWduZWQgICAxNiBiaXQKLSAqICAgIGtocm9ub3NfdWludDE2X3QgICAgICAgICAgICB1
bnNpZ25lZCAxNiBiaXQKLSAqICAgIGtocm9ub3NfaW50MzJfdCAgICAgICAgICAgICBzaWduZWQg
ICAzMiBiaXQKLSAqICAgIGtocm9ub3NfdWludDMyX3QgICAgICAgICAgICB1bnNpZ25lZCAzMiBi
aXQKLSAqICAgIGtocm9ub3NfaW50NjRfdCAgICAgICAgICAgICBzaWduZWQgICA2NCBiaXQKLSAq
ICAgIGtocm9ub3NfdWludDY0X3QgICAgICAgICAgICB1bnNpZ25lZCA2NCBiaXQKLSAqICAgIGto
cm9ub3NfaW50cHRyX3QgICAgICAgICAgICBzaWduZWQgICBzYW1lIG51bWJlciBvZiBiaXRzIGFz
IGEgcG9pbnRlcgotICogICAga2hyb25vc191aW50cHRyX3QgICAgICAgICAgIHVuc2lnbmVkIHNh
bWUgbnVtYmVyIG9mIGJpdHMgYXMgYSBwb2ludGVyCi0gKiAgICBraHJvbm9zX3NzaXplX3QgICAg
ICAgICAgICAgc2lnbmVkICAgc2l6ZQotICogICAga2hyb25vc191c2l6ZV90ICAgICAgICAgICAg
IHVuc2lnbmVkIHNpemUKLSAqICAgIGtocm9ub3NfZmxvYXRfdCAgICAgICAgICAgICBzaWduZWQg
ICAzMiBiaXQgZmxvYXRpbmcgcG9pbnQKLSAqICAgIGtocm9ub3NfdGltZV9uc190ICAgICAgICAg
ICB1bnNpZ25lZCA2NCBiaXQgdGltZSBpbiBuYW5vc2Vjb25kcwotICogICAga2hyb25vc191dGlt
ZV9uYW5vc2Vjb25kc190IHVuc2lnbmVkIHRpbWUgaW50ZXJ2YWwgb3IgYWJzb2x1dGUgdGltZSBp
bgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbm9zZWNvbmRz
Ci0gKiAgICBraHJvbm9zX3N0aW1lX25hbm9zZWNvbmRzX3Qgc2lnbmVkIHRpbWUgaW50ZXJ2YWwg
aW4gbmFub3NlY29uZHMKLSAqICAgIGtocm9ub3NfYm9vbGVhbl9lbnVtX3QgICAgICBlbnVtZXJh
dGVkIGJvb2xlYW4gdHlwZS4gVGhpcyBzaG91bGQKLSAqICAgICAgb25seSBiZSB1c2VkIGFzIGEg
YmFzZSB0eXBlIHdoZW4gYSBjbGllbnQgQVBJJ3MgYm9vbGVhbiB0eXBlIGlzCi0gKiAgICAgIGFu
IGVudW0uIENsaWVudCBBUElzIHdoaWNoIHVzZSBhbiBpbnRlZ2VyIG9yIG90aGVyIHR5cGUgZm9y
Ci0gKiAgICAgIGJvb2xlYW5zIGNhbm5vdCB1c2UgdGhpcyBhcyB0aGUgYmFzZSB0eXBlIGZvciB0
aGVpciBib29sZWFuLgotICoKLSAqIFRva2VucyBkZWZpbmVkIGluIGtocnBsYXRmb3JtLmg6Ci0g
KgotICogICAgS0hST05PU19GQUxTRSwgS0hST05PU19UUlVFIEVudW1lcmF0ZWQgYm9vbGVhbiBm
YWxzZS90cnVlIHZhbHVlcy4KLSAqCi0gKiAgICBLSFJPTk9TX1NVUFBPUlRfSU5UNjQgaXMgMSBp
ZiA2NCBiaXQgaW50ZWdlcnMgYXJlIHN1cHBvcnRlZDsgb3RoZXJ3aXNlIDAuCi0gKiAgICBLSFJP
Tk9TX1NVUFBPUlRfRkxPQVQgaXMgMSBpZiBmbG9hdHMgYXJlIHN1cHBvcnRlZDsgb3RoZXJ3aXNl
IDAuCi0gKgotICogQ2FsbGluZyBjb252ZW50aW9uIG1hY3JvcyBkZWZpbmVkIGluIHRoaXMgZmls
ZToKLSAqICAgIEtIUk9OT1NfQVBJQ0FMTAotICogICAgS0hST05PU19BUElFTlRSWQotICogICAg
S0hST05PU19BUElBVFRSSUJVVEVTCi0gKgotICogVGhlc2UgbWF5IGJlIHVzZWQgaW4gZnVuY3Rp
b24gcHJvdG90eXBlcyBhczoKLSAqCi0gKiAgICAgIEtIUk9OT1NfQVBJQ0FMTCB2b2lkIEtIUk9O
T1NfQVBJRU5UUlkgZnVuY25hbWUoCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgYXJnMSwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcy
KSBLSFJPTk9TX0FQSUFUVFJJQlVURVM7Ci0gKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBE
ZWZpbml0aW9uIG9mIEtIUk9OT1NfQVBJQ0FMTAotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUaGlz
IHByZWNlZGVzIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gaW4gdGhlIGZ1bmN0aW9u
IHByb3RvdHlwZS4KLSAqLwotI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1NDSVRF
Q0hfU05BUF9fKQotIyAgIGRlZmluZSBLSFJPTk9TX0FQSUNBTEwgX19kZWNsc3BlYyhkbGxpbXBv
cnQpCi0jZWxpZiBkZWZpbmVkIChfX1NZTUJJQU4zMl9fKQotIyAgIGRlZmluZSBLSFJPTk9TX0FQ
SUNBTEwgSU1QT1JUX0MKLSNlbHNlCi0jICAgZGVmaW5lIEtIUk9OT1NfQVBJQ0FMTAotI2VuZGlm
Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRGVmaW5pdGlvbiBvZiBLSFJPTk9TX0FQSUVOVFJZ
Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFRoaXMgZm9sbG93cyB0aGUgcmV0dXJuIHR5cGUgb2Yg
dGhlIGZ1bmN0aW9uICBhbmQgcHJlY2VkZXMgdGhlIGZ1bmN0aW9uCi0gKiBuYW1lIGluIHRoZSBm
dW5jdGlvbiBwcm90b3R5cGUuCi0gKi8KLSNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQo
X1dJTjMyX1dDRSkgJiYgIWRlZmluZWQoX19TQ0lURUNIX1NOQVBfXykKLSAgICAvKiBXaW4zMiBi
dXQgbm90IFdpbkNFICovCi0jICAgZGVmaW5lIEtIUk9OT1NfQVBJRU5UUlkgX19zdGRjYWxsCi0j
ZWxzZQotIyAgIGRlZmluZSBLSFJPTk9TX0FQSUVOVFJZCi0jZW5kaWYKLQotLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gKiBEZWZpbml0aW9uIG9mIEtIUk9OT1NfQVBJQVRUUklCVVRFUwotICotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gKiBUaGlzIGZvbGxvd3MgdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMgb2YgdGhl
IGZ1bmN0aW9uIHByb3RvdHlwZSBhcmd1bWVudHMuCi0gKi8KLSNpZiBkZWZpbmVkIChfX0FSTUND
XzJfXykKLSNkZWZpbmUgS0hST05PU19BUElBVFRSSUJVVEVTIF9fc29mdGZwCi0jZWxzZQotI2Rl
ZmluZSBLSFJPTk9TX0FQSUFUVFJJQlVURVMKLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAqIGJhc2ljIHR5cGUgZGVmaW5pdGlvbnMKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmIChkZWZp
bmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkgfHwg
ZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX1NDT19fKSB8fCBkZWZpbmVkKF9fVVNMQ19f
KQotCi0KLS8qCi0gKiBVc2luZyA8c3RkaW50Lmg+Ci0gKi8KLSNpbmNsdWRlIDxzdGRpbnQuaD4K
LXR5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICAgICAga2hyb25vc19pbnQzMl90OwotdHlwZWRl
ZiB1aW50MzJfdCAgICAgICAgICAgICAgICBraHJvbm9zX3VpbnQzMl90OwotdHlwZWRlZiBpbnQ2
NF90ICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDY0X3Q7Ci10eXBlZGVmIHVpbnQ2NF90ICAg
ICAgICAgICAgICAgIGtocm9ub3NfdWludDY0X3Q7Ci0jZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9J
TlQ2NCAgIDEKLSNkZWZpbmUgS0hST05PU19TVVBQT1JUX0ZMT0FUICAgMQotCi0jZWxpZiBkZWZp
bmVkKF9fVk1TICkgfHwgZGVmaW5lZChfX3NnaSkKLQotLyoKLSAqIFVzaW5nIDxpbnR0eXBlcy5o
PgotICovCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLXR5cGVkZWYgaW50MzJfdCAgICAgICAgICAg
ICAgICAga2hyb25vc19pbnQzMl90OwotdHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBr
aHJvbm9zX3VpbnQzMl90OwotdHlwZWRlZiBpbnQ2NF90ICAgICAgICAgICAgICAgICBraHJvbm9z
X2ludDY0X3Q7Ci10eXBlZGVmIHVpbnQ2NF90ICAgICAgICAgICAgICAgIGtocm9ub3NfdWludDY0
X3Q7Ci0jZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDEKLSNkZWZpbmUgS0hST05PU19T
VVBQT1JUX0ZMT0FUICAgMQotCi0jZWxpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19T
Q0lURUNIX1NOQVBfXykKLQotLyoKLSAqIFdpbjMyCi0gKi8KLXR5cGVkZWYgX19pbnQzMiAgICAg
ICAgICAgICAgICAga2hyb25vc19pbnQzMl90OwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyICAg
ICAgICBraHJvbm9zX3VpbnQzMl90OwotdHlwZWRlZiBfX2ludDY0ICAgICAgICAgICAgICAgICBr
aHJvbm9zX2ludDY0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgICAgICAgIGtocm9ub3Nf
dWludDY0X3Q7Ci0jZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIDEKLSNkZWZpbmUgS0hS
T05PU19TVVBQT1JUX0ZMT0FUICAgMQotCi0jZWxpZiBkZWZpbmVkKF9fc3VuX18pIHx8IGRlZmlu
ZWQoX19kaWdpdGFsX18pCi0KLS8qCi0gKiBTdW4gb3IgRGlnaXRhbAotICovCi10eXBlZGVmIGlu
dCAgICAgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQg
aW50ICAgICAgICAgICAga2hyb25vc191aW50MzJfdDsKLSNpZiBkZWZpbmVkKF9fYXJjaDY0X18p
IHx8IGRlZmluZWQoX0xQNjQpCi10eXBlZGVmIGxvbmcgaW50ICAgICAgICAgICAgICAgIGtocm9u
b3NfaW50NjRfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgICAgICAga2hyb25vc191aW50
NjRfdDsKLSNlbHNlCi10eXBlZGVmIGxvbmcgbG9uZyBpbnQgICAgICAgICAgIGtocm9ub3NfaW50
NjRfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCAga2hyb25vc191aW50NjRfdDsK
LSNlbmRpZiAvKiBfX2FyY2g2NF9fICovCi0jZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAg
IDEKLSNkZWZpbmUgS0hST05PU19TVVBQT1JUX0ZMT0FUICAgMQotCi0jZWxpZiAwCi0KLS8qCi0g
KiBIeXBvdGhldGljYWwgcGxhdGZvcm0gd2l0aCBubyBmbG9hdCBvciBpbnQ2NCBzdXBwb3J0Ci0g
Ki8KLXR5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICAga2hyb25vc19pbnQzMl90OwotdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgICAgICBraHJvbm9zX3VpbnQzMl90OwotI2RlZmluZSBL
SFJPTk9TX1NVUFBPUlRfSU5UNjQgICAwCi0jZGVmaW5lIEtIUk9OT1NfU1VQUE9SVF9GTE9BVCAg
IDAKLQotI2Vsc2UKLQotLyoKLSAqIEdlbmVyaWMgZmFsbGJhY2sKLSAqLwotI2luY2x1ZGUgPHN0
ZGludC5oPgotdHlwZWRlZiBpbnQzMl90ICAgICAgICAgICAgICAgICBraHJvbm9zX2ludDMyX3Q7
Ci10eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgICAgIGtocm9ub3NfdWludDMyX3Q7Ci10eXBl
ZGVmIGludDY0X3QgICAgICAgICAgICAgICAgIGtocm9ub3NfaW50NjRfdDsKLXR5cGVkZWYgdWlu
dDY0X3QgICAgICAgICAgICAgICAga2hyb25vc191aW50NjRfdDsKLSNkZWZpbmUgS0hST05PU19T
VVBQT1JUX0lOVDY0ICAgMQotI2RlZmluZSBLSFJPTk9TX1NVUFBPUlRfRkxPQVQgICAxCi0KLSNl
bmRpZgotCi0KLS8qCi0gKiBUeXBlcyB0aGF0IGFyZSAoc28gZmFyKSB0aGUgc2FtZSBvbiBhbGwg
cGxhdGZvcm1zCi0gKi8KLXR5cGVkZWYgc2lnbmVkICAgY2hhciAgICAgICAgICBraHJvbm9zX2lu
dDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICBraHJvbm9zX3VpbnQ4X3Q7Ci10
eXBlZGVmIHNpZ25lZCAgIHNob3J0IGludCAgICAga2hyb25vc19pbnQxNl90OwotdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBpbnQgICAgIGtocm9ub3NfdWludDE2X3Q7Ci10eXBlZGVmIHNpZ25lZCAg
IGxvbmcgIGludCAgICAga2hyb25vc19pbnRwdHJfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAg
aW50ICAgICBraHJvbm9zX3VpbnRwdHJfdDsKLXR5cGVkZWYgc2lnbmVkICAgbG9uZyAgaW50ICAg
ICBraHJvbm9zX3NzaXplX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIGludCAgICAga2hyb25v
c191c2l6ZV90OwotCi0jaWYgS0hST05PU19TVVBQT1JUX0ZMT0FUCi0vKgotICogRmxvYXQgdHlw
ZQotICovCi10eXBlZGVmICAgICAgICAgIGZsb2F0ICAgICAgICAga2hyb25vc19mbG9hdF90Owot
I2VuZGlmCi0KLSNpZiBLSFJPTk9TX1NVUFBPUlRfSU5UNjQKLS8qIFRpbWUgdHlwZXMKLSAqCi0g
KiBUaGVzZSB0eXBlcyBjYW4gYmUgdXNlZCB0byByZXByZXNlbnQgYSB0aW1lIGludGVydmFsIGlu
IG5hbm9zZWNvbmRzIG9yCi0gKiBhbiBhYnNvbHV0ZSBVbmFkanVzdGVkIFN5c3RlbSBUaW1lLiAg
VW5hZGp1c3RlZCBTeXN0ZW0gVGltZSBpcyB0aGUgbnVtYmVyCi0gKiBvZiBuYW5vc2Vjb25kcyBz
aW5jZSBzb21lIGFyYml0cmFyeSBzeXN0ZW0gZXZlbnQgKGUuZy4gc2luY2UgdGhlIGxhc3QKLSAq
IHRpbWUgdGhlIHN5c3RlbSBib290ZWQpLiAgVGhlIFVuYWRqdXN0ZWQgU3lzdGVtIFRpbWUgaXMg
YW4gdW5zaWduZWQKLSAqIDY0IGJpdCB2YWx1ZSB0aGF0IHdyYXBzIGJhY2sgdG8gMCBldmVyeSA1
ODQgeWVhcnMuICBUaW1lIGludGVydmFscwotICogbWF5IGJlIGVpdGhlciBzaWduZWQgb3IgdW5z
aWduZWQuCi0gKi8KLXR5cGVkZWYga2hyb25vc191aW50NjRfdCAgICAgICBraHJvbm9zX3V0aW1l
X25hbm9zZWNvbmRzX3Q7Ci10eXBlZGVmIGtocm9ub3NfaW50NjRfdCAgICAgICAga2hyb25vc19z
dGltZV9uYW5vc2Vjb25kc190OwotI2VuZGlmCi0KLS8qCi0gKiBEdW1teSB2YWx1ZSB1c2VkIHRv
IHBhZCBlbnVtIHR5cGVzIHRvIDMyIGJpdHMuCi0gKi8KLSNpZm5kZWYgS0hST05PU19NQVhfRU5V
TQotI2RlZmluZSBLSFJPTk9TX01BWF9FTlVNIDB4N0ZGRkZGRkYKLSNlbmRpZgotCi0vKgotICog
RW51bWVyYXRlZCBib29sZWFuIHR5cGUKLSAqCi0gKiBWYWx1ZXMgb3RoZXIgdGhhbiB6ZXJvIHNo
b3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIHRydWUuICBUaGVyZWZvcmUKLSAqIGNvbXBhcmlzb25z
IHNob3VsZCBub3QgYmUgbWFkZSBhZ2FpbnN0IEtIUk9OT1NfVFJVRS4KLSAqLwotdHlwZWRlZiBl
bnVtIHsKLSAgICBLSFJPTk9TX0ZBTFNFID0gMCwKLSAgICBLSFJPTk9TX1RSVUUgID0gMSwKLSAg
ICBLSFJPTk9TX0JPT0xFQU5fRU5VTV9GT1JDRV9TSVpFID0gS0hST05PU19NQVhfRU5VTQotfSBr
aHJvbm9zX2Jvb2xlYW5fZW51bV90OwotCi0jZW5kaWYgLyogX19raHJwbGF0Zm9ybV9oXyAqLwpJ
bmRleDogQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIwICswLDAgQEAKLS8vICEkKlVU
RjgqJCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9OwotCW9iamVj
dFZlcnNpb24gPSA0NTsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhBZ2dyZWdhdGVUYXJn
ZXQgc2VjdGlvbiAqLwotCQkxNTYzRDk5MTZCRkRBRDg1MzAzMkNFMUEgLyogQWxsICovID0gewot
CQkJaXNhID0gUEJYQWdncmVnYXRlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9
IDc3Q0VGQjdCNDBGMDVCMEE4MDRFNkIyQiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQWxsIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJKTsK
LQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCQlGQjNDNTA2NDExRjc5Mjk3MDA4MUY1QkEgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCSk7Ci0JCQluYW1lID0gQWxsOwotCQkJcHJvZHVjdE5h
bWUgPSBBbGw7Ci0JCX07Ci0JCTMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBBTkdMRSBTdXBw
b3J0ICovID0gewotCQkJaXNhID0gUEJYQWdncmVnYXRlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1
cmF0aW9uTGlzdCA9IDBBQTU0ODI1QkY1REYwQTNGQkE5MkI2MCAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAiQU5HTEUgU3VwcG9ydCIgKi87Ci0JCQli
dWlsZFBoYXNlcyA9ICgKLQkJCQlGQTBENzEyNURCMDZBN0E3NzE2QTU5MTAgLyogQWN0aW9uICJm
bGV4X2dsc2xhbmciICovLAotCQkJCTBENTEzRjhCOTIzOTQ5QzE1NkRCMDJDNSAvKiBBY3Rpb24g
ImJpc29uX2dsc2xhbmciICovLAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCSk7Ci0J
CQluYW1lID0gIkFOR0xFIFN1cHBvcnQiOwotCQkJcHJvZHVjdE5hbWUgPSAidHJhbnNsYXRvcl9j
b21tb24gU3VwcG9ydCI7Ci0JCX07Ci0vKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24g
Ki8KLQotLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMDU1NjNBREZFQTE1MTE2
RDcyMzMzMzJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZp
ZXJBbGl2ZS5jcHAgKi87IH07Ci0JCTBBMjE2OTQ5MTAzRTFFMjI4RjlDMTJGMCAvKiBJbml0aWFs
aXplRGxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDYwQzM5OThDOUNFNjZERTBDNUIwRkQ5OSAvKiBJbml0aWFsaXplRGxsLmNwcCAqLzsgfTsKLQkJ
MEQ0MDY0MTY3Mzk4QTY4OTI4MDlBMDlFIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1M0QxNjlDQjg0OUI4NjFFMTVERjk5
QSAvKiBnbHNsYW5nX3RhYi5jcHAgKi87IH07Ci0JCTMwNjVEMjlFOTdGQUM2RTEyNzM4OEQxNSAv
KiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLzsgfTsK
LQkJMzJCMURCQ0Q2QjgzRjIxNDZENzg3QTYyIC8qIGF0b20uYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDOUI0NjE2QTY1QTVBQkVGOTFGRDZEQyAvKiBh
dG9tLmMgKi87IH07Ci0JCTM1QkUxQkJFRTYxMzVBMUNCMDYwOEVBOCAvKiBjcHBzdHJ1Y3QuYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwNThBMEEyQTBB
MDIzODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLzsgfTsKLQkJM0E5NkU5Q0FDOEEyNUFGMTU2
NEI2NTJDIC8qIG1lbW9yeS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjk0RjQ0MkEyNjA2RkVDNTVGMTJBMjhFIC8qIG1lbW9yeS5jICovOyB9OwotCQk0
MEZDMTg5QjhBMjQ2RURGMTRDMkZERTMgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAv
KiBpbnRlcm1PdXQuY3BwICovOyB9OwotCQk1MERGMDAwMDVDQzQyMTJGNkZCMTI5MUQgLyogSW50
ZXJtZWRpYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDNGN0M0ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovOyB9Owot
CQk2RjlGODc1MDE3QTY4QUJFNUQzOUZGMTkgLyogUGFyc2VIZWxwZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2QzgzMUE3NUVCRTAwOUE5ODYx
Nzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLzsgfTsKLQkJODg4RjEzODI0OThFMkQ3NEFGMjgwMUM4
IC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRBQkEyMzBGRUEzNjU0QjAzMEU0QzRGQiAvKiBkZWJ1Zy5jcHAgKi87IH07Ci0JCTlFOERG
RTFDQ0VGMDM4QkYyQjY1NDI4QyAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyQzlDOEVCNEE3RUZGNUI2N0ZGOURCRiAvKiBw
YXJzZUNvbnN0LmNwcCAqLzsgfTsKLQkJQUJBNUM2MUIxQjc4QjlBOEQ2OUY2QUVDIC8qIGdsc2xh
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Ix
RjkxRDNEOENDNDQ2RjM1QjAwRDFCIC8qIGdsc2xhbmcuY3BwICovOyB9OwotCQlBQzIzRjU4RkRE
M0M1NUY1Q0ExOEVFRDcgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3Zl
VHJlZS5jcHAgKi87IH07Ci0JCUFEODU1MTdGMDg2RkRDRUYzOTQ3QzQwMyAvKiBzeW1ib2xzLmMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMDEzQTcyNDBC
REFFOEE2MTQxM0Q4QzAgLyogc3ltYm9scy5jICovOyB9OwotCQlCNDg1ODQxN0U1NDM2NUJFOENE
RTM5MTkgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkUyNTg0ODYwMDVGNjY5NkNDMDMxNjIyIC8qIG9zc291cmNlX3Bv
c2l4LmNwcCAqLzsgfTsKLQkJQjhCRDI2ODVBMTZCMTg4Q0NERkIwNTJCIC8qIFNoYWRlckxhbmcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTZDN0U5
OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovOyB9OwotCQlCRUJCRjRGMDgx
OUVBM0QwMzk3N0E4RkMgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2OTI3QkU1RDNDMkM4MkY4NjExMURGIC8qIEluZm9TaW5r
LmNwcCAqLzsgfTsKLQkJQ0I3RjBFRjBENkE4OUZBOEM0REY1NTEzIC8qIGNwcC5jIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjc1NzA3QjM5M0I3RUFCN0RE
OTk5OUNCIC8qIGNwcC5jICovOyB9OwotCQlFMUM3QzVERkYwQjJERkVDMDkzODdGNEUgLyogUG9v
bEFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQb29sQWxsb2MuY3BwICovOyB9OwotCQlFOEM3
MjdBQThFOURDNUU3QjU4ODU3REYgLyogdG9rZW5zLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDAwNzQ1REE5OTE0RkRFMjc0RDAzRDUgLyogdG9rZW5z
LmMgKi87IH07Ci0JCUYwOThGNDYzRURBQkNGMDc2OTAwNzY3OCAvKiBzY2FubmVyLmMgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjNBQTY5NERGOUE0NDU1
QTgxMzIzNEQgLyogc2Nhbm5lci5jICovOyB9OwotCQlGNUFFMkEyOTJERkFGOEMxNTg0MTJBQTIg
LyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNw
cCAqLzsgfTsKLQkJRjZBQkQ1OEY4Q0FCNzY0MUQ4QkZFOTM1IC8qIFN5bWJvbFRhYmxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3RTVCMEYwNDYz
NUU2MDkwRjBERThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07Ci0JCUZCM0M1MDU3MTFGNzky
NEEwMDgxRjVCQSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCN0IxMTI3Qzc1QjU3NkZDMDBENzRBRUQgLyogQ29kZUdlbkdM
U0wuY3BwICovOyB9OwotCQlGQjNDNTA1ODExRjc5MjRBMDA4MUY1QkEgLyogT3V0cHV0R0xTTC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OEI3NDAy
Q0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi87IH07Ci0JCUZCM0M1MDU5MTFG
NzkyNEEwMDgxRjVCQSAvKiBUcmFuc2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkI3MERDNzRBMjFGQkNENjY1QUJERjkgLyogVHJh
bnNsYXRvckdMU0wuY3BwICovOyB9OwotCQlGQjNDNTA4RTExRjc5NDlFMDA4MUY1QkEgLyogZ2xz
bGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
QjFGOTFEM0Q4Q0M0NDZGMzVCMDBEMUIgLyogZ2xzbGFuZy5jcHAgKi87IH07Ci0JCUZCM0M1MDhG
MTFGNzk0OUUwMDgxRjVCQSAvKiBnbHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTNEMTY5Q0I4NDlCODYxRTE1REY5OUEgLyogZ2xz
bGFuZ190YWIuY3BwICovOyB9OwotCQlGQjNDNTA5MjExRjc5NENFMDA4MUY1QkEgLyogZGVidWcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEFCQTIz
MEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLzsgfTsKLQkJRkIzQzUwOTMxMUY3OTRD
RTAwODFGNUJBIC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFNjkyN0JFNUQzQzJDODJGODYxMTFERiAvKiBJbmZvU2luay5jcHAg
Ki87IH07Ci0JCUZCM0M1MDk0MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbml0aWFsaXplLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NEYyRUQwRDgyRDdC
QkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLzsgfTsKLQkJRkIzQzUwOTUxMUY3OTRDRTAw
ODFGNUJBIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjBDMzk5OEM5Q0U2NkRFMEM1QjBGRDk5IC8qIEluaXRpYWxpemVE
bGwuY3BwICovOyB9OwotCQlGQjNDNTA5NjExRjc5NENFMDA4MUY1QkEgLyogSW50ZXJtZWRpYXRl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGN0M0
ODZDMzcwQTcyOTM4RkU4MTYwRiAvKiBJbnRlcm1lZGlhdGUuY3BwICovOyB9OwotCQlGQjNDNTA5
NzExRjc5NENFMDA4MUY1QkEgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFQUY2RjMxMjZDMkVDNDM5Nzc4NUMzRiAvKiBpbnRl
cm1PdXQuY3BwICovOyB9OwotCQlGQjNDNTA5ODExRjc5NENFMDA4MUY1QkEgLyogSW50ZXJtVHJh
dmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsgfTsKLQkJ
RkIzQzUwOUExMUY3OTRDRTAwODFGNUJBIC8qIG9zc291cmNlX3Bvc2l4LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMjU4NDg2MDA1RjY2OTZDQzAz
MTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi87IH07Ci0JCUZCM0M1MDlCMTFGNzk0Q0UwMDgx
RjVCQSAvKiBwYXJzZUNvbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEQyQzlDOEVCNEE3RUZGNUI2N0ZGOURCRiAvKiBwYXJzZUNvbnN0LmNwcCAq
LzsgfTsKLQkJRkIzQzUwOUMxMUY3OTRDRTAwODFGNUJBIC8qIFBhcnNlSGVscGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkM4MzFBNzVFQkUw
MDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5jcHAgKi87IH07Ci0JCUZCM0M1MDlEMTFGNzk0Q0Uw
MDgxRjVCQSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjY0RUFCRTczOEZDNjY2QTVFNEUyRjQyIC8qIFBvb2xBbGxvYy5jcHAg
Ki87IH07Ci0JCUZCM0M1MDlFMTFGNzk0Q0UwMDgxRjVCQSAvKiBRdWFsaWZpZXJBbGl2ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0ODU3RTE4Nzk5
RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovOyB9OwotCQlGQjNDNTA5RjEx
Rjc5NENFMDA4MUY1QkEgLyogUmVtb3ZlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNDM2RUZGMDY5MTNGQ0IxOUMzNTIyQTcgLyogUmVtb3Zl
VHJlZS5jcHAgKi87IH07Ci0JCUZCM0M1MEEwMTFGNzk0Q0UwMDgxRjVCQSAvKiBTaGFkZXJMYW5n
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU2QzdF
OTlCQTUwMEE4NEMzNTIxNkZFMCAvKiBTaGFkZXJMYW5nLmNwcCAqLzsgfTsKLQkJRkIzQzUwQTEx
MUY3OTRDRTAwODFGNUJBIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI3RTVCMEYwNDYzNUU2MDkwRjBERThFRiAvKiBTeW1i
b2xUYWJsZS5jcHAgKi87IH07Ci0JCUZCM0M1MEE0MTFGNzk0RkYwMDgxRjVCQSAvKiBhdG9tLmMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzlCNDYxNkE2
NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovOyB9OwotCQlGQjNDNTBBNTExRjc5NEZGMDA4MUY1
QkEgLyogY3BwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNzU3MDdCMzkzQjdFQUI3REQ5OTk5Q0IgLyogY3BwLmMgKi87IH07Ci0JCUZCM0M1MEE2MTFG
Nzk0RkYwMDgxRjVCQSAvKiBjcHBzdHJ1Y3QuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgwNThBMEEyQTBBMDIzODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3Qu
YyAqLzsgfTsKLQkJRkIzQzUwQTcxMUY3OTRGRjAwODFGNUJBIC8qIG1lbW9yeS5jIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk0RjQ0MkEyNjA2RkVDNTVG
MTJBMjhFIC8qIG1lbW9yeS5jICovOyB9OwotCQlGQjNDNTBBODExRjc5NEZGMDA4MUY1QkEgLyog
c2Nhbm5lci5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkYzQUE2OTRERjlBNDQ1NUE4MTMyMzREIC8qIHNjYW5uZXIuYyAqLzsgfTsKLQkJRkIzQzUwQTkx
MUY3OTRGRjAwODFGNUJBIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEYwMTNBNzI0MEJEQUU4QTYxNDEzRDhDMCAvKiBzeW1ib2xzLmMg
Ki87IH07Ci0JCUZCM0M1MEFBMTFGNzk0RkYwMDgxRjVCQSAvKiB0b2tlbnMuYyBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDA3NDVEQTk5MTRGREUyNzRE
MDNENSAvKiB0b2tlbnMuYyAqLzsgfTsKLQkJRkIzQzUwQUIxMUY3OTUxQjAwODFGNUJBIC8qIFRy
YW5zbGF0b3JHTFNMLmggaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBEREQzQjdFM0I3QjM1QTBCODQ2OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLzsgfTsK
LQkJRkIzQzUwQUMxMUY3OTUxQjAwODFGNUJBIC8qIE91dHB1dEdMU0wuaCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRDYxQ0IwQkNFNTRFMDY5RDcxRjky
MCAvKiBPdXRwdXRHTFNMLmggKi87IH07Ci0vKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8K
LQotLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KLQkJRTY5QkZCRTJE
MTI3MjYyMEU0NkMzRjhBIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKLQkJCWlzYSA9
IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IERBMTg4RDhDNkJG
ODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlwZSA9IDE7Ci0J
CQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDMxMzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RTsKLQkJCXJl
bW90ZUluZm8gPSAidHJhbnNsYXRvcl9jb21tb24gU3VwcG9ydCI7Ci0JCX07Ci0JCUZCM0M1MDYz
MTFGNzkyOTcwMDgxRjVCQSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2Eg
PSBQQlhDb250YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZC
RjgwNzMxMjI1MzkxMzEgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwot
CQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSBGQjNDNTA1NTExRjc5MjRBMDA4MUY1QkE7Ci0JCQly
ZW1vdGVJbmZvID0gYW5nbGU7Ci0JCX07Ci0JCUZCM0M1MEQwMTFGNzlDQ0MwMDgxRjVCQSAvKiBQ
QlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJv
eHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSBEQTE4OEQ4QzZCRjgwNzMxMjI1MzkxMzEgLyogUHJv
amVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAxOwotCQkJcmVtb3RlR2xvYmFsSURTdHJp
bmcgPSAzMTM0OUQ2NjVGQUU2NDJBRUI0OTEzNUU7Ci0JCQlyZW1vdGVJbmZvID0gIkFOR0xFIFN1
cHBvcnQiOwotCQl9OwotLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQkwNTZGRUFEQzdEOTVDNkQ0
QzlDRjExMTMgLyogc2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY2FubmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBDOUI0NjE2QTY1QTVBQkVGOTFGRDZEQyAvKiBhdG9tLmMg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuYzsgcGF0aCA9IGF0b20uYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTJF
QUYwMjgzMTFFRUE0NzUzRTgyODE4IC8qIFBvb2xBbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb29s
QWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTUzQkYwNkJGMTJDNkY1MDQ5
NkM2MTU2IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxvY2FsaW50ZXJt
ZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI3RTRDN0VEMEI4MkUxOERD
QkVERjFDOSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZVR5cGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI5NEY0NDJBMjYwNkZFQzU1RjEyQTI4RSAvKiBtZW1v
cnkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5jOyBwYXRoID0gbWVtb3J5LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJBNzY1Qjg2Q0JBRjBENEEzRTY5RENBNyAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJEMDA3
NDVEQTk5MTRGREUyNzREMDNENSAvKiB0b2tlbnMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gdG9rZW5zLmM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFN0M5QjZFNkRCNzUxRTEyQTJGNkNCNiAv
KiBJbml0aWFsaXplR2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplR2xvYmFscy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzREREQzc3MjE2MjAyQTRERTE4MDhCREIg
LyogbGlidHJhbnNsYXRvcl9jb21tb24uYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0g
bGlidHJhbnNsYXRvcl9jb21tb24uYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKLQkJM0Y3QzQ4NkMzNzBBNzI5MzhGRTgxNjBGIC8qIEludGVybWVkaWF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbnRlcm1lZGlhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0ODU3RTE4Nzk5RDMzMkMzMEVGNDYwQzcgLyogUXVhbGlmaWVyQWxpdmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUXVhbGlmaWVyQWxpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0OEI3NDAyQ0MwN0EwNTlGRUY1RUMzNTEgLyogT3V0cHV0R0xTTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBPdXRwdXRHTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNEFCQTIzMEZFQTM2NTRCMDMwRTRDNEZCIC8qIGRlYnVnLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IGRlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTI4RkYyMDE4MzlD
NkYyMzNFMjZGRkRBIC8qIGNwcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjcHAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTZDN0U5OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZGVyTGFuZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTU4MEIyQTMxRjdDNTFBNTlCNDBGMTFBMyAvKiBjb21waWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGNvbXBpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUEyMTU5
OUM1OUJDMUE3NUE3RkFCQTM0IC8qIE91dHB1dEhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0
SExTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2MEMzOTk4QzlDRTY2REUwQzVC
MEZEOTkgLyogSW5pdGlhbGl6ZURsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbml0aWFsaXpl
RGxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkJCQzgyMjRCOUQ4RTIzNEQx
MTdGQTBDIC8qIHByZXByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcHJlcHJvY2Vzcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5m
b1NpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mb1NpbmsuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk2RkI3MERDNzRBMjFGQkNENjY1QUJERjkgLyogVHJhbnNsYXRvckdM
U0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNsYXRvckdMU0wuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRp
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk3QzZCQjEyQUIwOTk1NTZDRjM3OUQ3OEYgLyogU3ltYm9sVGFibGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3ltYm9sVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
N0Q5Q0YzNzZEQzU3OTlCNEM2QjMzMzFFIC8qIHN5bWJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3lt
Ym9scy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MDU4QTBBMkEwQTAyMzg2ODY3
NTE3RUEgLyogY3Bwc3RydWN0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNwcHN0cnVjdC5jOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4MzEzOTlERUU1REFCQTA5NTcwRkIzRTcgLyogbWVtb3J5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk4NTEzRkFDNjk5REIxNTU4RDFENDlBNDggLyogSW5pdGlhbGl6ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbml0aWFsaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg1ODQ1RkZGNUE4
RTYzMzY0MzA4MjM2RCAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluaXRpYWxpemVQYXJzZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
ODlBNkY3QjFBRDM5MThFNjRERjc2RUIxIC8qIHNsZ2xvYmFscy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBz
bGdsb2JhbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEMzMjI1QzJGOEMzNTcz
Q0Q5NzI1RTY2IC8qIGdsc2xhbmcueSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IGdsc2xhbmcueTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTNENjFDQjBCQ0U1NEUwNjlENzFGOTIwIC8qIE91dHB1
dEdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3V0cHV0R0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5NTI3NkFBNkIzNkZDMUIxRDkxM0ZDRTQgLyogZGVidWcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gZGVidWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTc2QzgzMUE3NUVC
RTAwOUE5ODYxNzk2IC8qIFBhcnNlSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNl
SGVscGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUE1QjVCQjI1MjY4MDI0
NzlFMTlGOTkzIC8qIE91dHB1dEhMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3V0cHV0SExT
TC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlDRUQzQUZGMUU2MUI0NUVFMTAw
NTY1NiAvKiBhdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGF0b20uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJOUQ0N0IxQUM4MkU0RUU4NTlBQzU0MjQzIC8qIFF1YWxpZmllckFsaXZlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFF1YWxpZmllckFsaXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUEwQ0U0MzYzMTg0OTI3NkEzMTE4N0M3QiAvKiBJbml0aWFsaXplRGxsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluaXRpYWxpemVEbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTMxNTNENThGNEJCQkQ5OEE4NEU0MjEwIC8qIGdsc2xhbmcubCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBnbHNsYW5nLmw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1M0QxNjlDQjg0OUI4NjFFMTVERjk5QSAvKiBn
bHNsYW5nX3RhYi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBnbHNsYW5nX3RhYi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NEYyRUQwRDgyRDdCQkNBNEU5RUVFQSAvKiBJbml0
aWFsaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluaXRpYWxpemUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBQTUzQjY2MzJDNzZGOTA1REYwOEU1NjQgLyogVHlwZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUU2
NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoSGFu
ZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFFNzY3NEM1MkJERERCMjhBRjVG
RkQ5RiAvKiB1bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUIyRjVDQTExRUVBOTJERjIzODRFRkQ5MyAvKiBDb25zdGFudFVuaW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50VW5pb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVtb3ZlVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUI2NEVBQkU3MzhGQzY2NkE1RTRFMkY0MiAvKiBQb29sQWxsb2MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUG9vbEFsbG9jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjc1
NzA3QjM5M0I3RUFCN0REOTk5OUNCIC8qIGNwcC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBjcHAuYzsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjdCMTEyN0M3NUI1NzZGQzAwRDc0QUVEIC8qIENv
ZGVHZW5HTFNMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5HTFNMLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjdFNUIwRjA0NjM1RTYwOTBGMERFOEVGIC8qIFN5bWJv
bFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM2NkQ2QjQ3RDlBRjMyODY2NDRCQkUxIC8qIGdsc2xhbmdf
dGFiLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGdsc2xhbmdfdGFiLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBvc3NvdXJjZV9wb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUMzREFGRjZCRjEyQkI3RjQ3ODRENkM3RSAvKiBUcmFuc2xhdG9ySExTTC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2xhdG9ySExTTC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUM0OTU0OURDQ0FGNDUwRUI3NjE1MjBFMSAvKiBDb2RlR2VuSExTTC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlR2VuSExTTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUM0RkU5ODhFRjlBMjkzODY3RTVDNzcxQiAvKiBJbnRlcm1UcmF2ZXJzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlcm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUM4QkQ1OUJENzA1NkZGQzIxMzczQzUwQSAvKiBvc2luY2x1ZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUNCMUY5MUQzRDhDQzQ0NkYzNUIwMEQxQiAvKiBnbHNsYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IGdsc2xhbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRUUwQzkwREY2
RDUwNEQxRjM2Mjk3MTEgLyogUGFyc2VIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VIZWxw
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0YyQjYyRTA4MjBDODMxQUY4MTJE
MDAwIC8qIGJ1aWxkX2FuZ2xlLmd5cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBidWlsZF9hbmdsZS5neXA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUNGRDEyQzZFNDZFQkUwODM5QkJFNTJCNSAvKiBwYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gcGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQx
M0MzNjkzQjlFNDBEMzdGMkZBQjM0QSAvKiB0b2tlbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdG9rZW5z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQyQzlDOEVCNEE3RUZGNUI2N0ZGOURC
RiAvKiBwYXJzZUNvbnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHBhcnNlQ29uc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlENDBGNzhDQjlCQTBDODk5MjFGQTMxOUQgLyog
UmVtb3ZlVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVUcmVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCURERDNCN0UzQjdCMzVBMEI4NDY5QUI4NyAvKiBUcmFuc2xhdG9yR0xT
TC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yR0xTTC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50ZXJtT3V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IGludGVybU91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCURFRUFGQzYxOEEzQjMzRjFGQkZFMzUzNiAvKiBNTWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1N
YXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTM3MTFBNDhBMEJGMTZCMUNCRDc3
QUM5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTZWxlY3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFM0EyOUI2RTlDMjFCNjdDMjVGRjBE
MkIgLyogVHJhbnNsYXRvckhMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvckhMU0wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjAxM0E3MjQwQkRBRThBNjE0MTNEOEMwIC8q
IHN5bWJvbHMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc3ltYm9scy5jOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGN0IyOTcxRDRF
QjM4MzZCOTRCN0VDQUYgLyogSW5mb1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mb1NpbmsuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkIzQzUwNUQxMUY3OTI0QTAwODFGNUJBIC8q
IGxpYmFuZ2xlLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmFuZ2xlLmE7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCUZGM0FBNjk0REY5QTQ0NTVBODEz
MjM0RCAvKiBzY2FubmVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHNjYW5uZXIuYzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyog
QmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQlBNUM5OTRFNzREQjFF
NjAzMzhFN0JDMTEgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0g
KAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9
OwotCQlGQjNDNTA1QTExRjc5MjRBMDA4MUY1QkEgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlz
YSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KLQotLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQkwRThENjVGNTg0RkRCODRE
QUFCRDM5NjkgLyogcHJlcHJvY2Vzc29yICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQlj
aGlsZHJlbiA9ICgKLQkJCQkwQzlCNDYxNkE2NUE1QUJFRjkxRkQ2REMgLyogYXRvbS5jICovLAot
CQkJCTlDRUQzQUZGMUU2MUI0NUVFMTAwNTY1NiAvKiBhdG9tLmggKi8sCi0JCQkJNTgwQjJBMzFG
N0M1MUE1OUI0MEYxMUEzIC8qIGNvbXBpbGUuaCAqLywKLQkJCQlCNzU3MDdCMzkzQjdFQUI3REQ5
OTk5Q0IgLyogY3BwLmMgKi8sCi0JCQkJNTI4RkYyMDE4MzlDNkYyMzNFMjZGRkRBIC8qIGNwcC5o
ICovLAotCQkJCTgwNThBMEEyQTBBMDIzODY4Njc1MTdFQSAvKiBjcHBzdHJ1Y3QuYyAqLywKLQkJ
CQkyOTRGNDQyQTI2MDZGRUM1NUYxMkEyOEUgLyogbWVtb3J5LmMgKi8sCi0JCQkJODMxMzk5REVF
NURBQkEwOTU3MEZCM0U3IC8qIG1lbW9yeS5oICovLAotCQkJCUNGRDEyQzZFNDZFQkUwODM5QkJF
NTJCNSAvKiBwYXJzZXIuaCAqLywKLQkJCQk2QkJDODIyNEI5RDhFMjM0RDExN0ZBMEMgLyogcHJl
cHJvY2Vzcy5oICovLAotCQkJCUZGM0FBNjk0REY5QTQ0NTVBODEzMjM0RCAvKiBzY2FubmVyLmMg
Ki8sCi0JCQkJMDU2RkVBREM3RDk1QzZENEM5Q0YxMTEzIC8qIHNjYW5uZXIuaCAqLywKLQkJCQk4
OUE2RjdCMUFEMzkxOEU2NERGNzZFQjEgLyogc2xnbG9iYWxzLmggKi8sCi0JCQkJRjAxM0E3MjQw
QkRBRThBNjE0MTNEOEMwIC8qIHN5bWJvbHMuYyAqLywKLQkJCQk3RDlDRjM3NkRDNTc5OUI0QzZC
MzMzMUUgLyogc3ltYm9scy5oICovLAotCQkJCTJEMDA3NDVEQTk5MTRGREUyNzREMDNENSAvKiB0
b2tlbnMuYyAqLywKLQkJCQlEMTNDMzY5M0I5RTQwRDM3RjJGQUIzNEEgLyogdG9rZW5zLmggKi8s
Ci0JCQkpOwotCQkJcGF0aCA9IHByZXByb2Nlc3NvcjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7Ci0JCX07Ci0JCTE5NkRCNkFCMDA2QkI4MzUwM0M3RDc4NiAvKiBTb3VyY2UgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTBFOEQ2NUY1ODRGREI4NERB
QUJEMzk2OSAvKiBwcmVwcm9jZXNzb3IgKi8sCi0JCQkJMjdFNEM3RUQwQjgyRTE4RENCRURGMUM5
IC8qIEJhc2VUeXBlcy5oICovLAotCQkJCUI3QjExMjdDNzVCNTc2RkMwMEQ3NEFFRCAvKiBDb2Rl
R2VuR0xTTC5jcHAgKi8sCi0JCQkJQzQ5NTQ5RENDQUY0NTBFQjc2MTUyMEUxIC8qIENvZGVHZW5I
TFNMLmNwcCAqLywKLQkJCQlGNzQ2MThGMThGRTU0NDgxMTUwMTdDNDQgLyogQ29tbW9uLmggKi8s
Ci0JCQkJQjJGNUNBMTFFRUE5MkRGMjM4NEVGRDkzIC8qIENvbnN0YW50VW5pb24uaCAqLywKLQkJ
CQk2RTY5MjdCRTVEM0MyQzgyRjg2MTExREYgLyogSW5mb1NpbmsuY3BwICovLAotCQkJCUY3QjI5
NzFENEVCMzgzNkI5NEI3RUNBRiAvKiBJbmZvU2luay5oICovLAotCQkJCUE1NEYyRUQwRDgyRDdC
QkNBNEU5RUVFQSAvKiBJbml0aWFsaXplLmNwcCAqLywKLQkJCQk4NTEzRkFDNjk5REIxNTU4RDFE
NDlBNDggLyogSW5pdGlhbGl6ZS5oICovLAotCQkJCTYwQzM5OThDOUNFNjZERTBDNUIwRkQ5OSAv
KiBJbml0aWFsaXplRGxsLmNwcCAqLywKLQkJCQlBMENFNDM2MzE4NDkyNzZBMzExODdDN0IgLyog
SW5pdGlhbGl6ZURsbC5oICovLAotCQkJCTJFN0M5QjZFNkRCNzUxRTEyQTJGNkNCNiAvKiBJbml0
aWFsaXplR2xvYmFscy5oICovLAotCQkJCTg1ODQ1RkZGNUE4RTYzMzY0MzA4MjM2RCAvKiBJbml0
aWFsaXplUGFyc2VDb250ZXh0LmggKi8sCi0JCQkJQzRGRTk4OEVGOUEyOTM4NjdFNUM3NzFCIC8q
IEludGVybVRyYXZlcnNlLmNwcCAqLywKLQkJCQkzRjdDNDg2QzM3MEE3MjkzOEZFODE2MEYgLyog
SW50ZXJtZWRpYXRlLmNwcCAqLywKLQkJCQlERUVBRkM2MThBM0IzM0YxRkJGRTM1MzYgLyogTU1h
cC5oICovLAotCQkJCTQ4Qjc0MDJDQzA3QTA1OUZFRjVFQzM1MSAvKiBPdXRwdXRHTFNMLmNwcCAq
LywKLQkJCQk5M0Q2MUNCMEJDRTU0RTA2OUQ3MUY5MjAgLyogT3V0cHV0R0xTTC5oICovLAotCQkJ
CTlBNUI1QkIyNTI2ODAyNDc5RTE5Rjk5MyAvKiBPdXRwdXRITFNMLmNwcCAqLywKLQkJCQk1QTIx
NTk5QzU5QkMxQTc1QTdGQUJBMzQgLyogT3V0cHV0SExTTC5oICovLAotCQkJCTk3NkM4MzFBNzVF
QkUwMDlBOTg2MTc5NiAvKiBQYXJzZUhlbHBlci5jcHAgKi8sCi0JCQkJQ0VFMEM5MERGNkQ1MDRE
MUYzNjI5NzExIC8qIFBhcnNlSGVscGVyLmggKi8sCi0JCQkJQjY0RUFCRTczOEZDNjY2QTVFNEUy
RjQyIC8qIFBvb2xBbGxvYy5jcHAgKi8sCi0JCQkJMTJFQUYwMjgzMTFFRUE0NzUzRTgyODE4IC8q
IFBvb2xBbGxvYy5oICovLAotCQkJCTQ4NTdFMTg3OTlEMzMyQzMwRUY0NjBDNyAvKiBRdWFsaWZp
ZXJBbGl2ZS5jcHAgKi8sCi0JCQkJOUQ0N0IxQUM4MkU0RUU4NTlBQzU0MjQzIC8qIFF1YWxpZmll
ckFsaXZlLmggKi8sCi0JCQkJQjQzNkVGRjA2OTEzRkNCMTlDMzUyMkE3IC8qIFJlbW92ZVRyZWUu
Y3BwICovLAotCQkJCUQ0MEY3OENCOUJBMEM4OTkyMUZBMzE5RCAvKiBSZW1vdmVUcmVlLmggKi8s
Ci0JCQkJQUU2NUUxMzlBRTEwREU5RUZBRDhENUIxIC8qIFNoSGFuZGxlLmggKi8sCi0JCQkJNTZD
N0U5OUJBNTAwQTg0QzM1MjE2RkUwIC8qIFNoYWRlckxhbmcuY3BwICovLAotCQkJCUI3RTVCMEYw
NDYzNUU2MDkwRjBERThFRiAvKiBTeW1ib2xUYWJsZS5jcHAgKi8sCi0JCQkJN0M2QkIxMkFCMDk5
NTU2Q0YzNzlENzhGIC8qIFN5bWJvbFRhYmxlLmggKi8sCi0JCQkJNkZCNzBEQzc0QTIxRkJDRDY2
NUFCREY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCAqLywKLQkJCQlEREQzQjdFM0I3QjM1QTBCODQ2
OUFCODcgLyogVHJhbnNsYXRvckdMU0wuaCAqLywKLQkJCQlDM0RBRkY2QkYxMkJCN0Y0Nzg0RDZD
N0UgLyogVHJhbnNsYXRvckhMU0wuY3BwICovLAotCQkJCUUzQTI5QjZFOUMyMUI2N0MyNUZGMEQy
QiAvKiBUcmFuc2xhdG9ySExTTC5oICovLAotCQkJCUFBNTNCNjYzMkM3NkY5MDVERjA4RTU2NCAv
KiBUeXBlcy5oICovLAotCQkJCUUzNzExQTQ4QTBCRjE2QjFDQkQ3N0FDOSAvKiBVbmZvbGRTZWxl
Y3QuY3BwICovLAotCQkJCTJBNzY1Qjg2Q0JBRjBENEEzRTY5RENBNyAvKiBVbmZvbGRTZWxlY3Qu
aCAqLywKLQkJCQk0QUJBMjMwRkVBMzY1NEIwMzBFNEM0RkIgLyogZGVidWcuY3BwICovLAotCQkJ
CTk1Mjc2QUE2QjM2RkMxQjFEOTEzRkNFNCAvKiBkZWJ1Zy5oICovLAotCQkJCUEzMTUzRDU4RjRC
QkJEOThBODRFNDIxMCAvKiBnbHNsYW5nLmwgKi8sCi0JCQkJOEMzMjI1QzJGOEMzNTczQ0Q5NzI1
RTY2IC8qIGdsc2xhbmcueSAqLywKLQkJCQlERUFGNkYzMTI2QzJFQzQzOTc3ODVDM0YgLyogaW50
ZXJtT3V0LmNwcCAqLywKLQkJCQk3OTlEQzk2MTFFRTJFQTNCQTdDRjU0NzcgLyogaW50ZXJtZWRp
YXRlLmggKi8sCi0JCQkJMTUzQkYwNkJGMTJDNkY1MDQ5NkM2MTU2IC8qIGxvY2FsaW50ZXJtZWRp
YXRlLmggKi8sCi0JCQkJQzhCRDU5QkQ3MDU2RkZDMjEzNzNDNTBBIC8qIG9zaW5jbHVkZS5oICov
LAotCQkJCUJFMjU4NDg2MDA1RjY2OTZDQzAzMTYyMiAvKiBvc3NvdXJjZV9wb3NpeC5jcHAgKi8s
Ci0JCQkJRDJDOUM4RUI0QTdFRkY1QjY3RkY5REJGIC8qIHBhcnNlQ29uc3QuY3BwICovLAotCQkJ
CUFFNzY3NEM1MkJERERCMjhBRjVGRkQ5RiAvKiB1bmlzdGQuaCAqLywKLQkJCSk7Ci0JCQluYW1l
ID0gU291cmNlOwotCQkJcGF0aCA9IGNvbXBpbGVyOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKLQkJNDY2RTFEMDUzMUE3OUI1ODEzRThBN0Y4IC8qIEludGVybWVkaWF0ZXMgKi8g
PSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUNCMUY5MUQzRDhD
QzQ0NkYzNUIwMEQxQiAvKiBnbHNsYW5nLmNwcCAqLywKLQkJCQlBNTNEMTY5Q0I4NDlCODYxRTE1
REY5OUEgLyogZ2xzbGFuZ190YWIuY3BwICovLAotCQkJCUJDNjZENkI0N0Q5QUYzMjg2NjQ0QkJF
MSAvKiBnbHNsYW5nX3RhYi5oICovLAotCQkJKTsKLQkJCW5hbWUgPSBJbnRlcm1lZGlhdGVzOwot
CQkJc291cmNlVHJlZSA9IElOVEVSTUVESUFURV9ESVI7Ci0JCX07Ci0JCTVCQkVGRjlCOTE3Mzgy
OTdCOTVDNTY4RCA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MTk2REI2QUIwMDZCQjgzNTAzQzdENzg2IC8qIFNvdXJjZSAqLywKLQkJCQk0NjZFMUQwNTMxQTc5
QjU4MTNFOEE3RjggLyogSW50ZXJtZWRpYXRlcyAqLywKLQkJCQlFMEVEQzQxMzBFN0QzNzQzMThD
RTcyQkUgLyogUHJvZHVjdHMgKi8sCi0JCQkJQjJDMTg0QzM1NDMxOThCQTUxNTkyRUE0IC8qIEJ1
aWxkICovLAotCQkJKTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUIyQzE4
NEMzNTQzMTk4QkE1MTU5MkVBNCAvKiBCdWlsZCAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwot
CQkJY2hpbGRyZW4gPSAoCi0JCQkJQ0YyQjYyRTA4MjBDODMxQUY4MTJEMDAwIC8qIGJ1aWxkX2Fu
Z2xlLmd5cCAqLywKLQkJCSk7Ci0JCQluYW1lID0gQnVpbGQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwotCQl9OwotCQlFMEVEQzQxMzBFN0QzNzQzMThDRTcyQkUgLyogUHJvZHVjdHMgKi8g
PSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTNERERDNzcyMTYy
MDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1vbi5hICovLAotCQkJCUZCM0M1MDVE
MTFGNzkyNEEwMDgxRjVCQSAvKiBsaWJhbmdsZS5hICovLAotCQkJKTsKLQkJCW5hbWUgPSBQcm9k
dWN0czsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0vKiBFbmQgUEJYR3JvdXAg
c2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCQk2RjRG
RDM1Q0IzREZDODlENzBFQ0Q0MzIgLyogdHJhbnNsYXRvcl9jb21tb24gKi8gPSB7Ci0JCQlpc2Eg
PSBQQlhOYXRpdmVUYXJnZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMzRCQjM4RTNB
NzQ0MThCMkEwNjNCNDlFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZl
VGFyZ2V0ICJ0cmFuc2xhdG9yX2NvbW1vbiIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQlF
QUEyMkNBNjNGRDU3MkZDQ0I5MTNEMjIgLyogU291cmNlcyAqLywKLQkJCQlBNUM5OTRFNzREQjFF
NjAzMzhFN0JDMTEgLyogRnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAot
CQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCQkyOTFFRTA0MjAyRUM3OTY3ODM1RkNDMzgg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKLQkJCSk7Ci0JCQluYW1lID0gdHJhbnNsYXRvcl9j
b21tb247Ci0JCQlwcm9kdWN0TmFtZSA9IHRyYW5zbGF0b3JfY29tbW9uOwotCQkJcHJvZHVjdFJl
ZmVyZW5jZSA9IDNERERDNzcyMTYyMDJBNERFMTgwOEJEQiAvKiBsaWJ0cmFuc2xhdG9yX2NvbW1v
bi5hICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5
LnN0YXRpYyI7Ci0JCX07Ci0JCUZCM0M1MDU1MTFGNzkyNEEwMDgxRjVCQSAvKiBhbmdsZSAqLyA9
IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3Qg
PSBGQjNDNTA1QjExRjc5MjRBMDA4MUY1QkEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZv
ciBQQlhOYXRpdmVUYXJnZXQgImFuZ2xlIiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCUZC
M0M1MDU2MTFGNzkyNEEwMDgxRjVCQSAvKiBTb3VyY2VzICovLAotCQkJCUZCM0M1MDVBMTFGNzky
NEEwMDgxRjVCQSAvKiBGcmFtZXdvcmtzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAoCi0J
CQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJCUZCM0M1MEQxMTFGNzlDQ0MwMDgxRjVCQSAv
KiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAotCQkJKTsKLQkJCW5hbWUgPSBhbmdsZTsKLQkJCXBy
b2R1Y3ROYW1lID0gdHJhbnNsYXRvcl9nbHNsOwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEZCM0M1
MDVEMTFGNzkyNEEwMDgxRjVCQSAvKiBsaWJhbmdsZS5hICovOwotCQkJcHJvZHVjdFR5cGUgPSAi
Y29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7Ci0JCX07Ci0vKiBFbmQgUEJY
TmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICov
Ci0JCURBMTg4RDhDNkJGODA3MzEyMjUzOTEzMSAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKLQkJ
CWlzYSA9IFBCWFByb2plY3Q7Ci0JCQlhdHRyaWJ1dGVzID0gewotCQkJCUJ1aWxkSW5kZXBlbmRl
bnRUYXJnZXRzSW5QYXJhbGxlbCA9IFlFUzsKLQkJCX07Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25M
aXN0ID0gMEU1OUY4RkU0QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYUHJvamVjdCAiYnVpbGRfYW5nbGUiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNp
b24gPSAiWGNvZGUgMy4xIjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKLQkJCWhh
c1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwotCQkJa25vd25SZWdpb25zID0gKAotCQkJCUVuZ2xp
c2gsCi0JCQkJSmFwYW5lc2UsCi0JCQkJRnJlbmNoLAotCQkJCUdlcm1hbiwKLQkJCSk7Ci0JCQlt
YWluR3JvdXAgPSA1QkJFRkY5QjkxNzM4Mjk3Qjk1QzU2OEQ7Ci0JCQlwcm9qZWN0RGlyUGF0aCA9
ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0JCQkJMTU2M0Q5OTE2
QkZEQUQ4NTMwMzJDRTFBIC8qIEFsbCAqLywKLQkJCQk2RjRGRDM1Q0IzREZDODlENzBFQ0Q0MzIg
LyogdHJhbnNsYXRvcl9jb21tb24gKi8sCi0JCQkJMzEzNDlENjY1RkFFNjQyQUVCNDkxMzVFIC8q
IEFOR0xFIFN1cHBvcnQgKi8sCi0JCQkJRkIzQzUwNTUxMUY3OTI0QTAwODFGNUJBIC8qIGFuZ2xl
ICovLAotCQkJKTsKLQkJfTsKLS8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQotLyogQmVn
aW4gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMEQ1MTNGOEI5MjM5NDlD
MTU2REIwMkM1IC8qIEFjdGlvbiAiYmlzb25fZ2xzbGFuZyIgKi8gPSB7Ci0JCQlpc2EgPSBQQlhT
aGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owot
CQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRQYXRocyA9ICgKLQkJCQljb21waWxlci9nbHNs
YW5nLnksCi0JCQkpOwotCQkJbmFtZSA9ICJBY3Rpb24gXCJiaXNvbl9nbHNsYW5nXCIiOwotCQkJ
b3V0cHV0UGF0aHMgPSAoCi0JCQkJIiQoSU5URVJNRURJQVRFX0RJUikvZ2xzbGFuZ190YWIuY3Bw
IiwKLQkJCQkiJChJTlRFUk1FRElBVEVfRElSKS9nbHNsYW5nX3RhYi5oIiwKLQkJCSk7Ci0JCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJCXNoZWxsUGF0aCA9IC9i
aW4vc2g7Ci0JCQlzaGVsbFNjcmlwdCA9ICJlY2hvIG5vdGU6IFwiRXhlY3V0aW5nIGJpc29uIG9u
IGNvbXBpbGVyL2dsc2xhbmcueVwiXG5leGVjIGJpc29uIC0tbm8tbGluZXMgXCItLWRlZmluZXM9
JHtJTlRFUk1FRElBVEVfRElSfS9nbHNsYW5nX3RhYi5oXCIgXCItLXNrZWxldG9uPXlhY2MuY1wi
IFwiLS1vdXRwdXQ9JHtJTlRFUk1FRElBVEVfRElSfS9nbHNsYW5nX3RhYi5jcHBcIiBjb21waWxl
ci9nbHNsYW5nLnlcbmV4aXQgMVxuIjsKLQkJCXNob3dFbnZWYXJzSW5Mb2cgPSAwOwotCQl9Owot
CQlGQTBENzEyNURCMDZBN0E3NzE2QTU5MTAgLyogQWN0aW9uICJmbGV4X2dsc2xhbmciICovID0g
ewotCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCWlucHV0UGF0aHMgPSAoCi0J
CQkJY29tcGlsZXIvZ2xzbGFuZy5sLAotCQkJKTsKLQkJCW5hbWUgPSAiQWN0aW9uIFwiZmxleF9n
bHNsYW5nXCIiOwotCQkJb3V0cHV0UGF0aHMgPSAoCi0JCQkJIiQoSU5URVJNRURJQVRFX0RJUikv
Z2xzbGFuZy5jcHAiLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwotCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKLQkJCXNoZWxsU2NyaXB0ID0gImVjaG8g
bm90ZTogXCJFeGVjdXRpbmcgZmxleCBvbiBjb21waWxlci9nbHNsYW5nLmxcIlxuZXhlYyBmbGV4
IC0tbm9saW5lIC0tbm91bmlzdGQgXCItLW91dGZpbGU9JHtJTlRFUk1FRElBVEVfRElSfS9nbHNs
YW5nLmNwcFwiIGNvbXBpbGVyL2dsc2xhbmcubFxuZXhpdCAxXG4iOwotCQkJc2hvd0VudlZhcnNJ
bkxvZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24g
Ki8KLQotLyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQlFQUEyMkNB
NjNGRDU3MkZDQ0I5MTNEMjIgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJjZXNC
dWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0g
KAotCQkJCTg4OEYxMzgyNDk4RTJENzRBRjI4MDFDOCAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlCRUJCRjRGMDgxOUVBM0QwMzk3N0E4RkMgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMzA2NUQyOUU5N0ZBQzZFMTI3Mzg4RDE1IC8qIEluaXRpYWxpemUuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMEEyMTY5NDkxMDNFMUUyMjhGOUMxMkYwIC8qIEluaXRpYWxpemVE
bGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTBERjAwMDA1Q0M0MjEyRjZGQjEyOTFEIC8qIElu
dGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0MEZDMTg5QjhBMjQ2RURGMTRDMkZE
RTMgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUY1QUUyQTI5MkRGQUY4QzE1
ODQxMkFBMiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5RThERkUx
Q0NFRjAzOEJGMkI2NTQyOEMgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2
RjlGODc1MDE3QTY4QUJFNUQzOUZGMTkgLyogUGFyc2VIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJRTFDN0M1REZGMEIyREZFQzA5Mzg3RjRFIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkwNTU2M0FERkVBMTUxMTZENzIzMzMzMkYgLyogUXVhbGlmaWVyQWxpdmUuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQUMyM0Y1OEZERDNDNTVGNUNBMThFRUQ3IC8qIFJlbW92ZVRy
ZWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjhCRDI2ODVBMTZCMTg4Q0NERkIwNTJCIC8qIFNo
YWRlckxhbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRjZBQkQ1OEY4Q0FCNzY0MUQ4QkZFOTM1
IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTMyQjFEQkNENkI4M0YyMTQ2
RDc4N0E2MiAvKiBhdG9tLmMgaW4gU291cmNlcyAqLywKLQkJCQlDQjdGMEVGMEQ2QTg5RkE4QzRE
RjU1MTMgLyogY3BwLmMgaW4gU291cmNlcyAqLywKLQkJCQkzNUJFMUJCRUU2MTM1QTFDQjA2MDhF
QTggLyogY3Bwc3RydWN0LmMgaW4gU291cmNlcyAqLywKLQkJCQkzQTk2RTlDQUM4QTI1QUYxNTY0
QjY1MkMgLyogbWVtb3J5LmMgaW4gU291cmNlcyAqLywKLQkJCQlGMDk4RjQ2M0VEQUJDRjA3Njkw
MDc2NzggLyogc2Nhbm5lci5jIGluIFNvdXJjZXMgKi8sCi0JCQkJQUQ4NTUxN0YwODZGRENFRjM5
NDdDNDAzIC8qIHN5bWJvbHMuYyBpbiBTb3VyY2VzICovLAotCQkJCUU4QzcyN0FBOEU5REM1RTdC
NTg4NTdERiAvKiB0b2tlbnMuYyBpbiBTb3VyY2VzICovLAotCQkJCUFCQTVDNjFCMUI3OEI5QThE
NjlGNkFFQyAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBENDA2NDE2NzM5OEE2
ODkyODA5QTA5RSAvKiBnbHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNDg1ODQx
N0U1NDM2NUJFOENERTM5MTkgLyogb3Nzb3VyY2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0J
CUZCM0M1MDU2MTFGNzkyNEEwMDgxRjVCQSAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJY
U291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJ
ZmlsZXMgPSAoCi0JCQkJRkIzQzUwQUIxMUY3OTUxQjAwODFGNUJBIC8qIFRyYW5zbGF0b3JHTFNM
LmggaW4gU291cmNlcyAqLywKLQkJCQlGQjNDNTBBQzExRjc5NTFCMDA4MUY1QkEgLyogT3V0cHV0
R0xTTC5oIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzQzUwQTQxMUY3OTRGRjAwODFGNUJBIC8qIGF0
b20uYyBpbiBTb3VyY2VzICovLAotCQkJCUZCM0M1MEE1MTFGNzk0RkYwMDgxRjVCQSAvKiBjcHAu
YyBpbiBTb3VyY2VzICovLAotCQkJCUZCM0M1MEE2MTFGNzk0RkYwMDgxRjVCQSAvKiBjcHBzdHJ1
Y3QuYyBpbiBTb3VyY2VzICovLAotCQkJCUZCM0M1MEE3MTFGNzk0RkYwMDgxRjVCQSAvKiBtZW1v
cnkuYyBpbiBTb3VyY2VzICovLAotCQkJCUZCM0M1MEE4MTFGNzk0RkYwMDgxRjVCQSAvKiBzY2Fu
bmVyLmMgaW4gU291cmNlcyAqLywKLQkJCQlGQjNDNTBBOTExRjc5NEZGMDA4MUY1QkEgLyogc3lt
Ym9scy5jIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzQzUwQUExMUY3OTRGRjAwODFGNUJBIC8qIHRv
a2Vucy5jIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzQzUwOEUxMUY3OTQ5RTAwODFGNUJBIC8qIGds
c2xhbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzQzUwNTcxMUY3OTI0QTAwODFGNUJBIC8q
IENvZGVHZW5HTFNMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCM0M1MDkyMTFGNzk0Q0UwMDgx
RjVCQSAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjNDNTA5MzExRjc5NENFMDA4
MUY1QkEgLyogSW5mb1NpbmsuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzQzUwOTQxMUY3OTRD
RTAwODFGNUJBIC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzQzUwOTUx
MUY3OTRDRTAwODFGNUJBIC8qIEluaXRpYWxpemVEbGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
RkIzQzUwOTYxMUY3OTRDRTAwODFGNUJBIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlGQjNDNTA5NzExRjc5NENFMDA4MUY1QkEgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUZCM0M1MDk4MTFGNzk0Q0UwMDgxRjVCQSAvKiBJbnRlcm1UcmF2ZXJzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjNDNTA5QTExRjc5NENFMDA4MUY1QkEgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzQzUwNTgxMUY3OTI0QTAwODFGNUJB
IC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzQzUwOUIxMUY3OTRDRTAw
ODFGNUJBIC8qIHBhcnNlQ29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzQzUwOUMxMUY3
OTRDRTAwODFGNUJBIC8qIFBhcnNlSGVscGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCM0M1
MDlEMTFGNzk0Q0UwMDgxRjVCQSAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
RkIzQzUwOUUxMUY3OTRDRTAwODFGNUJBIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUZCM0M1MDlGMTFGNzk0Q0UwMDgxRjVCQSAvKiBSZW1vdmVUcmVlLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUZCM0M1MEEwMTFGNzk0Q0UwMDgxRjVCQSAvKiBTaGFkZXJMYW5nLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUZCM0M1MEExMTFGNzk0Q0UwMDgxRjVCQSAvKiBTeW1ib2xU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjNDNTA1OTExRjc5MjRBMDA4MUY1QkEgLyog
VHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkIzQzUwOEYxMUY3OTQ5RTAw
ODFGNUJBIC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAotCQkJKTsKLQkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWFNvdXJj
ZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBz
ZWN0aW9uICovCi0JCTI5MUVFMDQyMDJFQzc5Njc4MzVGQ0MzOCAvKiBQQlhUYXJnZXREZXBlbmRl
bmN5ICovID0gewotCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKLQkJCXRhcmdldCA9IDMx
MzQ5RDY2NUZBRTY0MkFFQjQ5MTM1RSAvKiBBTkdMRSBTdXBwb3J0ICovOwotCQkJdGFyZ2V0UHJv
eHkgPSBFNjlCRkJFMkQxMjcyNjIwRTQ2QzNGOEEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
OwotCQl9OwotCQlGQjNDNTA2NDExRjc5Mjk3MDA4MUY1QkEgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLyA9IHsKLQkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7Ci0JCQl0YXJnZXQgPSBGQjND
NTA1NTExRjc5MjRBMDA4MUY1QkEgLyogYW5nbGUgKi87Ci0JCQl0YXJnZXRQcm94eSA9IEZCM0M1
MDYzMTFGNzkyOTcwMDgxRjVCQSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87Ci0JCX07Ci0J
CUZCM0M1MEQxMTFGNzlDQ0MwMDgxRjVCQSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewot
CQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKLQkJCXRhcmdldCA9IDMxMzQ5RDY2NUZBRTY0
MkFFQjQ5MTM1RSAvKiBBTkdMRSBTdXBwb3J0ICovOwotCQkJdGFyZ2V0UHJveHkgPSBGQjNDNTBE
MDExRjc5Q0NDMDA4MUY1QkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwotCQl9OwotLyog
RW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBYQ0J1aWxkQ29u
ZmlndXJhdGlvbiBzZWN0aW9uICovCi0JCTAwQkYyRUJDQkRGNTY3OEY0QkEyRkE5MiAvKiBEZWZh
dWx0ICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQlidWlsZFNldHRp
bmdzID0gewotCQkJCVBST0RVQ1RfTkFNRSA9ICJ0cmFuc2xhdG9yX2NvbW1vbiBTdXBwb3J0IjsK
LQkJCX07Ci0JCQluYW1lID0gRGVmYXVsdDsKLQkJfTsKLQkJMUExMkFBNUQ2NUFDREU3MUFFMDg5
RUUzIC8qIERlZmF1bHQgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJ
CWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gQWxsOwotCQkJfTsKLQkJCW5h
bWUgPSBEZWZhdWx0OwotCQl9OwotCQkxRjNGMTIxOEI1MTM1RkJCMDY3REU4MDkgLyogRGVmYXVs
dCAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYnVpbGRTZXR0aW5n
cyA9IHsKLQkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKLQkJCQlIRUFERVJfU0VBUkNIX1BB
VEhTID0gKAotCQkJCQkuLAotCQkJCQkuLi9pbmNsdWRlLAotCQkJCSk7Ci0JCQkJUFJPRFVDVF9O
QU1FID0gdHJhbnNsYXRvcl9jb21tb247Ci0JCQl9OwotCQkJbmFtZSA9IERlZmF1bHQ7Ci0JCX07
Ci0JCUJDNTc5M0M5QTFGRjAyMUE4MUM2NjU1OSAvKiBEZWZhdWx0ICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCUFSQ0hTID0g
IiQoQVJDSFNfU1RBTkRBUkRfNjRfQklUKSI7Ci0JCQkJQ09ORklHVVJBVElPTl9CVUlMRF9ESVIg
PSAiJChCVUlMRF9ESVIpLyQoQ09ORklHVVJBVElPTikkKEVGRkVDVElWRV9QTEFURk9STV9OQU1F
KSI7Ci0JCQkJSU5URVJNRURJQVRFX0RJUiA9ICIkKFBST0pFQ1RfREVSSVZFRF9GSUxFX0RJUikv
JChDT05GSUdVUkFUSU9OKSI7Ci0JCQkJT0JKUk9PVCA9ICIiOwotCQkJCU9OTFlfQUNUSVZFX0FS
Q0ggPSBZRVM7Ci0JCQkJU0hBUkVEX0lOVEVSTUVESUFURV9ESVIgPSAiJChTWU1ST09UKS9EZXJp
dmVkU291cmNlcy8kKENPTkZJR1VSQVRJT04pIjsKLQkJCQlTWU1ST09UID0gIiQoQlVJTERfRElS
KSI7Ci0JCQl9OwotCQkJbmFtZSA9IERlZmF1bHQ7Ci0JCX07Ci0JCUZCM0M1MDVDMTFGNzkyNEEw
MDgxRjVCQSAvKiBEZWZhdWx0ICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOwotCQkJ
CUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCi0JCQkJCS4sCi0JCQkJCS4uL2luY2x1ZGUsCi0JCQkJ
KTsKLQkJCQlQUk9EVUNUX05BTUUgPSBhbmdsZTsKLQkJCX07Ci0JCQluYW1lID0gRGVmYXVsdDsK
LQkJfTsKLS8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0KLS8qIEJlZ2lu
IFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQkwQUE1NDgyNUJGNURGMEEzRkJBOTJC
NjAgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFO
R0xFIFN1cHBvcnQiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1
aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMDBCRjJFQkNCREY1Njc4RjRCQTJGQTkyIC8qIERl
ZmF1bHQgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAxOwot
CQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVmYXVsdDsKLQkJfTsKLQkJMEU1OUY4RkU0
QTgwOTlFOEREQ0E0Q0U3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiYnVpbGRfYW5nbGUiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJ
CWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJQkM1NzkzQzlBMUZGMDIxQTgxQzY2NTU5IC8q
IERlZmF1bHQgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAx
OwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gRGVmYXVsdDsKLQkJfTsKLQkJMzRCQjM4
RTNBNzQ0MThCMkEwNjNCNDlFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0
aXZlVGFyZ2V0ICJ0cmFuc2xhdG9yX2NvbW1vbiIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3Vy
YXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkxRjNGMTIxOEI1MTM1
RkJCMDY3REU4MDkgLyogRGVmYXVsdCAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlv
bklzVmlzaWJsZSA9IDE7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0Owot
CQl9OwotCQk3N0NFRkI3QjQwRjA1QjBBODA0RTZCMkIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIkFsbCIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZp
Z3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkxQTEyQUE1RDY1
QUNERTcxQUUwODlFRTMgLyogRGVmYXVsdCAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJh
dGlvbklzVmlzaWJsZSA9IDE7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBEZWZhdWx0
OwotCQl9OwotCQlGQjNDNTA1QjExRjc5MjRBMDA4MUY1QkEgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImFuZ2xlIiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29u
ZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCUZCM0M1MDVD
MTFGNzkyNEEwMDgxRjVCQSAvKiBEZWZhdWx0ICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1
cmF0aW9uSXNWaXNpYmxlID0gMTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IERlZmF1
bHQ7Ci0JCX07Ci0vKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JfTsKLQly
b290T2JqZWN0ID0gREExODhEOEM2QkY4MDczMTIyNTM5MTMxIC8qIFByb2plY3Qgb2JqZWN0ICov
OwotfQpJbmRleDogQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUv
c3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTggKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gYW5nbGV1dGlscy5oOiBDb21tb24gQU5HTEUgdXRpbGl0
aWVzLgotCi0jaWZuZGVmIENPTU1PTl9BTkdMRVVUSUxTX0hfCi0jZGVmaW5lIENPTU1PTl9BTkdM
RVVUSUxTX0hfCi0KLS8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgdGhlIGNvcHkgY29uc3RydWN0b3Ig
YW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMKLS8vIFRoaXMgbXVzdCBiZSB1c2VkIGluIHRoZSBwcml2
YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MKLSNkZWZpbmUgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFR5cGVOYW1lKSBcCi0gIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAg
ICAgICAgXAotICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCi0KLSNlbmRpZiAvLyBD
T01NT05fQU5HTEVVVElMU19IXwpJbmRleDogQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAJKHJldmlzaW9uIDc0NjU4KQor
KysgQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzggKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gZGVidWcuY3BwOiBEZWJ1Z2dpbmcgdXRpbGl0
aWVzLgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlIDxzdGRpby5oPgot
I2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1zdGF0aWMgYm9vbCB0cmFjZV9vbiA9IHRydWU7Ci0KLW5h
bWVzcGFjZSBnbAotewotdm9pZCB0cmFjZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAg
ICBpZiAodHJhY2Vfb24pCi0gICAgewotICAgICAgICBpZiAoZm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBGSUxFICpmaWxlID0gZm9wZW4oImRlYnVnLnR4dCIsICJhIik7Ci0KLSAgICAg
ICAgICAgIGlmIChmaWxlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhX2xpc3Qg
dmFyYXJnOwotICAgICAgICAgICAgICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICAg
ICAgICAgICAgICB2ZnByaW50ZihmaWxlLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgICAgICAgICAg
ICAgdmFfZW5kKHZhcmFyZyk7Ci0KLSAgICAgICAgICAgICAgICBmY2xvc2UoZmlsZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci19CkluZGV4OiBBTkdMRS9zcmMvY29tbW9u
L2RlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCShyZXZpc2lv
biA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21tb24vZGVidWcuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2NSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBkZWJ1Zy5oOiBEZWJ1Z2dpbmcg
dXRpbGl0aWVzLgotCi0jaWZuZGVmIENPTU1PTl9ERUJVR19IXwotI2RlZmluZSBDT01NT05fREVC
VUdfSF8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KLW5hbWVz
cGFjZSBnbAotewotICAgIC8vIE91dHB1dHMgdGV4dCB0byB0aGUgZGVidWdnaW5nIGxvZwotICAg
IHZvaWQgdHJhY2UoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwotfQotCi0vLyBBIG1hY3JvIHRv
IG91dHB1dCBhIHRyYWNlIG9mIGEgZnVuY3Rpb24gY2FsbCBhbmQgaXRzIGFyZ3VtZW50cyB0byB0
aGUgZGVidWdnaW5nIGxvZwotI2lmbmRlZiBOREVCVUcKLSAgICAjZGVmaW5lIFRSQUNFKG1lc3Nh
Z2UsIC4uLikgZ2w6OnRyYWNlKCJ0cmFjZTogJXMibWVzc2FnZSJcbiIsIF9fRlVOQ1RJT05fXywg
X19WQV9BUkdTX18pCi0jZWxzZQotICAgICNkZWZpbmUgVFJBQ0UoLi4uKSAoKHZvaWQpMCkKLSNl
bmRpZgotCi0vLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwgYW5kIGl0cyBhcmd1
bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIHRvIGRlbm90ZSBhbiBpdGVtIGluIG5lZWQgb2Yg
Zml4aW5nLiBXaWxsIG9jY3VyIGV2ZW4gaW4gcmVsZWFzZSBtb2RlLgotI2RlZmluZSBGSVhNRSht
ZXNzYWdlLCAuLi4pIGdsOjp0cmFjZSgiZml4bWU6ICVzIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9O
X18sIF9fVkFfQVJHU19fKQotCi0vLyBBIG1hY3JvIHRvIG91dHB1dCBhIGZ1bmN0aW9uIGNhbGwg
YW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2csIGluIGNhc2Ugb2YgZXJyb3Iu
IFdpbGwgb2NjdXIgZXZlbiBpbiByZWxlYXNlIG1vZGUuCi0jZGVmaW5lIEVSUihtZXNzYWdlLCAu
Li4pIGdsOjp0cmFjZSgiZXJyOiAlcyJtZXNzYWdlIlxuIiwgX19GVU5DVElPTl9fLCBfX1ZBX0FS
R1NfXykKLQotLy8gQSBtYWNybyBhc3NlcnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcg
ZmFpbHVyZXMgdG8gdGhlIGRlYnVnIGxvZwotI2RlZmluZSBBU1NFUlQoZXhwcmVzc2lvbikgZG8g
eyBcCi0gICAgaWYoIShleHByZXNzaW9uKSkgXAotICAgICAgICBFUlIoIlx0ISBBc3NlcnQgZmFp
bGVkIGluICVzKCVkKTogIiNleHByZXNzaW9uIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7
IFwKLSAgICBhc3NlcnQoZXhwcmVzc2lvbik7IFwKLSAgICB9IHdoaWxlKDApCi0KLQotLy8gQSBt
YWNybyB0byBpbmRpY2F0ZSB1bmltcGxlbWVudGVkIGZ1bmN0aW9uYWxpdHkKLSNpZm5kZWYgTkRF
QlVHCi0gICAgI2RlZmluZSBVTklNUExFTUVOVEVEKCkgZG8geyBcCi0gICAgICAgIEZJWE1FKCJc
dCEgVW5pbXBsZW1lbnRlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAot
ICAgICAgICBhc3NlcnQoZmFsc2UpOyBcCi0gICAgICAgIH0gd2hpbGUoMCkKLSNlbHNlCi0gICAg
I2RlZmluZSBVTklNUExFTUVOVEVEKCkgRklYTUUoIlx0ISBVbmltcGxlbWVudGVkOiAlcyglZClc
biIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCi0jZW5kaWYKLQotLy8gQSBtYWNybyBmb3IgY29k
ZSB3aGljaCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgcmVhY2hlZCB1bmRlciB2YWxpZCBhc3N1bXB0
aW9ucwotI2lmbmRlZiBOREVCVUcKLSAgICAjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgZG8geyBcCi0g
ICAgICAgIEVSUigiXHQhIFVucmVhY2hhYmxlIHJlYWNoZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElP
Tl9fLCBfX0xJTkVfXyk7IFwKLSAgICAgICAgYXNzZXJ0KGZhbHNlKTsgXAotICAgICAgICB9IHdo
aWxlKDApCi0jZWxzZQotICAgICNkZWZpbmUgVU5SRUFDSEFCTEUoKSBFUlIoIlx0ISBVbnJlYWNo
YWJsZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCi0jZW5kaWYK
LQotLy8gQSBtYWNybyBmdW5jdGlvbmluZyBhcyBhIGNvbXBpbGUtdGltZSBhc3NlcnQgdG8gdmFs
aWRhdGUgY29uc3RhbnQgY29uZGl0aW9ucwotI2RlZmluZSBNRVRBX0FTU0VSVChjb25kaXRpb24p
IHR5cGVkZWYgaW50IENPTVBJTEVfVElNRV9BU1NFUlRfIyNfX0xJTkVfX1tzdGF0aWNfY2FzdDxi
b29sPihjb25kaXRpb24pPzE6LTFdCi0KLSNlbmRpZiAgIC8vIENPTU1PTl9ERUJVR19IXwpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9jb21waWxlci9CYXNlVHlwZXMuaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvY29t
cGlsZXIvQmFzZVR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ3ICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCi0jZGVmaW5lIF9C
QVNJQ1RZUEVTX0lOQ0xVREVEXwotCi0vLwotLy8gUHJlY2lzaW9uIHF1YWxpZmllcnMKLS8vCi1l
bnVtIFRQcmVjaXNpb24KLXsKLSAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGtlcHQgc29ydGVkCi0g
ICAgRWJwVW5kZWZpbmVkLAotICAgIEVicExvdywKLSAgICBFYnBNZWRpdW0sCi0gICAgRWJwSGln
aCwKLX07Ci0KLWlubGluZSBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoVFByZWNpc2lv
biBwKQotewotICAgIHN3aXRjaChwKQotICAgIHsKLSAgICBjYXNlIEVicEhpZ2g6CQlyZXR1cm4g
ImhpZ2hwIjsJCWJyZWFrOwotICAgIGNhc2UgRWJwTWVkaXVtOgkJcmV0dXJuICJtZWRpdW1wIjsJ
YnJlYWs7Ci0gICAgY2FzZSBFYnBMb3c6CQlyZXR1cm4gImxvd3AiOwkJYnJlYWs7Ci0gICAgZGVm
YXVsdDoJCQlyZXR1cm4gIm1lZGl1bXAiOyAgIGJyZWFrOyAgIC8vIFNhZmVzdCBmYWxsYmFjawot
ICAgIH0KLX0KLQotLy8KLS8vIEJhc2ljIHR5cGUuICBBcnJheXMsIHZlY3RvcnMsIGV0Yy4sIGFy
ZSBvcnRob2dvbmFsIHRvIHRoaXMuCi0vLwotZW51bSBUQmFzaWNUeXBlCi17Ci0gICAgRWJ0Vm9p
ZCwKLSAgICBFYnRGbG9hdCwKLSAgICBFYnRJbnQsCi0gICAgRWJ0Qm9vbCwKLSAgICBFYnRHdWFy
ZFNhbXBsZXJCZWdpbiwgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxlbWVudGF0aW9uIG9mIElzU2Ft
cGxlcigpCi0gICAgRWJ0U2FtcGxlcjJELAotICAgIEVidFNhbXBsZXJDdWJlLAotICAgIEVidEd1
YXJkU2FtcGxlckVuZCwgICAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNT
YW1wbGVyKCkKLSAgICBFYnRTdHJ1Y3QsCi0gICAgRWJ0QWRkcmVzcywgICAgICAgICAgICAvLyBz
aG91bGQgYmUgZGVwcmVjYXRlZD8/Ci19OwotCi1pbmxpbmUgY29uc3QgY2hhciogZ2V0QmFzaWNT
dHJpbmcoVEJhc2ljVHlwZSB0KQotewotICAgIHN3aXRjaCAodCkKLSAgICB7Ci0gICAgY2FzZSBF
YnRWb2lkOiAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOyAgICAgICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEVidEludDogICAgICAgICAgICAgICByZXR1cm4gImludCI7ICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgcmV0dXJu
ICJib29sIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAg
ICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlOiAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlIjsgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0eXBlIjsK
LSAgICB9Ci19Ci0KLWlubGluZSBib29sIElzU2FtcGxlcihUQmFzaWNUeXBlIHR5cGUpCi17Ci0g
ICAgcmV0dXJuIHR5cGUgPiBFYnRHdWFyZFNhbXBsZXJCZWdpbiAmJiB0eXBlIDwgRWJ0R3VhcmRT
YW1wbGVyRW5kOwotfQotCi0vLwotLy8gUXVhbGlmaWVycyBhbmQgYnVpbHQtaW5zLiAgVGhlc2Ug
YXJlIG1haW5seSB1c2VkIHRvIHNlZSB3aGF0IGNhbiBiZSByZWFkCi0vLyBvciB3cml0dGVuLCBh
bmQgYnkgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHRyYW5zbGF0b3IgdG8ga25vdyB3aGljaCByZWdp
c3RlcnMKLS8vIHRvIGFsbG9jYXRlIHZhcmlhYmxlcyBpbi4gIFNpbmNlIGJ1aWx0LWlucyB0ZW5k
IHRvIGdvIHRvIGRpZmZlcmVudCByZWdpc3RlcnMKLS8vIHRoYW4gdmFyeWluZyBvciB1bmlmb3Jt
LCBpdCBtYWtlcyBzZW5zZSB0aGV5IGFyZSBwZWVycywgbm90IHN1Yi1jbGFzc2VzLgotLy8KLWVu
dW0gVFF1YWxpZmllcgotewotICAgIEV2cVRlbXBvcmFyeSwgICAgIC8vIEZvciB0ZW1wb3Jhcmll
cyAod2l0aGluIGEgZnVuY3Rpb24pLCByZWFkL3dyaXRlCi0gICAgRXZxR2xvYmFsLCAgICAgICAg
Ly8gRm9yIGdsb2JhbHMgcmVhZC93cml0ZQotICAgIEV2cUNvbnN0LCAgICAgICAgIC8vIFVzZXIg
ZGVmaW5lZCBjb25zdGFudHMgYW5kIG5vbi1vdXRwdXQgcGFyYW1ldGVycyBpbiBmdW5jdGlvbnMK
LSAgICBFdnFBdHRyaWJ1dGUsICAgICAvLyBSZWFkb25seQotICAgIEV2cVZhcnlpbmdJbiwgICAg
IC8vIHJlYWRvbmx5LCBmcmFnbWVudCBzaGFkZXJzIG9ubHkKLSAgICBFdnFWYXJ5aW5nT3V0LCAg
ICAvLyB2ZXJ0ZXggc2hhZGVycyBvbmx5ICByZWFkL3dyaXRlCi0gICAgRXZxSW52YXJpYW50VmFy
eWluZ0luLCAgICAgLy8gcmVhZG9ubHksIGZyYWdtZW50IHNoYWRlcnMgb25seQotICAgIEV2cUlu
dmFyaWFudFZhcnlpbmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUK
LSAgICBFdnFVbmlmb3JtLCAgICAgICAvLyBSZWFkb25seSwgdmVydGV4IGFuZCBmcmFnbWVudAot
Ci0gICAgLy8gcGFjay91bnBhY2sgaW5wdXQgYW5kIG91dHB1dAotICAgIEV2cUlucHV0LAotICAg
IEV2cU91dHB1dCwKLQotICAgIC8vIHBhcmFtZXRlcnMKLSAgICBFdnFJbiwKLSAgICBFdnFPdXQs
Ci0gICAgRXZxSW5PdXQsCi0gICAgRXZxQ29uc3RSZWFkT25seSwKLQotICAgIC8vIGJ1aWx0LWlu
cyB3cml0dGVuIGJ5IHZlcnRleCBzaGFkZXIKLSAgICBFdnFQb3NpdGlvbiwKLSAgICBFdnFQb2lu
dFNpemUsCi0KLSAgICAvLyBidWlsdC1pbnMgcmVhZCBieSBmcmFnbWVudCBzaGFkZXIKLSAgICBF
dnFGcmFnQ29vcmQsCi0gICAgRXZxRnJvbnRGYWNpbmcsCi0gICAgRXZxUG9pbnRDb29yZCwKLQot
ICAgIC8vIGJ1aWx0LWlucyB3cml0dGVuIGJ5IGZyYWdtZW50IHNoYWRlcgotICAgIEV2cUZyYWdD
b2xvciwKLSAgICBFdnFGcmFnRGF0YSwKLQotICAgIC8vIGVuZCBvZiBsaXN0Ci0gICAgRXZxTGFz
dCwKLX07Ci0KLS8vCi0vLyBUaGlzIGlzIGp1c3QgZm9yIGRlYnVnIHByaW50IG91dCwgY2Fycmll
ZCBhbG9uZyB3aXRoIHRoZSBkZWZpbml0aW9ucyBhYm92ZS4KLS8vCi1pbmxpbmUgY29uc3QgY2hh
ciogZ2V0UXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcSkKLXsKLSAgICBzd2l0Y2gocSkKLSAg
ICB7Ci0gICAgY2FzZSBFdnFUZW1wb3Jhcnk6ICAgICAgcmV0dXJuICJUZW1wb3JhcnkiOyAgICAg
IGJyZWFrOwotICAgIGNhc2UgRXZxR2xvYmFsOiAgICAgICAgIHJldHVybiAiR2xvYmFsIjsgICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEV2cUNvbnN0OiAgICAgICAgICByZXR1cm4gImNvbnN0Ijsg
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFDb25zdFJlYWRPbmx5OiAgcmV0dXJuICJjb25z
dCI7ICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxQXR0cmlidXRlOiAgICAgIHJldHVybiAi
YXR0cmlidXRlIjsgICAgICBicmVhazsKLSAgICBjYXNlIEV2cVZhcnlpbmdJbjogICAgICByZXR1
cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAg
cmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxSW52YXJpYW50VmFy
eWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7Ci0gICAgY2FzZSBFdnFJ
bnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJpYW50IHZhcnlpbmciOwlicmVhazsKLSAg
ICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICByZXR1cm4gInVuaWZvcm0iOyAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFdnFJbjogICAgICAgICAgICAgcmV0dXJuICJpbiI7ICAgICAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXZxT3V0OiAgICAgICAgICAgIHJldHVybiAib3V0IjsgICAgICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEV2cUluT3V0OiAgICAgICAgICByZXR1cm4gImlub3V0IjsgICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnB1dDogICAgICAgICAgcmV0dXJuICJpbnB1dCI7
ICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxT3V0cHV0OiAgICAgICAgIHJldHVybiAib3V0
cHV0IjsgICAgICAgICBicmVhazsKLSAgICBjYXNlIEV2cVBvc2l0aW9uOiAgICAgICByZXR1cm4g
IlBvc2l0aW9uIjsgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFQb2ludFNpemU6ICAgICAgcmV0
dXJuICJQb2ludFNpemUiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAg
IHJldHVybiAiRnJhZ0Nvb3JkIjsgICAgICBicmVhazsKLSAgICBjYXNlIEV2cUZyb250RmFjaW5n
OiAgICByZXR1cm4gIkZyb250RmFjaW5nIjsgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFGcmFnQ29s
b3I6ICAgICAgcmV0dXJuICJGcmFnQ29sb3IiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxRnJh
Z0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
ICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biBxdWFsaWZpZXIiOwotICAgIH0KLX0KLQot
I2VuZGlmIC8vIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L0NvZGVHZW5HTFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvQ29kZUdl
bkdMU0wuY3BwCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Db2RlR2Vu
R0xTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgiCi0KLS8vCi0vLyBUaGlz
IGZ1bmN0aW9uIG11c3QgYmUgcHJvdmlkZWQgdG8gY3JlYXRlIHRoZSBhY3R1YWwKLS8vIGNvbXBp
bGUgb2JqZWN0IHVzZWQgYnkgaGlnaGVyIGxldmVsIGNvZGUuICBJdCByZXR1cm5zCi0vLyBhIHN1
YmNsYXNzIG9mIFRDb21waWxlci4KLS8vCi1UQ29tcGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKEVT
aExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMpCi17Ci0gICAgcmV0dXJuIG5ldyBUcmFu
c2xhdG9yR0xTTChsYW5ndWFnZSwgc3BlYyk7Ci19Ci0KLS8vCi0vLyBEZWxldGUgdGhlIGNvbXBp
bGVyIG1hZGUgYnkgQ29uc3RydWN0Q29tcGlsZXIKLS8vCi12b2lkIERlbGV0ZUNvbXBpbGVyKFRD
b21waWxlciogY29tcGlsZXIpCi17Ci0gICAgZGVsZXRlIGNvbXBpbGVyOwotfQpJbmRleDogQU5H
TEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
Y29tcGlsZXIvQ29kZUdlbkhMU0wuY3BwCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9j
b21waWxlci9Db2RlR2VuSExTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjUgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgi
Ci0KLS8vCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcHJvdmlkZWQgdG8gY3JlYXRlIHRoZSBh
Y3R1YWwKLS8vIGNvbXBpbGUgb2JqZWN0IHVzZWQgYnkgaGlnaGVyIGxldmVsIGNvZGUuICBJdCBy
ZXR1cm5zCi0vLyBhIHN1YmNsYXNzIG9mIFRDb21waWxlci4KLS8vCi1UQ29tcGlsZXIqIENvbnN0
cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMpCi17Ci0gICAg
cmV0dXJuIG5ldyBUcmFuc2xhdG9ySExTTChsYW5ndWFnZSwgc3BlYyk7Ci19Ci0KLS8vCi0vLyBE
ZWxldGUgdGhlIGNvbXBpbGVyIG1hZGUgYnkgQ29uc3RydWN0Q29tcGlsZXIKLS8vCi12b2lkIERl
bGV0ZUNvbXBpbGVyKFRDb21waWxlciogY29tcGlsZXIpCi17Ci0gICAgZGVsZXRlIGNvbXBpbGVy
OwotfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0NvbW1vbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9jb21waWxlci9Db21tb24uaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2lmbmRlZiBfQ09NTU9OX0lOQ0xVREVEXwotI2RlZmluZSBfQ09NTU9O
X0lOQ0xVREVEXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVk
ZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvbXBpbGVyL1Bvb2xB
bGxvYy5oIgotCi10eXBlZGVmIGludCBUU291cmNlTG9jOwotY29uc3QgdW5zaWduZWQgaW50IFNv
dXJjZUxvY0xpbmVNYXNrID0gMHhmZmZmOwotY29uc3QgdW5zaWduZWQgaW50IFNvdXJjZUxvY1N0
cmluZ1NoaWZ0ID0gMTY7Ci0KLS8vCi0vLyBQdXQgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSBp
biBiYXNlIGNsYXNzZXMgdG8gbWFrZSB0aGVtIHVzZSB0aGlzIHNjaGVtZS4KLS8vCi0jZGVmaW5l
IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoQSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QgcykgeyByZXR1cm4gKEEpLmFs
bG9jYXRlKHMpOyB9ICAgICAgICAgIFwKLSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2
b2lkICpfV2hlcmUpIHsgcmV0dXJuIChfV2hlcmUpOwl9ICAgICBcCi0gICAgdm9pZCBvcGVyYXRv
ciBkZWxldGUodm9pZCopIHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgdm9pZCAqKSB7IH0gICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QgcykgeyByZXR1
cm4gKEEpLmFsbG9jYXRlKHMpOyB9ICAgICAgICBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3W10o
c2l6ZV90LCB2b2lkICpfV2hlcmUpIHsgcmV0dXJuIChfV2hlcmUpOwl9IFwKLSAgICB2b2lkIG9w
ZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICosIHZvaWQgKikgeyB9Ci0KLS8v
Ci0vLyBQb29sIHZlcnNpb24gb2Ygc3RyaW5nLgotLy8KLXR5cGVkZWYgcG9vbF9hbGxvY2F0b3I8
Y2hhcj4gVFN0cmluZ0FsbG9jYXRvcjsKLXR5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmcgPGNoYXIs
IHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+IFRTdHJpbmc7Ci10eXBl
ZGVmIHN0ZDo6YmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+
LCBUU3RyaW5nQWxsb2NhdG9yPiBUU3RyaW5nU3RyZWFtOwotaW5saW5lIFRTdHJpbmcqIE5ld1Bv
b2xUU3RyaW5nKGNvbnN0IGNoYXIqIHMpCi17Ci0Jdm9pZCogbWVtb3J5ID0gR2xvYmFsUG9vbEFs
bG9jYXRvci5hbGxvY2F0ZShzaXplb2YoVFN0cmluZykpOwotCXJldHVybiBuZXcobWVtb3J5KSBU
U3RyaW5nKHMpOwotfQotCi0vLwotLy8gUGVyc2lzdGVudCBzdHJpbmcgbWVtb3J5LiAgU2hvdWxk
IG9ubHkgYmUgdXNlZCBmb3Igc3RyaW5ncyB0aGF0IHN1cnZpdmUKLS8vIGFjcm9zcyBjb21waWxl
cy4KLS8vCi0jZGVmaW5lIFRQZXJzaXN0U3RyaW5nIHN0ZDo6c3RyaW5nCi0jZGVmaW5lIFRQZXJz
aXN0U3RyaW5nU3RyZWFtIHN0ZDo6b3N0cmluZ3N0cmVhbQotCi0vLwotLy8gUG9vbCBhbGxvY2F0
b3IgdmVyc2lvbnMgb2YgdmVjdG9ycywgbGlzdHMsIGFuZCBtYXBzCi0vLwotdGVtcGxhdGUgPGNs
YXNzIFQ+IGNsYXNzIFRWZWN0b3IgOiBwdWJsaWMgc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0
b3I8VD4gPiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnZlY3RvcjxULCBw
b29sX2FsbG9jYXRvcjxUPiA+OjpzaXplX3R5cGUgc2l6ZV90eXBlOwotICAgIFRWZWN0b3IoKSA6
IHN0ZDo6dmVjdG9yPFQsIHBvb2xfYWxsb2NhdG9yPFQ+ID4oKSB7fQotICAgIFRWZWN0b3IoY29u
c3QgcG9vbF9hbGxvY2F0b3I8VD4mIGEpIDogc3RkOjp2ZWN0b3I8VCwgcG9vbF9hbGxvY2F0b3I8
VD4gPihhKSB7fQotICAgIFRWZWN0b3Ioc2l6ZV90eXBlIGkpOiBzdGQ6OnZlY3RvcjxULCBwb29s
X2FsbG9jYXRvcjxUPiA+KGkpIHt9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgSywgY2xhc3MgRCwg
Y2xhc3MgQ01QID0gc3RkOjpsZXNzPEs+ID4gCi1jbGFzcyBUTWFwIDogcHVibGljIHN0ZDo6bWFw
PEssIEQsIENNUCwgcG9vbF9hbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IEssIEQ+ID4gPiB7Ci1w
dWJsaWM6Ci0gICAgdHlwZWRlZiBwb29sX2FsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgSywgRD4g
PiB0QWxsb2NhdG9yOwotCi0gICAgVE1hcCgpIDogc3RkOjptYXA8SywgRCwgQ01QLCB0QWxsb2Nh
dG9yPigpIHt9Ci0gICAgLy8gdXNlIGNvcnJlY3QgdHdvLXN0YWdlIG5hbWUgbG9va3VwIHN1cHBv
cnRlZCBpbiBnY2MgMy40IGFuZCBhYm92ZQotICAgIFRNYXAoY29uc3QgdEFsbG9jYXRvciYgYSkg
OiBzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+KHN0ZDo6bWFwPEssIEQsIENNUCwgdEFs
bG9jYXRvcj46OmtleV9jb21wYXJlKCksIGEpIHt9Ci19OwotCi10eXBlZGVmIFRNYXA8VFN0cmlu
ZywgVFN0cmluZz4gVFByYWdtYVRhYmxlOwotCi0jZW5kaWYgLy8gX0NPTU1PTl9JTkNMVURFRF8K
SW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Db25zdGFudFVuaW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbnN0YW50VW5pb24uaAkocmV2aXNpb24gNzQ2NTgpCisrKyBB
TkdMRS9zcmMvY29tcGlsZXIvQ29uc3RhbnRVbmlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4
OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9DT05TVEFOVF9VTklPTl9J
TkNMVURFRF8KLSNkZWZpbmUgX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVEXwotCi0jaW5jbHVkZSA8
YXNzZXJ0Lmg+Ci0KLWNsYXNzIENvbnN0YW50VW5pb24gewotcHVibGljOgotCi0gICAgUE9PTF9B
TExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKSAgICAgICAgCi0gICAgdm9p
ZCBzZXRJQ29uc3QoaW50IGkpIHtpQ29uc3QgPSBpOyB0eXBlID0gRWJ0SW50OyB9Ci0gICAgdm9p
ZCBzZXRGQ29uc3QoZmxvYXQgZikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQotICAg
IHZvaWQgc2V0QkNvbnN0KGJvb2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9Ci0K
LSAgICBpbnQgZ2V0SUNvbnN0KCkgeyByZXR1cm4gaUNvbnN0OyB9Ci0gICAgZmxvYXQgZ2V0RkNv
bnN0KCkgeyByZXR1cm4gZkNvbnN0OyB9Ci0gICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBi
Q29uc3Q7IH0KLSAgICBpbnQgZ2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9Ci0g
ICAgZmxvYXQgZ2V0RkNvbnN0KCkgY29uc3QgeyByZXR1cm4gZkNvbnN0OyB9Ci0gICAgYm9vbCBn
ZXRCQ29uc3QoKSBjb25zdCB7IHJldHVybiBiQ29uc3Q7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBpbnQgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpID09IGlDb25zdCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgZikgY29uc3QKLSAgICB7Ci0gICAgICAg
IGlmIChmID09IGZDb25zdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgYm9vbCBiKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKGIgPT0gYkNvbnN0KQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IGlmIChjb25zdGFudC50eXBlICE9IHR5cGUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAg
ICAgaWYgKGNvbnN0YW50LmlDb25zdCA9PSBpQ29uc3QpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVidEZsb2F0OgotICAg
ICAgICAgICAgaWYgKGNvbnN0YW50LmZDb25zdCA9PSBmQ29uc3QpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVidEJvb2w6
Ci0gICAgICAgICAgICBpZiAoY29uc3RhbnQuYkNvbnN0ID09IGJDb25zdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGlu
dCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGkpOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBib29sIGIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oYik7
Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0
YW50KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGNvbnN0YW50KTsK
LSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFu
dCkgY29uc3QKLSAgICB7IAotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAg
ICAgaWYgKGlDb25zdCA+IGNvbnN0YW50LmlDb25zdCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIEVidEZsb2F0
OgotICAgICAgICAgICAgaWYgKGZDb25zdCA+IGNvbnN0YW50LmZDb25zdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBDb25zdGFudFVuaW9uJiBj
b25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50
eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OgotICAg
ICAgICAgICAgaWYgKGlDb25zdCA8IGNvbnN0YW50LmlDb25zdCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIEVi
dEZsb2F0OgotICAgICAgICAgICAgaWYgKGZDb25zdCA8IGNvbnN0YW50LmZDb25zdCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Np
bmciKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yKyhjb25zdCBD
b25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVu
aW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1
ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgKyBjb25zdGFudC5mQ29u
c3QpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9
Ci0KLSAgICBDb25zdGFudFVuaW9uIG9wZXJhdG9yLShjb25zdCBDb25zdGFudFVuaW9uJiBjb25z
dGFudCkgY29uc3QKLSAgICB7IAotICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwot
ICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0
eXBlKSB7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0
IC0gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVy
blZhbHVlLnNldEZDb25zdChmQ29uc3QgLSBjb25zdGFudC5mQ29uc3QpOyBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFudFVu
aW9uIG9wZXJhdG9yKihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7
IAotICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlw
ZSA9PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNh
c2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICogY29uc3RhbnQuaUNvbnN0
KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChm
Q29uc3QgKiBjb25zdGFudC5mQ29uc3QpOyBicmVhazsgCi0gICAgICAgIGRlZmF1bHQ6IGFzc2Vy
dChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvciUoY29u
c3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0gICAgeyAKLSAgICAgICAgQ29uc3Rh
bnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlw
ZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEVidEludDogcmV0dXJu
VmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBDb25zdGFu
dFVuaW9uIG9wZXJhdG9yPj4oY29uc3QgQ29uc3RhbnRVbmlvbiYgY29uc3RhbnQpIGNvbnN0Ci0g
ICAgeyAKLSAgICAgICAgQ29uc3RhbnRVbmlvbiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYXNzZXJ0
KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAg
ICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCA+PiBjb25zdGFudC5p
Q29uc3QpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVm
YXVsdCBtaXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7
Ci0gICAgfQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcjw8KGNvbnN0IENvbnN0YW50VW5p
b24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJu
VmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25z
dChpQ29uc3QgPDwgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAg
ICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0
b3ImKGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAg
IENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0
YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6
ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgIH0KLQotICAg
IENvbnN0YW50VW5pb24gb3BlcmF0b3J8KGNvbnN0IENvbnN0YW50VW5pb24mIGNvbnN0YW50KSBj
b25zdAotICAgIHsgCi0gICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7Ci0gICAgICAg
IGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IHwgY29u
c3RhbnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2Ug
JiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldHVy
blZhbHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24gb3BlcmF0b3JeKGNvbnN0IENvbnN0
YW50VW5pb24mIGNvbnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIENvbnN0YW50VW5pb24g
cmV0dXJuVmFsdWU7Ci0gICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5z
ZXRJQ29uc3QoaUNvbnN0IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgIH0KLQotICAgIENvbnN0YW50VW5pb24g
b3BlcmF0b3ImJihjb25zdCBDb25zdGFudFVuaW9uJiBjb25zdGFudCkgY29uc3QKLSAgICB7IAot
ICAgICAgICBDb25zdGFudFVuaW9uIHJldHVyblZhbHVlOwotICAgICAgICBhc3NlcnQodHlwZSA9
PSBjb25zdGFudC50eXBlKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2Ug
RWJ0Qm9vbDogcmV0dXJuVmFsdWUuc2V0QkNvbnN0KGJDb25zdCAmJiBjb25zdGFudC5iQ29uc3Qp
OyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAg
fQotCi0gICAgQ29uc3RhbnRVbmlvbiBvcGVyYXRvcnx8KGNvbnN0IENvbnN0YW50VW5pb24mIGNv
bnN0YW50KSBjb25zdAotICAgIHsgCi0gICAgICAgIENvbnN0YW50VW5pb24gcmV0dXJuVmFsdWU7
Ci0gICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwotICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICAgICAgY2FzZSBFYnRCb29sOiByZXR1cm5WYWx1ZS5zZXRCQ29uc3QoYkNv
bnN0IHx8IGNvbnN0YW50LmJDb25zdCk7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgYXNz
ZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKLSAgICB9Ci0KLSAgICBUQmFzaWNUeXBlIGdldFR5cGUoKSBjb25z
dCB7IHJldHVybiB0eXBlOyB9Ci1wcml2YXRlOgotCi0gICAgdW5pb24gIHsKLSAgICAgICAgaW50
IGlDb25zdDsgIC8vIHVzZWQgZm9yIGl2ZWMsIHNjYWxhciBpbnRzCi0gICAgICAgIGJvb2wgYkNv
bnN0OyAvLyB1c2VkIGZvciBidmVjLCBzY2FsYXIgYm9vbHMKLSAgICAgICAgZmxvYXQgZkNvbnN0
OyAgIC8vIHVzZWQgZm9yIHZlYywgbWF0LCBzY2FsYXIgZmxvYXRzCi0gICAgfSA7Ci0KLSAgICBU
QmFzaWNUeXBlIHR5cGU7Ci19OwotCi0jZW5kaWYgLy8gX0NPTlNUQU5UX1VOSU9OX0lOQ0xVREVE
XwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9JbmZvU2luay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCi0K
LXZvaWQgVEluZm9TaW5rQmFzZTo6cHJlZml4KFRQcmVmaXhUeXBlIG1lc3NhZ2UpIHsKLSAgICBz
d2l0Y2gobWVzc2FnZSkgewotICAgICAgICBjYXNlIEVQcmVmaXhOb25lOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRVByZWZpeFdhcm5pbmc6Ci0gICAgICAgICAgICBzaW5rLmFw
cGVuZCgiV0FSTklORzogIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUHJl
Zml4RXJyb3I6Ci0gICAgICAgICAgICBzaW5rLmFwcGVuZCgiRVJST1I6ICIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVByZWZpeEludGVybmFsRXJyb3I6Ci0gICAgICAgICAg
ICBzaW5rLmFwcGVuZCgiSU5URVJOQUwgRVJST1I6ICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRVByZWZpeFVuaW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICBzaW5rLmFwcGVu
ZCgiVU5JTVBMRU1FTlRFRDogIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBF
UHJlZml4Tm90ZToKLSAgICAgICAgICAgIHNpbmsuYXBwZW5kKCJOT1RFOiAiKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc2luay5hcHBlbmQoIlVO
S09XTiBFUlJPUjogIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgVElu
Zm9TaW5rQmFzZTo6bG9jYXRpb24oVFNvdXJjZUxvYyBsb2MpIHsKLSAgICBpbnQgc3RyaW5nID0g
bG9jID4+IFNvdXJjZUxvY1N0cmluZ1NoaWZ0OwotICAgIGludCBsaW5lID0gbG9jICYgU291cmNl
TG9jTGluZU1hc2s7Ci0KLSAgICBUUGVyc2lzdFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgaWYg
KGxpbmUpCi0gICAgICAgIHN0cmVhbSA8PCBzdHJpbmcgPDwgIjoiIDw8IGxpbmU7Ci0gICAgZWxz
ZQotICAgICAgICBzdHJlYW0gPDwgc3RyaW5nIDw8ICI6PyAiOwotICAgIHN0cmVhbSA8PCAiOiAi
OwotCi0gICAgc2luay5hcHBlbmQoc3RyZWFtLnN0cigpKTsKLX0KLQotdm9pZCBUSW5mb1NpbmtC
YXNlOjptZXNzYWdlKFRQcmVmaXhUeXBlIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHMpIHsKLSAgICBw
cmVmaXgobWVzc2FnZSk7Ci0gICAgc2luay5hcHBlbmQocyk7Ci0gICAgc2luay5hcHBlbmQoIlxu
Iik7Ci19Ci0KLXZvaWQgVEluZm9TaW5rQmFzZTo6bWVzc2FnZShUUHJlZml4VHlwZSBtZXNzYWdl
LCBjb25zdCBjaGFyKiBzLCBUU291cmNlTG9jIGxvYykgewotICAgIHByZWZpeChtZXNzYWdlKTsK
LSAgICBsb2NhdGlvbihsb2MpOwotICAgIHNpbmsuYXBwZW5kKHMpOwotICAgIHNpbmsuYXBwZW5k
KCJcbiIpOwotfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgJKHJldmlzaW9uIDc0NjU4KQorKysg
QU5HTEUvc3JjL2NvbXBpbGVyL0luZm9TaW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE0ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX0lORk9TSU5LX0lOQ0xVREVEXwot
I2RlZmluZSBfSU5GT1NJTktfSU5DTFVERURfCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVk
ZSAiY29tcGlsZXIvQ29tbW9uLmgiCi0KLS8vIFJldHVybnMgdGhlIGZyYWN0aW9uYWwgcGFydCBv
ZiB0aGUgZ2l2ZW4gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgotaW5saW5lIGZsb2F0IGZyYWN0aW9u
YWxQYXJ0KGZsb2F0IGYpIHsKLSAgZmxvYXQgaW50UGFydCA9IDAuMGY7Ci0gIHJldHVybiBtb2Rm
ZihmLCAmaW50UGFydCk7Ci19Ci0KLS8vCi0vLyBUUHJlZml4VHlwZSBpcyB1c2VkIHRvIGNlbnRy
YWxpemUgaG93IGluZm8gbG9nIG1lc3NhZ2VzIHN0YXJ0LgotLy8gU2VlIGJlbG93LgotLy8KLWVu
dW0gVFByZWZpeFR5cGUgewotICAgIEVQcmVmaXhOb25lLAotICAgIEVQcmVmaXhXYXJuaW5nLAot
ICAgIEVQcmVmaXhFcnJvciwKLSAgICBFUHJlZml4SW50ZXJuYWxFcnJvciwKLSAgICBFUHJlZml4
VW5pbXBsZW1lbnRlZCwKLSAgICBFUHJlZml4Tm90ZQotfTsKLQotLy8KLS8vIEVuY2Fwc3VsYXRl
IGluZm8gbG9ncyBmb3IgYWxsIG9iamVjdHMgdGhhdCBoYXZlIHRoZW0uCi0vLwotLy8gVGhlIG1l
dGhvZHMgYXJlIGEgZ2VuZXJhbCBzZXQgb2YgdG9vbHMgZm9yIGdldHRpbmcgYSB2YXJpZXR5IG9m
Ci0vLyBtZXNzYWdlcyBhbmQgdHlwZXMgaW5zZXJ0ZWQgaW50byB0aGUgbG9nLgotLy8KLWNsYXNz
IFRJbmZvU2lua0Jhc2UgewotcHVibGljOgotICAgIFRJbmZvU2lua0Jhc2UoKSB7fQotCi0gICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChjb25z
dCBUJiB0KSB7Ci0gICAgICAgIFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0cmVhbTsKLSAgICAgICAg
c3RyZWFtIDw8IHQ7Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7Ci0gICAgICAg
IHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgLy8gT3ZlcnJpZGUgPDwgb3BlcmF0b3IgZm9yIHNw
ZWNpZmljIHR5cGVzLiBJdCBpcyBmYXN0ZXIgdG8gYXBwZW5kIHN0cmluZ3MKLSAgICAvLyBhbmQg
Y2hhcmFjdGVycyBkaXJlY3RseSB0byB0aGUgc2luay4KLSAgICBUSW5mb1NpbmtCYXNlJiBvcGVy
YXRvcjw8KGNoYXIgYykgewotICAgICAgICBzaW5rLmFwcGVuZCgxLCBjKTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLSAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGNvbnN0IGNo
YXIqIHN0cikgewotICAgICAgICBzaW5rLmFwcGVuZChzdHIpOwotICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgfQotICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgVFBlcnNpc3RT
dHJpbmcmIHN0cikgewotICAgICAgICBzaW5rLmFwcGVuZChzdHIpOwotICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgfQotICAgIFRJbmZvU2lua0Jhc2UmIG9wZXJhdG9yPDwoY29uc3QgVFN0cmlu
ZyYgc3RyKSB7Ci0gICAgICAgIHNpbmsuYXBwZW5kKHN0ci5jX3N0cigpKTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLSAgICAvLyBNYWtlIHN1cmUgZmxvYXRzIGFyZSB3cml0dGVuIHdp
dGggY29ycmVjdCBwcmVjaXNpb24uCi0gICAgVEluZm9TaW5rQmFzZSYgb3BlcmF0b3I8PChmbG9h
dCBmKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBkZWNpbWFsIHBv
aW50IGlzIHdyaXR0ZW4uIElmIGEgbnVtYmVyCi0gICAgICAgIC8vIGRvZXMgbm90IGhhdmUgYSBm
cmFjdGlvbmFsIHBhcnQsIHRoZSBkZWZhdWx0IHByZWNpc2lvbiBmb3JtYXQgZG9lcwotICAgICAg
ICAvLyBub3Qgd3JpdGUgdGhlIGRlY2ltYWwgcG9ydGlvbiB3aGljaCBnZXRzIGludGVycHJldGVk
IGFzIGludGVnZXIgYnkKLSAgICAgICAgLy8gdGhlIGNvbXBpbGVyLgotICAgICAgICBUUGVyc2lz
dFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgICAgIGlmIChmcmFjdGlvbmFsUGFydChmKSA9PSAw
LjBmKSB7Ci0gICAgICAgICAgICBzdHJlYW0ucHJlY2lzaW9uKDEpOwotICAgICAgICAgICAgc3Ry
ZWFtIDw8IHN0ZDo6c2hvd3BvaW50IDw8IHN0ZDo6Zml4ZWQgPDwgZjsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHN0cmVhbS51bnNldGYoc3RkOjppb3M6OmZpeGVkKTsKLSAgICAgICAg
ICAgIHN0cmVhbS51bnNldGYoc3RkOjppb3M6OnNjaWVudGlmaWMpOwotICAgICAgICAgICAgc3Ry
ZWFtLnByZWNpc2lvbig4KTsKLSAgICAgICAgICAgIHN0cmVhbSA8PCBmOwotICAgICAgICB9Ci0g
ICAgICAgIHNpbmsuYXBwZW5kKHN0cmVhbS5zdHIoKSk7Ci0gICAgICAgIHJldHVybiAqdGhpczsK
LSAgICB9Ci0gICAgLy8gV3JpdGUgYm9vbGVhbiB2YWx1ZXMgYXMgdGhlaXIgbmFtZXMgaW5zdGVh
ZCBvZiBpbnRlZ3JhbCB2YWx1ZS4KLSAgICBUSW5mb1NpbmtCYXNlJiBvcGVyYXRvcjw8KGJvb2wg
YikgewotICAgICAgICBjb25zdCBjaGFyKiBzdHIgPSBiID8gInRydWUiIDogImZhbHNlIjsKLSAg
ICAgICAgc2luay5hcHBlbmQoc3RyKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
ICAgIHZvaWQgZXJhc2UoKSB7IHNpbmsuY2xlYXIoKTsgfQotCi0gICAgY29uc3QgVFBlcnNpc3RT
dHJpbmcmIHN0cigpIGNvbnN0IHsgcmV0dXJuIHNpbms7IH0KLSAgICBjb25zdCBjaGFyKiBjX3N0
cigpIGNvbnN0IHsgcmV0dXJuIHNpbmsuY19zdHIoKTsgfQotCi0gICAgdm9pZCBwcmVmaXgoVFBy
ZWZpeFR5cGUgbWVzc2FnZSk7Ci0gICAgdm9pZCBsb2NhdGlvbihUU291cmNlTG9jIGxvYyk7Ci0g
ICAgdm9pZCBtZXNzYWdlKFRQcmVmaXhUeXBlIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHMpOwotICAg
IHZvaWQgbWVzc2FnZShUUHJlZml4VHlwZSBtZXNzYWdlLCBjb25zdCBjaGFyKiBzLCBUU291cmNl
TG9jIGxvYyk7Ci0KLXByaXZhdGU6Ci0gICAgVFBlcnNpc3RTdHJpbmcgc2luazsKLX07Ci0KLWNs
YXNzIFRJbmZvU2luayB7Ci1wdWJsaWM6Ci0gICAgVEluZm9TaW5rQmFzZSBpbmZvOwotICAgIFRJ
bmZvU2lua0Jhc2UgZGVidWc7Ci0gICAgVEluZm9TaW5rQmFzZSBvYmo7Ci19OwotCi0jZW5kaWYg
Ly8gX0lORk9TSU5LX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAko
cmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNjE3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vCi0v
LyBDcmVhdGUgc3RyaW5ncyB0aGF0IGRlY2xhcmUgYnVpbHQtaW4gZGVmaW5pdGlvbnMsIGFkZCBi
dWlsdC1pbnMgdGhhdAotLy8gY2Fubm90IGJlIGV4cHJlc3NlZCBpbiB0aGUgZmlsZXMsIGFuZCBl
c3RhYmxpc2ggbWFwcGluZ3MgYmV0d2VlbiAKLS8vIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgb3Bl
cmF0b3JzLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemUuaCIKLQotI2luY2x1
ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi0vLz09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8v
Ci0vLyBQcm90b3R5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbnMgc2VlbiBieSBib3RoIHZlcnRl
eCBhbmQgZnJhZ21lbnQgc2hhZGVycy4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRp
YyBUU3RyaW5nIEJ1aWx0SW5GdW5jdGlvbnNDb21tb24oKQotewotICAgIFRTdHJpbmcgczsKLQot
ICAgIC8vCi0gICAgLy8gQW5nbGUgYW5kIFRyaWdvbm9tZXRyaWMgRnVuY3Rpb25zLgotICAgIC8v
Ci0gICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgcmFkaWFucyhmbG9hdCBkZWdyZWVzKTsiKSk7
Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgcmFkaWFucyh2ZWMyICBkZWdyZWVzKTsiKSk7
Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgcmFkaWFucyh2ZWMzICBkZWdyZWVzKTsiKSk7
Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgcmFkaWFucyh2ZWM0ICBkZWdyZWVzKTsiKSk7
Ci0KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkZWdyZWVzKGZsb2F0IHJhZGlhbnMpOyIp
KTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBkZWdyZWVzKHZlYzIgIHJhZGlhbnMpOyIp
KTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBkZWdyZWVzKHZlYzMgIHJhZGlhbnMpOyIp
KTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBkZWdyZWVzKHZlYzQgIHJhZGlhbnMpOyIp
KTsKLQotICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHNpbihmbG9hdCBhbmdsZSk7IikpOwot
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHNpbih2ZWMyICBhbmdsZSk7IikpOwotICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzMgIHNpbih2ZWMzICBhbmdsZSk7IikpOwotICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgIHNpbih2ZWM0ICBhbmdsZSk7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0
cmluZygiZmxvYXQgY29zKGZsb2F0IGFuZ2xlKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjMiAgY29zKHZlYzIgIGFuZ2xlKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAg
Y29zKHZlYzMgIGFuZ2xlKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgY29zKHZl
YzQgIGFuZ2xlKTsiKSk7Ci0KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCB0YW4oZmxvYXQg
YW5nbGUpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICB0YW4odmVjMiAgYW5nbGUp
OyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICB0YW4odmVjMyAgYW5nbGUpOyIpKTsK
LSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICB0YW4odmVjNCAgYW5nbGUpOyIpKTsKLQotICAg
IHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGFzaW4oZmxvYXQgeCk7IikpOwotICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzIgIGFzaW4odmVjMiAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIGFzaW4odmVjMyAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGFz
aW4odmVjNCAgeCk7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgYWNvcyhmbG9h
dCB4KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgYWNvcyh2ZWMyICB4KTsiKSk7
Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgYWNvcyh2ZWMzICB4KTsiKSk7Ci0gICAgcy5h
cHBlbmQoVFN0cmluZygidmVjNCAgYWNvcyh2ZWM0ICB4KTsiKSk7Ci0KLSAgICBzLmFwcGVuZChU
U3RyaW5nKCJmbG9hdCBhdGFuKGZsb2F0IHksIGZsb2F0IHgpOyIpKTsKLSAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMyICBhdGFuKHZlYzIgIHksIHZlYzIgIHgpOyIpKTsKLSAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMzICBhdGFuKHZlYzMgIHksIHZlYzMgIHgpOyIpKTsKLSAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWM0ICBhdGFuKHZlYzQgIHksIHZlYzQgIHgpOyIpKTsKLQotICAgIHMuYXBwZW5k
KFRTdHJpbmcoImZsb2F0IGF0YW4oZmxvYXQgeV9vdmVyX3gpOyIpKTsKLSAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMyICBhdGFuKHZlYzIgIHlfb3Zlcl94KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgYXRhbih2ZWMzICB5X292ZXJfeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgIGF0YW4odmVjNCAgeV9vdmVyX3gpOyIpKTsKLQotICAgIC8vCi0gICAgLy8gRXhw
b25lbnRpYWwgRnVuY3Rpb25zLgotICAgIC8vCi0gICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQg
cG93KGZsb2F0IHgsIGZsb2F0IHkpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBw
b3codmVjMiAgeCwgdmVjMiAgeSk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHBv
dyh2ZWMzICB4LCB2ZWMzICB5KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgcG93
KHZlYzQgIHgsIHZlYzQgIHkpOyIpKTsKLQotICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGV4
cChmbG9hdCB4KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZXhwKHZlYzIgIHgp
OyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBleHAodmVjMyAgeCk7IikpOwotICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGV4cCh2ZWM0ICB4KTsiKSk7Ci0KLSAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBsb2coZmxvYXQgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzIgIGxvZyh2ZWMyICB4KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbG9n
KHZlYzMgIHgpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBsb2codmVjNCAgeCk7
IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZXhwMihmbG9hdCB4KTsiKSk7Ci0g
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZXhwMih2ZWMyICB4KTsiKSk7Ci0gICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMyAgZXhwMih2ZWMzICB4KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjNCAgZXhwMih2ZWM0ICB4KTsiKSk7Ci0KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9h
dCBsb2cyKGZsb2F0IHgpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBsb2cyKHZl
YzIgIHgpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBsb2cyKHZlYzMgIHgpOyIp
KTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBsb2cyKHZlYzQgIHgpOyIpKTsKLQotICAg
IHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHNxcnQoZmxvYXQgeCk7IikpOwotICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzIgIHNxcnQodmVjMiAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIHNxcnQodmVjMyAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHNx
cnQodmVjNCAgeCk7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgaW52ZXJzZXNx
cnQoZmxvYXQgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGludmVyc2VzcXJ0
KHZlYzIgIHgpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBpbnZlcnNlc3FydCh2
ZWMzICB4KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgaW52ZXJzZXNxcnQodmVj
NCAgeCk7IikpOwotCi0gICAgLy8KLSAgICAvLyBDb21tb24gRnVuY3Rpb25zLgotICAgIC8vCi0g
ICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgYWJzKGZsb2F0IHgpOyIpKTsKLSAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWMyICBhYnModmVjMiAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIGFicyh2ZWMzICB4KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgYWJz
KHZlYzQgIHgpOyIpKTsKLQotICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHNpZ24oZmxvYXQg
eCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHNpZ24odmVjMiAgeCk7IikpOwot
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHNpZ24odmVjMyAgeCk7IikpOwotICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgIHNpZ24odmVjNCAgeCk7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0
cmluZygiZmxvYXQgZmxvb3IoZmxvYXQgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzIgIGZsb29yKHZlYzIgIHgpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBmbG9v
cih2ZWMzICB4KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZmxvb3IodmVjNCAg
eCk7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgY2VpbChmbG9hdCB4KTsiKSk7
Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgY2VpbCh2ZWMyICB4KTsiKSk7Ci0gICAgcy5h
cHBlbmQoVFN0cmluZygidmVjMyAgY2VpbCh2ZWMzICB4KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCAgY2VpbCh2ZWM0ICB4KTsiKSk7Ci0KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJm
bG9hdCBmcmFjdChmbG9hdCB4KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZnJh
Y3QodmVjMiAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGZyYWN0KHZlYzMg
IHgpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBmcmFjdCh2ZWM0ICB4KTsiKSk7
Ci0KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBtb2QoZmxvYXQgeCwgZmxvYXQgeSk7Iikp
OwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1vZCh2ZWMyICB4LCBmbG9hdCB5KTsiKSk7
Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbW9kKHZlYzMgIHgsIGZsb2F0IHkpOyIpKTsK
LSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtb2QodmVjNCAgeCwgZmxvYXQgeSk7IikpOwot
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIG1vZCh2ZWMyICB4LCB2ZWMyICB5KTsiKSk7Ci0g
ICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgbW9kKHZlYzMgIHgsIHZlYzMgIHkpOyIpKTsKLSAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBtb2QodmVjNCAgeCwgdmVjNCAgeSk7IikpOwotCi0g
ICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbWluKGZsb2F0IHgsIGZsb2F0IHkpOyIpKTsKLSAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtaW4odmVjMiAgeCwgZmxvYXQgeSk7IikpOwotICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1pbih2ZWMzICB4LCBmbG9hdCB5KTsiKSk7Ci0gICAg
cy5hcHBlbmQoVFN0cmluZygidmVjNCAgbWluKHZlYzQgIHgsIGZsb2F0IHkpOyIpKTsKLSAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtaW4odmVjMiAgeCwgdmVjMiAgeSk7IikpOwotICAgIHMu
YXBwZW5kKFRTdHJpbmcoInZlYzMgIG1pbih2ZWMzICB4LCB2ZWMzICB5KTsiKSk7Ci0gICAgcy5h
cHBlbmQoVFN0cmluZygidmVjNCAgbWluKHZlYzQgIHgsIHZlYzQgIHkpOyIpKTsKLQotICAgIHMu
YXBwZW5kKFRTdHJpbmcoImZsb2F0IG1heChmbG9hdCB4LCBmbG9hdCB5KTsiKSk7Ci0gICAgcy5h
cHBlbmQoVFN0cmluZygidmVjMiAgbWF4KHZlYzIgIHgsIGZsb2F0IHkpOyIpKTsKLSAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMzICBtYXgodmVjMyAgeCwgZmxvYXQgeSk7IikpOwotICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgIG1heCh2ZWM0ICB4LCBmbG9hdCB5KTsiKSk7Ci0gICAgcy5hcHBl
bmQoVFN0cmluZygidmVjMiAgbWF4KHZlYzIgIHgsIHZlYzIgIHkpOyIpKTsKLSAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWMzICBtYXgodmVjMyAgeCwgdmVjMyAgeSk7IikpOwotICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgIG1heCh2ZWM0ICB4LCB2ZWM0ICB5KTsiKSk7Ci0KLSAgICBzLmFwcGVu
ZChUU3RyaW5nKCJmbG9hdCBjbGFtcChmbG9hdCB4LCBmbG9hdCBtaW5WYWwsIGZsb2F0IG1heFZh
bCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGNsYW1wKHZlYzIgIHgsIGZsb2F0
IG1pblZhbCwgZmxvYXQgbWF4VmFsKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAg
Y2xhbXAodmVjMyAgeCwgZmxvYXQgbWluVmFsLCBmbG9hdCBtYXhWYWwpOyIpKTsKLSAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWM0ICBjbGFtcCh2ZWM0ICB4LCBmbG9hdCBtaW5WYWwsIGZsb2F0IG1h
eFZhbCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGNsYW1wKHZlYzIgIHgsIHZl
YzIgIG1pblZhbCwgdmVjMiAgbWF4VmFsKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MyAgY2xhbXAodmVjMyAgeCwgdmVjMyAgbWluVmFsLCB2ZWMzICBtYXhWYWwpOyIpKTsKLSAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBjbGFtcCh2ZWM0ICB4LCB2ZWM0ICBtaW5WYWwsIHZlYzQg
IG1heFZhbCk7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbWl4KGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IGEpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBtaXgo
dmVjMiAgeCwgdmVjMiAgeSwgZmxvYXQgYSk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzMgIG1peCh2ZWMzICB4LCB2ZWMzICB5LCBmbG9hdCBhKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCAgbWl4KHZlYzQgIHgsIHZlYzQgIHksIGZsb2F0IGEpOyIpKTsKLSAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMyICBtaXgodmVjMiAgeCwgdmVjMiAgeSwgdmVjMiAgYSk7IikpOwot
ICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG1peCh2ZWMzICB4LCB2ZWMzICB5LCB2ZWMzICBh
KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbWl4KHZlYzQgIHgsIHZlYzQgIHks
IHZlYzQgIGEpOyIpKTsKLQotICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHN0ZXAoZmxvYXQg
ZWRnZSwgZmxvYXQgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHN0ZXAodmVj
MiAgZWRnZSwgdmVjMiAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHN0ZXAo
dmVjMyAgZWRnZSwgdmVjMyAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIHN0
ZXAodmVjNCAgZWRnZSwgdmVjNCAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIg
IHN0ZXAoZmxvYXQgZWRnZSwgdmVjMiAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzMgIHN0ZXAoZmxvYXQgZWRnZSwgdmVjMyAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzQgIHN0ZXAoZmxvYXQgZWRnZSwgdmVjNCAgeCk7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0
cmluZygiZmxvYXQgc21vb3Roc3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0IHgp
OyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzbW9vdGhzdGVwKHZlYzIgIGVkZ2Uw
LCB2ZWMyICBlZGdlMSwgdmVjMiAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMg
IHNtb290aHN0ZXAodmVjMyAgZWRnZTAsIHZlYzMgIGVkZ2UxLCB2ZWMzICB4KTsiKSk7Ci0gICAg
cy5hcHBlbmQoVFN0cmluZygidmVjNCAgc21vb3Roc3RlcCh2ZWM0ICBlZGdlMCwgdmVjNCAgZWRn
ZTEsIHZlYzQgIHgpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBzbW9vdGhzdGVw
KGZsb2F0IGVkZ2UwLCBmbG9hdCBlZGdlMSwgdmVjMiAgeCk7IikpOwotICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzMgIHNtb290aHN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCB2ZWMzICB4
KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgc21vb3Roc3RlcChmbG9hdCBlZGdl
MCwgZmxvYXQgZWRnZTEsIHZlYzQgIHgpOyIpKTsKLQotICAgIC8vCi0gICAgLy8gR2VvbWV0cmlj
IEZ1bmN0aW9ucy4KLSAgICAvLwotICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0aChm
bG9hdCB4KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbGVuZ3RoKHZlYzIgIHgp
OyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBsZW5ndGgodmVjMyAgeCk7IikpOwot
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGxlbmd0aCh2ZWM0ICB4KTsiKSk7Ci0KLSAgICBz
LmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkaXN0YW5jZShmbG9hdCBwMCwgZmxvYXQgcDEpOyIpKTsK
LSAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkaXN0YW5jZSh2ZWMyICBwMCwgdmVjMiAgcDEp
OyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkaXN0YW5jZSh2ZWMzICBwMCwgdmVj
MyAgcDEpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkaXN0YW5jZSh2ZWM0ICBw
MCwgdmVjNCAgcDEpOyIpKTsKLQotICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRvdChmbG9h
dCB4LCBmbG9hdCB5KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZG90KHZlYzIg
IHgsIHZlYzIgIHkpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkb3QodmVjMyAg
eCwgdmVjMyAgeSk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRvdCh2ZWM0ICB4
LCB2ZWM0ICB5KTsiKSk7Ci0KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzIGNyb3NzKHZlYzMg
eCwgdmVjMyB5KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9ybWFsaXplKGZs
b2F0IHgpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBub3JtYWxpemUodmVjMiAg
eCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIG5vcm1hbGl6ZSh2ZWMzICB4KTsi
KSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgbm9ybWFsaXplKHZlYzQgIHgpOyIpKTsK
LQotICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGZhY2Vmb3J3YXJkKGZsb2F0IE4sIGZsb2F0
IEksIGZsb2F0IE5yZWYpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBmYWNlZm9y
d2FyZCh2ZWMyICBOLCB2ZWMyICBJLCB2ZWMyICBOcmVmKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0
cmluZygidmVjMyAgZmFjZWZvcndhcmQodmVjMyAgTiwgdmVjMyAgSSwgdmVjMyAgTnJlZik7Iikp
OwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGZhY2Vmb3J3YXJkKHZlYzQgIE4sIHZlYzQg
IEksIHZlYzQgIE5yZWYpOyIpKTsKLQotICAgIHMuYXBwZW5kKFRTdHJpbmcoImZsb2F0IHJlZmxl
Y3QoZmxvYXQgSSwgZmxvYXQgTik7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIHJl
ZmxlY3QodmVjMiAgSSwgdmVjMiAgTik7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMg
IHJlZmxlY3QodmVjMyAgSSwgdmVjMyAgTik7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZl
YzQgIHJlZmxlY3QodmVjNCAgSSwgdmVjNCAgTik7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmlu
ZygiZmxvYXQgcmVmcmFjdChmbG9hdCBJLCBmbG9hdCBOLCBmbG9hdCBldGEpOyIpKTsKLSAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyICByZWZyYWN0KHZlYzIgIEksIHZlYzIgIE4sIGZsb2F0IGV0
YSk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIHJlZnJhY3QodmVjMyAgSSwgdmVj
MyAgTiwgZmxvYXQgZXRhKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAgcmVmcmFj
dCh2ZWM0ICBJLCB2ZWM0ICBOLCBmbG9hdCBldGEpOyIpKTsKLQotICAgIC8vCi0gICAgLy8gTWF0
cml4IEZ1bmN0aW9ucy4KLSAgICAvLwotICAgIHMuYXBwZW5kKFRTdHJpbmcoIm1hdDIgbWF0cml4
Q29tcE11bHQobWF0MiB4LCBtYXQyIHkpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJtYXQz
IG1hdHJpeENvbXBNdWx0KG1hdDMgeCwgbWF0MyB5KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmlu
ZygibWF0NCBtYXRyaXhDb21wTXVsdChtYXQ0IHgsIG1hdDQgeSk7IikpOwotCi0gICAgLy8KLSAg
ICAvLyBWZWN0b3IgcmVsYXRpb25hbCBmdW5jdGlvbnMuCi0gICAgLy8KLSAgICBzLmFwcGVuZChU
U3RyaW5nKCJidmVjMiBsZXNzVGhhbih2ZWMyIHgsIHZlYzIgeSk7IikpOwotICAgIHMuYXBwZW5k
KFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuKHZlYzMgeCwgdmVjMyB5KTsiKSk7Ci0gICAgcy5hcHBl
bmQoVFN0cmluZygiYnZlYzQgbGVzc1RoYW4odmVjNCB4LCB2ZWM0IHkpOyIpKTsKLQotICAgIHMu
YXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGxlc3NUaGFuKGl2ZWMyIHgsIGl2ZWMyIHkpOyIpKTsKLSAg
ICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBsZXNzVGhhbihpdmVjMyB4LCBpdmVjMyB5KTsiKSk7
Ci0gICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbGVzc1RoYW4oaXZlYzQgeCwgaXZlYzQgeSk7
IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbGVzc1RoYW5FcXVhbCh2ZWMyIHgs
IHZlYzIgeSk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGxlc3NUaGFuRXF1YWwo
dmVjMyB4LCB2ZWMzIHkpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBsZXNzVGhh
bkVxdWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7Ci0KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVj
MiBsZXNzVGhhbkVxdWFsKGl2ZWMyIHgsIGl2ZWMyIHkpOyIpKTsKLSAgICBzLmFwcGVuZChUU3Ry
aW5nKCJidmVjMyBsZXNzVGhhbkVxdWFsKGl2ZWMzIHgsIGl2ZWMzIHkpOyIpKTsKLSAgICBzLmFw
cGVuZChUU3RyaW5nKCJidmVjNCBsZXNzVGhhbkVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsK
LQotICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGdyZWF0ZXJUaGFuKHZlYzIgeCwgdmVjMiB5
KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZ3JlYXRlclRoYW4odmVjMyB4LCB2
ZWMzIHkpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBncmVhdGVyVGhhbih2ZWM0
IHgsIHZlYzQgeSk7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZ3JlYXRlclRo
YW4oaXZlYzIgeCwgaXZlYzIgeSk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMzIGdy
ZWF0ZXJUaGFuKGl2ZWMzIHgsIGl2ZWMzIHkpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJi
dmVjNCBncmVhdGVyVGhhbihpdmVjNCB4LCBpdmVjNCB5KTsiKSk7Ci0KLSAgICBzLmFwcGVuZChU
U3RyaW5nKCJidmVjMiBncmVhdGVyVGhhbkVxdWFsKHZlYzIgeCwgdmVjMiB5KTsiKSk7Ci0gICAg
cy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZ3JlYXRlclRoYW5FcXVhbCh2ZWMzIHgsIHZlYzMgeSk7
IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGdyZWF0ZXJUaGFuRXF1YWwodmVjNCB4
LCB2ZWM0IHkpOyIpKTsKLQotICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGdyZWF0ZXJUaGFu
RXF1YWwoaXZlYzIgeCwgaXZlYzIgeSk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMz
IGdyZWF0ZXJUaGFuRXF1YWwoaXZlYzMgeCwgaXZlYzMgeSk7IikpOwotICAgIHMuYXBwZW5kKFRT
dHJpbmcoImJ2ZWM0IGdyZWF0ZXJUaGFuRXF1YWwoaXZlYzQgeCwgaXZlYzQgeSk7IikpOwotCi0g
ICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgZXF1YWwodmVjMiB4LCB2ZWMyIHkpOyIpKTsKLSAg
ICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBlcXVhbCh2ZWMzIHgsIHZlYzMgeSk7IikpOwotICAg
IHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGVxdWFsKHZlYzQgeCwgdmVjNCB5KTsiKSk7Ci0KLSAg
ICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBlcXVhbChpdmVjMiB4LCBpdmVjMiB5KTsiKSk7Ci0g
ICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgZXF1YWwoaXZlYzMgeCwgaXZlYzMgeSk7IikpOwot
ICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IGVxdWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsK
LQotICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMyIGVxdWFsKGJ2ZWMyIHgsIGJ2ZWMyIHkpOyIp
KTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBlcXVhbChidmVjMyB4LCBidmVjMyB5KTsi
KSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgZXF1YWwoYnZlYzQgeCwgYnZlYzQgeSk7
IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzIgbm90RXF1YWwodmVjMiB4LCB2ZWMy
IHkpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMyBub3RFcXVhbCh2ZWMzIHgsIHZl
YzMgeSk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IG5vdEVxdWFsKHZlYzQgeCwg
dmVjNCB5KTsiKSk7Ci0KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjMiBub3RFcXVhbChpdmVj
MiB4LCBpdmVjMiB5KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMgbm90RXF1YWwo
aXZlYzMgeCwgaXZlYzMgeSk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWM0IG5vdEVx
dWFsKGl2ZWM0IHgsIGl2ZWM0IHkpOyIpKTsKLQotICAgIHMuYXBwZW5kKFRTdHJpbmcoImJ2ZWMy
IG5vdEVxdWFsKGJ2ZWMyIHgsIGJ2ZWMyIHkpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJi
dmVjMyBub3RFcXVhbChidmVjMyB4LCBidmVjMyB5KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmlu
ZygiYnZlYzQgbm90RXF1YWwoYnZlYzQgeCwgYnZlYzQgeSk7IikpOwotCi0gICAgcy5hcHBlbmQo
VFN0cmluZygiYm9vbCBhbnkoYnZlYzIgeCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoImJv
b2wgYW55KGJ2ZWMzIHgpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFueShidmVj
NCB4KTsiKSk7Ci0KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJib29sIGFsbChidmVjMiB4KTsiKSk7
Ci0gICAgcy5hcHBlbmQoVFN0cmluZygiYm9vbCBhbGwoYnZlYzMgeCk7IikpOwotICAgIHMuYXBw
ZW5kKFRTdHJpbmcoImJvb2wgYWxsKGJ2ZWM0IHgpOyIpKTsKLQotICAgIHMuYXBwZW5kKFRTdHJp
bmcoImJ2ZWMyIG5vdChidmVjMiB4KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzMg
bm90KGJ2ZWMzIHgpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBub3QoYnZlYzQg
eCk7IikpOwotCi0gICAgLy8KLSAgICAvLyBUZXh0dXJlIEZ1bmN0aW9ucy4KLSAgICAvLwotICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMy
IGNvb3JkKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qKHNh
bXBsZXIyRCBzYW1wbGVyLCB2ZWMzIGNvb3JkKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjNCB0ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWM0IGNvb3JkKTsiKSk7Ci0K
LSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmVDdWJlKHNhbXBsZXJDdWJlIHNhbXBs
ZXIsIHZlYzMgY29vcmQpOyIpKTsKLQotICAgIC8vCi0gICAgLy8gTm9pc2UgZnVuY3Rpb25zLgot
ICAgIC8vCi0gICAgLy9zLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBub2lzZTEoZmxvYXQgeCk7Iikp
OwotICAgIC8vcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9pc2UxKHZlYzIgIHgpOyIpKTsKLSAg
ICAvL3MuYXBwZW5kKFRTdHJpbmcoImZsb2F0IG5vaXNlMSh2ZWMzICB4KTsiKSk7Ci0gICAgLy9z
LmFwcGVuZChUU3RyaW5nKCJmbG9hdCBub2lzZTEodmVjNCAgeCk7IikpOwotCi0gICAgLy9zLmFw
cGVuZChUU3RyaW5nKCJ2ZWMyIG5vaXNlMihmbG9hdCB4KTsiKSk7Ci0gICAgLy9zLmFwcGVuZChU
U3RyaW5nKCJ2ZWMyIG5vaXNlMih2ZWMyICB4KTsiKSk7Ci0gICAgLy9zLmFwcGVuZChUU3RyaW5n
KCJ2ZWMyIG5vaXNlMih2ZWMzICB4KTsiKSk7Ci0gICAgLy9zLmFwcGVuZChUU3RyaW5nKCJ2ZWMy
IG5vaXNlMih2ZWM0ICB4KTsiKSk7Ci0KLSAgICAvL3MuYXBwZW5kKFRTdHJpbmcoInZlYzMgbm9p
c2UzKGZsb2F0IHgpOyIpKTsKLSAgICAvL3MuYXBwZW5kKFRTdHJpbmcoInZlYzMgbm9pc2UzKHZl
YzIgIHgpOyIpKTsKLSAgICAvL3MuYXBwZW5kKFRTdHJpbmcoInZlYzMgbm9pc2UzKHZlYzMgIHgp
OyIpKTsKLSAgICAvL3MuYXBwZW5kKFRTdHJpbmcoInZlYzMgbm9pc2UzKHZlYzQgIHgpOyIpKTsK
LQotICAgIC8vcy5hcHBlbmQoVFN0cmluZygidmVjNCBub2lzZTQoZmxvYXQgeCk7IikpOwotICAg
IC8vcy5hcHBlbmQoVFN0cmluZygidmVjNCBub2lzZTQodmVjMiAgeCk7IikpOwotICAgIC8vcy5h
cHBlbmQoVFN0cmluZygidmVjNCBub2lzZTQodmVjMyAgeCk7IikpOwotICAgIC8vcy5hcHBlbmQo
VFN0cmluZygidmVjNCBub2lzZTQodmVjNCAgeCk7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmlu
ZygiXG4iKSk7Ci0gICAgcmV0dXJuIHM7Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8K
LS8vIFByb3RvdHlwZXMgZm9yIGJ1aWx0LWluIGZ1bmN0aW9ucyBzZWVuIGJ5IHZlcnRleCBzaGFk
ZXJzIG9ubHkuCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgVFN0cmluZyBCdWls
dEluRnVuY3Rpb25zVmVydGV4KCkKLXsKLSAgICBUU3RyaW5nIHM7Ci0KLSAgICAvLwotICAgIC8v
IEdlb21ldHJpYyBGdW5jdGlvbnMuCi0gICAgLy8KLSAgICAvL3MuYXBwZW5kKFRTdHJpbmcoInZl
YzQgZnRyYW5zZm9ybSgpOyIpKTsKLQotICAgIC8vCi0gICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMu
Ci0gICAgLy8KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRExvZChzYW1wbGVy
MkQgc2FtcGxlciwgdmVjMiBjb29yZCwgZmxvYXQgbG9kKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMzIGNvb3Jk
LCBmbG9hdCBsb2QpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFBy
b2pMb2Qoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzQgY29vcmQsIGZsb2F0IGxvZCk7IikpOwotICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZUN1YmVMb2Qoc2FtcGxlckN1YmUgc2FtcGxl
ciwgdmVjMyBjb29yZCwgZmxvYXQgbG9kKTsiKSk7Ci0KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJc
biIpKTsKLSAgICByZXR1cm4gczsKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8g
UHJvdG90eXBlcyBmb3IgYnVpbHQtaW4gZnVuY3Rpb25zIHNlZW4gYnkgZnJhZ21lbnQgc2hhZGVy
cyBvbmx5LgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIFRTdHJpbmcgQnVpbHRJ
bkZ1bmN0aW9uc0ZyYWdtZW50KCkKLXsKLSAgICBUU3RyaW5nIHM7Ci0KLSAgICAvLwotICAgIC8v
IFRleHR1cmUgRnVuY3Rpb25zLgotICAgIC8vCi0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0
ZXh0dXJlMkQoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzIgY29vcmQsIGZsb2F0IGJpYXMpOyIpKTsK
LSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBs
ZXIsIHZlYzMgY29vcmQsIGZsb2F0IGJpYXMpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2
ZWM0IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzQgY29vcmQsIGZsb2F0IGJp
YXMpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmVDdWJlKHNhbXBsZXJD
dWJlIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGJpYXMpOyIpKTsKLQotICAgIC8vcy5hcHBl
bmQoVFN0cmluZygiZmxvYXQgZEZkeChmbG9hdCBwKTsiKSk7Ci0gICAgLy9zLmFwcGVuZChUU3Ry
aW5nKCJ2ZWMyICBkRmR4KHZlYzIgIHApOyIpKTsKLSAgICAvL3MuYXBwZW5kKFRTdHJpbmcoInZl
YzMgIGRGZHgodmVjMyAgcCk7IikpOwotICAgIC8vcy5hcHBlbmQoVFN0cmluZygidmVjNCAgZEZk
eCh2ZWM0ICBwKTsiKSk7Ci0KLSAgICAvL3MuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRGZHkoZmxv
YXQgcCk7IikpOwotICAgIC8vcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZEZkeSh2ZWMyICBwKTsi
KSk7Ci0gICAgLy9zLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBkRmR5KHZlYzMgIHApOyIpKTsKLSAg
ICAvL3MuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGRGZHkodmVjNCAgcCk7IikpOwotCi0gICAgcy5h
cHBlbmQoVFN0cmluZygiZmxvYXQgZndpZHRoKGZsb2F0IHApOyIpKTsKLSAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMyICBmd2lkdGgodmVjMiAgcCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzMgIGZ3aWR0aCh2ZWMzICBwKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCAg
ZndpZHRoKHZlYzQgIHApOyIpKTsKLQotICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOwotICAg
IHJldHVybiBzOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBTdGFuZGFyZCB1
bmlmb3Jtcy4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIFN0YW5k
YXJkVW5pZm9ybXMoKQotewotICAgIFRTdHJpbmcgczsKLQotICAgIC8vCi0gICAgLy8gRGVwdGgg
cmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCi0gICAgLy8KLSAgICBzLmFwcGVuZChUU3RyaW5n
KCJzdHJ1Y3QgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgeyIpKTsKLSAgICBzLmFwcGVuZChUU3Ry
aW5nKCIgICAgaGlnaHAgZmxvYXQgbmVhcjsiKSk7ICAgICAgICAvLyBuCi0gICAgcy5hcHBlbmQo
VFN0cmluZygiICAgIGhpZ2hwIGZsb2F0IGZhcjsiKSk7ICAgICAgICAgLy8gZgotICAgIHMuYXBw
ZW5kKFRTdHJpbmcoIiAgICBoaWdocCBmbG9hdCBkaWZmOyIpKTsgICAgICAgIC8vIGYgLSBuCi0g
ICAgcy5hcHBlbmQoVFN0cmluZygifTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidW5pZm9y
bSBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0aFJhbmdlOyIpKTsKLQotICAgIHMuYXBw
ZW5kKFRTdHJpbmcoIlxuIikpOwotICAgIHJldHVybiBzOwotfQotCi0vLz09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS8vCi0vLyBEZWZhdWx0IHByZWNpc2lvbiBmb3IgdmVydGV4IHNoYWRlcnMuCi0vLwot
Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci1zdGF0aWMgVFN0cmluZyBEZWZhdWx0UHJlY2lzaW9uVmVy
dGV4KCkKLXsKLSAgICBUU3RyaW5nIHM7Ci0KLSAgICBzLmFwcGVuZChUU3RyaW5nKCJwcmVjaXNp
b24gaGlnaHAgaW50OyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJwcmVjaXNpb24gaGlnaHAg
ZmxvYXQ7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7Ci0gICAgcmV0dXJuIHM7
Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIERlZmF1bHQgcHJlY2lzaW9uIGZv
ciBmcmFnbWVudCBzaGFkZXJzLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotc3RhdGljIFRT
dHJpbmcgRGVmYXVsdFByZWNpc2lvbkZyYWdtZW50KCkKLXsKLSAgICBUU3RyaW5nIHM7Ci0KLSAg
ICBzLmFwcGVuZChUU3RyaW5nKCJwcmVjaXNpb24gbWVkaXVtcCBpbnQ7IikpOwotICAgIC8vIE5v
IGRlZmF1bHQgcHJlY2lzaW9uIGZvciBmbG9hdCBpbiBmcmFnbWVudCBzaGFkZXJzCi0KLSAgICBz
LmFwcGVuZChUU3RyaW5nKCJcbiIpKTsKLSAgICByZXR1cm4gczsKLX0KLQotLy89PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0vLwotLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIGNvbnN0
YW50cy4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5D
b25zdGFudHMoY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSAmcmVzb3VyY2VzKQotewotICAgIFRTdHJp
bmdTdHJlYW0gczsKLQotICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhWZXJ0ZXhBdHRyaWJzID0g
IiA8PCByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyA8PCAiOyI7Ci0gICAgcyA8PCAiY29uc3Qg
aW50IGdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJjZXMuTWF4VmVydGV4
VW5pZm9ybVZlY3RvcnMgPDwgIjsiOwotCi0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heFZhcnlp
bmdWZWN0b3JzID0gIiA8PCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPDwgIjsiOwotICAg
IHMgPDwgImNvbnN0IGludCBnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9ICIgPDwgcmVz
b3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKLSAgICBzIDw8ICJjb25z
dCBpbnQgZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLk1h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwotICAgIHMgPDwgImNvbnN0IGludCBn
bF9NYXhUZXh0dXJlSW1hZ2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVu
aXRzIDw8ICI7IjsKLSAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVj
dG9ycyA9ICIgPDwgcmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPDwgIjsiOwot
ICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhEcmF3QnVmZmVycyA9ICIgPDwgcmVzb3VyY2VzLk1h
eERyYXdCdWZmZXJzIDw8ICI7IjsKLQotICAgIHJldHVybiBzLnN0cigpOwotfQotCi12b2lkIFRC
dWlsdEluczo6aW5pdGlhbGl6ZShFU2hMYW5ndWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjLCBj
b25zdCBUQnVpbHRJblJlc291cmNlJiByZXNvdXJjZXMpCi17Ci0gICAgc3dpdGNoIChsYW5ndWFn
ZSkgewotICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OgotICAgICAgICBidWlsdEluU3RyaW5ncy5w
dXNoX2JhY2soRGVmYXVsdFByZWNpc2lvbkZyYWdtZW50KCkpOwotICAgICAgICBidWlsdEluU3Ry
aW5ncy5wdXNoX2JhY2soQnVpbHRJbkZ1bmN0aW9uc0NvbW1vbigpKTsKLSAgICAgICAgYnVpbHRJ
blN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnNGcmFnbWVudCgpKTsKLSAgICAgICAg
YnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKFN0YW5kYXJkVW5pZm9ybXMoKSk7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBFU2hMYW5nVmVydGV4OgotICAgICAgICBidWlsdEluU3RyaW5ncy5w
dXNoX2JhY2soRGVmYXVsdFByZWNpc2lvblZlcnRleCgpKTsKLSAgICAgICAgYnVpbHRJblN0cmlu
Z3MucHVzaF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnNDb21tb24oKSk7Ci0gICAgICAgIGJ1aWx0SW5T
dHJpbmdzLnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zVmVydGV4KCkpOwotICAgICAgICBidWls
dEluU3RyaW5ncy5wdXNoX2JhY2soU3RhbmRhcmRVbmlmb3JtcygpKTsKLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQi
KTsKLSAgICB9Ci0KLSAgICBidWlsdEluU3RyaW5ncy5wdXNoX2JhY2soQnVpbHRJbkNvbnN0YW50
cyhyZXNvdXJjZXMpKTsKLX0KLQotdm9pZCBJZGVudGlmeUJ1aWx0SW5zKEVTaExhbmd1YWdlIGxh
bmd1YWdlLCBFU2hTcGVjIHNwZWMsIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UmIHJlc291cmNlcywg
VFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLXsKLSAgICAvLwotICAgIC8vIEZpcnN0LCBpbnNl
cnQgc29tZSBzcGVjaWFsIGJ1aWx0LWluIHZhcmlhYmxlcyB0aGF0IGFyZSBub3QgaW4gCi0gICAg
Ly8gdGhlIGJ1aWx0LWluIGhlYWRlciBmaWxlcy4KLSAgICAvLwotICAgIHN3aXRjaChsYW5ndWFn
ZSkgewotICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OgotICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCAgICAgICAg
ICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29vcmQsICAgNCkp
KTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVi
cFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0NvbG9yIiksICAgICAg
ICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0
KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRT
dHJpbmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwg
RWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludENvb3JkIiksICAgICAg
ICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRDb29yZCwgIDIp
KSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBFU2hMYW5nVmVydGV4OgotICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bvc2l0
aW9uIiksICAgIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkpKTsK
LSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5n
KCJnbF9Qb2ludFNpemUiKSwgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludFNp
emUsICAgMSkpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2Ug
JiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIE5l
eHQsIGlkZW50aWZ5IHdoaWNoIGJ1aWx0LWlucyBmcm9tIHRoZSBhbHJlYWR5IGxvYWRlZCBoZWFk
ZXJzIGhhdmUKLSAgICAvLyBhIG1hcHBpbmcgdG8gYW4gb3BlcmF0b3IuICBUaG9zZSB0aGF0IGFy
ZSBub3QgaWRlbnRpZmllZCBhcyBzdWNoIGFyZQotICAgIC8vIGV4cGVjdGVkIHRvIGJlIHJlc29s
dmVkIHRocm91Z2ggYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucywgdmVyc3VzIGFzCi0gICAgLy8gb3Bl
cmF0aW9ucy4KLSAgICAvLwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdCIs
ICAgICAgICAgICAgICBFT3BWZWN0b3JMb2dpY2FsTm90KTsKLQotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoIm1hdHJpeENvbXBNdWx0IiwgICBFT3BNdWwpOwotCi0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFs
KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAg
RU9wVmVjdG9yTm90RXF1YWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxl
c3NUaGFuIiwgICAgICAgICBFT3BMZXNzVGhhbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiZ3JlYXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVh
bCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIs
IEVPcEdyZWF0ZXJUaGFuRXF1YWwpOwotICAgIAotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoInJhZGlhbnMiLCAgICAgIEVPcFJhZGlhbnMpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImRlZ3JlZXMiLCAgICAgIEVPcERlZ3JlZXMpOwotICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoInNpbiIsICAgICAgICAgIEVPcFNpbik7Ci0gICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigiY29zIiwgICAgICAgICAgRU9wQ29zKTsKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJ0YW4iLCAgICAgICAgICBFT3BUYW4pOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFzaW4iLCAgICAgICAgIEVPcEFzaW4pOwotICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImF0YW4iLCAgICAgICAgIEVPcEF0YW4pOwot
Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicG93IiwgICAgICAgICAgRU9wUG93
KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAyIiwgICAgICAgICBFT3BF
eHAyKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2ciLCAgICAgICAgICBF
T3BMb2cpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cCIsICAgICAgICAg
IEVPcEV4cCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nMiIsICAgICAg
ICAgRU9wTG9nMik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic3FydCIsICAg
ICAgICAgRU9wU3FydCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiaW52ZXJz
ZXNxcnQiLCAgRU9wSW52ZXJzZVNxcnQpOwotCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiYWJzIiwgICAgICAgICAgRU9wQWJzKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJzaWduIiwgICAgICAgICBFT3BTaWduKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJmbG9vciIsICAgICAgICBFT3BGbG9vcik7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiY2VpbCIsICAgICAgICAgRU9wQ2VpbCk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZnJhY3QiLCAgICAgICAgRU9wRnJhY3QpOwotICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1vZCIsICAgICAgICAgIEVPcE1vZCk7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigibWluIiwgICAgICAgICAgRU9wTWluKTsKLSAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtYXgiLCAgICAgICAgICBFT3BNYXgpOwotICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtaXgiLCAgICAgICAgICBFT3BNaXgpOwot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInN0ZXAiLCAgICAgICAgIEVPcFN0ZXAp
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNtb290aHN0ZXAiLCAgIEVPcFNt
b290aFN0ZXApOwotCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwg
ICAgICAgRU9wTGVuZ3RoKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0
YW5jZSIsICAgICBFT3BEaXN0YW5jZSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZG90IiwgICAgICAgICAgRU9wRG90KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJmYWNlZm9yd2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7Ci0gICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFj
dCk7Ci0gICAgCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYW55IiwgICAgICAg
ICAgRU9wQW55KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAg
ICAgICBFT3BBbGwpOwotCi0gICAgLy8gTWFwIGxhbmd1YWdlLXNwZWNpZmljIG9wZXJhdG9ycy4K
LSAgICBzd2l0Y2gobGFuZ3VhZ2UpIHsKLSAgICBjYXNlIEVTaExhbmdWZXJ0ZXg6Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OgotICAgICAgICAvL3N5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgIEVPcERQZHgpOyAgICAvLyBPRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCi0gICAgICAgIC8vc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiZEZkeSIsICAgRU9wRFBkeSk7ICAgIC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBl
eHRlbnNpb24KLSAgICAgICAgLy9zeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmd2lkdGgi
LCBFT3BGd2lkdGgpOyAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBGaW5hbGx5
IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCi0gICAgc3dpdGNoKGxhbmd1YWdlKSB7
Ci0gICAgY2FzZSBFU2hMYW5nRnJhZ21lbnQ6IHsKLSAgICAgICAgICAgIC8vIFNldCB1cCBnbF9G
cmFnRGF0YS4gIFRoZSBhcnJheSBzaXplLgotICAgICAgICAgICAgVFR5cGUgZnJhZ0RhdGEoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQsIGZhbHNlLCB0cnVlKTsKLSAgICAg
ICAgICAgIGZyYWdEYXRhLnNldEFycmF5U2l6ZShyZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOwot
ICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9GcmFnRGF0YSIpLCAgICBmcmFnRGF0YSkpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLX0KLQpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5p
dGlhbGl6ZS5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFs
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotI2lmbmRlZiBfSU5JVElBTElaRV9JTkNMVURFRF8KLSNkZWZpbmUgX0lOSVRJQUxJWkVfSU5D
TFVERURfCi0KLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKLSNpbmNsdWRlICJjb21waWxl
ci9TaEhhbmRsZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0KLXR5cGVk
ZWYgVFZlY3RvcjxUU3RyaW5nPiBUQnVpbHRJblN0cmluZ3M7Ci0KLWNsYXNzIFRCdWlsdElucyB7
Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2Nh
dG9yKQotCi0gICAgdm9pZCBpbml0aWFsaXplKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVj
IHNwZWMsIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UmIHJlc291cmNlcyk7Ci0gICAgY29uc3QgVEJ1
aWx0SW5TdHJpbmdzJiBnZXRCdWlsdEluU3RyaW5ncygpIHsgcmV0dXJuIGJ1aWx0SW5TdHJpbmdz
OyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUQnVpbHRJblN0cmluZ3MgYnVpbHRJblN0cmluZ3M7Ci19
OwotCi12b2lkIElkZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIEVTaFNwZWMg
c3BlYywgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3VyY2VzLAotICAgICAgICAgICAgICAg
ICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOwotCi1leHRlcm4gIkMiIGludCBJbml0
UHJlcHJvY2Vzc29yKHZvaWQpOwotZXh0ZXJuICJDIiBpbnQgRmluYWxpemVQcmVwcm9jZXNzb3Io
dm9pZCk7Ci0KLSNlbmRpZiAvLyBfSU5JVElBTElaRV9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNSArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5o
IgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZUdsb2JhbHMuaCIKLSNpbmNsdWRlICJj
b21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvb3Np
bmNsdWRlLmgiCi0KLU9TX1RMU0luZGV4IFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9TX0lOVkFM
SURfVExTX0lOREVYOwotCi1ib29sIEluaXRQcm9jZXNzKCkKLXsKLSAgICBpZiAoVGhyZWFkSW5p
dGlhbGl6ZUluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIC8vCi0gICAg
ICAgIC8vIEZ1bmN0aW9uIGlzIHJlLWVudHJhbnQuCi0gICAgICAgIC8vCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9TX0FsbG9jVExT
SW5kZXgoKTsKLQotICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggPT0gT1NfSU5WQUxJRF9U
TFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0
byBhbGxvY2F0ZSBUTFMgYXJlYSBmb3IgaW5pdCBmbGFnIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLQotICAgIGlmICghSW5pdGlhbGl6ZVBvb2xJbmRleCgpKSB7Ci0gICAgICAg
IGFzc2VydCgwICYmICJJbml0UHJvY2VzcygpOiBGYWlsZWQgdG8gaW5pdGFsaXplIGdsb2JhbCBw
b29sIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIUluaXRpYWxp
emVQYXJzZUNvbnRleHRJbmRleCgpKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0UHJvY2Vz
cygpOiBGYWlsZWQgdG8gaW5pdGFsaXplIHBhcnNlIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBJbml0VGhyZWFkKCk7Ci19Ci0KLWJvb2wgRGV0
YWNoUHJvY2VzcygpCi17Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLQotICAgIGlmIChUaHJl
YWRJbml0aWFsaXplSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgc3VjY2VzcyA9IERldGFjaFRocmVhZCgpOwotCi0gICAgaWYgKCFGcmVl
UGFyc2VDb250ZXh0SW5kZXgoKSkKLSAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgRnJl
ZVBvb2xJbmRleCgpOwotCi0gICAgT1NfRnJlZVRMU0luZGV4KFRocmVhZEluaXRpYWxpemVJbmRl
eCk7Ci0gICAgVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci0K
LSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBJbml0VGhyZWFkKCkKLXsKLSAgICAvLwot
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcmUtZW50cmFudAotICAgIC8vCi0gICAgaWYgKFRocmVh
ZEluaXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3Nl
cnQoMCAmJiAiSW5pdFRocmVhZCgpOiBQcm9jZXNzIGhhc24ndCBiZWVuIGluaXRhbGlzZWQuIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoT1NfR2V0VExTVmFsdWUo
VGhyZWFkSW5pdGlhbGl6ZUluZGV4KSAhPSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IEluaXRpYWxpemVHbG9iYWxQb29scygpOwotCi0gICAgaWYgKCFJbml0aWFsaXplR2xvYmFsUGFy
c2VDb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghT1NfU2V0VExT
VmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4LCAodm9pZCAqKTEpKSB7Ci0gICAgICAgIGFzc2Vy
dCgwICYmICJJbml0VGhyZWFkKCk6IFVuYWJsZSB0byBzZXQgaW5pdCBmbGFnLiIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGV0
YWNoVGhyZWFkKCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotCi0gICAgaWYgKFRocmVh
ZEluaXRpYWxpemVJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLwotICAgIC8vIEZ1bmN0aW9uIGlzIHJlLWVudHJhbnQgYW5kIHRoaXMg
dGhyZWFkIG1heSBub3QgaGF2ZSBiZWVuIGluaXRhbGlzZWQuCi0gICAgLy8KLSAgICBpZiAoT1Nf
R2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4KSAhPSAwKSB7Ci0gICAgICAgIGlmICgh
T1NfU2V0VExTVmFsdWUoVGhyZWFkSW5pdGlhbGl6ZUluZGV4LCAodm9pZCAqKTApKSB7Ci0gICAg
ICAgICAgICBhc3NlcnQoMCAmJiAiRGV0YWNoVGhyZWFkKCk6IFVuYWJsZSB0byBjbGVhciBpbml0
IGZsYWcuIik7Ci0gICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIUZyZWVQYXJzZUNvbnRleHQoKSkKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKLQotICAgICAgICBGcmVlR2xvYmFsUG9vbHMoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3Vj
Y2VzczsKLX0KLQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oCShyZXZpc2lvbiA3
NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLSNpZm5kZWYgX19JTklUSUFM
SVpFRExMX0gKLSNkZWZpbmUgX19JTklUSUFMSVpFRExMX0gKLQotYm9vbCBJbml0UHJvY2Vzcygp
OwotYm9vbCBEZXRhY2hQcm9jZXNzKCk7Ci0KLWJvb2wgSW5pdFRocmVhZCgpOwotYm9vbCBEZXRh
Y2hUaHJlYWQoKTsKLQotI2VuZGlmIC8vIF9fSU5JVElBTElaRURMTF9ICi0KSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX19JTklUSUFMSVpFX0dMT0JB
TFNfSU5DTFVERURfCi0jZGVmaW5lIF9fSU5JVElBTElaRV9HTE9CQUxTX0lOQ0xVREVEXwotCi12
b2lkIEluaXRpYWxpemVHbG9iYWxQb29scygpOwotdm9pZCBGcmVlR2xvYmFsUG9vbHMoKTsKLWJv
b2wgSW5pdGlhbGl6ZVBvb2xJbmRleCgpOwotdm9pZCBGcmVlUG9vbEluZGV4KCk7Ci0KLSNlbmRp
ZiAvLyBfX0lOSVRJQUxJWkVfR0xPQkFMU19JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21w
aWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdM
RS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDE2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgX19JTklUSUFMSVpF
X1BBUlNFX0NPTlRFWFRfSU5DTFVERURfCi0jZGVmaW5lIF9fSU5JVElBTElaRV9QQVJTRV9DT05U
RVhUX0lOQ0xVREVEXwotCi1ib29sIEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOwotYm9v
bCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKLQotYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VD
b250ZXh0KCk7Ci1ib29sIEZyZWVQYXJzZUNvbnRleHQoKTsKLQotI2VuZGlmIC8vIF9fSU5JVElB
TElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0lu
dGVybVRyYXZlcnNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJt
VHJhdmVyc2UuY3BwCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9JbnRl
cm1UcmF2ZXJzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjkzICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLQotLy8KLS8v
IFRyYXZlcnNlIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gdHJlZSwgYW5kCi0vLyBj
YWxsIGEgbm9kZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uIGZvciBlYWNoIG5vZGUuCi0vLyBEb25l
IHJlY3Vyc2l2ZWx5IHRocm91Z2ggdGhlIG1lbWJlciBmdW5jdGlvbiBUcmF2ZXJzZSgpLgotLy8g
Tm9kZSB0eXBlcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVpciBmdW5jdGlvbiB0byBjYWxsIGlzIDAs
Ci0vLyBidXQgdGhlaXIgc3VidHJlZSB3aWxsIHN0aWxsIGJlIHRyYXZlcnNlZC4KLS8vIE5vZGVz
IHdpdGggY2hpbGRyZW4gY2FuIGhhdmUgdGhlaXIgd2hvbGUgc3VidHJlZSBza2lwcGVkCi0vLyBp
ZiBwcmVWaXNpdCBpcyB0dXJuZWQgb24gYW5kIHRoZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uCi0v
LyByZXR1cm5zIGZhbHNlLgotLy8KLS8vIHByZVZpc2l0LCBwb3N0VmlzaXQsIGFuZCByaWdodFRv
TGVmdCBjb250cm9sIHdoYXQgb3JkZXIKLS8vIG5vZGVzIGFyZSB2aXNpdGVkIGluLgotLy8KLQot
Ly8KLS8vIFRyYXZlcnNhbCBmdW5jdGlvbnMgZm9yIHRlcm1pbmFscyBhcmUgc3RyYWlnaGZvcndh
cmQuLi4uCi0vLwotdm9pZCBUSW50ZXJtU3ltYm9sOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2Vy
KiBpdCkKLXsKLQlpdC0+dmlzaXRTeW1ib2wodGhpcyk7Ci19Ci0KLXZvaWQgVEludGVybUNvbnN0
YW50VW5pb246OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQotewotCWl0LT52aXNpdENv
bnN0YW50VW5pb24odGhpcyk7Ci19Ci0KLS8vCi0vLyBUcmF2ZXJzZSBhIGJpbmFyeSBub2RlLgot
Ly8KLXZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogaXQpCi17
Ci0JYm9vbCB2aXNpdCA9IHRydWU7Ci0KLQkvLwotCS8vIHZpc2l0IHRoZSBub2RlIGJlZm9yZSBj
aGlsZHJlbiBpZiBwcmUtdmlzaXRpbmcuCi0JLy8KLQlpZihpdC0+cHJlVmlzaXQpCi0JewotCQl2
aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7Ci0JfQotCQotCS8vCi0JLy8g
VmlzaXQgdGhlIGNoaWxkcmVuLCBpbiB0aGUgcmlnaHQgb3JkZXIuCi0JLy8KLQlpZih2aXNpdCkK
LQl7Ci0JCWl0LT5pbmNyZW1lbnREZXB0aCgpOwotCi0JCWlmKGl0LT5yaWdodFRvTGVmdCkgCi0J
CXsKLQkJCWlmKHJpZ2h0KQotCQkJewotCQkJCXJpZ2h0LT50cmF2ZXJzZShpdCk7Ci0JCQl9Ci0J
CQkKLQkJCWlmKGl0LT5pblZpc2l0KQotCQkJewotCQkJCXZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5
KEluVmlzaXQsIHRoaXMpOwotCQkJfQotCi0JCQlpZih2aXNpdCAmJiBsZWZ0KQotCQkJewotCQkJ
CWxlZnQtPnRyYXZlcnNlKGl0KTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCWlmKGxlZnQp
Ci0JCQl7Ci0JCQkJbGVmdC0+dHJhdmVyc2UoaXQpOwotCQkJfQotCQkJCi0JCQlpZihpdC0+aW5W
aXNpdCkKLQkJCXsKLQkJCQl2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsK
LQkJCX0KLQotCQkJaWYodmlzaXQgJiYgcmlnaHQpCi0JCQl7Ci0JCQkJcmlnaHQtPnRyYXZlcnNl
KGl0KTsKLQkJCX0KLQkJfQotCi0JCWl0LT5kZWNyZW1lbnREZXB0aCgpOwotCX0KLQotCS8vCi0J
Ly8gVmlzaXQgdGhlIG5vZGUgYWZ0ZXIgdGhlIGNoaWxkcmVuLCBpZiByZXF1ZXN0ZWQgYW5kIHRo
ZSB0cmF2ZXJzYWwKLQkvLyBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQgeWV0LgotCS8vCi0JaWYodmlz
aXQgJiYgaXQtPnBvc3RWaXNpdCkKLQl7Ci0JCWl0LT52aXNpdEJpbmFyeShQb3N0VmlzaXQsIHRo
aXMpOwotCX0KLX0KLQotLy8KLS8vIFRyYXZlcnNlIGEgdW5hcnkgbm9kZS4gIFNhbWUgY29tbWVu
dHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KLS8vCi12b2lkIFRJbnRlcm1VbmFyeTo6dHJh
dmVyc2UoVEludGVybVRyYXZlcnNlciogaXQpCi17Ci0JYm9vbCB2aXNpdCA9IHRydWU7Ci0KLQlp
ZiAoaXQtPnByZVZpc2l0KQotCQl2aXNpdCA9IGl0LT52aXNpdFVuYXJ5KFByZVZpc2l0LCB0aGlz
KTsKLQotCWlmICh2aXNpdCkgewotCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKLQkJb3BlcmFuZC0+
dHJhdmVyc2UoaXQpOwotCQlpdC0+ZGVjcmVtZW50RGVwdGgoKTsKLQl9Ci0JCi0JaWYgKHZpc2l0
ICYmIGl0LT5wb3N0VmlzaXQpCi0JCWl0LT52aXNpdFVuYXJ5KFBvc3RWaXNpdCwgdGhpcyk7Ci19
Ci0KLS8vCi0vLyBUcmF2ZXJzZSBhbiBhZ2dyZWdhdGUgbm9kZS4gIFNhbWUgY29tbWVudHMgaW4g
YmluYXJ5IG5vZGUgYXBwbHkgaGVyZS4KLS8vCi12b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OnRyYXZl
cnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQotewotCWJvb2wgdmlzaXQgPSB0cnVlOwotCQotCWlm
KGl0LT5wcmVWaXNpdCkKLQl7Ci0JCXZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKFByZVZpc2l0
LCB0aGlzKTsKLQl9Ci0JCi0JaWYodmlzaXQpCi0JewotCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsK
LQotCQlpZihpdC0+cmlnaHRUb0xlZnQpCi0JCXsKLQkJCWZvcihUSW50ZXJtU2VxdWVuY2U6OnJl
dmVyc2VfaXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UucmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5y
ZW5kKCk7IHNpdCsrKQotCQkJewotCQkJCSgqc2l0KS0+dHJhdmVyc2UoaXQpOwotCi0JCQkJaWYo
dmlzaXQgJiYgaXQtPmluVmlzaXQpCi0JCQkJewotCQkJCQlpZigqc2l0ICE9IHNlcXVlbmNlLmZy
b250KCkpCi0JCQkJCXsKLQkJCQkJCXZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKEluVmlzaXQs
IHRoaXMpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJZm9yKFRJ
bnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0ICE9IHNl
cXVlbmNlLmVuZCgpOyBzaXQrKykKLQkJCXsKLQkJCQkoKnNpdCktPnRyYXZlcnNlKGl0KTsKLQot
CQkJCWlmKHZpc2l0ICYmIGl0LT5pblZpc2l0KQotCQkJCXsKLQkJCQkJaWYoKnNpdCAhPSBzZXF1
ZW5jZS5iYWNrKCkpCi0JCQkJCXsKLQkJCQkJCXZpc2l0ID0gaXQtPnZpc2l0QWdncmVnYXRlKElu
VmlzaXQsIHRoaXMpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlpdC0+ZGVjcmVt
ZW50RGVwdGgoKTsKLQl9Ci0KLQlpZih2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQotCXsKLQkJaXQt
PnZpc2l0QWdncmVnYXRlKFBvc3RWaXNpdCwgdGhpcyk7Ci0JfQotfQotCi0vLwotLy8gVHJhdmVy
c2UgYSBzZWxlY3Rpb24gbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBwbHkg
aGVyZS4KLS8vCi12b2lkIFRJbnRlcm1TZWxlY3Rpb246OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJz
ZXIqIGl0KQotewotCWJvb2wgdmlzaXQgPSB0cnVlOwotCi0JaWYgKGl0LT5wcmVWaXNpdCkKLQkJ
dmlzaXQgPSBpdC0+dmlzaXRTZWxlY3Rpb24oUHJlVmlzaXQsIHRoaXMpOwotCQotCWlmICh2aXNp
dCkgewotCQlpdC0+aW5jcmVtZW50RGVwdGgoKTsKLQkJaWYgKGl0LT5yaWdodFRvTGVmdCkgewot
CQkJaWYgKGZhbHNlQmxvY2spCi0JCQkJZmFsc2VCbG9jay0+dHJhdmVyc2UoaXQpOwotCQkJaWYg
KHRydWVCbG9jaykKLQkJCQl0cnVlQmxvY2stPnRyYXZlcnNlKGl0KTsKLQkJCWNvbmRpdGlvbi0+
dHJhdmVyc2UoaXQpOwotCQl9IGVsc2UgewotCQkJY29uZGl0aW9uLT50cmF2ZXJzZShpdCk7Ci0J
CQlpZiAodHJ1ZUJsb2NrKQotCQkJCXRydWVCbG9jay0+dHJhdmVyc2UoaXQpOwotCQkJaWYgKGZh
bHNlQmxvY2spCi0JCQkJZmFsc2VCbG9jay0+dHJhdmVyc2UoaXQpOwotCQl9Ci0JCWl0LT5kZWNy
ZW1lbnREZXB0aCgpOwotCX0KLQotCWlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQotCQlpdC0+
dmlzaXRTZWxlY3Rpb24oUG9zdFZpc2l0LCB0aGlzKTsKLX0KLQotLy8KLS8vIFRyYXZlcnNlIGEg
bG9vcCBub2RlLiAgU2FtZSBjb21tZW50cyBpbiBiaW5hcnkgbm9kZSBhcHBseSBoZXJlLgotLy8K
LXZvaWQgVEludGVybUxvb3A6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqIGl0KQotewotCWJv
b2wgdmlzaXQgPSB0cnVlOwotCi0JaWYoaXQtPnByZVZpc2l0KQotCXsKLQkJdmlzaXQgPSBpdC0+
dmlzaXRMb29wKFByZVZpc2l0LCB0aGlzKTsKLQl9Ci0JCi0JaWYodmlzaXQpCi0JewotCQlpdC0+
aW5jcmVtZW50RGVwdGgoKTsKLQotCQlpZihpdC0+cmlnaHRUb0xlZnQpCi0JCXsKLQkJCWlmKHRl
cm1pbmFsKQotCQkJewotCQkJCXRlcm1pbmFsLT50cmF2ZXJzZShpdCk7Ci0JCQl9Ci0KLQkJCWlm
KGJvZHkpCi0JCQl7Ci0JCQkJYm9keS0+dHJhdmVyc2UoaXQpOwotCQkJfQotCi0JCQlpZih0ZXN0
KQotCQkJewotCQkJCXRlc3QtPnRyYXZlcnNlKGl0KTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsK
LQkJCWlmKHRlc3QpCi0JCQl7Ci0JCQkJdGVzdC0+dHJhdmVyc2UoaXQpOwotCQkJfQotCi0JCQlp
Zihib2R5KQotCQkJewotCQkJCWJvZHktPnRyYXZlcnNlKGl0KTsKLQkJCX0KLQotCQkJaWYodGVy
bWluYWwpCi0JCQl7Ci0JCQkJdGVybWluYWwtPnRyYXZlcnNlKGl0KTsKLQkJCX0KLQkJfQotCi0J
CWl0LT5kZWNyZW1lbnREZXB0aCgpOwotCX0KLQotCWlmKHZpc2l0ICYmIGl0LT5wb3N0VmlzaXQp
Ci0JewotCQlpdC0+dmlzaXRMb29wKFBvc3RWaXNpdCwgdGhpcyk7Ci0JfQotfQotCi0vLwotLy8g
VHJhdmVyc2UgYSBicmFuY2ggbm9kZS4gIFNhbWUgY29tbWVudHMgaW4gYmluYXJ5IG5vZGUgYXBw
bHkgaGVyZS4KLS8vCi12b2lkIFRJbnRlcm1CcmFuY2g6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJz
ZXIqIGl0KQotewotCWJvb2wgdmlzaXQgPSB0cnVlOwotCi0JaWYgKGl0LT5wcmVWaXNpdCkKLQkJ
dmlzaXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRoaXMpOwotCQotCWlmICh2aXNpdCAm
JiBleHByZXNzaW9uKSB7Ci0JCWl0LT5pbmNyZW1lbnREZXB0aCgpOwotCQlleHByZXNzaW9uLT50
cmF2ZXJzZShpdCk7Ci0JCWl0LT5kZWNyZW1lbnREZXB0aCgpOwotCX0KLQotCWlmICh2aXNpdCAm
JiBpdC0+cG9zdFZpc2l0KQotCQlpdC0+dmlzaXRCcmFuY2goUG9zdFZpc2l0LCB0aGlzKTsKLX0K
LQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDc0NjU4KQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTM4NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLwotLy8gQnVpbGQgdGhlIGlu
dGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KLS8vCi0KLSNpbmNsdWRlIDxmbG9hdC5oPgotI2lu
Y2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgImNvbXBp
bGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUXVhbGlmaWVyQWxp
dmUuaCIKLSNpbmNsdWRlICJjb21waWxlci9SZW1vdmVUcmVlLmgiCi0KLWJvb2wgQ29tcGFyZVN0
cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVu
aW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KTsKLQotc3RhdGljIFRQcmVj
aXNpb24gR2V0SGlnaGVyUHJlY2lzaW9uKCBUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmln
aHQgKXsKLSAgICByZXR1cm4gbGVmdCA+IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0OwotfQotCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLwotLy8gRmlyc3Qgc2V0IG9mIGZ1bmN0aW9ucyBhcmUgdG8gaGVs
cCBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgotLy8gVGhlc2UgZnVuY3Rp
b25zIGFyZSBub3QgbWVtYmVyIGZ1bmN0aW9ucyBvZiB0aGUgbm9kZXMuCi0vLyBUaGV5IGFyZSBj
YWxsZWQgZnJvbSBwYXJzZXIgcHJvZHVjdGlvbnMuCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LQotLy8KLS8vIEFkZCBhIHRlcm1pbmFsIG5vZGUgZm9yIGFuIGlkZW50aWZpZXIgaW4gYW4gZXhw
cmVzc2lvbi4KLS8vCi0vLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgotLy8KLVRJbnRlcm1TeW1i
b2wqIFRJbnRlcm1lZGlhdGU6OmFkZFN5bWJvbChpbnQgaWQsIGNvbnN0IFRTdHJpbmcmIG5hbWUs
IGNvbnN0IFRUeXBlJiB0eXBlLCBUU291cmNlTG9jIGxpbmUpCi17Ci0gICAgVEludGVybVN5bWJv
bCogbm9kZSA9IG5ldyBUSW50ZXJtU3ltYm9sKGlkLCBuYW1lLCB0eXBlKTsKLSAgICBub2RlLT5z
ZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBDb25uZWN0IHR3
byBub2RlcyB3aXRoIGEgbmV3IHBhcmVudCB0aGF0IGRvZXMgYSBiaW5hcnkgb3BlcmF0aW9uIG9u
IHRoZSBub2Rlcy4KLS8vCi0vLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgotLy8KLVRJbnRlcm1U
eXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1U
eXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyBsaW5lLCBUU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBF
T3BMZXNzVGhhbjoKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKLSAgICAgICAgY2FzZSBF
T3BMZXNzVGhhbkVxdWFsOgotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6Ci0gICAg
ICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmlzTWF0cml4KCkgfHwgbGVmdC0+Z2V0VHlwZSgp
LmlzQXJyYXkoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNWZWN0b3IoKSB8fCBsZWZ0LT5nZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BM
b2dpY2FsT3I6Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKLSAgICAgICAgY2FzZSBFT3BM
b2dpY2FsQW5kOgotICAgICAgICAgICAgaWYgKGxlZnQtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRCb29sIHx8IGxlZnQtPmdldFR5cGUoKS5pc01hdHJpeCgpIHx8IGxlZnQtPmdldFR5
cGUoKS5pc0FycmF5KCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmlzVmVjdG9yKCkpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcEFkZDoKLSAgICAgICAgY2FzZSBFT3BTdWI6Ci0gICAgICAgIGNhc2UgRU9w
RGl2OgotICAgICAgICBjYXNlIEVPcE11bDoKLSAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IGxlZnQtPmdldFR5cGUoKS5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRCb29sKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBk
ZWZhdWx0OiBicmVhazsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEZpcnN0IHRyeSBjb252ZXJ0
aW5nIHRoZSBjaGlsZHJlbiB0byBjb21wYXRpYmxlIHR5cGVzLgotICAgIC8vCi0KLSAgICBpZiAo
IShsZWZ0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkgJiYgcmlnaHQtPmdldFR5cGUoKS5nZXRTdHJ1
Y3QoKSkpIHsKLSAgICAgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3As
IGxlZnQtPmdldFR5cGUoKSwgcmlnaHQpOwotICAgICAgICBpZiAoY2hpbGQpCi0gICAgICAgICAg
ICByaWdodCA9IGNoaWxkOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoaWxkID0gYWRk
Q29udmVyc2lvbihvcCwgcmlnaHQtPmdldFR5cGUoKSwgbGVmdCk7Ci0gICAgICAgICAgICBpZiAo
Y2hpbGQpCi0gICAgICAgICAgICAgICAgbGVmdCA9IGNoaWxkOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKGxlZnQtPmdldFR5cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0KLSAgICAvLwotICAgIC8vIE5lZWQgYSBuZXcgbm9kZSBob2xk
aW5nIHRoaW5ncyB0b2dldGhlciB0aGVuLiAgTWFrZQotICAgIC8vIG9uZSBhbmQgcHJvbW90ZSBp
dCB0byB0aGUgcmlnaHQgdHlwZS4KLSAgICAvLwotICAgIFRJbnRlcm1CaW5hcnkqIG5vZGUgPSBu
ZXcgVEludGVybUJpbmFyeShvcCk7Ci0gICAgaWYgKGxpbmUgPT0gMCkKLSAgICAgICAgbGluZSA9
IHJpZ2h0LT5nZXRMaW5lKCk7Ci0gICAgbm9kZS0+c2V0TGluZShsaW5lKTsKLQotICAgIG5vZGUt
PnNldExlZnQobGVmdCk7Ci0gICAgbm9kZS0+c2V0UmlnaHQocmlnaHQpOwotICAgIGlmICghIG5v
ZGUtPnByb21vdGUoaW5mb1NpbmspKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRJbnRlcm1D
b25zdGFudFVuaW9uICpsZWZ0VGVtcENvbnN0YW50ID0gbGVmdC0+Z2V0QXNDb25zdGFudFVuaW9u
KCk7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24gKnJpZ2h0VGVtcENvbnN0YW50ID0gcmlnaHQt
PmdldEFzQ29uc3RhbnRVbmlvbigpOwotCi0gICAgLy8KLSAgICAvLyBTZWUgaWYgd2UgY2FuIGZv
bGQgY29uc3RhbnRzLgotICAgIC8vCi0KLSAgICBUSW50ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9k
ZSA9IDA7Ci0gICAgaWYgKCBsZWZ0VGVtcENvbnN0YW50ICYmIHJpZ2h0VGVtcENvbnN0YW50KSB7
Ci0gICAgICAgIHR5cGVkUmV0dXJuTm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+
Z2V0T3AoKSwgcmlnaHRUZW1wQ29uc3RhbnQsIGluZm9TaW5rKTsKLQotICAgICAgICBpZiAodHlw
ZWRSZXR1cm5Ob2RlKQotICAgICAgICAgICAgcmV0dXJuIHR5cGVkUmV0dXJuTm9kZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbm9kZTsKLX0KLQotLy8KLS8vIENvbm5lY3QgdHdvIG5vZGVzIHRocm91
Z2ggYW4gYXNzaWdubWVudC4KLS8vCi0vLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgotLy8KLVRJ
bnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQXNzaWduKFRPcGVyYXRvciBvcCwgVEludGVy
bVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jIGxpbmUpCi17Ci0g
ICAgLy8KLSAgICAvLyBMaWtlIGFkZGluZyBiaW5hcnkgbWF0aCwgZXhjZXB0IHRoZSBjb252ZXJz
aW9uIGNhbiBvbmx5IGdvCi0gICAgLy8gZnJvbSByaWdodCB0byBsZWZ0LgotICAgIC8vCi0gICAg
VEludGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKLSAgICBpZiAobGlu
ZSA9PSAwKQotICAgICAgICBsaW5lID0gbGVmdC0+Z2V0TGluZSgpOwotICAgIG5vZGUtPnNldExp
bmUobGluZSk7Ci0KLSAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwg
bGVmdC0+Z2V0VHlwZSgpLCByaWdodCk7Ci0gICAgaWYgKGNoaWxkID09IDApCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgbm9kZS0+c2V0TGVmdChsZWZ0KTsKLSAgICBub2RlLT5zZXRSaWdodChj
aGlsZCk7Ci0gICAgaWYgKCEgbm9kZS0+cHJvbW90ZShpbmZvU2luaykpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBDb25uZWN0IHR3byBub2RlcyB0
aHJvdWdoIGFuIGluZGV4IG9wZXJhdG9yLCB3aGVyZSB0aGUgbGVmdCBub2RlIGlzIHRoZSBiYXNl
Ci0vLyBvZiBhbiBhcnJheSBvciBzdHJ1Y3QsIGFuZCB0aGUgcmlnaHQgbm9kZSBpcyBhIGRpcmVj
dCBvciBpbmRpcmVjdCBvZmZzZXQuCi0vLwotLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KLS8v
IFRoZSBjYWxsZXIgc2hvdWxkIHNldCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuZWQgbm9kZS4KLS8v
Ci1USW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEluZGV4KFRPcGVyYXRvciBvcCwgVElu
dGVybVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBUU291cmNlTG9jIGxpbmUpCi17
Ci0gICAgVEludGVybUJpbmFyeSogbm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wKTsKLSAgICBp
ZiAobGluZSA9PSAwKQotICAgICAgICBsaW5lID0gaW5kZXgtPmdldExpbmUoKTsKLSAgICBub2Rl
LT5zZXRMaW5lKGxpbmUpOwotICAgIG5vZGUtPnNldExlZnQoYmFzZSk7Ci0gICAgbm9kZS0+c2V0
UmlnaHQoaW5kZXgpOwotCi0gICAgLy8gY2FsbGVyIHNob3VsZCBzZXQgdGhlIHR5cGUKLQotICAg
IHJldHVybiBub2RlOwotfQotCi0vLwotLy8gQWRkIG9uZSBub2RlIGFzIHRoZSBwYXJlbnQgb2Yg
YW5vdGhlciB0aGF0IGl0IG9wZXJhdGVzIG9uLgotLy8KLS8vIFJldHVybnMgdGhlIGFkZGVkIG5v
ZGUuCi0vLwotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJh
dG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBUU291cmNlTG9jIGxpbmUsIFRTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUpCi17Ci0gICAgVEludGVybVVuYXJ5KiBub2RlOwotICAgIFRJbnRl
cm1UeXBlZCogY2hpbGQgPSBjaGlsZE5vZGUtPmdldEFzVHlwZWQoKTsKLQotICAgIGlmIChjaGls
ZCA9PSAwKSB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxF
cnJvciwgIkJhZCB0eXBlIGluIEFkZFVuYXJ5TWF0aCIsIGxpbmUpOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbE5v
dDoKLSAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVi
dEJvb2wgfHwgY2hpbGQtPmdldFR5cGUoKS5pc01hdHJpeCgpIHx8IGNoaWxkLT5nZXRUeXBlKCku
aXNBcnJheSgpIHx8IGNoaWxkLT5nZXRUeXBlKCkuaXNWZWN0b3IoKSkgewotICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoK
LSAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURlY3Jl
bWVudDoKLSAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAgICAgICAgIGlmIChjaGlsZC0+
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCBjaGlsZC0+Z2V0VHlwZSgp
LmlzQXJyYXkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZGVmYXVsdDog
YnJlYWs7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBEbyB3ZSBuZWVkIHRvIHByb21vdGUgdGhl
IG9wZXJhbmQ/Ci0gICAgLy8KLSAgICAvLyBOb3RlOiBJbXBsaWNpdCBwcm9tb3Rpb25zIHdlcmUg
cmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KLSAgICAvLwotICAgIFRCYXNpY1R5cGUgbmV3VHlw
ZSA9IEVidFZvaWQ7Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEludDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0RmxvYXQ7IGJyZWFrOwotICAgICAgICBkZWZhdWx0
OiBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobmV3VHlwZSAhPSBFYnRWb2lkKSB7Ci0gICAgICAg
IGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5cGUobmV3VHlwZSwgY2hpbGQtPmdldFByZWNp
c2lvbigpLCBFdnFUZW1wb3JhcnksCi0gICAgICAgICAgICBjaGlsZC0+Z2V0Tm9taW5hbFNpemUo
KSwKLSAgICAgICAgICAgIGNoaWxkLT5pc01hdHJpeCgpLAotICAgICAgICAgICAgY2hpbGQtPmlz
QXJyYXkoKSksCi0gICAgICAgICAgICBjaGlsZCk7Ci0gICAgICAgIGlmIChjaGlsZCA9PSAwKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBGb3IgY29uc3Ry
dWN0b3JzLCB3ZSBhcmUgbm93IGRvbmUsIGl0J3MgYWxsIGluIHRoZSBjb252ZXJzaW9uLgotICAg
IC8vCi0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKLSAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZs
b2F0OgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgICAgICBkZWZhdWx0OiBicmVhazsK
LSAgICB9Ci0KLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqY2hpbGRUZW1wQ29uc3RhbnQgPSAw
OwotICAgIGlmIChjaGlsZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCi0gICAgICAgIGNoaWxkVGVt
cENvbnN0YW50ID0gY2hpbGQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotCi0gICAgLy8KLSAgICAv
LyBNYWtlIGEgbmV3IG5vZGUgZm9yIHRoZSBvcGVyYXRvci4KLSAgICAvLwotICAgIG5vZGUgPSBu
ZXcgVEludGVybVVuYXJ5KG9wKTsKLSAgICBpZiAobGluZSA9PSAwKQotICAgICAgICBsaW5lID0g
Y2hpbGQtPmdldExpbmUoKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotICAgIG5vZGUtPnNl
dE9wZXJhbmQoY2hpbGQpOwotCi0gICAgaWYgKCEgbm9kZS0+cHJvbW90ZShpbmZvU2luaykpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGNoaWxkVGVtcENvbnN0YW50KSAgewotICAgICAg
ICBUSW50ZXJtVHlwZWQqIG5ld0NoaWxkID0gY2hpbGRUZW1wQ29uc3RhbnQtPmZvbGQob3AsIDAs
IGluZm9TaW5rKTsKLQotICAgICAgICBpZiAobmV3Q2hpbGQpCi0gICAgICAgICAgICByZXR1cm4g
bmV3Q2hpbGQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLS8vCi0vLyBUaGlzIGlz
IHRoZSBzYWZlIHdheSB0byBjaGFuZ2UgdGhlIG9wZXJhdG9yIG9uIGFuIGFnZ3JlZ2F0ZSwgYXMg
aXQKLS8vIGRvZXMgbG90cyBvZiBlcnJvciBjaGVja2luZyBhbmQgZml4aW5nLiAgRXNwZWNpYWxs
eSBmb3IgZXN0YWJsaXNoaW5nCi0vLyBhIGZ1bmN0aW9uIGNhbGwncyBvcGVyYXRpb24gb24gaXQn
cyBzZXQgb2YgcGFyYW1ldGVycy4gIFNlcXVlbmNlcwotLy8gb2YgaW5zdHJ1Y3Rpb25zIGFyZSBh
bHNvIGFnZ3JlZ2F0ZXMsIGJ1dCB0aGV5IGp1c3QgZGlyZW5jdGx5IHNldAotLy8gdGhlaXIgb3Bl
cmF0b3IgdG8gRU9wU2VxdWVuY2UuCi0vLwotLy8gUmV0dXJucyBhbiBhZ2dyZWdhdGUgbm9kZSwg
d2hpY2ggY291bGQgYmUgdGhlIG9uZSBwYXNzZWQgaW4gaWYKLS8vIGl0IHdhcyBhbHJlYWR5IGFu
IGFnZ3JlZ2F0ZS4KLS8vCi1USW50ZXJtQWdncmVnYXRlKiBUSW50ZXJtZWRpYXRlOjpzZXRBZ2dy
ZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSogbm9kZSwgVE9wZXJhdG9yIG9wLCBUU291cmNlTG9j
IGxpbmUpCi17Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZTsKLQotICAgIC8vCi0gICAg
Ly8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWdncmVnYXRlLiAgSWYgbm90IHR1cm4gaXQgaW50byBv
bmUuCi0gICAgLy8KLSAgICBpZiAobm9kZSkgewotICAgICAgICBhZ2dOb2RlID0gbm9kZS0+Z2V0
QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAgaWYgKGFnZ05vZGUgPT0gMCB8fCBhZ2dOb2RlLT5nZXRP
cCgpICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBNYWtlIGFu
IGFnZ3JlZ2F0ZSBjb250YWluaW5nIHRoaXMgbm9kZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICBhZ2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGUoKTsKLSAgICAgICAgICAgIGFnZ05v
ZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5vZGUpOwotICAgICAgICAgICAgaWYgKGxpbmUg
PT0gMCkKLSAgICAgICAgICAgICAgICBsaW5lID0gbm9kZS0+Z2V0TGluZSgpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlCi0gICAgICAgIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZSgpOwot
Ci0gICAgLy8KLSAgICAvLyBTZXQgdGhlIG9wZXJhdG9yLgotICAgIC8vCi0gICAgYWdnTm9kZS0+
c2V0T3Aob3ApOwotICAgIGlmIChsaW5lICE9IDApCi0gICAgICAgIGFnZ05vZGUtPnNldExpbmUo
bGluZSk7Ci0KLSAgICByZXR1cm4gYWdnTm9kZTsKLX0KLQotLy8KLS8vIENvbnZlcnQgb25lIHR5
cGUgdG8gYW5vdGhlci4KLS8vCi0vLyBSZXR1cm5zIHRoZSBub2RlIHJlcHJlc2VudGluZyB0aGUg
Y29udmVyc2lvbiwgd2hpY2ggY291bGQgYmUgdGhlIHNhbWUKLS8vIG5vZGUgcGFzc2VkIGluIGlm
IG5vIGNvbnZlcnNpb24gd2FzIG5lZWRlZC4KLS8vCi0vLyBSZXR1cm4gMCBpZiBhIGNvbnZlcnNp
b24gY2FuJ3QgYmUgZG9uZS4KLS8vCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENv
bnZlcnNpb24oVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgdHlwZSwgVEludGVybVR5cGVkKiBu
b2RlKQotewotICAgIC8vCi0gICAgLy8gRG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJhdGlv
bj8KLSAgICAvLwotICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAg
Y2FzZSBFYnRWb2lkOgotICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2FzZSBF
YnRTYW1wbGVyQ3ViZToKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBkZWZhdWx0OiBi
cmVhazsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIE90aGVyd2lzZSwgaWYgdHlwZXMgYXJlIGlk
ZW50aWNhbCwgbm8gcHJvYmxlbQotICAgIC8vCi0gICAgaWYgKHR5cGUgPT0gbm9kZS0+Z2V0VHlw
ZSgpKQotICAgICAgICByZXR1cm4gbm9kZTsKLQotICAgIC8vCi0gICAgLy8gSWYgb25lJ3MgYSBz
dHJ1Y3R1cmUsIHRoZW4gbm8gY29udmVyc2lvbnMuCi0gICAgLy8KLSAgICBpZiAodHlwZS5nZXRT
dHJ1Y3QoKSB8fCBub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgLy8KLSAgICAvLyBJZiBvbmUncyBhbiBhcnJheSwgdGhlbiBubyBjb252ZXJzaW9u
cy4KLSAgICAvLwotICAgIGlmICh0eXBlLmlzQXJyYXkoKSB8fCBub2RlLT5nZXRUeXBlKCkuaXNB
cnJheSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRCYXNpY1R5cGUgcHJvbW90ZVRvOwot
Ci0gICAgc3dpdGNoIChvcCkgewotICAgICAgICAvLwotICAgICAgICAvLyBFeHBsaWNpdCBjb252
ZXJzaW9ucwotICAgICAgICAvLwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAg
ICAgICAgICBwcm9tb3RlVG8gPSBFYnRCb29sOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6Ci0gICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRGbG9h
dDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKLSAg
ICAgICAgICAgIHByb21vdGVUbyA9IEVidEludDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIGltcGxpY2l0IGNvbnZl
cnNpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KLSAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBub2RlLT5nZXRUeXBlKCkuZ2V0
QmFzaWNUeXBlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAvLwot
ICAgICAgICAgICAgLy8gU2l6ZSBhbmQgc3RydWN0dXJlIGNvdWxkIHN0aWxsIGRpZmZlciwgYnV0
IHRoYXQncwotICAgICAgICAgICAgLy8gaGFuZGxlZCBieSBvcGVyYXRvciBwcm9tb3Rpb24uCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgfQotCi0gICAgaWYg
KG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7Ci0KLSAgICAgICAgcmV0dXJuIChwcm9tb3Rl
Q29uc3RhbnRVbmlvbihwcm9tb3RlVG8sIG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpKSk7Ci0g
ICAgfSBlbHNlIHsKLQotICAgICAgICAvLwotICAgICAgICAvLyBBZGQgYSBuZXcgbmV3Tm9kZSBm
b3IgdGhlIGNvbnZlcnNpb24uCi0gICAgICAgIC8vCi0gICAgICAgIFRJbnRlcm1VbmFyeSogbmV3
Tm9kZSA9IDA7Ci0KLSAgICAgICAgVE9wZXJhdG9yIG5ld09wID0gRU9wTnVsbDsKLSAgICAgICAg
c3dpdGNoIChwcm9tb3RlVG8pIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEVidEludDogICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIG5ld09wID0gRU9wQ29udkJvb2xUb0Zs
b2F0OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJh
ZCBwcm9tb3Rpb24gbm9kZSIsIG5vZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICBu
ZXdPcCA9IEVPcENvbnZJbnRUb0Jvb2w7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6IG5ld09wID0gRU9wQ29udkZsb2F0VG9Cb29sOyBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkJhZCBwcm9tb3Rpb24gbm9kZSIsIG5v
ZGUtPmdldExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVi
dEludDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9J
bnQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0g
RU9wQ29udkZsb2F0VG9JbnQ7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCAiQmFkIHByb21vdGlvbiBub2RlIiwgbm9kZS0+Z2V0TGluZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQmFkIHByb21vdGlvbiB0
eXBlIiwgbm9kZS0+Z2V0TGluZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgfQotCi0gICAgICAgIFRUeXBlIHR5cGUocHJvbW90ZVRvLCBub2RlLT5nZXRQcmVjaXNpb24o
KSwgRXZxVGVtcG9yYXJ5LCBub2RlLT5nZXROb21pbmFsU2l6ZSgpLCBub2RlLT5pc01hdHJpeCgp
LCBub2RlLT5pc0FycmF5KCkpOwotICAgICAgICBuZXdOb2RlID0gbmV3IFRJbnRlcm1VbmFyeShu
ZXdPcCwgdHlwZSk7Ci0gICAgICAgIG5ld05vZGUtPnNldExpbmUobm9kZS0+Z2V0TGluZSgpKTsK
LSAgICAgICAgbmV3Tm9kZS0+c2V0T3BlcmFuZChub2RlKTsKLQotICAgICAgICByZXR1cm4gbmV3
Tm9kZTsKLSAgICB9Ci19Ci0KLS8vCi0vLyBTYWZlIHdheSB0byBjb21iaW5lIHR3byBub2RlcyBp
bnRvIGFuIGFnZ3JlZ2F0ZS4gIFdvcmtzIHdpdGggbnVsbCBwb2ludGVycywKLS8vIGEgbm9kZSB0
aGF0J3Mgbm90IGEgYWdncmVnYXRlIHlldCwgZXRjLgotLy8KLS8vIFJldHVybnMgdGhlIHJlc3Vs
dGluZyBhZ2dyZWdhdGUsIHVubGVzcyAwIHdhcyBwYXNzZWQgaW4gZm9yCi0vLyBib3RoIGV4aXN0
aW5nIG5vZGVzLgotLy8KLVRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6Omdyb3dBZ2dy
ZWdhdGUoVEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgVFNvdXJjZUxvYyBs
aW5lKQotewotICAgIGlmIChsZWZ0ID09IDAgJiYgcmlnaHQgPT0gMCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dOb2RlID0gMDsKLSAgICBpZiAobGVmdCkK
LSAgICAgICAgYWdnTm9kZSA9IGxlZnQtPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgaWYgKCFhZ2dO
b2RlIHx8IGFnZ05vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCkgewotICAgICAgICBhZ2dOb2RlID0g
bmV3IFRJbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIGlmIChsZWZ0KQotICAgICAgICAgICAgYWdn
Tm9kZS0+Z2V0U2VxdWVuY2UoKS5wdXNoX2JhY2sobGVmdCk7Ci0gICAgfQotCi0gICAgaWYgKHJp
Z2h0KQotICAgICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhyaWdodCk7Ci0K
LSAgICBpZiAobGluZSAhPSAwKQotICAgICAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOwotCi0g
ICAgcmV0dXJuIGFnZ05vZGU7Ci19Ci0KLS8vCi0vLyBUdXJuIGFuIGV4aXN0aW5nIG5vZGUgaW50
byBhbiBhZ2dyZWdhdGUuCi0vLwotLy8gUmV0dXJucyBhbiBhZ2dyZWdhdGUsIHVubGVzcyAwIHdh
cyBwYXNzZWQgaW4gZm9yIHRoZSBleGlzdGluZyBub2RlLgotLy8KLVRJbnRlcm1BZ2dyZWdhdGUq
IFRJbnRlcm1lZGlhdGU6Om1ha2VBZ2dyZWdhdGUoVEludGVybU5vZGUqIG5vZGUsIFRTb3VyY2VM
b2MgbGluZSkKLXsKLSAgICBpZiAobm9kZSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICBh
Z2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2RlKTsKLQotICAgIGlmIChsaW5lICE9
IDApCi0gICAgICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7Ci0gICAgZWxzZQotICAgICAgICBh
Z2dOb2RlLT5zZXRMaW5lKG5vZGUtPmdldExpbmUoKSk7Ci0KLSAgICByZXR1cm4gYWdnTm9kZTsK
LX0KLQotLy8KLS8vIEZvciAiaWYiIHRlc3Qgbm9kZXMuICBUaGVyZSBhcmUgdGhyZWUgY2hpbGRy
ZW47IGEgY29uZGl0aW9uLAotLy8gYSB0cnVlIHBhdGgsIGFuZCBhIGZhbHNlIHBhdGguICBUaGUg
dHdvIHBhdGhzIGFyZSBpbiB0aGUKLS8vIG5vZGVQYWlyLgotLy8KLS8vIFJldHVybnMgdGhlIHNl
bGVjdGlvbiBub2RlIGNyZWF0ZWQuCi0vLwotVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFk
ZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpciwg
VFNvdXJjZUxvYyBsaW5lKQotewotICAgIC8vCi0gICAgLy8gRm9yIGNvbXBpbGUgdGltZSBjb25z
dGFudCBzZWxlY3Rpb25zLCBwcnVuZSB0aGUgY29kZSBhbmQKLSAgICAvLyB0ZXN0IG5vdy4KLSAg
ICAvLwotCi0gICAgaWYgKGNvbmQtPmdldEFzVHlwZWQoKSAmJiBjb25kLT5nZXRBc1R5cGVkKCkt
PmdldEFzQ29uc3RhbnRVbmlvbigpKSB7Ci0gICAgICAgIGlmIChjb25kLT5nZXRBc1R5cGVkKCkt
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRCQ29uc3Qo
KSkKLSAgICAgICAgICAgIHJldHVybiBub2RlUGFpci5ub2RlMTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmV0dXJuIG5vZGVQYWlyLm5vZGUyOwotICAgIH0KLQotICAgIFRJbnRlcm1TZWxl
Y3Rpb24qIG5vZGUgPSBuZXcgVEludGVybVNlbGVjdGlvbihjb25kLCBub2RlUGFpci5ub2RlMSwg
bm9kZVBhaXIubm9kZTIpOwotICAgIG5vZGUtPnNldExpbmUobGluZSk7Ci0KLSAgICByZXR1cm4g
bm9kZTsKLX0KLQotCi1USW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbW1hKFRJbnRl
cm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyBsaW5lKQotewot
ICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgcmln
aHQtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAgICAgICByZXR1
cm4gcmlnaHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVEludGVybVR5cGVkICpjb21tYUFnZ3Jl
Z2F0ZSA9IGdyb3dBZ2dyZWdhdGUobGVmdCwgcmlnaHQsIGxpbmUpOwotICAgICAgICBjb21tYUFn
Z3JlZ2F0ZS0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3AoRU9wQ29tbWEpOwotICAgICAgICBjb21t
YUFnZ3JlZ2F0ZS0+c2V0VHlwZShyaWdodC0+Z2V0VHlwZSgpKTsKLSAgICAgICAgY29tbWFBZ2dy
ZWdhdGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwotICAg
ICAgICByZXR1cm4gY29tbWFBZ2dyZWdhdGU7Ci0gICAgfQotfQotCi0vLwotLy8gRm9yICI/OiIg
dGVzdCBub2Rlcy4gIFRoZXJlIGFyZSB0aHJlZSBjaGlsZHJlbjsgYSBjb25kaXRpb24sCi0vLyBh
IHRydWUgcGF0aCwgYW5kIGEgZmFsc2UgcGF0aC4gIFRoZSB0d28gcGF0aHMgYXJlIHNwZWNpZmll
ZAotLy8gYXMgc2VwYXJhdGUgcGFyYW1ldGVycy4KLS8vCi0vLyBSZXR1cm5zIHRoZSBzZWxlY3Rp
b24gbm9kZSBjcmVhdGVkLCBvciAwIGlmIG9uZSBjb3VsZCBub3QgYmUuCi0vLwotVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRTZWxlY3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50
ZXJtVHlwZWQqIHRydWVCbG9jaywgVEludGVybVR5cGVkKiBmYWxzZUJsb2NrLCBUU291cmNlTG9j
IGxpbmUpCi17Ci0gICAgLy8KLSAgICAvLyBHZXQgY29tcGF0aWJsZSB0eXBlcy4KLSAgICAvLwot
ICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJzaW9uKEVPcFNlcXVlbmNlLCB0cnVl
QmxvY2stPmdldFR5cGUoKSwgZmFsc2VCbG9jayk7Ci0gICAgaWYgKGNoaWxkKQotICAgICAgICBm
YWxzZUJsb2NrID0gY2hpbGQ7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNoaWxkID0gYWRkQ29udmVy
c2lvbihFT3BTZXF1ZW5jZSwgZmFsc2VCbG9jay0+Z2V0VHlwZSgpLCB0cnVlQmxvY2spOwotICAg
ICAgICBpZiAoY2hpbGQpCi0gICAgICAgICAgICB0cnVlQmxvY2sgPSBjaGlsZDsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBTZWUg
aWYgYWxsIHRoZSBvcGVyYW5kcyBhcmUgY29uc3RhbnQsIHRoZW4gZm9sZCBpdCBvdGhlcndpc2Ug
bm90LgotICAgIC8vCi0KLSAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCkgJiYgdHJ1
ZUJsb2NrLT5nZXRBc0NvbnN0YW50VW5pb24oKSAmJiBmYWxzZUJsb2NrLT5nZXRBc0NvbnN0YW50
VW5pb24oKSkgewotICAgICAgICBpZiAoY29uZC0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVu
aW9uQXJyYXlQb2ludGVyKCktPmdldEJDb25zdCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWVC
bG9jazsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlQmxvY2s7Ci0gICAg
fQotCi0gICAgLy8KLSAgICAvLyBNYWtlIGEgc2VsZWN0aW9uIG5vZGUuCi0gICAgLy8KLSAgICBU
SW50ZXJtU2VsZWN0aW9uKiBub2RlID0gbmV3IFRJbnRlcm1TZWxlY3Rpb24oY29uZCwgdHJ1ZUJs
b2NrLCBmYWxzZUJsb2NrLCB0cnVlQmxvY2stPmdldFR5cGUoKSk7Ci0gICAgbm9kZS0+c2V0TGlu
ZShsaW5lKTsKLQotICAgIHJldHVybiBub2RlOwotfQotCi0vLwotLy8gQ29uc3RhbnQgdGVybWlu
YWwgbm9kZXMuICBIYXMgYSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvb2wsIGZsb2F0IG9yIGludCBj
b25zdGFudHMKLS8vCi0vLyBSZXR1cm5zIHRoZSBjb25zdGFudCB1bmlvbiBub2RlIGNyZWF0ZWQu
Ci0vLwotCi1USW50ZXJtQ29uc3RhbnRVbmlvbiogVEludGVybWVkaWF0ZTo6YWRkQ29uc3RhbnRV
bmlvbihDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5UG9pbnRlciwgY29uc3QgVFR5cGUmIHQsIFRT
b3VyY2VMb2MgbGluZSkKLXsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSA9IG5ldyBU
SW50ZXJtQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5UG9pbnRlciwgdCk7Ci0gICAgbm9kZS0+c2V0
TGluZShsaW5lKTsKLQotICAgIHJldHVybiBub2RlOwotfQotCi1USW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZFN3aXp6bGUoVFZlY3RvckZpZWxkcyYgZmllbGRzLCBUU291cmNlTG9jIGxp
bmUpCi17Ci0KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBub2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdh
dGUoRU9wU2VxdWVuY2UpOwotCi0gICAgbm9kZS0+c2V0TGluZShsaW5lKTsKLSAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiogY29uc3RJbnROb2RlOwotICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVu
Y2VWZWN0b3IgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgIENvbnN0YW50VW5pb24qIHVuaW9u
QXJyYXk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgewotICAg
ICAgICB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgIHVuaW9uQXJy
YXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1tpXSk7Ci0gICAgICAgIGNvbnN0SW50Tm9kZSA9
IGFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgbGluZSk7Ci0gICAgICAgIHNlcXVlbmNlVmVjdG9yLnB1c2hfYmFjayhjb25z
dEludE5vZGUpOwotICAgIH0KLQotICAgIHJldHVybiBub2RlOwotfQotCi0vLwotLy8gQ3JlYXRl
IGxvb3Agbm9kZXMuCi0vLwotVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZExvb3AoVElu
dGVybU5vZGUgKmluaXQsIFRJbnRlcm1Ob2RlKiBib2R5LCBUSW50ZXJtVHlwZWQqIHRlc3QsIFRJ
bnRlcm1UeXBlZCogdGVybWluYWwsIGJvb2wgdGVzdEZpcnN0LCBUU291cmNlTG9jIGxpbmUpCi17
Ci0gICAgVEludGVybU5vZGUqIG5vZGUgPSBuZXcgVEludGVybUxvb3AoaW5pdCwgYm9keSwgdGVz
dCwgdGVybWluYWwsIHRlc3RGaXJzdCk7Ci0gICAgbm9kZS0+c2V0TGluZShsaW5lKTsKLQotICAg
IHJldHVybiBub2RlOwotfQotCi0vLwotLy8gQWRkIGJyYW5jaGVzLgotLy8KLVRJbnRlcm1CcmFu
Y2gqIFRJbnRlcm1lZGlhdGU6OmFkZEJyYW5jaChUT3BlcmF0b3IgYnJhbmNoT3AsIFRTb3VyY2VM
b2MgbGluZSkKLXsKLSAgICByZXR1cm4gYWRkQnJhbmNoKGJyYW5jaE9wLCAwLCBsaW5lKTsKLX0K
LQotVEludGVybUJyYW5jaCogVEludGVybWVkaWF0ZTo6YWRkQnJhbmNoKFRPcGVyYXRvciBicmFu
Y2hPcCwgVEludGVybVR5cGVkKiBleHByZXNzaW9uLCBUU291cmNlTG9jIGxpbmUpCi17Ci0gICAg
VEludGVybUJyYW5jaCogbm9kZSA9IG5ldyBUSW50ZXJtQnJhbmNoKGJyYW5jaE9wLCBleHByZXNz
aW9uKTsKLSAgICBub2RlLT5zZXRMaW5lKGxpbmUpOwotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0K
LS8vCi0vLyBUaGlzIGlzIHRvIGJlIGV4ZWN1dGVkIG9uY2UgdGhlIGZpbmFsIHJvb3QgaXMgcHV0
IG9uIHRvcCBieSB0aGUgcGFyc2luZwotLy8gcHJvY2Vzcy4KLS8vCi1ib29sIFRJbnRlcm1lZGlh
dGU6OnBvc3RQcm9jZXNzKFRJbnRlcm1Ob2RlKiByb290LCBFU2hMYW5ndWFnZSBsYW5ndWFnZSkK
LXsKLSAgICBpZiAocm9vdCA9PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vCi0g
ICAgLy8gRmlyc3QsIGZpbmlzaCBvZmYgdGhlIHRvcCBsZXZlbCBzZXF1ZW5jZSwgaWYgYW55Ci0g
ICAgLy8KLSAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dSb290ID0gcm9vdC0+Z2V0QXNBZ2dyZWdh
dGUoKTsKLSAgICBpZiAoYWdnUm9vdCAmJiBhZ2dSb290LT5nZXRPcCgpID09IEVPcE51bGwpCi0g
ICAgICAgIGFnZ1Jvb3QtPnNldE9wKEVPcFNlcXVlbmNlKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi0vLwotLy8gVGhpcyBkZWxldGVzIHRoZSB0cmVlLgotLy8KLXZvaWQgVEludGVybWVkaWF0
ZTo6cmVtb3ZlKFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIGlmIChyb290KQotICAgICAgICBS
ZW1vdmVBbGxUcmVlTm9kZXMocm9vdCk7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBNZW1iZXIgZnVu
Y3Rpb25zIG9mIHRoZSBub2RlcyB1c2VkIGZvciBidWlsZGluZyB0aGUgdHJlZS4KLS8vCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0KLS8vCi0vLyBTYXkgd2hldGhlciBvciBub3QgYW4gb3BlcmF0aW9uIG5vZGUgY2hhbmdl
cyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgc3RhdGUg
aXMgbW9kaWZpZWQuCi0vLwotYm9vbCBUSW50ZXJtT3BlcmF0b3I6Om1vZGlmaWVzU3RhdGUoKSBj
b25zdAotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50
OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5j
cmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BB
c3NpZ246Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgotICAgICAgICBjYXNlIEVPcFN1YkFz
c2lnbjoKLSAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNNYXRyaXhBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3Np
Z246Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246Ci0gICAgICAgIGNh
c2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wRGl2QXNzaWdu
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLwotLy8gcmV0dXJucyB0cnVlIGlmIHRoZSBv
cGVyYXRvciBpcyBmb3Igb25lIG9mIHRoZSBjb25zdHJ1Y3RvcnMKLS8vCi1ib29sIFRJbnRlcm1P
cGVyYXRvcjo6aXNDb25zdHJ1Y3RvcigpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChvcCkgewotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVj
MzoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgotICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdE1hdDI6Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKLSAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RNYXQ0OgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgotICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMz
OgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgotICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdEludDoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKLSAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RCVmVjMzoKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKLSAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVj
dDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLS8vCi0vLyBNYWtlIHN1cmUgdGhlIHR5cGUgb2Yg
YSB1bmFyeSBvcGVyYXRvciBpcyBhcHByb3ByaWF0ZSBmb3IgaXRzCi0vLyBjb21iaW5hdGlvbiBv
ZiBvcGVyYXRpb24gYW5kIG9wZXJhbmQgdHlwZS4KLS8vCi0vLyBSZXR1cm5zIGZhbHNlIGluIG5v
dGhpbmcgbWFrZXMgc2Vuc2UuCi0vLwotYm9vbCBUSW50ZXJtVW5hcnk6OnByb21vdGUoVEluZm9T
aW5rJikKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDoK
LSAgICAgICAgICAgIGlmIChvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcE5lZ2F0aXZlOgotICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6Ci0gICAgICAg
IGNhc2UgRU9wUG9zdERlY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6Ci0g
ICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICAgICAgaWYgKG9wZXJhbmQtPmdl
dEJhc2ljVHlwZSgpID09IEVidEJvb2wpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vIG9wZXJhdG9ycyBmb3IgYnVpbHQt
aW5zIGFyZSBhbHJlYWR5IHR5cGUgY2hlY2tlZCBhZ2FpbnN0IHRoZWlyIHByb3RvdHlwZQotICAg
ICAgICBjYXNlIEVPcEFueToKLSAgICAgICAgY2FzZSBFT3BBbGw6Ci0gICAgICAgIGNhc2UgRU9w
VmVjdG9yTG9naWNhbE5vdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBpZiAob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Rmxv
YXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNldFR5cGUo
b3BlcmFuZC0+Z2V0VHlwZSgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLwotLy8gRXN0
YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24sIGFzIHdlbGwgYXMK
LS8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5kcy4K
LS8vCi0vLyBSZXR1cm5zIGZhbHNlIGlmIG9wZXJhdG9yIGNhbid0IHdvcmsgb24gb3BlcmFuZHMu
Ci0vLwotYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCi17
Ci0gICAgLy8gR0xTTCBFUyAyLjAgZG9lcyBub3Qgc3VwcG9ydCBpbXBsaWNpdCB0eXBlIGNhc3Rp
bmcuCi0gICAgLy8gU28gdGhlIGJhc2ljIHR5cGUgc2hvdWxkIGFsd2F5cyBtYXRjaC4KLSAgICBp
ZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gcmlnaHQtPmdldEJhc2ljVHlwZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLwotICAgIC8vIEJhc2UgYXNzdW1wdGlvbjogIGp1c3Qg
bWFrZSB0aGUgdHlwZSB0aGUgc2FtZSBhcyB0aGUgbGVmdAotICAgIC8vIG9wZXJhbmQuICBUaGVu
IG9ubHkgZGV2aWF0aW9ucyBmcm9tIHRoaXMgbmVlZCBiZSBjb2RlZC4KLSAgICAvLwotICAgIHNl
dFR5cGUobGVmdC0+Z2V0VHlwZSgpKTsKLQotICAgIC8vIFRoZSByZXN1bHQgZ2V0cyBwcm9tb3Rl
ZCB0byB0aGUgaGlnaGVzdCBwcmVjaXNpb24uCi0gICAgVFByZWNpc2lvbiBoaWdoZXJQcmVjaXNp
b24gPSBHZXRIaWdoZXJQcmVjaXNpb24obGVmdC0+Z2V0UHJlY2lzaW9uKCksIHJpZ2h0LT5nZXRQ
cmVjaXNpb24oKSk7Ci0gICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0UHJlY2lzaW9uKGhpZ2hlclBy
ZWNpc2lvbik7Ci0KLSAgICAvLyBCaW5hcnkgb3BlcmF0aW9ucyByZXN1bHRzIGluIHRlbXBvcmFy
eSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgKLSAgICAvLyBvcGVyYW5kcyBhcmUgY29uc3QuCi0gICAg
aWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8IHJpZ2h0LT5nZXRRdWFsaWZp
ZXIoKSAhPSBFdnFDb25zdCkgewotICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZp
ZXIoRXZxVGVtcG9yYXJ5KTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEFycmF5IG9wZXJhdGlv
bnMuCi0gICAgLy8KLSAgICBpZiAobGVmdC0+aXNBcnJheSgpIHx8IHJpZ2h0LT5pc0FycmF5KCkp
IHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQXJyYXlzIHR5cGVzIGhhdmUgdG8gYmUgZXhhY3Qg
bWF0Y2hlcy4KLSAgICAgICAgLy8KLSAgICAgICAgaWYgKGxlZnQtPmdldFR5cGUoKSAhPSByaWdo
dC0+Z2V0VHlwZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN3aXRj
aCAob3ApIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRp
dGlvbmFsCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAg
ICAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0gICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vIFNldCBhcnJheSBpbmZvcm1hdGlvbi4KLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICBjYXNlIEVPcEFzc2lnbjoKLSAgICAgICAgICAgIGNhc2UgRU9w
SW5pdGlhbGl6ZToKLSAgICAgICAgICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRBcnJheVNp
emUobGVmdC0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBnZXRU
eXBlUG9pbnRlcigpLT5zZXRBcnJheUluZm9ybWF0aW9uVHlwZShsZWZ0LT5nZXRUeXBlKCkuZ2V0
QXJyYXlJbmZvcm1hdGlvblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGludCBzaXplID0gc3RkOjptYXgo
bGVmdC0+Z2V0Tm9taW5hbFNpemUoKSwgcmlnaHQtPmdldE5vbWluYWxTaXplKCkpOwotCi0gICAg
Ly8KLSAgICAvLyBBbGwgc2NhbGFycy4gQ29kZSBhZnRlciB0aGlzIHRlc3QgYXNzdW1lcyB0aGlz
IGNhc2UgaXMgcmVtb3ZlZCEKLSAgICAvLwotICAgIGlmIChzaXplID09IDEpIHsKLSAgICAgICAg
c3dpdGNoIChvcCkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFByb21vdGUgdG8g
Y29uZGl0aW9uYWwKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBjYXNlIEVPcEVxdWFsOgot
ICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgICAgIGNhc2UgRU9wTGVzc1Ro
YW46Ci0gICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAgICAgICAgY2FzZSBF
T3BMZXNzVGhhbkVxdWFsOgotICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgot
ICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBB
bmQgYW5kIE9yIG9wZXJhdGUgb24gY29uZGl0aW9uYWxzCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOgotICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6
Ci0gICAgICAgICAgICAgICAgLy8gQm90aCBvcGVyYW5kcyBtdXN0IGJlIG9mIHR5cGUgYm9vbC4K
LSAgICAgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCBy
aWdodC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgcmVhY2ggaGVyZSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBv
cGVyYW5kcyBpcyB2ZWN0b3Igb3IgbWF0cml4LgotICAgIC8vIFRoZSBvdGhlciBvcGVyYW5kIGNv
dWxkIGJlIGEgc2NhbGFyLCB2ZWN0b3IsIG9yIG1hdHJpeC4KLSAgICAvLyBBcmUgdGhlIHNpemVz
IGNvbXBhdGlibGU/Ci0gICAgLy8KLSAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSBy
aWdodC0+Z2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICAvLyBJZiB0aGUgbm9taW5hbCBzaXpl
IG9mIG9wZXJhbmRzIGRvIG5vdCBtYXRjaDoKLSAgICAgICAgLy8gT25lIG9mIHRoZW0gbXVzdCBi
ZSBzY2FsYXIuCi0gICAgICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEgJiYgcmln
aHQtPmdldE5vbWluYWxTaXplKCkgIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgLy8gT3BlcmF0b3IgY2Fubm90IGJlIG9mIHR5cGUgcHVyZSBhc3NpZ25tZW50LgotICAg
ICAgICBpZiAob3AgPT0gRU9wQXNzaWduIHx8IG9wID09IEVPcEluaXRpYWxpemUpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBDYW4gdGhlc2UgdHdv
IG9wZXJhbmRzIGJlIGNvbWJpbmVkPwotICAgIC8vCi0gICAgVEJhc2ljVHlwZSBiYXNpY1R5cGUg
PSBsZWZ0LT5nZXRCYXNpY1R5cGUoKTsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2Ug
RU9wTXVsOgotICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01h
dHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkpCi0gICAgICAg
ICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNNYXRyaXg7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXI7Ci0g
ICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNp
b24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgdHJ1ZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAg
c2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBz
aXplLCBmYWxzZSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7
Ci0gICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeDsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1Y3QKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVj
dG9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhcjsK
LSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNp
c2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiTWlzc2luZyBlbHNlcyIsIGdldExpbmUoKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOgotICAgICAgICAgICAgaWYgKCFsZWZ0LT5p
c01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxl
ZnQtPmlzVmVjdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNN
YXRyaXhBc3NpZ247Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBvcCA9
IEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewot
ICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ247Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3Rv
cigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIGFzIGNvbXBvbmVudCBwcm9kdWN0
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5p
c1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghIGxlZnQtPmlzVmVjdG9yKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIG9wID0gRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ247Ci0gICAgICAgICAgICAgICAgICAg
IHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwg
c2l6ZSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJv
ciwgIk1pc3NpbmcgZWxzZXMiLCBnZXRMaW5lKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
RU9wQXNzaWduOgotICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6Ci0gICAgICAgIGNhc2UgRU9w
QWRkOgotICAgICAgICBjYXNlIEVPcFN1YjoKLSAgICAgICAgY2FzZSBFT3BEaXY6Ci0gICAgICAg
IGNhc2UgRU9wQWRkQXNzaWduOgotICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKLSAgICAgICAg
Y2FzZSBFT3BEaXZBc3NpZ246Ci0gICAgICAgICAgICBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiBy
aWdodC0+aXNWZWN0b3IoKSB8fAotICAgICAgICAgICAgICAgIGxlZnQtPmlzVmVjdG9yKCkgJiYg
cmlnaHQtPmlzTWF0cml4KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJpeCgpIHx8IHJpZ2h0LT5pc01hdHJpeCgpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICBjYXNlIEVP
cE5vdEVxdWFsOgotICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuOgotICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6Ci0gICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgIGlmIChsZWZ0LT5pc01hdHJpeCgpICYm
IHJpZ2h0LT5pc1ZlY3RvcigpIHx8Ci0gICAgICAgICAgICAgICAgbGVmdC0+aXNWZWN0b3IoKSAm
JiByaWdodC0+aXNNYXRyaXgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29tcGFyZVN0cnVjdChj
b25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXks
IENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KQotewotICAgIGNvbnN0IFRUeXBlTGlzdCog
ZmllbGRzID0gbGVmdE5vZGVUeXBlLmdldFN0cnVjdCgpOwotCi0gICAgc2l6ZV90IHN0cnVjdFNp
emUgPSBmaWVsZHMtPnNpemUoKTsKLSAgICBpbnQgaW5kZXggPSAwOwotCi0gICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBzdHJ1Y3RTaXplOyBqKyspIHsKLSAgICAgICAgaW50IHNpemUgPSAoKmZp
ZWxkcylbal0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgaWYgKCgqZmllbGRzKVtqXS50eXBlLT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgICAgICBpZiAoIUNvbXBhcmVT
dHJ1Y3R1cmUoKigqZmllbGRzKVtqXS50eXBlLCAmcmlnaHRVbmlvbkFycmF5W2luZGV4XSwgJmxl
ZnRVbmlvbkFycmF5W2luZGV4XSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnRVbmlvbkFycmF5
W2luZGV4XSAhPSByaWdodFVuaW9uQXJyYXlbaW5kZXhdKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbXBhcmVTdHJ1
Y3R1cmUoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRVbmlv
bkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKLXsKLSAgICBpZiAobGVmdE5v
ZGVUeXBlLmlzQXJyYXkoKSkgewotICAgICAgICBUVHlwZSB0eXBlV2l0aG91dEFycmF5bmVzcyA9
IGxlZnROb2RlVHlwZTsKLSAgICAgICAgdHlwZVdpdGhvdXRBcnJheW5lc3MuY2xlYXJBcnJheW5l
c3MoKTsKLQotICAgICAgICBpbnQgYXJyYXlTaXplID0gbGVmdE5vZGVUeXBlLmdldEFycmF5U2l6
ZSgpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlTaXplOyArK2kpIHsKLSAg
ICAgICAgICAgIGludCBvZmZzZXQgPSB0eXBlV2l0aG91dEFycmF5bmVzcy5nZXRPYmplY3RTaXpl
KCkgKiBpOwotICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0KHR5cGVXaXRob3V0QXJyYXlu
ZXNzLCAmcmlnaHRVbmlvbkFycmF5W29mZnNldF0sICZsZWZ0VW5pb25BcnJheVtvZmZzZXRdKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAg
ICAgICAgcmV0dXJuIENvbXBhcmVTdHJ1Y3QobGVmdE5vZGVUeXBlLCByaWdodFVuaW9uQXJyYXks
IGxlZnRVbmlvbkFycmF5KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLwotLy8gVGhlIGZv
bGQgZnVuY3Rpb25zIHNlZSBpZiBhbiBvcGVyYXRpb24gb24gYSBjb25zdGFudCBjYW4gYmUgZG9u
ZSBpbiBwbGFjZSwKLS8vIHdpdGhvdXQgZ2VuZXJhdGluZyBydW4tdGltZSBjb2RlLgotLy8KLS8v
IFJldHVybnMgdGhlIG5vZGUgdG8ga2VlcCB1c2luZywgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUg
dGhlIG5vZGUgcGFzc2VkIGluLgotLy8KLQotVEludGVybVR5cGVkKiBUSW50ZXJtQ29uc3RhbnRV
bmlvbjo6Zm9sZChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogY29uc3RhbnROb2RlLCBUSW5m
b1NpbmsmIGluZm9TaW5rKQotewotICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBnZXRV
bmlvbkFycmF5UG9pbnRlcigpOwotICAgIGludCBvYmplY3RTaXplID0gZ2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKTsKLQotICAgIGlmIChjb25zdGFudE5vZGUpIHsgIC8vIGJpbmFyeSBvcGVyYXRp
b25zCi0gICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlID0gY29uc3RhbnROb2RlLT5n
ZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFy
cmF5ID0gbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLSAgICAgICAgVFR5cGUgcmV0dXJu
VHlwZSA9IGdldFR5cGUoKTsKLQotICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9
IDEuMiArIHZlYzQoMiwzLDQsNSk7Ci0gICAgICAgIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiBvYmplY3RTaXplID4gMSkgewotICAgICAgICAgICAg
cmlnaHRVbmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7ICsraSkKLSAgICAgICAgICAgICAg
ICByaWdodFVuaW9uQXJyYXlbaV0gPSAqbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLSAg
ICAgICAgICAgIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29u
c3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBvYmplY3RTaXplID09
IDEpIHsKLSAgICAgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gdmVjNCgyLDMs
NCw1KSArIDEuMjsKLSAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltj
b25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCldOwotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7
ICsraSkKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2lu
dGVyKCk7Ci0gICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwotICAgICAg
ICAgICAgb2JqZWN0U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0g
MDsKLSAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRlbXBOb2RlOwotCi0gICAgICAgIGJv
b2wgYm9vbE5vZGVGbGFnID0gZmFsc2U7Ci0gICAgICAgIHN3aXRjaChvcCkgewotICAgICAgICAg
ICAgY2FzZSBFT3BBZGQ6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZD
Kys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXpl
OyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9u
QXJyYXlbaV0gKyByaWdodFVuaW9uQXJyYXlbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BTdWI6Ci0gICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAg
ICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gLSByaWdodFVuaW9uQXJyYXlbaV07
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBjYXNlIEVPcE11bDoKLSAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6Ci0g
ICAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgotICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAg
ICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNNYXRyaXg6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRC
YXNpY1R5cGUoKSAhPSBFYnRGbG9hdCB8fCBub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9h
dCkgewotICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXgg
bXVsdGlwbHkiLCBnZXRMaW5lKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0g
ICAgICAgICAgICAgICAgICAgIGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplKnNpemVd
OwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzaXplOyByb3cr
KykgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1u
IDwgc2l6ZTsgY29sdW1uKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiAr
IHJvd10uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLmdldEZD
b25zdCgpICsgdW5pb25BcnJheVtpICogc2l6ZSArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRV
bmlvbkFycmF5W2NvbHVtbiAqIHNpemUgKyBpXS5nZXRGQ29uc3QoKSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRU9wRGl2OgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBv
cnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUo
KS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAg
ICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDAuMGYpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiRGl2aWRlIGJ5IHpl
cm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkpOwotICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoRkxUX01BWCk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNl
dEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdl
dEZDb25zdCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywg
IkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIiwgZ2V0TGluZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KElOVF9N
QVgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAvIHJpZ2h0VW5p
b25BcnJheVtpXS5nZXRJQ29uc3QoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgIkNvbnN0YW50IGZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIFwi
L1wiIiwgZ2V0TGluZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1l
c1ZlY3RvcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0
RmxvYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0
cml4IHRpbWVzIHZlY3RvciIsIGdldExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCldOwotCi0gICAgICAgICAgICAgICAg
ey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUg
PSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0
QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsgaV0uZ2V0RkNvbnN0
KCkpICogcmlnaHRVbmlvbkFycmF5W2pdLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29u
c3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpKTsKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0
TGluZShnZXRMaW5lKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwotCi0g
ICAgICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgotICAgICAgICAgICAgICAgIGlm
IChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ29uc3Rh
bnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgdmVjdG9yIHRpbWVzIG1hdHJpeCIsIGdldExp
bmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0
Tm9taW5hbFNpemUoKV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0g
MDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAo
KHVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6ZSArIGpd
LmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9y
IHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKLSAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNp
emVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAmJiByaWdodFVu
aW9uQXJyYXlbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4g
Zm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkK
LSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVj
dFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdo
dFVuaW9uQXJyYXlbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6Ci0gICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAg
ICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBFYnRCb29s
OiB0ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlv
bkFycmF5W2ldKSA/IGZhbHNlIDogdHJ1ZSk7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDog
YXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgY2FzZSBFT3BMZXNzVGhhbjoKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9
PSAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJy
YXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAgICAgICAgICAgIGFz
c2VydChvYmplY3RTaXplID09IDEpOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNl
dEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAg
IHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXpl
ID09IDEpOwotICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0YW50OwotICAg
ICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRV
bmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJD
b25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm5U
eXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRU9w
R3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGFzc2VydChvYmplY3RTaXplID09IDEpOwotICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVu
aW9uIGNvbnN0YW50OwotICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVu
aW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgp
LmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IUNvbXBhcmVTdHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpLCB1bmlvbkFycmF5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxh
ZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh1bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07Ci0gICAgICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAg
dGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0
ZW1wTm9kZTsKLQotICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgICAgICAg
ICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5
W2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbE5vZGVGbGFnID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3Ig
bG9vcAotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgewot
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVt
cENvbnN0QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpKTsKLSAg
ICAgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRlbXBOb2RlOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkludmFs
aWQgb3BlcmF0b3IgZm9yIGNvbnN0YW50IGZvbGRpbmciLCBnZXRMaW5lKCkpOwotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRl
cm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBlKTsKLSAgICAgICAgdGVt
cE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLQotICAgICAgICByZXR1cm4gdGVtcE5vZGU7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0aW9ucwot
ICAgICAgICAvLwotICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9IDA7Ci0g
ICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
b2JqZWN0U2l6ZV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE5l
Z2F0aXZlOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0
QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5z
ZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hcnkgb3BlcmF0aW9uIG5v
dCBmb2xkZWQgaW50byBjb25zdGFudCIsIGdldExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlz
IGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4
ZWN1dGVkIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAg
dGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
IlVuYXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiLCBnZXRMaW5lKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJy
YXksIGdldFR5cGUoKSk7Ci0gICAgICAgIG5ld05vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKLSAg
ICAgICAgcmV0dXJuIG5ld05vZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLVRJ
bnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlw
ZSBwcm9tb3RlVG8sIFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQotewotICAgIENvbnN0YW50
VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0g
ICAgaW50IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwotCi0gICAgQ29u
c3RhbnRVbmlvbiAqbGVmdFVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplXTsKLQot
ICAgIGZvciAoaW50IGk9MDsgaSA8IHNpemU7IGkrKykgewotCi0gICAgICAgIHN3aXRjaCAocHJv
bW90ZVRvKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlb
aV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0PihyaWdodFVuaW9uQXJyYXlbaV0uZ2V0SUNv
bnN0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJh
eVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJpZ2h0VW5pb25BcnJheVtpXS5nZXRC
Q29uc3QoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25B
cnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ2Fubm90IHBy
b21vdGUiLCBub2RlLT5nZXRMaW5lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCku
Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtp
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5z
ZXRJQ29uc3Qoc3RhdGljX2Nhc3Q8aW50PihyaWdodFVuaW9uQXJyYXlbaV0uZ2V0QkNvbnN0KCkp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0u
c2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4ocmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgp
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShF
UHJlZml4SW50ZXJuYWxFcnJvciwgIkNhbm5vdCBwcm9tb3RlIiwgbm9kZS0+Z2V0TGluZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRV
bmlvbkFycmF5W2ldLnNldEJDb25zdChyaWdodFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkgIT0g
MCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOgotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0g
PSByaWdodFVuaW9uQXJyYXlbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChyaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0
KCkgIT0gMC4wZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIkNhbm5vdCBwcm9tb3RlIiwgbm9kZS0+Z2V0
TGluZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
ICJJbmNvcnJlY3QgZGF0YSB0eXBlIGZvdW5kIiwgbm9kZS0+Z2V0TGluZSgpKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgY29uc3QgVFR5cGUm
IHQgPSBub2RlLT5nZXRUeXBlKCk7Ci0KLSAgICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0
VW5pb25BcnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxp
ZmllcigpLCB0LmdldE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBu
b2RlLT5nZXRMaW5lKCkpOwotfQotCi12b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OmFkZFRvUHJhZ21h
VGFibGUoY29uc3QgVFByYWdtYVRhYmxlJiBwVGFibGUpCi17Ci0gICAgYXNzZXJ0KCFwcmFnbWFU
YWJsZSk7Ci0gICAgcHJhZ21hVGFibGUgPSBuZXcgVFByYWdtYVRhYmxlKCk7Ci0gICAgKnByYWdt
YVRhYmxlID0gcFRhYmxlOwotfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL01NYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvTU1hcC5oCShyZXZpc2lvbiA3NDY1OCkKKysr
IEFOR0xFL3NyYy9jb21waWxlci9NTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfTU1BUF9JTkNMVURFRF8KLSNkZWZpbmUg
X01NQVBfSU5DTFVERURfCi0KLS8vCi0vLyBFbmNhcHN1bGF0ZSBtZW1vcnkgbWFwcGVkIGZpbGVz
Ci0vLwotCi1jbGFzcyBUTU1hcCB7Ci1wdWJsaWM6Ci0gICAgVE1NYXAoY29uc3QgY2hhciogZmls
ZU5hbWUpIDogCi0gICAgICAgIGZTaXplKC0xKSwgLy8gLTEgaXMgdGhlIGVycm9yIHZhbHVlIHJl
dHVybmVkIGJ5IEdldEZpbGVTaXplKCkKLSAgICAgICAgZnAoTlVMTCksCi0gICAgICAgIGZCdWZm
KDApICAgLy8gMCBpcyB0aGUgZXJyb3IgdmFsdWUgcmV0dXJuZWQgYnkgTWFwVmlld09mRmlsZSgp
Ci0gICAgewotICAgICAgICBpZiAoKGZwID0gZm9wZW4oZmlsZU5hbWUsICJyIikpID09IE5VTEwp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNoYXIgYyA9IGdldGMoZnApOwotICAgICAg
ICBmU2l6ZSA9IDA7Ci0gICAgICAgIHdoaWxlIChjICE9IEVPRikgewotICAgICAgICAgICAgZlNp
emUrKzsKLSAgICAgICAgICAgIGMgPSBnZXRjKGZwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
YyA9PSBFT0YpCi0gICAgICAgICAgICBmU2l6ZSsrOwotICAgICAgICByZXdpbmQoZnApOwotICAg
ICAgICBmQnVmZiA9IChjaGFyKiltYWxsb2Moc2l6ZW9mKGNoYXIpICogZlNpemUpOwotICAgICAg
ICBpbnQgY291bnQgPSAwOwotICAgICAgICBjID0gZ2V0YyhmcCk7Ci0gICAgICAgIHdoaWxlIChj
ICE9IEVPRikgewotICAgICAgICAgICAgZkJ1ZmZbY291bnQrK10gPSBjOwotICAgICAgICAgICAg
YyA9IGdldGMoZnApOwotICAgICAgICB9Ci0gICAgICAgIGZCdWZmW2NvdW50KytdID0gYzsKLSAg
ICB9Ci0KLSAgICBjaGFyKiBnZXREYXRhKCkgeyByZXR1cm4gZkJ1ZmY7IH0KLSAgICBpbnQgICBn
ZXRTaXplKCkgeyByZXR1cm4gZlNpemU7IH0KLQotICAgIH5UTU1hcCgpIHsKLSAgICAgICAgaWYg
KGZwICE9IE5VTEwpCi0gICAgICAgICAgICBmY2xvc2UoZnApOwotICAgIH0KLSAgICAKLXByaXZh
dGU6Ci0gICAgaW50ICAgICAgICAgICAgIGZTaXplOyAgICAgIC8vIHNpemUgb2YgZmlsZSB0byBt
YXAgaW4KLSAgICBGSUxFICpmcDsKLSAgICBjaGFyKiAgICAgICAgICAgZkJ1ZmY7ICAgICAgLy8g
dGhlIGFjdHVhbCBkYXRhOwotfTsKLQotI2VuZGlmIC8vIF9NTUFQX0lOQ0xVREVEXwpJbmRleDog
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvT3V0cHV0R0xTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjc3ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9PdXRwdXRHTFNMLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLQotbmFtZXNwYWNlCi17Ci1UU3RyaW5nIGdldFR5
cGVOYW1lKGNvbnN0IFRUeXBlJiB0eXBlKQotewotICAgIFRJbmZvU2lua0Jhc2Ugb3V0OwotICAg
IGlmICh0eXBlLmlzTWF0cml4KCkpCi0gICAgewotICAgICAgICBvdXQgPDwgIm1hdCI7Ci0gICAg
ICAgIG91dCA8PCB0eXBlLmdldE5vbWluYWxTaXplKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5
cGUuaXNWZWN0b3IoKSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8ICJ2ZWMiOyBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgIml2ZWMiOyBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogb3V0IDw8ICJidmVjIjsgYnJlYWs7Ci0gICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICAgICAgfQotICAgICAgICBvdXQg
PDwgdHlwZS5nZXROb21pbmFsU2l6ZSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCi0gICAgICAgICAgICBvdXQg
PDwgdHlwZS5nZXRUeXBlTmFtZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdXQgPDwg
dHlwZS5nZXRCYXNpY1N0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gVFN0cmluZyhvdXQuY19z
dHIoKSk7Ci19Ci0KLVRTdHJpbmcgYXJyYXlCcmFja2V0cyhjb25zdCBUVHlwZSYgdHlwZSkKLXsK
LSAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkpOwotICAgIFRJbmZvU2lua0Jhc2Ugb3V0OwotICAg
IG91dCA8PCAiWyIgPDwgdHlwZS5nZXRBcnJheVNpemUoKSA8PCAiXSI7Ci0gICAgcmV0dXJuIFRT
dHJpbmcob3V0LmNfc3RyKCkpOwotfQotCi1ib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJbnRlcm1O
b2RlKiBub2RlKSB7Ci0gICAgaWYgKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JlZ2F0ZSA9
IG5vZGUtPmdldEFzQWdncmVnYXRlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gKGFnZ3JlZ2F0
ZS0+Z2V0T3AoKSAhPSBFT3BGdW5jdGlvbikgJiYKLSAgICAgICAgICAgICAgIChhZ2dyZWdhdGUt
PmdldE9wKCkgIT0gRU9wU2VxdWVuY2UpOwotICAgIH0KLSAgICBlbHNlIGlmIChjb25zdCBUSW50
ZXJtU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBub2RlLT5nZXRBc1NlbGVjdGlvbk5vZGUoKSkKLSAg
ICB7Ci0gICAgICAgIC8vIFRlcm5hcnkgb3BlcmF0b3JzIGFyZSB1c3VhbGx5IHBhcnQgb2YgYW4g
YXNzaWdubWVudCBvcGVyYXRvci4KLSAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRob3NlIHJhcmUg
Y2FzZXMgaW4gd2hpY2ggdGhleSBhcmUgYWxsIGJ5IHRoZW1zZWx2ZXMuCi0gICAgICAgIHJldHVy
biBzZWxlY3Rpb24tPnVzZXNUZXJuYXJ5T3BlcmF0b3IoKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
bm9kZS0+Z2V0QXNMb29wTm9kZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLX0gIC8vIG5hbWVzcGFjZQotCi1UT3V0cHV0R0xTTDo6
VE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaykKLSAgICA6IFRJbnRlcm1UcmF2ZXJz
ZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCi0gICAgICBtT2JqU2luayhvYmpTaW5rKSwKLSAgICAgIG1E
ZWNsYXJpbmdWYXJpYWJsZXMoZmFsc2UpCi17Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0w6OndyaXRl
VHJpcGxldChWaXNpdCB2aXNpdCwgY29uc3QgY2hhciogcHJlU3RyLCBjb25zdCBjaGFyKiBpblN0
ciwgY29uc3QgY2hhciogcG9zdFN0cikKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpT
aW5rKCk7Ci0gICAgaWYgKHZpc2l0ID09IFByZVZpc2l0ICYmIHByZVN0cikKLSAgICB7Ci0gICAg
ICAgIG91dCA8PCBwcmVTdHI7Ci0gICAgfQotICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQg
JiYgaW5TdHIpCi0gICAgewotICAgICAgICBvdXQgPDwgaW5TdHI7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKHZpc2l0ID09IFBvc3RWaXNpdCAmJiBwb3N0U3RyKQotICAgIHsKLSAgICAgICAgb3V0IDw8
IHBvc3RTdHI7Ci0gICAgfQotfQotCi12b2lkIFRPdXRwdXRHTFNMOjp3cml0ZVZhcmlhYmxlVHlw
ZShjb25zdCBUVHlwZSYgdHlwZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5r
KCk7Ci0gICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB0eXBlLmdldFF1YWxpZmllcigpOwotICAg
IC8vIFRPRE8oYWxva3ApOiBWYWxpZGF0ZSBxdWFsaWZpZXIgZm9yIHZhcmlhYmxlIGRlY2xhcmF0
aW9ucy4KLSAgICBpZiAoKHF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpICYmIChxdWFsaWZpZXIg
IT0gRXZxR2xvYmFsKSkKLSAgICAgICAgb3V0IDw8IHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCkg
PDwgIiAiOwotCi0gICAgLy8gRGVjbGFyZSB0aGUgc3RydWN0IGlmIHdlIGhhdmUgbm90IGRvbmUg
c28gYWxyZWFkeS4KLSAgICBpZiAoKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSAm
JgotICAgICAgICAobURlY2xhcmVkU3RydWN0cy5maW5kKHR5cGUuZ2V0VHlwZU5hbWUoKSkgPT0g
bURlY2xhcmVkU3RydWN0cy5lbmQoKSkpCi0gICAgewotICAgICAgICBvdXQgPDwgInN0cnVjdCAi
IDw8IHR5cGUuZ2V0VHlwZU5hbWUoKSA8PCAie1xuIjsKLSAgICAgICAgY29uc3QgVFR5cGVMaXN0
KiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJl
ICE9IE5VTEwpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cnVjdHVyZS0+c2l6
ZSgpOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRUeXBlKiBmaWVsZFR5cGUg
PSAoKnN0cnVjdHVyZSlbaV0udHlwZTsKLSAgICAgICAgICAgIEFTU0VSVChmaWVsZFR5cGUgIT0g
TlVMTCk7Ci0gICAgICAgICAgICBvdXQgPDwgZ2V0VHlwZU5hbWUoKmZpZWxkVHlwZSkgPDwgIiAi
IDw8IGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCk7Ci0gICAgICAgICAgICBpZiAoZmllbGRUeXBl
LT5pc0FycmF5KCkpCi0gICAgICAgICAgICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHMoKmZpZWxk
VHlwZSk7Ci0gICAgICAgICAgICBvdXQgPDwgIjtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0
IDw8ICJ9IjsKLSAgICAgICAgbURlY2xhcmVkU3RydWN0cy5pbnNlcnQodHlwZS5nZXRUeXBlTmFt
ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgb3V0IDw8IGdldFR5cGVOYW1l
KHR5cGUpOwotICAgIH0KLX0KLQotdm9pZCBUT3V0cHV0R0xTTDo6d3JpdGVGdW5jdGlvblBhcmFt
ZXRlcnMoY29uc3QgVEludGVybVNlcXVlbmNlJiBhcmdzKQotewotICAgIFRJbmZvU2lua0Jhc2Um
IG91dCA9IG9ialNpbmsoKTsKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGFyZ3MuYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gYXJncy5lbmQoKTsgKytp
dGVyKQotICAgIHsKLSAgICAgICAgY29uc3QgVEludGVybVN5bWJvbCogYXJnID0gKCppdGVyKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgIEFTU0VSVChhcmcgIT0gTlVMTCk7Ci0KLSAgICAg
ICAgY29uc3QgVFR5cGUmIHR5cGUgPSBhcmctPmdldFR5cGUoKTsKLSAgICAgICAgVFF1YWxpZmll
ciBxdWFsaWZpZXIgPSB0eXBlLmdldFF1YWxpZmllcigpOwotICAgICAgICAvLyBUT0RPKGFsb2tw
KTogVmFsaWRhdGUgcXVhbGlmaWVyIGZvciBmdW5jdGlvbiBhcmd1bWVudHMuCi0gICAgICAgIGlm
ICgocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFHbG9iYWwp
KQotICAgICAgICAgICAgb3V0IDw8IHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiOwot
Ci0gICAgICAgIG91dCA8PCBnZXRUeXBlTmFtZSh0eXBlKTsKLQotICAgICAgICBjb25zdCBUU3Ry
aW5nJiBuYW1lID0gYXJnLT5nZXRTeW1ib2woKTsKLSAgICAgICAgaWYgKCFuYW1lLmVtcHR5KCkp
Ci0gICAgICAgICAgICBvdXQgPDwgIiAiIDw8IG5hbWU7Ci0gICAgICAgIGlmICh0eXBlLmlzQXJy
YXkoKSkKLSAgICAgICAgICAgIG91dCA8PCBhcnJheUJyYWNrZXRzKHR5cGUpOwotCi0gICAgICAg
IC8vIFB1dCBhIGNvbW1hIGlmIHRoaXMgaXMgbm90IHRoZSBsYXN0IGFyZ3VtZW50LgotICAgICAg
ICBpZiAoaXRlciAhPSBhcmdzLmVuZCgpIC0gMSkKLSAgICAgICAgICAgIG91dCA8PCAiLCAiOwot
ICAgIH0KLX0KLQotY29uc3QgQ29uc3RhbnRVbmlvbiogVE91dHB1dEdMU0w6OndyaXRlQ29uc3Rh
bnRVbmlvbihjb25zdCBUVHlwZSYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29uc3RhbnRVbmlvbiogcENvbnN0VW5pb24p
Ci17Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotCi0gICAgaWYgKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQotICAgIHsKLSAgICAgICAgb3V0IDw8IHR5cGUu
Z2V0VHlwZU5hbWUoKSA8PCAiKCI7Ci0gICAgICAgIGNvbnN0IFRUeXBlTGlzdCogc3RydWN0dXJl
ID0gdHlwZS5nZXRTdHJ1Y3QoKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSBOVUxMKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsgKytpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUVHlwZSogZmllbGRUeXBlID0gKCpzdHJ1Y3R1
cmUpW2ldLnR5cGU7Ci0gICAgICAgICAgICBBU1NFUlQoZmllbGRUeXBlICE9IE5VTEwpOwotICAg
ICAgICAgICAgcENvbnN0VW5pb24gPSB3cml0ZUNvbnN0YW50VW5pb24oKmZpZWxkVHlwZSwgcENv
bnN0VW5pb24pOwotICAgICAgICAgICAgaWYgKGkgIT0gc3RydWN0dXJlLT5zaXplKCkgLSAxKSBv
dXQgPDwgIiwgIjsKLSAgICAgICAgfQotICAgICAgICBvdXQgPDwgIikiOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBpbnQgc2l6ZSA9IHR5cGUuZ2V0T2JqZWN0U2l6ZSgpOwotICAg
ICAgICBib29sIHdyaXRlVHlwZSA9IHNpemUgPiAxOwotICAgICAgICBpZiAod3JpdGVUeXBlKSBv
dXQgPDwgZ2V0VHlwZU5hbWUodHlwZSkgPDwgIigiOwotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHNpemU7ICsraSwgKytwQ29uc3RVbmlvbikKLSAgICAgICAgewotICAgICAgICAgICAgc3dp
dGNoIChwQ29uc3RVbmlvbi0+Z2V0VHlwZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBwQ29uc3RVbmlvbi0+Z2V0RkNvbnN0KCk7IGJyZWFr
OwotICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiBvdXQgPDwgcENvbnN0VW5pb24tPmdldElD
b25zdCgpOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6IG91dCA8PCBwQ29u
c3RVbmlvbi0+Z2V0QkNvbnN0KCk7IGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaSAhPSBzaXplIC0g
MSkgb3V0IDw8ICIsICI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdyaXRlVHlwZSkgb3V0IDw8
ICIpIjsKLSAgICB9Ci0gICAgcmV0dXJuIHBDb25zdFVuaW9uOwotfQotCi12b2lkIFRPdXRwdXRH
TFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewotICAgIFRJbmZvU2lua0Jh
c2UmIG91dCA9IG9ialNpbmsoKTsKLSAgICBvdXQgPDwgbm9kZS0+Z2V0U3ltYm9sKCk7Ci0KLSAg
ICBpZiAobURlY2xhcmluZ1ZhcmlhYmxlcyAmJiBub2RlLT5nZXRUeXBlKCkuaXNBcnJheSgpKQot
ICAgICAgICBvdXQgPDwgYXJyYXlCcmFja2V0cyhub2RlLT5nZXRUeXBlKCkpOwotfQotCi12b2lk
IFRPdXRwdXRHTFNMOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5v
ZGUpCi17Ci0gICAgd3JpdGVDb25zdGFudFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKSk7Ci19Ci0KLWJvb2wgVE91dHB1dEdMU0w6OnZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQotewotICAgIGJvb2wgdmlzaXRDaGls
ZHJlbiA9IHRydWU7Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAgIHN3
aXRjaCAobm9kZS0+Z2V0T3AoKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToK
LSAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiID0gIjsKLSAgICAgICAgICAgICAgICAvLyBSSFMgb2YgaW5pdGlh
bGl6ZSBpcyBub3QgYmVpbmcgZGVjbGFyZWQuCi0gICAgICAgICAgICAgICAgbURlY2xhcmluZ1Zh
cmlhYmxlcyA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQXNzaWduOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIsICIpIik7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
KCIsICIgKz0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOiB3cml0
ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtPSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BEaXZBc3NpZ246IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIC89ICIsICIpIik7IGJyZWFr
OwotICAgICAgICAvLyBOb3RpY2UgdGhlIGZhbGwtdGhyb3VnaC4KLSAgICAgICAgY2FzZSBFT3BN
dWxBc3NpZ246IAotICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgotICAg
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgotICAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzU2NhbGFyQXNzaWduOgotICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4
QXNzaWduOgotICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIiki
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6Ci0g
ICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoKLSAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2
aXNpdCwgTlVMTCwgIlsiLCAiXSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Ci0gICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iOwotICAgICAgICAgICAg
ICAgIC8vIFRPRE8oYWxva3ApOiBBU1NFUlQKLSAgICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+
Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpOwotICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4g
PSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcFZlY3RvclN3aXp6bGU6Ci0gICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIi4iOwotICAgICAgICAgICAgICAg
IFRJbnRlcm1BZ2dyZWdhdGUqIHJpZ2h0Q2hpbGQgPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBy
aWdodENoaWxkLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICAgICAgICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQgIT0gc2VxdWVuY2Uu
ZW5kKCk7ICsrc2l0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVElu
dGVybUNvbnN0YW50VW5pb24qIGVsZW1lbnQgPSAoKnNpdCktPmdldEFzQ29uc3RhbnRVbmlvbigp
OwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+Z2V0QmFzaWNUeXBlKCkgPT0g
RWJ0SW50KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmdldE5vbWluYWxT
aXplKCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnN0YW50VW5pb24mIGRh
dGEgPSBlbGVtZW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdOwotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoZGF0YS5nZXRUeXBlKCkgPT0gRWJ0SW50KTsKLSAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChkYXRhLmdldElDb25zdCgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDM6IG91dCA8PCAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BBZGQ6
IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiICsgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wU3ViOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAtICIsICIpIik7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcE11bDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgKiAiLCAiKSIp
OyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BEaXY6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAi
IC8gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTW9kOiBVTklNUExFTUVOVEVEKCk7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEVxdWFsOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwg
IiA9PSAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVz
c1RoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wR3JlYXRlclRoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCAiID4gIiwg
IikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDogd3JpdGVUcmlwbGV0
KHZpc2l0LCAiKCIsICIgPD0gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wR3JlYXRl
clRoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgPj0gIiwgIikiKTsgYnJlYWs7
Ci0KLSAgICAgICAgLy8gTm90aWNlIHRoZSBmYWxsLXRocm91Z2guCi0gICAgICAgIGNhc2UgRU9w
VmVjdG9yVGltZXNTY2FsYXI6Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6Ci0g
ICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4
VGltZXNTY2FsYXI6Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6Ci0gICAgICAg
ICAgICB3cml0ZVRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
KCIsICIgfHwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogd3Jp
dGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgXl4gIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wTG9naWNhbEFuZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCIsICIgJiYgIiwgIikiKTsgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLQotICAg
IHJldHVybiB2aXNpdENoaWxkcmVuOwotfQotCi1ib29sIFRPdXRwdXRHTFNMOjp2aXNpdFVuYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCi17Ci0gICAgc3dpdGNoIChub2RlLT5n
ZXRPcCgpKQotICAgIHsKLSAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiKC0iLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JMb2dp
Y2FsTm90OiB3cml0ZVRyaXBsZXQodmlzaXQsICJub3QoIiwgTlVMTCwgIikiKTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCEiLCBOVUxM
LCAiKSIpOyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIigiLCBOVUxMLCAiKyspIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBv
c3REZWNyZW1lbnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIigiLCBOVUxMLCAiLS0pIik7IGJyZWFr
OwotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKCsr
IiwgTlVMTCwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiB3cml0
ZVRyaXBsZXQodmlzaXQsICIoLS0iLCBOVUxMLCAiKSIpOyBicmVhazsKLQotICAgICAgICBjYXNl
IEVPcENvbnZJbnRUb0Jvb2w6Ci0gICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOgotICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFs
U2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgMTogd3JpdGVUcmlw
bGV0KHZpc2l0LCAiYm9vbCgiLCBOVUxMLCAiKSIpOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSAyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJidmVjMigiLCBOVUxMLCAiKSIpOyBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIDM6IHdyaXRlVHJpcGxldCh2aXNpdCwgImJ2ZWMzKCIsIE5V
TEwsICIpIik7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogd3JpdGVUcmlwbGV0KHZp
c2l0LCAiYnZlYzQoIiwgTlVMTCwgIikiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKLSAgICAgICAgY2FzZSBFT3BDb252SW50VG9G
bG9hdDoKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCku
Z2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6
IHdyaXRlVHJpcGxldCh2aXNpdCwgImZsb2F0KCIsIE5VTEwsICIpIik7ICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIDI6IHdyaXRlVHJpcGxldCh2aXNpdCwgInZlYzIoIiwgTlVMTCwgIiki
KTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2
ZWMzKCIsIE5VTEwsICIpIik7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogd3JpdGVU
cmlwbGV0KHZpc2l0LCAidmVjNCgiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6Ci0gICAgICAgIGNhc2UgRU9wQ29u
dkJvb2xUb0ludDoKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRU
eXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBj
YXNlIDE6IHdyaXRlVHJpcGxldCh2aXNpdCwgImludCgiLCBOVUxMLCAiKSIpOyAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSAyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVjMigiLCBOVUxM
LCAiKSIpOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IHdyaXRlVHJpcGxldCh2aXNp
dCwgIml2ZWMzKCIsIE5VTEwsICIpIik7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgTlVMTCwgIikiKTsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wUmFkaWFuczogd3JpdGVUcmlwbGV0KHZpc2l0
LCAicmFkaWFucygiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BEZWdyZWVz
OiB3cml0ZVRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsIE5VTEwsICIpIik7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcFNpbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAic2luKCIsIE5VTEwsICIpIik7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvczogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY29zKCIs
IE5VTEwsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFRhbjogd3JpdGVUcmlwbGV0KHZp
c2l0LCAidGFuKCIsIE5VTEwsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFzaW46IHdy
aXRlVHJpcGxldCh2aXNpdCwgImFzaW4oIiwgTlVMTCwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wQWNvczogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYWNvcygiLCBOVUxMLCAiKSIpOyBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BBdGFuOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhdGFuKCIsIE5V
TEwsICIpIik7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRXhwOiB3cml0ZVRyaXBsZXQodmlz
aXQsICJleHAoIiwgTlVMTCwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9nOiB3cml0
ZVRyaXBsZXQodmlzaXQsICJsb2coIiwgTlVMTCwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wRXhwMjogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZXhwMigiLCBOVUxMLCAiKSIpOyBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BMb2cyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsb2cyKCIsIE5VTEws
ICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFNxcnQ6IHdyaXRlVHJpcGxldCh2aXNpdCwg
InNxcnQoIiwgTlVMTCwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6
IHdyaXRlVHJpcGxldCh2aXNpdCwgImludmVyc2VzcXJ0KCIsIE5VTEwsICIpIik7IGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgRU9wQWJzOiB3cml0ZVRyaXBsZXQodmlzaXQsICJhYnMoIiwgTlVMTCwg
IikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU2lnbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
c2lnbigiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGbG9vcjogd3JpdGVU
cmlwbGV0KHZpc2l0LCAiZmxvb3IoIiwgTlVMTCwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wQ2VpbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY2VpbCgiLCBOVUxMLCAiKSIpOyBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BGcmFjdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZnJhY3QoIiwgTlVM
TCwgIikiKTsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMZW5ndGg6IHdyaXRlVHJpcGxldCh2
aXNpdCwgImxlbmd0aCgiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BOb3Jt
YWxpemU6IHdyaXRlVHJpcGxldCh2aXNpdCwgIm5vcm1hbGl6ZSgiLCBOVUxMLCAiKSIpOyBicmVh
azsKLQotICAgICAgICBjYXNlIEVPcEFueTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYW55KCIsIE5V
TEwsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFsbDogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiYWxsKCIsIE5VTEwsICIpIik7IGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRPdXRw
dXRHTFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9k
ZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0KLSAgICBpZiAobm9k
ZS0+dXNlc1Rlcm5hcnlPcGVyYXRvcigpKQotICAgIHsKLSAgICAgICAgLy8gTm90aWNlIHR3byBi
cmFja2V0cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQuIFRoZSBvdXRlciBvbmVzCi0gICAgICAg
IC8vIGVuY2Fwc3VsYXRlIHRoZSB3aG9sZSB0ZXJuYXJ5IGV4cHJlc3Npb24uIFRoaXMgcHJlc2Vy
dmVzIHRoZQotICAgICAgICAvLyBvcmRlciBvZiBwcmVjZWRlbmNlIHdoZW4gdGVybmFyeSBleHBy
ZXNzaW9ucyBhcmUgdXNlZCBpbiBhCi0gICAgICAgIC8vIGNvbXBvdW5kIGV4cHJlc3Npb24sIGku
ZS4sIGMgPSAyICogKGEgPCBiID8gMSA6IDIpLgotICAgICAgICBvdXQgPDwgIigoIjsKLSAgICAg
ICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwg
IikgPyAoIjsKLSAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwot
ICAgICAgICBvdXQgPDwgIikgOiAoIjsKLSAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50
cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIpKSI7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIG91dCA8PCAiaWYgKCI7Ci0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICIpXG4iOwotCi0gICAgICAgIGluY3Jl
bWVudERlcHRoKCk7Ci0gICAgICAgIHZpc2l0Q29kZUJsb2NrKG5vZGUtPmdldFRydWVCbG9jaygp
KTsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0RmFsc2VCbG9jaygpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBvdXQgPDwgImVsc2VcbiI7Ci0gICAgICAgICAgICB2aXNpdENvZGVCbG9jayhub2Rl
LT5nZXRGYWxzZUJsb2NrKCkpOwotICAgICAgICB9Ci0gICAgICAgIGRlY3JlbWVudERlcHRoKCk7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgYm9v
bCB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5r
KCk7Ci0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAgICAgY2FzZSBFT3BT
ZXF1ZW5jZTogewotICAgICAgICAgICAgLy8gU2NvcGUgdGhlIHNlcXVlbmNlcyBleGNlcHQgd2hl
biBhdCB0aGUgZ2xvYmFsIHNjb3BlLgotICAgICAgICAgICAgaWYgKGRlcHRoID4gMCkgb3V0IDw8
ICJ7XG4iOwotCi0gICAgICAgICAgICBpbmNyZW1lbnREZXB0aCgpOwotICAgICAgICAgICAgY29u
c3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAg
ICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNlcXVl
bmNlLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgIGl0ZXIgIT0gc2VxdWVuY2UuZW5kKCk7ICsr
aXRlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogbm9kZSA9
ICppdGVyOwotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwotICAgICAgICAg
ICAgICAgIG5vZGUtPnRyYXZlcnNlKHRoaXMpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzU2lu
Z2xlU3RhdGVtZW50KG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWNyZW1lbnREZXB0aCgpOwotCi0gICAgICAgICAg
ICAvLyBTY29wZSB0aGUgc2VxdWVuY2VzIGV4Y2VwdCB3aGVuIGF0IHRoZSBnbG9iYWwgc2NvcGUu
Ci0gICAgICAgICAgICBpZiAoZGVwdGggPiAwKSBvdXQgPDwgIn1cbiI7Ci0gICAgICAgICAgICB2
aXNpdENoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEVPcFByb3RvdHlwZTogewotICAgICAgICAgICAgLy8gRnVuY3Rpb24gZGVjbGFy
YXRpb24uCi0gICAgICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOwotICAgICAgICAg
ICAgVFN0cmluZyByZXR1cm5UeXBlID0gZ2V0VHlwZU5hbWUobm9kZS0+Z2V0VHlwZSgpKTsKLSAg
ICAgICAgICAgIG91dCA8PCByZXR1cm5UeXBlIDw8ICIgIiA8PCBub2RlLT5nZXROYW1lKCk7Ci0K
LSAgICAgICAgICAgIG91dCA8PCAiKCI7Ci0gICAgICAgICAgICB3cml0ZUZ1bmN0aW9uUGFyYW1l
dGVycyhub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgICAgIG91dCA8PCAiKSI7Ci0KLSAg
ICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRU9wRnVuY3Rpb246IHsKLSAgICAgICAgICAgIC8vIEZ1bmN0
aW9uIGRlZmluaXRpb24uCi0gICAgICAgICAgICBBU1NFUlQodmlzaXQgPT0gUHJlVmlzaXQpOwot
ICAgICAgICAgICAgVFN0cmluZyByZXR1cm5UeXBlID0gZ2V0VHlwZU5hbWUobm9kZS0+Z2V0VHlw
ZSgpKTsKLSAgICAgICAgICAgIFRTdHJpbmcgZnVuY3Rpb25OYW1lID0gVEZ1bmN0aW9uOjp1bm1h
bmdsZU5hbWUobm9kZS0+Z2V0TmFtZSgpKTsKLSAgICAgICAgICAgIG91dCA8PCByZXR1cm5UeXBl
IDw8ICIgIiA8PCBmdW5jdGlvbk5hbWU7Ci0KLSAgICAgICAgICAgIGluY3JlbWVudERlcHRoKCk7
Ci0gICAgICAgICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uIG5vZGUgY29udGFpbnMgb25lIG9y
IHR3byBjaGlsZHJlbiBub2RlcwotICAgICAgICAgICAgLy8gcmVwcmVzZW50aW5nIGZ1bmN0aW9u
IHBhcmFtZXRlcnMgYW5kIGZ1bmN0aW9uIGJvZHkuIFRoZSBsYXR0ZXIKLSAgICAgICAgICAgIC8v
IGlzIG5vdCBwcmVzZW50IGluIGNhc2Ugb2YgZW1wdHkgZnVuY3Rpb24gYm9kaWVzLgotICAgICAg
ICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7Ci0gICAgICAgICAgICBBU1NFUlQoKHNlcXVlbmNlLnNpemUoKSA9PSAxKSB8fCAoc2VxdWVu
Y2Uuc2l6ZSgpID09IDIpKTsKLSAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRl
cmF0b3Igc2VxSXRlciA9IHNlcXVlbmNlLmJlZ2luKCk7Ci0KLSAgICAgICAgICAgIC8vIFRyYXZl
cnNlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBw
YXJhbXMgPSAoKnNlcUl0ZXIpLT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAgICAgICAgICAgQVNTRVJU
KHBhcmFtcyAhPSBOVUxMKTsKLSAgICAgICAgICAgIEFTU0VSVChwYXJhbXMtPmdldE9wKCkgPT0g
RU9wUGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBwYXJhbXMtPnRyYXZlcnNlKHRoaXMpOwotCi0g
ICAgICAgICAgICAvLyBUcmF2ZXJzZSBmdW5jdGlvbiBib2R5LgotICAgICAgICAgICAgVEludGVy
bUFnZ3JlZ2F0ZSogYm9keSA9ICsrc2VxSXRlciAhPSBzZXF1ZW5jZS5lbmQoKSA/Ci0gICAgICAg
ICAgICAgICAgKCpzZXFJdGVyKS0+Z2V0QXNBZ2dyZWdhdGUoKSA6IE5VTEw7Ci0gICAgICAgICAg
ICB2aXNpdENvZGVCbG9jayhib2R5KTsKLSAgICAgICAgICAgIGRlY3JlbWVudERlcHRoKCk7Ci0g
Ci0gICAgICAgICAgICAvLyBGdWxseSBwcm9jZXNzZWQ7IG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRy
ZW4uCi0gICAgICAgICAgICB2aXNpdENoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKLSAgICAgICAgICAg
IC8vIEZ1bmN0aW9uIGNhbGwuCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyBmdW5jdGlvbk5hbWUgPSBURnVu
Y3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIG91
dCA8PCBmdW5jdGlvbk5hbWUgPDwgIigiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgIiwgIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIikiOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUGFyYW1ldGVyczogewotICAgICAgICAgICAgLy8g
RnVuY3Rpb24gcGFyYW1ldGVycy4KLSAgICAgICAgICAgIEFTU0VSVCh2aXNpdCA9PSBQcmVWaXNp
dCk7Ci0gICAgICAgICAgICBvdXQgPDwgIigiOwotICAgICAgICAgICAgd3JpdGVGdW5jdGlvblBh
cmFtZXRlcnMobm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgICAgICBvdXQgPDwgIikiOwot
ICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogewotICAgICAgICAgICAgLy8g
VmFyaWFibGUgZGVjbGFyYXRpb24uCi0gICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBz
ZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVElu
dGVybVR5cGVkKiB2YXJpYWJsZSA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKTsKLSAg
ICAgICAgICAgICAgICB3cml0ZVZhcmlhYmxlVHlwZSh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgIiAiOwotICAgICAgICAgICAgICAgIG1EZWNsYXJpbmdWYXJp
YWJsZXMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQg
PT0gSW5WaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsK
LSAgICAgICAgICAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGVj
bGFyaW5nVmFyaWFibGVzID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJmbG9hdCgiLCBOVUxMLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIpIik7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzM6IHdyaXRlVHJpcGxldCh2aXNpdCwg
InZlYzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVj
NDogd3JpdGVUcmlwbGV0KHZpc2l0LCAidmVjNCgiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOiB3cml0ZVRyaXBsZXQodmlzaXQsICJib29sKCIsIE5V
TEwsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOiB3cml0ZVRy
aXBsZXQodmlzaXQsICJidmVjMigiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RCVmVjMzogd3JpdGVUcmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIiki
KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6IHdyaXRlVHJpcGxldCh2
aXNpdCwgImJ2ZWM0KCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdEludDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiaW50KCIsIE5VTEwsICIpIik7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOiB3cml0ZVRyaXBsZXQodmlzaXQsICJpdmVj
MigiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzog
d3JpdGVUcmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIs
ICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6IHdyaXRlVHJp
cGxldCh2aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0TWF0Mzogd3JpdGVUcmlwbGV0KHZpc2l0LCAibWF0MygiLCAiLCAiLCAiKSIpOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJtYXQ0KCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0
cnVjdDoKLSAgICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSYgdHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOwot
ICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlLmdldFR5cGVOYW1lKCkgPDwgIigiOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIikiOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMZXNz
VGhhbjogd3JpdGVUcmlwbGV0KHZpc2l0LCAibGVzc1RoYW4oIiwgIiwgIiwgIikiKTsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46IHdyaXRlVHJpcGxldCh2aXNpdCwgImdyZWF0
ZXJUaGFuKCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImxlc3NUaGFuRXF1YWwoIiwgIiwgIiwgIikiKTsgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiZ3JlYXRlclRoYW5FcXVhbCgiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BWZWN0b3JFcXVhbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZXF1YWwoIiwgIiwgIiwgIikiKTsg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yTm90RXF1YWw6IHdyaXRlVHJpcGxldCh2aXNp
dCwgIm5vdEVxdWFsKCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbW1h
OiB3cml0ZVRyaXBsZXQodmlzaXQsIE5VTEwsICIsICIsIE5VTEwpOyBicmVhazsKLQotICAgICAg
ICBjYXNlIEVPcE1vZDogd3JpdGVUcmlwbGV0KHZpc2l0LCAibW9kKCIsICIsICIsICIpIik7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcFBvdzogd3JpdGVUcmlwbGV0KHZpc2l0LCAicG93KCIsICIs
ICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEF0YW46IHdyaXRlVHJpcGxldCh2aXNp
dCwgImF0YW4oIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWluOiB3cml0
ZVRyaXBsZXQodmlzaXQsICJtaW4oIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wTWF4OiB3cml0ZVRyaXBsZXQodmlzaXQsICJtYXgoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wQ2xhbXA6IHdyaXRlVHJpcGxldCh2aXNpdCwgImNsYW1wKCIsICIsICIs
ICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE1peDogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
bWl4KCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFN0ZXA6IHdyaXRlVHJp
cGxldCh2aXNpdCwgInN0ZXAoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
U21vb3RoU3RlcDogd3JpdGVUcmlwbGV0KHZpc2l0LCAic21vb3Roc3RlcCgiLCAiLCAiLCAiKSIp
OyBicmVhazsKLQotICAgICAgICBjYXNlIEVPcERpc3RhbmNlOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJkaXN0YW5jZSgiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BEb3Q6IHdy
aXRlVHJpcGxldCh2aXNpdCwgImRvdCgiLCAiLCAiLCAiKSIpOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BDcm9zczogd3JpdGVUcmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwgIiwgIikiKTsgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6IHdyaXRlVHJpcGxldCh2aXNpdCwgImZh
Y2Vmb3J3YXJkKCIsICIsICIsICIpIik7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFJlZmxlY3Q6
IHdyaXRlVHJpcGxldCh2aXNpdCwgInJlZmxlY3QoIiwgIiwgIiwgIikiKTsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wUmVmcmFjdDogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmVmcmFjdCgiLCAiLCAi
LCAiKSIpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNdWw6IHdyaXRlVHJpcGxldCh2aXNpdCwg
Im1hdHJpeENvbXBNdWx0KCIsICIsICIsICIpIik7IGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdmlzaXRDaGlsZHJlbjsK
LX0KLQotYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9v
cCogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0KLSAgICBp
bmNyZW1lbnREZXB0aCgpOwotICAgIC8vIExvb3AgaGVhZGVyLgotICAgIGlmIChub2RlLT50ZXN0
Rmlyc3QoKSkgIC8vIGZvciBsb29wCi0gICAgewotICAgICAgICBvdXQgPDwgImZvciAoIjsKLSAg
ICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKLSAgICAgICAgICAgIG5vZGUtPmdldEluaXQoKS0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiOyAiOwotCi0gICAgICAgIEFTU0VSVChu
b2RlLT5nZXRUZXN0KCkgIT0gTlVMTCk7Ci0gICAgICAgIG5vZGUtPmdldFRlc3QoKS0+dHJhdmVy
c2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiOyAiOwotCi0gICAgICAgIGlmIChub2RlLT5nZXRU
ZXJtaW5hbCgpKQotICAgICAgICAgICAgbm9kZS0+Z2V0VGVybWluYWwoKS0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgIG91dCA8PCAiKVxuIjsKLSAgICB9Ci0gICAgZWxzZSAgLy8gZG8td2hpbGUg
bG9vcAotICAgIHsKLSAgICAgICAgb3V0IDw8ICJkb1xuIjsKLSAgICB9Ci0KLSAgICAvLyBMb29w
IGJvZHkuCi0gICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKLQotICAgIC8vIExv
b3AgZm9vdGVyLgotICAgIGlmICghbm9kZS0+dGVzdEZpcnN0KCkpICAvLyB3aGlsZSBsb29wCi0g
ICAgewotICAgICAgICBvdXQgPDwgIndoaWxlICgiOwotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0
VGVzdCgpICE9IE5VTEwpOwotICAgICAgICBub2RlLT5nZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMp
OwotICAgICAgICBvdXQgPDwgIik7XG4iOwotICAgIH0KLSAgICBkZWNyZW1lbnREZXB0aCgpOwot
Ci0gICAgLy8gTm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4gVGhleSBoYXZlIGJlZW4gYWxyZWFk
eSBwcm9jZXNzZWQgaW4KLSAgICAvLyB0aGlzIGZ1bmN0aW9uLgotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1C
cmFuY2gqIG5vZGUpCi17Ci0gICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkKLSAgICB7Ci0g
ICAgICAgIGNhc2UgRU9wS2lsbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZGlzY2FyZCIsIE5VTEws
IE5VTEwpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BCcmVhazogd3JpdGVUcmlwbGV0KHZpc2l0
LCAiYnJlYWsiLCBOVUxMLCBOVUxMKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29udGludWU6
IHdyaXRlVHJpcGxldCh2aXNpdCwgImNvbnRpbnVlIiwgTlVMTCwgTlVMTCk7IGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcFJldHVybjogd3JpdGVUcmlwbGV0KHZpc2l0LCAicmV0dXJuICIsIE5VTEws
IE5VTEwpOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVE91dHB1dEdMU0w6OnZpc2l0Q29k
ZUJsb2NrKFRJbnRlcm1Ob2RlKiBub2RlKSB7Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gb2Jq
U2luaygpOwotICAgIGlmIChub2RlICE9IE5VTEwpCi0gICAgewotICAgICAgICBub2RlLT50cmF2
ZXJzZSh0aGlzKTsKLSAgICAgICAgLy8gU2luZ2xlIHN0YXRlbWVudHMgbm90IHBhcnQgb2YgYSBz
ZXF1ZW5jZSBuZWVkIHRvIGJlIHRlcm1pbmF0ZWQKLSAgICAgICAgLy8gd2l0aCBzZW1pLWNvbG9u
LgotICAgICAgICBpZiAoaXNTaW5nbGVTdGF0ZW1lbnQobm9kZSkpCi0gICAgICAgICAgICBvdXQg
PDwgIjtcbiI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG91dCA8PCAie1xufVxu
IjsgIC8vIEVtcHR5IGNvZGUgYmxvY2suCi0gICAgfQotfQpJbmRleDogQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEdMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0
R0xTTC5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNM
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2lmbmRlZiBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCi0jZGVmaW5lIENST1NTQ09N
UElMRVJHTFNMX09VVFBVVEdMU0xfSF8KLQotI2luY2x1ZGUgPHNldD4KLQotI2luY2x1ZGUgImNv
bXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgi
Ci0KLWNsYXNzIFRPdXRwdXRHTFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKLXsKLXB1Ymxp
YzoKLSAgICBUT3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKLQotcHJvdGVjdGVk
OgotICAgIFRJbmZvU2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVybiBtT2JqU2luazsgfQotICAg
IHZvaWQgd3JpdGVUcmlwbGV0KFZpc2l0IHZpc2l0LCBjb25zdCBjaGFyKiBwcmVTdHIsIGNvbnN0
IGNoYXIqIGluU3RyLCBjb25zdCBjaGFyKiBwb3N0U3RyKTsKLSAgICB2b2lkIHdyaXRlVmFyaWFi
bGVUeXBlKGNvbnN0IFRUeXBlJiB0eXBlKTsKLSAgICB2b2lkIHdyaXRlRnVuY3Rpb25QYXJhbWV0
ZXJzKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgYXJncyk7Ci0gICAgY29uc3QgQ29uc3RhbnRVbmlv
biogd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRUeXBlJiB0eXBlLCBjb25zdCBDb25zdGFudFVu
aW9uKiBwQ29uc3RVbmlvbik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCogbm9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50
ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSk7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKTsKLSAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qIG5vZGUpOwotICAg
IHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSogbm9kZSk7Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVy
bUxvb3AqIG5vZGUpOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwg
VEludGVybUJyYW5jaCogbm9kZSk7Ci0KLSAgICB2b2lkIHZpc2l0Q29kZUJsb2NrKFRJbnRlcm1O
b2RlKiBub2RlKTsKLQotcHJpdmF0ZToKLSAgICBUSW5mb1NpbmtCYXNlJiBtT2JqU2luazsKLSAg
ICBib29sIG1EZWNsYXJpbmdWYXJpYWJsZXM7Ci0KLSAgICAvLyBTdHJ1Y3RzIGFyZSBkZWNsYXJl
ZCBhcyB0aGUgdHJlZSBpcyB0cmF2ZXJzZWQuIFRoaXMgc2V0IGNvbnRhaW5zIGFsbAotICAgIC8v
IHRoZSBzdHJ1Y3RzIGFscmVhZHkgZGVjbGFyZWQuIEl0IGlzIG1haW50YWluZWQgc28gdGhhdCBh
IHN0cnVjdCBpcwotICAgIC8vIGRlY2xhcmVkIG9ubHkgb25jZS4KLSAgICB0eXBlZGVmIHN0ZDo6
c2V0PFRTdHJpbmc+IERlY2xhcmVkU3RydWN0czsKLSAgICBEZWNsYXJlZFN0cnVjdHMgbURlY2xh
cmVkU3RydWN0czsKLX07Ci0KLSNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xT
TF9IXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAkocmV2aXNpb24gNzQ2NTgpCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjE2MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvT3V0
cHV0SExTTC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVjdC5oIgotCi0j
aW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLW5hbWVzcGFjZSBzaAot
ewotLy8gSW50ZWdlciB0byBUU3RyaW5nIGNvbnZlcnNpb24KLVRTdHJpbmcgc3RyKGludCBpKQot
ewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzcHJpbnRmKGJ1ZmZlciwgIiVkIiwgaSk7Ci0g
ICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250
ZXh0ICZjb250ZXh0KSA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250
ZXh0KGNvbnRleHQpCi17Ci0gICAgbVVuZm9sZFNlbGVjdCA9IG5ldyBVbmZvbGRTZWxlY3QoY29u
dGV4dCwgdGhpcyk7Ci0gICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7Ci0KLSAgICBtVXNlc1Rl
eHR1cmUyRCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSBmYWxzZTsKLSAgICBt
VXNlc1RleHR1cmUyRFByb2ogPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pfYmlhcyA9
IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVD
dWJlX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsKLSAgICBtVXNl
c0ZyYWdDb29yZCA9IGZhbHNlOwotICAgIG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNlOwotICAgIG1V
c2VzRnJvbnRGYWNpbmcgPSBmYWxzZTsKLSAgICBtVXNlc1BvaW50U2l6ZSA9IGZhbHNlOwotICAg
IG1Vc2VzWG9yID0gZmFsc2U7Ci0gICAgbVVzZXNNb2QxID0gZmFsc2U7Ci0gICAgbVVzZXNNb2Qy
ID0gZmFsc2U7Ci0gICAgbVVzZXNNb2QzID0gZmFsc2U7Ci0gICAgbVVzZXNNb2Q0ID0gZmFsc2U7
Ci0gICAgbVVzZXNGYWNlZm9yd2FyZDEgPSBmYWxzZTsKLSAgICBtVXNlc0ZhY2Vmb3J3YXJkMiA9
IGZhbHNlOwotICAgIG1Vc2VzRmFjZWZvcndhcmQzID0gZmFsc2U7Ci0gICAgbVVzZXNGYWNlZm9y
d2FyZDQgPSBmYWxzZTsKLSAgICBtVXNlc0VxdWFsTWF0MiA9IGZhbHNlOwotICAgIG1Vc2VzRXF1
YWxNYXQzID0gZmFsc2U7Ci0gICAgbVVzZXNFcXVhbE1hdDQgPSBmYWxzZTsKLSAgICBtVXNlc0Vx
dWFsVmVjMiA9IGZhbHNlOwotICAgIG1Vc2VzRXF1YWxWZWMzID0gZmFsc2U7Ci0gICAgbVVzZXNF
cXVhbFZlYzQgPSBmYWxzZTsKLSAgICBtVXNlc0VxdWFsSVZlYzIgPSBmYWxzZTsKLSAgICBtVXNl
c0VxdWFsSVZlYzMgPSBmYWxzZTsKLSAgICBtVXNlc0VxdWFsSVZlYzQgPSBmYWxzZTsKLSAgICBt
VXNlc0VxdWFsQlZlYzIgPSBmYWxzZTsKLSAgICBtVXNlc0VxdWFsQlZlYzMgPSBmYWxzZTsKLSAg
ICBtVXNlc0VxdWFsQlZlYzQgPSBmYWxzZTsKLSAgICBtVXNlc0F0YW4yID0gZmFsc2U7Ci0KLSAg
ICBtU2NvcGVEZXB0aCA9IDA7Ci0KLSAgICBtQXJndW1lbnRJbmRleCA9IDA7Ci19Ci0KLU91dHB1
dEhMU0w6On5PdXRwdXRITFNMKCkKLXsKLSAgICBkZWxldGUgbVVuZm9sZFNlbGVjdDsKLX0KLQot
dm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQotewotICAgIG1Db250ZXh0LnRyZWVSb290LT50cmF2
ZXJzZSh0aGlzKTsgICAvLyBPdXRwdXQgdGhlIGJvZHkgZmlyc3QgdG8gZGV0ZXJtaW5lIHdoYXQg
aGFzIHRvIGdvIGluIHRoZSBoZWFkZXIKLSAgICBoZWFkZXIoKTsKLQotICAgIG1Db250ZXh0Lmlu
Zm9TaW5rLm9iaiA8PCBtSGVhZGVyLmNfc3RyKCk7Ci0gICAgbUNvbnRleHQuaW5mb1Npbmsub2Jq
IDw8IG1Cb2R5LmNfc3RyKCk7Ci19Ci0KLVRJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJv
ZHlTdHJlYW0oKQotewotICAgIHJldHVybiBtQm9keTsKLX0KLQotaW50IE91dHB1dEhMU0w6OnZl
Y3RvclNpemUoY29uc3QgVFR5cGUgJnR5cGUpIGNvbnN0Ci17Ci0gICAgaW50IGVsZW1lbnRTaXpl
ID0gdHlwZS5pc01hdHJpeCgpID8gdHlwZS5nZXROb21pbmFsU2l6ZSgpIDogMTsKLSAgICBpbnQg
YXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKLQot
ICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFycmF5U2l6ZTsKLX0KLQotdm9pZCBPdXRwdXRITFNM
OjpoZWFkZXIoKQotewotICAgIEVTaExhbmd1YWdlIGxhbmd1YWdlID0gbUNvbnRleHQubGFuZ3Vh
Z2U7Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUhlYWRlcjsKLQotICAgIGZvciAoU3RydWN0
RGVjbGFyYXRpb25zOjppdGVyYXRvciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1Y3REZWNsYXJh
dGlvbnMuYmVnaW4oKTsgc3RydWN0RGVjbGFyYXRpb24gIT0gbVN0cnVjdERlY2xhcmF0aW9ucy5l
bmQoKTsgc3RydWN0RGVjbGFyYXRpb24rKykKLSAgICB7Ci0gICAgICAgIG91dCA8PCAqc3RydWN0
RGVjbGFyYXRpb247Ci0gICAgfQotCi0gICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9yIGNv
bnN0cnVjdG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29uc3Ry
dWN0b3JzLmVuZCgpOyBjb25zdHJ1Y3RvcisrKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICpjb25z
dHJ1Y3RvcjsKLSAgICB9Ci0KLSAgICBpZiAobGFuZ3VhZ2UgPT0gRVNoTGFuZ0ZyYWdtZW50KQot
ICAgIHsKLSAgICAgICAgVFN0cmluZyB1bmlmb3JtczsKLSAgICAgICAgVFN0cmluZyB2YXJ5aW5n
czsKLQotICAgICAgICBUU3ltYm9sVGFibGVMZXZlbCAqc3ltYm9scyA9IG1Db250ZXh0LnN5bWJv
bFRhYmxlLmdldEdsb2JhbExldmVsKCk7Ci0gICAgICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsK
LQotICAgICAgICBmb3IgKFRTeW1ib2xUYWJsZUxldmVsOjpjb25zdF9pdGVyYXRvciBuYW1lZFN5
bWJvbCA9IHN5bWJvbHMtPmJlZ2luKCk7IG5hbWVkU3ltYm9sICE9IHN5bWJvbHMtPmVuZCgpOyBu
YW1lZFN5bWJvbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUU3ltYm9sICpzeW1i
b2wgPSAoKm5hbWVkU3ltYm9sKS5zZWNvbmQ7Ci0gICAgICAgICAgICBjb25zdCBUU3RyaW5nICZu
YW1lID0gc3ltYm9sLT5nZXROYW1lKCk7Ci0KLSAgICAgICAgICAgIGlmIChzeW1ib2wtPmlzVmFy
aWFibGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUg
KnZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKLSAgICAg
ICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHZhcmlhYmxlLT5nZXRUeXBlKCk7Ci0gICAg
ICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSB0eXBlLmdldFF1YWxpZmllcigpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2VkVW5pZm9ybXMuZmlu
ZChuYW1lLmNfc3RyKCkpICE9IG1SZWZlcmVuY2VkVW5pZm9ybXMuZW5kKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3Jt
ICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmlu
Zyh0eXBlKSArICI7XG4iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwg
cXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbikKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChtUmVmZXJlbmNlZFZhcnlpbmdzLmZpbmQobmFtZS5jX3N0
cigpKSAhPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmVuZCgpKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9ncmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0
aGlzIGV4YWN0IGZvcm1hdAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZ3MgKz0gInN0
YXRpYyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlT
dHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gdHlwZS5pc0FycmF5KCkgPyB0eXBl
LmdldEFycmF5U2l6ZSgpIDogMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxR2xvYmFsIHx8
IHF1YWxpZmllciA9PSBFdnFUZW1wb3JhcnkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAvLyBHbG9iYWxzIGFyZSBkZWNsYXJlZCBhbmQgaW50aWFsaXplZCBhcyBhbiBh
Z2dyZWdhdGUgbm9kZQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlm
IChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAvLyBDb25zdGFudHMgYXJlIHJlcGVhdGVkIGFzIGxpdGVyYWxzIHdoZXJlIHVzZWQK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3V0IDw8ICIvLyBWYXJ5aW5nc1xu
IjsKLSAgICAgICAgb3V0IDw8ICB2YXJ5aW5nczsKLSAgICAgICAgb3V0IDw8ICJcbiIKLSAgICAg
ICAgICAgICAgICJzdGF0aWMgZmxvYXQ0IGdsX0NvbG9yWzFdID0ge2Zsb2F0NCgwLCAwLCAwLCAw
KX07XG4iOwotCi0gICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKLSAgICAgICAgewotICAgICAg
ICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQ0IGdsX0ZyYWdDb29yZCA9IGZsb2F0NCgwLCAwLCAw
LCAwKTtcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNQb2ludENvb3JkKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdDIgZ2xfUG9pbnRDb29yZCA9
IGZsb2F0MigwLjUsIDAuNSk7XG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzRnJv
bnRGYWNpbmcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGJvb2wgZ2xf
RnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQgPDwgIlxu
IjsKLQotICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG91dCA8PCAidW5pZm9ybSBmbG9hdDQgZHhfVmlld3BvcnQ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgInVuaWZvcm0gZmxvYXQyIGR4X0RlcHRoO1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtVXNlc0Zyb250RmFjaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgInVuaWZv
cm0gYm9vbCBkeF9Qb2ludHNPckxpbmVzO1xuIgotICAgICAgICAgICAgICAgICAgICJ1bmlmb3Jt
IGJvb2wgZHhfRnJvbnRDQ1c7XG4iOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBvdXQg
PDwgIlxuIjsKLSAgICAgICAgb3V0IDw8ICB1bmlmb3JtczsKLSAgICAgICAgb3V0IDw8ICJcbiI7
Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQotICAgICAgICB7Ci0gICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAg
ICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4
MkQocywgdCk7XG4iCi0gICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAg
ICAiXG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwg
dC55LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAiXG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJv
aikKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJv
aihzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQueCwgdC55
LCAwLCB0LnopKTtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2Ft
cGxlcjJEIHMsIGZsb2F0NCB0KVxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgotICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pfYmlhcykKLSAgICAgICAgewotICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZs
b2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAw
LCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAg
ICAiXG4iCi0gICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBs
ZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54
IC8gdC53LCB0LnkgLyB0LncsIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVz
ZXNUZXh0dXJlQ3ViZSkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFKHMsIHQpO1xu
IgotICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlX2JpYXMpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMs
IGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWJpYXMocywgZmxvYXQ0KHQueCwgdC55
LCB0LnosIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICJcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAgIC8vIFZlcnRleCBzaGFk
ZXIKLSAgICB7Ci0gICAgICAgIFRTdHJpbmcgdW5pZm9ybXM7Ci0gICAgICAgIFRTdHJpbmcgYXR0
cmlidXRlczsKLSAgICAgICAgVFN0cmluZyB2YXJ5aW5nczsKLQotICAgICAgICBUU3ltYm9sVGFi
bGVMZXZlbCAqc3ltYm9scyA9IG1Db250ZXh0LnN5bWJvbFRhYmxlLmdldEdsb2JhbExldmVsKCk7
Ci0KLSAgICAgICAgZm9yIChUU3ltYm9sVGFibGVMZXZlbDo6Y29uc3RfaXRlcmF0b3IgbmFtZWRT
eW1ib2wgPSBzeW1ib2xzLT5iZWdpbigpOyBuYW1lZFN5bWJvbCAhPSBzeW1ib2xzLT5lbmQoKTsg
bmFtZWRTeW1ib2wrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVFN5bWJvbCAqc3lt
Ym9sID0gKCpuYW1lZFN5bWJvbCkuc2Vjb25kOwotICAgICAgICAgICAgY29uc3QgVFN0cmluZyAm
bmFtZSA9IHN5bWJvbC0+Z2V0TmFtZSgpOwotCi0gICAgICAgICAgICBpZiAoc3ltYm9sLT5pc1Zh
cmlhYmxlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxl
ICp2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpOwotICAg
ICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gdHlwZS5nZXRRdWFsaWZpZXIoKTsK
LQotICAgICAgICAgICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtUmVmZXJlbmNlZFVuaWZvcm1zLmZp
bmQobmFtZS5jX3N0cigpKSAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9y
bSAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJp
bmcodHlwZSkgKyAiO1xuIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1SZWZlcmVuY2VkQXR0
cmlidXRlcy5maW5kKG5hbWUuY19zdHIoKSkgIT0gbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmVuZCgp
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVzICs9ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1l
KSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4i
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBF
dnFJbnZhcmlhbnRWYXJ5aW5nT3V0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1SZWZlcmVuY2VkVmFyeWluZ3MuZmluZChuYW1lLmNfc3RyKCkpICE9IG1SZWZl
cmVuY2VkVmFyeWluZ3MuZW5kKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9y
bWF0Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBl
U3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSAr
ICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIg
PT0gRXZxR2xvYmFsIHx8IHF1YWxpZmllciA9PSBFdnFUZW1wb3JhcnkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAvLyBHbG9iYWxzIGFyZSBkZWNsYXJlZCBhbmQgaW50
aWFsaXplZCBhcyBhbiBhZ2dyZWdhdGUgbm9kZQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAvLyBDb25zdGFudHMgYXJlIHJlcGVhdGVkIGFzIGxpdGVy
YWxzIHdoZXJlIHVzZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3V0IDw8
ICIvLyBBdHRyaWJ1dGVzXG4iOwotICAgICAgICBvdXQgPDwgIGF0dHJpYnV0ZXM7Ci0gICAgICAg
IG91dCA8PCAiXG4iCi0gICAgICAgICAgICAgICAic3RhdGljIGZsb2F0NCBnbF9Qb3NpdGlvbiA9
IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7Ci0gICAgICAgIAotICAgICAgICBpZiAobVVzZXNQb2lu
dFNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0IGdsX1Bv
aW50U2l6ZSA9IGZsb2F0KDEpO1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiXG4i
Ci0gICAgICAgICAgICAgICAiLy8gVmFyeWluZ3NcbiI7Ci0gICAgICAgIG91dCA8PCAgdmFyeWlu
Z3M7Ci0gICAgICAgIG91dCA8PCAiXG4iCi0gICAgICAgICAgICAgICAidW5pZm9ybSBmbG9hdDIg
ZHhfSGFsZlBpeGVsU2l6ZTtcbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgIG91dCA8
PCAgdW5pZm9ybXM7Ci0gICAgICAgIG91dCA8PCAiXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNl
c0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX0ZSQUdf
Q09PUkRcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzUG9pbnRDb29yZCkKLSAgICB7Ci0gICAg
ICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX1BPSU5UX0NPT1JEXG4iOwotICAgIH0KLQotICAg
IGlmIChtVXNlc0Zyb250RmFjaW5nKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICIjZGVmaW5lIEdM
X1VTRVNfRlJPTlRfRkFDSU5HXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc1BvaW50U2l6ZSkK
LSAgICB7Ci0gICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX1BPSU5UX1NJWkVcbiI7Ci0g
ICAgfQotCi0gICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAi
c3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCi0gICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgIiAgICBmbG9hdCBuZWFyO1xuIgotICAgICAgICAgICAgICAgIiAgICBm
bG9hdCBmYXI7XG4iCi0gICAgICAgICAgICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCi0gICAgICAg
ICAgICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICJ1bmlm
b3JtIGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIGdsX0RlcHRoUmFuZ2U7XG4iCi0gICAgICAgICAg
ICAgICAiXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc1hvcikKLSAgICB7Ci0gICAgICAgIG91
dCA8PCAiYm9vbCB4b3IoYm9vbCBwLCBib29sIHEpXG4iCi0gICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gKHAgfHwgcSkgJiYgIShwICYmIHEpO1xuIgotICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYg
KG1Vc2VzTW9kMSkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQgbW9kKGZsb2F0IHgsIGZs
b2F0IHkpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICByZXR1
cm4geCAtIHkgKiBmbG9vcih4IC8geSk7XG4iCi0gICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgIlxuIjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1Vc2VzTW9kMikKLSAgICB7Ci0g
ICAgICAgIG91dCA8PCAiZmxvYXQyIG1vZChmbG9hdDIgeCwgZmxvYXQgeSlcbiIKLSAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVybiB4IC0geSAqIGZsb29yKHgg
LyB5KTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAiXG4iOwotICAg
IH0KLSAgICAKLSAgICBpZiAobVVzZXNNb2QzKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9h
dDMgbW9kKGZsb2F0MyB4LCBmbG9hdCB5KVxuIgotICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHggLSB5ICogZmxvb3IoeCAvIHkpO1xuIgotICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2Vz
TW9kNCkKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQ0IG1vZChmbG9hdDQgeCwgZmxvYXQg
eSlcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVybiB4
IC0geSAqIGZsb29yKHggLyB5KTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAg
ICAgICAiXG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0ZhY2Vmb3J3YXJkMSkKLSAgICB7Ci0g
ICAgICAgIG91dCA8PCAiZmxvYXQgZmFjZWZvcndhcmQoZmxvYXQgTiwgZmxvYXQgSSwgZmxvYXQg
TnJlZilcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKGRv
dChOcmVmLCBJKSA+PSAwKVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAg
ICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAg
ICAgICAgICAgICAgICIgICAgZWxzZVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAg
ICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxu
IgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQyKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDIg
ZmFjZWZvcndhcmQoZmxvYXQyIE4sIGZsb2F0MiBJLCBmbG9hdDIgTnJlZilcbiIKLSAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxu
IgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1
cm4gLU47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICIgICAg
ZWxzZVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAg
ICByZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAgICAgICAg
In1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRmFjZWZv
cndhcmQzKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJmbG9hdDMgZmFjZWZvcndhcmQoZmxvYXQz
IE4sIGZsb2F0MyBJLCBmbG9hdDMgTnJlZilcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAiICAgIGlmKGRvdChOcmVmLCBJKSA+PSAwKVxuIgotICAgICAgICAgICAgICAg
IiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCi0gICAgICAg
ICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgotICAgICAgICAg
ICAgICAgIiAgICB7XG4iCi0gICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKLSAg
ICAgICAgICAgICAgICIgICAgfVxuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRmFjZWZvcndhcmQ0KQotICAgIHsKLSAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZmFjZWZvcndhcmQoZmxvYXQ0IE4sIGZsb2F0NCBJLCBmbG9h
dDQgTnJlZilcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIGlm
KGRvdChOcmVmLCBJKSA+PSAwKVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0gICAgICAg
ICAgICAgICAiICAgICAgICByZXR1cm4gLU47XG4iCi0gICAgICAgICAgICAgICAiICAgIH1cbiIK
LSAgICAgICAgICAgICAgICIgICAgZWxzZVxuIgotICAgICAgICAgICAgICAgIiAgICB7XG4iCi0g
ICAgICAgICAgICAgICAiICAgICAgICByZXR1cm4gTjtcbiIKLSAgICAgICAgICAgICAgICIgICAg
fVxuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJcbiI7Ci0gICAgfQot
Ci0gICAgaWYgKG1Vc2VzRXF1YWxNYXQyKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJib29sIGVx
dWFsKGZsb2F0MngyIG0sIGZsb2F0MngyIG4pXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gbVswXVswXSA9PSBuWzBdWzBdICYmIG1bMF1bMV0gPT0g
blswXVsxXSAmJlxuIgotICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsxXVswXSA9PSBuWzFd
WzBdICYmIG1bMV1bMV0gPT0gblsxXVsxXTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iOwotICAg
IH0KLQotICAgIGlmIChtVXNlc0VxdWFsTWF0MykKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiYm9v
bCBlcXVhbChmbG9hdDN4MyBtLCBmbG9hdDN4MyBuKVxuIgotICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG1bMF1bMF0gPT0gblswXVswXSAmJiBtWzBdWzFd
ID09IG5bMF1bMV0gJiYgbVswXVsyXSA9PSBuWzBdWzJdICYmXG4iCi0gICAgICAgICAgICAgICAi
ICAgICAgICAgICBtWzFdWzBdID09IG5bMV1bMF0gJiYgbVsxXVsxXSA9PSBuWzFdWzFdICYmIG1b
MV1bMl0gPT0gblsxXVsyXSAmJlxuIgotICAgICAgICAgICAgICAgIiAgICAgICAgICAgbVsyXVsw
XSA9PSBuWzJdWzBdICYmIG1bMl1bMV0gPT0gblsyXVsxXSAmJiBtWzJdWzJdID09IG5bMl1bMl07
XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNFcXVhbE1h
dDQpCi0gICAgewotICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxvYXQ0eDQgbSwgZmxvYXQ0
eDQgbilcbiIKLSAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAiICAgIHJldHVy
biBtWzBdWzBdID09IG5bMF1bMF0gJiYgbVswXVsxXSA9PSBuWzBdWzFdICYmIG1bMF1bMl0gPT0g
blswXVsyXSAmJiBtWzBdWzNdID09IG5bMF1bM10gJiZcbiIKLSAgICAgICAgICAgICAgICIgICAg
ICAgICAgIG1bMV1bMF0gPT0gblsxXVswXSAmJiBtWzFdWzFdID09IG5bMV1bMV0gJiYgbVsxXVsy
XSA9PSBuWzFdWzJdICYmIG1bMV1bM10gPT0gblsxXVszXSAmJlxuIgotICAgICAgICAgICAgICAg
IiAgICAgICAgICAgbVsyXVswXSA9PSBuWzJdWzBdICYmIG1bMl1bMV0gPT0gblsyXVsxXSAmJiBt
WzJdWzJdID09IG5bMl1bMl0gJiYgbVsyXVszXSA9PSBuWzJdWzNdICYmXG4iCi0gICAgICAgICAg
ICAgICAiICAgICAgICAgICBtWzNdWzBdID09IG5bM11bMF0gJiYgbVszXVsxXSA9PSBuWzNdWzFd
ICYmIG1bM11bMl0gPT0gblszXVsyXSAmJiBtWzNdWzNdID09IG5bM11bM107XG4iCi0gICAgICAg
ICAgICAgICAifVxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNFcXVhbFZlYzIpCi0gICAgewot
ICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxvYXQyIHYsIGZsb2F0MiB1KVxuIgotICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYg
di55ID09IHUueTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iOwotICAgIH0KLQotICAgIGlmICht
VXNlc0VxdWFsVmVjMykKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChmbG9hdDMg
diwgZmxvYXQzIHUpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdi54ID09IHUueCAmJiB2LnkgPT0gdS55ICYmIHYueiA9PSB1Lno7XG4iCi0gICAg
ICAgICAgICAgICAifVxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNFcXVhbFZlYzQpCi0gICAg
ewotICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoZmxvYXQ0IHYsIGZsb2F0NCB1KVxuIgotICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1Lngg
JiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56ICYmIHYudyA9PSB1Lnc7XG4iCi0gICAgICAgICAg
ICAgICAifVxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNFcXVhbElWZWMyKQotICAgIHsKLSAg
ICAgICAgb3V0IDw8ICJib29sIGVxdWFsKGludDIgdiwgaW50MiB1KVxuIgotICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09
IHUueTtcbiIKLSAgICAgICAgICAgICAgICJ9XG4iOwotICAgIH0KLQotICAgIGlmIChtVXNlc0Vx
dWFsSVZlYzMpCi0gICAgewotICAgICAgICBvdXQgPDwgImJvb2wgZXF1YWwoaW50MyB2LCBpbnQz
IHUpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
di54ID09IHUueCAmJiB2LnkgPT0gdS55ICYmIHYueiA9PSB1Lno7XG4iCi0gICAgICAgICAgICAg
ICAifVxuIjsKLSAgICB9Ci0KLSAgICBpZiAobVVzZXNFcXVhbElWZWM0KQotICAgIHsKLSAgICAg
ICAgb3V0IDw8ICJib29sIGVxdWFsKGludDQgdiwgaW50NCB1KVxuIgotICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUu
eSAmJiB2LnogPT0gdS56ICYmIHYudyA9PSB1Lnc7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsK
LSAgICB9Ci0KLSAgICBpZiAobVVzZXNFcXVhbEJWZWMyKQotICAgIHsKLSAgICAgICAgb3V0IDw8
ICJib29sIGVxdWFsKGJvb2wyIHYsIGJvb2wyIHUpXG4iCi0gICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdi54ID09IHUueCAmJiB2LnkgPT0gdS55O1xuIgot
ICAgICAgICAgICAgICAgIn1cbiI7Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRXF1YWxCVmVjMykK
LSAgICB7Ci0gICAgICAgIG91dCA8PCAiYm9vbCBlcXVhbChib29sMyB2LCBib29sMyB1KVxuIgot
ICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1
LnggJiYgdi55ID09IHUueSAmJiB2LnogPT0gdS56O1xuIgotICAgICAgICAgICAgICAgIn1cbiI7
Ci0gICAgfQotCi0gICAgaWYgKG1Vc2VzRXF1YWxCVmVjNCkKLSAgICB7Ci0gICAgICAgIG91dCA8
PCAiYm9vbCBlcXVhbChib29sNCB2LCBib29sNCB1KVxuIgotICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHYueCA9PSB1LnggJiYgdi55ID09IHUueSAmJiB2
LnogPT0gdS56ICYmIHYudyA9PSB1Lnc7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLSAgICB9
Ci0KLSAgICBpZiAobVVzZXNBdGFuMikKLSAgICB7Ci0gICAgICAgIG91dCA8PCAiZmxvYXQgYXRh
bnl4KGZsb2F0IHksIGZsb2F0IHgpXG4iCi0gICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgIiAgICBpZih4ID09IDAgJiYgeSA9PSAwKSB4ID0gMTtcbiIgICAvLyBBdm9pZCBwcm9k
dWNpbmcgYSBOYU4KLSAgICAgICAgICAgICAgICIgICAgcmV0dXJuIGF0YW4yKHksIHgpO1xuIgot
ICAgICAgICAgICAgICAgIn1cbiI7Ci0gICAgfQotfQotCi12b2lkIE91dHB1dEhMU0w6OnZpc2l0
U3ltYm9sKFRJbnRlcm1TeW1ib2wgKm5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bUJvZHk7Ci0KLSAgICBUU3RyaW5nIG5hbWUgPSBub2RlLT5nZXRTeW1ib2woKTsKLQotICAgIGlm
IChuYW1lID09ICJnbF9GcmFnQ29sb3IiKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJnbF9Db2xv
clswXSI7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdEYXRhIikKLSAgICB7
Ci0gICAgICAgIG91dCA8PCAiZ2xfQ29sb3IiOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09
ICJnbF9EZXB0aFJhbmdlIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7
Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9G
cmFnQ29vcmQiKQotICAgIHsKLSAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOwotICAgICAg
ICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29y
ZCIpCi0gICAgewotICAgICAgICBtVXNlc1BvaW50Q29vcmQgPSB0cnVlOwotICAgICAgICBvdXQg
PDwgbmFtZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQot
ICAgIHsKLSAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBu
YW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludFNpemUiKQotICAgIHsK
LSAgICAgICAgbVVzZXNQb2ludFNpemUgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2Rl
LT5nZXRRdWFsaWZpZXIoKTsKLQotICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1SZWZlcmVuY2VkVW5pZm9ybXMuaW5zZXJ0KG5hbWUu
Y19zdHIoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUF0
dHJpYnV0ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmlu
c2VydChuYW1lLmNfc3RyKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1YWxpZmll
ciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0
IHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFu
dFZhcnlpbmdJbikKLSAgICAgICAgewotICAgICAgICAgICAgbVJlZmVyZW5jZWRWYXJ5aW5ncy5p
bnNlcnQobmFtZS5jX3N0cigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dCA8PCBkZWNvcmF0
ZShuYW1lKTsKLSAgICB9Ci19Ci0KLWJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bUJvZHk7Ci0KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCi0gICAgewotICAgICAgY2FzZSBF
T3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID0g
IiwgIikiKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiAgICAg
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICIgPSAiLCAiIik7ICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BBZGRBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIigiLCAiICs9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAi
IC09ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BNdWxBc3NpZ246ICAg
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjogb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiICo9ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BWZWN0b3JUaW1l
c01hdHJpeEFzc2lnbjoKLSAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBvdXQgPDwgIigiOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHZp
c2l0ID09IEluVmlzaXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiID0gbXVsKCI7
Ci0gICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAg
ICAgb3V0IDw8ICIsIHRyYW5zcG9zZSgiOyAgIAotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIpKSkiOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKLSAgICAgICAgaWYg
KHZpc2l0ID09IFByZVZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIigiOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG91dCA8PCAiID0gbXVsKCI7Ci0gICAgICAgICAgICBub2RlLT5nZXRMZWZ0
KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgb3V0IDw8ICIsICI7ICAgCi0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIikpIjsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
RU9wSW5kZXhJbmRpcmVjdDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIs
ICJdIik7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1
Y3Q6Ci0gICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXQgPDwgIi4iICsgbm9kZS0+Z2V0VHlwZSgpLmdldEZpZWxkTmFtZSgpOwotCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcFZlY3RvclN3aXp6bGU6Ci0gICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBvdXQgPDwgIi4iOwotCi0gICAgICAgICAgICBUSW50ZXJtQWdncmVn
YXRlICpzd2l6emxlID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLQotICAg
ICAgICAgICAgaWYgKHN3aXp6bGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IHN3aXp6bGUtPmdldFNlcXVlbmNlKCk7Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2Uu
YmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICplbGVtZW50ID0gKCpz
aXQpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoZWxl
bWVudCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGkgPSBlbGVtZW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdLmdldElDb25zdCgpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IG91dCA8PCAieCI7IGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBvdXQgPDwgInkiOyBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRnVs
bHkgcHJvY2Vzc2VkCi0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEFk
ZDogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKyAiLCAiKSIpOyBi
cmVhazsKLSAgICAgIGNhc2UgRU9wU3ViOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoIiwgIiAtICIsICIpIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BNdWw6ICAgICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiICogIiwgIikiKTsgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcERpdjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIg
LyAiLCAiKSIpOyBicmVhazsKLSAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAgICBjYXNlIEVPcE5v
dEVxdWFsOgotICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgpLT5pc1NjYWxhcigpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BFcXVhbCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPT0gIiwg
IikiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIikiKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRMZWZ0KCkt
PmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1YWwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICIoIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiEoIjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgY29uc3QgVFR5cGVMaXN0ICpmaWVsZHMgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5
cGUoKS5nZXRTdHJ1Y3QoKTsKLQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
aWVsZHMtPnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0
IFRUeXBlICpmaWVsZFR5cGUgPSAoKmZpZWxkcylbaV0udHlwZTsKLQotICAgICAgICAgICAgICAg
IG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICIuIiArIGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCkgKyAiID09ICI7Ci0gICAgICAgICAgICAg
ICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICIuIiArIGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoaSA8IGZpZWxkcy0+c2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiICYmICI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBvdXQgPDwgIikiOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0TGVmdCgpLT5pc01hdHJpeCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNFcXVhbE1hdDIgPSB0cnVlOyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMzogbVVzZXNFcXVhbE1hdDMgPSB0cnVlOyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgNDogbVVzZXNFcXVhbE1hdDQgPSB0cnVlOyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
TGVmdCgpLT5pc1ZlY3RvcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRCYXNpY1R5cGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNFcXVhbFZlYzIgPSB0cnVl
OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG1Vc2VzRXF1YWxWZWMzID0g
dHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBtVXNlc0VxdWFsVmVj
NCA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5nZXRMZWZ0KCktPmdldE5vbWluYWxTaXplKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1Vc2VzRXF1YWxJVmVjMiA9IHRy
dWU7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogbVVzZXNFcXVhbElWZWMz
ID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBtVXNlc0VxdWFs
SVZlYzQgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNFcXVhbEJWZWMy
ID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVXNlc0VxdWFs
QlZlYzMgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG1Vc2Vz
RXF1YWxCVmVjNCA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wRXF1YWwpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImVxdWFsKCIs
ICIsICIsICIpIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiFlcXVhbCgiLCAiLCAi
LCAiKSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BMZXNzVGhhbjogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIDwg
IiwgIikiKTsgICBicmVhazsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiA+ICIsICIpIik7ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cExlc3NUaGFuRXF1YWw6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPD0gIiwgIiki
KTsgIGJyZWFrOwotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigiLCAiID49ICIsICIpIik7ICBicmVhazsKLSAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNTY2FsYXI6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIsICIpIik7ICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOiBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiKCIsICIgKiAiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01h
dHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgIm11bCgiLCAiLCB0cmFuc3Bvc2UoIiwgIikpIik7
IGJyZWFrOwotICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3Rvcjogb3V0cHV0VHJpcGxldCh2
aXNpdCwgIm11bCh0cmFuc3Bvc2UoIiwgIiksICIsICIpIik7IGJyZWFrOwotICAgICAgY2FzZSBF
T3BNYXRyaXhUaW1lc01hdHJpeDogb3V0cHV0VHJpcGxldCh2aXNpdCwgInRyYW5zcG9zZShtdWwo
dHJhbnNwb3NlKCIsICIpLCB0cmFuc3Bvc2UoIiwgIikpKSIpOyBicmVhazsKLSAgICAgIGNhc2Ug
RU9wTG9naWNhbE9yOiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiB8fCAiLCAi
KSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6Ci0gICAgICAgIG1Vc2VzWG9y
ID0gdHJ1ZTsKLSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInhvcigiLCAiLCAiLCAiKSIp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiAmJiAiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE91
dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSkKLXsK
LSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0
T3AoKSkKLSAgICB7Ci0gICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICIoLSIsICIiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3Rvckxv
Z2ljYWxOb3Q6IG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIsICIiLCAiKSIpOyAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoISIs
ICIiLCAiKSIpOyAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6ICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICIrKykiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFBv
c3REZWNyZW1lbnQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiIsICItLSkiKTsgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICIoKysiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcENvbnZJbnRUb0Jvb2w6Ci0gICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKLSAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgp
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
Ym9vbCgiLCAiIiwgIikiKTsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImJvb2wyKCIsICIiLCAiKSIpOyBicmVhazsKLSAgICAgICAgICBjYXNlIDM6
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJib29sMygiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYm9vbDQoIiwgIiIsICIpIik7
IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKLSAgICAgIGNhc2Ug
RU9wQ29udkludFRvRmxvYXQ6Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5n
ZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgMTog
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZsb2F0KCIsICIiLCAiKSIpOyAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQyKCIsICIiLCAiKSIp
OyBicmVhazsKLSAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmbG9h
dDMoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImZsb2F0NCgiLCAiIiwgIikiKTsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9w
Q29udkZsb2F0VG9JbnQ6Ci0gICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6Ci0gICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludCgi
LCAiIiwgIikiKTsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgImludDIoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGNhc2UgMzogICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImludDMoIiwgIiIsICIpIik7IGJyZWFrOwotICAgICAgICAgIGNh
c2UgNDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImludDQoIiwgIiIsICIpIik7IGJyZWFrOwot
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJyYWRpYW5zKCIsICIiLCAiKSIpOyAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BEZWdyZWVzOiAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGVncmVlcygiLCAiIiwgIikiKTsgICBicmVh
azsKLSAgICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
InNpbigiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENvczogICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJjb3MoIiwgIiIsICIpIik7ICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
dGFuKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQXNpbjogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFzaW4oIiwgIiIsICIpIik7ICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJh
Y29zKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYXRhbigiLCAiIiwgIikiKTsgICAgICBicmVhazsK
LSAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImV4
cCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExvZzogICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsb2coIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BFeHAyOiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZXhw
MigiLCAiIiwgIikiKTsgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTG9nMjogICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxvZzIoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJzcXJ0
KCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDogICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicnNxcnQoIiwgIiIsICIpIik7ICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFicygi
LCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJzaWduKCIsICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBFT3BGbG9vcjogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvb3Io
IiwgIiIsICIpIik7ICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ2VpbDogICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgImNlaWwoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmcmFjKCIs
ICIiLCAiKSIpOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAibGVuZ3RoKCIsICIiLCAiKSIpOyAgICBicmVhazsKLSAgICAg
IGNhc2UgRU9wTm9ybWFsaXplOiAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm5vcm1hbGl6
ZSgiLCAiIiwgIikiKTsgYnJlYWs7Ci0vLyAgICBjYXNlIEVPcERQZHg6ICAgICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwotLy8gICAg
Y2FzZSBFT3BEUGR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR5KCIsICIi
LCAiKSIpOyAgICAgICBicmVhazsKLS8vICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAgICAgICAK
LSAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFu
eSgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEFsbDogICAgICAgICAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSAqbm9kZSkKLXsKLSAgICBFU2hMYW5ndWFnZSBsYW5ndWFnZSA9IG1Db250ZXh0
Lmxhbmd1YWdlOwotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgc3dpdGNo
IChub2RlLT5nZXRPcCgpKQotICAgIHsKLSAgICAgIGNhc2UgRU9wU2VxdWVuY2U6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChtSW5zaWRlRnVuY3Rpb24pCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJ7XG4iOwotCi0gICAgICAgICAgICAgICAgbVNjb3BlRGVwdGgr
KzsKLQotICAgICAgICAgICAgICAgIGlmIChtU2NvcGVCcmFja2V0LnNpemUoKSA8IG1TY29wZURl
cHRoKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVNjb3BlQnJhY2tl
dC5wdXNoX2JhY2soMCk7ICAgLy8gTmV3IHNjb3BlIGxldmVsCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1TY29wZUJyYWNrZXRbbVNjb3BlRGVwdGggLSAxXSsrOyAgIC8vIE5ldyBzY29wZSBhdCBl
eGlzdGluZyBsZXZlbAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IG5vZGUtPmdldFNlcXVl
bmNlKCkuYmVnaW4oKTsgc2l0ICE9IG5vZGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHNpdCsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZVN0YXRlbWVudCgqc2l0
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1VbmZvbGRTZWxlY3Qt
PnRyYXZlcnNlKCpzaXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICgq
c2l0KS0+dHJhdmVyc2UodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBvdXQgPDwgIjtcbiI7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtSW5zaWRlRnVuY3Rpb24pCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJ9XG4iOwotCi0gICAgICAgICAgICAgICAg
bVNjb3BlRGVwdGgtLTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICBjYXNlIEVPcERlY2xhcmF0aW9uOgotICAgICAgICBpZiAodmlz
aXQgPT0gUHJlVmlzaXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAm
c2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICAgICAgVEludGVybVR5cGVk
ICp2YXJpYWJsZSA9IHNlcXVlbmNlWzBdLT5nZXRBc1R5cGVkKCk7Ci0gICAgICAgICAgICBib29s
IHZpc2l0ID0gdHJ1ZTsKLQotICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmICh2YXJpYWJsZS0+
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVGVtcG9yYXJ5IHx8IHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFHbG9iYWwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgYWRkQ29uc3RydWN0b3IodmFyaWFibGUtPmdldFR5cGUoKSwgc2NvcGVkU3Ry
dWN0KHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksIE5VTEwpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmdldEFzU3ltYm9sTm9k
ZSgpIHx8IHZhcmlhYmxlLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkgIT0gIiIpICAg
Ly8gVmFyaWFibGUgZGVjbGFyYXRpb24KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghbUluc2lkZUZ1bmN0aW9uKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyAiOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHR5cGVTdHJpbmcodmFyaWFibGUtPmdl
dFR5cGUoKSkgKyAiICI7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVu
Y2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQo
KTsgc2l0KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9ICgqc2l0KS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJyYXlTdHJpbmcoc3ltYm9sLT5n
ZXRUeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiID0gIiArIGlu
aXRpYWxpemVyKHZhcmlhYmxlLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc2l0KS0+dHJhdmVyc2UodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
aXNpdCAmJiB0aGlzLT5pblZpc2l0KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgqc2l0ICE9IHNlcXVlbmNlLmJhY2soKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZpc2l0ID0gdGhpcy0+dmlzaXRBZ2dyZWdhdGUoSW5WaXNpdCwgbm9kZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2l0ICYmIHRoaXMtPnBv
c3RWaXNpdCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy0+dmlzaXRBZ2dyZWdhdGUoUG9zdFZpc2l0LCBub2RlKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJs
ZS0+Z2V0QXNTeW1ib2xOb2RlKCkgJiYgdmFyaWFibGUtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRT
eW1ib2woKSA9PSAiIikgICAvLyBUeXBlIChzdHJ1Y3QpIGRlY2xhcmF0aW9uCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IGFkZGVkIHRvIGNvbnN0cnVj
dG9yIG1hcAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRU9wUHJvdG90eXBlOgotICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlz
aXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5
cGUoKSkgPDwgIiAiIDw8IGRlY29yYXRlKG5vZGUtPmdldE5hbWUoKSkgPDwgIigiOwotCi0gICAg
ICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7
Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNp
emUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCA9IGFyZ3VtZW50c1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoc3ltYm9sKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
b3V0IDw8IGFyZ3VtZW50U3RyaW5nKHN5bWJvbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXQgPDwgIik7XG4iOwotCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcENv
bW1hOiAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiLCAiLCAiIik7ICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BGdW5jdGlvbjoKLSAgICAgICAgewotICAg
ICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUobm9kZS0+Z2V0
TmFtZSgpKTsKLQotICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCB0eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUoKSkg
PDwgIiAiOwotCi0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIm1haW4iKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF9tYWluKCI7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAiKCI7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IG5v
ZGUtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmd1
bWVudHMgPSBzZXF1ZW5jZVswXS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKLQot
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNp
emUoKTsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVEludGVy
bVN5bWJvbCAqc3ltYm9sID0gYXJndW1lbnRzW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgYXJndW1lbnRTdHJpbmcoc3ltYm9sKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBhcmd1bWVudHMuc2l6ZSgpIC0gMSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiwgIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgc2VxdWVuY2UuZXJhc2Uoc2VxdWVuY2UuYmVnaW4oKSk7Ci0K
LSAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biI7Ci0KLSAgICAgICAgICAgICAgICBtSW5zaWRlRnVuY3Rpb24gPSB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAifVxuIjsKLQotICAgICAgICAgICAgICAgIG1J
bnNpZGVGdW5jdGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkp
OwotCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzVXNlckRlZmluZWQoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKSA8PCAi
KCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUy
RCgiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5hbWUgPT0gInRleHR1cmUyRFByb2oiKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNl
c1RleHR1cmUyRFByb2ogPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0g
MykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmUyRFByb2pfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1
cmVDdWJlIikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVf
YmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiZ2xfdGV4dHVyZUN1YmUoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRMb2QiKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
UmVxdWlyZXMgdGhlIHZlcnRleCBzaGFkZXIgdGV4dHVyZSBzYW1wbGluZyBleHRlbnNpb24KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlMkRQcm9qTG9kIikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIFJlcXVpcmVzIHRoZSB2ZXJ0ZXggc2hh
ZGVyIHRleHR1cmUgc2FtcGxpbmcgZXh0ZW5zaW9uCi0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmVMb2QiKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gUmVxdWlyZXMgdGhlIHZlcnRleCBzaGFkZXIgdGV4dHVyZSBzYW1wbGluZyBleHRl
bnNpb24KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIikiOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BQYXJhbWV0ZXJzOiAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIsICIsICIpXG57XG4iKTsgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgotICAgICAgICBhZGRDb25zdHJ1Y3Rv
cihub2RlLT5nZXRUeXBlKCksICJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidmVjMSgiLCAiIiwgIikiKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5v
ZGUtPmdldFR5cGUoKSwgInZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJ2ZWMyKCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2Rl
LT5nZXRUeXBlKCksICJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAidmVjMygiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+
Z2V0VHlwZSgpLCAidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgInZlYzQoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdl
dFR5cGUoKSwgImJ2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiYnZlYzEoIiwgIiIsICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0
VHlwZSgpLCAiYnZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJidmVjMigiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdl
dFR5cGUoKSwgImJ2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiYnZlYzMoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5n
ZXRUeXBlKCksICJidmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImJ2ZWM0KCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdl
dFR5cGUoKSwgIml2ZWMxIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiaXZlYzEoIiwgIiIsICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0
VHlwZSgpLCAiaXZlYzIiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJpdmVjMigiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6Ci0gICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdl
dFR5cGUoKSwgIml2ZWMzIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiaXZlYzMoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5n
ZXRUeXBlKCksICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5n
ZXRUeXBlKCksICJtYXQyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKLSAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0
VHlwZSgpLCAibWF0MyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIm1hdDMoIiwgIiwgIiwgIikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVPcENvbnN0cnVjdE1hdDQ6IAotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRU
eXBlKCksICJtYXQ0IiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOwotICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAibWF0NCgiLCAiLCAiLCAiKSIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgRU9wQ29uc3RydWN0U3RydWN0OgotICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRU
eXBlKCksIHNjb3BlZFN0cnVjdChub2RlLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSksICZub2Rl
LT5nZXRTZXF1ZW5jZSgpKTsKLSAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgc3RydWN0TG9v
a3VwKG5vZGUtPmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpKSArICJfY3RvcigiLCAiLCAiLCAiKSIp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiIDwgIiwgIikiKTsgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgPiAiLCAiKSIpOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcExlc3NU
aGFuRXF1YWw6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA8PSAiLCAiKSIpOyAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0cHV0
VHJpcGxldCh2aXNpdCwgIigiLCAiID49ICIsICIpIik7ICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFT3BWZWN0b3JFcXVhbDogICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIs
ICIgPT0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcFZlY3Rv
ck5vdEVxdWFsOiAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAhPSAiLCAiKSIpOyAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wTW9kOgotICAgICAgICB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9t
aW5hbFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0aGUgZmlyc3QgYXJndW1l
bnQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAxOiBtVXNlc01vZDEgPSB0cnVl
OyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAyOiBtVXNlc01vZDIgPSB0cnVlOyBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSAzOiBtVXNlc01vZDMgPSB0cnVlOyBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSA0OiBtVXNlc01vZDQgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgIm1vZCgiLCAiLCAiLCAiKSIpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFT3BQb3c6ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAicG93KCIsICIsICIsICIpIik7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVP
cEF0YW46Ci0gICAgICAgIEFTU0VSVChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKTsg
ICAvLyBhdGFuKHgpIGlzIGEgdW5hcnkgb3BlcmF0b3IKLSAgICAgICAgbVVzZXNBdGFuMiA9IHRy
dWU7Ci0gICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhdGFueXgoIiwgIiwgIiwgIikiKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcE1pbjogICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJtaW4oIiwgIiwgIiwgIikiKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFT3BNYXg6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF4KCIsICIsICIsICIp
Iik7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ2xhbXA6ICAgICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImNsYW1wKCIsICIsICIsICIpIik7ICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcE1peDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsZXJwKCIsICIs
ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BTdGVwOiAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAic3RlcCgiLCAiLCAiLCAiKSIpOyAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgRU9wU21vb3RoU3RlcDogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInNtb290
aHN0ZXAoIiwgIiwgIiwgIikiKTsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcERpc3RhbmNlOiAg
ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJkaXN0YW5jZSgiLCAiLCAiLCAiKSIpOyAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFT3BEb3Q6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
ZG90KCIsICIsICIsICIpIik7ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ3Jvc3M6
ICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImNyb3NzKCIsICIsICIsICIpIik7ICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEZhY2VGb3J3YXJkOgotICAgICAgICB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9t
aW5hbFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0aGUgZmlyc3QgYXJndW1l
bnQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgMTogbVVzZXNGYWNlZm9yd2FyZDEg
PSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjogbVVzZXNGYWNlZm9yd2FyZDIgPSB0
cnVlOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzogbVVzZXNGYWNlZm9yd2FyZDMgPSB0cnVl
OyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDogbVVzZXNGYWNlZm9yd2FyZDQgPSB0cnVlOyBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmYWNlZm9y
d2FyZCgiLCAiLCAiLCAiKSIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFT3BSZWZsZWN0OiAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicmVmbGVjdCgiLCAiLCAi
LCAiKSIpOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wUmVmcmFjdDogICAgICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgInJlZnJhY3QoIiwgIiwgIiwgIikiKTsgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcE11bDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAqICIs
ICIpIik7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPdXRwdXRITFNMOjp2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKLXsKLSAgICBUSW5m
b1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAgIGlmIChub2RlLT51c2VzVGVybmFyeU9wZXJh
dG9yKCkpCi0gICAgewotICAgICAgICBvdXQgPDwgInQiIDw8IG1VbmZvbGRTZWxlY3QtPmdldFRl
bXBvcmFyeUluZGV4KCk7Ci0gICAgfQotICAgIGVsc2UgIC8vIGlmL2Vsc2Ugc3RhdGVtZW50Ci0g
ICAgewotICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZShub2RlLT5nZXRDb25kaXRpb24o
KSk7Ci0KLSAgICAgICAgb3V0IDw8ICJpZigiOwotCi0gICAgICAgIG5vZGUtPmdldENvbmRpdGlv
bigpLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAgICBvdXQgPDwgIilcbiIKLSAgICAgICAgICAg
ICAgICJ7XG4iOwotCi0gICAgICAgIGlmIChub2RlLT5nZXRUcnVlQmxvY2soKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgb3V0IDw8ICI7fVxuIjsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0
RmFsc2VCbG9jaygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgImVsc2VcbiIKLSAg
ICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgICAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9j
aygpLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAgICAgICAgb3V0IDw8ICI7fVxuIjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBPdXRwdXRITFNMOjp2
aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUpCi17Ci0gICAgd3Jp
dGVDb25zdGFudFVuaW9uKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKSk7Ci19Ci0KLWJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50
ZXJtTG9vcCAqbm9kZSkKLXsKLSAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBUSW5mb1NpbmtCYXNlICZv
dXQgPSBtQm9keTsKLQotICAgIGlmICghbm9kZS0+dGVzdEZpcnN0KCkpCi0gICAgewotICAgICAg
ICBvdXQgPDwgImRvXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0SW5pdCgpKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0VGVzdCgpKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldFRlcm1pbmFsKCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0IDw8ICJmb3IoIjsKLSAgICAgICAgCi0gICAgICAg
IGlmIChub2RlLT5nZXRJbml0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdldElu
aXQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQgPDwgIjsgIjsK
LQotICAgICAgICBpZiAobm9kZS0+Z2V0VGVzdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBu
b2RlLT5nZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0
IDw8ICI7ICI7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG5vZGUtPmdldFRlcm1pbmFsKCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgb3V0IDw8ICIpXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICB9
Ci0KLSAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQotICAgIHsKLSAgICAgICAgbm9kZS0+Z2V0Qm9k
eSgpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9Ci0KLSAgICBvdXQgPDwgIn1cbiI7Ci0KLSAgICBp
ZiAoIW5vZGUtPnRlc3RGaXJzdCgpKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJ3aGlsZShcbiI7
Ci0KLSAgICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKLQotICAgICAgICBv
dXQgPDwgIikiOwotICAgIH0KLQotICAgIG91dCA8PCAiO1xuIjsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVy
bUJyYW5jaCAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKLQotICAg
IHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCi0gICAgewotICAgICAgY2FzZSBFT3BLaWxsOiAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRpc2NhcmQiLCAiIiwgIiIpOyAgYnJlYWs7Ci0gICAg
ICBjYXNlIEVPcEJyZWFrOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiYnJlYWsiLCAiIiwgIiIp
OyAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wQ29udGludWU6IG91dHB1dFRyaXBsZXQodmlzaXQs
ICJjb250aW51ZSIsICIiLCAiIik7IGJyZWFrOwotICAgICAgY2FzZSBFT3BSZXR1cm46Ci0gICAg
ICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG5v
ZGUtPmdldEV4cHJlc3Npb24oKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgInJldHVybiAiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAicmV0dXJuO1xuIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG91dCA8PCAiO1xuIjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgT3V0cHV0SExTTDo6aXNTaW5nbGVTdGF0ZW1lbnQoVEludGVybU5vZGUgKm5v
ZGUpCi17Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gbm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsKLQotICAgIGlmIChhZ2dyZWdhdGUpCi0gICAgewotICAgICAgICBpZiAoYWdncmVn
YXRlLT5nZXRPcCgpID09IEVPcFNlcXVlbmNlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gYWdncmVnYXRlLT5nZXRTZXF1
ZW5jZSgpLmJlZ2luKCk7IHNpdCAhPSBhZ2dyZWdhdGUtPmdldFNlcXVlbmNlKCkuZW5kKCk7IHNp
dCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghaXNTaW5nbGVTdGF0ZW1l
bnQoKnNpdCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0v
LyBIYW5kbGUgbG9vcHMgd2l0aCBtb3JlIHRoYW4gMjU1IGl0ZXJhdGlvbnMgKHVuc3VwcG9ydGVk
IGJ5IEQzRDkpIGJ5IHNwbGl0dGluZyB0aGVtCi1ib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vz
c2l2ZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCi17Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bUJvZHk7Ci0KLSAgICAvLyBQYXJzZSBsb29wcyBvZiB0aGUgZm9ybToKLSAgICAvLyBmb3IoaW50
IGluZGV4ID0gaW5pdGlhbDsgaW5kZXggW2NvbXBhcmF0b3JdIGxpbWl0OyBpbmRleCArPSBpbmNy
ZW1lbnQpCi0gICAgVEludGVybVN5bWJvbCAqaW5kZXggPSBOVUxMOwotICAgIFRPcGVyYXRvciBj
b21wYXJhdG9yID0gRU9wTnVsbDsKLSAgICBpbnQgaW5pdGlhbCA9IDA7Ci0gICAgaW50IGxpbWl0
ID0gMDsKLSAgICBpbnQgaW5jcmVtZW50ID0gMDsKLQotICAgIC8vIFBhcnNlIGluZGV4IG5hbWUg
YW5kIGludGlhbCB2YWx1ZQotICAgIGlmIChub2RlLT5nZXRJbml0KCkpCi0gICAgewotICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlICppbml0ID0gbm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0
ZSgpOwotCi0gICAgICAgIGlmIChpbml0KQotICAgICAgICB7Ci0gICAgICAgICAgICBUSW50ZXJt
U2VxdWVuY2UgJnNlcXVlbmNlID0gaW5pdC0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgICAgIFRJ
bnRlcm1UeXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5jZVswXS0+Z2V0QXNUeXBlZCgpOwotCi0gICAg
ICAgICAgICBpZiAodmFyaWFibGUgJiYgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09IEV2cVRl
bXBvcmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICph
c3NpZ24gPSB2YXJpYWJsZS0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoYXNzaWduLT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBhc3NpZ24tPmdldExl
ZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Db25z
dGFudFVuaW9uICpjb25zdGFudCA9IGFzc2lnbi0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVu
aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBjb25zdGFudCkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkg
PT0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleCA9IHN5bWJvbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFs
ID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQYXJzZSBj
b21wYXJhdG9yIGFuZCBsaW1pdCB2YWx1ZQotICAgIGlmIChpbmRleCAhPSBOVUxMICYmIG5vZGUt
PmdldFRlc3QoKSkKLSAgICB7Ci0gICAgICAgIFRJbnRlcm1CaW5hcnkgKnRlc3QgPSBub2RlLT5n
ZXRUZXN0KCktPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHRlc3Qg
JiYgdGVzdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0SWQoKSA9PSBpbmRleC0+
Z2V0SWQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmNv
bnN0YW50ID0gdGVzdC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICAg
ICAgICAgIGlmIChjb25zdGFudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5h
bFNpemUoKSA9PSAxKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29t
cGFyYXRvciA9IHRlc3QtPmdldE9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gY29u
c3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUGFyc2Ug
aW5jcmVtZW50Ci0gICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgY29tcGFyYXRvciAhPSBFT3BOdWxs
ICYmIG5vZGUtPmdldFRlcm1pbmFsKCkpCi0gICAgewotICAgICAgICBUSW50ZXJtQmluYXJ5ICpi
aW5hcnlUZXJtaW5hbCA9IG5vZGUtPmdldFRlcm1pbmFsKCktPmdldEFzQmluYXJ5Tm9kZSgpOwot
ICAgICAgICBUSW50ZXJtVW5hcnkgKnVuYXJ5VGVybWluYWwgPSBub2RlLT5nZXRUZXJtaW5hbCgp
LT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGJpbmFyeVRlcm1pbmFs
KQotICAgICAgICB7Ci0gICAgICAgICAgICBUT3BlcmF0b3Igb3AgPSBiaW5hcnlUZXJtaW5hbC0+
Z2V0T3AoKTsKLSAgICAgICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpjb25zdGFudCA9IGJp
bmFyeVRlcm1pbmFsLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQotICAgICAg
ICAgICAgaWYgKGNvbnN0YW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChj
b25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFs
U2l6ZSgpID09IDEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQg
dmFsdWUgPSBjb25zdGFudC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsK
LQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246IGluY3JlbWVudCA9IHZh
bHVlOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246IGlu
Y3JlbWVudCA9IC12YWx1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHVuYXJ5VGVybWlu
YWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRPcGVyYXRvciBvcCA9IHVuYXJ5VGVybWluYWwt
PmdldE9wKCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAob3ApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogaW5jcmVtZW50ID0gMTsgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6IGluY3JlbWVudCA9IC0xOyBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6ICBpbmNyZW1lbnQgPSAxOyAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgaW5jcmVtZW50ID0g
LTE7IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTklNUExFTUVOVEVEKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBj
b21wYXJhdG9yICE9IEVPcE51bGwgJiYgaW5jcmVtZW50ICE9IDApCi0gICAgewotICAgICAgICBp
ZiAoY29tcGFyYXRvciA9PSBFT3BMZXNzVGhhbkVxdWFsKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb21wYXJhdG9yID0gRU9wTGVzc1RoYW47Ci0gICAgICAgICAgICBsaW1pdCArPSAxOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbXBhcmF0b3IgPT0gRU9wTGVzc1RoYW4pCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCBpdGVyYXRpb25zID0gKGxpbWl0IC0gaW5pdGlhbCArIDEpIC8g
aW5jcmVtZW50OwotCi0gICAgICAgICAgICBpZiAoaXRlcmF0aW9ucyA8PSAyNTUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBhbiBleGNlc3Np
dmUgbG9vcAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAoaXRlcmF0aW9ucyA+
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJlbWFpbmRlciA9IChsaW1p
dCAtIGluaXRpYWwgKyAxKSAlIGluY3JlbWVudDsKLSAgICAgICAgICAgICAgICBpbnQgY2xhbXBl
ZExpbWl0ID0gaW5pdGlhbCArIGluY3JlbWVudCAqIHN0ZDo6bWluKDI1NSwgaXRlcmF0aW9ucykg
LSAxIC0gcmVtYWluZGVyOwotCi0gICAgICAgICAgICAgICAgLy8gZm9yKGludCBpbmRleCA9IGlu
aXRpYWw7IGluZGV4IDwgY2xhbXBlZExpbWl0OyBpbmRleCArPSBpbmNyZW1lbnQpCi0KLSAgICAg
ICAgICAgICAgICBvdXQgPDwgImZvcihpbnQgIjsKLSAgICAgICAgICAgICAgICBpbmRleC0+dHJh
dmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgPSAiOwotICAgICAgICAgICAg
ICAgIG91dCA8PCBpbml0aWFsOwotCi0gICAgICAgICAgICAgICAgb3V0IDw8ICI7ICI7Ci0gICAg
ICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAgICAgICAgIG91dCA8
PCAiIDwgIjsKLSAgICAgICAgICAgICAgICBvdXQgPDwgY2xhbXBlZExpbWl0OwotCi0gICAgICAg
ICAgICAgICAgb3V0IDw8ICI7ICI7Ci0gICAgICAgICAgICAgICAgaW5kZXgtPnRyYXZlcnNlKHRo
aXMpOwotICAgICAgICAgICAgICAgIG91dCA8PCAiICs9ICI7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8IGluY3JlbWVudDsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIilcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiI7Ci0KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0Qm9keSgp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBv
dXQgPDwgIn1cbiI7Ci0KLSAgICAgICAgICAgICAgICBpbml0aWFsICs9IDI1NSAqIGluY3JlbWVu
dDsKLSAgICAgICAgICAgICAgICBpdGVyYXRpb25zIC09IDI1NTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTklNUExF
TUVOVEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAgIC8vIE5vdCBoYW5kbGVkIGFz
IGFuIGV4Y2Vzc2l2ZSBsb29wCi19Ci0KLXZvaWQgT3V0cHV0SExTTDo6b3V0cHV0VHJpcGxldChW
aXNpdCB2aXNpdCwgY29uc3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0
cmluZywgY29uc3QgVFN0cmluZyAmcG9zdFN0cmluZykKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZv
dXQgPSBtQm9keTsKLQotICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKLSAgICB7Ci0gICAgICAg
IG91dCA8PCBwcmVTdHJpbmc7Ci0gICAgfQotICAgIGVsc2UgaWYgKHZpc2l0ID09IEluVmlzaXQp
Ci0gICAgewotICAgICAgICBvdXQgPDwgaW5TdHJpbmc7Ci0gICAgfQotICAgIGVsc2UgaWYgKHZp
c2l0ID09IFBvc3RWaXNpdCkKLSAgICB7Ci0gICAgICAgIG91dCA8PCBwb3N0U3RyaW5nOwotICAg
IH0KLX0KLQotVFN0cmluZyBPdXRwdXRITFNMOjphcmd1bWVudFN0cmluZyhjb25zdCBUSW50ZXJt
U3ltYm9sICpzeW1ib2wpCi17Ci0gICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBzeW1ib2wtPmdl
dFF1YWxpZmllcigpOwotICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gc3ltYm9sLT5nZXRUeXBlKCk7
Ci0gICAgVFN0cmluZyBuYW1lID0gc3ltYm9sLT5nZXRTeW1ib2woKTsKLQotICAgIGlmIChuYW1l
LmVtcHR5KCkpICAgLy8gSExTTCBkZW1hbmRzIG5hbWVkIGFyZ3VtZW50cywgYWxzbyBmb3IgcHJv
dG90eXBlcwotICAgIHsKLSAgICAgICAgbmFtZSA9ICJ4IiArIHN0cihtQXJndW1lbnRJbmRleCsr
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbmFtZSA9IGRlY29yYXRlKG5hbWUp
OwotICAgIH0KLQotICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiAr
IHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7Ci19Ci0K
LVRTdHJpbmcgT3V0cHV0SExTTDo6cXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVy
KQotewotICAgIHN3aXRjaChxdWFsaWZpZXIpCi0gICAgewotICAgICAgY2FzZSBFdnFJbjogICAg
ICAgICAgICByZXR1cm4gImluIjsKLSAgICAgIGNhc2UgRXZxT3V0OiAgICAgICAgICAgcmV0dXJu
ICJvdXQiOwotICAgICAgY2FzZSBFdnFJbk91dDogICAgICAgICByZXR1cm4gImlub3V0IjsKLSAg
ICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTogcmV0dXJuICJjb25zdCI7Ci0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiAiIjsKLX0KLQotVFN0cmluZyBP
dXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQotewotICAgIGlmICh0eXBl
LmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlLmdl
dFR5cGVOYW1lKCkgIT0gIiIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdHJ1Y3RM
b29rdXAodHlwZS5nZXRUeXBlTmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlICAgLy8g
TmFtZWxlc3Mgc3RydWN0dXJlLCBkZWZpbmUgaW4gcGxhY2UKLSAgICAgICAgewotICAgICAgICAg
ICAgY29uc3QgVFR5cGVMaXN0ICZmaWVsZHMgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKLQotICAgICAg
ICAgICAgVFN0cmluZyBzdHJpbmcgPSAic3RydWN0XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBUVHlwZSAmZmllbGQgPSAqZmllbGRzW2ldLnR5cGU7Ci0KLSAgICAgICAgICAgICAgICBzdHJp
bmcgKz0gIiAgICAiICsgdHlwZVN0cmluZyhmaWVsZCkgKyAiICIgKyBmaWVsZC5nZXRGaWVsZE5h
bWUoKSArIGFycmF5U3RyaW5nKGZpZWxkKSArICI7XG4iOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBzdHJpbmcgKz0gIn0gIjsKLQotICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgMjogcmV0dXJuICJmbG9hdDJ4MiI7Ci0gICAgICAgICAgY2FzZSAzOiByZXR1cm4gImZs
b2F0M3gzIjsKLSAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0eDQiOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5
cGUoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgY2FzZSAxOiByZXR1cm4gImZsb2F0IjsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4g
ImZsb2F0MiI7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJmbG9hdDMiOwotICAgICAg
ICAgICAgICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICBjYXNlIEVidEludDoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAiaW50IjsKLSAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gImludDIiOwotICAgICAgICAgICAgICBjYXNlIDM6
IHJldHVybiAiaW50MyI7Ci0gICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJpbnQ0IjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICBzd2l0Y2gg
KHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSAxOiByZXR1cm4gImJvb2wiOwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiAiYm9vbDIi
OwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAiYm9vbDMiOwotICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiAiYm9vbDQiOwotICAgICAgICAgICAgfQotICAgICAgICAgIGNhc2UgRWJ0
Vm9pZDoKLSAgICAgICAgICAgIHJldHVybiAidm9pZCI7Ci0gICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyMkQ6Ci0gICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7Ci0gICAgICAgICAgY2FzZSBF
YnRTYW1wbGVyQ3ViZToKLSAgICAgICAgICAgIHJldHVybiAic2FtcGxlckNVQkUiOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgcmV0dXJu
ICI8dW5rbm93biB0eXBlPiI7Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmco
Y29uc3QgVFR5cGUgJnR5cGUpCi17Ci0gICAgaWYgKCF0eXBlLmlzQXJyYXkoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gIlsiICsgc3RyKHR5cGUuZ2V0
QXJyYXlTaXplKCkpICsgIl0iOwotfQotCi1UU3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVy
KGNvbnN0IFRUeXBlICZ0eXBlKQotewotICAgIFRTdHJpbmcgc3RyaW5nOwotCi0gICAgZm9yIChp
bnQgY29tcG9uZW50ID0gMDsgY29tcG9uZW50IDwgdHlwZS5nZXRPYmplY3RTaXplKCk7IGNvbXBv
bmVudCsrKQotICAgIHsKLSAgICAgICAgc3RyaW5nICs9ICIwIjsKLQotICAgICAgICBpZiAoY29t
cG9uZW50IDwgdHlwZS5nZXRPYmplY3RTaXplKCkgLSAxKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzdHJpbmcgKz0gIiwgIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAieyIgKyBz
dHJpbmcgKyAifSI7Ci19Ci0KLXZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3Qg
VFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAq
cGFyYW1ldGVycykKLXsKLSAgICBpZiAobmFtZSA9PSAiIikKLSAgICB7Ci0gICAgICAgIHJldHVy
bjsgICAvLyBOYW1lbGVzcyBzdHJ1Y3R1cmVzIGRvbid0IGhhdmUgY29uc3RydWN0b3JzCi0gICAg
fQotCi0gICAgVFR5cGUgY3RvclR5cGUgPSB0eXBlOwotICAgIGN0b3JUeXBlLmNsZWFyQXJyYXlu
ZXNzKCk7Ci0gICAgY3RvclR5cGUuc2V0UHJlY2lzaW9uKEVicEhpZ2gpOwotICAgIGN0b3JUeXBl
LnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwotCi0gICAgVFN0cmluZyBjdG9yTmFtZSA9IHR5
cGUuZ2V0U3RydWN0KCkgPyBkZWNvcmF0ZShuYW1lKSA6IG5hbWU7Ci0KLSAgICB0eXBlZGVmIHN0
ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKLSAgICBQYXJhbWV0ZXJBcnJheSBjdG9y
UGFyYW1ldGVyczsKLQotICAgIGlmIChwYXJhbWV0ZXJzKQotICAgIHsKLSAgICAgICAgZm9yIChU
SW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIHBhcmFtZXRlciA9IHBhcmFtZXRlcnMtPmJl
Z2luKCk7IHBhcmFtZXRlciAhPSBwYXJhbWV0ZXJzLT5lbmQoKTsgcGFyYW1ldGVyKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGN0b3JQYXJhbWV0ZXJzLnB1c2hfYmFjaygoKnBhcmFtZXRlcikt
PmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlm
ICh0eXBlLmdldFN0cnVjdCgpKQotICAgIHsKLSAgICAgICAgbVN0cnVjdE5hbWVzLmluc2VydChk
ZWNvcmF0ZShuYW1lKSk7Ci0KLSAgICAgICAgVFN0cmluZyBzdHJ1Y3R1cmU7Ci0gICAgICAgIHN0
cnVjdHVyZSArPSAic3RydWN0ICIgKyBkZWNvcmF0ZShuYW1lKSArICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iOwotCi0gICAgICAgIGNvbnN0IFRUeXBlTGlzdCAmZmllbGRzID0gKnR5
cGUuZ2V0U3RydWN0KCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBm
aWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRUeXBlICZm
aWVsZCA9ICpmaWVsZHNbaV0udHlwZTsKLQotICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAg
IiArIHR5cGVTdHJpbmcoZmllbGQpICsgIiAiICsgZmllbGQuZ2V0RmllbGROYW1lKCkgKyBhcnJh
eVN0cmluZyhmaWVsZCkgKyAiO1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cnVjdHVyZSAr
PSAifTtcbiI7Ci0KLSAgICAgICAgaWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJl
Z2luKCksIG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCksIHN0cnVjdHVyZSkgPT0gbVN0cnVjdERl
Y2xhcmF0aW9ucy5lbmQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0
aW9ucy5wdXNoX2JhY2soc3RydWN0dXJlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjdG9yUGFyYW1ldGVycy5wdXNoX2JhY2soKmZpZWxkc1tpXS50eXBlKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICBUU3RyaW5nIGNvbnN0
cnVjdG9yOwotCi0gICAgaWYgKGN0b3JUeXBlLmdldFN0cnVjdCgpKQotICAgIHsKLSAgICAgICAg
Y29uc3RydWN0b3IgKz0gY3Rvck5hbWUgKyAiICIgKyBjdG9yTmFtZSArICJfY3RvcigiOwotICAg
IH0KLSAgICBlbHNlICAgLy8gQnVpbHQtaW4gdHlwZQotICAgIHsKLSAgICAgICAgY29uc3RydWN0
b3IgKz0gdHlwZVN0cmluZyhjdG9yVHlwZSkgKyAiICIgKyBjdG9yTmFtZSArICIoIjsKLSAgICB9
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBwYXJhbWV0ZXIgPSAwOyBwYXJhbWV0ZXIgPCBjdG9y
UGFyYW1ldGVycy5zaXplKCk7IHBhcmFtZXRlcisrKQotICAgIHsKLSAgICAgICAgY29uc3QgVFR5
cGUgJnR5cGUgPSBjdG9yUGFyYW1ldGVyc1twYXJhbWV0ZXJdOwotCi0gICAgICAgIGNvbnN0cnVj
dG9yICs9IHR5cGVTdHJpbmcodHlwZSkgKyAiIHgiICsgc3RyKHBhcmFtZXRlcikgKyBhcnJheVN0
cmluZyh0eXBlKTsKLQotICAgICAgICBpZiAocGFyYW1ldGVyIDwgY3RvclBhcmFtZXRlcnMuc2l6
ZSgpIC0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0cnVjdG9yICs9ICIpXG4iCi0gICAgICAgICAgICAg
ICAgICAgIntcbiI7Ci0KLSAgICBpZiAoY3RvclR5cGUuZ2V0U3RydWN0KCkpCi0gICAgewotICAg
ICAgICBjb25zdHJ1Y3RvciArPSAiICAgICIgKyBjdG9yTmFtZSArICIgc3RydWN0dXJlID0geyI7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0cnVjdG9yICs9ICIgICAgcmV0
dXJuICIgKyB0eXBlU3RyaW5nKGN0b3JUeXBlKSArICIoIjsKLSAgICB9Ci0KLSAgICBpZiAoY3Rv
clR5cGUuaXNNYXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKLSAgICB7Ci0g
ICAgICAgIGludCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOwotICAgICAgICBjb25z
dCBUVHlwZSAmcGFyYW1ldGVyID0gY3RvclBhcmFtZXRlcnNbMF07Ci0KLSAgICAgICAgaWYgKHBh
cmFtZXRlci5pc1NjYWxhcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCByb3cg
PSAwOyByb3cgPCBkaW07IHJvdysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZv
ciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0gY29sKSA/ICJ4
MCIgOiAiMC4wIik7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0gLSAxKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVy
LmdldE5vbWluYWxTaXplKCkgJiYgY29sIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9y
ICs9IFRTdHJpbmcoIngwIikgKyAiWyIgKyBzdHIocm93KSArICJdIiArICJbIiArIHN0cihjb2wp
ICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0
b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAiMS4wIiA6ICIwLjAiKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNv
bCA8IGRpbSAtIDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0cnVjdG9yICs9ICIsICI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpbnQgcmVtYWluaW5nQ29t
cG9uZW50cyA9IGN0b3JUeXBlLmdldE9iamVjdFNpemUoKTsKLSAgICAgICAgaW50IHBhcmFtZXRl
ckluZGV4ID0gMDsKLQotICAgICAgICB3aGlsZSAocmVtYWluaW5nQ29tcG9uZW50cyA+IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1l
dGVyc1twYXJhbWV0ZXJJbmRleF07Ci0gICAgICAgICAgICBib29sIG1vcmVQYXJhbWV0ZXJzID0g
cGFyYW1ldGVySW5kZXggPCAoaW50KWN0b3JQYXJhbWV0ZXJzLnNpemUoKSAtIDE7Ci0KLSAgICAg
ICAgICAgIGNvbnN0cnVjdG9yICs9ICJ4IiArIHN0cihwYXJhbWV0ZXJJbmRleCk7Ci0KLSAgICAg
ICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNWZWN0b3Io
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nQ29tcG9uZW50
cyA9PSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpIHx8IG1vcmVQYXJhbWV0ZXJzKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBw
YXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChyZW1haW5pbmdDb21wb25lbnRzIDwgcGFyYW1ldGVyLmdldE5vbWluYWxT
aXplKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJl
bWFpbmluZ0NvbXBvbmVudHMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDE6IGNvbnN0cnVjdG9yICs9ICIueCI7ICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogY29uc3RydWN0b3IgKz0gIi54eSI7ICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBjb25zdHJ1Y3RvciArPSAiLnh5eiI7ICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IGNvbnN0cnVjdG9yICs9ICIueHl6dyI7IGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25l
bnRzID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlz
TWF0cml4KCkgfHwgcGFyYW1ldGVyLmdldFN0cnVjdCgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChyZW1haW5pbmdDb21wb25lbnRzID09IHBhcmFtZXRlci5nZXRPYmpl
Y3RTaXplKCkgfHwgbW9yZVBhcmFtZXRlcnMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyLmdldE9iamVjdFNpemUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAg
ICAgICAgaWYgKG1vcmVQYXJhbWV0ZXJzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHBhcmFtZXRlckluZGV4Kys7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChyZW1h
aW5pbmdDb21wb25lbnRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0cnVj
dG9yICs9ICIsICI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
Y3RvclR5cGUuZ2V0U3RydWN0KCkpCi0gICAgewotICAgICAgICBjb25zdHJ1Y3RvciArPSAifTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gc3RydWN0dXJlO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgY29uc3RydWN0b3IgKz0gIik7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iOwot
ICAgIH0KLQotICAgIG1Db25zdHJ1Y3RvcnMuaW5zZXJ0KGNvbnN0cnVjdG9yKTsKLX0KLQotY29u
c3QgQ29uc3RhbnRVbmlvbiAqT3V0cHV0SExTTDo6d3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRU
eXBlICZ0eXBlLCBjb25zdCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKQotewotICAgIFRJbmZv
U2lua0Jhc2UgJm91dCA9IG1Cb2R5OwotCi0gICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0KQotICAgIHsKLSAgICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFR5
cGVOYW1lKCkpICsgIl9jdG9yKCI7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBUVHlwZUxpc3Qg
KnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b25zdCBUVHlwZSAqZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7Ci0KLSAgICAgICAg
ICAgIGNvbnN0VW5pb24gPSB3cml0ZUNvbnN0YW50VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlv
bik7Ci0KLSAgICAgICAgICAgIGlmIChpICE9IHN0cnVjdHVyZS0+c2l6ZSgpIC0gMSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIG91dCA8PCAiKSI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIGludCBzaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7Ci0gICAgICAgIGJvb2wgd3Jp
dGVUeXBlID0gc2l6ZSA+IDE7Ci0gICAgICAgIAotICAgICAgICBpZiAod3JpdGVUeXBlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgdHlwZVN0cmluZyh0eXBlKSA8PCAiKCI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKywgY29uc3RVbmlv
bisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUo
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IGNv
bnN0VW5pb24tPmdldEZDb25zdCgpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
ICAgb3V0IDw8IGNvbnN0VW5pb24tPmdldElDb25zdCgpOyBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOiAgb3V0IDw8IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKLSAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICIsICI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
d3JpdGVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIikiOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbnN0VW5pb247Ci19Ci0KLVRTdHJpbmcgT3V0cHV0SExT
TDo6c2NvcGVTdHJpbmcodW5zaWduZWQgaW50IGRlcHRoTGltaXQpCi17Ci0gICAgVFN0cmluZyBz
dHJpbmc7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1TY29wZUJyYWNrZXQu
c2l6ZSgpICYmIGkgPCBkZXB0aExpbWl0OyBpKyspCi0gICAgewotICAgICAgICBzdHJpbmcgKz0g
Il8iICsgc3RyKGkpOwotICAgIH0KLQotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLVRTdHJpbmcg
T3V0cHV0SExTTDo6c2NvcGVkU3RydWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKQotewotICAg
IGlmICh0eXBlTmFtZSA9PSAiIikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlTmFtZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHlwZU5hbWUgKyBzY29wZVN0cmluZyhtU2NvcGVEZXB0aCk7Ci19
Ci0KLVRTdHJpbmcgT3V0cHV0SExTTDo6c3RydWN0TG9va3VwKGNvbnN0IFRTdHJpbmcgJnR5cGVO
YW1lKQotewotICAgIGZvciAoaW50IGRlcHRoID0gbVNjb3BlRGVwdGg7IGRlcHRoID49IDA7IGRl
cHRoLS0pCi0gICAgewotICAgICAgICBUU3RyaW5nIHNjb3BlZE5hbWUgPSBkZWNvcmF0ZSh0eXBl
TmFtZSArIHNjb3BlU3RyaW5nKGRlcHRoKSk7Ci0KLSAgICAgICAgZm9yIChTdHJ1Y3ROYW1lczo6
aXRlcmF0b3Igc3RydWN0TmFtZSA9IG1TdHJ1Y3ROYW1lcy5iZWdpbigpOyBzdHJ1Y3ROYW1lICE9
IG1TdHJ1Y3ROYW1lcy5lbmQoKTsgc3RydWN0TmFtZSsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoKnN0cnVjdE5hbWUgPT0gc2NvcGVkTmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc2NvcGVkTmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gU2hvdWxkIGhhdmUgZm91bmQgYSBtYXRjaGlu
ZyBjb25zdHJ1Y3RvcgotCi0gICAgcmV0dXJuIHR5cGVOYW1lOwotfQotCi1UU3RyaW5nIE91dHB1
dEhMU0w6OmRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZykKLXsKLSAgICBpZiAoc3RyaW5n
LnN1YnN0cigwLCAzKSAhPSAiZ2xfIiAmJiBzdHJpbmcuc3Vic3RyKDAsIDMpICE9ICJkeF8iKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuICJfIiArIHN0cmluZzsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICB9Ci19Ci19CkluZGV4OiBBTkdMRS9zcmMv
Y29tcGlsZXIvT3V0cHV0SExTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9P
dXRwdXRITFNMLmgJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEhMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotI2lmbmRlZiBDT01QSUxFUl9PVVRQVVRITFNMX0hfCi0jZGVmaW5lIENPTVBJTEVSX09V
VFBVVEhMU0xfSF8KLQotI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8c2V0PgotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxw
ZXIuaCIKLQotbmFtZXNwYWNlIHNoCi17Ci1jbGFzcyBVbmZvbGRTZWxlY3Q7Ci0KLWNsYXNzIE91
dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgT3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0KTsKLSAgICB+T3V0cHV0SExT
TCgpOwotCi0gICAgdm9pZCBvdXRwdXQoKTsKLQotICAgIFRJbmZvU2lua0Jhc2UgJmdldEJvZHlT
dHJlYW0oKTsKLQotICAgIFRTdHJpbmcgdHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7Ci0g
ICAgc3RhdGljIFRTdHJpbmcgcXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsK
LSAgICBzdGF0aWMgVFN0cmluZyBhcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAg
c3RhdGljIFRTdHJpbmcgaW5pdGlhbGl6ZXIoY29uc3QgVFR5cGUgJnR5cGUpOwotICAgIHN0YXRp
YyBUU3RyaW5nIGRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0cmluZyk7ICAgLy8gUHJlcGVuZCBh
biB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCi0KLSAgcHJvdGVjdGVkOgotICAg
IHZvaWQgaGVhZGVyKCk7Ci0KLSAgICAvLyBWaXNpdCBBU1Qgbm9kZXMgYW5kIG91dHB1dCB0aGVp
ciBjb2RlIHRvIHRoZSBib2R5IHN0cmVhbQotICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCopOwotICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9u
Kik7Ci0gICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOwot
ICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7Ci0gICAgYm9v
bCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOwotICAgIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLSAgICBi
b29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsKLSAgICBib29sIHZpc2l0
QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7Ci0KLSAgICBib29sIGlzU2luZ2xl
U3RhdGVtZW50KFRJbnRlcm1Ob2RlICpub2RlKTsKLSAgICBib29sIGhhbmRsZUV4Y2Vzc2l2ZUxv
b3AoVEludGVybUxvb3AgKm5vZGUpOwotICAgIHZvaWQgb3V0cHV0VHJpcGxldChWaXNpdCB2aXNp
dCwgY29uc3QgVFN0cmluZyAmcHJlU3RyaW5nLCBjb25zdCBUU3RyaW5nICZpblN0cmluZywgY29u
c3QgVFN0cmluZyAmcG9zdFN0cmluZyk7Ci0gICAgVFN0cmluZyBhcmd1bWVudFN0cmluZyhjb25z
dCBUSW50ZXJtU3ltYm9sICpzeW1ib2wpOwotICAgIGludCB2ZWN0b3JTaXplKGNvbnN0IFRUeXBl
ICZ0eXBlKSBjb25zdDsKLQotICAgIHZvaWQgYWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5
cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVy
cyk7Ci0gICAgY29uc3QgQ29uc3RhbnRVbmlvbiAqd3JpdGVDb25zdGFudFVuaW9uKGNvbnN0IFRU
eXBlICZ0eXBlLCBjb25zdCBDb25zdGFudFVuaW9uICpjb25zdFVuaW9uKTsKLQotICAgIFRTdHJp
bmcgc2NvcGVTdHJpbmcodW5zaWduZWQgaW50IGRlcHRoTGltaXQpOwotICAgIFRTdHJpbmcgc2Nv
cGVkU3RydWN0KGNvbnN0IFRTdHJpbmcgJnR5cGVOYW1lKTsKLSAgICBUU3RyaW5nIHN0cnVjdExv
b2t1cChjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSk7Ci0KLSAgICBUUGFyc2VDb250ZXh0ICZtQ29u
dGV4dDsKLSAgICBVbmZvbGRTZWxlY3QgKm1VbmZvbGRTZWxlY3Q7Ci0gICAgYm9vbCBtSW5zaWRl
RnVuY3Rpb247Ci0KLSAgICAvLyBPdXRwdXQgc3RyZWFtcwotICAgIFRJbmZvU2lua0Jhc2UgbUhl
YWRlcjsKLSAgICBUSW5mb1NpbmtCYXNlIG1Cb2R5OwotICAgIFRJbmZvU2lua0Jhc2UgbUZvb3Rl
cjsKLQotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtUmVmZXJlbmNlZFVuaWZvcm1zOwotICAg
IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtUmVmZXJlbmNlZEF0dHJpYnV0ZXM7Ci0gICAgc3RkOjpz
ZXQ8c3RkOjpzdHJpbmc+IG1SZWZlcmVuY2VkVmFyeWluZ3M7Ci0KLSAgICAvLyBQYXJhbWV0ZXJz
IGRldGVybWluaW5nIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAotICAgIGJvb2wgbVVz
ZXNUZXh0dXJlMkQ7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOwotICAgIGJvb2wgbVVz
ZXNUZXh0dXJlMkRQcm9qOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXM7Ci0gICAg
Ym9vbCBtVXNlc1RleHR1cmVDdWJlOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOwot
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwotICAgIGJvb2wgbVVzZXNGcmFnQ29vcmQ7Ci0gICAg
Ym9vbCBtVXNlc1BvaW50Q29vcmQ7Ci0gICAgYm9vbCBtVXNlc0Zyb250RmFjaW5nOwotICAgIGJv
b2wgbVVzZXNQb2ludFNpemU7Ci0gICAgYm9vbCBtVXNlc1hvcjsKLSAgICBib29sIG1Vc2VzTW9k
MTsKLSAgICBib29sIG1Vc2VzTW9kMjsKLSAgICBib29sIG1Vc2VzTW9kMzsKLSAgICBib29sIG1V
c2VzTW9kNDsKLSAgICBib29sIG1Vc2VzRmFjZWZvcndhcmQxOwotICAgIGJvb2wgbVVzZXNGYWNl
Zm9yd2FyZDI7Ci0gICAgYm9vbCBtVXNlc0ZhY2Vmb3J3YXJkMzsKLSAgICBib29sIG1Vc2VzRmFj
ZWZvcndhcmQ0OwotICAgIGJvb2wgbVVzZXNFcXVhbE1hdDI7Ci0gICAgYm9vbCBtVXNlc0VxdWFs
TWF0MzsKLSAgICBib29sIG1Vc2VzRXF1YWxNYXQ0OwotICAgIGJvb2wgbVVzZXNFcXVhbFZlYzI7
Ci0gICAgYm9vbCBtVXNlc0VxdWFsVmVjMzsKLSAgICBib29sIG1Vc2VzRXF1YWxWZWM0OwotICAg
IGJvb2wgbVVzZXNFcXVhbElWZWMyOwotICAgIGJvb2wgbVVzZXNFcXVhbElWZWMzOwotICAgIGJv
b2wgbVVzZXNFcXVhbElWZWM0OwotICAgIGJvb2wgbVVzZXNFcXVhbEJWZWMyOwotICAgIGJvb2wg
bVVzZXNFcXVhbEJWZWMzOwotICAgIGJvb2wgbVVzZXNFcXVhbEJWZWM0OwotICAgIGJvb2wgbVVz
ZXNBdGFuMjsKLQotICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gQ29uc3RydWN0b3JzOwot
ICAgIENvbnN0cnVjdG9ycyBtQ29uc3RydWN0b3JzOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNldDxU
U3RyaW5nPiBTdHJ1Y3ROYW1lczsKLSAgICBTdHJ1Y3ROYW1lcyBtU3RydWN0TmFtZXM7Ci0KLSAg
ICB0eXBlZGVmIHN0ZDo6bGlzdDxUU3RyaW5nPiBTdHJ1Y3REZWNsYXJhdGlvbnM7Ci0gICAgU3Ry
dWN0RGVjbGFyYXRpb25zIG1TdHJ1Y3REZWNsYXJhdGlvbnM7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6
dmVjdG9yPGludD4gU2NvcGVCcmFja2V0OwotICAgIFNjb3BlQnJhY2tldCBtU2NvcGVCcmFja2V0
OwotICAgIHVuc2lnbmVkIGludCBtU2NvcGVEZXB0aDsKLQotICAgIGludCBtQXJndW1lbnRJbmRl
eDsgICAvLyBGb3IgY3JlYXRpbmcgdW5pcXVlIGFyZ3VtZW50IG5hbWVzCi19OwotfQotCi0jZW5k
aWYgICAvLyBDT01QSUxFUl9PVVRQVVRITFNMX0hfCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIv
UGFyc2VIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhl
bHBlci5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVs
cGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDc5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgotCi0jaW5jbHVkZSA8c3Rk
YXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVk
ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKLQotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLS8vCi0vLyBTdWItIHZlY3RvciBhbmQgbWF0cml4IGZpZWxkcwotLy8KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0vLwotLy8gTG9vayBhdCBhICcuJyBmaWVsZCBzZWxlY3RvciBzdHJp
bmcgYW5kIGNoYW5nZSBpdCBpbnRvIG9mZnNldHMKLS8vIGZvciBhIHZlY3Rvci4KLS8vCi1ib29s
IFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJp
bmcsIGludCB2ZWNTaXplLCBUVmVjdG9yRmllbGRzJiBmaWVsZHMsIGludCBsaW5lKQotewotICAg
IGZpZWxkcy5udW0gPSAoaW50KSBjb21wU3RyaW5nLnNpemUoKTsKLSAgICBpZiAoZmllbGRzLm51
bSA+IDQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdmVjdG9yIGZpZWxkIHNlbGVj
dGlvbiIsIGNvbXBTdHJpbmcuY19zdHIoKSwgIiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgZW51bSB7Ci0gICAgICAgIGV4eXp3LAotICAgICAgICBlcmdiYSwKLSAgICAg
ICAgZXN0cHEsCi0gICAgfSBmaWVsZFNldFs0XTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
ZmllbGRzLm51bTsgKytpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29tcFN0cmluZ1tpXSkgIHsKLSAg
ICAgICAgY2FzZSAneCc6IAotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOwotICAg
ICAgICAgICAgZmllbGRTZXRbaV0gPSBleHl6dzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlICdyJzogCi0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7Ci0gICAgICAg
ICAgICBmaWVsZFNldFtpXSA9IGVyZ2JhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgJ3MnOgotICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbaV0gPSAwOwotICAgICAgICAgICAg
ZmllbGRTZXRbaV0gPSBlc3RwcTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd5
JzogCi0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7Ci0gICAgICAgICAgICBmaWVs
ZFNldFtpXSA9IGV4eXp3OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2cnOiAK
LSAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMTsKLSAgICAgICAgICAgIGZpZWxkU2V0
W2ldID0gZXJnYmE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAndCc6Ci0gICAg
ICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDE7Ci0gICAgICAgICAgICBmaWVsZFNldFtpXSA9
IGVzdHBxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3onOiAKLSAgICAgICAg
ICAgIGZpZWxkcy5vZmZzZXRzW2ldID0gMjsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5
enc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnYic6IAotICAgICAgICAgICAg
ZmllbGRzLm9mZnNldHNbaV0gPSAyOwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdwJzoKLSAgICAgICAgICAgIGZpZWxk
cy5vZmZzZXRzW2ldID0gMjsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGNhc2UgJ3cnOiAKLSAgICAgICAgICAg
IGZpZWxkcy5vZmZzZXRzW2ldID0gMzsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXh5enc7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnYSc6IAotICAgICAgICAgICAgZmll
bGRzLm9mZnNldHNbaV0gPSAzOwotICAgICAgICAgICAgZmllbGRTZXRbaV0gPSBlcmdiYTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdxJzoKLSAgICAgICAgICAgIGZpZWxkcy5v
ZmZzZXRzW2ldID0gMzsKLSAgICAgICAgICAgIGZpZWxkU2V0W2ldID0gZXN0cHE7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJp
bGxlZ2FsIHZlY3RvciBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZmllbGRzLm51bTsgKytpKSB7Ci0gICAgICAgIGlmIChmaWVsZHMub2Zm
c2V0c1tpXSA+PSB2ZWNTaXplKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAidmVjdG9yIGZp
ZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UiLCAgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaSA+IDAp
IHsKLSAgICAgICAgICAgIGlmIChmaWVsZFNldFtpXSAhPSBmaWVsZFNldFtpLTFdKSB7Ci0gICAg
ICAgICAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgLSB2ZWN0b3IgY29tcG9uZW50IGZpZWxk
cyBub3QgZnJvbSB0aGUgc2FtZSBzZXQiLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi0vLwotLy8gTG9vayBhdCBhICcuJyBmaWVsZCBz
ZWxlY3RvciBzdHJpbmcgYW5kIGNoYW5nZSBpdCBpbnRvIG9mZnNldHMKLS8vIGZvciBhIG1hdHJp
eC4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJp
bmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTWF0cml4RmllbGRzJiBmaWVsZHMsIGludCBs
aW5lKQotewotICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwotICAgIGZpZWxkcy53aG9sZUNv
bCA9IGZhbHNlOwotICAgIGZpZWxkcy5yb3cgPSAtMTsKLSAgICBmaWVsZHMuY29sID0gLTE7Ci0K
LSAgICBpZiAoY29tcFN0cmluZy5zaXplKCkgIT0gMikgewotICAgICAgICBlcnJvcihsaW5lLCAi
aWxsZWdhbCBsZW5ndGggb2YgbWF0cml4IGZpZWxkIHNlbGVjdGlvbiIsIGNvbXBTdHJpbmcuY19z
dHIoKSwgIiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGNvbXBT
dHJpbmdbMF0gPT0gJ18nKSB7Ci0gICAgICAgIGlmIChjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNv
bXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1h
dHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSB0
cnVlOwotICAgICAgICBmaWVsZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsKLSAgICB9IGVs
c2UgaWYgKGNvbXBTdHJpbmdbMV0gPT0gJ18nKSB7Ci0gICAgICAgIGlmIChjb21wU3RyaW5nWzBd
IDwgJzAnIHx8IGNvbXBTdHJpbmdbMF0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUs
ICJpbGxlZ2FsIG1hdHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIi
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmaWVsZHMu
d2hvbGVSb3cgPSB0cnVlOwotICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0cmluZ1swXSAtICcw
JzsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoY29tcFN0cmluZ1swXSA8ICcwJyB8fCBjb21w
U3RyaW5nWzBdID4gJzMnIHx8Ci0gICAgICAgICAgICBjb21wU3RyaW5nWzFdIDwgJzAnIHx8IGNv
bXBTdHJpbmdbMV0gPiAnMycpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsICJpbGxlZ2FsIG1h
dHJpeCBmaWVsZCBzZWxlY3Rpb24iLCBjb21wU3RyaW5nLmNfc3RyKCksICIiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmaWVsZHMucm93ID0gY29tcFN0
cmluZ1swXSAtICcwJzsKLSAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7
Ci0gICAgfQotCi0gICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0U2l6ZSB8fCBmaWVsZHMuY29sID49
IG1hdFNpemUpIHsKLSAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24g
b3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0cigpLCAiIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
Ci0vLyBFcnJvcnMKLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLy8KLS8vIFRyYWNrIHdoZXRoZXIg
ZXJyb3JzIGhhdmUgb2NjdXJyZWQuCi0vLwotdm9pZCBUUGFyc2VDb250ZXh0OjpyZWNvdmVyKCkK
LXsKLSAgICByZWNvdmVyZWRGcm9tRXJyb3IgPSB0cnVlOwotfQotCi0vLwotLy8gVXNlZCBieSBm
bGV4L2Jpc29uIHRvIG91dHB1dCBhbGwgc3ludGF4IGFuZCBwYXJzaW5nIGVycm9ycy4KLS8vCi12
b2lkIFRQYXJzZUNvbnRleHQ6OmVycm9yKFRTb3VyY2VMb2MgbkxpbmUsIGNvbnN0IGNoYXIgKnN6
UmVhc29uLCBjb25zdCBjaGFyICpzelRva2VuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqc3pFeHRyYUluZm9Gb3JtYXQsIC4uLikKLXsKLSAgICBjaGFyIHN6RXh0cmFJ
bmZvWzQwMF07Ci0gICAgdmFfbGlzdCBtYXJrZXI7Ci0KLSAgICB2YV9zdGFydChtYXJrZXIsIHN6
RXh0cmFJbmZvRm9ybWF0KTsKLQotICAgIHZzbnByaW50ZihzekV4dHJhSW5mbywgc2l6ZW9mKHN6
RXh0cmFJbmZvKSwgc3pFeHRyYUluZm9Gb3JtYXQsIG1hcmtlcik7Ci0KLSAgICAvKiBWQysrIGZv
cm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tlbicgOiBleHRyYWluZm8gKi8KLSAg
ICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOwotICAgIGluZm9TaW5rLmluZm8u
bG9jYXRpb24obkxpbmUpOwotICAgIGluZm9TaW5rLmluZm8gPDwgIiciIDw8IHN6VG9rZW4gPDwg
ICInIDogIiA8PCBzelJlYXNvbiA8PCAiICIgPDwgc3pFeHRyYUluZm8gPDwgIlxuIjsKLQotICAg
IHZhX2VuZChtYXJrZXIpOwotCi0gICAgKytudW1FcnJvcnM7Ci19Ci0KLS8vCi0vLyBTYW1lIGVy
cm9yIG1lc3NhZ2UgZm9yIGFsbCBwbGFjZXMgYXNzaWdubWVudHMgZG9uJ3Qgd29yay4KLS8vCi12
b2lkIFRQYXJzZUNvbnRleHQ6OmFzc2lnbkVycm9yKGludCBsaW5lLCBjb25zdCBjaGFyKiBvcCwg
VFN0cmluZyBsZWZ0LCBUU3RyaW5nIHJpZ2h0KQotewotICAgIGVycm9yKGxpbmUsICIiLCBvcCwg
ImNhbm5vdCBjb252ZXJ0IGZyb20gJyVzJyB0byAnJXMnIiwKLSAgICAgICAgICByaWdodC5jX3N0
cigpLCBsZWZ0LmNfc3RyKCkpOwotfQotCi0vLwotLy8gU2FtZSBlcnJvciBtZXNzYWdlIGZvciBh
bGwgcGxhY2VzIHVuYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KLS8vCi12b2lkIFRQYXJzZUNv
bnRleHQ6OnVuYXJ5T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgb3Bl
cmFuZCkKLXsKLSAgIGVycm9yKGxpbmUsICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgb3AsIAotICAg
ICAgICAgICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0YWtlcyBhbiBvcGVyYW5kIG9m
IHR5cGUgJXMgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUgY29udmVyc2lvbikiLAotICAgICAg
ICAgIG9wLCBvcGVyYW5kLmNfc3RyKCkpOwotfQotCi0vLwotLy8gU2FtZSBlcnJvciBtZXNzYWdl
IGZvciBhbGwgYmluYXJ5IG9wZXJhdGlvbnMgZG9uJ3Qgd29yay4KLS8vCi12b2lkIFRQYXJzZUNv
bnRleHQ6OmJpbmFyeU9wRXJyb3IoaW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxl
ZnQsIFRTdHJpbmcgcmlnaHQpCi17Ci0gICAgZXJyb3IobGluZSwgIiB3cm9uZyBvcGVyYW5kIHR5
cGVzICIsIG9wLCAKLSAgICAgICAgICAgICJubyBvcGVyYXRpb24gJyVzJyBleGlzdHMgdGhhdCB0
YWtlcyBhIGxlZnQtaGFuZCBvcGVyYW5kIG9mIHR5cGUgJyVzJyBhbmQgIgotICAgICAgICAgICAg
ImEgcmlnaHQgb3BlcmFuZCBvZiB0eXBlICclcycgKG9yIHRoZXJlIGlzIG5vIGFjY2VwdGFibGUg
Y29udmVyc2lvbikiLCAKLSAgICAgICAgICAgIG9wLCBsZWZ0LmNfc3RyKCksIHJpZ2h0LmNfc3Ry
KCkpOwotfQotCi1ib29sIFRQYXJzZUNvbnRleHQ6OnByZWNpc2lvbkVycm9yQ2hlY2soaW50IGxp
bmUsIFRQcmVjaXNpb24gcHJlY2lzaW9uLCBUQmFzaWNUeXBlIHR5cGUpewotICAgIHN3aXRjaCgg
dHlwZSApewotICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgIGlmKCBwcmVjaXNpb24gPT0gRWJw
VW5kZWZpbmVkICl7Ci0gICAgICAgICAgICBlcnJvciggbGluZSwgIk5vIHByZWNpc2lvbiBzcGVj
aWZpZWQgZm9yIChmbG9hdCkiLCAiIiwgIiIgKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0SW50OgotICAgICAgICBpZigg
cHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCApewotICAgICAgICAgICAgZXJyb3IoIGxpbmUsICJO
byBwcmVjaXNpb24gc3BlY2lmaWVkIChpbnQpIiwgIiIsICIiICk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi0vLwotLy8gQm90aCB0ZXN0IGFuZCBpZiBuZWNlc3NhcnksIHNwaXQgb3V0IGFu
IGVycm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5Ci0vLyBhbiBsLXZhbHVlIHRoYXQg
Y2FuIGJlIG9wZXJhdGVkIG9uIHRoaXMgd2F5LgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
d2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhp
bnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRJbnRlcm1UeXBlZCogbm9kZSkKLXsKLSAgICBUSW50
ZXJtU3ltYm9sKiBzeW1Ob2RlID0gbm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgVEludGVy
bUJpbmFyeSogYmluYXJ5Tm9kZSA9IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOwotCi0gICAgaWYg
KGJpbmFyeU5vZGUpIHsKLSAgICAgICAgYm9vbCBlcnJvclJldHVybjsKLQotICAgICAgICBzd2l0
Y2goYmluYXJ5Tm9kZS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0Ogot
ICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6Ci0gICAgICAgIGNhc2UgRU9wSW5kZXhEaXJl
Y3RTdHJ1Y3Q6Ci0gICAgICAgICAgICByZXR1cm4gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwg
YmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgot
ICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJvckNoZWNrKGxpbmUsIG9wLCBiaW5h
cnlOb2RlLT5nZXRMZWZ0KCkpOwotICAgICAgICAgICAgaWYgKCFlcnJvclJldHVybikgewotICAg
ICAgICAgICAgICAgIGludCBvZmZzZXRbNF0gPSB7MCwwLDAsMH07Ci0KLSAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQqIHJpZ2h0Tm9kZSA9IGJpbmFyeU5vZGUtPmdldFJpZ2h0KCk7Ci0gICAg
ICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdnck5vZGUgPSByaWdodE5vZGUtPmdldEFz
QWdncmVnYXRlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yIChUSW50
ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5iZWdpbigp
OyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBh
Z2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGludCB2YWx1ZSA9ICgqcCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpOwotICAgICAgICAgICAgICAgICAgICBv
ZmZzZXRbdmFsdWVdKys7ICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldFt2YWx1
ZV0gPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUg
b2Ygc3dpenpsZSBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgY29tcG9uZW50cyIsIG9wLCAiIiwgIiIp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gCi0KLSAgICAgICAgICAg
IHJldHVybiBlcnJvclJldHVybjsKLSAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBlcnJvcihsaW5lLCAiIGwtdmFsdWUgcmVxdWlyZWQiLCBv
cCwgIiIsICIiKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLQotICAgIGNvbnN0
IGNoYXIqIHN5bWJvbCA9IDA7Ci0gICAgaWYgKHN5bU5vZGUgIT0gMCkKLSAgICAgICAgc3ltYm9s
ID0gc3ltTm9kZS0+Z2V0U3ltYm9sKCkuY19zdHIoKTsKLQotICAgIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UgPSAwOwotICAgIHN3aXRjaCAobm9kZS0+Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICBjYXNlIEV2
cUNvbnN0OiAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTogIG1lc3NhZ2UgPSAiY2FuJ3QgbW9k
aWZ5IGEgY29uc3QiOyAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAg
bWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4gYXR0cmlidXRlIjsgICBicmVhazsKLSAgICBjYXNl
IEV2cVVuaWZvcm06ICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHVuaWZvcm0iOyAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3Qg
bW9kaWZ5IGEgdmFyeWluZyI7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnB1dDogICAgICAg
ICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsKLSAgICBj
YXNlIEV2cUZyYWdDb29yZDogICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29v
cmQiOyAgIGJyZWFrOwotICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6ICAgIG1lc3NhZ2UgPSAiY2Fu
J3QgbW9kaWZ5IGdsX0Zyb250RmFjaW5nIjsgYnJlYWs7Ci0gICAgY2FzZSBFdnFQb2ludENvb3Jk
OiAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgZ2xfUG9pbnRDb29yZCI7ICBicmVhazsKLSAg
ICBkZWZhdWx0OgotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFR5cGUgdGhhdCBjYW4ndCBiZSB3
cml0dGVuIHRvPwotICAgICAgICAvLwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlw
ZSgpKSB7Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgotICAgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlOgotICAgICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBzYW1wbGVyIjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVidFZvaWQ6Ci0gICAgICAgICAgICBt
ZXNzYWdlID0gImNhbid0IG1vZGlmeSB2b2lkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OiAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKG1lc3NhZ2UgPT0gMCAmJiBiaW5hcnlOb2RlID09IDAgJiYgc3ltTm9kZSA9PSAwKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICIgbC12YWx1ZSByZXF1aXJlZCIsIG9wLCAiIiwgIiIpOwotCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotCi0gICAgLy8KLSAgICAvLyBFdmVyeXRoaW5n
IGVsc2UgaXMgb2theSwgbm8gZXJyb3IuCi0gICAgLy8KLSAgICBpZiAobWVzc2FnZSA9PSAwKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLwotICAgIC8vIElmIHdlIGdldCBoZXJlLCB3
ZSBoYXZlIGFuIGVycm9yIGFuZCBhIG1lc3NhZ2UuCi0gICAgLy8KLSAgICBpZiAoc3ltTm9kZSkK
LSAgICAgICAgZXJyb3IobGluZSwgIiBsLXZhbHVlIHJlcXVpcmVkIiwgb3AsICJcIiVzXCIgKCVz
KSIsIHN5bWJvbCwgbWVzc2FnZSk7Ci0gICAgZWxzZQotICAgICAgICBlcnJvcihsaW5lLCAiIGwt
dmFsdWUgcmVxdWlyZWQiLCBvcCwgIiglcykiLCBtZXNzYWdlKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi0vLwotLy8gQm90aCB0ZXN0LCBhbmQgaWYgbmVjZXNzYXJ5IHNwaXQgb3V0IGFuIGVy
cm9yLCB0byBzZWUgaWYgdGhlIG5vZGUgaXMgcmVhbGx5Ci0vLyBhIGNvbnN0YW50LgotLy8KLS8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgd2FzIGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4
dDo6Y29uc3RFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSkKLXsKLSAgICBpZiAobm9kZS0+
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGVycm9yKG5vZGUtPmdldExpbmUoKSwgImNvbnN0YW50IGV4cHJlc3Npb24gcmVxdWlyZWQiLCAi
IiwgIiIpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vCi0vLyBCb3RoIHRlc3QsIGFuZCBp
ZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNlZSBpZiB0aGUgbm9kZSBpcyByZWFs
bHkKLS8vIGFuIGludGVnZXIuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJy
b3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayhUSW50ZXJtVHlw
ZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKQotewotICAgIGlmIChub2RlLT5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRJbnQgJiYgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJpbnRlZ2VyIGV4cHJl
c3Npb24gcmVxdWlyZWQiLCB0b2tlbiwgIiIpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
Ci0vLyBCb3RoIHRlc3QsIGFuZCBpZiBuZWNlc3Nhcnkgc3BpdCBvdXQgYW4gZXJyb3IsIHRvIHNl
ZSBpZiB3ZSBhcmUgY3VycmVudGx5Ci0vLyBnbG9iYWxseSBzY29wZWQuCi0vLwotLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSB3YXMgYW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjpnbG9i
YWxFcnJvckNoZWNrKGludCBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pCi17
Ci0gICAgaWYgKGdsb2JhbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZXJyb3IobGlu
ZSwgIm9ubHkgYWxsb3dlZCBhdCBnbG9iYWwgc2NvcGUiLCB0b2tlbiwgIiIpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8vCi0vLyBGb3Igbm93LCBrZWVwIGl0IHNpbXBsZTogIGlmIGl0IHN0
YXJ0cyAiZ2xfIiwgaXQncyByZXNlcnZlZCwgaW5kZXBlbmRlbnQKLS8vIG9mIHNjb3BlLiAgRXhj
ZXB0LCBpZiB0aGUgc3ltYm9sIHRhYmxlIGlzIGF0IHRoZSBidWlsdC1pbiBwdXNoLWxldmVsLAot
Ly8gd2hpY2ggaXMgd2hlbiB3ZSBhcmUgcGFyc2luZyBidWlsdC1pbnMuCi0vLyBBbHNvIGNoZWNr
cyBmb3IgIndlYmdsXyIgYW5kICJfd2ViZ2xfIiByZXNlcnZlZCBpZGVudGlmaWVycyBpZiBwYXJz
aW5nIGEKLS8vIHdlYmdsIHNoYWRlci4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2Fz
IGFuIGVycm9yLgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJvckNoZWNrKGlu
dCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQotewotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiByZXNlcnZlZEVyck1zZyA9ICJyZXNlcnZlZCBidWlsdC1pbiBuYW1lIjsKLSAgICBpZiAo
IXN5bWJvbFRhYmxlLmF0QnVpbHRJbkxldmVsKCkpIHsKLSAgICAgICAgaWYgKGlkZW50aWZpZXIu
c3Vic3RyKDAsIDMpID09IFRTdHJpbmcoImdsXyIpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5l
LCByZXNlcnZlZEVyck1zZywgImdsXyIsICIiKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChzcGVjID09IEVTaFNwZWNXZWJHTCkgewotICAgICAgICAg
ICAgaWYgKGlkZW50aWZpZXIuc3Vic3RyKDAsIDYpID09IFRTdHJpbmcoIndlYmdsXyIpKSB7Ci0g
ICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJ3ZWJnbF8iLCAiIik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoaWRlbnRpZmllci5zdWJzdHIoMCwgNykgPT0gVFN0cmluZygiX3dlYmdsXyIpKSB7Ci0g
ICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJfd2ViZ2xfIiwgIiIp
OwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGlmIChpZGVudGlmaWVyLmZpbmQoIl9fIikgIT0gVFN0cmluZzo6bnBvcykgewot
ICAgICAgICAgICAgLy9lcnJvcihsaW5lLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFy
ZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBpZGVudGlmaWVyLmNfc3RyKCksICIiLCAiIik7
Ci0gICAgICAgICAgICAvL3JldHVybiB0cnVlOwotICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5t
ZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCAiVHdvIGNvbnNlY3V0aXZlIHVuZGVyc2NvcmVzIGFyZSBy
ZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iLCBsaW5lKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIE1h
a2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggZGF0YSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3Ig
dG8gYnVpbGQKLS8vIHNvbWV0aGluZyBvZiB0aGUgdHlwZSBvZiB0aGUgY29uc3RydWN0b3IuICBB
bHNvIHJldHVybnMgdGhlIHR5cGUgb2YKLS8vIHRoZSBjb25zdHJ1Y3Rvci4KLS8vCi0vLyBSZXR1
cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIGNvbnN0cnVjdGlvbi4KLS8vCi1ib29s
IFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVybU5v
ZGUqIG5vZGUsIFRGdW5jdGlvbiYgZnVuY3Rpb24sIFRPcGVyYXRvciBvcCwgVFR5cGUqIHR5cGUp
Ci17Ci0gICAgKnR5cGUgPSBmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCk7Ci0KLSAgICBib29sIGNv
bnN0cnVjdGluZ01hdHJpeCA9IGZhbHNlOwotICAgIHN3aXRjaChvcCkgewotICAgIGNhc2UgRU9w
Q29uc3RydWN0TWF0MjoKLSAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6Ci0gICAgY2FzZSBFT3BD
b25zdHJ1Y3RNYXQ0OgotICAgICAgICBjb25zdHJ1Y3RpbmdNYXRyaXggPSB0cnVlOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OiAKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8K
LSAgICAvLyBOb3RlOiBJdCdzIG9rYXkgdG8gaGF2ZSB0b28gbWFueSBjb21wb25lbnRzIGF2YWls
YWJsZSwgYnV0IG5vdCBva2F5IHRvIGhhdmUgdW51c2VkCi0gICAgLy8gYXJndW1lbnRzLiAgJ2Z1
bGwnIHdpbGwgZ28gdG8gdHJ1ZSB3aGVuIGVub3VnaCBhcmdzIGhhdmUgYmVlbiBzZWVuLiAgSWYg
d2UgbG9vcAotICAgIC8vIGFnYWluLCB0aGVyZSBpcyBhbiBleHRyYSBhcmd1bWVudCwgc28gJ292
ZXJmdWxsJyB3aWxsIGJlY29tZSB0cnVlLgotICAgIC8vCi0KLSAgICBpbnQgc2l6ZSA9IDA7Ci0g
ICAgYm9vbCBjb25zdFR5cGUgPSB0cnVlOwotICAgIGJvb2wgZnVsbCA9IGZhbHNlOwotICAgIGJv
b2wgb3ZlckZ1bGwgPSBmYWxzZTsKLSAgICBib29sIG1hdHJpeEluTWF0cml4ID0gZmFsc2U7Ci0g
ICAgYm9vbCBhcnJheUFyZyA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rp
b24uZ2V0UGFyYW1Db3VudCgpOyArK2kpIHsKLSAgICAgICAgc2l6ZSArPSBmdW5jdGlvbltpXS50
eXBlLT5nZXRPYmplY3RTaXplKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29uc3RydWN0aW5n
TWF0cml4ICYmIGZ1bmN0aW9uW2ldLnR5cGUtPmlzTWF0cml4KCkpCi0gICAgICAgICAgICBtYXRy
aXhJbk1hdHJpeCA9IHRydWU7Ci0gICAgICAgIGlmIChmdWxsKQotICAgICAgICAgICAgb3ZlckZ1
bGwgPSB0cnVlOwotICAgICAgICBpZiAob3AgIT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBl
LT5pc0FycmF5KCkgJiYgc2l6ZSA+PSB0eXBlLT5nZXRPYmplY3RTaXplKCkpCi0gICAgICAgICAg
ICBmdWxsID0gdHJ1ZTsKLSAgICAgICAgaWYgKGZ1bmN0aW9uW2ldLnR5cGUtPmdldFF1YWxpZmll
cigpICE9IEV2cUNvbnN0KQotICAgICAgICAgICAgY29uc3RUeXBlID0gZmFsc2U7Ci0gICAgICAg
IGlmIChmdW5jdGlvbltpXS50eXBlLT5pc0FycmF5KCkpCi0gICAgICAgICAgICBhcnJheUFyZyA9
IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChjb25zdFR5cGUpCi0gICAgICAgIHR5cGUtPnNl
dFF1YWxpZmllcihFdnFDb25zdCk7Ci0KLSAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHR5cGUt
PmdldEFycmF5U2l6ZSgpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewotICAgICAgICBl
cnJvcihsaW5lLCAiYXJyYXkgY29uc3RydWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBlciBhcnJh
eSBlbGVtZW50IiwgImNvbnN0cnVjdG9yIiwgIiIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoYXJyYXlBcmcgJiYgb3AgIT0gRU9wQ29uc3RydWN0U3RydWN0KSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RpbmcgZnJvbSBhIG5vbi1kZXJlZmVyZW5jZWQg
YXJyYXkiLCAiY29uc3RydWN0b3IiLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGlmIChtYXRyaXhJbk1hdHJpeCAmJiAhdHlwZS0+aXNBcnJheSgpKSB7Ci0gICAgICAg
IGlmIChmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkgIT0gMSkgewotICAgICAgICAgIGVycm9yKGxp
bmUsICJjb25zdHJ1Y3RpbmcgbWF0cml4IGZyb20gbWF0cml4IGNhbiBvbmx5IHRha2Ugb25lIGFy
Z3VtZW50IiwgImNvbnN0cnVjdG9yIiwgIiIpOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG92ZXJGdWxsKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICJ0b28gbWFueSBhcmd1bWVudHMiLCAiY29uc3RydWN0b3IiLCAiIik7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYm
ICF0eXBlLT5pc0FycmF5KCkgJiYgdHlwZS0+Z2V0U3RydWN0KCktPnNpemUoKSAhPSBmdW5jdGlv
bi5nZXRQYXJhbUNvdW50KCkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgIk51bWJlciBvZiBjb25z
dHJ1Y3RvciBwYXJhbWV0ZXJzIGRvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJl
IGZpZWxkcyIsICJjb25zdHJ1Y3RvciIsICIiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgaWYgKCF0eXBlLT5pc01hdHJpeCgpKSB7Ci0gICAgICAgIGlmICgob3AgIT0gRU9w
Q29uc3RydWN0U3RydWN0ICYmIHNpemUgIT0gMSAmJiBzaXplIDwgdHlwZS0+Z2V0T2JqZWN0U2l6
ZSgpKSB8fAotICAgICAgICAgICAgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCAmJiBzaXplIDwg
dHlwZS0+Z2V0T2JqZWN0U2l6ZSgpKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgIm5vdCBl
bm91Z2ggZGF0YSBwcm92aWRlZCBmb3IgY29uc3RydWN0aW9uIiwgImNvbnN0cnVjdG9yIiwgIiIp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBUSW50
ZXJtVHlwZWQqIHR5cGVkID0gbm9kZS0+Z2V0QXNUeXBlZCgpOwotICAgIGlmICh0eXBlZCA9PSAw
KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjb25zdHJ1Y3RvciBhcmd1bWVudCBkb2VzIG5vdCBo
YXZlIGEgdHlwZSIsICJjb25zdHJ1Y3RvciIsICIiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgSXNTYW1wbGVyKHR5cGVk
LT5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBjb252ZXJ0
IGEgc2FtcGxlciIsICJjb25zdHJ1Y3RvciIsICIiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGlmICh0eXBlZC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAg
ICBlcnJvcihsaW5lLCAiY2Fubm90IGNvbnZlcnQgYSB2b2lkIiwgImNvbnN0cnVjdG9yIiwgIiIp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LS8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiBhIHZvaWQgdmFyaWFibGUgaGFzIGJl
ZW4gZGVjbGFyZWQgYW5kIHJhaXNlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHN1Y2ggYSBjYXNlCi0v
LwotLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2YgYW4gZXJyb3IKLS8vCi1ib29sIFRQYXJzZUNv
bnRleHQ6OnZvaWRFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVy
LCBjb25zdCBUUHVibGljVHlwZSYgcHViVHlwZSkKLXsKLSAgICBpZiAocHViVHlwZS50eXBlID09
IEVidFZvaWQpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUgJ3Zv
aWQnIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0gCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRv
IHNlZSBpZiB0aGUgbm9kZSAoZm9yIHRoZSBleHByZXNzaW9uKSBjb250YWlucyBhIHNjYWxhciBi
b29sZWFuIGV4cHJlc3Npb24gb3Igbm90Ci0vLwotLy8gcmV0dXJucyB0cnVlIGluIGNhc2Ugb2Yg
YW4gZXJyb3IKLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGludCBsaW5l
LCBjb25zdCBUSW50ZXJtVHlwZWQqIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUtPmdldEJhc2ljVHlw
ZSgpICE9IEVidEJvb2wgfHwgdHlwZS0+aXNBcnJheSgpIHx8IHR5cGUtPmlzTWF0cml4KCkgfHwg
dHlwZS0+aXNWZWN0b3IoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNz
aW9uIGV4cGVjdGVkIiwgIiIsICIiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgdG8gc2VlIGlm
IHRoZSBub2RlIChmb3IgdGhlIGV4cHJlc3Npb24pIGNvbnRhaW5zIGEgc2NhbGFyIGJvb2xlYW4g
ZXhwcmVzc2lvbiBvciBub3QKLS8vCi0vLyByZXR1cm5zIHRydWUgaW4gY2FzZSBvZiBhbiBlcnJv
cgotLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0
IFRQdWJsaWNUeXBlJiBwVHlwZSkKLXsKLSAgICBpZiAocFR5cGUudHlwZSAhPSBFYnRCb29sIHx8
IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAocFR5cGUuc2l6ZSA+IDEpKSB7Ci0gICAg
ICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIiwgIiIpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNrKGludCBsaW5lLCBjb25zdCBUUHVi
bGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLSAgICBpZiAocFR5cGUudHlw
ZSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgaWYgKGNvbnRhaW5zU2FtcGxlcigqcFR5cGUudXNl
ckRlZikpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmco
cFR5cGUudHlwZSksICIoc3RydWN0dXJlIGNvbnRhaW5zIGEgc2FtcGxlcikiKTsKLSAgICAgICAg
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAoSXNTYW1wbGVyKHBUeXBlLnR5cGUpKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSksICIi
KTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGlu
ZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQotewotICAgIGlmICgocFR5cGUucXVhbGlmaWVy
ID09IEV2cVZhcnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBw
VHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgotICAgICAgICBwVHlwZS50eXBlID09
IEVidFN0cnVjdCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBh
IHN0cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpLCAiIik7Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAocFR5cGUucXVh
bGlmaWVyICE9IEV2cVVuaWZvcm0gJiYgc2FtcGxlckVycm9yQ2hlY2sobGluZSwgcFR5cGUsICJz
YW1wbGVycyBtdXN0IGJlIHVuaWZvcm0iKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVy
cm9yQ2hlY2soaW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlw
ZSkKLXsKLSAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQgfHwgcXVhbGlmaWVyID09IEV2cUlu
T3V0KSAmJiAKLSAgICAgICAgICAgICB0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCAm
JiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwg
InNhbXBsZXJzIGNhbm5vdCBiZSBvdXRwdXQgcGFyYW1ldGVycyIsIHR5cGUuZ2V0QmFzaWNTdHJp
bmcoKSwgIiIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6Y29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBl
KQotewotICAgIGlmIChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7
Ci0gICAgICAgIFRUeXBlTGlzdCYgc3RydWN0dXJlID0gKnR5cGUuZ2V0U3RydWN0KCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc3RydWN0dXJlLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoY29udGFpbnNTYW1wbGVyKCpzdHJ1Y3R1cmVbaV0udHlwZSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLS8vCi0vLyBEbyBzaXplIGNoZWNraW5nIGZvciBhbiBhcnJheSB0eXBl
J3Mgc2l6ZS4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8K
LWJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhpbnQgbGluZSwgVEludGVy
bVR5cGVkKiBleHByLCBpbnQmIHNpemUpCi17Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIGNv
bnN0YW50ID0gZXhwci0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgaWYgKGNvbnN0YW50ID09
IDAgfHwgY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEludCkgewotICAgICAgICBlcnJv
cihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHByZXNzaW9u
IiwgIiIsICIiKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc2l6ZSA9IGNv
bnN0YW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsKLQotICAgIGlmIChz
aXplIDw9IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBv
c2l0aXZlIGludGVnZXIiLCAiIiwgIiIpOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gU2VlIGlm
IHRoaXMgcXVhbGlmaWVyIGNhbiBiZSBhbiBhcnJheS4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYg
dGhlcmUgaXMgYW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVF1YWxpZmll
ckVycm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUu
cXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90
IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxl
dGVTdHJpbmcoKS5jX3N0cigpLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCAmJiBleHRlbnNpb25FcnJvckNoZWNr
KGxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8KLS8vIFNlZSBpZiB0aGlzIHR5cGUgY2FuIGJlIGFu
IGFycmF5LgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4KLS8vCi1i
b29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNU
eXBlIHR5cGUpCi17Ci0gICAgLy8KLSAgICAvLyBDYW4gdGhlIHR5cGUgYmUgYW4gYXJyYXk/Ci0g
ICAgLy8KLSAgICBpZiAodHlwZS5hcnJheSkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90
IGRlY2xhcmUgYXJyYXlzIG9mIGFycmF5cyIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRlU3RyaW5n
KCkuY19zdHIoKSwgIiIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLS8vCi0vLyBEbyBhbGwgdGhlIHNlbWFudGljIGNoZWNraW5nIGZvciBk
ZWNsYXJpbmcgYW4gYXJyYXksIHdpdGggYW5kIAotLy8gd2l0aG91dCBhIHNpemUsIGFuZCBtYWtl
IHRoZSByaWdodCBjaGFuZ2VzIHRvIHRoZSBzeW1ib2wgdGFibGUuCi0vLwotLy8gc2l6ZSA9PSAw
IG1lYW5zIG5vIHNwZWNpZmllZCBzaXplLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3
YXMgYW4gZXJyb3IuCi0vLwotYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soaW50
IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSom
IHZhcmlhYmxlKQotewotICAgIC8vCi0gICAgLy8gRG9uJ3QgY2hlY2sgZm9yIHJlc2VydmVkIHdv
cmQgdXNlIHVudGlsIGFmdGVyIHdlIGtub3cgaXQncyBub3QgaW4gdGhlIHN5bWJvbCB0YWJsZSwK
LSAgICAvLyBiZWNhdXNlIHJlc2VydmVkIGFycmF5cyBjYW4gYmUgcmVkZWNsYXJlZC4KLSAgICAv
LwotCi0gICAgYm9vbCBidWlsdEluID0gZmFsc2U7IAotICAgIGJvb2wgc2FtZVNjb3BlID0gZmFs
c2U7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAm
YnVpbHRJbiwgJnNhbWVTY29wZSk7Ci0gICAgaWYgKHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUp
IHsKLSAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgdmFyaWFibGUgPSBuZXcg
VFZhcmlhYmxlKCZpZGVudGlmaWVyLCBUVHlwZSh0eXBlKSk7Ci0KLSAgICAgICAgaWYgKHR5cGUu
YXJyYXlTaXplKQotICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNpemUo
dHlwZS5hcnJheVNpemUpOwotCi0gICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFy
aWFibGUpKSB7Ci0gICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7Ci0gICAgICAgICAgICBlcnJv
cihsaW5lLCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVy
LmNfc3RyKCksICIiKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAg
ICAgIGVycm9yKGxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsIGlkZW50aWZpZXIuY19zdHIoKSwg
IiIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXJp
YWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0gICAgICAgIGlmICghIHZh
cmlhYmxlLT5nZXRUeXBlKCkuaXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAi
cmVkZWNsYXJpbmcgbm9uLWFycmF5IGFzIGFycmF5IiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFyaWFi
bGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIGVycm9yKGxp
bmUsICJyZWRlY2xhcmF0aW9uIG9mIGFycmF5IHdpdGggc2l6ZSIsIGlkZW50aWZpZXIuY19zdHIo
KSwgIiIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmICghIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2FtZUVsZW1lbnRUeXBlKFRUeXBlKHR5
cGUpKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgInJlZGVjbGFyYXRpb24gb2YgYXJyYXkg
d2l0aCBhIGRpZmZlcmVudCB0eXBlIiwgaWRlbnRpZmllci5jX3N0cigpLCAiIik7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFRUeXBlKiB0ID0gdmFyaWFi
bGUtPmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCk7Ci0gICAgICAgIHdoaWxlICh0ICE9IDApIHsK
LSAgICAgICAgICAgIGlmICh0LT5nZXRNYXhBcnJheVNpemUoKSA+IHR5cGUuYXJyYXlTaXplKSB7
Ci0gICAgICAgICAgICAgICAgZXJyb3IobGluZSwgImhpZ2hlciBpbmRleCB2YWx1ZSBhbHJlYWR5
IHVzZWQgZm9yIHRoZSBhcnJheSIsIGlkZW50aWZpZXIuY19zdHIoKSwgIiIpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdC0+c2V0QXJy
YXlTaXplKHR5cGUuYXJyYXlTaXplKTsKLSAgICAgICAgICAgIHQgPSB0LT5nZXRBcnJheUluZm9y
bWF0aW9uVHlwZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGUuYXJyYXlTaXplKQot
ICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRBcnJheVNpemUodHlwZS5hcnJheVNp
emUpOwotICAgIH0gCi0KLSAgICBpZiAodm9pZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllciwg
dHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFRQYXJzZUNvbnRleHQ6OmFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9sICpub2RlLCBU
VHlwZSogdHlwZSwgaW50IHNpemUsIGJvb2wgdXBkYXRlRmxhZywgVFNvdXJjZUxvYyBsaW5lKQot
ewotICAgIGJvb2wgYnVpbHRJbiA9IGZhbHNlOwotICAgIFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJv
bFRhYmxlLmZpbmQobm9kZS0+Z2V0U3ltYm9sKCksICZidWlsdEluKTsKLSAgICBpZiAoc3ltYm9s
ID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiB1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCBu
b2RlLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3lt
Ym9sKTsKLQotICAgIHR5cGUtPnNldEFycmF5SW5mb3JtYXRpb25UeXBlKHZhcmlhYmxlLT5nZXRB
cnJheUluZm9ybWF0aW9uVHlwZSgpKTsKLSAgICB2YXJpYWJsZS0+dXBkYXRlQXJyYXlJbmZvcm1h
dGlvblR5cGUodHlwZSk7Ci0KLSAgICAvLyBzcGVjaWFsIGNhc2luZyB0byB0ZXN0IGluZGV4IHZh
bHVlIG9mIGdsX0ZyYWdEYXRhLiBJZiB0aGUgYWNjZXNzZWQgaW5kZXggaXMgPj0gZ2xfTWF4RHJh
d0J1ZmZlcnMKLSAgICAvLyBpdHMgYW4gZXJyb3IKLSAgICBpZiAobm9kZS0+Z2V0U3ltYm9sKCkg
PT0gImdsX0ZyYWdEYXRhIikgewotICAgICAgICBUU3ltYm9sKiBmcmFnRGF0YSA9IHN5bWJvbFRh
YmxlLmZpbmQoImdsX01heERyYXdCdWZmZXJzIiwgJmJ1aWx0SW4pOwotICAgICAgICBpZiAoZnJh
Z0RhdGEgPT0gMCkgewotICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJ
bnRlcm5hbEVycm9yLCAiZ2xfTWF4RHJhd0J1ZmZlcnMgbm90IGRlZmluZWQiLCBsaW5lKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGZyYWdEYXRh
VmFsdWUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihmcmFnRGF0YSktPmdldENvbnN0UG9pbnRl
cigpWzBdLmdldElDb25zdCgpOwotICAgICAgICBpZiAoZnJhZ0RhdGFWYWx1ZSA8PSBzaXplKSB7
Ci0gICAgICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCAiZ2xfRnJhZ0RhdGEgY2FuIG9ubHkg
aGF2ZSBhIG1heCBhcnJheSBzaXplIG9mIHVwIHRvIGdsX01heERyYXdCdWZmZXJzIiwgIiIpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyB3ZSBk
b250IHdhbnQgdG8gdXBkYXRlIHRoZSBtYXhBcnJheVNpemUgd2hlbiB0aGlzIGZsYWcgaXMgbm90
IHNldCwgd2UganVzdCB3YW50IHRvIGluY2x1ZGUgdGhpcyAKLSAgICAvLyBub2RlIHR5cGUgaW4g
dGhlIGNoYWluIG9mIG5vZGUgdHlwZXMgc28gdGhhdCBpdHMgdXBkYXRlZCB3aGVuIGEgaGlnaGVy
IG1heEFycmF5U2l6ZSBjb21lcyBpbi4KLSAgICBpZiAoIXVwZGF0ZUZsYWcpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHNpemUrKzsKLSAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldE1h
eEFycmF5U2l6ZShzaXplKTsKLSAgICB0eXBlLT5zZXRNYXhBcnJheVNpemUoc2l6ZSk7Ci0gICAg
VFR5cGUqIHR0ID0gdHlwZTsKLQotICAgIHdoaWxlKHR0LT5nZXRBcnJheUluZm9ybWF0aW9uVHlw
ZSgpICE9IDApIHsKLSAgICAgICAgdHQgPSB0dC0+Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKTsK
LSAgICAgICAgdHQtPnNldE1heEFycmF5U2l6ZShzaXplKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLS8vCi0vLyBFbmZvcmNlIG5vbi1pbml0aWFsaXplciB0eXBlL3F1YWxpZmll
ciBydWxlcy4KLS8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotLy8K
LWJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUpCi17Ci0gICAgLy8KLSAgICAvLyBN
YWtlIHRoZSBxdWFsaWZpZXIgbWFrZSBzZW5zZS4KLSAgICAvLwotICAgIGlmICh0eXBlLnF1YWxp
ZmllciA9PSBFdnFDb25zdCkgewotICAgICAgICB0eXBlLnF1YWxpZmllciA9IEV2cVRlbXBvcmFy
eTsKLSAgICAgICAgZXJyb3IobGluZSwgInZhcmlhYmxlcyB3aXRoIHF1YWxpZmllciAnY29uc3Qn
IG11c3QgYmUgaW5pdGlhbGl6ZWQiLCBpZGVudGlmaWVyLmNfc3RyKCksICIiKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLwotLy8gRG8g
c2VtYW50aWMgY2hlY2tpbmcgZm9yIGEgdmFyaWFibGUgZGVjbGFyYXRpb24gdGhhdCBoYXMgbm8g
aW5pdGlhbGl6ZXIsCi0vLyBhbmQgdXBkYXRlIHRoZSBzeW1ib2wgdGFibGUuCi0vLwotLy8gUmV0
dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6
Om5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGlj
VHlwZSYgdHlwZSkKLXsKLSAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZp
ZXIpKQotICAgICAgICByZWNvdmVyKCk7Ci0KLSAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gbmV3
IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkpOwotCi0gICAgaWYgKCEgc3ltYm9s
VGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5p
dGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOwotICAgICAgICBkZWxldGUg
dmFyaWFibGU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICh2b2lkRXJy
b3JDaGVjayhsaW5lLCBpZGVudGlmaWVyLCB0eXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNo
ZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxp
ZmllciwgVFR5cGUqIHR5cGUpCi17ICAgIAotICAgIGlmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3Qg
JiYgcXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICBlcnJvcihsaW5lLCAicXVh
bGlmaWVyIG5vdCBhbGxvd2VkIG9uIGZ1bmN0aW9uIHBhcmFtZXRlciIsIGdldFF1YWxpZmllclN0
cmluZyhxdWFsaWZpZXIpLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBp
ZiAocXVhbGlmaWVyID09IEV2cUNvbnN0ICYmIHBhcmFtUXVhbGlmaWVyICE9IEV2cUluKSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJxdWFsaWZpZXIgbm90IGFsbG93ZWQgd2l0aCAiLCBnZXRRdWFs
aWZpZXJTdHJpbmcocXVhbGlmaWVyKSwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBhcmFtUXVhbGlmaWVy
KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChxdWFsaWZpZXIgPT0g
RXZxQ29uc3QpCi0gICAgICAgIHR5cGUtPnNldFF1YWxpZmllcihFdnFDb25zdFJlYWRPbmx5KTsK
LSAgICBlbHNlCi0gICAgICAgIHR5cGUtPnNldFF1YWxpZmllcihwYXJhbVF1YWxpZmllcik7Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5zaW9uRXJy
b3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogZXh0ZW5zaW9uKQoteyAgICAgICAKLSAgICBp
ZiAoZXh0ZW5zaW9uQmVoYXZpb3JbZXh0ZW5zaW9uXSA9PSBFQmhXYXJuKSB7Ci0gICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgKCJleHRlbnNpb24gIiArIFRTdHJp
bmcoZXh0ZW5zaW9uKSArICIgaXMgYmVpbmcgdXNlZCIpLmNfc3RyKCksIGxpbmUpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChleHRlbnNpb25CZWhhdmlvcltleHRlbnNp
b25dID09IEVCaERpc2FibGUpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImV4dGVuc2lvbiIsIGV4
dGVuc2lvbiwgImlzIGRpc2FibGVkIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8g
Tm9uLUVycm9ycy4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLy8KLS8vIExvb2sg
dXAgYSBmdW5jdGlvbiBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBtYWtlIHN1cmUgaXQg
aXMgYSBmdW5jdGlvbi4KLS8vCi0vLyBSZXR1cm4gdGhlIGZ1bmN0aW9uIHN5bWJvbCBpZiBmb3Vu
ZCwgb3RoZXJ3aXNlIDAuCi0vLwotY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5k
RnVuY3Rpb24oaW50IGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikKLXsKLSAg
ICAvLyBGaXJzdCBmaW5kIGJ5IHVubWFuZ2xlZCBuYW1lIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGZ1
bmN0aW9uIG5hbWUgaGFzIGJlZW4KLSAgICAvLyBoaWRkZW4gYnkgYSB2YXJpYWJsZSBuYW1lIG9y
IHN0cnVjdCB0eXBlbmFtZS4KLSAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJs
ZS5maW5kKGNhbGwtPmdldE5hbWUoKSwgYnVpbHRJbik7Ci0gICAgaWYgKHN5bWJvbCA9PSAwKSB7
Ci0gICAgICAgIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TWFuZ2xlZE5hbWUo
KSwgYnVpbHRJbik7Ci0gICAgfQotCi0gICAgaWYgKHN5bWJvbCA9PSAwKSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5kIiwgY2FsbC0+
Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
aWYgKCFzeW1ib2wtPmlzRnVuY3Rpb24oKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiZnVuY3Rp
b24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBURnVuY3Rp
b24qPihzeW1ib2wpOwotfQotCi0vLwotLy8gSW5pdGlhbGl6ZXJzIHNob3cgdXAgaW4gc2V2ZXJh
bCBwbGFjZXMgaW4gdGhlIGdyYW1tYXIuICBIYXZlIG9uZSBzZXQgb2YKLS8vIGNvZGUgdG8gaGFu
ZGxlIHRoZW0gaGVyZS4KLS8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXpl
cihUU291cmNlTG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlw
ZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQq
IGluaXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFi
bGUpCi17Ci0gICAgVFR5cGUgdHlwZSA9IFRUeXBlKHBUeXBlKTsKLQotICAgIGlmICh2YXJpYWJs
ZSA9PSAwKSB7Ci0gICAgICAgIGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmll
cikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAodm9pZEVycm9yQ2hl
Y2sobGluZSwgaWRlbnRpZmllciwgcFR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gYWRkIHZhcmlhYmxlIHRvIHN5bWJvbCB0YWJsZQotICAg
ICAgICAvLwotICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIHR5
cGUpOwotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgewotICAg
ICAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCku
Y19zdHIoKSwgIiIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAvLyBk
b24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRo
ZSBwb29sIAotICAgICAgICAgICAgLy8gcG9wIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSBtZW1vcnkK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vCi0gICAgLy8gaWRlbnRpZmllciBtdXN0IGJlIG9m
IHR5cGUgY29uc3RhbnQsIGEgZ2xvYmFsLCBvciBhIHRlbXBvcmFyeQotICAgIC8vCi0gICAgVFF1
YWxpZmllciBxdWFsaWZpZXIgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpOwot
ICAgIGlmICgocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgJiYgKHF1YWxpZmllciAhPSBFdnFH
bG9iYWwpICYmIChxdWFsaWZpZXIgIT0gRXZxQ29uc3QpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUs
ICIgY2Fubm90IGluaXRpYWxpemUgdGhpcyB0eXBlIG9mIHF1YWxpZmllciAiLCB2YXJpYWJsZS0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllclN0cmluZygpLCAiIik7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICAvLwotICAgIC8vIHRlc3QgZm9yIGFuZCBwcm9wYWdhdGUgY29uc3RhbnQK
LSAgICAvLwotCi0gICAgaWYgKHF1YWxpZmllciA9PSBFdnFDb25zdCkgewotICAgICAgICBpZiAo
cXVhbGlmaWVyICE9IGluaXRpYWxpemVyLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkpIHsKLSAg
ICAgICAgICAgIGVycm9yKGxpbmUsICIgYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byIsICI9Iiwg
IiclcyciLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7
Ci0gICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3Jh
cnkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5
cGUgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwg
IiBub24tbWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRpYWxpemVyICIsIAotICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKLSAg
ICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5pdGlh
bGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7IAotICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biogdW5pb25BcnJheSA9IHZhcmlhYmxlLT5nZXRDb25zdFBvaW50ZXIoKTsKLQotICAgICAgICAg
ICAgaWYgKHR5cGUuZ2V0T2JqZWN0U2l6ZSgpID09IDEgJiYgdHlwZS5nZXRCYXNpY1R5cGUoKSAh
PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgICAgICAqdW5pb25BcnJheSA9IChpbml0aWFsaXpl
ci0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCkpWzBdOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS0+c2hhcmVDb25zdFBv
aW50ZXIoaW5pdGlhbGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplci0+
Z2V0QXNTeW1ib2xOb2RlKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9
IHN5bWJvbFRhYmxlLmZpbmQoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1i
b2woKSk7Ci0gICAgICAgICAgICBjb25zdCBUVmFyaWFibGUqIHRWYXIgPSBzdGF0aWNfY2FzdDxj
b25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwotCi0gICAgICAgICAgICBDb25zdGFudFVuaW9uKiBj
b25zdEFycmF5ID0gdFZhci0+Z2V0Q29uc3RQb2ludGVyKCk7Ci0gICAgICAgICAgICB2YXJpYWJs
ZS0+c2hhcmVDb25zdFBvaW50ZXIoY29uc3RBcnJheSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBhc3NpZ24gdG8iLCAiPSIsICInJXMnIiwgdmFy
aWFibGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwotICAgICAgICAg
ICAgdmFyaWFibGUtPmdldFR5cGUoKS5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotIAotICAgIGlmIChxdWFsaWZp
ZXIgIT0gRXZxQ29uc3QpIHsKLSAgICAgICAgVEludGVybVN5bWJvbCogaW50ZXJtU3ltYm9sID0g
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwgdmFyaWFibGUt
PmdldE5hbWUoKSwgdmFyaWFibGUtPmdldFR5cGUoKSwgbGluZSk7Ci0gICAgICAgIGludGVybU5v
ZGUgPSBpbnRlcm1lZGlhdGUuYWRkQXNzaWduKEVPcEluaXRpYWxpemUsIGludGVybVN5bWJvbCwg
aW5pdGlhbGl6ZXIsIGxpbmUpOwotICAgICAgICBpZiAoaW50ZXJtTm9kZSA9PSAwKSB7Ci0gICAg
ICAgICAgICBhc3NpZ25FcnJvcihsaW5lLCAiPSIsIGludGVybVN5bWJvbC0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgaW5pdGlhbGl6ZXItPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgCi0gICAgICAgIGludGVybU5vZGUg
PSAwOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRQYXJzZUNvbnRleHQ6OmFyZUFs
bENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpCi17Ci0gICAgaWYgKCFhZ2dy
Tm9kZS0+aXNDb25zdHJ1Y3RvcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29s
IGFsbENvbnN0YW50ID0gdHJ1ZTsKLQotICAgIC8vIGNoZWNrIGlmIGFsbCB0aGUgY2hpbGQgbm9k
ZXMgYXJlIGNvbnN0YW50cyBzbyB0aGF0IHRoZXkgY2FuIGJlIGluc2VydGVkIGludG8gCi0gICAg
Ly8gdGhlIHBhcmVudCBub2RlCi0gICAgaWYgKGFnZ3JOb2RlKSB7Ci0gICAgICAgIFRJbnRlcm1T
ZXF1ZW5jZSAmY2hpbGRTZXF1ZW5jZVZlY3RvciA9IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpIDsK
LSAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBjaGlsZFNlcXVlbmNl
VmVjdG9yLmJlZ2luKCk7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAh
PSBjaGlsZFNlcXVlbmNlVmVjdG9yLmVuZCgpOyBwKyspIHsKLSAgICAgICAgICAgIGlmICghKCpw
KS0+Z2V0QXNUeXBlZCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gYWxsQ29uc3RhbnQ7
Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0ZXN0IGZvciB0aGUgY29ycmVjdG5l
c3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHZhcmlvdXMgY29uc3RydWN0b3IgZnVuY3Rp
b25zCi0vLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0gdG8gdGhlIHJpZ2h0IGRhdGF0eXBlIGlmIGl0
IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKLS8vCi0vLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9y
IG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dyZWdhdGUgb3IgdHlwZWQpIGZvciBubyBlcnJv
ci4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0cnVjdG9yKFRJbnRl
cm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9wLCBURnVuY3Rpb24q
IGZuQ2FsbCwgVFNvdXJjZUxvYyBsaW5lKQotewotICAgIGlmIChub2RlID09IDApCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUgPSBub2RlLT5nZXRB
c0FnZ3JlZ2F0ZSgpOwotICAgIAotICAgIFRUeXBlTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVy
VHlwZXM7Ci0gICAgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAgbWVtYmVy
VHlwZXMgPSB0eXBlLT5nZXRTdHJ1Y3QoKS0+YmVnaW4oKTsKLSAgICAKLSAgICBUVHlwZSBlbGVt
ZW50VHlwZSA9ICp0eXBlOwotICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCi0gICAgICAgIGVsZW1l
bnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7Ci0KLSAgICBib29sIHNpbmdsZUFyZzsKLSAgICBpZiAo
YWdnck5vZGUpIHsKLSAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwgfHwg
YWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpCi0gICAgICAgICAgICBzaW5nbGVB
cmcgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaW5nbGVBcmcgPSBmYWxzZTsK
LSAgICB9IGVsc2UKLSAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKLQotICAgIFRJbnRlcm1UeXBl
ZCAqbmV3Tm9kZTsKLSAgICBpZiAoc2luZ2xlQXJnKSB7Ci0gICAgICAgIC8vIElmIHN0cnVjdHVy
ZSBjb25zdHJ1Y3RvciBvciBhcnJheSBjb25zdHJ1Y3RvciBpcyBiZWluZyBjYWxsZWQgCi0gICAg
ICAgIC8vIGZvciBvbmx5IG9uZSBwYXJhbWV0ZXIgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUsIHdlIG5l
ZWQgdG8gY2FsbCBjb25zdHJ1Y3RTdHJ1Y3QgZnVuY3Rpb24gb25jZS4KLSAgICAgICAgaWYgKHR5
cGUtPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9k
ZSwgJmVsZW1lbnRUeXBlLCAxLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKLSAgICAgICAgZWxz
ZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNv
bnN0cnVjdFN0cnVjdChub2RlLCAoKm1lbWJlclR5cGVzKS50eXBlLCAxLCBub2RlLT5nZXRMaW5l
KCksIGZhbHNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVj
dEJ1aWx0SW4odHlwZSwgb3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOwotCi0gICAg
ICAgIGlmIChuZXdOb2RlICYmIG5ld05vZGUtPmdldEFzQWdncmVnYXRlKCkpIHsKLSAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1Y3RvciA9IGZvbGRDb25zdENvbnN0cnVjdG9y
KG5ld05vZGUtPmdldEFzQWdncmVnYXRlKCksICp0eXBlKTsKLSAgICAgICAgICAgIGlmIChjb25z
dENvbnN0cnVjdG9yKQotICAgICAgICAgICAgICAgIHJldHVybiBjb25zdENvbnN0cnVjdG9yOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ld05vZGU7Ci0gICAgfQotICAgIAotICAgIC8v
Ci0gICAgLy8gSGFuZGxlIGxpc3Qgb2YgYXJndW1lbnRzLgotICAgIC8vCi0gICAgVEludGVybVNl
cXVlbmNlICZzZXF1ZW5jZVZlY3RvciA9IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpIDsgICAgLy8g
U3RvcmVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1
Y3RvcgotICAgIC8vIGlmIHRoZSBzdHJ1Y3R1cmUgY29uc3RydWN0b3IgY29udGFpbnMgbW9yZSB0
aGFuIG9uZSBwYXJhbWV0ZXIsIHRoZW4gY29uc3RydWN0Ci0gICAgLy8gZWFjaCBwYXJhbWV0ZXIK
LSAgICAKLSAgICBpbnQgcGFyYW1Db3VudCA9IDA7ICAvLyBrZWVwcyBhIHRyYWNrIG9mIHRoZSBj
b25zdHJ1Y3RvciBwYXJhbWV0ZXIgbnVtYmVyIGJlaW5nIGNoZWNrZWQgICAgCi0gICAgCi0gICAg
Ly8gZm9yIGVhY2ggcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciBjYWxsLCBjaGVjayB0byBz
ZWUgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkIG9yIGNvbnZlcnQgdGhlbSAKLSAgICAvLyB0
byB0aGUgcmlnaHQgdHlwZSBpZiBwb3NzaWJsZSAoYW5kIGFsbG93ZWQpLgotICAgIC8vIGZvciBz
dHJ1Y3R1cmUgY29uc3RydWN0b3JzLCBqdXN0IGNoZWNrIGlmIHRoZSByaWdodCB0eXBlIGlzIHBh
c3NlZCwgbm8gY29udmVyc2lvbiBpcyBhbGxvd2VkLgotICAgIAotICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjppdGVyYXRvciBwID0gc2VxdWVuY2VWZWN0b3IuYmVnaW4oKTsgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gc2VxdWVuY2VWZWN0b3IuZW5kKCk7IHArKywg
cGFyYW1Db3VudCsrKSB7Ci0gICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCi0gICAgICAgICAg
ICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAmZWxlbWVudFR5cGUsIHBhcmFtQ291bnQr
MSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKLSAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29u
c3RydWN0U3RydWN0KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwg
KG1lbWJlclR5cGVzW3BhcmFtQ291bnRdKS50eXBlLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExp
bmUoKSwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1
Y3RCdWlsdEluKHR5cGUsIG9wLCAqcCwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChuZXdOb2RlKSB7Ci0gICAgICAgICAgICAqcCA9IG5ld05vZGU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVjdG9yID0gaW50ZXJtZWRp
YXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKGFnZ3JOb2RlLCBvcCwgbGluZSk7Ci0gICAgVEludGVy
bVR5cGVkKiBjb25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IoY29uc3RydWN0
b3ItPmdldEFzQWdncmVnYXRlKCksICp0eXBlKTsKLSAgICBpZiAoY29uc3RDb25zdHJ1Y3RvcikK
LSAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7Ci0KLSAgICByZXR1cm4gY29uc3RydWN0
b3I7Ci19Ci0KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Zm9sZENvbnN0Q29uc3RydWN0
b3IoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKQotewotICAg
IGJvb2wgY2FuQmVGb2xkZWQgPSBhcmVBbGxDaGlsZENvbnN0KGFnZ3JOb2RlKTsKLSAgICBhZ2dy
Tm9kZS0+c2V0VHlwZSh0eXBlKTsKLSAgICBpZiAoY2FuQmVGb2xkZWQpIHsKLSAgICAgICAgYm9v
bCByZXR1cm5WYWwgPSBmYWxzZTsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW3R5cGUuZ2V0T2JqZWN0U2l6ZSgpXTsKLSAgICAgICAgaWYgKGFn
Z3JOb2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxKSAgewotICAgICAgICAgICAgcmV0dXJu
VmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFn
Z3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgc3ltYm9sVGFibGUsICB0eXBl
LCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVyblZh
bCA9IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dy
Tm9kZSwgdW5pb25BcnJheSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJldHVyblZhbCkKLSAgICAgICAgICAgIHJldHVybiAw
OwotCi0gICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCB0eXBlLCBhZ2dyTm9kZS0+Z2V0TGluZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotLy8gRnVuY3Rpb24gZm9yIGNvbnN0cnVjdG9yIGltcGxlbWVudGF0aW9uLiBDYWxscyBh
ZGRVbmFyeU1hdGggd2l0aCBhcHByb3ByaWF0ZSBFT3AgdmFsdWUKLS8vIGZvciB0aGUgcGFyYW1l
dGVyIHRvIHRoZSBjb25zdHJ1Y3RvciAocGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24pLiBFc3NlbnRp
YWxseSwgaXQgY29udmVydHMKLS8vIHRoZSBwYXJhbWV0ZXIgdHlwZXMgY29ycmVjdGx5LiBJZiBh
IGNvbnN0cnVjdG9yIGV4cGVjdHMgYW4gaW50IChsaWtlIGl2ZWMyKSBhbmQgaXMgcGFzc2VkIGEg
Ci0vLyBmbG9hdCwgdGhlbiBmbG9hdCBpcyBjb252ZXJ0ZWQgdG8gaW50LgotLy8KLS8vIFJldHVy
bnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUuCi0vLwotVEludGVybVR5
cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiB0eXBlLCBU
T3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBub2RlLCBUU291cmNlTG9jIGxpbmUsIGJvb2wgc3Vi
c2V0KQotewotICAgIFRJbnRlcm1UeXBlZCogbmV3Tm9kZTsKLSAgICBUT3BlcmF0b3IgYmFzaWNP
cDsKLQotICAgIC8vCi0gICAgLy8gRmlyc3QsIGNvbnZlcnQgdHlwZXMgYXMgbmVlZGVkLgotICAg
IC8vCi0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKLSAgICBj
YXNlIEVPcENvbnN0cnVjdFZlYzM6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgotICAgIGNh
c2UgRU9wQ29uc3RydWN0TWF0MjoKLSAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6Ci0gICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQ0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6Ci0gICAgICAg
IGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEVPcENvbnN0cnVjdElWZWMyOgotICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6Ci0gICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RJVmVjNDoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKLSAgICAgICAg
YmFzaWNPcCA9IEVPcENvbnN0cnVjdEludDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEVP
cENvbnN0cnVjdEJWZWMyOgotICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6Ci0gICAgY2FzZSBF
T3BDb25zdHJ1Y3RCVmVjNDoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAgICAgIGJh
c2ljT3AgPSBFT3BDb25zdHJ1Y3RCb29sOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIiwgIiIp
OwotICAgICAgICByZWNvdmVyKCk7Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIG5l
d05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdl
dExpbmUoKSwgc3ltYm9sVGFibGUpOwotICAgIGlmIChuZXdOb2RlID09IDApIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiLCAiIik7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gTm93LCBpZiB0aGVyZSBzdGlsbCBp
c24ndCBhbiBvcGVyYXRpb24gdG8gZG8gdGhlIGNvbnN0cnVjdGlvbiwgYW5kIHdlIG5lZWQgb25l
LCBhZGQgb25lLgotICAgIC8vCi0gICAgCi0gICAgLy8gT3RoZXJ3aXNlLCBza2lwIG91dCBlYXJs
eS4KLSAgICBpZiAoc3Vic2V0IHx8IChuZXdOb2RlICE9IG5vZGUgJiYgbmV3Tm9kZS0+Z2V0VHlw
ZSgpID09ICp0eXBlKSkKLSAgICAgICAgcmV0dXJuIG5ld05vZGU7Ci0KLSAgICAvLyBzZXRBZ2dy
ZWdhdGVPcGVyYXRvciB3aWxsIGluc2VydCBhIG5ldyBub2RlIGZvciB0aGUgY29uc3RydWN0b3Is
IGFzIG5lZWRlZC4KLSAgICByZXR1cm4gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9y
KG5ld05vZGUsIG9wLCBsaW5lKTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiB0ZXN0cyBmb3IgdGhl
IHR5cGUgb2YgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHN0cnVjdHVyZXMgY29uc3RydWN0b3JzLiBS
YWlzZXMKLS8vIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGV4cGVjdGVkIHR5cGUgZG9lcyBub3Qg
bWF0Y2ggdGhlIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgotLy8KLS8vIFJl
dHVybnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGlucHV0IG5vZGUgaXRzZWxmIGlmIHRoZSBleHBl
Y3RlZCBhbmQgdGhlIGdpdmVuIHBhcmFtZXRlciB0eXBlcyBtYXRjaC4KLS8vCi1USW50ZXJtVHlw
ZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdFN0cnVjdChUSW50ZXJtTm9kZSogbm9kZSwgVFR5
cGUqIHR5cGUsIGludCBwYXJhbUNvdW50LCBUU291cmNlTG9jIGxpbmUsIGJvb2wgc3Vic2V0KQot
ewotICAgIGlmICgqdHlwZSA9PSBub2RlLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKSkgewotICAg
ICAgICBpZiAoc3Vic2V0KQotICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmdldEFzVHlwZWQoKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdh
dGVPcGVyYXRvcihub2RlLT5nZXRBc1R5cGVkKCksIEVPcENvbnN0cnVjdFN0cnVjdCwgbGluZSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGluZSwgIiIsICJjb25zdHJ1Y3RvciIsICJj
YW5ub3QgY29udmVydCBwYXJhbWV0ZXIgJWQgZnJvbSAnJXMnIHRvICclcyciLCBwYXJhbUNvdW50
LAotICAgICAgICAgICAgICAgIG5vZGUtPmdldEFzVHlwZWQoKS0+Z2V0VHlwZSgpLmdldEJhc2lj
U3RyaW5nKCksIHR5cGUtPmdldEJhc2ljU3RyaW5nKCkpOwotICAgICAgICByZWNvdmVyKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vCi0vLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMg
dGhlIHRyZWUgcmVwcmVzZW50YXRpb24gZm9yIHRoZSB2ZWN0b3IgZmllbGQocykgYmVpbmcgYWNj
ZXNzZWQgZnJvbSBjb250YW50IHZlY3Rvci4KLS8vIElmIG9ubHkgb25lIGNvbXBvbmVudCBvZiB2
ZWN0b3IgaXMgYWNjZXNzZWQgKHYueCBvciB2WzBdIHdoZXJlIHYgaXMgYSBjb250YW50IHZlY3Rv
ciksIHRoZW4gYSBjb250YW50IG5vZGUgaXMKLS8vIHJldHVybmVkLCBlbHNlIGFuIGFnZ3JlZ2F0
ZSBub2RlIGlzIHJldHVybmVkIChmb3Igdi54eSkuIFRoZSBpbnB1dCB0byB0aGlzIGZ1bmN0aW9u
IGNvdWxkIGVpdGhlciBiZSB0aGUgc3ltYm9sCi0vLyBub2RlIG9yIGl0IGNvdWxkIGJlIHRoZSBp
bnRlcm1lZGlhdGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiBhY2Nlc3NpbmcgZmllbGRzIGluIGEg
Y29uc3RhbnQgc3RydWN0dXJlIG9yIGNvbHVtbiBvZiAKLS8vIGEgY29uc3RhbnQgbWF0cml4Lgot
Ly8KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0
b3JGaWVsZHMmIGZpZWxkcywgVEludGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxpbmUpCi17
Ci0gICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24q
IHRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQotICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXk7Ci0gICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKLSAg
ICAgICAgdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7Ci0KLSAgICAgICAgaWYgKCF1bmlvbkFycmF5KSB7ICAvLyB0aGlzIGVycm9yIG1lc3NhZ2Ug
c2hvdWxkIG5ldmVyIGJlIHJhaXNlZAotICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiQ29uc3RhbnRVbmlvbiBub3QgaW5pdGlhbGl6ZWQgaW4g
YWRkQ29uc3RWZWN0b3JOb2RlIGZ1bmN0aW9uIiwgbGluZSk7Ci0gICAgICAgICAgICByZWNvdmVy
KCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsg
Ly8gVGhlIG5vZGUgaGFzIHRvIGJlIGVpdGhlciBhIHN5bWJvbCBub2RlIG9yIGFuIGFnZ3JlZ2F0
ZSBub2RlIG9yIGEgdGVtcENvbnN0YW50IG5vZGUsIGVsc2UsIGl0cyBhbiBlcnJvcgotICAgICAg
ICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSB2ZWN0b3IiLCAiRXJyb3IiLCAi
Iik7Ci0gICAgICAgIHJlY292ZXIoKTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZmllbGRzLm51
bV07Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5udW07IGkrKykgewotICAgICAg
ICBpZiAoZmllbGRzLm9mZnNldHNbaV0gPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUo
KSkgewotICAgICAgICAgICAgZXJyb3IobGluZSwgIiIsICJbIiwgInZlY3RvciBmaWVsZCBzZWxl
Y3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCBmaWVsZHMub2Zmc2V0c1tpXSk7Ci0gICAgICAgICAg
ICByZWNvdmVyKCk7Ci0gICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1tpXSA9IDA7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ZpZWxkcy5v
ZmZzZXRzW2ldXTsKLQotICAgIH0gCi0gICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24oY29uc3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKLSAgICByZXR1
cm4gdHlwZWROb2RlOwotfQotCi0vLwotLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb2x1
bW4gYmVpbmcgYWNjZXNzZWQgZnJvbSBhIGNvbnN0YW50IG1hdHJpeC4gVGhlIHZhbHVlcyBhcmUg
cmV0cmlldmVkIGZyb20KLS8vIHRoZSBzeW1ib2wgdGFibGUgYW5kIHBhcnNlLXRyZWUgaXMgYnVp
bHQgZm9yIGEgdmVjdG9yIChlYWNoIGNvbHVtbiBvZiBhIG1hdHJpeCBpcyBhIHZlY3RvcikuIFRo
ZSBpbnB1dCAKLS8vIHRvIHRoZSBmdW5jdGlvbiBjb3VsZCBlaXRoZXIgYmUgYSBzeW1ib2wgbm9k
ZSAobVswXSB3aGVyZSBtIGlzIGEgY29uc3RhbnQgbWF0cml4KXRoYXQgcmVwcmVzZW50cyBhIAot
Ly8gY29uc3RhbnQgbWF0cml4IG9yIGl0IGNvdWxkIGJlIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSBjb25zdGFudCBtYXRyaXggKHMubTFbMF0gd2hlcmUgcyBpcyBhIGNvbnN0YW50IHN0
cnVjdHVyZSkKLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0cml4
Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFNvdXJjZUxvYyBsaW5lKQotewot
ICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0
ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICBpZiAo
aW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgZXJy
b3IobGluZSwgIiIsICJbIiwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICcl
ZCciLCBpbmRleCk7Ci0gICAgICAgIHJlY292ZXIoKTsKLSAgICAgICAgaW5kZXggPSAwOwotICAg
IH0KLQotICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBDb25zdGFudFVuaW9u
KiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsK
LSAgICAgICAgIGludCBzaXplID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE5vbWlu
YWxTaXplKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbigmdW5pb25BcnJheVtzaXplKmluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgp
LCBsaW5lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNl
dCBpbnRvIHRoZSBtYXRyaXgiLCAiRXJyb3IiLCAiIik7Ci0gICAgICAgIHJlY292ZXIoKTsKLQot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHlwZWROb2RlOwotfQotCi0K
LS8vCi0vLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZWxlbWVudCBvZiBhbiBhcnJheSBhY2Nl
c3NlZCBmcm9tIGEgY29uc3RhbnQgYXJyYXkuIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9t
Ci0vLyB0aGUgc3ltYm9sIHRhYmxlIGFuZCBwYXJzZS10cmVlIGlzIGJ1aWx0IGZvciB0aGUgdHlw
ZSBvZiB0aGUgZWxlbWVudC4gVGhlIGlucHV0IAotLy8gdG8gdGhlIGZ1bmN0aW9uIGNvdWxkIGVp
dGhlciBiZSBhIHN5bWJvbCBub2RlIChhWzBdIHdoZXJlIGEgaXMgYSBjb25zdGFudCBhcnJheSl0
aGF0IHJlcHJlc2VudHMgYSAKLS8vIGNvbnN0YW50IGFycmF5IG9yIGl0IGNvdWxkIGJlIHRoZSB0
cmVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25zdGFudCBhcnJheSAocy5hMVswXSB3aGVyZSBz
IGlzIGEgY29uc3RhbnQgc3RydWN0dXJlKQotLy8KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4
dDo6YWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTb3Vy
Y2VMb2MgbGluZSkKLXsKLSAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9kZTsKLSAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlv
bigpOwotICAgIFRUeXBlIGFycmF5RWxlbWVudFR5cGUgPSBub2RlLT5nZXRUeXBlKCk7Ci0gICAg
YXJyYXlFbGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygpOwotCi0gICAgaWYgKGluZGV4ID49IG5v
ZGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgewotICAgICAgICBlcnJvcihsaW5lLCAiIiwg
IlsiLCAiYXJyYXkgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgaW5kZXgpOwot
ICAgICAgICByZWNvdmVyKCk7Ci0gICAgICAgIGluZGV4ID0gMDsKLSAgICB9Ci0KLSAgICBpbnQg
YXJyYXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOwotCi0g
ICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKLSAgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9u
QXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAg
ICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlb
YXJyYXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBs
aW5lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBp
bnRvIHRoZSBhcnJheSIsICJFcnJvciIsICIiKTsKLSAgICAgICAgcmVjb3ZlcigpOwotCi0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiB0eXBlZE5vZGU7Ci19Ci0KLQotLy8K
LS8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgb2YgYSBwYXJ0aWN1bGFyIGZpZWxk
IGluc2lkZSBhIGNvbnN0YW50IHN0cnVjdHVyZSBmcm9tIHRoZSBzeW1ib2wgdGFibGUuIAotLy8g
SWYgdGhlcmUgaXMgYW4gZW1iZWRkZWQvbmVzdGVkIHN0cnVjdCwgaXQgYXBwcm9wcmlhdGVseSBj
YWxscyBhZGRDb25zdFN0cnVjdE5lc3RlZCBvciBhZGRDb25zdFN0cnVjdEZyb21BZ2dyCi0vLyBm
dW5jdGlvbiBhbmQgcmV0dXJucyB0aGUgcGFyc2UtdHJlZSB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhl
IGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QuCi0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0
OjphZGRDb25zdFN0cnVjdChUU3RyaW5nJiBpZGVudGlmaWVyLCBUSW50ZXJtVHlwZWQqIG5vZGUs
IFRTb3VyY2VMb2MgbGluZSkKLXsKLSAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9IG5vZGUt
PmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKLSAgICBUSW50ZXJtVHlwZWQgKnR5cGVkTm9kZTsKLSAg
ICBpbnQgaW5zdGFuY2VTaXplID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOwotICAg
IFRJbnRlcm1Db25zdGFudFVuaW9uICp0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25z
dGFudFVuaW9uKCk7Ci0KLSAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgZmllbGRzLT5zaXpl
KCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKCgqZmllbGRzKVtpbmRleF0udHlwZS0+Z2V0Rmll
bGROYW1lKCkgPT0gaWRlbnRpZmllcikgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpbnN0YW5jZVNpemUgKz0gKCpmaWVsZHMpW2luZGV4XS50eXBl
LT5nZXRPYmplY3RTaXplKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodGVtcENvbnN0
YW50Tm9kZSkgewotICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRlbXBDb25z
dGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0KLSAgICAgICAgIHR5cGVkTm9kZSA9
IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0
ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdl
ZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIsICIiKTsKLSAg
ICAgICAgcmVjb3ZlcigpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVy
biB0eXBlZE5vZGU7Ci19Ci0KLS8vCi0vLyBJbml0aWFsaXplIGFsbCBzdXBwb3J0ZWQgZXh0ZW5z
aW9ucyB0byBkaXNhYmxlCi0vLwotdm9pZCBUUGFyc2VDb250ZXh0Ojppbml0aWFsaXplRXh0ZW5z
aW9uQmVoYXZpb3IoKQotewotICAgIC8vCi0gICAgLy8gZXhhbXBsZSBjb2RlOiBleHRlbnNpb25C
ZWhhdmlvclsidGVzdCJdID0gRUJoRGlzYWJsZTsgLy8gd2hlcmUgInRlc3QiIGlzIHRoZSBuYW1l
IG9mIAotICAgIC8vIHN1cHBvcnRlZCBleHRlbnNpb24KLSAgICAvLwotICAgIGV4dGVuc2lvbkJl
aGF2aW9yWyJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiXSA9IEVCaFJlcXVpcmU7Ci0gICAgZXh0
ZW5zaW9uQmVoYXZpb3JbIkdMXzNETF9hcnJheV9vYmplY3RzIl0gPSBFQmhEaXNhYmxlOwotfQot
Ci1PU19UTFNJbmRleCBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lO
REVYOwotCi1ib29sIEluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpCi17Ci0gICAgaWYgKEds
b2JhbFBhcnNlQ29udGV4dEluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAg
IGFzc2VydCgwICYmICJJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4
dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vCi0gICAgLy8gQWxsb2NhdGUgYSBUTFMgaW5kZXguCi0gICAgLy8KLSAgICBHbG9iYWxQ
YXJzZUNvbnRleHRJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKTsKLSAgICAKLSAgICBpZiAoR2xv
YmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAg
YXNzZXJ0KDAgJiYgIkluaXRpYWxpemVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0
IGFscmVhZHkgaW5pdGFsaXNlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRnJlZVBhcnNlQ29udGV4dEluZGV4KCkKLXsKLSAg
ICBPU19UTFNJbmRleCB0bHNpSW5kZXggPSBHbG9iYWxQYXJzZUNvbnRleHRJbmRleDsKLQotICAg
IGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewot
ICAgICAgICBhc3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRl
eHQgaW5kZXggbm90IGluaXRhbGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci0K
LSAgICByZXR1cm4gT1NfRnJlZVRMU0luZGV4KHRsc2lJbmRleCk7Ci19Ci0KLWJvb2wgSW5pdGlh
bGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpCi17Ci0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dElu
ZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0
aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk6IFBhcnNlIENvbnRleHQgaW5kZXggbm90IGluaXRh
bGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFRUaHJlYWRQYXJz
ZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4
dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotICAgIGlmIChs
cFBhcnNlQ29udGV4dCAhPSAwKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplUGFy
c2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBhbHJlYWR5IGluaXRhbGlzZWQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxw
VGhyZWFkRGF0YSA9IG5ldyBUVGhyZWFkUGFyc2VDb250ZXh0KCk7Ci0gICAgaWYgKGxwVGhyZWFk
RGF0YSA9PSAwKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJJbml0aWFsaXplR2xvYmFsUGFyc2VD
b250ZXh0KCk6IFVuYWJsZSB0byBjcmVhdGUgdGhyZWFkIHBhcnNlIGNvbnRleHQiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGxwVGhyZWFkRGF0YS0+bHBHbG9iYWxQYXJz
ZUNvbnRleHQgPSAwOwotICAgIE9TX1NldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4
LCBscFRocmVhZERhdGEpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRnJlZVBhcnNl
Q29udGV4dCgpCi17Ci0gICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFM
SURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0KCk6
IFBhcnNlIENvbnRleHQgaW5kZXggbm90IGluaXRhbGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0g
c3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQ
YXJzZUNvbnRleHRJbmRleCkpOwotICAgIGlmIChscFBhcnNlQ29udGV4dCkKLSAgICAgICAgZGVs
ZXRlIGxwUGFyc2VDb250ZXh0OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVRQYXJzZUNvbnRl
eHRQb2ludGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQotewotICAgIC8vCi0gICAgLy8gTWlu
aW1hbCBlcnJvciBjaGVja2luZyBmb3Igc3BlZWQKLSAgICAvLwotCi0gICAgVFRocmVhZFBhcnNl
Q29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0
ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0KLSAgICByZXR1
cm4gbHBQYXJzZUNvbnRleHQtPmxwR2xvYmFsUGFyc2VDb250ZXh0OwotfQotCkluZGV4OiBBTkdM
RS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvUGFyc2VIZWxwZXIuaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvUGFyc2VIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjMgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLSNpZm5kZWYgX1BBUlNFUl9IRUxQRVJfSU5DTFVERURfCi0jZGVmaW5lIF9Q
QVJTRVJfSEVMUEVSX0lOQ0xVREVEXwotCi0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIK
LSNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2xv
Y2FsaW50ZXJtZWRpYXRlLmgiCi0KLXN0cnVjdCBUTWF0cml4RmllbGRzIHsKLSAgICBib29sIHdo
b2xlUm93OwotICAgIGJvb2wgd2hvbGVDb2w7Ci0gICAgaW50IHJvdzsKLSAgICBpbnQgY29sOwot
fTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgICBFQmhSZXF1aXJlLAotICAgIEVCaEVuYWJsZSwKLSAg
ICBFQmhXYXJuLAotICAgIEVCaERpc2FibGUKLX0gVEJlaGF2aW9yOwotCi1zdHJ1Y3QgVFByYWdt
YSB7Ci0gICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwgZGVidWcoZCkg
eyB9Ci0gICAgYm9vbCBvcHRpbWl6ZTsKLSAgICBib29sIGRlYnVnOwotICAgIFRQcmFnbWFUYWJs
ZSBwcmFnbWFUYWJsZTsKLX07Ci0KLS8vCi0vLyBUaGUgZm9sbG93aW5nIGFyZSBleHRyYSB2YXJp
YWJsZXMgbmVlZGVkIGR1cmluZyBwYXJzaW5nLCBncm91cGVkIHRvZ2V0aGVyIHNvCi0vLyB0aGV5
IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBhcnNlciB3aXRob3V0IG5lZWRpbmcgYSBnbG9iYWwuCi0v
Lwotc3RydWN0IFRQYXJzZUNvbnRleHQgewotICAgIFRQYXJzZUNvbnRleHQoVFN5bWJvbFRhYmxl
JiBzeW10LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIEVTaExhbmd1YWdlIGwsIEVTaFNwZWMgcywg
VEluZm9TaW5rJiBpcykgOgotICAgICAgICAgICAgaW50ZXJtZWRpYXRlKGludGVybSksIHN5bWJv
bFRhYmxlKHN5bXQpLCBpbmZvU2luayhpcyksIGxhbmd1YWdlKGwpLCBzcGVjKHMpLCB0cmVlUm9v
dCgwKSwKLSAgICAgICAgICAgIHJlY292ZXJlZEZyb21FcnJvcihmYWxzZSksIG51bUVycm9ycygw
KSwgbGV4QWZ0ZXJUeXBlKGZhbHNlKSwgbG9vcE5lc3RpbmdMZXZlbCgwKSwKLSAgICAgICAgICAg
IGluVHlwZVBhcmVuKGZhbHNlKSwgY29udGV4dFByYWdtYSh0cnVlLCBmYWxzZSkgeyAgfQotICAg
IFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJz
ZSB0cmVlCi0gICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1ib2wgdGFibGUg
dGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKLSAgICBU
SW5mb1NpbmsmIGluZm9TaW5rOwotICAgIEVTaExhbmd1YWdlIGxhbmd1YWdlOyAgICAgICAgLy8g
dmVydGV4IG9yIGZyYWdtZW50IGxhbmd1YWdlIChmdXR1cmU6IHBhY2sgb3IgdW5wYWNrKQotICAg
IEVTaFNwZWMgc3BlYzsgICAgICAgICAgICAgICAgLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRp
b24gY29tcGlsZXIgY29uZm9ybXMgdG8gLSBHTEVTMiBvciBXZWJHTC4KLSAgICBUSW50ZXJtTm9k
ZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBiZWluZyBjcmVhdGVkCi0g
ICAgYm9vbCByZWNvdmVyZWRGcm9tRXJyb3I7ICAgICAvLyB0cnVlIGlmIGEgcGFyc2UgZXJyb3Ig
aGFzIG9jY3VycmVkLCBidXQgd2UgY29udGludWUgdG8gcGFyc2UKLSAgICBpbnQgbnVtRXJyb3Jz
OwotICAgIGJvb2wgbGV4QWZ0ZXJUeXBlOyAgICAgICAgICAgLy8gdHJ1ZSBpZiB3ZSd2ZSByZWNv
Z25pemVkIGEgdHlwZSwgc28gY2FuIG9ubHkgYmUgbG9va2luZyBmb3IgYW4gaWRlbnRpZmllcgot
ICAgIGludCBsb29wTmVzdGluZ0xldmVsOyAgICAgICAgLy8gMCBpZiBvdXRzaWRlIGFsbCBsb29w
cwotICAgIGJvb2wgaW5UeXBlUGFyZW47ICAgICAgICAgICAgLy8gdHJ1ZSBpZiBpbiBwYXJlbnRo
ZXNlcywgbG9va2luZyBvbmx5IGZvciBhbiBpZGVudGlmaWVyCi0gICAgY29uc3QgVFR5cGUqIGN1
cnJlbnRGdW5jdGlvblR5cGU7ICAvLyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRo
YXQncyBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCi0gICAgYm9vbCBmdW5jdGlvblJldHVybnNWYWx1
ZTsgICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJuCi0gICAgVE1h
cDxUU3RyaW5nLCBUQmVoYXZpb3I+IGV4dGVuc2lvbkJlaGF2aW9yOwotICAgIHZvaWQgaW5pdGlh
bGl6ZUV4dGVuc2lvbkJlaGF2aW9yKCk7Ci0KLSAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2MsIGNv
bnN0IGNoYXIgKnN6UmVhc29uLCBjb25zdCBjaGFyICpzelRva2VuLAotICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqc3pFeHRyYUluZm9Gb3JtYXQsIC4uLik7Ci0gICAgYm9vbCByZXNlcnZlZEVy
cm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwotICAgIHZvaWQg
cmVjb3ZlcigpOwotCi0gICAgYm9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwg
aW50IHZlY1NpemUsIFRWZWN0b3JGaWVsZHMmLCBpbnQgbGluZSk7Ci0gICAgYm9vbCBwYXJzZU1h
dHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmLCBp
bnQgbGluZSk7Ci0gICAgdm9pZCBhc3NpZ25FcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3As
IFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCk7Ci0gICAgdm9pZCB1bmFyeU9wRXJyb3IoaW50
IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIG9wZXJhbmQpOwotICAgIHZvaWQgYmluYXJ5
T3BFcnJvcihpbnQgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyBy
aWdodCk7Ci0gICAgYm9vbCBwcmVjaXNpb25FcnJvckNoZWNrKGludCBsaW5lLCBUUHJlY2lzaW9u
IHByZWNpc2lvbiwgVEJhc2ljVHlwZSB0eXBlKTsKLSAgICBib29sIGxWYWx1ZUVycm9yQ2hlY2so
aW50IGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUSW50ZXJtVHlwZWQqKTsKLSAgICBib29sIGNvbnN0
RXJyb3JDaGVjayhUSW50ZXJtVHlwZWQqIG5vZGUpOwotICAgIGJvb2wgaW50ZWdlckVycm9yQ2hl
Y2soVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbik7Ci0gICAgYm9vbCBnbG9i
YWxFcnJvckNoZWNrKGludCBsaW5lLCBib29sIGdsb2JhbCwgY29uc3QgY2hhciogdG9rZW4pOwot
ICAgIGJvb2wgY29uc3RydWN0b3JFcnJvckNoZWNrKGludCBsaW5lLCBUSW50ZXJtTm9kZSosIFRG
dW5jdGlvbiYsIFRPcGVyYXRvciwgVFR5cGUqKTsKLSAgICBib29sIGFycmF5U2l6ZUVycm9yQ2hl
Y2soaW50IGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKTsKLSAgICBib29sIGFy
cmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgVFB1YmxpY1R5cGUgdHlwZSk7Ci0gICAg
Ym9vbCBhcnJheVR5cGVFcnJvckNoZWNrKGludCBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsKLSAg
ICBib29sIGFycmF5RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1
YmxpY1R5cGUgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwotICAgIGJvb2wgdm9pZEVycm9y
Q2hlY2soaW50LCBjb25zdCBUU3RyaW5nJiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKLSAgICBib29s
IGJvb2xFcnJvckNoZWNrKGludCwgY29uc3QgVEludGVybVR5cGVkKik7Ci0gICAgYm9vbCBib29s
RXJyb3JDaGVjayhpbnQsIGNvbnN0IFRQdWJsaWNUeXBlJik7Ci0gICAgYm9vbCBzYW1wbGVyRXJy
b3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiBy
ZWFzb24pOwotICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpbnQgbGluZSwgY29u
c3QgVFB1YmxpY1R5cGUmIHBUeXBlKTsKLSAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNo
ZWNrKGludCBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5cGUmIHR5cGUpOwot
ICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKTsKLSAgICBib29sIG5vbkluaXRD
b25zdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBl
JiB0eXBlKTsKLSAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGludCBsaW5lLCBUU3RyaW5nJiBp
ZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSk7Ci0gICAgYm9vbCBwYXJhbUVycm9yQ2hlY2so
aW50IGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVy
LCBUVHlwZSogdHlwZSk7Ci0gICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNrKGludCBsaW5lLCBj
b25zdCBjaGFyKik7Ci0gICAgY29uc3QgVEZ1bmN0aW9uKiBmaW5kRnVuY3Rpb24oaW50IGxpbmUs
IFRGdW5jdGlvbiogcGZuQ2FsbCwgYm9vbCAqYnVpbHRJbiA9IDApOwotICAgIGJvb2wgZXhlY3V0
ZUluaXRpYWxpemVyKFRTb3VyY2VMb2MgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1Ymxp
Y1R5cGUmIHBUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCog
aW5pdGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxlKiB2YXJpYWJs
ZSA9IDApOwotICAgIGJvb2wgYXJlQWxsQ2hpbGRDb25zdChUSW50ZXJtQWdncmVnYXRlKiBhZ2dy
Tm9kZSk7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb25zdHJ1Y3RvcihUSW50ZXJtTm9kZSosIGNv
bnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBURnVuY3Rpb24qLCBUU291cmNlTG9jKTsKLSAgICBUSW50
ZXJtVHlwZWQqIGZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2Rl
LCBjb25zdCBUVHlwZSYgdHlwZSk7Ci0gICAgVEludGVybVR5cGVkKiBjb25zdHJ1Y3RTdHJ1Y3Qo
VEludGVybU5vZGUqLCBUVHlwZSosIGludCwgVFNvdXJjZUxvYywgYm9vbCBzdWJzZXQpOwotICAg
IFRJbnRlcm1UeXBlZCogY29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSosIFRPcGVyYXRvciwg
VEludGVybU5vZGUqLCBUU291cmNlTG9jLCBib29sIHN1YnNldCk7Ci0gICAgVEludGVybVR5cGVk
KiBhZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYsIFRJbnRlcm1UeXBlZCosIFRTb3Vy
Y2VMb2MpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RNYXRyaXhOb2RlKGludCAsIFRJbnRl
cm1UeXBlZCosIFRTb3VyY2VMb2MpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RBcnJheU5v
ZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTb3VyY2VMb2MgbGluZSk7Ci0gICAg
VEludGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChUU3RyaW5nJiAsIFRJbnRlcm1UeXBlZCosIFRT
b3VyY2VMb2MpOwotICAgIGJvb2wgYXJyYXlTZXRNYXhTaXplKFRJbnRlcm1TeW1ib2wqLCBUVHlw
ZSosIGludCwgYm9vbCwgVFNvdXJjZUxvYyk7Ci0gICAgc3RydWN0IFRQcmFnbWEgY29udGV4dFBy
YWdtYTsKLSAgICBUU3RyaW5nIEhhc2hFcnJNc2c7Ci0gICAgYm9vbCBBZnRlckVPRjsKLX07Ci0K
LWludCBQYVBhcnNlU3RyaW5ncyhjaGFyKiBhcmd2W10sIGludCBzdHJMZW5bXSwgaW50IGFyZ2Ms
IFRQYXJzZUNvbnRleHQmKTsKLXZvaWQgUGFSZXNlcnZlZFdvcmQoKTsKLWludCBQYUlkZW50T3JU
eXBlKFRTdHJpbmcmIGlkLCBUUGFyc2VDb250ZXh0JiwgVFN5bWJvbComKTsKLWludCBQYVBhcnNl
Q29tbWVudChpbnQgJmxpbmVubywgVFBhcnNlQ29udGV4dCYpOwotdm9pZCBzZXRJbml0aWFsU3Rh
dGUoKTsKLQotdHlwZWRlZiBUUGFyc2VDb250ZXh0KiBUUGFyc2VDb250ZXh0UG9pbnRlcjsKLWV4
dGVybiBUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7Ci0jZGVm
aW5lIEdsb2JhbFBhcnNlQ29udGV4dCBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQotCi10eXBlZGVm
IHN0cnVjdCBUVGhyZWFkUGFyc2VDb250ZXh0UmVjCi17Ci0gICAgVFBhcnNlQ29udGV4dCAqbHBH
bG9iYWxQYXJzZUNvbnRleHQ7Ci19IFRUaHJlYWRQYXJzZUNvbnRleHQ7Ci0KLSNlbmRpZiAvLyBf
UEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Qb29sQWxs
b2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCShy
ZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMxOCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvUG9vbEFsbG9jLmgiCi0KLSNpZm5kZWYgX01TQ19WRVIKLSNpbmNsdWRlIDxz
dGRpbnQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJjb21waWxl
ci9Jbml0aWFsaXplR2xvYmFscy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgot
Ci1PU19UTFNJbmRleCBQb29sSW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKLQotdm9pZCBJ
bml0aWFsaXplR2xvYmFsUG9vbHMoKQotewotICAgIFRUaHJlYWRHbG9iYWxQb29scyogZ2xvYmFs
UG9vbHM9IHN0YXRpY19jYXN0PFRUaHJlYWRHbG9iYWxQb29scyo+KE9TX0dldFRMU1ZhbHVlKFBv
b2xJbmRleCkpOyAgICAKLSAgICBpZiAoZ2xvYmFsUG9vbHMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFRQb29sQWxsb2NhdG9yICpnbG9iYWxQb29sQWxsb2NhdG9yID0gbmV3IFRQb29sQWxsb2Nh
dG9yKHRydWUpOwotCi0gICAgVFRocmVhZEdsb2JhbFBvb2xzKiB0aHJlYWREYXRhID0gbmV3IFRU
aHJlYWRHbG9iYWxQb29scygpOwotICAgIAotICAgIHRocmVhZERhdGEtPmdsb2JhbFBvb2xBbGxv
Y2F0b3IgPSBnbG9iYWxQb29sQWxsb2NhdG9yOwotICAgICAgICAKLSAgICBPU19TZXRUTFNWYWx1
ZShQb29sSW5kZXgsIHRocmVhZERhdGEpOyAgICAgCi0gICAgZ2xvYmFsUG9vbEFsbG9jYXRvci0+
cHVzaCgpOwotfQotCi12b2lkIEZyZWVHbG9iYWxQb29scygpCi17Ci0gICAgLy8gUmVsZWFzZSB0
aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhpcyB0aHJlYWQuCi0gICAgVFRocmVhZEdsb2JhbFBv
b2xzKiBnbG9iYWxQb29scz0gc3RhdGljX2Nhc3Q8VFRocmVhZEdsb2JhbFBvb2xzKj4oT1NfR2V0
VExTVmFsdWUoUG9vbEluZGV4KSk7ICAgIAotICAgIGlmICghZ2xvYmFsUG9vbHMpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBHbG9iYWxQb29sQWxsb2NhdG9yLnBvcEFsbCgpOwotICAgIGRl
bGV0ZSAmR2xvYmFsUG9vbEFsbG9jYXRvcjsgICAgICAgCi0gICAgZGVsZXRlIGdsb2JhbFBvb2xz
OwotfQotCi1ib29sIEluaXRpYWxpemVQb29sSW5kZXgoKQotewotICAgIC8vIEFsbG9jYXRlIGEg
VExTIGluZGV4LgotICAgIGlmICgoUG9vbEluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpKSA9PSBP
U19JTlZBTElEX1RMU19JTkRFWCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgRnJlZVBvb2xJbmRleCgpCi17Ci0gICAgLy8gUmVsZWFzZSB0aGUg
VExTIGluZGV4LgotICAgIE9TX0ZyZWVUTFNJbmRleChQb29sSW5kZXgpOwotfQotCi1UUG9vbEFs
bG9jYXRvciYgR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpCi17Ci0gICAgVFRocmVhZEdsb2JhbFBv
b2xzKiB0aHJlYWREYXRhID0gc3RhdGljX2Nhc3Q8VFRocmVhZEdsb2JhbFBvb2xzKj4oT1NfR2V0
VExTVmFsdWUoUG9vbEluZGV4KSk7Ci0KLSAgICByZXR1cm4gKnRocmVhZERhdGEtPmdsb2JhbFBv
b2xBbGxvY2F0b3I7Ci19Ci0KLXZvaWQgU2V0R2xvYmFsUG9vbEFsbG9jYXRvclB0cihUUG9vbEFs
bG9jYXRvciogcG9vbEFsbG9jYXRvcikKLXsKLSAgICBUVGhyZWFkR2xvYmFsUG9vbHMqIHRocmVh
ZERhdGEgPSBzdGF0aWNfY2FzdDxUVGhyZWFkR2xvYmFsUG9vbHMqPihPU19HZXRUTFNWYWx1ZShQ
b29sSW5kZXgpKTsKLQotICAgIHRocmVhZERhdGEtPmdsb2JhbFBvb2xBbGxvY2F0b3IgPSBwb29s
QWxsb2NhdG9yOwotfQotCi0vLwotLy8gSW1wbGVtZW50IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRo
ZSBUUG9vbEFsbG9jYXRvciBjbGFzcywgd2hpY2gKLS8vIGlzIGRvY3VtZW50ZWQgaW4gUG9vbEFs
bG9jLmguCi0vLwotVFBvb2xBbGxvY2F0b3I6OlRQb29sQWxsb2NhdG9yKGJvb2wgZywgaW50IGdy
b3d0aEluY3JlbWVudCwgaW50IGFsbG9jYXRpb25BbGlnbm1lbnQpIDogCi0gICAgZ2xvYmFsKGcp
LAotICAgIHBhZ2VTaXplKGdyb3d0aEluY3JlbWVudCksCi0gICAgYWxpZ25tZW50KGFsbG9jYXRp
b25BbGlnbm1lbnQpLAotICAgIGZyZWVMaXN0KDApLAotICAgIGluVXNlTGlzdCgwKSwKLSAgICBu
dW1DYWxscygwKQotewotICAgIC8vCi0gICAgLy8gRG9uJ3QgYWxsb3cgcGFnZSBzaXplcyB3ZSBr
bm93IGFyZSBzbWFsbGVyIHRoYW4gYWxsIGNvbW1vbgotICAgIC8vIE9TIHBhZ2Ugc2l6ZXMuCi0g
ICAgLy8KLSAgICBpZiAocGFnZVNpemUgPCA0KjEwMjQpCi0gICAgICAgIHBhZ2VTaXplID0gNCox
MDI0OwotCi0gICAgLy8KLSAgICAvLyBBIGxhcmdlIGN1cnJlbnRQYWdlT2Zmc2V0IGluZGljYXRl
cyBhIG5ldyBwYWdlIG5lZWRzIHRvCi0gICAgLy8gYmUgb2J0YWluZWQgdG8gYWxsb2NhdGUgbWVt
b3J5LgotICAgIC8vCi0gICAgY3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsKLQotICAgIC8v
Ci0gICAgLy8gQWRqdXN0IGFsaWdubWVudCB0byBiZSBhdCBsZWFzdCBwb2ludGVyIGFsaWduZWQg
YW5kCi0gICAgLy8gcG93ZXIgb2YgMi4KLSAgICAvLwotICAgIHNpemVfdCBtaW5BbGlnbiA9IHNp
emVvZih2b2lkKik7Ci0gICAgYWxpZ25tZW50ICY9IH4obWluQWxpZ24gLSAxKTsKLSAgICBpZiAo
YWxpZ25tZW50IDwgbWluQWxpZ24pCi0gICAgICAgIGFsaWdubWVudCA9IG1pbkFsaWduOwotICAg
IHNpemVfdCBhID0gMTsKLSAgICB3aGlsZSAoYSA8IGFsaWdubWVudCkKLSAgICAgICAgYSA8PD0g
MTsKLSAgICBhbGlnbm1lbnQgPSBhOwotICAgIGFsaWdubWVudE1hc2sgPSBhIC0gMTsKLQotICAg
IC8vCi0gICAgLy8gQWxpZ24gaGVhZGVyIHNraXAKLSAgICAvLwotICAgIGhlYWRlclNraXAgPSBt
aW5BbGlnbjsKLSAgICBpZiAoaGVhZGVyU2tpcCA8IHNpemVvZih0SGVhZGVyKSkgewotICAgICAg
ICBoZWFkZXJTa2lwID0gKHNpemVvZih0SGVhZGVyKSArIGFsaWdubWVudE1hc2spICYgfmFsaWdu
bWVudE1hc2s7Ci0gICAgfQotfQotCi1UUG9vbEFsbG9jYXRvcjo6flRQb29sQWxsb2NhdG9yKCkK
LXsKLSAgICBpZiAoIWdsb2JhbCkgewotICAgICAgICAvLwotICAgICAgICAvLyBUaGVuIHdlIGtu
b3cgdGhhdCB0aGlzIG9iamVjdCBpcyBub3QgYmVpbmcgCi0gICAgICAgIC8vIGFsbG9jYXRlZCBh
ZnRlciBvdGhlciwgZ2xvYmFsbHkgc2NvcGVkIG9iamVjdHMKLSAgICAgICAgLy8gdGhhdCBkZXBl
bmQgb24gaXQuICBTbyB3ZSBjYW4gZGVsZXRlIHRoZSAiaW4gdXNlIiBtZW1vcnkuCi0gICAgICAg
IC8vCi0gICAgICAgIHdoaWxlIChpblVzZUxpc3QpIHsKLSAgICAgICAgICAgIHRIZWFkZXIqIG5l
eHQgPSBpblVzZUxpc3QtPm5leHRQYWdlOwotICAgICAgICAgICAgaW5Vc2VMaXN0LT5+dEhlYWRl
cigpOwotICAgICAgICAgICAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluVXNl
TGlzdCk7Ci0gICAgICAgICAgICBpblVzZUxpc3QgPSBuZXh0OwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLy8KLSAgICAvLyBBbHdheXMgZGVsZXRlIHRoZSBmcmVlIGxpc3QgbWVtb3J5IC0gaXQg
Y2FuJ3QgYmUgYmVpbmcKLSAgICAvLyAoY29ycmVjdGx5KSByZWZlcmVuY2VkLCB3aGV0aGVyIHRo
ZSBwb29sIGFsbG9jYXRvciB3YXMKLSAgICAvLyBnbG9iYWwgb3Igbm90LiAgV2Ugc2hvdWxkIG5v
dCBjaGVjayB0aGUgZ3VhcmQgYmxvY2tzCi0gICAgLy8gaGVyZSwgYmVjYXVzZSB3ZSBkaWQgaXQg
YWxyZWFkeSB3aGVuIHRoZSBibG9jayB3YXMKLSAgICAvLyBwbGFjZWQgaW50byB0aGUgZnJlZSBs
aXN0LgotICAgIC8vCi0gICAgd2hpbGUgKGZyZWVMaXN0KSB7Ci0gICAgICAgIHRIZWFkZXIqIG5l
eHQgPSBmcmVlTGlzdC0+bmV4dFBhZ2U7Ci0gICAgICAgIGRlbGV0ZSBbXSByZWludGVycHJldF9j
YXN0PGNoYXIqPihmcmVlTGlzdCk7Ci0gICAgICAgIGZyZWVMaXN0ID0gbmV4dDsKLSAgICB9Ci19
Ci0KLS8vIFN1cHBvcnQgTVNWQysrIDYuMAotY29uc3QgdW5zaWduZWQgY2hhciBUQWxsb2NhdGlv
bjo6Z3VhcmRCbG9ja0JlZ2luVmFsID0gMHhmYjsKLWNvbnN0IHVuc2lnbmVkIGNoYXIgVEFsbG9j
YXRpb246Omd1YXJkQmxvY2tFbmRWYWwgICA9IDB4ZmU7Ci1jb25zdCB1bnNpZ25lZCBjaGFyIFRB
bGxvY2F0aW9uOjp1c2VyRGF0YUZpbGwgICAgICAgPSAweGNkOwotCi0jaWZkZWYgR1VBUkRfQkxP
Q0tTCi0gICAgY29uc3Qgc2l6ZV90IFRBbGxvY2F0aW9uOjpndWFyZEJsb2NrU2l6ZSA9IDE2Owot
I2Vsc2UKLSAgICBjb25zdCBzaXplX3QgVEFsbG9jYXRpb246Omd1YXJkQmxvY2tTaXplID0gMDsK
LSNlbmRpZgotCi0vLwotLy8gQ2hlY2sgYSBzaW5nbGUgZ3VhcmQgYmxvY2sgZm9yIGRhbWFnZQot
Ly8KLXZvaWQgVEFsbG9jYXRpb246OmNoZWNrR3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9j
a01lbSwgdW5zaWduZWQgY2hhciB2YWwsIGNvbnN0IGNoYXIqIGxvY1RleHQpIGNvbnN0Ci17Ci0g
ICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBndWFyZEJsb2NrU2l6ZTsgeCsrKSB7Ci0gICAgICAg
IGlmIChibG9ja01lbVt4XSAhPSB2YWwpIHsKLSAgICAgICAgICAgIGNoYXIgYXNzZXJ0TXNnWzgw
XTsKLQotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgcHJpbnQgdGhlIGFzc2VydCBtZXNzYWdlLiAg
SXQncyBoZXJlIGp1c3QgdG8gYmUgaGVscGZ1bC4KLSAgICAgICAgICAgIHNwcmludGYoYXNzZXJ0
TXNnLCAiUG9vbEFsbG9jOiBEYW1hZ2UgJXMgJXUgYnl0ZSBhbGxvY2F0aW9uIGF0IDB4JXBcbiIs
Ci0gICAgICAgICAgICAgICAgICAgIGxvY1RleHQsIHNpemUsIGRhdGEoKSk7Ci0gICAgICAgICAg
ICBhc3NlcnQoMCAmJiAiUG9vbEFsbG9jOiBEYW1hZ2UgaW4gZ3VhcmQgYmxvY2siKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotCi12b2lkIFRQb29sQWxsb2NhdG9yOjpwdXNoKCkKLXsKLSAgICB0
QWxsb2NTdGF0ZSBzdGF0ZSA9IHsgY3VycmVudFBhZ2VPZmZzZXQsIGluVXNlTGlzdCB9OwotCi0g
ICAgc3RhY2sucHVzaF9iYWNrKHN0YXRlKTsKLSAgICAgICAgCi0gICAgLy8KLSAgICAvLyBJbmRp
Y2F0ZSB0aGVyZSBpcyBubyBjdXJyZW50IHBhZ2UgdG8gYWxsb2NhdGUgZnJvbS4KLSAgICAvLwot
ICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gcGFnZVNpemU7Ci19Ci0KLS8vCi0vLyBEbyBhIG1hc3Mt
ZGVhbGxvY2F0aW9uIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBhbGxvY2F0aW9ucwotLy8gdGhhdCBo
YXZlIG9jY3VycmVkIHNpbmNlIHRoZSBsYXN0IHB1c2goKSwgb3Igc2luY2UgdGhlCi0vLyBsYXN0
IHBvcCgpLCBvciBzaW5jZSB0aGUgb2JqZWN0J3MgY3JlYXRpb24uCi0vLwotLy8gVGhlIGRlYWxs
b2NhdGVkIHBhZ2VzIGFyZSBzYXZlZCBmb3IgZnV0dXJlIGFsbG9jYXRpb25zLgotLy8KLXZvaWQg
VFBvb2xBbGxvY2F0b3I6OnBvcCgpCi17Ci0gICAgaWYgKHN0YWNrLnNpemUoKSA8IDEpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHRIZWFkZXIqIHBhZ2UgPSBzdGFjay5iYWNrKCkucGFnZTsKLSAg
ICBjdXJyZW50UGFnZU9mZnNldCA9IHN0YWNrLmJhY2soKS5vZmZzZXQ7Ci0KLSAgICB3aGlsZSAo
aW5Vc2VMaXN0ICE9IHBhZ2UpIHsKLSAgICAgICAgLy8gaW52b2tlIGRlc3RydWN0b3IgdG8gZnJl
ZSBhbGxvY2F0aW9uIGxpc3QKLSAgICAgICAgaW5Vc2VMaXN0LT5+dEhlYWRlcigpOwotICAgICAg
ICAKLSAgICAgICAgdEhlYWRlciogbmV4dEluVXNlID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKLSAg
ICAgICAgaWYgKGluVXNlTGlzdC0+cGFnZUNvdW50ID4gMSkKLSAgICAgICAgICAgIGRlbGV0ZSBb
XSByZWludGVycHJldF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGluVXNlTGlzdC0+bmV4dFBhZ2UgPSBmcmVlTGlzdDsKLSAgICAgICAgICAgIGZy
ZWVMaXN0ID0gaW5Vc2VMaXN0OwotICAgICAgICB9Ci0gICAgICAgIGluVXNlTGlzdCA9IG5leHRJ
blVzZTsKLSAgICB9Ci0KLSAgICBzdGFjay5wb3BfYmFjaygpOwotfQotCi0vLwotLy8gRG8gYSBt
YXNzLWRlYWxsb2NhdGlvbiBvZiBhbGwgdGhlIGluZGl2aWR1YWwgYWxsb2NhdGlvbnMKLS8vIHRo
YXQgaGF2ZSBvY2N1cnJlZC4KLS8vCi12b2lkIFRQb29sQWxsb2NhdG9yOjpwb3BBbGwoKQotewot
ICAgIHdoaWxlIChzdGFjay5zaXplKCkgPiAwKQotICAgICAgICBwb3AoKTsKLX0KLQotdm9pZCog
VFBvb2xBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBudW1CeXRlcykKLXsKLSAgICAvLyBJZiB3
ZSBhcmUgdXNpbmcgZ3VhcmQgYmxvY2tzLCBhbGwgYWxsb2NhdGlvbnMgYXJlIGJyYWNrZXRlZCBi
eQotICAgIC8vIHRoZW06IFtndWFyZGJsb2NrXVthbGxvY2F0aW9uXVtndWFyZGJsb2NrXS4gIG51
bUJ5dGVzIGlzIGhvdwotICAgIC8vIG11Y2ggbWVtb3J5IHRoZSBjYWxsZXIgYXNrZWQgZm9yLiAg
YWxsb2NhdGlvblNpemUgaXMgdGhlIHRvdGFsCi0gICAgLy8gc2l6ZSBpbmNsdWRpbmcgZ3VhcmQg
YmxvY2tzLiAgSW4gcmVsZWFzZSBidWlsZCwKLSAgICAvLyBndWFyZEJsb2NrU2l6ZT0wIGFuZCB0
aGlzIGFsbCBnZXRzIG9wdGltaXplZCBhd2F5LgotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9
IFRBbGxvY2F0aW9uOjphbGxvY2F0aW9uU2l6ZShudW1CeXRlcyk7Ci0gICAgCi0gICAgLy8KLSAg
ICAvLyBKdXN0IGtlZXAgc29tZSBpbnRlcmVzdGluZyBzdGF0aXN0aWNzLgotICAgIC8vCi0gICAg
KytudW1DYWxsczsKLSAgICB0b3RhbEJ5dGVzICs9IG51bUJ5dGVzOwotCi0gICAgLy8KLSAgICAv
LyBEbyB0aGUgYWxsb2NhdGlvbiwgbW9zdCBsaWtlbHkgY2FzZSBmaXJzdCwgZm9yIGVmZmljaWVu
Y3kuCi0gICAgLy8gVGhpcyBzdGVwIGNvdWxkIGJlIG1vdmVkIHRvIGJlIGlubGluZSBzb21ldGlt
ZS4KLSAgICAvLwotICAgIGlmIChjdXJyZW50UGFnZU9mZnNldCArIGFsbG9jYXRpb25TaXplIDw9
IHBhZ2VTaXplKSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFNhZmUgdG8gYWxsb2NhdGUgZnJv
bSBjdXJyZW50UGFnZU9mZnNldC4KLSAgICAgICAgLy8KLSAgICAgICAgdW5zaWduZWQgY2hhciog
bWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGluVXNlTGlzdCkgKyBj
dXJyZW50UGFnZU9mZnNldDsKLSAgICAgICAgY3VycmVudFBhZ2VPZmZzZXQgKz0gYWxsb2NhdGlv
blNpemU7Ci0gICAgICAgIGN1cnJlbnRQYWdlT2Zmc2V0ID0gKGN1cnJlbnRQYWdlT2Zmc2V0ICsg
YWxpZ25tZW50TWFzaykgJiB+YWxpZ25tZW50TWFzazsKLQotICAgICAgICByZXR1cm4gaW5pdGlh
bGl6ZUFsbG9jYXRpb24oaW5Vc2VMaXN0LCBtZW1vcnksIG51bUJ5dGVzKTsKLSAgICB9Ci0KLSAg
ICBpZiAoYWxsb2NhdGlvblNpemUgKyBoZWFkZXJTa2lwID4gcGFnZVNpemUpIHsKLSAgICAgICAg
Ly8KLSAgICAgICAgLy8gRG8gYSBtdWx0aS1wYWdlIGFsbG9jYXRpb24uICBEb24ndCBtaXggdGhl
c2Ugd2l0aCB0aGUgb3RoZXJzLgotICAgICAgICAvLyBUaGUgT1MgaXMgZWZmaWNpZW50IGFuZCBh
bGxvY2F0aW5nIGFuZCBmcmVlLWluZyBtdWx0aXBsZSBwYWdlcy4KLSAgICAgICAgLy8KLSAgICAg
ICAgc2l6ZV90IG51bUJ5dGVzVG9BbGxvYyA9IGFsbG9jYXRpb25TaXplICsgaGVhZGVyU2tpcDsK
LSAgICAgICAgdEhlYWRlciogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx0SGVhZGVyKj4oOjpu
ZXcgY2hhcltudW1CeXRlc1RvQWxsb2NdKTsKLSAgICAgICAgaWYgKG1lbW9yeSA9PSAwKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgLy8gVXNlIHBsYWNlbWVudC1uZXcgdG8gaW5p
dGlhbGl6ZSBoZWFkZXIKLSAgICAgICAgbmV3KG1lbW9yeSkgdEhlYWRlcihpblVzZUxpc3QsIChu
dW1CeXRlc1RvQWxsb2MgKyBwYWdlU2l6ZSAtIDEpIC8gcGFnZVNpemUpOwotICAgICAgICBpblVz
ZUxpc3QgPSBtZW1vcnk7Ci0KLSAgICAgICAgY3VycmVudFBhZ2VPZmZzZXQgPSBwYWdlU2l6ZTsg
IC8vIG1ha2UgbmV4dCBhbGxvY2F0aW9uIGNvbWUgZnJvbSBhIG5ldyBwYWdlCi0KLSAgICAgICAg
Ly8gTm8gZ3VhcmQgYmxvY2tzIGZvciBtdWx0aS1wYWdlIGFsbG9jYXRpb25zICh5ZXQpCi0gICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obWVtb3J5KSArIGhlYWRlclNraXApOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gTmVl
ZCBhIHNpbXBsZSBwYWdlIHRvIGFsbG9jYXRlIGZyb20uCi0gICAgLy8KLSAgICB0SGVhZGVyKiBt
ZW1vcnk7Ci0gICAgaWYgKGZyZWVMaXN0KSB7Ci0gICAgICAgIG1lbW9yeSA9IGZyZWVMaXN0Owot
ICAgICAgICBmcmVlTGlzdCA9IGZyZWVMaXN0LT5uZXh0UGFnZTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHRIZWFkZXIqPig6Om5ldyBjaGFyW3BhZ2VT
aXplXSk7Ci0gICAgICAgIGlmIChtZW1vcnkgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIC8vIFVzZSBwbGFjZW1lbnQtbmV3IHRvIGluaXRpYWxpemUgaGVhZGVyCi0g
ICAgbmV3KG1lbW9yeSkgdEhlYWRlcihpblVzZUxpc3QsIDEpOwotICAgIGluVXNlTGlzdCA9IG1l
bW9yeTsKLSAgICAKLSAgICB1bnNpZ25lZCBjaGFyKiByZXQgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIgKj4oaW5Vc2VMaXN0KSArIGhlYWRlclNraXA7Ci0gICAgY3VycmVudFBhZ2VP
ZmZzZXQgPSAoaGVhZGVyU2tpcCArIGFsbG9jYXRpb25TaXplICsgYWxpZ25tZW50TWFzaykgJiB+
YWxpZ25tZW50TWFzazsKLQotICAgIHJldHVybiBpbml0aWFsaXplQWxsb2NhdGlvbihpblVzZUxp
c3QsIHJldCwgbnVtQnl0ZXMpOwotfQotCi0KLS8vCi0vLyBDaGVjayBhbGwgYWxsb2NhdGlvbnMg
aW4gYSBsaXN0IGZvciBkYW1hZ2UgYnkgY2FsbGluZyBjaGVjayBvbiBlYWNoLgotLy8KLXZvaWQg
VEFsbG9jYXRpb246OmNoZWNrQWxsb2NMaXN0KCkgY29uc3QKLXsKLSAgICBmb3IgKGNvbnN0IFRB
bGxvY2F0aW9uKiBhbGxvYyA9IHRoaXM7IGFsbG9jICE9IDA7IGFsbG9jID0gYWxsb2MtPnByZXZB
bGxvYykKLSAgICAgICAgYWxsb2MtPmNoZWNrKCk7Ci19CkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvUG9vbEFsbG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxv
Yy5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwzMDQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lm
bmRlZiBfUE9PTEFMTE9DX0lOQ0xVREVEXwotI2RlZmluZSBfUE9PTEFMTE9DX0lOQ0xVREVEXwot
Ci0jaWZkZWYgX0RFQlVHCi0jZGVmaW5lIEdVQVJEX0JMT0NLUyAgLy8gZGVmaW5lIHRvIGVuYWJs
ZSBndWFyZCBibG9jayBzYW5pdHkgY2hlY2tpbmcKLSNlbmRpZgotCi0vLwotLy8gVGhpcyBoZWFk
ZXIgZGVmaW5lcyBhbiBhbGxvY2F0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byBlZmZpY2llbnRseQot
Ly8gYWxsb2NhdGUgYSBsYXJnZSBudW1iZXIgb2Ygc21hbGwgcmVxdWVzdHMgZm9yIGhlYXAgbWVt
b3J5LCB3aXRoIHRoZSAKLS8vIGludGVudGlvbiB0aGF0IHRoZXkgYXJlIG5vdCBpbmRpdmlkdWFs
bHkgZGVhbGxvY2F0ZWQsIGJ1dCByYXRoZXIgCi0vLyBjb2xsZWN0aXZlbHkgZGVhbGxvY2F0ZWQg
YXQgb25lIHRpbWUuCi0vLwotLy8gVGhpcyBzaW11bHRhbmVvdXNseQotLy8KLS8vICogTWFrZXMg
ZWFjaCBpbmRpdmlkdWFsIGFsbG9jYXRpb24gbXVjaCBtb3JlIGVmZmljaWVudDsgdGhlCi0vLyAg
ICAgdHlwaWNhbCBhbGxvY2F0aW9uIGlzIHRyaXZpYWwuCi0vLyAqIENvbXBsZXRlbHkgYXZvaWRz
IHRoZSBjb3N0IG9mIGRvaW5nIGluZGl2aWR1YWwgZGVhbGxvY2F0aW9uLgotLy8gKiBTYXZlcyB0
aGUgdHJvdWJsZSBvZiB0cmFja2luZyBkb3duIGFuZCBwbHVnZ2luZyBhIGxhcmdlIGNsYXNzIG9m
IGxlYWtzLgotLy8KLS8vIEluZGl2aWR1YWwgY2xhc3NlcyBjYW4gdXNlIHRoaXMgYWxsb2NhdG9y
IGJ5IHN1cHBseWluZyB0aGVpciBvd24KLS8vIG5ldyBhbmQgZGVsZXRlIG1ldGhvZHMuCi0vLwot
Ly8gU1RMIGNvbnRhaW5lcnMgY2FuIHVzZSB0aGlzIGFsbG9jYXRvciBieSB1c2luZyB0aGUgcG9v
bF9hbGxvY2F0b3IKLS8vIGNsYXNzIGFzIHRoZSBhbGxvY2F0b3IgKHNlY29uZCkgdGVtcGxhdGUg
YXJndW1lbnQuCi0vLwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+
Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0vLyBJZiB3ZSBhcmUgdXNpbmcgZ3VhcmQgYmxvY2tzLCB3
ZSBtdXN0IHRyYWNrIGVhY2ggaW5kaXZ1YWwKLS8vIGFsbG9jYXRpb24uICBJZiB3ZSBhcmVuJ3Qg
dXNpbmcgZ3VhcmQgYmxvY2tzLCB0aGVzZQotLy8gbmV2ZXIgZ2V0IGluc3RhbnRpYXRlZCwgc28g
d29uJ3QgaGF2ZSBhbnkgaW1wYWN0LgotLy8gCi0KLWNsYXNzIFRBbGxvY2F0aW9uIHsKLXB1Ymxp
YzoKLSAgICBUQWxsb2NhdGlvbihzaXplX3Qgc2l6ZSwgdW5zaWduZWQgY2hhciogbWVtLCBUQWxs
b2NhdGlvbiogcHJldiA9IDApIDoKLSAgICAgICAgc2l6ZShzaXplKSwgbWVtKG1lbSksIHByZXZB
bGxvYyhwcmV2KSB7Ci0gICAgICAgIC8vIEFsbG9jYXRpb25zIGFyZSBicmFja2V0ZWQ6Ci0gICAg
ICAgIC8vICAgIFthbGxvY2F0aW9uSGVhZGVyXVtpbml0aWFsR3VhcmRCbG9ja11bdXNlckRhdGFd
W2ZpbmFsR3VhcmRCbG9ja10KLSAgICAgICAgLy8gVGhpcyB3b3VsZCBiZSBjbGVhbmVyIHdpdGgg
aWYgKGd1YXJkQmxvY2tTaXplKS4uLiwgYnV0IHRoYXQKLSAgICAgICAgLy8gbWFrZXMgdGhlIGNv
bXBpbGVyIHByaW50IHdhcm5pbmdzIGFib3V0IDAgbGVuZ3RoIG1lbXNldHMsCi0gICAgICAgIC8v
IGV2ZW4gd2l0aCB0aGUgaWYoKSBwcm90ZWN0aW5nIHRoZW0uCi0jaWZkZWYgR1VBUkRfQkxPQ0tT
Ci0gICAgICAgIG1lbXNldChwcmVHdWFyZCgpLCBndWFyZEJsb2NrQmVnaW5WYWwsIGd1YXJkQmxv
Y2tTaXplKTsKLSAgICAgICAgbWVtc2V0KGRhdGEoKSwgICAgICB1c2VyRGF0YUZpbGwsICAgICAg
IHNpemUpOwotICAgICAgICBtZW1zZXQocG9zdEd1YXJkKCksIGd1YXJkQmxvY2tFbmRWYWwsICAg
Z3VhcmRCbG9ja1NpemUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCBjaGVjaygpIGNvbnN0
IHsKLSAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHByZUd1YXJkKCksICBndWFyZEJsb2NrQmVnaW5W
YWwsICJiZWZvcmUiKTsKLSAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHBvc3RHdWFyZCgpLCBndWFy
ZEJsb2NrRW5kVmFsLCAgICJhZnRlciIpOwotICAgIH0KLQotICAgIHZvaWQgY2hlY2tBbGxvY0xp
c3QoKSBjb25zdDsKLQotICAgIC8vIFJldHVybiB0b3RhbCBzaXplIG5lZWRlZCB0byBhY2NvbW9k
YXRlIHVzZXIgYnVmZmVyIG9mICdzaXplJywKLSAgICAvLyBwbHVzIG91ciB0cmFja2luZyBkYXRh
LgotICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHNpemVfdCBzaXplKSB7
Ci0gICAgICAgIHJldHVybiBzaXplICsgMiAqIGd1YXJkQmxvY2tTaXplICsgaGVhZGVyU2l6ZSgp
OwotICAgIH0KLQotICAgIC8vIE9mZnNldCBmcm9tIHN1cnJvdW5kaW5nIGJ1ZmZlciB0byBnZXQg
dG8gdXNlciBkYXRhIGJ1ZmZlci4KLSAgICBpbmxpbmUgc3RhdGljIHVuc2lnbmVkIGNoYXIqIG9m
ZnNldEFsbG9jYXRpb24odW5zaWduZWQgY2hhciogbSkgewotICAgICAgICByZXR1cm4gbSArIGd1
YXJkQmxvY2tTaXplICsgaGVhZGVyU2l6ZSgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2b2lk
IGNoZWNrR3VhcmRCbG9jayh1bnNpZ25lZCBjaGFyKiBibG9ja01lbSwgdW5zaWduZWQgY2hhciB2
YWwsIGNvbnN0IGNoYXIqIGxvY1RleHQpIGNvbnN0OwotCi0gICAgLy8gRmluZCBvZmZzZXRzIHRv
IHByZSBhbmQgcG9zdCBndWFyZCBibG9ja3MsIGFuZCB1c2VyIGRhdGEgYnVmZmVyCi0gICAgdW5z
aWduZWQgY2hhciogcHJlR3VhcmQoKSAgY29uc3QgeyByZXR1cm4gbWVtICsgaGVhZGVyU2l6ZSgp
OyB9Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSgpICAgICAgY29uc3QgeyByZXR1cm4gcHJlR3Vh
cmQoKSArIGd1YXJkQmxvY2tTaXplOyB9Ci0gICAgdW5zaWduZWQgY2hhciogcG9zdEd1YXJkKCkg
Y29uc3QgeyByZXR1cm4gZGF0YSgpICsgc2l6ZTsgfQotCi0gICAgc2l6ZV90IHNpemU7ICAgICAg
ICAgICAgICAgICAgLy8gc2l6ZSBvZiB0aGUgdXNlciBkYXRhIGFyZWEKLSAgICB1bnNpZ25lZCBj
aGFyKiBtZW07ICAgICAgICAgICAvLyBiZWdpbm5pbmcgb2Ygb3VyIGFsbG9jYXRpb24gKHB0cyB0
byBoZWFkZXIpCi0gICAgVEFsbG9jYXRpb24qIHByZXZBbGxvYzsgICAgICAgLy8gcHJpb3IgYWxs
b2NhdGlvbiBpbiB0aGUgY2hhaW4KLQotICAgIC8vIFN1cHBvcnQgTVNWQysrIDYuMAotICAgIGNv
bnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGd1YXJkQmxvY2tCZWdpblZhbDsKLSAgICBjb25zdCBz
dGF0aWMgdW5zaWduZWQgY2hhciBndWFyZEJsb2NrRW5kVmFsOwotICAgIGNvbnN0IHN0YXRpYyB1
bnNpZ25lZCBjaGFyIHVzZXJEYXRhRmlsbDsKLQotICAgIGNvbnN0IHN0YXRpYyBzaXplX3QgZ3Vh
cmRCbG9ja1NpemU7Ci0jaWZkZWYgR1VBUkRfQkxPQ0tTCi0gICAgaW5saW5lIHN0YXRpYyBzaXpl
X3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJuIHNpemVvZihUQWxsb2NhdGlvbik7IH0KLSNlbHNlCi0g
ICAgaW5saW5lIHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJuIDA7IH0KLSNlbmRp
ZgotfTsKLQotLy8KLS8vIFRoZXJlIGFyZSBzZXZlcmFsIHN0YWNrcy4gIE9uZSBpcyB0byB0cmFj
ayB0aGUgcHVzaGluZyBhbmQgcG9wcGluZwotLy8gb2YgdGhlIHVzZXIsIGFuZCBub3QgeWV0IGlt
cGxlbWVudGVkLiAgVGhlIG90aGVycyBhcmUgc2ltcGx5IGEgCi0vLyByZXBvc2l0b3JpZXMgb2Yg
ZnJlZSBwYWdlcyBvciB1c2VkIHBhZ2VzLgotLy8KLS8vIFBhZ2Ugc3RhY2tzIGFyZSBsaW5rZWQg
dG9nZXRoZXIgd2l0aCBhIHNpbXBsZSBoZWFkZXIgYXQgdGhlIGJlZ2lubmluZwotLy8gb2YgZWFj
aCBhbGxvY2F0aW9uIG9idGFpbmVkIGZyb20gdGhlIHVuZGVybHlpbmcgT1MuICBNdWx0aS1wYWdl
IGFsbG9jYXRpb25zCi0vLyBhcmUgcmV0dXJuZWQgdG8gdGhlIE9TLiAgSW5kaXZpZHVhbCBwYWdl
IGFsbG9jYXRpb25zIGFyZSBrZXB0IGZvciBmdXR1cmUKLS8vIHJlLXVzZS4KLS8vCi0vLyBUaGUg
InBhZ2Ugc2l6ZSIgdXNlZCBpcyBub3QsIG5vciBtdXN0IGl0IG1hdGNoLCB0aGUgdW5kZXJseWlu
ZyBPUwotLy8gcGFnZSBzaXplLiAgQnV0LCBoYXZpbmcgaXQgYmUgYWJvdXQgdGhhdCBzaXplIG9y
IGVxdWFsIHRvIGEgc2V0IG9mIAotLy8gcGFnZXMgaXMgbGlrZWx5IG1vc3Qgb3B0aW1hbC4KLS8v
Ci1jbGFzcyBUUG9vbEFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgVFBvb2xBbGxvY2F0b3IoYm9v
bCBnbG9iYWwgPSBmYWxzZSwgaW50IGdyb3d0aEluY3JlbWVudCA9IDgqMTAyNCwgaW50IGFsbG9j
YXRpb25BbGlnbm1lbnQgPSAxNik7Ci0KLSAgICAvLwotICAgIC8vIERvbid0IGNhbGwgdGhlIGRl
c3RydWN0b3IganVzdCB0byBmcmVlIHVwIHRoZSBtZW1vcnksIGNhbGwgcG9wKCkKLSAgICAvLwot
ICAgIH5UUG9vbEFsbG9jYXRvcigpOwotCi0gICAgLy8KLSAgICAvLyBDYWxsIHB1c2goKSB0byBl
c3RhYmxpc2ggYSBuZXcgcGxhY2UgdG8gcG9wIG1lbW9yeSB0b28uICBEb2VzIG5vdAotICAgIC8v
IGhhdmUgdG8gYmUgY2FsbGVkIHRvIGdldCB0aGluZ3Mgc3RhcnRlZC4KLSAgICAvLwotICAgIHZv
aWQgcHVzaCgpOwotCi0gICAgLy8KLSAgICAvLyBDYWxsIHBvcCgpIHRvIGZyZWUgYWxsIG1lbW9y
eSBhbGxvY2F0ZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byBwdXNoKCksCi0gICAgLy8gb3IgaWYg
bm8gbGFzdCBjYWxsIHRvIHB1c2gsIGZyZWVzIGFsbCBtZW1vcnkgc2luY2UgZmlyc3QgYWxsb2Nh
dGlvbi4KLSAgICAvLwotICAgIHZvaWQgcG9wKCk7Ci0KLSAgICAvLwotICAgIC8vIENhbGwgcG9w
QWxsKCkgdG8gZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZC4KLSAgICAvLwotICAgIHZvaWQgcG9w
QWxsKCk7Ci0KLSAgICAvLwotICAgIC8vIENhbGwgYWxsb2NhdGUoKSB0byBhY3R1YWxseSBhY3F1
aXJlIG1lbW9yeS4gIFJldHVybnMgMCBpZiBubyBtZW1vcnkKLSAgICAvLyBhdmFpbGFibGUsIG90
aGVyd2lzZSBhIHByb3Blcmx5IGFsaWduZWQgcG9pbnRlciB0byAnbnVtQnl0ZXMnIG9mIG1lbW9y
eS4KLSAgICAvLwotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBudW1CeXRlcyk7Ci0KLSAgICAv
LwotICAgIC8vIFRoZXJlIGlzIG5vIGRlYWxsb2NhdGUuICBUaGUgcG9pbnQgb2YgdGhpcyBjbGFz
cyBpcyB0aGF0Ci0gICAgLy8gZGVhbGxvY2F0aW9uIGNhbiBiZSBza2lwcGVkIGJ5IHRoZSB1c2Vy
IG9mIGl0LCBhcyB0aGUgbW9kZWwKLSAgICAvLyBvZiB1c2UgaXMgdG8gc2ltdWx0YW5lb3VzbHkg
ZGVhbGxvY2F0ZSBldmVyeXRoaW5nIGF0IG9uY2UKLSAgICAvLyBieSBjYWxsaW5nIHBvcCgpLCBh
bmQgdG8gbm90IGhhdmUgdG8gc29sdmUgbWVtb3J5IGxlYWsgcHJvYmxlbXMuCi0gICAgLy8KLQot
cHJvdGVjdGVkOgotICAgIGZyaWVuZCBzdHJ1Y3QgdEhlYWRlcjsKLSAgICAKLSAgICBzdHJ1Y3Qg
dEhlYWRlciB7Ci0gICAgICAgIHRIZWFkZXIodEhlYWRlciogbmV4dFBhZ2UsIHNpemVfdCBwYWdl
Q291bnQpIDoKLSAgICAgICAgICAgIG5leHRQYWdlKG5leHRQYWdlKSwKLSAgICAgICAgICAgIHBh
Z2VDb3VudChwYWdlQ291bnQpCi0jaWZkZWYgR1VBUkRfQkxPQ0tTCi0gICAgICAgICAgLCBsYXN0
QWxsb2NhdGlvbigwKQotI2VuZGlmCi0gICAgICAgICAgICB7IH0KLQotICAgICAgICB+dEhlYWRl
cigpIHsKLSNpZmRlZiBHVUFSRF9CTE9DS1MKLSAgICAgICAgICAgIGlmIChsYXN0QWxsb2NhdGlv
bikKLSAgICAgICAgICAgICAgICBsYXN0QWxsb2NhdGlvbi0+Y2hlY2tBbGxvY0xpc3QoKTsKLSNl
bmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgdEhlYWRlciogbmV4dFBhZ2U7Ci0gICAgICAgIHNp
emVfdCBwYWdlQ291bnQ7Ci0jaWZkZWYgR1VBUkRfQkxPQ0tTCi0gICAgICAgIFRBbGxvY2F0aW9u
KiBsYXN0QWxsb2NhdGlvbjsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBzdHJ1Y3QgdEFsbG9jU3Rh
dGUgewotICAgICAgICBzaXplX3Qgb2Zmc2V0OwotICAgICAgICB0SGVhZGVyKiBwYWdlOwotICAg
IH07Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3Rvcjx0QWxsb2NTdGF0ZT4gdEFsbG9jU3RhY2s7Ci0K
LSAgICAvLyBUcmFjayBhbGxvY2F0aW9ucyBpZiBhbmQgb25seSBpZiB3ZSdyZSB1c2luZyBndWFy
ZCBibG9ja3MKLSAgICB2b2lkKiBpbml0aWFsaXplQWxsb2NhdGlvbih0SGVhZGVyKiBibG9jaywg
dW5zaWduZWQgY2hhciogbWVtb3J5LCBzaXplX3QgbnVtQnl0ZXMpIHsKLSNpZmRlZiBHVUFSRF9C
TE9DS1MKLSAgICAgICAgbmV3KG1lbW9yeSkgVEFsbG9jYXRpb24obnVtQnl0ZXMsIG1lbW9yeSwg
YmxvY2stPmxhc3RBbGxvY2F0aW9uKTsKLSAgICAgICAgYmxvY2stPmxhc3RBbGxvY2F0aW9uID0g
cmVpbnRlcnByZXRfY2FzdDxUQWxsb2NhdGlvbio+KG1lbW9yeSk7Ci0jZW5kaWYKLSAgICAgICAg
Ly8gVGhpcyBpcyBvcHRpbWl6ZWQgZW50aXJlbHkgYXdheSBpZiBHVUFSRF9CTE9DS1MgaXMgbm90
IGRlZmluZWQuCi0gICAgICAgIHJldHVybiBUQWxsb2NhdGlvbjo6b2Zmc2V0QWxsb2NhdGlvbiht
ZW1vcnkpOwotICAgIH0KLQotICAgIGJvb2wgZ2xvYmFsOyAgICAgICAgICAgIC8vIHNob3VsZCBi
ZSB0cnVlIGlmIHRoaXMgb2JqZWN0IGlzIGdsb2JhbGx5IHNjb3BlZAotICAgIHNpemVfdCBwYWdl
U2l6ZTsgICAgICAgIC8vIGdyYW51bGFyaXR5IG9mIGFsbG9jYXRpb24gZnJvbSB0aGUgT1MKLSAg
ICBzaXplX3QgYWxpZ25tZW50OyAgICAgICAvLyBhbGwgcmV0dXJuZWQgYWxsb2NhdGlvbnMgd2ls
bCBiZSBhbGlnbmVkIGF0IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgZ3Jh
bnVsYXJpdHksIHdoaWNoIHdpbGwgYmUgYSBwb3dlciBvZiAyCi0gICAgc2l6ZV90IGFsaWdubWVu
dE1hc2s7Ci0gICAgc2l6ZV90IGhlYWRlclNraXA7ICAgICAgLy8gYW1vdW50IG9mIG1lbW9yeSB0
byBza2lwIHRvIG1ha2Ugcm9vbSBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICBoZWFkZXIgKGJhc2ljYWxseSwgc2l6ZSBvZiBoZWFkZXIsIHJvdW5kZWQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHVwIHRvIG1ha2UgaXQgYWxpZ25lZAotICAg
IHNpemVfdCBjdXJyZW50UGFnZU9mZnNldDsgIC8vIG5leHQgb2Zmc2V0IGluIHRvcCBvZiBpblVz
ZUxpc3QgdG8gYWxsb2NhdGUgZnJvbQotICAgIHRIZWFkZXIqIGZyZWVMaXN0OyAgICAgIC8vIGxp
c3Qgb2YgcG9wcGVkIG1lbW9yeQotICAgIHRIZWFkZXIqIGluVXNlTGlzdDsgICAgIC8vIGxpc3Qg
b2YgYWxsIG1lbW9yeSBjdXJyZW50bHkgYmVpbmcgdXNlZAotICAgIHRBbGxvY1N0YWNrIHN0YWNr
OyAgICAgIC8vIHN0YWNrIG9mIHdoZXJlIHRvIGFsbG9jYXRlIGZyb20sIHRvIHBhcnRpdGlvbiBw
b29sCi0KLSAgICBpbnQgbnVtQ2FsbHM7ICAgICAgICAgICAvLyBqdXN0IGFuIGludGVyZXN0aW5n
IHN0YXRpc3RpYwotICAgIHNpemVfdCB0b3RhbEJ5dGVzOyAgICAgIC8vIGp1c3QgYW4gaW50ZXJl
c3Rpbmcgc3RhdGlzdGljCi1wcml2YXRlOgotICAgIFRQb29sQWxsb2NhdG9yJiBvcGVyYXRvcj0o
Y29uc3QgVFBvb2xBbGxvY2F0b3ImKTsgIC8vIGRvbnQgYWxsb3cgYXNzaWdubWVudCBvcGVyYXRv
cgotICAgIFRQb29sQWxsb2NhdG9yKGNvbnN0IFRQb29sQWxsb2NhdG9yJik7ICAvLyBkb250IGFs
bG93IGRlZmF1bHQgY29weSBjb25zdHJ1Y3RvcgotfTsKLQotCi0vLwotLy8gVGhlcmUgY291bGQg
cG90ZW50aWFsbHkgYmUgbWFueSBwb29scyB3aXRoIHBvcHMgaGFwcGVuaW5nIGF0Ci0vLyBkaWZm
ZXJlbnQgdGltZXMuICBCdXQgYSBzaW1wbGUgdXNlIGlzIHRvIGhhdmUgYSBnbG9iYWwgcG9wCi0v
LyB3aXRoIGV2ZXJ5b25lIHVzaW5nIHRoZSBzYW1lIGdsb2JhbCBhbGxvY2F0b3IuCi0vLwotdHlw
ZWRlZiBUUG9vbEFsbG9jYXRvciogUG9vbEFsbG9jYXRvclBvaW50ZXI7Ci1leHRlcm4gVFBvb2xB
bGxvY2F0b3ImIEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKTsKLSNkZWZpbmUgR2xvYmFsUG9vbEFs
bG9jYXRvciBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkKLQotCi1zdHJ1Y3QgVFRocmVhZEdsb2Jh
bFBvb2xzCi17Ci0gICAgVFBvb2xBbGxvY2F0b3IqIGdsb2JhbFBvb2xBbGxvY2F0b3I7Ci19Owot
Ci12b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoVFBvb2xBbGxvY2F0b3IqIHBvb2xBbGxv
Y2F0b3IpOwotCi0vLwotLy8gVGhpcyBTVEwgY29tcGF0aWJsZSBhbGxvY2F0b3IgaXMgaW50ZW5k
ZWQgdG8gYmUgdXNlZCBhcyB0aGUgYWxsb2NhdG9yCi0vLyBwYXJhbWV0ZXIgdG8gdGVtcGxhdGl6
ZWQgU1RMIGNvbnRhaW5lcnMsIGxpa2UgdmVjdG9yIGFuZCBtYXAuCi0vLwotLy8gSXQgd2lsbCB1
c2UgdGhlIHBvb2xzIGZvciBhbGxvY2F0aW9uLCBhbmQgbm90Ci0vLyBkbyBhbnkgZGVhbGxvY2F0
aW9uLCBidXQgd2lsbCBzdGlsbCBkbyBkZXN0cnVjdGlvbi4KLS8vCi10ZW1wbGF0ZTxjbGFzcyBU
PgotY2xhc3MgcG9vbF9hbGxvY2F0b3IgewotcHVibGljOgotICAgIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKLSAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Ci0gICAgdHlw
ZWRlZiBUKiBwb2ludGVyOwotICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfcG9pbnRlcjsKLSAg
ICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKLSAgICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVy
ZW5jZTsKLSAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIE90
aGVyPiAKLSAgICBzdHJ1Y3QgcmViaW5kIHsKLSAgICAgICAgdHlwZWRlZiBwb29sX2FsbG9jYXRv
cjxPdGhlcj4gb3RoZXI7Ci0gICAgfTsKLSAgICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIHgp
IGNvbnN0IHsgcmV0dXJuICZ4OyB9Ci0gICAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3Jl
ZmVyZW5jZSB4KSBjb25zdCB7IHJldHVybiAmeDsgfQotCi0gICAgcG9vbF9hbGxvY2F0b3IoKSA6
IGFsbG9jYXRvcihHbG9iYWxQb29sQWxsb2NhdG9yKSB7IH0KLSAgICBwb29sX2FsbG9jYXRvcihU
UG9vbEFsbG9jYXRvciYgYSkgOiBhbGxvY2F0b3IoYSkgeyB9Ci0gICAgcG9vbF9hbGxvY2F0b3Io
Y29uc3QgcG9vbF9hbGxvY2F0b3I8VD4mIHApIDogYWxsb2NhdG9yKHAuYWxsb2NhdG9yKSB7IH0K
LQotICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPgotICAgIHBvb2xfYWxsb2NhdG9yKGNvbnN0IHBv
b2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgOiBhbGxvY2F0b3IocC5nZXRBbGxvY2F0b3IoKSkgeyB9
Ci0KLSNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKSAmJiAhZGVmaW5lZChfUldTVERfQUxMT0NBVE9S
KQotICAgIC8vIGxpYkNTdGQgb24gc29tZSBwbGF0Zm9ybXMgaGF2ZSBhIGRpZmZlcmVudCBhbGxv
Y2F0ZS9kZWFsbG9jYXRlIGludGVyZmFjZS4KLSAgICAvLyBDYWxsZXIgcHJlLWJha2VzIHNpemVv
ZihUKSBpbnRvICduJyB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCi0gICAgLy8g
YWxsb2NhdGVkLCBub3QgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KLSAgICB2b2lkKiBhbGxvY2F0
ZShzaXplX3R5cGUgbikgeyAKLSAgICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRl
KG4pOwotICAgIH0KLSAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCop
IHsKLSAgICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOwotICAgIH0KLSAg
ICB2b2lkIGRlYWxsb2NhdGUodm9pZCosIHNpemVfdHlwZSkge30KLSNlbHNlCi0gICAgcG9pbnRl
ciBhbGxvY2F0ZShzaXplX3R5cGUgbikgeyAKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOwotICAg
IH0KLSAgICBwb2ludGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuLCBjb25zdCB2b2lkKikgeyAKLSAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxs
b2NhdGUobiAqIHNpemVvZihUKSkpOwotICAgIH0KLSAgICB2b2lkIGRlYWxsb2NhdGUocG9pbnRl
ciwgc2l6ZV90eXBlKSB7fQotI2VuZGlmICAvLyBfUldTVERfQUxMT0NBVE9SCi0KLSAgICB2b2lk
IGNvbnN0cnVjdChwb2ludGVyIHAsIGNvbnN0IFQmIHZhbCkgeyBuZXcgKCh2b2lkICopcCkgVCh2
YWwpOyB9Ci0gICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgcCkgeyBwLT5UOjp+VCgpOyB9Ci0KLSAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgcG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1
cm4gJmdldEFsbG9jYXRvcigpID09ICZyaHMuZ2V0QWxsb2NhdG9yKCk7IH0KLSAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgcG9vbF9hbGxvY2F0b3ImIHJocykgY29uc3QgeyByZXR1cm4gJmdldEFs
bG9jYXRvcigpICE9ICZyaHMuZ2V0QWxsb2NhdG9yKCk7IH0KLQotICAgIHNpemVfdHlwZSBtYXhf
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZW9m
KFQpOyB9Ci0gICAgc2l6ZV90eXBlIG1heF9zaXplKGludCBzaXplKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKSAvIHNpemU7IH0KLQotICAgIHZvaWQgc2V0QWxsb2Nh
dG9yKFRQb29sQWxsb2NhdG9yKiBhKSB7IGFsbG9jYXRvciA9ICphOyB9Ci0gICAgVFBvb2xBbGxv
Y2F0b3ImIGdldEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcjsgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgVFBvb2xBbGxvY2F0b3ImIGFsbG9jYXRvcjsKLX07Ci0KLSNlbmRpZiAvLyBf
UE9PTEFMTE9DX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1F1YWxpZmllckFs
aXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUXVhbGlmaWVyQWxpdmUu
Y3BwCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotCi1jbGFzcyBUQWxpdmVUcmF2
ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVEFsaXZlVHJh
dmVyc2VyKFRRdWFsaWZpZXIgcSkgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxz
ZSwgdHJ1ZSksIGZvdW5kKGZhbHNlKSwgcXVhbGlmaWVyKHEpCi0gICAgewotICAgIH0KLQotCWJv
b2wgd2FzRm91bmQoKSB7IHJldHVybiBmb3VuZDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBm
b3VuZDsKLSAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLQotICAgIHZvaWQgdmlzaXRTeW1ib2wo
VEludGVybVN5bWJvbCopOwotICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQsIFRJbnRlcm1T
ZWxlY3Rpb24qKTsKLX07Ci0KLS8vCi0vLyBSZXBvcnQgd2hldGhlciBvciBub3QgYSB2YXJpYWJs
ZSBvZiB0aGUgZ2l2ZW4gcXVhbGlmaWVyIHR5cGUKLS8vIGlzIGd1YXJhbnRlZWQgd3JpdHRlbi4g
IE5vdCBhbHdheXMgcG9zc2libGUgdG8gZGV0ZXJtaW5lIGlmCi0vLyBpdCBpcyB3cml0dGVuIGNv
bmRpdGlvbmFsbHkuCi0vLwotLy8gPz8gSXQgZG9lcyBub3QgZG8gdGhpcyB3ZWxsIHlldCwgdGhp
cyBpcyBqdXN0IGEgcGxhY2UgaG9sZGVyCi0vLyB0aGF0IHNpbXBseSBkZXRlcm1pbmVzIGlmIGl0
IHdhcyByZWZlcmVuY2UgYXQgYWxsLCBhbnl3aGVyZS4KLS8vCi1ib29sIFF1YWxpZmllcldyaXR0
ZW4oVEludGVybU5vZGUqIG5vZGUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyKQotewotICAgIFRBbGl2
ZVRyYXZlcnNlciBpdChxdWFsaWZpZXIpOwotCi0gICAgaWYgKG5vZGUpCi0gICAgICAgIG5vZGUt
PnRyYXZlcnNlKCZpdCk7Ci0KLSAgICByZXR1cm4gaXQud2FzRm91bmQoKTsKLX0KLQotdm9pZCBU
QWxpdmVUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0gICAg
Ly8KLSAgICAvLyBJZiBpdCdzIHdoYXQgd2UncmUgbG9va2luZyBmb3IsIHJlY29yZCBpdC4KLSAg
ICAvLwotICAgIGlmIChub2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBxdWFsaWZpZXIpCi0gICAgICAg
IGZvdW5kID0gdHJ1ZTsKLX0KLQotYm9vbCBUQWxpdmVUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9u
KFZpc2l0IHByZVZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQotewotICAgIGlmICh3YXNG
b3VuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotYm9vbCBRdWFsaWZpZXJXcml0dGVuKFRJbnRl
cm1Ob2RlKiByb290LCBUUXVhbGlmaWVyKTsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9SZW1v
dmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUmVtb3ZlVHJlZS5j
cHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNp
bmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9SZW1v
dmVUcmVlLmgiCi0KLS8vCi0vLyBDb2RlIHRvIHJlY3Vyc2l2ZWx5IGRlbGV0ZSB0aGUgaW50ZXJt
ZWRpYXRlIHRyZWUuCi0vLwotCi1jbGFzcyBSZW1vdmVUcmVlIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIKLXsKLXB1YmxpYzoKLQlSZW1vdmVUcmVlKCkgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNl
LCBmYWxzZSwgdHJ1ZSkKLQl7Ci0JfQotCi1wcm90ZWN0ZWQ6Ci0Jdm9pZCB2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sKik7Ci0Jdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50
VW5pb24qKTsKLQlib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7
Ci0JYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLQlib29sIHZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0JYm9vbCB2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotfTsKLQotdm9pZCBS
ZW1vdmVUcmVlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewotCWRlbGV0ZSBu
b2RlOwotfQotCi1ib29sIFJlbW92ZVRyZWU6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtQmluYXJ5KiBub2RlKQotewotCWRlbGV0ZSBub2RlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBu
b2RlKQotewotICAgIGRlbGV0ZSBub2RlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVt
b3ZlVHJlZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5v
ZGUpCi17Ci0JZGVsZXRlIG5vZGU7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVU
cmVlOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkK
LXsKLQlkZWxldGUgbm9kZTsKLQotCXJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbW92ZVRyZWU6
OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLQlkZWxl
dGUgbm9kZTsKLX0KLQotLy8KLS8vIEVudHJ5IHBvaW50LgotLy8KLXZvaWQgUmVtb3ZlQWxsVHJl
ZU5vZGVzKFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIFJlbW92ZVRyZWUgaXQ7Ci0KLSAgICBy
b290LT50cmF2ZXJzZSgmaXQpOwotfQotCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvUmVtb3Zl
VHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9SZW1vdmVUcmVlLmgJKHJl
dmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1JlbW92ZVRyZWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLXZvaWQgUmVtb3Zl
QWxsVHJlZU5vZGVzKFRJbnRlcm1Ob2RlKik7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvU2hI
YW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAkocmV2
aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9TSEhB
TkRMRV9JTkNMVURFRF8KLSNkZWZpbmUgX1NISEFORExFX0lOQ0xVREVEXwotCi0vLwotLy8gTWFj
aGluZSBpbmRlcGVuZGVudCBwYXJ0IG9mIHRoZSBjb21waWxlciBwcml2YXRlIG9iamVjdHMKLS8v
IHNlbnQgYXMgU2hIYW5kbGUgdG8gdGhlIGRyaXZlci4KLS8vCi0vLyBUaGlzIHNob3VsZCBub3Qg
YmUgaW5jbHVkZWQgYnkgZHJpdmVyIGNvZGUuCi0vLwotCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFk
ZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgotI2luY2x1ZGUgImNv
bXBpbGVyL1N5bWJvbFRhYmxlLmgiCi0KLWNsYXNzIFRDb21waWxlcjsKLWNsYXNzIFRJbnRlcm1O
b2RlOwotCi0vLwotLy8gVGhlIGJhc2UgY2xhc3MgdXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJu
ZWQgdG8gdGhlIGRyaXZlci4KLS8vCi1jbGFzcyBUU2hIYW5kbGVCYXNlIHsKLXB1YmxpYzoKLSAg
ICBUU2hIYW5kbGVCYXNlKCkgeyB9Ci0gICAgdmlydHVhbCB+VFNoSGFuZGxlQmFzZSgpIHsgfQot
ICAgIHZpcnR1YWwgVENvbXBpbGVyKiBnZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gMDsgfQotfTsK
LQotLy8KLS8vIFRoZSBiYXNlIGNsYXNzIGZvciB0aGUgbWFjaGluZSBkZXBlbmRlbnQgY29tcGls
ZXIgdG8gZGVyaXZlIGZyb20KLS8vIGZvciBtYW5hZ2luZyBvYmplY3QgY29kZSBmcm9tIHRoZSBj
b21waWxlLgotLy8KLWNsYXNzIFRDb21waWxlciA6IHB1YmxpYyBUU2hIYW5kbGVCYXNlIHsKLXB1
YmxpYzoKLSAgICBUQ29tcGlsZXIoRVNoTGFuZ3VhZ2UgbCwgRVNoU3BlYyBzKSA6IGxhbmd1YWdl
KGwpLCBzcGVjKHMpIHsgfQotICAgIHZpcnR1YWwgflRDb21waWxlcigpIHsgfQotCi0gICAgRVNo
TGFuZ3VhZ2UgZ2V0TGFuZ3VhZ2UoKSBjb25zdCB7IHJldHVybiBsYW5ndWFnZTsgfQotICAgIEVT
aFNwZWMgZ2V0U3BlYygpIGNvbnN0IHsgcmV0dXJuIHNwZWM7IH0KLSAgICBUU3ltYm9sVGFibGUm
IGdldFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KLSAgICBUSW5mb1Npbmsm
IGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBj
b21waWxlKFRJbnRlcm1Ob2RlKiByb290KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFRDb21waWxlciog
Z2V0QXNDb21waWxlcigpIHsgcmV0dXJuIHRoaXM7IH0KLQotcHJvdGVjdGVkOgotICAgIEVTaExh
bmd1YWdlIGxhbmd1YWdlOwotICAgIEVTaFNwZWMgc3BlYzsKLQotICAgIC8vIEJ1aWx0LWluIHN5
bWJvbCB0YWJsZSBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLCBzcGVjLCBhbmQgcmVzb3VyY2VzLgot
ICAgIC8vIEl0IGlzIHByZXNlcnZlZCBmcm9tIGNvbXBpbGUtdG8tY29tcGlsZS4KLSAgICBUU3lt
Ym9sVGFibGUgc3ltYm9sVGFibGU7Ci0gICAgLy8gT3V0cHV0IHNpbmsuCi0gICAgVEluZm9TaW5r
IGluZm9TaW5rOwotfTsKLQotLy8KLS8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRo
ZSBtYWNoaW5lIGluZGVwZW5kZW50IGNvZGUKLS8vIGFuZCB0aGUgbWFjaGluZSBkZXBlbmRlbnQg
Y29kZS4KLS8vCi0vLyBUaGUgbWFjaGluZSBkZXBlbmRlbnQgY29kZSBzaG91bGQgZGVyaXZlIGZy
b20gdGhlIGNsYXNzZXMKLS8vIGFib3ZlLiBUaGVuIENvbnN0cnVjdCooKSBhbmQgRGVsZXRlKigp
IHdpbGwgY3JlYXRlIGFuZCAKLS8vIGRlc3Ryb3kgdGhlIG1hY2hpbmUgZGVwZW5kZW50IG9iamVj
dHMsIHdoaWNoIGNvbnRhaW4gdGhlCi0vLyBhYm92ZSBtYWNoaW5lIGluZGVwZW5kZW50IGluZm9y
bWF0aW9uLgotLy8KLVRDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ3VhZ2UsIEVT
aFNwZWMpOwotdm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqKTsKLQotI2VuZGlmIC8vIF9T
SEhBTkRMRV9JTkNMVURFRF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAJKHJldmlz
aW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMxMSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLwotLy8gSW1w
bGVtZW50IHRoZSB0b3AtbGV2ZWwgb2YgaW50ZXJmYWNlIHRvIHRoZSBjb21waWxlciwKLS8vIGFz
IGRlZmluZWQgaW4gU2hhZGVyTGFuZy5oCi0vLwotCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvSW5pdGlhbGl6ZURsbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5kbGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9TeW1i
b2xUYWJsZS5oIgotCi1zdGF0aWMgYm9vbCBJbml0aWFsaXplU3ltYm9sVGFibGUoCi0gICAgICAg
IGNvbnN0IFRCdWlsdEluU3RyaW5ncyYgYnVpbHRJblN0cmluZ3MsCi0gICAgICAgIEVTaExhbmd1
YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMsIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UmIHJlc291
cmNlcywKLSAgICAgICAgVEluZm9TaW5rJiBpbmZvU2luaywgVFN5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZSkKLXsKLSAgICBUSW50ZXJtZWRpYXRlIGludGVybWVkaWF0ZShpbmZvU2luayk7Ci0gICAg
VFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoc3ltYm9sVGFibGUsIGludGVybWVkaWF0ZSwgbGFu
Z3VhZ2UsIHNwZWMsIGluZm9TaW5rKTsKLQotICAgIEdsb2JhbFBhcnNlQ29udGV4dCA9ICZwYXJz
ZUNvbnRleHQ7Ci0KLSAgICBzZXRJbml0aWFsU3RhdGUoKTsKLQotICAgIGFzc2VydChzeW1ib2xU
YWJsZS5pc0VtcHR5KCkpOyAgICAgICAKLSAgICAvLwotICAgIC8vIFBhcnNlIHRoZSBidWlsdC1p
bnMuICBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBvbmNlIHBlcgotICAgIC8vIGxhbmd1YWdlIHN5
bWJvbCB0YWJsZS4KLSAgICAvLwotICAgIC8vIFB1c2ggdGhlIHN5bWJvbCB0YWJsZSB0byBnaXZl
IGl0IGFuIGluaXRpYWwgc2NvcGUuICBUaGlzCi0gICAgLy8gcHVzaCBzaG91bGQgbm90IGhhdmUg
YSBjb3JyZXNwb25kaW5nIHBvcCwgc28gdGhhdCBidWlsdC1pbnMKLSAgICAvLyBhcmUgcHJlc2Vy
dmVkLCBhbmQgdGhlIHRlc3QgZm9yIGFuIGVtcHR5IHRhYmxlIGZhaWxzLgotICAgIC8vCi0gICAg
c3ltYm9sVGFibGUucHVzaCgpOwotICAgIAotICAgIC8vSW5pdGlhbGl6ZSB0aGUgUHJlcHJvY2Vz
c29yCi0gICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkKLSAgICB7Ci0gICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgICJVbmFibGUgdG8gaW50aWFsaXpl
IHRoZSBQcmVwcm9jZXNzb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGZvciAoVEJ1aWx0SW5TdHJpbmdzOjpjb25zdF9pdGVyYXRvciBpID0gYnVpbHRJblN0cmluZ3Mu
YmVnaW4oKTsgaSAhPSBidWlsdEluU3RyaW5ncy5lbmQoKTsgKytpKQotICAgIHsKLSAgICAgICAg
Y29uc3QgY2hhciogYnVpbHRJblNoYWRlcnNbMV07Ci0gICAgICAgIGludCBidWlsdEluTGVuZ3Ro
c1sxXTsKLQotICAgICAgICBidWlsdEluU2hhZGVyc1swXSA9ICgqaSkuY19zdHIoKTsKLSAgICAg
ICAgYnVpbHRJbkxlbmd0aHNbMF0gPSAoaW50KSAoKmkpLnNpemUoKTsKLQotICAgICAgICBpZiAo
UGFQYXJzZVN0cmluZ3MoY29uc3RfY2FzdDxjaGFyKio+KGJ1aWx0SW5TaGFkZXJzKSwgYnVpbHRJ
bkxlbmd0aHMsIDEsIHBhcnNlQ29udGV4dCkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hYmxlIHRvIHBh
cnNlIGJ1aWx0LWlucyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgSWRlbnRpZnlCdWlsdElucyhsYW5ndWFnZSwgc3BlYywgcmVzb3VyY2VzLCBz
eW1ib2xUYWJsZSk7Ci0KLSAgICBGaW5hbGl6ZVByZXByb2Nlc3NvcigpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIEdlbmVyYXRlQnVpbHRJblN5bWJvbFRhYmxlKAotICAg
ICAgICBFU2hMYW5ndWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjLCBjb25zdCBUQnVpbHRJblJl
c291cmNlJiByZXNvdXJjZXMsCi0gICAgICAgIFRJbmZvU2luayYgaW5mb1NpbmssIFRTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUpCi17Ci0gICAgVEJ1aWx0SW5zIGJ1aWx0SW5zOwotCi0gICAgYnVp
bHRJbnMuaW5pdGlhbGl6ZShsYW5ndWFnZSwgc3BlYywgcmVzb3VyY2VzKTsKLSAgICByZXR1cm4g
SW5pdGlhbGl6ZVN5bWJvbFRhYmxlKGJ1aWx0SW5zLmdldEJ1aWx0SW5TdHJpbmdzKCksIGxhbmd1
YWdlLCBzcGVjLCByZXNvdXJjZXMsIGluZm9TaW5rLCBzeW1ib2xUYWJsZSk7Ci19Ci0KLS8vCi0v
LyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBP
R0wgZHJpdmVyCi0vLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCi0vLwotCi0v
LwotLy8gRHJpdmVyIG11c3QgY2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcgYW55
IG90aGVyCi0vLyBjb21waWxlciBvcGVyYXRpb25zLgotLy8KLWludCBTaEluaXRpYWxpemUoKQot
ewotICAgIGlmICghSW5pdFByb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1
cm4gMTsKLX0KLQotLy8KLS8vIENsZWFudXAgc3ltYm9sIHRhYmxlcwotLy8KLWludCBTaEZpbmFs
aXplKCkKLXsKLSAgICBpZiAoIURldGFjaFByb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICByZXR1cm4gMTsKLX0KLQotLy8KLS8vIEluaXRpYWxpemUgYnVpbHQtaW4gcmVzb3VyY2Vz
IHdpdGggbWluaW11bSBleHBlY3RlZCB2YWx1ZXMuCi0vLwotdm9pZCBTaEluaXRCdWlsdEluUmVz
b3VyY2UoVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3VyY2VzKQotewotICAgIC8vIENvbnN0YW50cy4K
LSAgICByZXNvdXJjZXMtPk1heFZlcnRleEF0dHJpYnMgPSA4OwotICAgIHJlc291cmNlcy0+TWF4
VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAxMjg7Ci0gICAgcmVzb3VyY2VzLT5NYXhWYXJ5aW5nVmVj
dG9ycyA9IDg7Ci0gICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7
Ci0gICAgcmVzb3VyY2VzLT5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gODsKLSAgICBy
ZXNvdXJjZXMtPk1heFRleHR1cmVJbWFnZVVuaXRzID0gODsKLSAgICByZXNvdXJjZXMtPk1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMgPSAxNjsKLSAgICByZXNvdXJjZXMtPk1heERyYXdCdWZmZXJz
ID0gMTsKLQotICAgIC8vIEV4dGVuc2lvbnMuCi0gICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMgPSAwOwotfQotCi0vLwotLy8gRHJpdmVyIGNhbGxzIHRoZXNlIHRvIGNyZWF0
ZSBhbmQgZGVzdHJveSBjb21waWxlciBvYmplY3RzLgotLy8KLVNoSGFuZGxlIFNoQ29uc3RydWN0
Q29tcGlsZXIoRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIEVTaFNwZWMgc3BlYywgY29uc3QgVEJ1aWx0
SW5SZXNvdXJjZSogcmVzb3VyY2VzKQotewotICAgIGlmICghSW5pdFRocmVhZCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hI
YW5kbGVCYXNlKj4oQ29uc3RydWN0Q29tcGlsZXIobGFuZ3VhZ2UsIHNwZWMpKTsKLSAgICBUQ29t
cGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOwotICAgIGlmIChjb21waWxl
ciA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEdlbmVyYXRlIGJ1aWx0LWluIHN5
bWJvbCB0YWJsZS4KLSAgICBpZiAoIUdlbmVyYXRlQnVpbHRJblN5bWJvbFRhYmxlKGxhbmd1YWdl
LCBzcGVjLCAqcmVzb3VyY2VzLCBjb21waWxlci0+Z2V0SW5mb1NpbmsoKSwgY29tcGlsZXItPmdl
dFN5bWJvbFRhYmxlKCkpKSB7Ci0gICAgICAgIFNoRGVzdHJ1Y3QoYmFzZSk7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNl
KTsKLX0KLQotdm9pZCBTaERlc3RydWN0KFNoSGFuZGxlIGhhbmRsZSkKLXsKLSAgICBpZiAoaGFu
ZGxlID09IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBz
dGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKLQotICAgIGlmIChiYXNlLT5nZXRB
c0NvbXBpbGVyKCkpCi0gICAgICAgIERlbGV0ZUNvbXBpbGVyKGJhc2UtPmdldEFzQ29tcGlsZXIo
KSk7Ci19Ci0KLS8vCi0vLyBEbyBhbiBhY3R1YWwgY29tcGlsZSBvbiB0aGUgZ2l2ZW4gc3RyaW5n
cy4gIFRoZSByZXN1bHQgaXMgbGVmdCAKLS8vIGluIHRoZSBnaXZlbiBjb21waWxlIG9iamVjdC4K
LS8vCi0vLyBSZXR1cm46ICBUaGUgcmV0dXJuIHZhbHVlIG9mIFNoQ29tcGlsZSBpcyByZWFsbHkg
Ym9vbGVhbiwgaW5kaWNhdGluZwotLy8gc3VjY2VzcyBvciBmYWlsdXJlLgotLy8KLWludCBTaENv
bXBpbGUoCi0gICAgY29uc3QgU2hIYW5kbGUgaGFuZGxlLAotICAgIGNvbnN0IGNoYXIqIGNvbnN0
IHNoYWRlclN0cmluZ3NbXSwKLSAgICBjb25zdCBpbnQgbnVtU3RyaW5ncywKLSAgICBjb25zdCBF
U2hPcHRpbWl6YXRpb25MZXZlbCBvcHRMZXZlbCwKLSAgICBpbnQgZGVidWdPcHRpb25zCi0gICAg
KQotewotICAgIGlmICghSW5pdFRocmVhZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
IChoYW5kbGUgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBUU2hIYW5kbGVCYXNlKiBi
YXNlID0gcmVpbnRlcnByZXRfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKLSAgICBUQ29t
cGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOwotICAgIGlmIChjb21waWxl
ciA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBHbG9iYWxQb29sQWxsb2NhdG9y
LnB1c2goKTsKLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9TaW5r
KCk7Ci0gICAgaW5mb1NpbmsuaW5mby5lcmFzZSgpOwotICAgIGluZm9TaW5rLmRlYnVnLmVyYXNl
KCk7Ci0gICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7Ci0KLSAgICBpZiAobnVtU3RyaW5ncyA9PSAw
KQotICAgICAgICByZXR1cm4gMTsKLQotICAgIFRJbnRlcm1lZGlhdGUgaW50ZXJtZWRpYXRlKGlu
Zm9TaW5rKTsKLSAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gY29tcGlsZXItPmdldFN5
bWJvbFRhYmxlKCk7Ci0KLSAgICBUUGFyc2VDb250ZXh0IHBhcnNlQ29udGV4dChzeW1ib2xUYWJs
ZSwgaW50ZXJtZWRpYXRlLCBjb21waWxlci0+Z2V0TGFuZ3VhZ2UoKSwgY29tcGlsZXItPmdldFNw
ZWMoKSwgaW5mb1NpbmspOwotICAgIHBhcnNlQ29udGV4dC5pbml0aWFsaXplRXh0ZW5zaW9uQmVo
YXZpb3IoKTsKLSAgICBHbG9iYWxQYXJzZUNvbnRleHQgPSAmcGFyc2VDb250ZXh0OwotIAotICAg
IHNldEluaXRpYWxTdGF0ZSgpOwotCi0gICAgSW5pdFByZXByb2Nlc3NvcigpOwotICAgIC8vCi0g
ICAgLy8gUGFyc2UgdGhlIGFwcGxpY2F0aW9uJ3Mgc2hhZGVycy4gIEFsbCB0aGUgZm9sbG93aW5n
IHN5bWJvbCB0YWJsZQotICAgIC8vIHdvcmsgd2lsbCBiZSB0aHJvdy1hd2F5LCBzbyBwdXNoIGEg
bmV3IGFsbG9jYXRpb24gc2NvcGUgdGhhdCBjYW4KLSAgICAvLyBiZSB0aHJvd24gYXdheSwgdGhl
biBwdXNoIGEgc2NvcGUgZm9yIHRoZSBjdXJyZW50IHNoYWRlcidzIGdsb2JhbHMuCi0gICAgLy8K
LSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotCi0gICAgc3ltYm9sVGFibGUucHVzaCgpOwotICAg
IGlmICghc3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpKQotICAgICAgICBwYXJzZUNvbnRleHQu
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiV3Jvbmcgc3ltYm9s
IHRhYmxlIGxldmVsIik7Ci0KLSAgICBpbnQgcmV0ID0gUGFQYXJzZVN0cmluZ3MoY29uc3RfY2Fz
dDxjaGFyKio+KHNoYWRlclN0cmluZ3MpLCAwLCBudW1TdHJpbmdzLCBwYXJzZUNvbnRleHQpOwot
ICAgIGlmIChyZXQpCi0gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgIGlmIChzdWNjZXNz
ICYmIHBhcnNlQ29udGV4dC50cmVlUm9vdCkgewotICAgICAgICBpZiAob3B0TGV2ZWwgPT0gRVNo
T3B0Tm9HZW5lcmF0aW9uKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LmluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4Tm9uZSwgIk5vIGVycm9ycy4gIE5vIGNvZGUgZ2VuZXJhdGlvbiB3YXMg
cmVxdWVzdGVkLiIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBpbnRl
cm1lZGlhdGUucG9zdFByb2Nlc3MocGFyc2VDb250ZXh0LnRyZWVSb290LCBwYXJzZUNvbnRleHQu
bGFuZ3VhZ2UpOwotCi0gICAgICAgICAgICBpZiAoc3VjY2VzcykgewotCi0gICAgICAgICAgICAg
ICAgaWYgKGRlYnVnT3B0aW9ucyAmIEVEZWJ1Z09wSW50ZXJtZWRpYXRlKQotICAgICAgICAgICAg
ICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShwYXJzZUNvbnRleHQudHJlZVJvb3QpOwot
Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBDYWxsIHRoZSBtYWNoaW5l
IGRlcGVuZGVudCBjb21waWxlcgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAg
aWYgKCFjb21waWxlci0+Y29tcGlsZShwYXJzZUNvbnRleHQudHJlZVJvb3QpKQotICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIHBhcnNlQ29udGV4dC5pbmZvU2luay5p
bmZvLnByZWZpeChFUHJlZml4RXJyb3IpOwotICAgICAgICBwYXJzZUNvbnRleHQuaW5mb1Npbmsu
aW5mbyA8PCBwYXJzZUNvbnRleHQubnVtRXJyb3JzIDw8ICIgY29tcGlsYXRpb24gZXJyb3JzLiAg
Tm8gY29kZSBnZW5lcmF0ZWQuXG5cbiI7Ci0gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAg
ICAgaWYgKGRlYnVnT3B0aW9ucyAmIEVEZWJ1Z09wSW50ZXJtZWRpYXRlKQotICAgICAgICAgICAg
aW50ZXJtZWRpYXRlLm91dHB1dFRyZWUocGFyc2VDb250ZXh0LnRyZWVSb290KTsKLSAgICB9IGVs
c2UgaWYgKCFwYXJzZUNvbnRleHQudHJlZVJvb3QpIHsKLSAgICAgICAgcGFyc2VDb250ZXh0LmVy
cm9yKDEsICJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLiIsICIiLCAiIik7Ci0gICAgICAgIHBhcnNl
Q29udGV4dC5pbmZvU2luay5pbmZvIDw8IHBhcnNlQ29udGV4dC5udW1FcnJvcnMgPDwgIiBjb21w
aWxhdGlvbiBlcnJvcnMuICBObyBjb2RlIGdlbmVyYXRlZC5cblxuIjsKLSAgICAgICAgc3VjY2Vz
cyA9IGZhbHNlOwotICAgICAgICBpZiAoZGVidWdPcHRpb25zICYgRURlYnVnT3BJbnRlcm1lZGlh
dGUpCi0gICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShwYXJzZUNvbnRleHQudHJl
ZVJvb3QpOwotICAgIH0KLQotICAgIGludGVybWVkaWF0ZS5yZW1vdmUocGFyc2VDb250ZXh0LnRy
ZWVSb290KTsKLQotICAgIC8vCi0gICAgLy8gRW5zdXJlIHN5bWJvbCB0YWJsZSBpcyByZXR1cm5l
ZCB0byB0aGUgYnVpbHQtaW4gbGV2ZWwsCi0gICAgLy8gdGhyb3dpbmcgYXdheSBhbGwgYnV0IHRo
ZSBidWlsdC1pbnMuCi0gICAgLy8KLSAgICB3aGlsZSAoIXN5bWJvbFRhYmxlLmF0QnVpbHRJbkxl
dmVsKCkpCi0gICAgICAgIHN5bWJvbFRhYmxlLnBvcCgpOwotCi0gICAgRmluYWxpemVQcmVwcm9j
ZXNzb3IoKTsKLSAgICAvLwotICAgIC8vIFRocm93IGF3YXkgYWxsIHRoZSB0ZW1wb3JhcnkgbWVt
b3J5IHVzZWQgYnkgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuCi0gICAgLy8KLSAgICBHbG9iYWxQ
b29sQWxsb2NhdG9yLnBvcCgpOwotCi0gICAgcmV0dXJuIHN1Y2Nlc3MgPyAxIDogMDsKLX0KLQot
Ly8KLS8vIFJldHVybiBhbnkgY29tcGlsZXIgbG9nIG9mIG1lc3NhZ2VzIGZvciB0aGUgYXBwbGlj
YXRpb24uCi0vLwotY29uc3QgY2hhciogU2hHZXRJbmZvTG9nKGNvbnN0IFNoSGFuZGxlIGhhbmRs
ZSkKLXsKLSAgICBpZiAoIUluaXRUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBp
ZiAoaGFuZGxlID09IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVFNoSGFuZGxlQmFzZSog
YmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwotICAgIFRJbmZvU2lu
ayogaW5mb1NpbmsgPSAwOwotCi0gICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKLSAgICAg
ICAgaW5mb1NpbmsgPSAmKGJhc2UtPmdldEFzQ29tcGlsZXIoKS0+Z2V0SW5mb1NpbmsoKSk7Ci0K
LSAgICBpbmZvU2luay0+aW5mbyA8PCBpbmZvU2luay0+ZGVidWcuY19zdHIoKTsKLSAgICByZXR1
cm4gaW5mb1NpbmstPmluZm8uY19zdHIoKTsKLX0KLQotLy8KLS8vIFJldHVybiBhbnkgb2JqZWN0
IGNvZGUuCi0vLwotY29uc3QgY2hhciogU2hHZXRPYmplY3RDb2RlKGNvbnN0IFNoSGFuZGxlIGhh
bmRsZSkKLXsKLSAgICBpZiAoIUluaXRUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpZiAoaGFuZGxlID09IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVFNoSGFuZGxlQmFz
ZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRsZUJhc2UqPihoYW5kbGUpOwotICAgIFRJbmZv
U2luayogaW5mb1Npbms7Ci0KLSAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQotICAgICAg
ICBpbmZvU2luayA9ICYoYmFzZS0+Z2V0QXNDb21waWxlcigpLT5nZXRJbmZvU2luaygpKTsKLQot
ICAgIHJldHVybiBpbmZvU2luay0+b2JqLmNfc3RyKCk7Ci19CkluZGV4OiBBTkdMRS9zcmMvY29t
cGlsZXIvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9T
eW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1N5
bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMTYgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8KLS8vIFN5bWJvbCB0YWJsZSBmb3IgcGFyc2luZy4gIE1vc3QgZnVuY3Rp
b25hbGl5IGFuZCBtYWluIGlkZWFzCi0vLyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgaGVhZGVyIGZp
bGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLQotI2luY2x1ZGUg
PHN0ZGlvLmg+Ci0KLS8vCi0vLyBUVHlwZSBoZWxwZXIgZnVuY3Rpb24gbmVlZHMgYSBwbGFjZSB0
byBsaXZlLgotLy8KLQotLy8KLS8vIFJlY3Vyc2l2ZWx5IGdlbmVyYXRlIG1hbmdsZWQgbmFtZXMu
Ci0vLwotdm9pZCBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJiBtYW5nbGVkTmFtZSkK
LXsKLSAgICBpZiAoaXNNYXRyaXgoKSkKLSAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ20nOwotICAg
IGVsc2UgaWYgKGlzVmVjdG9yKCkpCi0gICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKLQotICAg
IHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgICBtYW5nbGVk
TmFtZSArPSAnZic7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAg
IG1hbmdsZWROYW1lICs9ICdpJzsgICAgICBicmVhazsKLSAgICBjYXNlIEVidEJvb2w6ICAgICAg
ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEOiAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgIG1hbmdsZWROYW1lICs9ICJzQyI7ICAgICBicmVhazsK
LSAgICBjYXNlIEVidFN0cnVjdDoKLSAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInN0cnVjdC0iOwot
ICAgICAgICBpZiAodHlwZU5hbWUpCi0gICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAqdHlwZU5h
bWU7Ci0gICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwotICAgICAgICAgICAgICAgICgqc3RydWN0dXJlKVtp
XS50eXBlLT5idWlsZE1hbmdsZWROYW1lKG1hbmdsZWROYW1lKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1hbmds
ZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOwotICAg
IGlmIChpc0FycmF5KCkpIHsKLSAgICAgICAgY2hhciBidWZbMjBdOwotICAgICAgICBzcHJpbnRm
KGJ1ZiwgIiVkIiwgYXJyYXlTaXplKTsKLSAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ1snOwotICAg
ICAgICBtYW5nbGVkTmFtZSArPSBidWY7Ci0gICAgICAgIG1hbmdsZWROYW1lICs9ICddJzsKLSAg
ICB9Ci19Ci0KLWludCBUVHlwZTo6Z2V0U3RydWN0U2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFn
ZXRTdHJ1Y3QoKSkgewotICAgICAgICBhc3NlcnQoZmFsc2UgJiYgIk5vdCBhIHN0cnVjdCIpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoc3RydWN0dXJlU2l6ZSA9PSAwKQot
ICAgICAgICBmb3IgKFRUeXBlTGlzdDo6Y29uc3RfaXRlcmF0b3IgdGwgPSBnZXRTdHJ1Y3QoKS0+
YmVnaW4oKTsgdGwgIT0gZ2V0U3RydWN0KCktPmVuZCgpOyB0bCsrKQotICAgICAgICAgICAgc3Ry
dWN0dXJlU2l6ZSArPSAoKCp0bCkudHlwZSktPmdldE9iamVjdFNpemUoKTsKLQotICAgIHJldHVy
biBzdHJ1Y3R1cmVTaXplOwotfQotCi0vLwotLy8gRHVtcCBmdW5jdGlvbnMuCi0vLwotCi12b2lk
IFRWYXJpYWJsZTo6ZHVtcChUSW5mb1NpbmsmIGluZm9TaW5rKSBjb25zdAotewotICAgIGluZm9T
aW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgdHlwZS5nZXRRdWFsaWZp
ZXJTdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICIgPDwg
dHlwZS5nZXRCYXNpY1N0cmluZygpOwotICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgewotICAgICAg
ICBpbmZvU2luay5kZWJ1ZyA8PCAiWzBdIjsKLSAgICB9Ci0gICAgaW5mb1NpbmsuZGVidWcgPDwg
IlxuIjsKLX0KLQotdm9pZCBURnVuY3Rpb246OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29u
c3QKLXsKLSAgICBpbmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19zdHIoKSA8PCAiOiAiIDw8
ICByZXR1cm5UeXBlLmdldEJhc2ljU3RyaW5nKCkgPDwgIiAiIDw8IGdldE1hbmdsZWROYW1lKCku
Y19zdHIoKSA8PCAiXG4iOwotfQotCi12b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpkdW1wKFRJbmZv
U2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBpdDsK
LSAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpCi0g
ICAgICAgICgqaXQpLnNlY29uZC0+ZHVtcChpbmZvU2luayk7Ci19Ci0KLXZvaWQgVFN5bWJvbFRh
YmxlOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgZm9yIChpbnQgbGV2
ZWwgPSBjdXJyZW50TGV2ZWwoKTsgbGV2ZWwgPj0gMDsgLS1sZXZlbCkgewotICAgICAgICBpbmZv
U2luay5kZWJ1ZyA8PCAiTEVWRUwgIiA8PCBsZXZlbCA8PCAiXG4iOwotICAgICAgICB0YWJsZVts
ZXZlbF0tPmR1bXAoaW5mb1NpbmspOwotICAgIH0KLX0KLQotLy8KLS8vIEZ1bmN0aW9ucyBoYXZl
IGJ1cmllZCBwb2ludGVycyB0byBkZWxldGUuCi0vLwotVEZ1bmN0aW9uOjp+VEZ1bmN0aW9uKCkK
LXsKLSAgICBmb3IgKFRQYXJhbUxpc3Q6Oml0ZXJhdG9yIGkgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7
IGkgIT0gcGFyYW1ldGVycy5lbmQoKTsgKytpKQotICAgICAgICBkZWxldGUgKCppKS50eXBlOwot
fQotCi0vLwotLy8gU3ltYm9sIHRhYmxlIGxldmVscyBhcmUgYSBtYXAgb2YgcG9pbnRlcnMgdG8g
c3ltYm9scyB0aGF0IGhhdmUgdG8gYmUgZGVsZXRlZC4KLS8vCi1UU3ltYm9sVGFibGVMZXZlbDo6
flRTeW1ib2xUYWJsZUxldmVsKCkKLXsKLSAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBs
ZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKLSAgICAgICAgZGVsZXRlICgq
aXQpLnNlY29uZDsKLX0KLQotLy8KLS8vIENoYW5nZSBhbGwgZnVuY3Rpb24gZW50cmllcyBpbiB0
aGUgdGFibGUgd2l0aCB0aGUgbm9uLW1hbmdsZWQgbmFtZQotLy8gdG8gYmUgcmVsYXRlZCB0byB0
aGUgcHJvdmlkZWQgYnVpbHQtaW4gb3BlcmF0aW9uLiAgVGhpcyBpcyBhIGxvdwotLy8gcGVyZm9y
bWFuY2Ugb3BlcmF0aW9uLCBhbmQgb25seSBpbnRlbmRlZCBmb3Igc3ltYm9sIHRhYmxlcyB0aGF0
Ci0vLyBsaXZlIGFjcm9zcyBhIGxhcmdlIG51bWJlciBvZiBjb21waWxlcy4KLS8vCi12b2lkIFRT
eW1ib2xUYWJsZUxldmVsOjpyZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVy
YXRvciBvcCkKLXsKLSAgICB0TGV2ZWw6Oml0ZXJhdG9yIGl0OwotICAgIGZvciAoaXQgPSBsZXZl
bC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoKCppdCku
c2Vjb25kLT5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24g
PSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPigoKml0KS5zZWNvbmQpOwotICAgICAgICAgICAgaWYg
KGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgICAgICBmdW5jdGlvbi0+
cmVsYXRlVG9PcGVyYXRvcihvcCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLQotVFN5bWJvbDo6
VFN5bWJvbChjb25zdCBUU3ltYm9sJiBjb3B5T2YpCi17Ci0gICAgbmFtZSA9IE5ld1Bvb2xUU3Ry
aW5nKGNvcHlPZi5uYW1lLT5jX3N0cigpKTsKLSAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJ
ZDsKLX0KLQotVFZhcmlhYmxlOjpUVmFyaWFibGUoY29uc3QgVFZhcmlhYmxlJiBjb3B5T2YsIFRT
dHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKSA6IFRTeW1ib2woY29weU9mKQotewotICAgIHR5cGUuY29w
eVR5cGUoY29weU9mLnR5cGUsIHJlbWFwcGVyKTsKLSAgICB1c2VyVHlwZSA9IGNvcHlPZi51c2Vy
VHlwZTsKLSAgICAvLyBmb3IgYnVpbHRJbiBzeW1ib2wgdGFibGUgbGV2ZWwsIHVuaW9uQXJyYXkg
YW5kIGFycmF5SW5mb3JtYXRpb24gcG9pbnRlcnMgc2hvdWxkIGJlIE5VTEwKLSAgICBhc3NlcnQo
Y29weU9mLmFycmF5SW5mb3JtYXRpb25UeXBlID09IDApOwotICAgIGFycmF5SW5mb3JtYXRpb25U
eXBlID0gMDsKLQotICAgIGlmIChjb3B5T2YudW5pb25BcnJheSkgewotICAgICAgICBhc3NlcnQo
IWNvcHlPZi50eXBlLmdldFN0cnVjdCgpKTsKLSAgICAgICAgYXNzZXJ0KGNvcHlPZi50eXBlLmdl
dE9iamVjdFNpemUoKSA9PSAxKTsKLSAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5WzBdID0gY29weU9mLnVuaW9uQXJyYXlbMF07Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHVuaW9uQXJyYXkgPSAwOwotfQotCi1UVmFyaWFibGUqIFRWYXJp
YWJsZTo6Y2xvbmUoVFN0cnVjdHVyZU1hcCYgcmVtYXBwZXIpCi17Ci0gICAgVFZhcmlhYmxlICp2
YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoKnRoaXMsIHJlbWFwcGVyKTsKLQotICAgIHJldHVybiB2
YXJpYWJsZTsKLX0KLQotVEZ1bmN0aW9uOjpURnVuY3Rpb24oY29uc3QgVEZ1bmN0aW9uJiBjb3B5
T2YsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKSA6IFRTeW1ib2woY29weU9mKQotewotICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29weU9mLnBhcmFtZXRlcnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKLSAgICAgICAgcGFyYW1ldGVycy5wdXNoX2Jh
Y2socGFyYW0pOwotICAgICAgICBwYXJhbWV0ZXJzLmJhY2soKS5jb3B5UGFyYW0oY29weU9mLnBh
cmFtZXRlcnNbaV0sIHJlbWFwcGVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm5UeXBlLmNvcHlUeXBl
KGNvcHlPZi5yZXR1cm5UeXBlLCByZW1hcHBlcik7Ci0gICAgbWFuZ2xlZE5hbWUgPSBjb3B5T2Yu
bWFuZ2xlZE5hbWU7Ci0gICAgb3AgPSBjb3B5T2Yub3A7Ci0gICAgZGVmaW5lZCA9IGNvcHlPZi5k
ZWZpbmVkOwotfQotCi1URnVuY3Rpb24qIFRGdW5jdGlvbjo6Y2xvbmUoVFN0cnVjdHVyZU1hcCYg
cmVtYXBwZXIpCi17Ci0gICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oKnRo
aXMsIHJlbWFwcGVyKTsKLQotICAgIHJldHVybiBmdW5jdGlvbjsKLX0KLQotVFN5bWJvbFRhYmxl
TGV2ZWwqIFRTeW1ib2xUYWJsZUxldmVsOjpjbG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcikK
LXsKLSAgICBUU3ltYm9sVGFibGVMZXZlbCAqc3ltVGFibGVMZXZlbCA9IG5ldyBUU3ltYm9sVGFi
bGVMZXZlbCgpOwotICAgIHRMZXZlbDo6aXRlcmF0b3IgaXRlcjsKLSAgICBmb3IgKGl0ZXIgPSBs
ZXZlbC5iZWdpbigpOyBpdGVyICE9IGxldmVsLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgc3lt
VGFibGVMZXZlbC0+aW5zZXJ0KCppdGVyLT5zZWNvbmQtPmNsb25lKHJlbWFwcGVyKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHN5bVRhYmxlTGV2ZWw7Ci19Ci0KLXZvaWQgVFN5bWJvbFRhYmxlOjpj
b3B5VGFibGUoY29uc3QgVFN5bWJvbFRhYmxlJiBjb3B5T2YpCi17Ci0gICAgVFN0cnVjdHVyZU1h
cCByZW1hcHBlcjsKLSAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJZDsKLSAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGNvcHlPZi50YWJsZS5zaXplKCk7ICsraSkgewotICAgICAg
ICB0YWJsZS5wdXNoX2JhY2soY29weU9mLnRhYmxlW2ldLT5jbG9uZShyZW1hcHBlcikpOwotICAg
IH0KLSAgICBmb3IoIHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvcHlPZi5wcmVjaXNpb25TdGFj
ay5zaXplKCk7IGkrKykgewotICAgICAgICBwcmVjaXNpb25TdGFjay5wdXNoX2JhY2soIGNvcHlP
Zi5wcmVjaXNpb25TdGFja1tpXSApOwotICAgIH0KLX0KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xU
YWJsZS5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMzMSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0jaWZuZGVmIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCi0jZGVmaW5lIF9TWU1CT0xfVEFCTEVf
SU5DTFVERURfCi0KLS8vCi0vLyBTeW1ib2wgdGFibGUgZm9yIHBhcnNpbmcuICBIYXMgdGhlc2Ug
ZGVzaWduIGNoYXJhY3RlcmlzdGljczoKLS8vCi0vLyAqIFNhbWUgc3ltYm9sIHRhYmxlIGNhbiBi
ZSB1c2VkIHRvIGNvbXBpbGUgbWFueSBzaGFkZXJzLCB0byBwcmVzZXJ2ZQotLy8gICBlZmZvcnQg
b2YgY3JlYXRpbmcgYW5kIGxvYWRpbmcgd2l0aCB0aGUgbGFyZ2UgbnVtYmVycyBvZiBidWlsdC1p
bgotLy8gICBzeW1ib2xzLgotLy8KLS8vICogTmFtZSBtYW5nbGluZyB3aWxsIGJlIHVzZWQgdG8g
Z2l2ZSBlYWNoIGZ1bmN0aW9uIGEgdW5pcXVlIG5hbWUKLS8vICAgc28gdGhhdCBzeW1ib2wgdGFi
bGUgbG9va3VwcyBhcmUgbmV2ZXIgYW1iaWd1b3VzLiAgVGhpcyBhbGxvd3MKLS8vICAgYSBzaW1w
bGVyIHN5bWJvbCB0YWJsZSBzdHJ1Y3R1cmUuCi0vLwotLy8gKiBQdXNoaW5nIGFuZCBwb3BwaW5n
IG9mIHNjb3BlLCBzbyBzeW1ib2wgdGFibGUgd2lsbCByZWFsbHkgYmUgYSBzdGFjayAKLS8vICAg
b2Ygc3ltYm9sIHRhYmxlcy4gIFNlYXJjaGVkIGZyb20gdGhlIHRvcCwgd2l0aCBuZXcgaW5zZXJ0
cyBnb2luZyBpbnRvCi0vLyAgIHRoZSB0b3AuCi0vLwotLy8gKiBDb25zdGFudHM6ICBDb21waWxl
IHRpbWUgY29uc3RhbnQgc3ltYm9scyB3aWxsIGtlZXAgdGhlaXIgdmFsdWVzCi0vLyAgIGluIHRo
ZSBzeW1ib2wgdGFibGUuICBUaGUgcGFyc2VyIGNhbiBzdWJzdGl0dXRlIGNvbnN0YW50cyBhdCBw
YXJzZQotLy8gICB0aW1lLCBpbmNsdWRpbmcgZG9pbmcgY29uc3RhbnQgZm9sZGluZyBhbmQgY29u
c3RhbnQgcHJvcGFnYXRpb24uCi0vLwotLy8gKiBObyB0ZW1wb3JhcmllczogIFRlbXBvcmFyaWVz
IG1hZGUgZnJvbSBvcGVyYXRpb25zICgrLCAtLSwgLnh5LCBldGMuKQotLy8gICBhcmUgdHJhY2tl
ZCBpbiB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLCBub3QgdGhlIHN5bWJvbCB0YWJs
ZS4KLS8vCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotI2luY2x1ZGUgImNvbXBpbGVyL0luZm9T
aW5rLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCi0KLS8vCi0vLyBTeW1i
b2wgYmFzZSBjbGFzcy4gIChDYW4gYnVpbGQgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBvdXQgb2Yg
dGhlc2UuLi4pCi0vLwotY2xhc3MgVFN5bWJvbCB7ICAgIAotcHVibGljOgotICAgIFBPT0xfQUxM
T0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikKLSAgICBUU3ltYm9sKGNvbnN0
IFRTdHJpbmcgKm4pIDogIG5hbWUobikgeyB9Ci0gICAgdmlydHVhbCB+VFN5bWJvbCgpIHsgLyog
ZG9uJ3QgZGVsZXRlIG5hbWUsIGl0J3MgZnJvbSB0aGUgcG9vbCAqLyB9Ci0gICAgY29uc3QgVFN0
cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuICpuYW1lOyB9Ci0gICAgdmlydHVhbCBjb25z
dCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGdldE5hbWUoKTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dm9pZCBzZXRVbmlxdWVJZChpbnQgaWQpIHsgdW5pcXVlSWQgPSBpZDsgfQotICAgIGludCBnZXRV
bmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJuIHVuaXF1ZUlkOyB9Ci0gICAgdmlydHVhbCB2b2lkIGR1
bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QgPSAwOwkKLSAgICBUU3ltYm9sKGNvbnN0IFRT
eW1ib2wmKTsKLSAgICB2aXJ0dWFsIFRTeW1ib2wqIGNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFw
cGVyKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBjb25zdCBUU3RyaW5nICpuYW1lOwotICAgIHVu
c2lnbmVkIGludCB1bmlxdWVJZDsgICAgICAvLyBGb3IgcmVhbCBjb21wYXJpbmcgZHVyaW5nIGNv
ZGUgZ2VuZXJhdGlvbgotfTsKLQotLy8KLS8vIFZhcmlhYmxlIGNsYXNzLCBtZWFuaW5nIGEgc3lt
Ym9sIHRoYXQncyBub3QgYSBmdW5jdGlvbi4KLS8vIAotLy8gVGhlcmUgY291bGQgYmUgYSBzZXBh
cmF0ZSBjbGFzcyBoZWlyYXJjaHkgZm9yIENvbnN0YW50IHZhcmlhYmxlczsKLS8vIE9ubHkgb25l
IG9mIGludCwgYm9vbCwgb3IgZmxvYXQsIChvciBub25lKSBpcyBjb3JyZWN0IGZvcgotLy8gYW55
IHBhcnRpY3VsYXIgdXNlLCBidXQgaXQncyBlYXN5IHRvIGRvIHRoaXMgd2F5LCBhbmQgZG9lc24n
dAotLy8gc2VlbSB3b3J0aCBoYXZpbmcgc2VwYXJhdGUgY2xhc3NlcywgYW5kICJnZXRDb25zdCIg
Y2FuJ3Qgc2ltcGx5IHJldHVybgotLy8gZGlmZmVyZW50IHZhbHVlcyBmb3IgZGlmZmVyZW50IHR5
cGVzIHBvbHltb3JwaGljYWxseSwgc28gdGhpcyBpcyAKLS8vIGp1c3Qgc2ltcGxlIGFuZCBwcmFn
bWF0aWMuCi0vLwotY2xhc3MgVFZhcmlhYmxlIDogcHVibGljIFRTeW1ib2wgewotcHVibGljOgot
ICAgIFRWYXJpYWJsZShjb25zdCBUU3RyaW5nICpuYW1lLCBjb25zdCBUVHlwZSYgdCwgYm9vbCB1
VCA9IGZhbHNlICkgOiBUU3ltYm9sKG5hbWUpLCB0eXBlKHQpLCB1c2VyVHlwZSh1VCksIHVuaW9u
QXJyYXkoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApIHsgfQotICAgIHZpcnR1YWwgflRWYXJp
YWJsZSgpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfSAgICAKLSAgICBUVHlwZSYgZ2V0VHlwZSgpIHsgcmV0dXJuIHR5cGU7IH0gICAgCi0g
ICAgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9Ci0gICAgYm9v
bCBpc1VzZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gdXNlclR5cGU7IH0KLSAgICB2b2lkIHNldFF1
YWxpZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBlLnNldFF1YWxpZmllcihxdWFsaWZp
ZXIpOyB9Ci0gICAgdm9pZCB1cGRhdGVBcnJheUluZm9ybWF0aW9uVHlwZShUVHlwZSAqdCkgeyBh
cnJheUluZm9ybWF0aW9uVHlwZSA9IHQ7IH0KLSAgICBUVHlwZSogZ2V0QXJyYXlJbmZvcm1hdGlv
blR5cGUoKSB7IHJldHVybiBhcnJheUluZm9ybWF0aW9uVHlwZTsgfQotCi0gICAgdmlydHVhbCB2
b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7Ci0KLSAgICBDb25zdGFudFVuaW9u
KiBnZXRDb25zdFBvaW50ZXIoKQotICAgIHsgCi0gICAgICAgIGlmICghdW5pb25BcnJheSkKLSAg
ICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBlLmdldE9iamVjdFNp
emUoKV07Ci0KLSAgICAgICAgcmV0dXJuIHVuaW9uQXJyYXk7Ci0gICAgfQotCi0gICAgQ29uc3Rh
bnRVbmlvbiogZ2V0Q29uc3RQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheTsgfQot
Ci0gICAgdm9pZCBzaGFyZUNvbnN0UG9pbnRlciggQ29uc3RhbnRVbmlvbiAqY29uc3RBcnJheSkK
LSAgICB7Ci0gICAgICAgIGRlbGV0ZSB1bmlvbkFycmF5OwotICAgICAgICB1bmlvbkFycmF5ID0g
Y29uc3RBcnJheTsgIAotICAgIH0KLSAgICBUVmFyaWFibGUoY29uc3QgVFZhcmlhYmxlJiwgVFN0
cnVjdHVyZU1hcCYgcmVtYXBwZXIpOyAvLyBjb3B5IGNvbnN0cnVjdG9yCi0gICAgdmlydHVhbCBU
VmFyaWFibGUqIGNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsKLQotcHJvdGVjdGVkOgot
ICAgIFRUeXBlIHR5cGU7Ci0gICAgYm9vbCB1c2VyVHlwZTsKLSAgICAvLyB3ZSBhcmUgYXNzdW1p
bmcgdGhhdCBQb29sIEFsbG9jYXRvciB3aWxsIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8g
dW5pb25BcnJheQotICAgIC8vIHdoZW4gdGhpcyBvYmplY3QgaXMgZGVzdHJveWVkCi0gICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheTsKLSAgICBUVHlwZSAqYXJyYXlJbmZvcm1hdGlvblR5cGU7
ICAvLyB0aGlzIGlzIHVzZWQgZm9yIHVwZGF0aW5nIG1heEFycmF5U2l6ZSBpbiBhbGwgdGhlIHJl
ZmVyZW5jZXMgdG8gYSBnaXZlbiBzeW1ib2wKLX07Ci0KLS8vCi0vLyBUaGUgZnVuY3Rpb24gc3Vi
LWNsYXNzIG9mIHN5bWJvbHMgYW5kIHRoZSBwYXJzZXIgd2lsbCBuZWVkIHRvCi0vLyBzaGFyZSB0
aGlzIGRlZmluaXRpb24gb2YgYSBmdW5jdGlvbiBwYXJhbWV0ZXIuCi0vLwotc3RydWN0IFRQYXJh
bWV0ZXIgewotICAgIFRTdHJpbmcgKm5hbWU7Ci0gICAgVFR5cGUqIHR5cGU7Ci0gICAgdm9pZCBj
b3B5UGFyYW0oY29uc3QgVFBhcmFtZXRlciYgcGFyYW0sIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVy
KQotICAgIHsKLSAgICAgICAgbmFtZSA9IE5ld1Bvb2xUU3RyaW5nKHBhcmFtLm5hbWUtPmNfc3Ry
KCkpOwotICAgICAgICB0eXBlID0gcGFyYW0udHlwZS0+Y2xvbmUocmVtYXBwZXIpOwotICAgIH0K
LX07Ci0KLS8vCi0vLyBUaGUgZnVuY3Rpb24gc3ViLWNsYXNzIG9mIGEgc3ltYm9sLiAgCi0vLwot
Y2xhc3MgVEZ1bmN0aW9uIDogcHVibGljIFRTeW1ib2wgewotcHVibGljOgotICAgIFRGdW5jdGlv
bihUT3BlcmF0b3IgbykgOgotICAgICAgICBUU3ltYm9sKDApLAotICAgICAgICByZXR1cm5UeXBl
KFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLAotICAgICAgICBvcChvKSwKLSAgICAgICAg
ZGVmaW5lZChmYWxzZSkgeyB9Ci0gICAgVEZ1bmN0aW9uKGNvbnN0IFRTdHJpbmcgKm5hbWUsIFRU
eXBlJiByZXRUeXBlLCBUT3BlcmF0b3IgdE9wID0gRU9wTnVsbCkgOiAKLSAgICAgICAgVFN5bWJv
bChuYW1lKSwgCi0gICAgICAgIHJldHVyblR5cGUocmV0VHlwZSksCi0gICAgICAgIG1hbmdsZWRO
YW1lKFRGdW5jdGlvbjo6bWFuZ2xlTmFtZSgqbmFtZSkpLAotICAgICAgICBvcCh0T3ApLAotICAg
ICAgICBkZWZpbmVkKGZhbHNlKSB7IH0KLSAgICB2aXJ0dWFsIH5URnVuY3Rpb24oKTsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gICAgCi0KLSAg
ICBzdGF0aWMgVFN0cmluZyBtYW5nbGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpIHsgcmV0dXJu
IG5hbWUgKyAnKCc7IH0KLSAgICBzdGF0aWMgVFN0cmluZyB1bm1hbmdsZU5hbWUoY29uc3QgVFN0
cmluZyYgbWFuZ2xlZE5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gVFN0cmluZyhtYW5nbGVk
TmFtZS5jX3N0cigpLCBtYW5nbGVkTmFtZS5maW5kX2ZpcnN0X29mKCcoJykpOwotICAgIH0KLQot
ICAgIHZvaWQgYWRkUGFyYW1ldGVyKFRQYXJhbWV0ZXImIHApIAotICAgIHsgCi0gICAgICAgIHBh
cmFtZXRlcnMucHVzaF9iYWNrKHApOwotICAgICAgICBtYW5nbGVkTmFtZSA9IG1hbmdsZWROYW1l
ICsgcC50eXBlLT5nZXRNYW5nbGVkTmFtZSgpOwotICAgIH0KLQotICAgIGNvbnN0IFRTdHJpbmcm
IGdldE1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbWFuZ2xlZE5hbWU7IH0KLSAgICBjb25z
dCBUVHlwZSYgZ2V0UmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHJldHVyblR5cGU7IH0KLSAg
ICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoVE9wZXJhdG9yIG8pIHsgb3AgPSBvOyB9Ci0gICAgVE9w
ZXJhdG9yIGdldEJ1aWx0SW5PcCgpIGNvbnN0IHsgcmV0dXJuIG9wOyB9Ci0gICAgdm9pZCBzZXRE
ZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNEZWZpbmVkKCkgeyByZXR1
cm4gZGVmaW5lZDsgfQotCi0gICAgaW50IGdldFBhcmFtQ291bnQoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHBhcmFtZXRlcnMuc2l6ZSgpKTsgfSAgICAKLSAgICBUUGFyYW1ldGVy
JiBvcGVyYXRvciBbXShpbnQgaSkgICAgICAgeyByZXR1cm4gcGFyYW1ldGVyc1tpXTsgfQotICAg
IGNvbnN0IFRQYXJhbWV0ZXImIG9wZXJhdG9yIFtdKGludCBpKSBjb25zdCB7IHJldHVybiBwYXJh
bWV0ZXJzW2ldOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5r
KSBjb25zdDsKLSAgICBURnVuY3Rpb24oY29uc3QgVEZ1bmN0aW9uJiwgVFN0cnVjdHVyZU1hcCYg
cmVtYXBwZXIpOwotICAgIHZpcnR1YWwgVEZ1bmN0aW9uKiBjbG9uZShUU3RydWN0dXJlTWFwJiBy
ZW1hcHBlcik7Ci0KLXByb3RlY3RlZDoKLSAgICB0eXBlZGVmIFRWZWN0b3I8VFBhcmFtZXRlcj4g
VFBhcmFtTGlzdDsKLSAgICBUUGFyYW1MaXN0IHBhcmFtZXRlcnM7Ci0gICAgVFR5cGUgcmV0dXJu
VHlwZTsKLSAgICBUU3RyaW5nIG1hbmdsZWROYW1lOwotICAgIFRPcGVyYXRvciBvcDsKLSAgICBi
b29sIGRlZmluZWQ7Ci19OwotCi0KLWNsYXNzIFRTeW1ib2xUYWJsZUxldmVsIHsKLXB1YmxpYzoK
LSAgICB0eXBlZGVmIFRNYXA8VFN0cmluZywgVFN5bWJvbCo+IHRMZXZlbDsKLSAgICB0eXBlZGVm
IHRMZXZlbDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBjb25z
dCB0TGV2ZWw6OnZhbHVlX3R5cGUgdExldmVsUGFpcjsKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjx0
TGV2ZWw6Oml0ZXJhdG9yLCBib29sPiB0SW5zZXJ0UmVzdWx0OwotCi0gICAgUE9PTF9BTExPQ0FU
T1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQotICAgIFRTeW1ib2xUYWJsZUxldmVs
KCkgeyB9Ci0gICAgflRTeW1ib2xUYWJsZUxldmVsKCk7Ci0KLSAgICBib29sIGluc2VydChUU3lt
Ym9sJiBzeW1ib2wpIAotICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gcmV0dXJuaW5nIHRy
dWUgbWVhbnMgc3ltYm9sIHdhcyBhZGRlZCB0byB0aGUgdGFibGUKLSAgICAgICAgLy8KLSAgICAg
ICAgdEluc2VydFJlc3VsdCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdCA9IGxldmVsLmluc2VydCh0
TGV2ZWxQYWlyKHN5bWJvbC5nZXRNYW5nbGVkTmFtZSgpLCAmc3ltYm9sKSk7Ci0KLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5zZWNvbmQ7Ci0gICAgfQotCi0gICAgVFN5bWJvbCogZmluZChjb25zdCBU
U3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgdExldmVsOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGxldmVsLmZpbmQobmFtZSk7Ci0gICAgICAgIGlmIChpdCA9PSBsZXZlbC5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4g
KCppdCkuc2Vjb25kOwotICAgIH0KLQotICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBsZXZlbC5iZWdpbigpOwotICAgIH0KLQotICAgIGNvbnN0
X2l0ZXJhdG9yIGVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbGV2ZWwuZW5kKCk7
Ci0gICAgfQotCi0gICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRP
cGVyYXRvciBvcCk7Ci0gICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Owot
ICAgIFRTeW1ib2xUYWJsZUxldmVsKiBjbG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcik7Ci0K
LXByb3RlY3RlZDoKLSAgICB0TGV2ZWwgbGV2ZWw7Ci19OwotCi1jbGFzcyBUU3ltYm9sVGFibGUg
ewotcHVibGljOgotICAgIFRTeW1ib2xUYWJsZSgpIDogdW5pcXVlSWQoMCkKLSAgICB7Ci0gICAg
ICAgIC8vCi0gICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgY2Fubm90IGJlIHVzZWQgdW50aWwg
cHVzaCgpIGlzIGNhbGxlZCwgYnV0Ci0gICAgICAgIC8vIHRoZSBsYWNrIG9mIGFuIGluaXRpYWwg
Y2FsbCB0byBwdXNoKCkgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0Ci0gICAgICAgIC8vIHRoYXQgdGhl
IHN5bWJvbCB0YWJsZSBoYXMgbm90IGJlZW4gcHJlbG9hZGVkIHdpdGggYnVpbHQtaW5zLgotICAg
ICAgICAvLwotICAgIH0KLQotICAgIH5UU3ltYm9sVGFibGUoKQotICAgIHsKLSAgICAgICAgLy8g
bGV2ZWwgMCBpcyBhbHdheXMgYnVpbHQgSW4gc3ltYm9scywgc28gd2UgbmV2ZXIgcG9wIHRoYXQg
b3V0Ci0gICAgICAgIHdoaWxlICh0YWJsZS5zaXplKCkgPiAxKQotICAgICAgICAgICAgcG9wKCk7
Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBXaGVuIHRoZSBzeW1ib2wgdGFibGUgaXMgaW5pdGlh
bGl6ZWQgd2l0aCB0aGUgYnVpbHQtaW5zLCB0aGVyZSBzaG91bGQKLSAgICAvLyAncHVzaCcgY2Fs
bHMsIHNvIHRoYXQgYnVpbHQtaW5zIGFyZSBhdCBsZXZlbCAwIGFuZCB0aGUgc2hhZGVyCi0gICAg
Ly8gZ2xvYmFscyBhcmUgYXQgbGV2ZWwgMS4KLSAgICAvLwotICAgIGJvb2wgaXNFbXB0eSgpIHsg
cmV0dXJuIHRhYmxlLnNpemUoKSA9PSAwOyB9Ci0gICAgYm9vbCBhdEJ1aWx0SW5MZXZlbCgpIHsg
cmV0dXJuIHRhYmxlLnNpemUoKSA9PSAxOyB9Ci0gICAgYm9vbCBhdEdsb2JhbExldmVsKCkgeyBy
ZXR1cm4gdGFibGUuc2l6ZSgpIDw9IDI7IH0KLSAgICB2b2lkIHB1c2goKQotICAgIHsKLSAgICAg
ICAgdGFibGUucHVzaF9iYWNrKG5ldyBUU3ltYm9sVGFibGVMZXZlbCk7Ci0gICAgICAgIHByZWNp
c2lvblN0YWNrLnB1c2hfYmFjayggUHJlY2lzaW9uU3RhY2tMZXZlbCgpICk7Ci0gICAgfQotCi0g
ICAgdm9pZCBwb3AoKQotICAgIHsgCi0gICAgICAgIGRlbGV0ZSB0YWJsZVtjdXJyZW50TGV2ZWwo
KV07IAotICAgICAgICB0YWJsZS5wb3BfYmFjaygpOyAKLSAgICAgICAgcHJlY2lzaW9uU3RhY2su
cG9wX2JhY2soKTsKLSAgICB9Ci0KLSAgICBib29sIGluc2VydChUU3ltYm9sJiBzeW1ib2wpCi0g
ICAgewotICAgICAgICBzeW1ib2wuc2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7Ci0gICAgICAgIHJl
dHVybiB0YWJsZVtjdXJyZW50TGV2ZWwoKV0tPmluc2VydChzeW1ib2wpOwotICAgIH0KLQotICAg
IFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCogYnVpbHRJbiA9IDAsIGJv
b2wgKnNhbWVTY29wZSA9IDApIAotICAgIHsKLSAgICAgICAgaW50IGxldmVsID0gY3VycmVudExl
dmVsKCk7Ci0gICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKLSAgICAgICAgZG8gewotICAgICAgICAg
ICAgc3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUpOwotICAgICAgICAgICAgLS1sZXZl
bDsKLSAgICAgICAgfSB3aGlsZSAoc3ltYm9sID09IDAgJiYgbGV2ZWwgPj0gMCk7Ci0gICAgICAg
IGxldmVsKys7Ci0gICAgICAgIGlmIChidWlsdEluKQotICAgICAgICAgICAgKmJ1aWx0SW4gPSBs
ZXZlbCA9PSAwOwotICAgICAgICBpZiAoc2FtZVNjb3BlKQotICAgICAgICAgICAgKnNhbWVTY29w
ZSA9IGxldmVsID09IGN1cnJlbnRMZXZlbCgpOwotICAgICAgICByZXR1cm4gc3ltYm9sOwotICAg
IH0KLQotICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRHbG9iYWxMZXZlbCgpIHsgYXNzZXJ0KHRh
YmxlLnNpemUoKSA+PSAyKTsgcmV0dXJuIHRhYmxlWzFdOyB9Ci0gICAgdm9pZCByZWxhdGVUb09w
ZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkgeyB0YWJsZVswXS0+cmVsYXRl
VG9PcGVyYXRvcihuYW1lLCBvcCk7IH0KLSAgICBpbnQgZ2V0TWF4U3ltYm9sSWQoKSB7IHJldHVy
biB1bmlxdWVJZDsgfQotICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsK
LSAgICB2b2lkIGNvcHlUYWJsZShjb25zdCBUU3ltYm9sVGFibGUmIGNvcHlPZik7Ci0KLSAgICB2
b2lkIHNldERlZmF1bHRQcmVjaXNpb24oIFRCYXNpY1R5cGUgdHlwZSwgVFByZWNpc2lvbiBwcmVj
ICl7Ci0gICAgICAgIGlmKCB0eXBlICE9IEVidEZsb2F0ICYmIHR5cGUgIT0gRWJ0SW50ICkgcmV0
dXJuOyAvLyBPbmx5IHNldCBkZWZhdWx0IHByZWNpc2lvbiBmb3IgaW50L2Zsb2F0Ci0gICAgICAg
IGludCBpbmRleE9mTGFzdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHByZWNpc2lvblN0YWNr
LnNpemUoKSkgLSAxOwotICAgICAgICBwcmVjaXNpb25TdGFja1tpbmRleE9mTGFzdEVsZW1lbnRd
W3R5cGVdID0gcHJlYzsgLy8gVXNlcyBtYXAgb3BlcmF0b3IgW10sIG92ZXJ3cml0ZXMgdGhlIGN1
cnJlbnQgdmFsdWUKLSAgICB9Ci0KLSAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNpb25T
dGFjayBmb3IgYSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNpY1R5
cGUKLSAgICBUUHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oIFRCYXNpY1R5cGUgdHlwZSl7
Ci0gICAgICAgIGlmKCB0eXBlICE9IEVidEZsb2F0ICYmIHR5cGUgIT0gRWJ0SW50ICkgcmV0dXJu
IEVicFVuZGVmaW5lZDsKLSAgICAgICAgaW50IGxldmVsID0gc3RhdGljX2Nhc3Q8aW50PihwcmVj
aXNpb25TdGFjay5zaXplKCkpIC0gMTsKLSAgICAgICAgYXNzZXJ0KCBsZXZlbCA+PSAwKTsgLy8g
SnVzdCB0byBiZSBzYWZlLiBTaG91bGQgbm90IGhhcHBlbi4KLSAgICAgICAgUHJlY2lzaW9uU3Rh
Y2tMZXZlbDo6aXRlcmF0b3IgaXQ7Ci0gICAgICAgIFRQcmVjaXNpb24gcHJlYyA9IEVicFVuZGVm
aW5lZDsgLy8gSWYgd2UgZG9udCBmaW5kIGFueXRoaW5nIHdlIHJldHVybiB0aGlzLiBTaG91bGQg
d2UgZXJyb3IgY2hlY2sgdGhpcz8KLSAgICAgICAgd2hpbGUoIGxldmVsID49IDAgKXsKLSAgICAg
ICAgICAgIGl0ID0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLmZpbmQoIHR5cGUgKTsKLSAgICAgICAg
ICAgIGlmKCBpdCAhPSBwcmVjaXNpb25TdGFja1tsZXZlbF0uZW5kKCkgKXsKLSAgICAgICAgICAg
ICAgICBwcmVjID0gKCppdCkuc2Vjb25kOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbGV2ZWwtLTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
cHJlYzsKLSAgICB9Ci0KLXByb3RlY3RlZDogICAgCi0gICAgaW50IGN1cnJlbnRMZXZlbCgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odGFibGUuc2l6ZSgpKSAtIDE7IH0KLQotICAg
IHN0ZDo6dmVjdG9yPFRTeW1ib2xUYWJsZUxldmVsKj4gdGFibGU7Ci0gICAgdHlwZWRlZiBzdGQ6
Om1hcDwgVEJhc2ljVHlwZSwgVFByZWNpc2lvbiA+IFByZWNpc2lvblN0YWNrTGV2ZWw7Ci0gICAg
c3RkOjp2ZWN0b3I8IFByZWNpc2lvblN0YWNrTGV2ZWwgPiBwcmVjaXNpb25TdGFjazsKLSAgICBp
bnQgdW5pcXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGluIGNvZGUgZ2Vu
ZXJhdGlvbgotfTsKLQotI2VuZGlmIC8vIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCkluZGV4OiBB
TkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5H
TEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwy
MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvVHJhbnNs
YXRvckdMU0wuaCIKLQotI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEdMU0wuaCIKLQotVHJhbnNs
YXRvckdMU0w6OlRyYW5zbGF0b3JHTFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYykK
LSAgICA6IFRDb21waWxlcihsYW5nLCBzcGVjKSB7Ci19Ci0KLWJvb2wgVHJhbnNsYXRvckdMU0w6
OmNvbXBpbGUoVEludGVybU5vZGUqIHJvb3QpIHsKLSAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNM
KGluZm9TaW5rLm9iaik7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaAkocmV2
aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxOCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVm
IENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCi0jZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JH
TFNMX0hfCi0KLSNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgotCi1jbGFzcyBUcmFuc2xh
dG9yR0xTTCA6IHB1YmxpYyBUQ29tcGlsZXIgewotcHVibGljOgotICAgIFRyYW5zbGF0b3JHTFNM
KEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYyk7Ci0gICAgdmlydHVhbCBib29sIGNvbXBp
bGUoVEludGVybU5vZGUqIHJvb3QpOwotfTsKLQotI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xB
VE9SR0xTTF9IXwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwCShyZXZp
c2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci9PdXRw
dXRITFNMLmgiCi0KLVRyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChFU2hMYW5ndWFnZSBs
YW5nLCBFU2hTcGVjIHNwZWMpCi0gICAgOiBUQ29tcGlsZXIobGFuZywgc3BlYykKLXsKLX0KLQot
Ym9vbCBUcmFuc2xhdG9ySExTTDo6Y29tcGlsZShUSW50ZXJtTm9kZSAqcm9vdCkKLXsKLSAgICBU
UGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHQgPSAqR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7Ci0g
ICAgc2g6Ok91dHB1dEhMU0wgb3V0cHV0SExTTChwYXJzZUNvbnRleHQpOwotCi0gICAgb3V0cHV0
SExTTC5vdXRwdXQoKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KSW5kZXg6IEFOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9ySExTTC5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9ySExTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KLSNk
ZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1No
SGFuZGxlLmgiCi0KLWNsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7Ci1w
dWJsaWM6Ci0gICAgVHJhbnNsYXRvckhMU0woRVNoTGFuZ3VhZ2UgbGFuZywgRVNoU3BlYyBzcGVj
KTsKLSAgICB2aXJ0dWFsIGJvb2wgY29tcGlsZShUSW50ZXJtTm9kZSogcm9vdCk7Ci19OwotCi0j
ZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCkluZGV4OiBBTkdMRS9zcmMvY29t
cGlsZXIvVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaAko
cmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwyOTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfVFlQ
RVNfSU5DTFVERUQKLSNkZWZpbmUgX1RZUEVTX0lOQ0xVREVECi0KLSNpbmNsdWRlICJjb21waWxl
ci9CYXNlVHlwZXMuaCIKLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKLSNpbmNsdWRlICJj
b21waWxlci9kZWJ1Zy5oIgotCi0vLwotLy8gTmVlZCB0byBoYXZlIGFzc29jaWF0aW9uIG9mIGxp
bmUgbnVtYmVycyB0byB0eXBlcyBpbiBhIGxpc3QgZm9yIGJ1aWxkaW5nIHN0cnVjdHMuCi0vLwot
Y2xhc3MgVFR5cGU7Ci1zdHJ1Y3QgVFR5cGVMaW5lIHsKLSAgICBUVHlwZSogdHlwZTsKLSAgICBp
bnQgbGluZTsKLX07Ci10eXBlZGVmIFRWZWN0b3I8VFR5cGVMaW5lPiBUVHlwZUxpc3Q7Ci0KLWlu
bGluZSBUVHlwZUxpc3QqIE5ld1Bvb2xUVHlwZUxpc3QoKQotewotICAgIHZvaWQqIG1lbW9yeSA9
IEdsb2JhbFBvb2xBbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZW9mKFRUeXBlTGlzdCkpOwotICAgIHJl
dHVybiBuZXcobWVtb3J5KSBUVHlwZUxpc3Q7Ci19Ci0KLS8vCi0vLyBUaGlzIGlzIGEgd29ya2Fy
b3VuZCBmb3IgYSBwcm9ibGVtIHdpdGggdGhlIHlhY2Mgc3RhY2ssICBJdCBjYW4ndCBoYXZlCi0v
LyB0eXBlcyB0aGF0IGl0IHRoaW5rcyBoYXZlIG5vbi10cml2aWFsIGNvbnN0cnVjdG9ycy4gIEl0
IHNob3VsZAotLy8ganVzdCBiZSB1c2VkIHdoaWxlIHJlY29nbml6aW5nIHRoZSBncmFtbWFyLCBu
b3QgYW55dGhpbmcgZWxzZS4gIFBvaW50ZXJzCi0vLyBjb3VsZCBiZSB1c2VkLCBidXQgYWxzbyB0
cnlpbmcgdG8gYXZvaWQgbG90cyBvZiBtZW1vcnkgbWFuYWdlbWVudCBvdmVyaGVhZC4KLS8vCi0v
LyBOb3QgYXMgYmFkIGFzIGl0IGxvb2tzLCB0aGVyZSBpcyBubyBhY3R1YWwgYXNzdW1wdGlvbiB0
aGF0IHRoZSBmaWVsZHMKLS8vIG1hdGNoIHVwIG9yIGFyZSBuYW1lIHRoZSBzYW1lIG9yIGFueXRo
aW5nIGxpa2UgdGhhdC4KLS8vCi1jbGFzcyBUUHVibGljVHlwZSB7Ci1wdWJsaWM6Ci0gICAgVEJh
c2ljVHlwZSB0eXBlOwotICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIFRQcmVjaXNpb24g
cHJlY2lzaW9uOwotICAgIGludCBzaXplOyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBt
YXRyaXgsIG5vdCBzaXplIG9mIGFycmF5Ci0gICAgYm9vbCBtYXRyaXg7Ci0gICAgYm9vbCBhcnJh
eTsKLSAgICBpbnQgYXJyYXlTaXplOwotICAgIFRUeXBlKiB1c2VyRGVmOwotICAgIGludCBsaW5l
OwotCi0gICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBlIGJ0LCBUUXVhbGlmaWVyIHEsIGludCBs
biA9IDApCi0gICAgewotICAgICAgICB0eXBlID0gYnQ7Ci0gICAgICAgIHF1YWxpZmllciA9IHE7
Ci0gICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsKLSAgICAgICAgc2l6ZSA9IDE7Ci0g
ICAgICAgIG1hdHJpeCA9IGZhbHNlOwotICAgICAgICBhcnJheSA9IGZhbHNlOwotICAgICAgICBh
cnJheVNpemUgPSAwOwotICAgICAgICB1c2VyRGVmID0gMDsKLSAgICAgICAgbGluZSA9IGxuOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0QWdncmVnYXRlKGludCBzLCBib29sIG0gPSBmYWxzZSkKLSAg
ICB7Ci0gICAgICAgIHNpemUgPSBzOwotICAgICAgICBtYXRyaXggPSBtOwotICAgIH0KLQotICAg
IHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDApCi0gICAgewotICAgICAgICBhcnJheSA9
IGE7Ci0gICAgICAgIGFycmF5U2l6ZSA9IHM7Ci0gICAgfQotfTsKLQotdHlwZWRlZiBUTWFwPFRU
eXBlTGlzdCosIFRUeXBlTGlzdCo+IFRTdHJ1Y3R1cmVNYXA7Ci10eXBlZGVmIFRNYXA8VFR5cGVM
aXN0KiwgVFR5cGVMaXN0Kj46Oml0ZXJhdG9yIFRTdHJ1Y3R1cmVNYXBJdGVyYXRvcjsKLS8vCi0v
LyBCYXNlIGNsYXNzIGZvciB0aGluZ3MgdGhhdCBoYXZlIGEgdHlwZS4KLS8vCi1jbGFzcyBUVHlw
ZSB7Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxs
b2NhdG9yKQotICAgIFRUeXBlKCkge30KLSAgICBUVHlwZShUQmFzaWNUeXBlIHQsIFRQcmVjaXNp
b24gcCwgVFF1YWxpZmllciBxID0gRXZxVGVtcG9yYXJ5LCBpbnQgcyA9IDEsIGJvb2wgbSA9IGZh
bHNlLCBib29sIGEgPSBmYWxzZSkgOgotICAgICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKHAp
LCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeChtKSwgYXJyYXkoYSksIGFycmF5U2l6ZSgw
KSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlT
aXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDAp
LCB0eXBlTmFtZSgwKQotICAgIHsKLSAgICB9Ci0gICAgZXhwbGljaXQgVFR5cGUoY29uc3QgVFB1
YmxpY1R5cGUgJnApIDoKLSAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9uKHAucHJl
Y2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNpemUpLCBtYXRyaXgocC5t
YXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlTaXplKSwKLSAgICAgICAg
ICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBhcnJh
eUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApLCB0eXBlTmFtZSgw
KQotICAgIHsKLSAgICAgICAgaWYgKHAudXNlckRlZikgewotICAgICAgICAgICAgc3RydWN0dXJl
ID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKLSAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9v
bFRTdHJpbmcocC51c2VyRGVmLT5nZXRUeXBlTmFtZSgpLmNfc3RyKCkpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIFRUeXBlKFRUeXBlTGlzdCogdXNlckRlZiwgY29uc3QgVFN0cmluZyYgbiwgVFBy
ZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6Ci0gICAgICAgICAgICB0eXBlKEVidFN0cnVjdCks
IHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIHNpemUoMSksIG1hdHJpeChm
YWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLAotICAgICAgICAgICAgc3RydWN0dXJl
KHVzZXJEZWYpLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNpemUoMCksIGFycmF5SW5mb3Jt
YXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCkKLSAgICB7Ci0gICAgICAgIHR5
cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5jX3N0cigpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNv
cHlUeXBlKGNvbnN0IFRUeXBlJiBjb3B5T2YsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKQotICAg
IHsKLSAgICAgICAgdHlwZSA9IGNvcHlPZi50eXBlOwotICAgICAgICBwcmVjaXNpb24gPSBjb3B5
T2YucHJlY2lzaW9uOwotICAgICAgICBxdWFsaWZpZXIgPSBjb3B5T2YucXVhbGlmaWVyOwotICAg
ICAgICBzaXplID0gY29weU9mLnNpemU7Ci0gICAgICAgIG1hdHJpeCA9IGNvcHlPZi5tYXRyaXg7
Ci0gICAgICAgIGFycmF5ID0gY29weU9mLmFycmF5OwotICAgICAgICBhcnJheVNpemUgPSBjb3B5
T2YuYXJyYXlTaXplOwotCi0gICAgICAgIFRTdHJ1Y3R1cmVNYXBJdGVyYXRvciBpdGVyOwotICAg
ICAgICBpZiAoY29weU9mLnN0cnVjdHVyZSkgewotICAgICAgICAgICAgaWYgKChpdGVyID0gcmVt
YXBwZXIuZmluZChzdHJ1Y3R1cmUpKSA9PSByZW1hcHBlci5lbmQoKSkgewotICAgICAgICAgICAg
ICAgIC8vIGNyZWF0ZSB0aGUgbmV3IHN0cnVjdHVyZSBoZXJlCi0gICAgICAgICAgICAgICAgc3Ry
dWN0dXJlID0gTmV3UG9vbFRUeXBlTGlzdCgpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgY29weU9mLnN0cnVjdHVyZS0+c2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICAgICAgVFR5cGVMaW5lIHR5cGVMaW5lOwotICAgICAgICAgICAgICAgICAgICB0
eXBlTGluZS5saW5lID0gKCpjb3B5T2Yuc3RydWN0dXJlKVtpXS5saW5lOwotICAgICAgICAgICAg
ICAgICAgICB0eXBlTGluZS50eXBlID0gKCpjb3B5T2Yuc3RydWN0dXJlKVtpXS50eXBlLT5jbG9u
ZShyZW1hcHBlcik7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+cHVzaF9iYWNrKHR5
cGVMaW5lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBzdHJ1Y3R1cmUgPSAwOwotCi0gICAgICAgIGZpZWxkTmFt
ZSA9IDA7Ci0gICAgICAgIGlmIChjb3B5T2YuZmllbGROYW1lKQotICAgICAgICAgICAgZmllbGRO
YW1lID0gTmV3UG9vbFRTdHJpbmcoY29weU9mLmZpZWxkTmFtZS0+Y19zdHIoKSk7Ci0gICAgICAg
IHR5cGVOYW1lID0gMDsKLSAgICAgICAgaWYgKGNvcHlPZi50eXBlTmFtZSkKLSAgICAgICAgICAg
IHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcoY29weU9mLnR5cGVOYW1lLT5jX3N0cigpKTsKLQot
ICAgICAgICBtYW5nbGVkID0gMDsKLSAgICAgICAgaWYgKGNvcHlPZi5tYW5nbGVkKQotICAgICAg
ICAgICAgbWFuZ2xlZCA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlPZi5tYW5nbGVkLT5jX3N0cigpKTsK
LQotICAgICAgICBzdHJ1Y3R1cmVTaXplID0gY29weU9mLnN0cnVjdHVyZVNpemU7Ci0gICAgICAg
IG1heEFycmF5U2l6ZSA9IGNvcHlPZi5tYXhBcnJheVNpemU7Ci0gICAgICAgIGFzc2VydChjb3B5
T2YuYXJyYXlJbmZvcm1hdGlvblR5cGUgPT0gMCk7Ci0gICAgICAgIGFycmF5SW5mb3JtYXRpb25U
eXBlID0gMDsgLy8gYXJyYXlJbmZvcm1hdGlvblR5cGUgc2hvdWxkIG5vdCBiZSBzZXQgZm9yIGJ1
aWx0SW4gc3ltYm9sIHRhYmxlIGxldmVsCi0gICAgfQotCi0gICAgVFR5cGUqIGNsb25lKFRTdHJ1
Y3R1cmVNYXAmIHJlbWFwcGVyKQotICAgIHsKLSAgICAgICAgVFR5cGUgKm5ld1R5cGUgPSBuZXcg
VFR5cGUoKTsKLSAgICAgICAgbmV3VHlwZS0+Y29weVR5cGUoKnRoaXMsIHJlbWFwcGVyKTsKLQot
ICAgICAgICByZXR1cm4gbmV3VHlwZTsKLSAgICB9Ci0KLSAgICBUQmFzaWNUeXBlIGdldEJhc2lj
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KLSAgICB2b2lkIHNldEJhc2ljVHlwZShUQmFz
aWNUeXBlIHQpIHsgdHlwZSA9IHQ7IH0KLQotICAgIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkg
Y29uc3QgeyByZXR1cm4gcHJlY2lzaW9uOyB9Ci0gICAgdm9pZCBzZXRQcmVjaXNpb24oVFByZWNp
c2lvbiBwKSB7IHByZWNpc2lvbiA9IHA7IH0KLQotICAgIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gcXVhbGlmaWVyOyB9Ci0gICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1
YWxpZmllciBxKSB7IHF1YWxpZmllciA9IHE7IH0KLQotICAgIC8vIE9uZS1kaW1lbnNpb25hbCBz
aXplIG9mIHNpbmdsZSBpbnN0YW5jZSB0eXBlCi0gICAgaW50IGdldE5vbWluYWxTaXplKCkgY29u
c3QgeyByZXR1cm4gc2l6ZTsgfQotICAgIHZvaWQgc2V0Tm9taW5hbFNpemUoaW50IHMpIHsgc2l6
ZSA9IHM7IH0KLSAgICAvLyBGdWxsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIG9mIHR5cGUKLSAg
ICBpbnQgZ2V0T2JqZWN0U2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpbnQgdG90YWxTaXpl
OwotCi0gICAgICAgIGlmIChnZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCi0gICAgICAgICAg
ICB0b3RhbFNpemUgPSBnZXRTdHJ1Y3RTaXplKCk7Ci0gICAgICAgIGVsc2UgaWYgKG1hdHJpeCkK
LSAgICAgICAgICAgIHRvdGFsU2l6ZSA9IHNpemUgKiBzaXplOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB0b3RhbFNpemUgPSBzaXplOwotCi0gICAgICAgIGlmIChpc0FycmF5KCkpCi0gICAg
ICAgICAgICB0b3RhbFNpemUgKj0gc3RkOjptYXgoZ2V0QXJyYXlTaXplKCksIGdldE1heEFycmF5
U2l6ZSgpKTsKLQotICAgICAgICByZXR1cm4gdG90YWxTaXplOwotICAgIH0KLQotICAgIGJvb2wg
aXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtYXRyaXggPyB0cnVlIDogZmFsc2U7IH0KLSAgICB2
b2lkIHNldE1hdHJpeChib29sIG0pIHsgbWF0cml4ID0gbTsgfQotCi0gICAgYm9vbCBpc0FycmF5
KCkgY29uc3QgIHsgcmV0dXJuIGFycmF5ID8gdHJ1ZSA6IGZhbHNlOyB9Ci0gICAgaW50IGdldEFy
cmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5U2l6ZTsgfQotICAgIHZvaWQgc2V0QXJyYXlT
aXplKGludCBzKSB7IGFycmF5ID0gdHJ1ZTsgYXJyYXlTaXplID0gczsgfQotICAgIGludCBnZXRN
YXhBcnJheVNpemUgKCkgY29uc3QgeyByZXR1cm4gbWF4QXJyYXlTaXplOyB9Ci0gICAgdm9pZCBz
ZXRNYXhBcnJheVNpemUgKGludCBzKSB7IG1heEFycmF5U2l6ZSA9IHM7IH0KLSAgICB2b2lkIGNs
ZWFyQXJyYXluZXNzKCkgeyBhcnJheSA9IGZhbHNlOyBhcnJheVNpemUgPSAwOyBtYXhBcnJheVNp
emUgPSAwOyB9Ci0gICAgdm9pZCBzZXRBcnJheUluZm9ybWF0aW9uVHlwZShUVHlwZSogdCkgeyBh
cnJheUluZm9ybWF0aW9uVHlwZSA9IHQ7IH0KLSAgICBUVHlwZSogZ2V0QXJyYXlJbmZvcm1hdGlv
blR5cGUoKSBjb25zdCB7IHJldHVybiBhcnJheUluZm9ybWF0aW9uVHlwZTsgfQotCi0gICAgYm9v
bCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7IH0KLSAgICBi
b29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA9PSAxICYmICFtYXRyaXggJiYgIXN0
cnVjdHVyZTsgfQotCi0gICAgVFR5cGVMaXN0KiBnZXRTdHJ1Y3QoKSBjb25zdCB7IHJldHVybiBz
dHJ1Y3R1cmU7IH0KLSAgICB2b2lkIHNldFN0cnVjdChUVHlwZUxpc3QqIHMpIHsgc3RydWN0dXJl
ID0gczsgfQotCi0gICAgY29uc3QgVFN0cmluZyYgZ2V0VHlwZU5hbWUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgYXNzZXJ0KHR5cGVOYW1lKTsKLSAgICAgICAgcmV0dXJuICp0eXBlTmFtZTsKLSAg
ICB9Ci0gICAgdm9pZCBzZXRUeXBlTmFtZShjb25zdCBUU3RyaW5nJiBuKQotICAgIHsKLSAgICAg
ICAgdHlwZU5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOwotICAgIH0KLQotICAgIGJv
b2wgaXNGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGZpZWxkTmFtZSAhPSAwOyB9Ci0gICAgY29uc3Qg
VFN0cmluZyYgZ2V0RmllbGROYW1lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGFzc2VydChmaWVs
ZE5hbWUpOwotICAgICAgICByZXR1cm4gKmZpZWxkTmFtZTsKLSAgICB9Ci0gICAgdm9pZCBzZXRG
aWVsZE5hbWUoY29uc3QgVFN0cmluZyYgbikKLSAgICB7Ci0gICAgICAgIGZpZWxkTmFtZSA9IE5l
d1Bvb2xUU3RyaW5nKG4uY19zdHIoKSk7Ci0gICAgfQotCi0gICAgVFN0cmluZyYgZ2V0TWFuZ2xl
ZE5hbWUoKSB7Ci0gICAgICAgIGlmICghbWFuZ2xlZCkgewotICAgICAgICAgICAgbWFuZ2xlZCA9
IE5ld1Bvb2xUU3RyaW5nKCIiKTsKLSAgICAgICAgICAgIGJ1aWxkTWFuZ2xlZE5hbWUoKm1hbmds
ZWQpOwotICAgICAgICAgICAgKm1hbmdsZWQgKz0gJzsnIDsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiAqbWFuZ2xlZDsKLSAgICB9Ci0KLSAgICBib29sIHNhbWVFbGVtZW50VHlwZShjb25z
dCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdo
dC50eXBlICAgJiYKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9PSByaWdodC5zaXplICAgJiYK
LSAgICAgICAgICAgICAgICAgIG1hdHJpeCA9PSByaWdodC5tYXRyaXggJiYKLSAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSA9PSByaWdodC5zdHJ1Y3R1cmU7Ci0gICAgfQotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuICAgICAgdHlw
ZSA9PSByaWdodC50eXBlICAgJiYKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9PSByaWdodC5z
aXplICAgJiYKLSAgICAgICAgICAgICAgICAgIG1hdHJpeCA9PSByaWdodC5tYXRyaXggJiYKLSAg
ICAgICAgICAgICAgICAgICBhcnJheSA9PSByaWdodC5hcnJheSAgJiYgKCFhcnJheSB8fCBhcnJh
eVNpemUgPT0gcmlnaHQuYXJyYXlTaXplKSAmJgotICAgICAgICAgICAgICAgc3RydWN0dXJlID09
IHJpZ2h0LnN0cnVjdHVyZTsKLSAgICAgICAgLy8gZG9uJ3QgY2hlY2sgdGhlIHF1YWxpZmllciwg
aXQncyBub3QgZXZlciB3aGF0J3MgYmVpbmcgc291Z2h0IGFmdGVyCi0gICAgfQotICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuICFv
cGVyYXRvcj09KHJpZ2h0KTsKLSAgICB9Ci0gICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVFR5cGUm
IHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIGlmICh0eXBlICE9IHJpZ2h0LnR5cGUpIHJldHVybiB0
eXBlIDwgcmlnaHQudHlwZTsKLSAgICAgICAgaWYgKHNpemUgIT0gcmlnaHQuc2l6ZSkgcmV0dXJu
IHNpemUgPCByaWdodC5zaXplOwotICAgICAgICBpZiAobWF0cml4ICE9IHJpZ2h0Lm1hdHJpeCkg
cmV0dXJuIG1hdHJpeCA8IHJpZ2h0Lm1hdHJpeDsKLSAgICAgICAgaWYgKGFycmF5ICE9IHJpZ2h0
LmFycmF5KSByZXR1cm4gYXJyYXkgPCByaWdodC5hcnJheTsKLSAgICAgICAgaWYgKGFycmF5U2l6
ZSAhPSByaWdodC5hcnJheVNpemUpIHJldHVybiBhcnJheVNpemUgPCByaWdodC5hcnJheVNpemU7
Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gcmlnaHQuc3RydWN0dXJlKSByZXR1cm4gc3RydWN0
dXJlIDwgcmlnaHQuc3RydWN0dXJlOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0QmFz
aWNTdHJpbmcodHlwZSk7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoKSBj
b25zdCB7IHJldHVybiA6OmdldFByZWNpc2lvblN0cmluZyhwcmVjaXNpb24pOyB9Ci0gICAgY29u
c3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRRdWFsaWZp
ZXJTdHJpbmcocXVhbGlmaWVyKTsgfQotICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVTdHJpbmcoKSBj
b25zdDsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgYnVpbGRNYW5nbGVkTmFtZShUU3RyaW5nJik7
Ci0gICAgaW50IGdldFN0cnVjdFNpemUoKSBjb25zdDsKLQotICAgIFRCYXNpY1R5cGUgdHlwZSAg
ICAgIDogNjsKLSAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKLSAgICBUUXVhbGlmaWVyIHF1YWxp
ZmllciA6IDc7Ci0gICAgaW50IHNpemUgICAgICAgICAgICAgOiA4OyAvLyBzaXplIG9mIHZlY3Rv
ciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5Ci0gICAgdW5zaWduZWQgaW50IG1hdHJpeCAg
OiAxOwotICAgIHVuc2lnbmVkIGludCBhcnJheSAgIDogMTsKLSAgICBpbnQgYXJyYXlTaXplOwot
ICAgIGludCBtYXhBcnJheVNpemU7Ci0gICAgVFR5cGUqIGFycmF5SW5mb3JtYXRpb25UeXBlOwot
Ci0gICAgVFR5cGVMaXN0KiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0
cnVjdAotICAgIG11dGFibGUgaW50IHN0cnVjdHVyZVNpemU7Ci0KLSAgICBUU3RyaW5nICpmaWVs
ZE5hbWU7ICAgICAgICAgLy8gZm9yIHN0cnVjdHVyZSBmaWVsZCBuYW1lcwotICAgIFRTdHJpbmcg
Km1hbmdsZWQ7Ci0gICAgVFN0cmluZyAqdHlwZU5hbWU7ICAgICAgICAgIC8vIGZvciBzdHJ1Y3R1
cmUgZmllbGQgdHlwZSBuYW1lCi19OwotCi0jZW5kaWYgLy8gX1RZUEVTX0lOQ0xVREVEXwpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNl
bGVjdC5oIgotCi0jaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9PdXRwdXRITFNMLmgiCi0KLW5hbWVzcGFjZSBzaAotewotVW5mb2xkU2VsZWN0OjpVbmZv
bGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0cHV0SExTTCAqb3V0cHV0SExTTCkg
OiBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dEhMU0wob3V0cHV0SExTTCkKLXsKLSAgICBtVGVt
cG9yYXJ5SW5kZXggPSAwOwotfQotCi12b2lkIFVuZm9sZFNlbGVjdDo6dHJhdmVyc2UoVEludGVy
bU5vZGUgKm5vZGUpCi17Ci0gICAgbVRlbXBvcmFyeUluZGV4Kys7Ci0gICAgbm9kZS0+dHJhdmVy
c2UodGhpcyk7Ci19Ci0KLWJvb2wgVW5mb2xkU2VsZWN0Ojp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiAqbm9kZSkKLXsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQg
PSBtT3V0cHV0SExTTC0+Z2V0Qm9keVN0cmVhbSgpOwotCi0gICAgaWYgKG5vZGUtPnVzZXNUZXJu
YXJ5T3BlcmF0b3IoKSkKLSAgICB7Ci0gICAgICAgIGludCBpID0gbVRlbXBvcmFyeUluZGV4Kys7
Ci0KLSAgICAgICAgb3V0IDw8IG1PdXRwdXRITFNMLT50eXBlU3RyaW5nKG5vZGUtPmdldFR5cGUo
KSkgPDwgIiB0IiA8PCBpIDw8ICI7XG4iOwotCi0gICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigp
LT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgb3V0IDw8ICJpZigiOwotICAgICAgICBub2RlLT5n
ZXRDb25kaXRpb24oKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOwotICAgICAgICBvdXQgPDwgIilc
biIKLSAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+
dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgIG91dCA8PCAiICAgIHQiIDw8IGkgPDwgIiA9ICI7Ci0g
ICAgICAgIG5vZGUtPmdldFRydWVCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7Ci0gICAg
ICAgIG91dCA8PCAiO1xuIgotICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICJl
bHNlXG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9u
KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBvdXQgPDwgIiAgICB0IiA8PCBpIDw8ICIgPSAi
OwotICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKG1PdXRwdXRITFNMKTsK
LSAgICAgICAgb3V0IDw8ICI7XG4iCi0gICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICBt
VGVtcG9yYXJ5SW5kZXgtLTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBV
bmZvbGRTZWxlY3Q6OmdldFRlbXBvcmFyeUluZGV4KCkKLXsKLSAgICByZXR1cm4gbVRlbXBvcmFy
eUluZGV4OwotfQotfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuaAkocmV2aXNpb24g
NzQ2NTgpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMzUgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxF
Ul9VTkZPTERTRUxFQ1RfSF8KLSNkZWZpbmUgQ09NUElMRVJfVU5GT0xEU0VMRUNUX0hfCi0KLSNp
bmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJz
ZUhlbHBlci5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLWNsYXNzIE91dHB1dEhMU0w7Ci0KLWNsYXNz
IFVuZm9sZFNlbGVjdCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci0gIHB1YmxpYzoKLSAg
ICBVbmZvbGRTZWxlY3QoVFBhcnNlQ29udGV4dCAmY29udGV4dCwgT3V0cHV0SExTTCAqb3V0cHV0
SExTTCk7Ci0KLSAgICB2b2lkIHRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKTsKLSAgICBib29s
IHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uICpub2RlKTsKLQot
ICAgIGludCBnZXRUZW1wb3JhcnlJbmRleCgpOwotCi0gIHByb3RlY3RlZDoKLSAgICBUUGFyc2VD
b250ZXh0ICZtQ29udGV4dDsKLSAgICBPdXRwdXRITFNMICpjb25zdCBtT3V0cHV0SExTTDsKLQot
ICAgIGludCBtVGVtcG9yYXJ5SW5kZXg7Ci19OwotfQotCi0jZW5kaWYgICAvLyBDT01QSUxFUl9V
TkZPTERTRUxFQ1RfSF8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9kZWJ1Zy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmNwcAkocmV2aXNpb24gNzQ2NTgpCisr
KyBBTkdMRS9zcmMvY29tcGlsZXIvZGVidWcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2ICsw
LDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGRlYnVnLmNwcDogRGVidWdnaW5nIHV0aWxp
dGllcy4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0KLSNpbmNsdWRlIDxzdGRhcmcu
aD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIu
aCIKLQotc3RhdGljIGNvbnN0IGludCBrVHJhY2VCdWZmZXJMZW4gPSAxMDI0OwotCi0jaWZkZWYg
VFJBQ0VfRU5BQkxFRAotZXh0ZXJuICJDIiB7Ci12b2lkIFRyYWNlKGNvbnN0IGNoYXIgKmZvcm1h
dCwgLi4uKSB7Ci0gICAgaWYgKCFmb3JtYXQpIHJldHVybjsKLQotICAgIFRQYXJzZUNvbnRleHQq
IHBhcnNlQ29udGV4dCA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOwotICAgIGlmIChwYXJzZUNv
bnRleHQpIHsKLSAgICAgICAgY2hhciBidWZba1RyYWNlQnVmZmVyTGVuXTsKLSAgICAgICAgdmFf
bGlzdCBhcmdzOwotICAgICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgICAgICB2c25w
cmludGYoYnVmLCBrVHJhY2VCdWZmZXJMZW4sIGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIHZhX2Vu
ZChhcmdzKTsKLQotICAgICAgICBwYXJzZUNvbnRleHQtPmluZm9TaW5rLmRlYnVnIDw8IGJ1ZjsK
LSAgICB9Ci19Ci19ICAvLyBleHRlcm4gIkMiCi0jZW5kaWYgIC8vIFRSQUNFX0VOQUJMRUQKLQpJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL2RlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL2RlYnVnLmgJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L2RlYnVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gZGVidWcuaDogRGVidWdnaW5nIHV0aWxpdGllcy4KLQotI2lmbmRlZiBDT01QSUxF
Ul9ERUJVR19IXwotI2RlZmluZSBDT01QSUxFUl9ERUJVR19IXwotCi0jaW5jbHVkZSA8YXNzZXJ0
Lmg+Ci0KLSNpZmRlZiBfREVCVUcKLSNkZWZpbmUgVFJBQ0VfRU5BQkxFRCAgLy8gZGVmaW5lIHRv
IGVuYWJsZSBkZWJ1ZyBtZXNzYWdlIHRyYWNpbmcKLSNlbmRpZiAgLy8gX0RFQlVHCi0KLS8vIE91
dHB1dHMgdGV4dCB0byB0aGUgZGVidWcgbG9nCi0jaWZkZWYgVFJBQ0VfRU5BQkxFRAotCi0jaWZk
ZWYgIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZiAgLy8gX19jcGx1c3BsdXMKLXZv
aWQgVHJhY2UoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pOwotI2lmZGVmICBfX2NwbHVzcGx1cwot
fQotI2VuZGlmICAvLyBfX2NwbHVzcGx1cwotCi0jZWxzZSAgIC8vIFRSQUNFX0VOQUJMRUQKLQot
I2RlZmluZSBUcmFjZSguLi4pICgodm9pZCkwKQotCi0jZW5kaWYgIC8vIFRSQUNFX0VOQUJMRUQK
LQotLy8gQSBtYWNybyBhc3NlcnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcgZmFpbHVy
ZXMgdG8gdGhlIGRlYnVnIGxvZwotI2RlZmluZSBBU1NFUlQoZXhwcmVzc2lvbikgZG8geyBcCi0g
ICAgaWYoIShleHByZXNzaW9uKSkgXAotICAgICAgICBUcmFjZSgiQXNzZXJ0IGZhaWxlZDogJXMo
JWQpOiAiI2V4cHJlc3Npb24iXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAotICAgIGFz
c2VydChleHByZXNzaW9uKTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIFVOSU1QTEVNRU5URUQo
KSBkbyB7IFwKLSAgICBUcmFjZSgiVW5pbXBsZW1lbnRlZCBpbnZva2VkOiAlcyglZClcbiIsIF9f
RlVOQ1RJT05fXywgX19MSU5FX18pOyBcCi0gICAgYXNzZXJ0KGZhbHNlKTsgXAotfSB3aGlsZSgw
KQotCi0jZGVmaW5lIFVOUkVBQ0hBQkxFKCkgZG8geyBcCi0gICAgVHJhY2UoIlVucmVhY2hhYmxl
IHJlYWNoZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3Nl
cnQoZmFsc2UpOyBcCi19IHdoaWxlKDApCi0KLSNlbmRpZiAgIC8vIENPTVBJTEVSX0RFQlVHX0hf
Ci0KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZy5sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwMCArMCwwIEBACi0vKgot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLSovCi0vKiBCYXNlZCBvbgotQU5TSSBDIGdyYW1tYXIsIExleCBz
cGVjaWZpY2F0aW9uCi0KLUluIDE5ODUsIEplZmYgTGVlIHB1Ymxpc2hlZCB0aGlzIExleCBzcGVj
aWZpY2F0aW9uIHRvZ2V0aGVyIHdpdGggYSBZYWNjIAotZ3JhbW1hciBmb3IgdGhlIEFwcmlsIDMw
LCAxOTg1IEFOU0kgQyBkcmFmdC4gIFRvbSBTdG9ja2Zpc2NoIHJlcG9zdGVkIAotYm90aCB0byBu
ZXQuc291cmNlcyBpbiAxOTg3OyB0aGF0IG9yaWdpbmFsLCBhcyBtZW50aW9uZWQgaW4gdGhlIGFu
c3dlciAKLXRvIHF1ZXN0aW9uIDE3LjI1IG9mIHRoZSBjb21wLmxhbmcuYyBGQVEsIGNhbiBiZSBm
dHAnZWQgZnJvbSBmdHAudXUubmV0LCAKLWZpbGUgdXNlbmV0L25ldC5zb3VyY2VzL2Fuc2kuYy5n
cmFtbWFyLlouIAotCi1JIGludGVuZCB0byBrZWVwIHRoaXMgdmVyc2lvbiBhcyBjbG9zZSB0byB0
aGUgY3VycmVudCBDIFN0YW5kYXJkIGdyYW1tYXIgCi1hcyBwb3NzaWJsZTsgcGxlYXNlIGxldCBt
ZSBrbm93IGlmIHlvdSBkaXNjb3ZlciBkaXNjcmVwYW5jaWVzLiAKLQotSnV0dGEgRGVnZW5lciwg
MTk5NSAKLSovCi0KLUQgICAgICAgICAgIFswLTldCi1MICAgICAgICAgICBbYS16QS1aX10KLUgg
ICAgICAgICAgIFthLWZBLUYwLTldCi1FICAgICAgICAgICBbRWVdWystXT97RH0rCi1PICAgICAg
ICAgICBbMC03XQotCi0lb3B0aW9uIG5vdW5wdXQgCi0lewotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0j
aW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgot
I2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiCi0KLS8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KLSNp
ZmRlZiBfTVNDX1ZFUgotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MTAyKQotI2VuZGlmCi0K
LWludCB5eV9pbnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSk7Ci0KLWV4dGVybiBpbnQgeXlw
YXJzZSh2b2lkKik7Ci0jZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2YWws
IHZvaWQqIHBhcnNlQ29udGV4dExvY2FsKQotI2RlZmluZSBwYXJzZUNvbnRleHQgKCooKFRQYXJz
ZUNvbnRleHQqKShwYXJzZUNvbnRleHRMb2NhbCkpKQotIAotI2RlZmluZSBZWV9JTlBVVChidWYs
cmVzdWx0LG1heF9zaXplKSAocmVzdWx0ID0geXlfaW5wdXQoYnVmLCBtYXhfc2l6ZSkpCi0KLSV9
Ci0KLS8qCi1UT0RPKGFsb2twKTogeXlsaW5lbm8gaXMgb25seSBoZXJlIHRvIHN1cHBvcnQgb2xk
IGZsZXguZXhlIGluIGNvbXBpbGVyL3Rvb2xzLgotUmVtb3ZlIGl0IHdoZW4gd2UgY2FuIGV4Y2x1
c2l2ZWx5IHVzZSB0aGUgbmV3ZXIgdmVyc2lvbi4KLSovCi0lb3B0aW9uIHl5bGluZW5vCi0KLSVv
cHRpb24gbm95eXdyYXAKLSVvcHRpb24gbmV2ZXItaW50ZXJhY3RpdmUKLSV4IEZJRUxEUwotCi0K
LSUlCi08Kj4iLy8iW15cbl0qIlxuIiAgICAgeyAvKiA/PyBjYXJyaWFnZSBhbmQvb3IgbGluZS1m
ZWVkPyAqLyB9OwotCi0iaW52YXJpYW50IiAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oSU5WQVJJQU5UKTsgfQotImhpZ2hwIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEhJR0hfUFJFQ0lTSU9OKTsgfQotIm1lZGl1bXAiICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE1FRElVTV9QUkVDSVNJ
T04pOyB9Ci0ibG93cCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oTE9XX1BSRUNJU0lPTik7IH0KLSJwcmVjaXNpb24iICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHJldHVybihQUkVDSVNJT04pOyB9Ci0KLSJhdHRyaWJ1dGUiICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBVFRSSUJVVEUpOyB9Ci0iY29u
c3QiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09OU1Rf
UVVBTCk7IH0KLSJ1bmlmb3JtIiAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihVTklGT1JNKTsgfQotInZhcnlpbmciICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKFZBUllJTkcpOyB9Ci0KLSJicmVhayIgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihCUkVBSyk7IH0KLSJjb250aW51ZSIgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihDT05USU5VRSk7IH0KLSJk
byIgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihETyk7
IH0KLSJmb3IiICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihGT1IpOyB9Ci0id2hpbGUiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oV0hJTEUpOyB9Ci0KLSJpZiIgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihJRik7IH0KLSJlbHNlIiAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihFTFNFKTsgfQotCi0iaW4iICAgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5fUVVBTCk7IH0KLSJvdXQiICAg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihPVVRfUVVBTCk7
IH0KLSJpbm91dCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihJTk9VVF9RVUFMKTsgfQotCi0iZmxvYXQiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKEZMT0FU
X1RZUEUpOyB9Ci0iaW50IiAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKElOVF9UWVBFKTsgfQot
InZvaWQiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250
ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihWT0lEX1RZUEUpOyB9Ci0iYm9vbCIgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0
ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKEJPT0xfVFlQRSk7IH0KLSJ0cnVlIiAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJldHVy
bihCT09MQ09OU1RBTlQpOyB9Ci0iZmFsc2UiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyBweXlsdmFsLT5sZXguYiA9IGZhbHNlOyByZXR1cm4oQk9PTENPTlNUQU5UKTsg
fQotCi0iZGlzY2FyZCIgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oRElTQ0FSRCk7IH0KLSJyZXR1cm4iICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihSRVRVUk4pOyB9Ci0KLSJtYXQyIiAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1
cm4oTUFUUklYMik7IH0KLSJtYXQzIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oTUFUUklYMyk7
IH0KLSJtYXQ0IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNl
Q29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oTUFUUklYNCk7IH0KLQotInZlYzIi
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0Lmxl
eEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDMik7IH0KLSJ2ZWMzIiAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0
cnVlOyByZXR1cm4gKFZFQzMpOyB9Ci0idmVjNCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChW
RUM0KTsgfQotIml2ZWMyIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoSVZFQzIpOyB9Ci0iaXZl
YzMiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQu
bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJVkVDMyk7IH0KLSJpdmVjNCIgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUg
PSB0cnVlOyByZXR1cm4gKElWRUM0KTsgfQotImJ2ZWMyIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVy
biAoQlZFQzIpOyB9Ci0iYnZlYzMiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDMyk7IH0K
LSJidmVjNCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29u
dGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUM0KTsgfQotCi0ic2FtcGxlcjJE
IiAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4
QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIFNBTVBMRVIyRDsgfQotInNhbXBsZXJDdWJlIiAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlw
ZSA9IHRydWU7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotCi0ic3RydWN0IiAgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1
ZTsgcmV0dXJuKFNUUlVDVCk7IH0KLQotImFzbSIgICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQo
KTsgcmV0dXJuIDA7IH0KLQotImNsYXNzIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KLSJ1bmlvbiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
Ci0iZW51bSIgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotInR5cGVk
ZWYiICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJ0ZW1wbGF0ZSIgICAg
IHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0idGhpcyIgICAgICAgICB7ICBQYVJl
c2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotInBhY2tlZCIgICAgICAgeyAgUGFSZXNlcnZlZFdv
cmQoKTsgcmV0dXJuIDA7IH0KLQotImdvdG8iICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KLSJzd2l0Y2giICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9Ci0iZGVmYXVsdCIgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotCi0i
aW5saW5lIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotIm5vaW5saW5l
IiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJ2b2xhdGlsZSIgICAgIHsg
IFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0icHVibGljIiAgICAgICB7ICBQYVJlc2Vy
dmVkV29yZCgpOyByZXR1cm4gMDsgfQotInN0YXRpYyIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQo
KTsgcmV0dXJuIDA7IH0KLSJleHRlcm4iICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVy
biAwOyB9Ci0iZXh0ZXJuYWwiICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQot
ImludGVyZmFjZSIgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLQotImxvbmci
ICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJzaG9ydCIgICAgICAg
IHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0iZG91YmxlIiAgICAgICB7ICBQYVJl
c2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotImhhbGYiICAgICAgICAgeyAgUGFSZXNlcnZlZFdv
cmQoKTsgcmV0dXJuIDA7IH0KLSJmaXhlZCIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJl
dHVybiAwOyB9Ci0idW5zaWduZWQiICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsg
fQotCi0iaW5wdXQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotIm91
dHB1dCIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLQotImh2ZWMyIiAg
ICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJodmVjMyIgICAgICAgIHsg
IFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0iaHZlYzQiICAgICAgICB7ICBQYVJlc2Vy
dmVkV29yZCgpOyByZXR1cm4gMDsgfQotImZ2ZWMyIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQo
KTsgcmV0dXJuIDA7IH0KLSJmdmVjMyIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVy
biAwOyB9Ci0iZnZlYzQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQot
ImR2ZWMyIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJkdmVjMyIg
ICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0iZHZlYzQiICAgICAgICB7
ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotCi0ic2l6ZW9mIiAgICAgICB7ICBQYVJl
c2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotImNhc3QiICAgICAgICAgeyAgUGFSZXNlcnZlZFdv
cmQoKTsgcmV0dXJuIDA7IH0KLQotIm5hbWVzcGFjZSIgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KLSJ1c2luZyIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAw
OyB9Ci0KLXtMfSh7TH18e0R9KSogICAgICAgeyAgCi0gICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyAKLSAgIHB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQp
OyAKLSAgIHJldHVybiBQYUlkZW50T3JUeXBlKCpweXlsdmFsLT5sZXguc3RyaW5nLCBwYXJzZUNv
bnRleHQsIHB5eWx2YWwtPmxleC5zeW1ib2wpOyAKLX0KLQotMFt4WF17SH0rICAgICAgICAgeyBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRl
eHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ci0we099KyAgICAgICAgICAgICB7IHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4
dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KLTB7RH0rICAgICAgICAgICAgIHsgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmVycm9yKHl5bGluZW5vLCAi
SW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBwYXJzZUNvbnRleHQucmVj
b3ZlcigpOyByZXR1cm4gMDt9Ci17RH0rICAgICAgICAgICAgICB7IHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVy
bihJTlRDT05TVEFOVCk7IH0KLQote0R9K3tFfSAgICAgICAgICAgeyBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mKHl5
dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KLXtEfSsiLiJ7RH0qKHtFfSk/IHsgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxm
bG9hdD4oYXRvZih5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9Ci0iLiJ7RH0rKHtF
fSk/ICAgICB7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5mID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsg
fQotCi0iLyoiICAgICAgICAgICAgeyAgaW50IHJldCA9IFBhUGFyc2VDb21tZW50KHB5eWx2YWwt
PmxleC5saW5lLCBwYXJzZUNvbnRleHQpOyBpZiAoIXJldCkgcmV0dXJuIHJldDsgfSAgIAotCi0i
Kz0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFE
RF9BU1NJR04pOyB9Ci0iLT0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKFNVQl9BU1NJR04pOyB9Ci0iKj0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKE1VTF9BU1NJR04pOyB9Ci0iLz0iICAgICAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERJVl9BU1NJR04pOyB9
Ci0iJT0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KE1PRF9BU1NJR04pOyB9Ci0iPDw9IiAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcmV0dXJuKExFRlRfQVNTSUdOKTsgfQotIj4+PSIgICAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihSSUdIVF9BU1NJR04pOyB9Ci0iJj0iICAg
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFORF9BU1NJ
R04pOyB9Ci0iXj0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKFhPUl9BU1NJR04pOyB9Ci0ifD0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcmV0dXJuKE9SX0FTU0lHTik7IH0KLQotIisrIiAgICAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJTkNfT1ApOyB9Ci0iLS0iICAg
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERFQ19PUCk7
IH0KLSImJiIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oQU5EX09QKTsgfQotInx8IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihPUl9PUCk7IH0KLSJeXiIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oWE9SX09QKTsgfQotIjw9IiAgICAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRV9PUCk7IH0KLSI+PSIgICAgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oR0VfT1ApOyB9Ci0i
PT0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEVR
X09QKTsgfQotIiE9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihORV9PUCk7IH0KLSI8PCIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oTEVGVF9PUCk7IH0KLSI+PiIgICAgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfT1ApOyB9Ci0iOyIgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBl
ID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9Ci0oInsifCI8JSIpICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNl
OyByZXR1cm4oTEVGVF9CUkFDRSk7IH0KLSgifSJ8IiU+IikgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQlJBQ0UpOyB9Ci0iLCIgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBpZiAocGFyc2VDb250ZXh0LmluVHlwZVBhcmVu
KSBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihDT01NQSk7IH0KLSI6
IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihDT0xPTik7
IH0KLSI9IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29u
dGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFMKTsgfQotIigiICAgICAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlw
ZSA9IGZhbHNlOyBwYXJzZUNvbnRleHQuaW5UeXBlUGFyZW4gPSB0cnVlOyByZXR1cm4oTEVGVF9Q
QVJFTik7IH0KLSIpIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBh
cnNlQ29udGV4dC5pblR5cGVQYXJlbiA9IGZhbHNlOyByZXR1cm4oUklHSFRfUEFSRU4pOyB9Ci0o
IlsifCI8OiIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExF
RlRfQlJBQ0tFVCk7IH0KLSgiXSJ8Ijo+IikgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oUklHSFRfQlJBQ0tFVCk7IH0KLSIuIiAgICAgICAgIHsgQkVHSU4oRklF
TERTKTsgIHJldHVybihET1QpOyB9Ci0iISIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oQkFORyk7IH0KLSItIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHJldHVybihEQVNIKTsgfQotIn4iICAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFRJTERFKTsgfQotIisiICAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFBMVVMpOyB9Ci0iKiIgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oU1RBUik7IH0KLSIvIiAgICAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihTTEFTSCk7IH0KLSIl
IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihQRVJDRU5U
KTsgfQotIjwiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KExFRlRfQU5HTEUpOyB9Ci0iPiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oUklHSFRfQU5HTEUpOyB9Ci0ifCIgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQotIl4iICAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENBUkVUKTsgfQotIiYiICAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFNUEVSU0FORCk7IH0K
LSI/IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihRVUVT
VElPTik7IH0KLQotPEZJRUxEUz57TH0oe0x9fHtEfSkqIHsgCi1CRUdJTihJTklUSUFMKTsgICAg
ICAKLSAgICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyAgICAgCi0gICAgcHl5bHZhbC0+
bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAotICAgIHJldHVybiBGSUVMRF9T
RUxFQ1RJT047IH0KLTxGSUVMRFM+WyBcdFx2XGZccl0ge30KLQotWyBcdFx2XG5cZlxyXSAgIHsg
IH0KLTwqPjw8RU9GPj4geyAoJnBhcnNlQ29udGV4dCktPkFmdGVyRU9GID0gdHJ1ZTsgeXlfZGVs
ZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUik7IHl5dGVybWluYXRlKCk7fQotPCo+LiAgICB7
IHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvIDw8ICJGTEVYOiBVbmtub3duIGNoYXIgIiA8PCB5
eXRleHQgPDwgIlxuIjsKLSAgICAgICAgICByZXR1cm4gMDsgfQotCi0lJQotCi0KLS8vSW5jbHVk
aW5nIFByZS1wcm9jZXNzb3IuCi1leHRlcm4gIkMiIHsKLSAgI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgiCi19IAotCi0vLwotLy8gVGhlIFlZX0lOUFVUIG1hY3Jv
IGp1c3QgY2FsbHMgdGhpcy4gIE1heWJlIHRoaXMgY291bGQgYmUganVzdCBwdXQgaW50bwotLy8g
dGhlIG1hY3JvIGRpcmVjdGx5LgotLy8KLQotaW50IHl5X2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1h
eF9zaXplKQotewotICAgIGludCBsZW47Ci0KLSAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYs
IG1heF9zaXplKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxlbiA+PSBtYXhf
c2l6ZSkgCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgYnVmZmVyIG92ZXJmbG93LCBj
YW4ndCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNlcyBSRUpFQ1QiICk7Ci0KLSAg
ICBidWZbbGVuXSA9ICcgJzsKLQlyZXR1cm4gbGVuKzE7Ci19Ci0KLQotLy8KLS8vIFBhcnNlIGFu
IGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4gIFdlIHNldCB1cCBnbG9iYWxzIHVzZWQg
YnkKLS8vIHl5d3JhcC4KLS8vCi0vLyBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIGFzIHBlciB5eXBh
cnNlKCkuCi0vLwotaW50IFBhUGFyc2VTdHJpbmdzKGNoYXIqIGFyZ3ZbXSwgaW50IHN0ckxlbltd
LCBpbnQgYXJnYywgVFBhcnNlQ29udGV4dCYgcGFyc2VDb250ZXh0TG9jYWwpCi17Ci0gICAgaW50
IGFyZ3YwbGVuOwotICAgIAotICAgIFNjYW5Gcm9tU3RyaW5nKGFyZ3ZbMF0pOyAKLSAgICAKLSAg
ICAvL1N0b3JpbmcgdGhlIEN1cnJlbnQgQ29tcGlsZXIgUGFyc2UgY29udGV4dCBpbnRvIHRoZSBj
cHAgc3RydWN0dXJlLgotCWNwcC0+cEMgPSAodm9pZCopJnBhcnNlQ29udGV4dExvY2FsOwotCQot
CWlmICghYXJndiB8fCBhcmdjID09IDApCi0gICAgICAgIHJldHVybiAxOwotICAgIAotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgYXJnYzsgKytpKSB7Ci0gICAgICAgIGlmICghYXJndltpXSkgewot
ICAgICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwuZXJyb3IoMCwgIk51bGwgc2hhZGVyIHNvdXJj
ZSBzdHJpbmciLCAiIiwgIiIpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwucmVjb3Zl
cigpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
aWYgKCFzdHJMZW4pIHsKLSAgICAgICAgYXJndjBsZW4gPSAoaW50KSBzdHJsZW4oYXJndlswXSk7
Ci0gICAgICAgIHN0ckxlbiAgID0gJmFyZ3YwbGVuOwotICAgIH0KLSAgICB5eXJlc3RhcnQoMCk7
Ci0gICAgKCZwYXJzZUNvbnRleHRMb2NhbCktPkFmdGVyRU9GID0gZmFsc2U7Ci0gICAgY3BwLT5Q
YVdoaWNoU3RyID0gMDsKLSAgICBjcHAtPlBhQXJndiAgICAgPSBhcmd2OwotICAgIGNwcC0+UGFB
cmdjICAgICA9IGFyZ2M7Ci0gICAgY3BwLT5QYVN0ckxlbiAgID0gc3RyTGVuOwotICAgIGNwcC0+
cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKLSAgICB5eWxpbmVubyAgID0gMTsKLSAgIAotICAgIGlm
ICgqY3BwLT5QYVN0ckxlbiA+PSAwKSB7ICAgIAotICAgICAgICBpbnQgcmV0ID0geXlwYXJzZSgo
dm9pZCopKCZwYXJzZUNvbnRleHRMb2NhbCkpOwotICAgICAgICBpZiAocmV0IHx8IGNwcC0+Q29t
cGlsZUVycm9yID09IDEgfHwgcGFyc2VDb250ZXh0TG9jYWwucmVjb3ZlcmVkRnJvbUVycm9yIHx8
IHBhcnNlQ29udGV4dExvY2FsLm51bUVycm9ycyA+IDApCi0gICAgICAgICAgICAgcmV0dXJuIDE7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm4gMDsKLX0KLQotdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIgKnMpIAotewot
ICAgIGlmICgoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+QWZ0ZXJFT0YpIHsKLSAgICAgICAg
aWYgKGNwcC0+dG9rZW5zQmVmb3JlRU9GID09IDEpIHsKLSAgICAgICAgICAgIEdsb2JhbFBhcnNl
Q29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJzeW50YXggZXJyb3IiLCAicHJlLW1hdHVyZSBFT0Yi
LCBzLCAiIik7Ci0gICAgICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3Io
eXlsaW5lbm8sICJzeW50YXggZXJyb3IiLCB5eXRleHQsIHMsICIiKTsKLSAgICAgICAgR2xvYmFs
UGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfSAgICAgICAgICAgIAotfQotCi12b2lkIFBh
UmVzZXJ2ZWRXb3JkKCkKLXsKLSAgICBHbG9iYWxQYXJzZUNvbnRleHQtPmVycm9yKHl5bGluZW5v
LCAiUmVzZXJ2ZWQgd29yZC4iLCB5eXRleHQsICIiLCAiIik7Ci0gICAgR2xvYmFsUGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7Ci19Ci0KLWludCBQYUlkZW50T3JUeXBlKFRTdHJpbmcmIGlkLCBUUGFy
c2VDb250ZXh0JiBwYXJzZUNvbnRleHRMb2NhbCwgVFN5bWJvbComIHN5bWJvbCkKLXsKLSAgICBz
eW1ib2wgPSBwYXJzZUNvbnRleHRMb2NhbC5zeW1ib2xUYWJsZS5maW5kKGlkKTsKLSAgICBpZiAo
cGFyc2VDb250ZXh0TG9jYWwubGV4QWZ0ZXJUeXBlID09IGZhbHNlICYmIHN5bWJvbCAmJiBzeW1i
b2wtPmlzVmFyaWFibGUoKSkgewotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGlj
X2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJU
eXBlKCkpIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmxleEFmdGVyVHlwZSA9IHRy
dWU7Ci0gICAgICAgICAgICByZXR1cm4gVFlQRV9OQU1FOwotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIHJldHVybiBJREVOVElGSUVSOwotfQotCi1pbnQgUGFQYXJzZUNvbW1lbnQoaW50ICZs
aW5lbm8sIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2FsKQotewotICAgIGludCB0cmFu
c2l0aW9uRmxhZyA9IDA7Ci0gICAgaW50IG5leHRDaGFyOwotICAgIAotICAgIHdoaWxlICh0cmFu
c2l0aW9uRmxhZyAhPSAyKSB7Ci0gICAgICAgIG5leHRDaGFyID0geXlpbnB1dCgpOwotICAgICAg
ICBpZiAobmV4dENoYXIgPT0gJ1xuJykKLSAgICAgICAgICAgICBsaW5lbm8rKzsKLSAgICAgICAg
c3dpdGNoIChuZXh0Q2hhcikgewotICAgICAgICBjYXNlICcqJyA6Ci0gICAgICAgICAgICB0cmFu
c2l0aW9uRmxhZyA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnLycgOiAg
LyogaWYgc3RhciBpcyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLCB0aGVuIGl0IGlzIHRoZSBlbmQg
b2YgY29tbWVudCAqLwotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25GbGFnID09IDEpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMSA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT0YgOgotICAgICAgICAgICAgLyogUmFpc2UgZXJyb3IgbWVzc2Fn
ZSBoZXJlICovCi0gICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5lcnJvcih5eWxpbmVubywg
IkVuZCBvZiBzaGFkZXIgZm91bmQgYmVmb3JlIGVuZCBvZiBjb21tZW50LiIsICIiLCAiIiwgIiIp
OwotICAgICAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gWVlfTlVMTDsgCi0gICAgICAgIGRlZmF1bHQgOiAgLyogQW55IG90aGVyIGNoYXJh
Y3RlciB3aWxsIGJlIGEgcGFydCBvZiB0aGUgY29tbWVudCAqLwotICAgICAgICAgICAgdHJhbnNp
dGlvbkZsYWcgPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAxOwotfQotCi1leHRl
cm4gIkMiIHsKLQotdm9pZCBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpCi17Ci0gICAg
KChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmRlYnVnLm1lc3NhZ2UoRVByZWZp
eE5vbmUsIG1zZyk7Ci19Ci0KLXZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICpt
c2cpCi17Ci0gICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4V2FybmluZywgbXNnLCB5eWxpbmVubyk7IAotfQotCi12b2lkIENQUFNoSW5m
b0xvZ01zZyhjb25zdCBjaGFyICptc2cpCi17Ci0gICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPmVycm9yKHl5bGluZW5vLCIiLCAiIixtc2csIiIpOwotICAgIEdsb2JhbFBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOwotfQotCi12b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKLXsK
LSAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXJyb3IoeXlsaW5lbm8sInN5bnRheCBl
cnJvciIsICIiLG1zZywiIik7Ci0gICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci19
Ci0KLXZvaWQgU2V0TGluZU51bWJlcihpbnQgbGluZSkKLXsKLSAgICB5eWxpbmVubyAmPSB+U291
cmNlTG9jTGluZU1hc2s7Ci0gICAgeXlsaW5lbm8gfD0gbGluZTsKLX0KLQotdm9pZCBTZXRTdHJp
bmdOdW1iZXIoaW50IHN0cmluZykKLXsKLSAgICB5eWxpbmVubyA9IChzdHJpbmcgPDwgU291cmNl
TG9jU3RyaW5nU2hpZnQpIHwgKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spOwotfQotCi1p
bnQgR2V0U3RyaW5nTnVtYmVyKHZvaWQpCi17Ci0gICAgcmV0dXJuIHl5bGluZW5vID4+IDE2Owot
fQotCi1pbnQgR2V0TGluZU51bWJlcih2b2lkKQotewotICAgIHJldHVybiB5eWxpbmVubyAmIFNv
dXJjZUxvY0xpbmVNYXNrOwotfQotCi12b2lkIEluY0xpbmVOdW1iZXIodm9pZCkKLXsKLSAgICBp
ZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spIDw9IFNvdXJjZUxvY0xpbmVNYXNrKQot
ICAgICAgICArK3l5bGluZW5vOwotfQotCi12b2lkIERlY0xpbmVOdW1iZXIodm9pZCkKLXsKLSAg
ICBpZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spID4gMCkKLSAgICAgICAgLS15eWxp
bmVubzsKLX0KLQotdm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51
bVRva2VucykKLXsgICAgCi0gICAgaWYgKCFzdHJjbXAodG9rZW5zWzBdLCAib3B0aW1pemUiKSkg
ewotICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygib3B0aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNb
MV0sICIoIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIoXCIgZXhwZWN0ZWQg
YWZ0ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvbiIpKQot
ICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEub3B0
aW1pemUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIp
KQotICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEu
b3B0aW1pemUgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ29wdGltaXpl
JyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5m
b0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdvcHRpbWl6ZScgcHJhZ21hIik7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW5z
WzBdLCAiZGVidWciKSkgewotICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKLSAgICAgICAg
ICAgIENQUFNoSW5mb0xvZ01zZygiZGVidWcgcHJhZ21hIHN5bnRheCBpcyBpbmNvcnJlY3QiKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHN0
cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCIo
XCIgZXhwZWN0ZWQgYWZ0ZXIgJ2RlYnVnJyBrZXl3b3JkIik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMl0s
ICJvbiIpKQotICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQ
cmFnbWEuZGVidWcgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwg
Im9mZiIpKQotICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQ
cmFnbWEuZGVidWcgPSBmYWxzZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVn
JyBwcmFnbWEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKLSAgICAgICAgICAgIENQUFNoSW5m
b0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotCi0jaWZkZWYgUFJBR01BX1RB
QkxFCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdt
YQotICAgICAgICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFn
bWEucHJhZ21hVGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHByYWdtYQotICAg
ICAgICAvLyBGb3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGltcGxlbWVu
dGF0aW9uIGNhbm5vdCByZWNvZ25pemUKLSAgICAgICAgLy8gQW4gRXhhbXBsZSBvZiBvbmUgc3Vj
aCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMgYSBzeW50YXggbGlrZQotICAg
ICAgICAvLyAjcHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUpCi0gICAgICAgIC8vIFRoaXMg
aW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdtYXZhbHVlIGFnYWluc3QgdGhl
IHByYWdtYSBuYW1lIGluIHByYWdtYVRhYmxlLgotICAgICAgICAvLyAgICAgICAgCi0gICAgICAg
IGlmIChudW1Ub2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sxXSwgIigiKSAmJiAhc3RyY21w
KHRva2Vuc1szXSwgIikiKSkgeyAgICAgICAgICAgICAgCi0gICAgICAgICAgICBUUHJhZ21hVGFi
bGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFn
bWEucHJhZ21hVGFibGU7Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7
Ci0gICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkp
OwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKLSAgICAgICAg
ICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1syXTsKLSAg
ICAgICAgICAgIH0gICAgICAgIAotICAgICAgICB9IGVsc2UgaWYgKG51bVRva2VucyA+PSAyKSB7
Ci0gICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0
ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7Ci0gICAgICAgICAgICBUUHJh
Z21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUu
ZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21h
VGFibGUuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMV07
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tl
bnNbMF0gXSA9IHRva2Vuc1sxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8v
IFBSQUdNQV9UQUJMRQotICAgIH0KLX0KLQotdm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCi17
Ci0gICAgVFN0cmluZyBzdHJTcmM7Ci0gICAgc3RyU3JjID0gVFN0cmluZyhzdHJpbmcpOwotCi0g
ICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAoKFRQYXJzZUNvbnRl
eHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsKLX0KLQotY29uc3QgY2hh
ciogR2V0U3RyZnJvbVRTdHIodm9pZCkKLXsKLSAgICBjcHAtPkVyck1zZyA9ICgoKFRQYXJzZUNv
bnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZykuY19zdHIoKTsKLSAgICByZXR1cm4gY3BwLT5F
cnJNc2c7Ci19Ci0KLXZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCi17Ci0gICAgKChUUGFyc2VDb250
ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAiIjsKLX0KLQotVEJlaGF2aW9yIEdldEJlaGF2
aW9yKGNvbnN0IGNoYXIqIGJlaGF2aW9yKQotewotICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwg
YmVoYXZpb3IpKQotICAgICAgICByZXR1cm4gRUJoUmVxdWlyZTsKLSAgICBlbHNlIGlmICghc3Ry
Y21wKCJlbmFibGUiLCBiZWhhdmlvcikpCi0gICAgICAgIHJldHVybiBFQmhFbmFibGU7Ci0gICAg
ZWxzZSBpZiAoIXN0cmNtcCgiZGlzYWJsZSIsIGJlaGF2aW9yKSkKLSAgICAgICAgcmV0dXJuIEVC
aERpc2FibGU7Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKLSAgICAg
ICAgcmV0dXJuIEVCaFdhcm47Ci0gICAgZWxzZSB7Ci0gICAgICAgIENQUFNoSW5mb0xvZ01zZygo
VFN0cmluZygiYmVoYXZpb3IgJyIpICsgYmVoYXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIiku
Y19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBFQmhEaXNhYmxlOwotICAgIH0gICAgICAgIAotfQot
Ci12b2lkICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBleHROYW1lLCBjb25z
dCBjaGFyKiBiZWhhdmlvcikKLXsKLSAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRCZWhh
dmlvcihiZWhhdmlvcik7Ci0gICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0b3Ig
aXRlcjsKLSAgICBUU3RyaW5nIG1zZzsKLSAgICAKLSAgICAvLyBzcGVjaWFsIGNhc2VkIGZvciBh
bGwgZXh0ZW5zaW9uCi0gICAgaWYgKCFzdHJjbXAoZXh0TmFtZSwgImFsbCIpKSB7Ci0gICAgICAg
IGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJlaGF2aW9yVmFsID09IEVCaEVuYWJs
ZSkgewotICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fubm90
IGhhdmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaXRlciA9ICAoKFRQYXJz
ZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSAo
KFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRl
cikKLSAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKLSAgICAgICAg
fSAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaXRlciA9ICgoVFBhcnNlQ29udGV4dCAq
KWNwcC0+cEMpLT5leHRlbnNpb25CZWhhdmlvci5maW5kKFRTdHJpbmcoZXh0TmFtZSkpOwotICAg
ICAgICBpZiAoaXRlciA9PSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVo
YXZpb3IuZW5kKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYmVoYXZpb3JWYWwpIHsKLSAgICAg
ICAgICAgIGNhc2UgRUJoUmVxdWlyZToKLSAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
KFRTdHJpbmcoImV4dGVuc2lvbiAnIikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCIp
LmNfc3RyKCkpOyAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVC
aEVuYWJsZToKLSAgICAgICAgICAgIGNhc2UgRUJoV2FybjoKLSAgICAgICAgICAgIGNhc2UgRUJo
RGlzYWJsZToKLSAgICAgICAgICAgICAgICBtc2cgPSBUU3RyaW5nKCJleHRlbnNpb24gJyIpICsg
ZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiOwotICAgICAgICAgICAgICAgICgoVFBhcnNl
Q29udGV4dCAqKWNwcC0+cEMpLT5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcs
IG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwotICAgIH0KLX0KLSAgICAgICAgCi19ICAvLyBl
eHRlcm4gIkMiCi0KLXZvaWQgc2V0SW5pdGlhbFN0YXRlKCkKLXsKLSAgICB5eV9zdGFydCA9IDE7
Ci19CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmcueQkod29ya2luZyBjb3B5KQpAQCAtMSwyMTc4ICswLDAgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCi0KLS8qKgotICogVGhpcyBpcyBiaXNvbiBncmFtbWFyIGFuZCBwcm9k
dWN0aW9uIGNvZGUgZm9yIHBhcnNpbmcgdGhlIE9wZW5HTCAyLjAgc2hhZGluZwotICogbGFuZ3Vh
Z2VzLgotICovCi0lewotCi0vKiBCYXNlZCBvbjoKLUFOU0kgQyBZYWNjIGdyYW1tYXIKLQotSW4g
MTk4NSwgSmVmZiBMZWUgcHVibGlzaGVkIGhpcyBZYWNjIGdyYW1tYXIgKHdoaWNoIGlzIGFjY29t
cGFuaWVkIGJ5IGEKLW1hdGNoaW5nIExleCBzcGVjaWZpY2F0aW9uKSBmb3IgdGhlIEFwcmlsIDMw
LCAxOTg1IGRyYWZ0IHZlcnNpb24gb2YgdGhlCi1BTlNJIEMgc3RhbmRhcmQuICBUb20gU3RvY2tm
aXNjaCByZXBvc3RlZCBpdCB0byBuZXQuc291cmNlcyBpbiAxOTg3OyB0aGF0Ci1vcmlnaW5hbCwg
YXMgbWVudGlvbmVkIGluIHRoZSBhbnN3ZXIgdG8gcXVlc3Rpb24gMTcuMjUgb2YgdGhlIGNvbXAu
bGFuZy5jCi1GQVEsIGNhbiBiZSBmdHAnZWQgZnJvbSBmdHAudXUubmV0LCBmaWxlIHVzZW5ldC9u
ZXQuc291cmNlcy9hbnNpLmMuZ3JhbW1hci5aLgotCi1JIGludGVuZCB0byBrZWVwIHRoaXMgdmVy
c2lvbiBhcyBjbG9zZSB0byB0aGUgY3VycmVudCBDIFN0YW5kYXJkIGdyYW1tYXIgYXMKLXBvc3Np
YmxlOyBwbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91IGRpc2NvdmVyIGRpc2NyZXBhbmNpZXMuCi0K
LUp1dHRhIERlZ2VuZXIsIDE5OTUKLSovCi0KLSNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJs
ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCi0jaW5jbHVkZSAiR0xTTEFO
Ry9TaGFkZXJMYW5nLmgiCi0KLSNkZWZpbmUgWVlQQVJTRV9QQVJBTSBwYXJzZUNvbnRleHRMb2Nh
bAotLyoKLVRPRE8oYWxva3ApOiBZWVBBUlNFX1BBUkFNX0RFQ0wgaXMgb25seSBoZXJlIHRvIHN1
cHBvcnQgb2xkIGJpc29uLmV4ZSBpbgotY29tcGlsZXIvdG9vbHMuIFJlbW92ZSBpdCB3aGVuIHdl
IGNhbiBleGNsdXNpdmVseSB1c2UgdGhlIG5ld2VyIHZlcnNpb24uCi0qLwotI2RlZmluZSBZWVBB
UlNFX1BBUkFNX0RFQ0wgdm9pZCoKLSNkZWZpbmUgcGFyc2VDb250ZXh0ICgoVFBhcnNlQ29udGV4
dCopKHBhcnNlQ29udGV4dExvY2FsKSkKLSNkZWZpbmUgWVlMRVhfUEFSQU0gcGFyc2VDb250ZXh0
TG9jYWwKLSNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXgoWVlTVFlQRSogcHl5bHZhbCwgdm9pZCog
cGFyc2VDb250ZXh0TG9jYWwpCi1leHRlcm4gdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIqKTsKLQot
I2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2Ug
IT0gRVNoTGFuZ0ZyYWdtZW50ICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1ZlcnRleCkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBz
dXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAg
IFwKLSAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi19Ci0KLSNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwYXJzZUNv
bnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGlu
IHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICBcCi0gICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
fQotCi0jZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5n
dWFnZSAhPSBFU2hMYW5nRnJhZ21lbnQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBz
aGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgXAotICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmlu
ZSBQQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNo
TGFuZ1BhY2spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHBh
cnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gcGFjayBzaGFkZXJzIG9ubHkgIiwg
UywgIiIsICIiKTsgICAgICAgICAgICAgIFwKLSAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLSNkZWZpbmUgVU5QQUNLX09O
TFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdVbnBhY2sp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHVucGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIi
KTsgICAgICAgICAgICBcCi0gICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0jZGVmaW5lIFBBQ0tfVU5QQUNLX09OTFkoUywg
TCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVW5wYWNrICYmICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcGFyc2VDb250ZXh0LT5sYW5ndWFnZSAh
PSBFU2hMYW5nUGFjaykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBwYWNrL3VucGFjayBzaGFk
ZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgXAotICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLSV9Ci0ldW5pb24gewot
ICAgIHN0cnVjdCB7Ci0gICAgICAgIFRTb3VyY2VMb2MgbGluZTsKLSAgICAgICAgdW5pb24gewot
ICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwotICAgICAgICAgICAgZmxvYXQgZjsKLSAgICAg
ICAgICAgIGludCBpOwotICAgICAgICAgICAgYm9vbCBiOwotICAgICAgICB9OwotICAgICAgICBU
U3ltYm9sKiBzeW1ib2w7Ci0gICAgfSBsZXg7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgVFNvdXJj
ZUxvYyBsaW5lOwotICAgICAgICBUT3BlcmF0b3Igb3A7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAg
ICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICAgICAgVEludGVybU5vZGVQ
YWlyIG5vZGVQYWlyOwotICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbnRlcm1UeXBlZE5vZGU7
Ci0gICAgICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAg
IH07Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7Ci0gICAg
ICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKLSAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyOwotICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKLSAgICAgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW07Ci0gICAgICAgICAgICBUVHlwZUxpbmUgdHlwZUxpbmU7Ci0gICAgICAg
ICAgICBUVHlwZUxpc3QqIHR5cGVMaXN0OwotICAgICAgICB9OwotICAgIH0gaW50ZXJtOwotfQot
Ci0lewotICAgIGV4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSosIHZvaWQqKTsKLSV9Ci0KLSVwdXJl
X3BhcnNlciAvKiBKdXN0IGluIGNhc2UgaXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyAq
LwotJWV4cGVjdCAxIC8qIE9uZSBzaGlmdCByZWR1Y2UgY29uZmxpY3QgYmVjYXVzZSBvZiBpZiB8
IGVsc2UgKi8KLSV0b2tlbiA8bGV4PiBJTlZBUklBTlQgSElHSF9QUkVDSVNJT04gTUVESVVNX1BS
RUNJU0lPTiBMT1dfUFJFQ0lTSU9OIFBSRUNJU0lPTgotJXRva2VuIDxsZXg+IEFUVFJJQlVURSBD
T05TVF9RVUFMIEJPT0xfVFlQRSBGTE9BVF9UWVBFIElOVF9UWVBFCi0ldG9rZW4gPGxleD4gQlJF
QUsgQ09OVElOVUUgRE8gRUxTRSBGT1IgSUYgRElTQ0FSRCBSRVRVUk4KLSV0b2tlbiA8bGV4PiBC
VkVDMiBCVkVDMyBCVkVDNCBJVkVDMiBJVkVDMyBJVkVDNCBWRUMyIFZFQzMgVkVDNAotJXRva2Vu
IDxsZXg+IE1BVFJJWDIgTUFUUklYMyBNQVRSSVg0IElOX1FVQUwgT1VUX1FVQUwgSU5PVVRfUVVB
TCBVTklGT1JNIFZBUllJTkcKLSV0b2tlbiA8bGV4PiBTVFJVQ1QgVk9JRF9UWVBFIFdISUxFCi0l
dG9rZW4gPGxleD4gU0FNUExFUjJEIFNBTVBMRVJDVUJFCi0KLSV0b2tlbiA8bGV4PiBJREVOVElG
SUVSIFRZUEVfTkFNRSBGTE9BVENPTlNUQU5UIElOVENPTlNUQU5UIEJPT0xDT05TVEFOVAotJXRv
a2VuIDxsZXg+IEZJRUxEX1NFTEVDVElPTgotJXRva2VuIDxsZXg+IExFRlRfT1AgUklHSFRfT1AK
LSV0b2tlbiA8bGV4PiBJTkNfT1AgREVDX09QIExFX09QIEdFX09QIEVRX09QIE5FX09QCi0ldG9r
ZW4gPGxleD4gQU5EX09QIE9SX09QIFhPUl9PUCBNVUxfQVNTSUdOIERJVl9BU1NJR04gQUREX0FT
U0lHTgotJXRva2VuIDxsZXg+IE1PRF9BU1NJR04gTEVGVF9BU1NJR04gUklHSFRfQVNTSUdOIEFO
RF9BU1NJR04gWE9SX0FTU0lHTiBPUl9BU1NJR04KLSV0b2tlbiA8bGV4PiBTVUJfQVNTSUdOCi0K
LSV0b2tlbiA8bGV4PiBMRUZUX1BBUkVOIFJJR0hUX1BBUkVOIExFRlRfQlJBQ0tFVCBSSUdIVF9C
UkFDS0VUIExFRlRfQlJBQ0UgUklHSFRfQlJBQ0UgRE9UCi0ldG9rZW4gPGxleD4gQ09NTUEgQ09M
T04gRVFVQUwgU0VNSUNPTE9OIEJBTkcgREFTSCBUSUxERSBQTFVTIFNUQVIgU0xBU0ggUEVSQ0VO
VAotJXRva2VuIDxsZXg+IExFRlRfQU5HTEUgUklHSFRfQU5HTEUgVkVSVElDQUxfQkFSIENBUkVU
IEFNUEVSU0FORCBRVUVTVElPTgotCi0ldHlwZSA8aW50ZXJtPiBhc3NpZ25tZW50X29wZXJhdG9y
IHVuYXJ5X29wZXJhdG9yCi0ldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gdmFyaWFibGVf
aWRlbnRpZmllciBwcmltYXJ5X2V4cHJlc3Npb24gcG9zdGZpeF9leHByZXNzaW9uCi0ldHlwZSA8
aW50ZXJtLmludGVybVR5cGVkTm9kZT4gZXhwcmVzc2lvbiBpbnRlZ2VyX2V4cHJlc3Npb24gYXNz
aWdubWVudF9leHByZXNzaW9uCi0ldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gdW5hcnlf
ZXhwcmVzc2lvbiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIGFkZGl0aXZlX2V4cHJlc3Npb24K
LSV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiByZWxhdGlvbmFsX2V4cHJlc3Npb24gZXF1
YWxpdHlfZXhwcmVzc2lvbgotJXR5cGUgPGludGVybS5pbnRlcm1UeXBlZE5vZGU+IGNvbmRpdGlv
bmFsX2V4cHJlc3Npb24gY29uc3RhbnRfZXhwcmVzc2lvbgotJXR5cGUgPGludGVybS5pbnRlcm1U
eXBlZE5vZGU+IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIGxv
Z2ljYWxfYW5kX2V4cHJlc3Npb24KLSV0eXBlIDxpbnRlcm0uaW50ZXJtVHlwZWROb2RlPiBzaGlm
dF9leHByZXNzaW9uIGFuZF9leHByZXNzaW9uIGV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIGluY2x1
c2l2ZV9vcl9leHByZXNzaW9uCi0ldHlwZSA8aW50ZXJtLmludGVybVR5cGVkTm9kZT4gZnVuY3Rp
b25fY2FsbCBpbml0aWFsaXplciBjb25kaXRpb24gY29uZGl0aW9ub3B0Ci0KLSV0eXBlIDxpbnRl
cm0uaW50ZXJtTm9kZT4gdHJhbnNsYXRpb25fdW5pdCBmdW5jdGlvbl9kZWZpbml0aW9uCi0ldHlw
ZSA8aW50ZXJtLmludGVybU5vZGU+IHN0YXRlbWVudCBzaW1wbGVfc3RhdGVtZW50Ci0ldHlwZSA8
aW50ZXJtLmludGVybUFnZ3JlZ2F0ZT4gIHN0YXRlbWVudF9saXN0IGNvbXBvdW5kX3N0YXRlbWVu
dAotJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBkZWNsYXJhdGlvbl9zdGF0ZW1lbnQgc2VsZWN0
aW9uX3N0YXRlbWVudCBleHByZXNzaW9uX3N0YXRlbWVudAotJXR5cGUgPGludGVybS5pbnRlcm1O
b2RlPiBkZWNsYXJhdGlvbiBleHRlcm5hbF9kZWNsYXJhdGlvbgotJXR5cGUgPGludGVybS5pbnRl
cm1Ob2RlPiBmb3JfaW5pdF9zdGF0ZW1lbnQgY29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29w
ZQotJXR5cGUgPGludGVybS5ub2RlUGFpcj4gc2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IGZvcl9y
ZXN0X3N0YXRlbWVudAotJXR5cGUgPGludGVybS5pbnRlcm1Ob2RlPiBpdGVyYXRpb25fc3RhdGVt
ZW50IGp1bXBfc3RhdGVtZW50IHN0YXRlbWVudF9ub19uZXdfc2NvcGUKLSV0eXBlIDxpbnRlcm0+
IHNpbmdsZV9kZWNsYXJhdGlvbiBpbml0X2RlY2xhcmF0b3JfbGlzdAotCi0ldHlwZSA8aW50ZXJt
PiBwYXJhbWV0ZXJfZGVjbGFyYXRpb24gcGFyYW1ldGVyX2RlY2xhcmF0b3IgcGFyYW1ldGVyX3R5
cGVfc3BlY2lmaWVyCi0ldHlwZSA8aW50ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmll
cgotCi0ldHlwZSA8aW50ZXJtLnByZWNpc2lvbj4gcHJlY2lzaW9uX3F1YWxpZmllcgotJXR5cGUg
PGludGVybS50eXBlPiB0eXBlX3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3Nw
ZWNpZmllcgotJXR5cGUgPGludGVybS50eXBlPiB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHR5cGVf
c3BlY2lmaWVyX25vbmFycmF5Ci0ldHlwZSA8aW50ZXJtLnR5cGU+IHN0cnVjdF9zcGVjaWZpZXIK
LSV0eXBlIDxpbnRlcm0udHlwZUxpbmU+IHN0cnVjdF9kZWNsYXJhdG9yCi0ldHlwZSA8aW50ZXJt
LnR5cGVMaXN0PiBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IHN0cnVjdF9kZWNsYXJhdGlvbiBzdHJ1
Y3RfZGVjbGFyYXRpb25fbGlzdAotJXR5cGUgPGludGVybS5mdW5jdGlvbj4gZnVuY3Rpb25faGVh
ZGVyIGZ1bmN0aW9uX2RlY2xhcmF0b3IgZnVuY3Rpb25faWRlbnRpZmllcgotJXR5cGUgPGludGVy
bS5mdW5jdGlvbj4gZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxs
X2hlYWRlcgotJXR5cGUgPGludGVybT4gZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0
ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMgZnVuY3Rpb25fY2FsbF9nZW5l
cmljIGZ1bmN0aW9uX3Byb3RvdHlwZQotJXR5cGUgPGludGVybT4gZnVuY3Rpb25fY2FsbF9vcl9t
ZXRob2QKLQotJXN0YXJ0IHRyYW5zbGF0aW9uX3VuaXQKLSUlCi0KLXZhcmlhYmxlX2lkZW50aWZp
ZXIKLSAgICA6IElERU5USUZJRVIgewotICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJj
aCB3YXMgZG9uZSBpbiB0aGUgbGV4aWNhbCBwaGFzZQotICAgICAgICBjb25zdCBUU3ltYm9sKiBz
eW1ib2wgPSAkMS5zeW1ib2w7Ci0gICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7Ci0g
ICAgICAgIGlmIChzeW1ib2wgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJv
cigkMS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEuc3RyaW5nLT5jX3N0cigpLCAi
Iik7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIFRU
eXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICAgICBUVmFyaWFibGUq
IGZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUpOwotICAg
ICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5
bWJvbAotICAgICAgICAgICAgaWYgKCEgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKLSAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIs
ICQxLnN0cmluZy0+Y19zdHIoKSwgIiIpOwotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNf
Y2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
ZG9uJ3QgZGVsZXRlICQxLnN0cmluZywgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQg
dGhlIHBvb2wKLSAgICAgICAgLy8gcG9wIHdpbGwgcmVjbGFpbSB0aGUgbWVtb3J5Ci0KLSAgICAg
ICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgKSB7
Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdmFyaWFibGUtPmdldENv
bnN0UG9pbnRlcigpOwotICAgICAgICAgICAgVFR5cGUgdCh2YXJpYWJsZS0+Z2V0VHlwZSgpKTsK
LSAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbihjb25zdEFycmF5LCB0LCAkMS5saW5lKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0
VW5pcXVlSWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwgJDEubGluZSk7
Ci0gICAgfQotICAgIDsKLQotcHJpbWFyeV9leHByZXNzaW9uCi0gICAgOiB2YXJpYWJsZV9pZGVu
dGlmaWVyIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBJTlRDT05TVEFOVCB7Ci0g
ICAgICAgIC8vCi0gICAgICAgIC8vIElOVF9UWVBFIGlzIG9ubHkgMTYtYml0IHBsdXMgc2lnbiBi
aXQgZm9yIHZlcnRleC9mcmFnbWVudCBzaGFkZXJzLAotICAgICAgICAvLyBjaGVjayBmb3Igb3Zl
cmZsb3cgZm9yIGNvbnN0YW50cwotICAgICAgICAvLwotICAgICAgICBpZiAoYWJzKCQxLmkpID49
ICgxIDw8IDE2KSkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
IGludGVnZXIgY29uc3RhbnQgb3ZlcmZsb3ciLCAiIiwgIiIpOwotICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRJ
Q29uc3QoJDEuaSk7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCAkMS5saW5lKTsKLSAgICB9Ci0gICAgfCBGTE9BVENPTlNUQU5UIHsKLSAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAg
ICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoJDEuZik7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9h
dCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOwotICAgIH0KLSAgICB8IEJPT0xD
T05TVEFOVCB7Ci0gICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKLSAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCQxLmIpOwotICAgICAg
ICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOwot
ICAgIH0KLSAgICB8IExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiB7Ci0gICAgICAg
ICQkID0gJDI7Ci0gICAgfQotICAgIDsKLQotcG9zdGZpeF9leHByZXNzaW9uCi0gICAgOiBwcmlt
YXJ5X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IHBvc3RmaXhf
ZXhwcmVzc2lvbiBMRUZUX0JSQUNLRVQgaW50ZWdlcl9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQg
ewotICAgICAgICBpZiAoISQxLT5pc0FycmF5KCkgJiYgISQxLT5pc01hdHJpeCgpICYmICEkMS0+
aXNWZWN0b3IoKSkgewotICAgICAgICAgICAgaWYgKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSkKLSAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycg
aXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICQxLT5nZXRBc1N5bWJv
bE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSwgIiIpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBp
cyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAi
Iik7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiAkMy0+
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKLSAgICAgICAgICAgIGlmICgkMS0+aXNBcnJh
eSgpKSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIGFycmF5cwotICAgICAgICAgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdEFycmF5Tm9kZSgkMy0+Z2V0QXNDb25zdGFudFVuaW9u
KCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpLCAkMSwgJDIubGluZSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc1ZlY3RvcigpKSB7ICAvLyBjb25zdGFudCBmb2xk
aW5nIGZvciB2ZWN0b3JzCi0gICAgICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0g
ICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7Ci0gICAgICAgICAgICAgICAgZmllbGRzLm9m
ZnNldHNbMF0gPSAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVy
KCktPmdldElDb25zdCgpOyAvLyBuZWVkIHRvIGRvIGl0IHRoaXMgd2F5IGJlY2F1c2Ugdi54eSBz
ZW5kcyBmaWVsZHMgaW50ZWdlciBhcnJheQotICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCAkMSwgJDIubGluZSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpKSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIG1h
dHJpY2VzCi0gICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0TWF0cml4
Tm9kZSgkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdl
dElDb25zdCgpLCAkMSwgJDIubGluZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoJDMtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCgkMS0+aXNWZWN0b3IoKSB8fCAkMS0+aXNNYXRyaXgoKSkgJiYgJDEt
PmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpIDw9ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgJiYgISQxLT5pc0FycmF5KCkgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJb
IiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50
VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOwotICAgICAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldE1heEFycmF5
U2l6ZSgpIDw9ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0SUNvbnN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+YXJyYXlTZXRNYXhTaXplKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSwgJDEtPmdl
dFR5cGVQb2ludGVyKCksICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKS0+Z2V0SUNvbnN0KCksIHRydWUsICQyLmxpbmUpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTZXRNYXhTaXplKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSwg
JDEtPmdldFR5cGVQb2ludGVyKCksIDAsIGZhbHNlLCAkMi5saW5lKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNv
bnN0KCkgPj0gJDEtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImFycmF5
IGluZGV4IG91dCBvZiByYW5nZSAnJWQnIiwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgJDEsICQzLCAkMi5s
aW5lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGlmICgkMS0+aXNBcnJheSgpICYmICQxLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkg
PT0gMCkgewotICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICIiLCAiWyIsICJhcnJheSBtdXN0IGJlIHJlZGVjbGFyZWQgd2l0aCBhIHNpemUgYmVmb3JlIGJl
aW5nIGluZGV4ZWQgd2l0aCBhIHZhcmlhYmxlIik7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhJbmRpcmVj
dCwgJDEsICQzLCAkMi5saW5lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp
ZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAu
MGYpOwotICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFDb25zdCks
ICQyLmxpbmUpOwotICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc0FycmF5KCkpIHsKLSAgICAgICAg
ICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQotICAgICAgICAgICAgICAgICQkLT5z
ZXRUeXBlKFRUeXBlKCQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCksICQxLT5nZXRUeXBlKCkuZ2V0
VHlwZU5hbWUoKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICQkLT5zZXRU
eXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1w
b3JhcnksICQxLT5nZXROb21pbmFsU2l6ZSgpLCAkMS0+aXNNYXRyaXgoKSkpOwotCi0gICAgICAg
ICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKLSAgICAg
ICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsK
LSAgICAgICAgfSBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSAmJiAkMS0+Z2V0VHlwZSgpLmdldFF1
YWxpZmllcigpID09IEV2cUNvbnN0KQotICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEt
PmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAkMS0+Z2V0Tm9t
aW5hbFNpemUoKSkpOwotICAgICAgICBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSkKLSAgICAgICAg
ICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lv
bigpLCBFdnFUZW1wb3JhcnksICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKCQxLT5pc1ZlY3RvcigpICYmICQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZx
Q29uc3QpCi0gICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCks
ICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QpKTsKLSAgICAgICAgZWxzZSBpZiAoJDEtPmlz
VmVjdG9yKCkpCi0gICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBl
KCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5KSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICQkLT5zZXRUeXBlKCQxLT5nZXRUeXBlKCkpOwotICAgIH0KLSAgICB8IGZ1bmN0
aW9uX2NhbGwgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IHBvc3RmaXhfZXhwcmVz
c2lvbiBET1QgRklFTERfU0VMRUNUSU9OIHsKLSAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsK
LSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBk
b3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCQxLT5pc1ZlY3Rvcigp
KSB7Ci0gICAgICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICgh
IHBhcnNlQ29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5vbWlu
YWxTaXplKCksIGZpZWxkcywgJDMubGluZSkpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVt
ID0gMTsKLSAgICAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7IC8vIGNv
bnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKLSAgICAgICAgICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgJDEsICQzLmxpbmUpOwotICAg
ICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICQkLT5z
ZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFD
b25zdCwgKGludCkgKCokMy5zdHJpbmcpLnNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBpZiAoZmllbGRzLm51bSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAg
ICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5vZmZzZXRzWzBd
KTsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDMubGluZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3Qs
ICQxLCBpbmRleCwgJDIubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRU
eXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcg
PSAqJDMuc3RyaW5nOwotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICQzLmxpbmUpOwot
ICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZElu
ZGV4KEVPcFZlY3RvclN3aXp6bGUsICQxLCBpbmRleCwgJDIubGluZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNp
c2lvbigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0
cml4KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAg
aWYgKCEgcGFyc2VDb250ZXh0LT5wYXJzZU1hdHJpeEZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0
Tm9taW5hbFNpemUoKSwgZmllbGRzLCAkMy5saW5lKSkgewotICAgICAgICAgICAgICAgIGZpZWxk
cy53aG9sZVJvdyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOwotICAgICAgICAgICAgICAgIGZp
ZWxkcy5jb2wgPSAwOwotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxk
cy53aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iLCAiIik7Ci0g
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgwKTsKLSAgICAgICAgICAgICAgICBUSW50
ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAk
My5saW5lKTsKLSAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOwotICAgICAgICAg
ICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNp
c2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKLSAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxp
bmUpOwotICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUo
KSwgJDEtPmdldFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAoJDEtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgYm9vbCBm
aWVsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9
ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7Ci0gICAgICAgICAgICBpZiAoZmllbGRzID09IDAp
IHsKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJzdHJ1Y3R1
cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIsICIiKTsKLSAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICAg
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLT5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoKCpmaWVsZHMpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpID09ICok
My5zdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29u
c3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25z
dFN0cnVjdCgqJDMuc3RyaW5nLCAkMSwgJDIubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9m
IHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVk
IGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICQkLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKigqZmllbGRz
KVtpXS50eXBlLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICQxLCBp
bmRleCwgJDIubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqKCpm
aWVsZHMpW2ldLnR5cGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5l
LCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7
Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwg
IiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBv
biBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOwotICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICB9
Ci0gICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAot
ICAgIH0KLSAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBJTkNfT1AgewotICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQyLmxpbmUsICIrKyIsICQxKSkKLSAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgJDIubGluZSwg
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMi5saW5lLCAiKysiLCAkMS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBwb3N0Zml4X2V4
cHJlc3Npb24gREVDX09QIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JD
aGVjaygkMi5saW5lLCAiLS0iLCAkMSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgoRU9wUG9zdERlY3JlbWVudCwgJDEsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51
bmFyeU9wRXJyb3IoJDIubGluZSwgIi0tIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwot
ICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotaW50ZWdlcl9leHByZXNzaW9uCi0gICAgOiBleHBy
ZXNzaW9uIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soJDEs
ICJbXSIpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQk
ID0gJDE7Ci0gICAgfQotICAgIDsKLQotZnVuY3Rpb25fY2FsbAotICAgIDogZnVuY3Rpb25fY2Fs
bF9vcl9tZXRob2QgewotICAgICAgICBURnVuY3Rpb24qIGZuQ2FsbCA9ICQxLmZ1bmN0aW9uOwot
ICAgICAgICBUT3BlcmF0b3Igb3AgPSBmbkNhbGwtPmdldEJ1aWx0SW5PcCgpOwotCi0gICAgICAg
IGlmIChvcCAhPSBFT3BOdWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAg
ICAgLy8gVGhlbiB0aGlzIHNob3VsZCBiZSBhIGNvbnN0cnVjdG9yLgotICAgICAgICAgICAgLy8g
RG9uJ3QgZ28gdGhyb3VnaCB0aGUgc3ltYm9sIHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCi0gICAg
ICAgICAgICAvLyBUaGVpciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNh
bGx5LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJw
VW5kZWZpbmVkKTsgIC8vIHVzZSB0aGlzIHRvIGdldCB0aGUgdHlwZSBiYWNrCi0gICAgICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5jb25zdHJ1Y3RvckVycm9yQ2hlY2soJDEubGluZSwgJDEuaW50
ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgewotICAgICAgICAgICAgICAgICQkID0gMDsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAg
ICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgotICAgICAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0cnVjdG9yKCQx
LmludGVybU5vZGUsICZ0eXBlLCBvcCwgZm5DYWxsLCAkMS5saW5lKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKDAsIG9wLCAkMS5saW5lKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICQkLT5zZXRUeXBlKHR5cGUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIE5vdCBhIGNvbnN0cnVjdG9yLiAgRmluZCBpdCBp
biB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNvbnN0IFRG
dW5jdGlvbiogZm5DYW5kaWRhdGU7Ci0gICAgICAgICAgICBib29sIGJ1aWx0SW47Ci0gICAgICAg
ICAgICBmbkNhbmRpZGF0ZSA9IHBhcnNlQ29udGV4dC0+ZmluZEZ1bmN0aW9uKCQxLmxpbmUsIGZu
Q2FsbCwgJmJ1aWx0SW4pOwotICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7Ci0gICAgICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9uLiAgQnV0
LCBpdCBtaWdodCBzdGlsbCBtYXAgdG8gYSBidWlsdC1pbgotICAgICAgICAgICAgICAgIC8vIG9w
ZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIG9wID0gZm5DYW5k
aWRhdGUtPmdldEJ1aWx0SW5PcCgpOwotICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYmIG9w
ICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAg
ICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1hcHBlZCB0byBhIGJ1aWx0LWluIG9wZXJhdGlvbi4KLSAg
ICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRl
LT5nZXRQYXJhbUNvdW50KCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBv
cGVyYXRvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEu
aW50ZXJtTm9kZSwgMCwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVy
YW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAlcyIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCQx
LmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFlZRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFn
Z3JlZ2F0ZSwgb3AsICQxLmxpbmUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlYWwgZnVu
Y3Rpb24gY2FsbAotCi0gICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoJDEuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5j
dGlvbkNhbGwsICQxLmxpbmUpOwotICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShmbkNh
bmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlz
IGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBm
dW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAv
LyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdzIGEgdXNlckRlZmluZWQgLT4gY291bGQgYmUgYW4g
b3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9uIGFsc28KLSAgICAgICAgICAgICAgICAgICAgLy8g
aWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRlZmluaXRlbHkgYSBidWlsdEluIGZ1bmN0aW9uIHdp
dGggRU9wTnVsbAotICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1aWx0SW4pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VXNlckRlZmluZWQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoZm5DYW5kaWRh
dGUtPmdldE1hbmdsZWROYW1lKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbDsKLSAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllckxpc3QmIHF1YWxpZmllckxpc3Qg
PSAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0UXVhbGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gKCpmbkNhbmRpZGF0ZSlbaV0udHlw
ZS0+Z2V0UXVhbGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9PSBF
dnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJCQtPmdldExpbmUoKSwgImFzc2ln
biIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpW2ldLT5nZXRBc1R5cGVkKCkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3Io
JDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3Nl
ZCBmb3IgJ291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIsICIiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVyTGlzdC5wdXNoX2JhY2socXVhbCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgJCQt
PnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2Ugd2FzIHB1dCBvdXQgYnkgUGFG
aW5kRnVuY3Rpb24oKQotICAgICAgICAgICAgICAgIC8vIFB1dCBvbiBhIGR1bW15IG5vZGUgZm9y
IGVycm9yIHJlY292ZXJ5Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dEZDb25zdCgwLjBmKTsKLSAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkZWxldGUg
Zm5DYWxsOwotICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCi0gICAgOiBm
dW5jdGlvbl9jYWxsX2dlbmVyaWMgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IHBv
c3RmaXhfZXhwcmVzc2lvbiBET1QgZnVuY3Rpb25fY2FsbF9nZW5lcmljIHsKLSAgICAgICAgcGFy
c2VDb250ZXh0LT5lcnJvcigkMy5saW5lLCAibWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIi
LCAiIik7Ci0gICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9ICQz
OwotICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2NhbGxfZ2VuZXJpYwotICAgIDogZnVuY3Rpb25f
Y2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIFJJR0hUX1BBUkVOIHsKLSAgICAgICAgJCQgPSAk
MTsKLSAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7Ci0gICAgfQotICAgIHwgZnVuY3Rpb25fY2Fs
bF9oZWFkZXJfbm9fcGFyYW1ldGVycyBSSUdIVF9QQVJFTiB7Ci0gICAgICAgICQkID0gJDE7Ci0g
ICAgICAgICQkLmxpbmUgPSAkMi5saW5lOwotICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2NhbGxf
aGVhZGVyX25vX3BhcmFtZXRlcnMKLSAgICA6IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIFZPSURfVFlQ
RSB7Ci0gICAgICAgICQkLmZ1bmN0aW9uID0gJDE7Ci0gICAgICAgICQkLmludGVybU5vZGUgPSAw
OwotICAgIH0KLSAgICB8IGZ1bmN0aW9uX2NhbGxfaGVhZGVyIHsKLSAgICAgICAgJCQuZnVuY3Rp
b24gPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtTm9kZSA9IDA7Ci0gICAgfQotICAgIDsKLQotZnVu
Y3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzCi0gICAgOiBmdW5jdGlvbl9jYWxsX2hl
YWRlciBhc3NpZ25tZW50X2V4cHJlc3Npb24gewotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0g
eyAwLCBuZXcgVFR5cGUoJDItPmdldFR5cGUoKSkgfTsKLSAgICAgICAgJDEtPmFkZFBhcmFtZXRl
cihwYXJhbSk7Ci0gICAgICAgICQkLmZ1bmN0aW9uID0gJDE7Ci0gICAgICAgICQkLmludGVybU5v
ZGUgPSAkMjsKLSAgICB9Ci0gICAgfCBmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRl
cnMgQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9uIHsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJh
bSA9IHsgMCwgbmV3IFRUeXBlKCQzLT5nZXRUeXBlKCkpIH07Ci0gICAgICAgICQxLmZ1bmN0aW9u
LT5hZGRQYXJhbWV0ZXIocGFyYW0pOwotICAgICAgICAkJC5mdW5jdGlvbiA9ICQxLmZ1bmN0aW9u
OwotICAgICAgICAkJC5pbnRlcm1Ob2RlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jv
d0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCAkMywgJDIubGluZSk7Ci0gICAgfQotICAgIDsKLQot
ZnVuY3Rpb25fY2FsbF9oZWFkZXIKLSAgICA6IGZ1bmN0aW9uX2lkZW50aWZpZXIgTEVGVF9QQVJF
TiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIDsKLQotLy8gR3JhbW1hciBOb3RlOiAg
Q29uc3RydWN0b3JzIGxvb2sgbGlrZSBmdW5jdGlvbnMsIGJ1dCBhcmUgcmVjb2duaXplZCBhcyB0
eXBlcy4KLQotZnVuY3Rpb25faWRlbnRpZmllcgotICAgIDogdHlwZV9zcGVjaWZpZXIgewotICAg
ICAgICAvLwotICAgICAgICAvLyBDb25zdHJ1Y3RvcgotICAgICAgICAvLwotICAgICAgICBpZiAo
JDEuYXJyYXkpIHsKLSAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9y
Q2hlY2soJDEubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpIHsKLSAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAkMS5zZXRBcnJheShm
YWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoJDEudXNlckRl
ZikgewotICAgICAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nID0gIiI7Ci0gICAgICAgICAgICBU
VHlwZSB0eXBlKCQxKTsKLSAgICAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1
bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBFT3BDb25zdHJ1Y3RTdHJ1Y3QpOwotICAgICAgICAg
ICAgJCQgPSBmdW5jdGlvbjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFRPcGVyYXRv
ciBvcCA9IEVPcE51bGw7Ci0gICAgICAgICAgICBzd2l0Y2ggKCQxLnR5cGUpIHsKLSAgICAgICAg
ICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgaWYgKCQxLm1hdHJpeCkgewotICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBj
YXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3Ry
dWN0TWF0MjsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDM6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNo
KCQxLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OyBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVj
dFZlYzM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgIHN3aXRjaCgk
MS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAyOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzIiLCAkMS5saW5lKTsg
b3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiAg
ICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzMiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJ
VmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICBGUkFHX1ZFUlRfT05M
WSgiaXZlYzQiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBF
YnRCb29sOgotICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBF
T3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICBG
UkFHX1ZFUlRfT05MWSgiYnZlYzIiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMjsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZl
YzMiLCAkMS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSA0OiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzQiLCAkMS5saW5lKTsgb3Ag
PSBFT3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wID09IEVPcE51
bGwpIHsKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5u
b3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7Ci0g
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAg
JDEudHlwZSA9IEVidEZsb2F0OwotICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0Rmxv
YXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBUU3RyaW5nIHRlbXBTdHJpbmcgPSAiIjsK
LSAgICAgICAgICAgIFRUeXBlIHR5cGUoJDEpOwotICAgICAgICAgICAgVEZ1bmN0aW9uICpmdW5j
dGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKLSAgICAgICAgICAg
ICQkID0gZnVuY3Rpb247Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBJREVOVElGSUVSIHsKLSAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUsICokMS5z
dHJpbmcpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIFRU
eXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgVEZ1bmN0aW9uICpmdW5j
dGlvbiA9IG5ldyBURnVuY3Rpb24oJDEuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgJCQgPSBmdW5j
dGlvbjsKLSAgICB9Ci0gICAgfCBGSUVMRF9TRUxFQ1RJT04gewotICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDEubGluZSwgKiQxLnN0cmluZykpCi0gICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpOwotICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5j
dGlvbigkMS5zdHJpbmcsIHR5cGUpOwotICAgICAgICAkJCA9IGZ1bmN0aW9uOwotICAgIH0KLSAg
ICA7Ci0KLXVuYXJ5X2V4cHJlc3Npb24KLSAgICA6IHBvc3RmaXhfZXhwcmVzc2lvbiB7Ci0gICAg
ICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgSU5DX09QIHVuYXJ5X2V4cHJlc3Npb24gewotICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQxLmxpbmUsICIrKyIsICQy
KSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQy
LCAkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09
IDApIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9yKCQxLmxpbmUsICIr
KyIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgfQotICAgIH0KLSAgICB8
IERFQ19PUCB1bmFyeV9leHByZXNzaW9uIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZh
bHVlRXJyb3JDaGVjaygkMS5saW5lLCAiLS0iLCAkMikpCi0gICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgJDEubGluZSwgcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnVuYXJ5T3BFcnJvcigkMS5saW5lLCAiLS0iLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQk
ID0gJDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCB1bmFyeV9vcGVyYXRvciB1bmFyeV9leHBy
ZXNzaW9uIHsKLSAgICAgICAgaWYgKCQxLm9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCQxLm9wLCAkMiwgJDEu
bGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgICAgICBpZiAoJCQgPT0g
MCkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKLSAgICAgICAg
ICAgICAgICBzd2l0Y2goJDEub3ApIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0aXZl
OiAgIGVycm9yT3AgPSAiLSI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNh
bE5vdDogZXJyb3JPcCA9ICIhIjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDogYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5h
cnlPcEVycm9yKCQxLmxpbmUsIGVycm9yT3AsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAk
JCA9ICQyOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICQkID0g
JDI7Ci0gICAgfQotICAgIDsKLS8vIEdyYW1tYXIgTm90ZTogIE5vIHRyYWRpdGlvbmFsIHN0eWxl
IHR5cGUgY2FzdHMuCi0KLXVuYXJ5X29wZXJhdG9yCi0gICAgOiBQTFVTICB7ICQkLmxpbmUgPSAk
MS5saW5lOyAkJC5vcCA9IEVPcE51bGw7IH0KLSAgICB8IERBU0ggIHsgJCQubGluZSA9ICQxLmxp
bmU7ICQkLm9wID0gRU9wTmVnYXRpdmU7IH0KLSAgICB8IEJBTkcgIHsgJCQubGluZSA9ICQxLmxp
bmU7ICQkLm9wID0gRU9wTG9naWNhbE5vdDsgfQotICAgIDsKLS8vIEdyYW1tYXIgTm90ZTogIE5v
ICcqJyBvciAnJicgdW5hcnkgb3BzLiAgUG9pbnRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuCi0KLW11
bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24KLSAgICA6IHVuYXJ5X2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9Ci0gICAgfCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIFNUQVIgdW5hcnlfZXhwcmVzc2lv
biB7Ci0gICAgICAgIEZSQUdfVkVSVF9PTkxZKCIqIiwgJDIubGluZSk7Ci0gICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICQxLCAkMywg
JDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7Ci0gICAgICAgIGlmICgkJCA9PSAw
KSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIioi
LCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBTTEFTSCB1
bmFyeV9leHByZXNzaW9uIHsKLSAgICAgICAgRlJBR19WRVJUX09OTFkoIi8iLCAkMi5saW5lKTsK
LSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cERpdiwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJv
cigkMi5saW5lLCAiLyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1hZGRpdGl2ZV9leHByZXNz
aW9uCi0gICAgOiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwg
YWRkaXRpdmVfZXhwcmVzc2lvbiBQTFVTIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewotICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRk
LCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBp
ZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQy
LmxpbmUsICIrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
JCQgPSAkMTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gREFT
SCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgJDEsICQzLCAkMi5saW5lLCBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiLSIsICQxLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgOwotCi1zaGlmdF9leHByZXNzaW9uCi0gICAgOiBhZGRpdGl2ZV9leHByZXNzaW9u
IHsgJCQgPSAkMTsgfQotICAgIDsKLQotcmVsYXRpb25hbF9leHByZXNzaW9uCi0gICAgOiBzaGlm
dF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExF
RlRfQU5HTEUgc2hpZnRfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgJDEsICQzLCAkMi5saW5lLCBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPCIsICQxLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICQyLmxpbmUpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgcmVsYXRp
b25hbF9leHByZXNzaW9uIFJJR0hUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJU
aGFuLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAg
ICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9y
KCQyLmxpbmUsICI+IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAg
ICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVfT1Agc2hpZnRfZXhwcmVz
c2lvbiAgewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wTGVzc1RoYW5FcXVhbCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPD0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2Up
OwotICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCAkMi5saW5lKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lv
biBHRV9PUCBzaGlmdF9leHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsICQy
LmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkg
ewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI+PSIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5p
b24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOwotICAgICAgICB9Ci0gICAgfQotICAg
IDsKLQotZXF1YWxpdHlfZXhwcmVzc2lvbgotICAgIDogcmVsYXRpb25hbF9leHByZXNzaW9uIHsg
JCQgPSAkMTsgfQotICAgIHwgZXF1YWxpdHlfZXhwcmVzc2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4
cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcEVxdWFsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI9PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAk
My0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0g
ICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQy
LmxpbmUpOwotICAgICAgICB9IGVsc2UgaWYgKCgkMS0+aXNBcnJheSgpIHx8ICQzLT5pc0FycmF5
KCkpICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMi5saW5lLCAiR0xfM0RM
X2FycmF5X29iamVjdHMiKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwot
ICAgIH0KLSAgICB8IGVxdWFsaXR5X2V4cHJlc3Npb24gTkVfT1AgcmVsYXRpb25hbF9leHByZXNz
aW9uIHsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcE5vdEVxdWFsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5i
aW5hcnlPcEVycm9yKCQyLmxpbmUsICIhPSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAg
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxp
bmUpOwotICAgICAgICB9IGVsc2UgaWYgKCgkMS0+aXNBcnJheSgpIHx8ICQzLT5pc0FycmF5KCkp
ICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMi5saW5lLCAiR0xfM0RMX2Fy
cmF5X29iamVjdHMiKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAg
IH0KLSAgICA7Ci0KLWFuZF9leHByZXNzaW9uCi0gICAgOiBlcXVhbGl0eV9leHByZXNzaW9uIHsg
JCQgPSAkMTsgfQotICAgIDsKLQotZXhjbHVzaXZlX29yX2V4cHJlc3Npb24KLSAgICA6IGFuZF9l
eHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIDsKLQotaW5jbHVzaXZlX29yX2V4cHJlc3Npb24K
LSAgICA6IGV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIDsKLQotbG9n
aWNhbF9hbmRfZXhwcmVzc2lvbgotICAgIDogaW5jbHVzaXZlX29yX2V4cHJlc3Npb24geyAkJCA9
ICQxOyB9Ci0gICAgfCBsb2dpY2FsX2FuZF9leHByZXNzaW9uIEFORF9PUCBpbmNsdXNpdmVfb3Jf
ZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMb2dpY2FsQW5kLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICImJiIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxz
ZSk7Ci0gICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksICQyLmxpbmUpOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQotbG9naWNhbF94b3JfZXhw
cmVzc2lvbgotICAgIDogbG9naWNhbF9hbmRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICB8
IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24gWE9SX09QIGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24gIHsK
LSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cExvZ2ljYWxYb3IsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7
Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoJDIubGluZSwgIl5eIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwotICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi1sb2dpY2FsX29yX2V4cHJlc3Npb24KLSAgICA6
IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9Ci0gICAgfCBsb2dpY2FsX29yX2V4
cHJlc3Npb24gT1JfT1AgbG9naWNhbF94b3JfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwg
JDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOwotICAgICAgICBpZiAoJCQg
PT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUs
ICJ8fCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAg
IHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOwotICAgICAgICB9Ci0gICAg
fQotICAgIDsKLQotY29uZGl0aW9uYWxfZXhwcmVzc2lvbgotICAgIDogbG9naWNhbF9vcl9leHBy
ZXNzaW9uIHsgJCQgPSAkMTsgfQotICAgIHwgbG9naWNhbF9vcl9leHByZXNzaW9uIFFVRVNUSU9O
IGV4cHJlc3Npb24gQ09MT04gYXNzaWdubWVudF9leHByZXNzaW9uIHsKLSAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCi0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFNlbGVjdGlvbigkMSwgJDMsICQ1LCAkMi5saW5lKTsKLSAgICAgICAgaWYgKCQz
LT5nZXRUeXBlKCkgIT0gJDUtPmdldFR5cGUoKSkKLSAgICAgICAgICAgICQkID0gMDsKLQotICAg
ICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVy
cm9yKCQyLmxpbmUsICI6IiwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCksICQ1LT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgJCQgPSAkNTsKLSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0KLWFzc2lnbm1lbnRfZXhw
cmVzc2lvbgotICAgIDogY29uZGl0aW9uYWxfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KLSAgICB8
IHVuYXJ5X2V4cHJlc3Npb24gYXNzaWdubWVudF9vcGVyYXRvciBhc3NpZ25tZW50X2V4cHJlc3Np
b24gewotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQyLmxpbmUs
ICJhc3NpZ24iLCAkMSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRBc3NpZ24oJDIub3AsICQx
LCAkMywgJDIubGluZSk7Ci0gICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmFzc2lnbkVycm9yKCQyLmxpbmUsICJhc3NpZ24iLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICB9IGVsc2UgaWYg
KCgkMS0+aXNBcnJheSgpIHx8ICQzLT5pc0FycmF5KCkpICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5z
aW9uRXJyb3JDaGVjaygkMi5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKLSAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgIH0KLSAgICA7Ci0KLWFzc2lnbm1lbnRf
b3BlcmF0b3IKLSAgICA6IEVRVUFMICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wQXNzaWduOyB9Ci0gICAgfCBN
VUxfQVNTSUdOICAgeyBGUkFHX1ZFUlRfT05MWSgiKj0iLCAkMS5saW5lKTsgICAgICQkLmxpbmUg
PSAkMS5saW5lOyAkJC5vcCA9IEVPcE11bEFzc2lnbjsgfQotICAgIHwgRElWX0FTU0lHTiAgIHsg
RlJBR19WRVJUX09OTFkoIi89IiwgJDEubGluZSk7ICAgICAkJC5saW5lID0gJDEubGluZTsgJCQu
b3AgPSBFT3BEaXZBc3NpZ247IH0KLSAgICB8IEFERF9BU1NJR04gICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJCQubGluZSA9ICQxLmxpbmU7ICQkLm9wID0gRU9wQWRkQXNz
aWduOyB9Ci0gICAgfCBTVUJfQVNTSUdOICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICQkLmxpbmUgPSAkMS5saW5lOyAkJC5vcCA9IEVPcFN1YkFzc2lnbjsgfQotICAgIDsK
LQotZXhwcmVzc2lvbgotICAgIDogYXNzaWdubWVudF9leHByZXNzaW9uIHsKLSAgICAgICAgJCQg
PSAkMTsKLSAgICB9Ci0gICAgfCBleHByZXNzaW9uIENPTU1BIGFzc2lnbm1lbnRfZXhwcmVzc2lv
biB7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoJDEs
ICQzLCAkMi5saW5lKTsKLSAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiLCIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
OwotCi1jb25zdGFudF9leHByZXNzaW9uCi0gICAgOiBjb25kaXRpb25hbF9leHByZXNzaW9uIHsK
LSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y29uc3RFcnJvckNoZWNrKCQxKSkKLSAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAg
ICA7Ci0KLWRlY2xhcmF0aW9uCi0gICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgU0VNSUNPTE9OICAg
ewotICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigkMS5mdW5jdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcgVEludGVybUFnZ3Jl
Z2F0ZTsKLSAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1bmN0aW9uLmdldFJldHVyblR5cGUo
KSk7Ci0gICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5jdGlvbi5nZXROYW1lKCkpOwotICAg
ICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5jdGlvbi5nZXRQYXJhbUNvdW50
KCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgVFBhcmFtZXRlciAmcGFyYW0gPSBmdW5j
dGlvbltpXTsKLSAgICAgICAgICAgIGlmIChwYXJhbS5uYW1lICE9IDApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgVFZhcmlhYmxlICp2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUocGFy
YW0ubmFtZSwgKnBhcmFtLnR5cGUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IHByb3RvdHlwZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocHJv
dG90eXBlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdl
dFVuaXF1ZUlkKCksIHZhcmlhYmxlLT5nZXROYW1lKCksIHZhcmlhYmxlLT5nZXRUeXBlKCksICQx
LmxpbmUpLCAkMS5saW5lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgJDEubGluZSksICQxLmxpbmUpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcm90b3R5cGUtPnNldE9w
KEVPcFByb3RvdHlwZSk7Ci0gICAgICAgICQkID0gcHJvdG90eXBlOwotICAgIH0KLSAgICB8IGlu
aXRfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7Ci0gICAgICAgIGlmICgkMS5pbnRlcm1BZ2dy
ZWdhdGUpCi0gICAgICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUtPnNldE9wKEVPcERlY2xhcmF0
aW9uKTsKLSAgICAgICAgJCQgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgfQotICAgIHwgUFJF
Q0lTSU9OIHByZWNpc2lvbl9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyBTRU1JQ09M
T04gewotICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnNldERlZmF1bHRQcmVjaXNp
b24oICQzLnR5cGUsICQyICk7Ci0gICAgICAgICQkID0gMDsKLSAgICB9Ci0gICAgOwotCi1mdW5j
dGlvbl9wcm90b3R5cGUKLSAgICA6IGZ1bmN0aW9uX2RlY2xhcmF0b3IgUklHSFRfUEFSRU4gIHsK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gTXVsdGlwbGUgZGVjbGFyYXRpb25zIG9mIHRoZSBzYW1l
IGZ1bmN0aW9uIGFyZSBhbGxvd2VkLgotICAgICAgICAvLwotICAgICAgICAvLyBJZiB0aGlzIGlz
IGEgZGVmaW5pdGlvbiwgdGhlIGRlZmluaXRpb24gcHJvZHVjdGlvbiBjb2RlIHdpbGwgY2hlY2sg
Zm9yIHJlZGVmaW5pdGlvbnMKLSAgICAgICAgLy8gKHdlIGRvbid0IGtub3cgYXQgdGhpcyBwb2lu
dCBpZiBpdCdzIGEgZGVmaW5pdGlvbiBvciBub3QpLgotICAgICAgICAvLwotICAgICAgICAvLyBS
ZWRlY2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0
ZXIgcXVhbGlmaWVycyBtdXN0IG1hdGNoLgotICAgICAgICAvLwotICAgICAgICBURnVuY3Rpb24q
IHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLmZpbmQoJDEtPmdldE1hbmdsZWROYW1lKCkpKTsKLSAgICAgICAgaWYgKHByZXZEZWMpIHsK
LSAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJldHVy
blR5cGUoKSkgewotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwg
Im92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICQx
LT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIiIpOwotICAgICAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAgICAg
ICAgICAgICAgIGlmICgoKnByZXZEZWMpW2ldLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICgqJDEp
W2ldLnR5cGUtPmdldFF1YWxpZmllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUg
c2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICgqJDEpW2ldLnR5cGUtPmdldFF1YWxpZmllclN0
cmluZygpLCAiIik7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSByZWRlY2xhcmF0aW9uLCBpdCBjb3VsZCBhbHNv
IGJlIGEgZGVmaW5pdGlvbiwKLSAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSwgd2Ugd2FudCB0byB1
c2UgdGhlIHZhcmlhYmxlIG5hbWVzIGZyb20gdGhpcyBvbmUsIGFuZCBub3QgdGhlIG9uZSB0aGF0
J3MKLSAgICAgICAgLy8gYmVpbmcgcmVkZWNsYXJlZC4gIFNvLCBwYXNzIGJhY2sgdXAgdGhpcyBk
ZWNsYXJhdGlvbiwgbm90IHRoZSBvbmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KLSAgICAgICAgLy8K
LSAgICAgICAgJCQuZnVuY3Rpb24gPSAkMTsKLSAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7Ci0K
LSAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLmZ1bmN0aW9uKTsK
LSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9kZWNsYXJhdG9yCi0gICAgOiBmdW5jdGlvbl9oZWFk
ZXIgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IGZ1bmN0aW9uX2hlYWRlcl93aXRo
X3BhcmFtZXRlcnMgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICA7Ci0KLQotZnVuY3Rp
b25faGVhZGVyX3dpdGhfcGFyYW1ldGVycwotICAgIDogZnVuY3Rpb25faGVhZGVyIHBhcmFtZXRl
cl9kZWNsYXJhdGlvbiB7Ci0gICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCi0gICAgICAgICQk
ID0gJDE7Ci0gICAgICAgIGlmICgkMi5wYXJhbS50eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRW
b2lkKQotICAgICAgICAgICAgJDEtPmFkZFBhcmFtZXRlcigkMi5wYXJhbSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGRlbGV0ZSAkMi5wYXJhbS50eXBlOwotICAgIH0KLSAgICB8IGZ1bmN0
aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgQ09NTUEgcGFyYW1ldGVyX2RlY2xhcmF0aW9uIHsK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gT25seSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFt
ZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZvaWQKLSAgICAgICAgLy8gVGhlIGNoZWNrIGZvciBuYW1l
ZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2b2lkIGlzIGRvbmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0
b3IKLSAgICAgICAgLy8KLSAgICAgICAgaWYgKCQzLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgp
ID09IEVidFZvaWQpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGlzIHBhcmFt
ZXRlciA+IGZpcnN0IGlzIHZvaWQKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQg
Zm9yICcodm9pZCknIiwgInZvaWQiLCAiIik7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgIGRlbGV0ZSAkMy5wYXJhbS50eXBlOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKLSAgICAgICAgICAgICQkID0g
JDE7Ci0gICAgICAgICAgICAkMS0+YWRkUGFyYW1ldGVyKCQzLnBhcmFtKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICA7Ci0KLWZ1bmN0aW9uX2hlYWRlcgotICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5
cGUgSURFTlRJRklFUiBMRUZUX1BBUkVOIHsKLSAgICAgICAgaWYgKCQxLnF1YWxpZmllciAhPSBF
dnFHbG9iYWwgJiYgJDEucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewotICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAibm8gcXVhbGlmaWVycyBhbGxvd2VkIGZvciBm
dW5jdGlvbiByZXR1cm4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOwot
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgotICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQx
KSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIC8vIEFk
ZCB0aGUgZnVuY3Rpb24gYXMgYSBwcm90b3R5cGUgYWZ0ZXIgcGFyc2luZyBpdCAod2UgZG8gbm90
IHN1cHBvcnQgcmVjdXJzaW9uKQotICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uOwotICAgICAg
ICBUVHlwZSB0eXBlKCQxKTsKLSAgICAgICAgZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCQyLnN0
cmluZywgdHlwZSk7Ci0gICAgICAgICQkID0gZnVuY3Rpb247Ci0gICAgfQotICAgIDsKLQotcGFy
YW1ldGVyX2RlY2xhcmF0b3IKLSAgICAvLyBUeXBlICsgbmFtZQotICAgIDogdHlwZV9zcGVjaWZp
ZXIgSURFTlRJRklFUiB7Ci0gICAgICAgIGlmICgkMS50eXBlID09IEVidFZvaWQpIHsKLSAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgImlsbGVnYWwgdXNlIG9mIHR5cGUg
J3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Ci0gICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5yZXNl
cnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZykpCi0gICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHskMi5zdHJpbmcs
IG5ldyBUVHlwZSgkMSl9OwotICAgICAgICAkJC5saW5lID0gJDIubGluZTsKLSAgICAgICAgJCQu
cGFyYW0gPSBwYXJhbTsKLSAgICB9Ci0gICAgfCB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIExF
RlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewotICAgICAgICAv
LyBDaGVjayB0aGF0IHdlIGNhbiBtYWtlIGFuIGFycmF5IG91dCBvZiB0aGlzIHR5cGUKLSAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCi0g
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZykpCi0gICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpbnQgc2l6ZTsKLSAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMy5saW5lLCAkNCwgc2l6
ZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJDEuc2V0
QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0KLSAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoJDEp
OwotICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAkMi5zdHJpbmcsIHR5cGUgfTsKLSAgICAg
ICAgJCQubGluZSA9ICQyLmxpbmU7Ci0gICAgICAgICQkLnBhcmFtID0gcGFyYW07Ci0gICAgfQot
ICAgIDsKLQotcGFyYW1ldGVyX2RlY2xhcmF0aW9uCi0gICAgLy8KLSAgICAvLyBUaGUgb25seSBw
YXJhbWV0ZXIgcXVhbGlmaWVyIGEgcGFyYW1ldGVyIGNhbiBoYXZlIGFyZQotICAgIC8vIElOX1FV
QUwsIE9VVF9RVUFMLCBJTk9VVF9RVUFMLCBvciBDT05TVC4KLSAgICAvLwotCi0gICAgLy8KLSAg
ICAvLyBUeXBlICsgbmFtZQotICAgIC8vCi0gICAgOiB0eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJf
cXVhbGlmaWVyIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHsKLSAgICAgICAgJCQgPSAkMzsKLSAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCQzLmxpbmUsICQxLnF1YWxpZmll
ciwgJDIsICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgfQotICAgIHwgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRv
ciB7Ci0gICAgICAgICQkID0gJDI7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtZXRl
clNhbXBsZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxLCAqJDIucGFyYW0udHlwZSkpCi0gICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
cGFyYW1FcnJvckNoZWNrKCQyLmxpbmUsIEV2cVRlbXBvcmFyeSwgJDEsICQkLnBhcmFtLnR5cGUp
KQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQotICAgIC8vCi0g
ICAgLy8gT25seSB0eXBlCi0gICAgLy8KLSAgICB8IHR5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9x
dWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKLSAgICAgICAgJCQgPSAkMzsKLSAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCQzLmxpbmUsICQxLnF1YWxp
ZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgfQotICAgIHwgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9z
cGVjaWZpZXIgewotICAgICAgICAkJCA9ICQyOwotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5w
YXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSwgKiQyLnBhcmFtLnR5cGUpKQot
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPnBhcmFtRXJyb3JDaGVjaygkMi5saW5lLCBFdnFUZW1wb3JhcnksICQxLCAkJC5wYXJh
bS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgIH0KLSAg
ICA7Ci0KLXBhcmFtZXRlcl9xdWFsaWZpZXIKLSAgICA6IC8qIGVtcHR5ICovIHsKLSAgICAgICAg
JCQgPSBFdnFJbjsKLSAgICB9Ci0gICAgfCBJTl9RVUFMIHsKLSAgICAgICAgJCQgPSBFdnFJbjsK
LSAgICB9Ci0gICAgfCBPVVRfUVVBTCB7Ci0gICAgICAgICQkID0gRXZxT3V0OwotICAgIH0KLSAg
ICB8IElOT1VUX1FVQUwgewotICAgICAgICAkJCA9IEV2cUluT3V0OwotICAgIH0KLSAgICA7Ci0K
LXBhcmFtZXRlcl90eXBlX3NwZWNpZmllcgotICAgIDogdHlwZV9zcGVjaWZpZXIgewotICAgICAg
ICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoJDEpIH07Ci0gICAgICAgICQkLnBh
cmFtID0gcGFyYW07Ci0gICAgfQotICAgIDsKLQotaW5pdF9kZWNsYXJhdG9yX2xpc3QKLSAgICA6
IHNpbmdsZV9kZWNsYXJhdGlvbiB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoJCQudHlwZS5wcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAk
JC50eXBlLnByZWNpc2lvbiA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuZ2V0RGVmYXVsdFBy
ZWNpc2lvbigkMS50eXBlLnR5cGUpOwotICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cHJl
Y2lzaW9uRXJyb3JDaGVjaygkMS5saW5lLCAkJC50eXBlLnByZWNpc2lvbiwgJDEudHlwZS50eXBl
KSkgewotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEg
SURFTlRJRklFUiB7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMy5zdHJpbmcsIFRUeXBlKCQxLnR5cGUpLCAkMy5s
aW5lKSwgJDMubGluZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQkLnR5cGUpKQotICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkJC50eXBlKSkKLSAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChwYXJzZUNvbnRleHQt
Pm5vbkluaXRFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUpKQotICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgfQotICAgIHwgaW5pdF9kZWNsYXJh
dG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7Ci0g
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGlu
ZSwgJDEudHlwZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLQotICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICok
My5zdHJpbmcsICQxLnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
Ci0KLSAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5
cGVFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFs
aWZpZXJFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgJDEudHlwZS5zZXRB
cnJheSh0cnVlKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGluZSwgKiQzLnN0cmluZywg
JDEudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEg
SURFTlRJRklFUiBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VU
IHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygk
My5saW5lLCAkMS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwot
Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDMubGlu
ZSwgKiQzLnN0cmluZywgJDEudHlwZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKLQotICAgICAgICAkJCA9ICQxOwotCi0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFy
cmF5VHlwZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJh
eVF1YWxpZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkpCi0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6
ZTsKLSAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDQu
bGluZSwgJDUsIHNpemUpKQotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKLSAgICAgICAgICAg
IFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJh
eUVycm9yQ2hlY2soJDQubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQotICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgVFR5cGUg
dHlwZSA9IFRUeXBlKCQxLnR5cGUpOwotICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6
ZSk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDMuc3RyaW5nLCB0eXBlLCAkMy5saW5lKSwgJDMubGluZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVO
VElGSUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIEVRVUFMIGluaXRpYWxpemVyIHsKLSAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5l
LCAkMS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAg
ICAgICQkID0gJDE7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkg
fHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlw
ZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUsICQ3LT5nZXRUeXBlKCkuZ2V0QXJy
YXlTaXplKCkpOwotICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNr
KCQ0LmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJCQubGluZSwgIkdMXzNETF9hcnJheV9vYmpl
Y3RzIikpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgICAgIGlm
ICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDMubGluZSwgKiQzLnN0cmluZywg
JDEudHlwZSwgJDcsIGludGVybU5vZGUsIHZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlv
bgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCi0g
ICAgICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgJDYubGlu
ZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQk
LmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBj
b25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgRVFVQUwgaW5pdGlhbGl6ZXIgewotICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUs
ICQxLnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAg
ICAgJCQgPSAkMTsKLQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSB8
fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBl
KSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJy
YXlTaXplRXJyb3JDaGVjaygkNC5saW5lLCAkNSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUs
IHNpemUpOwotICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQ0
LmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJCQubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3Rz
IikpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgICAgIGlmICgh
cGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDMubGluZSwgKiQzLnN0cmluZywgJDEu
dHlwZSwgJDgsIGludGVybU5vZGUsIHZhcmlhYmxlKSkgewotICAgICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgot
ICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCi0gICAg
ICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgJDcubGluZSk7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dy
ZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQkLmlu
dGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
fCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVOVElGSUVSIEVRVUFMIGluaXRpYWxpemVy
IHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygk
My5saW5lLCAkMS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwot
Ci0gICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0g
ICAgICAgIGlmICghcGFyc2VDb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDMubGluZSwgKiQz
LnN0cmluZywgJDEudHlwZSwgJDUsIGludGVybU5vZGUpKSB7Ci0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQotICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmlu
dGVybU5vZGUsIGludGVybU5vZGUsICQ0LmxpbmUpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVybUFnZ3JlZ2F0ZTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICA7Ci0K
LXNpbmdsZV9kZWNsYXJhdGlvbgotICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgewotICAgICAg
ICAkJC50eXBlID0gJDE7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkU3ltYm9sKDAsICIiLCBUVHlwZSgkMSksICQxLmxpbmUpLCAkMS5saW5lKTsKLSAgICB9Ci0g
ICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIHsKLSAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEp
LCAkMi5saW5lKSwgJDIubGluZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQkLnR5cGUpKQotICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkJC50eXBlKSkKLSAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdEVy
cm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgJCQudHlwZSkpCi0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9Ci0gICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJ
REVOVElGSUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEp
LCAkMi5saW5lKSwgJDIubGluZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKLSAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbklu
aXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgJDEpKQotICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgJCQudHlwZSA9ICQxOwotCi0gICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDMubGluZSwgJDEpIHx8
IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxKSkKLSAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICQxLnNldEFycmF5KHRydWUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJs
ZTsKLSAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkMy5saW5l
LCAqJDIuc3RyaW5nLCAkMSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5
cGUgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFD
S0VUIHsKLSAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQxKTsKLSAgICAgICAgaW50IHNpemU7
Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDIubGluZSwg
JDQsIHNpemUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCB0eXBlLCAkMi5saW5lKSwgJDIubGlu
ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJF
cnJvckNoZWNrKCQyLmxpbmUsICQxKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2so
JDIubGluZSwgKiQyLnN0cmluZywgJDEpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7Ci0KLSAgICAgICAgJCQudHlwZSA9ICQxOwotCi0gICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDMubGluZSwgJDEpIHx8IHBhcnNlQ29udGV4dC0+YXJy
YXlRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxKSkKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwot
ICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMy5saW5l
LCAkNCwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0K
LSAgICAgICAgICAgICQxLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlh
YmxlKiB2YXJpYWJsZTsKLSAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JD
aGVjaygkMy5saW5lLCAqJDIuc3RyaW5nLCAkMSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgfQotICAgIHwgZnVsbHlf
c3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEpKQot
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgJCQudHlwZSA9
ICQxOwotCi0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIXBh
cnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCAk
NCwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRp
YXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgIC8vCi0gICAgICAgICAgICBpZihpbnRlcm1Ob2Rl
KQotICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9kZSwgJDMubGluZSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IElOVkFS
SUFOVCBJREVOVElGSUVSIHsKLSAgICAgICAgVkVSVEVYX09OTFkoImludmFyaWFudCBkZWNsYXJh
dGlvbiIsICQxLmxpbmUpOwotICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0OwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgIH0KLQotLy8KLS8v
IFBsYWNlIGhvbGRlciBmb3IgdGhlIHBhY2svdW5wYWNrIGxhbmd1YWdlcy4KLS8vCi0vLyAgICB8
IGJ1ZmZlcl9zcGVjaWZpZXIgewotLy8gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0v
LyAgICB9Ci0gICAgOwotCi0vLyBHcmFtbWFyIE5vdGU6ICBObyAnZW51bScsIG9yICd0eXBlZGVm
Jy4KLQotLy8KLS8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHBhY2svdW5wYWNrIGxhbmd1YWdlcy4K
LS8vCi0vLyV0eXBlIDxpbnRlcm0+IGJ1ZmZlcl9kZWNsYXJhdGlvbgotLy8ldHlwZSA8aW50ZXJt
LnR5cGU+IGJ1ZmZlcl9zcGVjaWZpZXIgaW5wdXRfb3Jfb3V0cHV0IGJ1ZmZlcl9kZWNsYXJhdGlv
bl9saXN0Ci0vL2J1ZmZlcl9zcGVjaWZpZXIKLS8vICAgIDogaW5wdXRfb3Jfb3V0cHV0IExFRlRf
QlJBQ0UgYnVmZmVyX2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgewotLy8gICAgfQotLy8g
ICAgOwotLy8KLS8vaW5wdXRfb3Jfb3V0cHV0Ci0vLyAgICA6IElOUFVUIHsKLS8vICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW5wdXQiKSkKLS8vICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0vLyAgICAgICAgVU5QQUNLX09OTFkoImlucHV0IiwgJDEu
bGluZSk7Ci0vLyAgICAgICAgJCQucXVhbGlmaWVyID0gRXZxSW5wdXQ7Ci0vLyAgICB9Ci0vLyAg
ICB8IE9VVFBVVCB7Ci0vLyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVj
aygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgIm91
dHB1dCIpKQotLy8gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLS8vICAgICAg
ICBQQUNLX09OTFkoIm91dHB1dCIsICQxLmxpbmUpOwotLy8gICAgICAgICQkLnF1YWxpZmllciA9
IEV2cU91dHB1dDsKLS8vICAgIH0KLS8vICAgIDsKLQotLy8KLS8vIFBsYWNlIGhvbGRlciBmb3Ig
dGhlIHBhY2svdW5wYWNrIGxhbmd1YWdlcy4KLS8vCi0vL2J1ZmZlcl9kZWNsYXJhdGlvbl9saXN0
Ci0vLyAgICA6IGJ1ZmZlcl9kZWNsYXJhdGlvbiB7Ci0vLyAgICB9Ci0vLyAgICB8IGJ1ZmZlcl9k
ZWNsYXJhdGlvbl9saXN0IGJ1ZmZlcl9kZWNsYXJhdGlvbiB7Ci0vLyAgICB9Ci0vLyAgICA7Ci0K
LS8vCi0vLyBJbnB1dC9vdXRwdXQgc2VtYW50aWNzOgotLy8gICBmbG9hdCBtdXN0IGJlIDE2IG9y
IDMyIGJpdHMKLS8vICAgZmxvYXQgYWxpZ25tZW50IHJlc3RyaWN0aW9ucz8KLS8vICAgY2hlY2sg
Zm9yIG9ubHkgb25lIGlucHV0IGFuZCBvbmx5IG9uZSBvdXRwdXQKLS8vICAgc3VtIG9mIGJpdGZp
ZWxkcyBoYXMgdG8gYmUgbXVsdGlwbGUgb2YgMzIKLS8vCi0KLS8vCi0vLyBQbGFjZSBob2xkZXIg
Zm9yIHRoZSBwYWNrL3VucGFjayBsYW5ndWFnZXMuCi0vLwotLy9idWZmZXJfZGVjbGFyYXRpb24K
LS8vICAgIDogdHlwZV9zcGVjaWZpZXIgSURFTlRJRklFUiBDT0xPTiBjb25zdGFudF9leHByZXNz
aW9uIFNFTUlDT0xPTiB7Ci0vLyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJv
ckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsIHBhcnNlQ29udGV4dCkpCi0vLyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotLy8gICAgICAgICQkLnZhcmlhYmxlID0gbmV3IFRW
YXJpYWJsZSgkMi5zdHJpbmcsICQxKTsKLS8vICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLmluc2VydCgqJCQudmFyaWFibGUpKSB7Ci0vLyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgInJlZGVmaW5pdGlvbiIsICQkLnZhcmlhYmxlLT5nZXROYW1l
KCkuY19zdHIoKSwgIiIpOwotLy8gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
LS8vICAgICAgICAgICAgLy8gZG9uJ3QgaGF2ZSB0byBkZWxldGUgJCQudmFyaWFibGUsIHRoZSBw
b29sIHBvcCB3aWxsIHRha2UgY2FyZSBvZiBpdAotLy8gICAgICAgIH0KLS8vICAgIH0KLS8vICAg
IDsKLQotZnVsbHlfc3BlY2lmaWVkX3R5cGUKLSAgICA6IHR5cGVfc3BlY2lmaWVyIHsKLSAgICAg
ICAgJCQgPSAkMTsKLQotICAgICAgICBpZiAoJDEuYXJyYXkpIHsKLSAgICAgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDEubGluZSwgIkdMXzNETF9hcnJheV9v
YmplY3RzIikpIHsKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICAgICAkMS5zZXRBcnJheShmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciAgewotICAgICAg
ICBpZiAoJDIuYXJyYXkgJiYgcGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQyLmxp
bmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoJDIuYXJyYXkgJiYgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9y
Q2hlY2soJDIubGluZSwgJDEpKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCi0gICAgICAgICAgICAoJDIudHlw
ZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAgICAgICAgICAg
ICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBn
ZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOwotICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgJCQgPSAkMjsKLSAgICAgICAg
JCQucXVhbGlmaWVyID0gJDEucXVhbGlmaWVyOwotICAgIH0KLSAgICA7Ci0KLXR5cGVfcXVhbGlm
aWVyCi0gICAgOiBDT05TVF9RVUFMIHsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZx
Q29uc3QsICQxLmxpbmUpOwotICAgIH0KLSAgICB8IEFUVFJJQlVURSB7Ci0gICAgICAgIFZFUlRF
WF9PTkxZKCJhdHRyaWJ1dGUiLCAkMS5saW5lKTsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgJDEubGlu
ZSk7Ci0gICAgfQotICAgIHwgVkFSWUlORyB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmds
b2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCksICJ2YXJ5aW5nIikpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgPT0gRVNoTGFuZ1ZlcnRleCkK
LSAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdPdXQsICQxLmxpbmUp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5
aW5nSW4sICQxLmxpbmUpOwotICAgIH0KLSAgICB8IElOVkFSSUFOVCBWQVJZSU5HIHsKLSAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCi0g
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+bGFuZ3VhZ2UgPT0gRVNoTGFuZ1ZlcnRleCkKLSAgICAgICAgICAgICQkLnNldEJhc2lj
KEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICQxLmxpbmUpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4s
ICQxLmxpbmUpOwotICAgIH0KLSAgICB8IFVOSUZPUk0gewotICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0sICQxLmxp
bmUpOwotICAgIH0KLSAgICA7Ci0KLXR5cGVfc3BlY2lmaWVyCi0gICAgOiB0eXBlX3NwZWNpZmll
cl9ub19wcmVjIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBwcmVjaXNpb25fcXVh
bGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgewotICAgICAgICAkJCA9ICQyOwotICAgICAg
ICAkJC5wcmVjaXNpb24gPSAkMTsKLSAgICB9Ci0gICAgOwotCi1wcmVjaXNpb25fcXVhbGlmaWVy
Ci0gICAgOiBISUdIX1BSRUNJU0lPTiB7Ci0gICAgICAgICQkID0gRWJwSGlnaDsKLSAgICB9Ci0g
ICAgfCBNRURJVU1fUFJFQ0lTSU9OIHsKLSAgICAgICAgJCQgPSBFYnBNZWRpdW07Ci0gICAgfQot
ICAgIHwgTE9XX1BSRUNJU0lPTiAgewotICAgICAgICAkJCA9IEVicExvdzsKLSAgICB9Ci0gICAg
OwotCi10eXBlX3NwZWNpZmllcl9ub19wcmVjCi0gICAgOiB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eSB7Ci0gICAgICAgICQkID0gJDE7Ci0gICAgfQotICAgIHwgdHlwZV9zcGVjaWZpZXJfbm9uYXJy
YXkgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAg
ICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JD
aGVjaygkMi5saW5lLCAkMSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDIubGluZSwgJDMsIHNpemUpKQotICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQuc2V0
QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgOwotCi10eXBlX3NwZWNp
Zmllcl9ub25hcnJheQotICAgIDogVk9JRF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsICQxLmxp
bmUpOwotICAgIH0KLSAgICB8IEZMT0FUX1RZUEUgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxp
bmUpOwotICAgIH0KLSAgICB8IElOVF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEubGluZSk7
Ci0gICAgfQotICAgIHwgQk9PTF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICQxLmxpbmUpOwot
ICAgIH0KLS8vICAgIHwgVU5TSUdORUQgSU5UX1RZUEUgewotLy8gICAgICAgIFBBQ0tfVU5QQUNL
X09OTFkoInVuc2lnbmVkIiwgJDEubGluZSk7Ci0vLyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7Ci0vLyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5l
KTsKLS8vICAgIH0KLSAgICB8IFZFQzIgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOwot
ICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIHwgVkVDMyB7Ci0gICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRG
bG9hdCwgcXVhbCwgJDEubGluZSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsKLSAgICB9
Ci0gICAgfCBWRUM0IHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0g
ICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKLSAgICAgICAgJCQu
c2V0QWdncmVnYXRlKDQpOwotICAgIH0KLSAgICB8IEJWRUMyIHsKLSAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWws
ICQxLmxpbmUpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7Ci0gICAgfQotICAgIHwgQlZF
QzMgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgJDEubGluZSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSgzKTsKLSAgICB9Ci0gICAgfCBCVkVDNCB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsK
LSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwotICAgIH0KLSAgICB8IElWRUMyIHsKLSAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVi
dEludCwgcXVhbCwgJDEubGluZSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKLSAgICB9
Ci0gICAgfCBJVkVDMyB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owot
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOwotICAgICAgICAkJC5z
ZXRBZ2dyZWdhdGUoMyk7Ci0gICAgfQotICAgIHwgSVZFQzQgewotICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAk
MS5saW5lKTsKLSAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwotICAgIH0KLSAgICB8IE1BVFJJ
WDIgewotICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0MiIsICQxLmxpbmUpOwotICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Rmxv
YXQsIHF1YWwsICQxLmxpbmUpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7Ci0g
ICAgfQotICAgIHwgTUFUUklYMyB7Ci0gICAgICAgIEZSQUdfVkVSVF9PTkxZKCJtYXQzIiwgJDEu
bGluZSk7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAk
JC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7Ci0gICAgICAgICQkLnNldEFnZ3Jl
Z2F0ZSgzLCB0cnVlKTsKLSAgICB9Ci0gICAgfCBNQVRSSVg0IHsKLSAgICAgICAgRlJBR19WRVJU
X09OTFkoIm1hdDQiLCAkMS5saW5lKTsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKLSAg
ICAgICAgJCQuc2V0QWdncmVnYXRlKDQsIHRydWUpOwotICAgIH0KLSAgICB8IFNBTVBMRVIyRCB7
Ci0gICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkQiLCAkMS5saW5lKTsKLSAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFNh
bXBsZXIyRCwgcXVhbCwgJDEubGluZSk7Ci0gICAgfQotICAgIHwgU0FNUExFUkNVQkUgewotICAg
ICAgICBGUkFHX1ZFUlRfT05MWSgic2FtcGxlckN1YmUiLCAkMS5saW5lKTsKLSAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBs
ZXJDdWJlLCBxdWFsLCAkMS5saW5lKTsKLSAgICB9Ci0gICAgfCBzdHJ1Y3Rfc3BlY2lmaWVyIHsK
LSAgICAgICAgRlJBR19WRVJUX09OTFkoInN0cnVjdCIsICQxLmxpbmUpOwotICAgICAgICAkJCA9
ICQxOwotICAgICAgICAkJC5xdWFsaWZpZXIgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICB9Ci0gICAgfCBU
WVBFX05BTUUgewotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VyIGRlZmlu
ZWQgdHlwZSBuYW1lcy4gIFRoZSBsZXhpY2FsIHBoYXNlIGxvb2tlZCB1cCB0aGUKLSAgICAgICAg
Ly8gdHlwZS4KLSAgICAgICAgLy8KLSAgICAgICAgVFR5cGUmIHN0cnVjdHVyZSA9IHN0YXRpY19j
YXN0PFRWYXJpYWJsZSo+KCQxLnN5bWJvbCktPmdldFR5cGUoKTsKLSAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgcXVh
bCwgJDEubGluZSk7Ci0gICAgICAgICQkLnVzZXJEZWYgPSAmc3RydWN0dXJlOwotICAgIH0KLSAg
ICA7Ci0KLXN0cnVjdF9zcGVjaWZpZXIKLSAgICA6IFNUUlVDVCBJREVOVElGSUVSIExFRlRfQlJB
Q0Ugc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgewotICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZykpCi0gICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVHlwZSogc3RydWN0
dXJlID0gbmV3IFRUeXBlKCQ0LCAqJDIuc3RyaW5nKTsKLSAgICAgICAgVFZhcmlhYmxlKiB1c2Vy
VHlwZURlZiA9IG5ldyBUVmFyaWFibGUoJDIuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKLSAg
ICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVm
KSkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0
aW9uIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7Ci0gICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1
Y3QsIEV2cVRlbXBvcmFyeSwgJDEubGluZSk7Ci0gICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1
cmU7Ci0gICAgfQotICAgIHwgU1RSVUNUIExFRlRfQlJBQ0Ugc3RydWN0X2RlY2xhcmF0aW9uX2xp
c3QgUklHSFRfQlJBQ0UgewotICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKCQz
LCBUU3RyaW5nKCIiKSk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9y
YXJ5LCAkMS5saW5lKTsKLSAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAgICB9Ci0g
ICAgOwotCi1zdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAotICAgIDogc3RydWN0X2RlY2xhcmF0aW9u
IHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlz
dCBzdHJ1Y3RfZGVjbGFyYXRpb24gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8ICQyLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAkJC0+c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAg
ICAgICBpZiAoKCokJClbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKCokMilbaV0udHlwZS0+
Z2V0RmllbGROYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJv
cigoKiQyKVtpXS5saW5lLCAiZHVwbGljYXRlIGZpZWxkIG5hbWUgaW4gc3RydWN0dXJlOiIsICJz
dHJ1Y3QiLCAoKiQyKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgJCQtPnB1c2hfYmFjaygoKiQyKVtpXSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgOwotCi1zdHJ1Y3RfZGVjbGFyYXRpb24KLSAgICA6IHR5cGVfc3Bl
Y2lmaWVyIHN0cnVjdF9kZWNsYXJhdG9yX2xpc3QgU0VNSUNPTE9OIHsKLSAgICAgICAgJCQgPSAk
MjsKLQotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT52b2lkRXJyb3JDaGVjaygkMS5saW5lLCAo
KiQyKVswXS50eXBlLT5nZXRGaWVsZE5hbWUoKSwgJDEpKSB7Ci0gICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8ICQkLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
IC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUs
IGxpa2UgYXJyYXktbmVzcwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0eXBl
ID0gKCokJClbaV0udHlwZTsKLSAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBl
KTsKLSAgICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCQxLnNpemUpOwotICAgICAgICAg
ICAgdHlwZS0+c2V0TWF0cml4KCQxLm1hdHJpeCk7Ci0KLSAgICAgICAgICAgIC8vIGRvbid0IGFs
bG93IGFycmF5cyBvZiBhcnJheXMKLSAgICAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQx
LmxpbmUsICQxKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoJDEuYXJyYXkpCi0gICAgICAgICAgICAg
ICAgdHlwZS0+c2V0QXJyYXlTaXplKCQxLmFycmF5U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoJDEu
dXNlckRlZikgewotICAgICAgICAgICAgICAgIHR5cGUtPnNldFN0cnVjdCgkMS51c2VyRGVmLT5n
ZXRTdHJ1Y3QoKSk7Ci0gICAgICAgICAgICAgICAgdHlwZS0+c2V0VHlwZU5hbWUoJDEudXNlckRl
Zi0+Z2V0VHlwZU5hbWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
OwotCi1zdHJ1Y3RfZGVjbGFyYXRvcl9saXN0Ci0gICAgOiBzdHJ1Y3RfZGVjbGFyYXRvciB7Ci0g
ICAgICAgICQkID0gTmV3UG9vbFRUeXBlTGlzdCgpOwotICAgICAgICAkJC0+cHVzaF9iYWNrKCQx
KTsKLSAgICB9Ci0gICAgfCBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IENPTU1BIHN0cnVjdF9kZWNs
YXJhdG9yIHsKLSAgICAgICAgJCQtPnB1c2hfYmFjaygkMyk7Ci0gICAgfQotICAgIDsKLQotc3Ry
dWN0X2RlY2xhcmF0b3IKLSAgICA6IElERU5USUZJRVIgewotICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDEubGluZSwgKiQxLnN0cmluZykpCi0gICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAkJC50eXBlID0gbmV3IFRUeXBl
KEVidFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICQkLmxpbmUgPSAkMS5saW5lOwotICAg
ICAgICAkJC50eXBlLT5zZXRGaWVsZE5hbWUoKiQxLnN0cmluZyk7Ci0gICAgfQotICAgIHwgSURF
TlRJRklFUiBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsK
LSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUsICok
MS5zdHJpbmcpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAg
ICAgJCQudHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwotICAgICAgICAk
JC5saW5lID0gJDEubGluZTsKLSAgICAgICAgJCQudHlwZS0+c2V0RmllbGROYW1lKCokMS5zdHJp
bmcpOwotCi0gICAgICAgIGludCBzaXplOwotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJh
eVNpemVFcnJvckNoZWNrKCQyLmxpbmUsICQzLCBzaXplKSkKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJC50eXBlLT5zZXRBcnJheVNpemUoc2l6ZSk7Ci0g
ICAgfQotICAgIDsKLQotaW5pdGlhbGl6ZXIKLSAgICA6IGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7
ICQkID0gJDE7IH0KLSAgICA7Ci0KLWRlY2xhcmF0aW9uX3N0YXRlbWVudAotICAgIDogZGVjbGFy
YXRpb24geyAkJCA9ICQxOyB9Ci0gICAgOwotCi1zdGF0ZW1lbnQKLSAgICA6IGNvbXBvdW5kX3N0
YXRlbWVudCAgeyAkJCA9ICQxOyB9Ci0gICAgfCBzaW1wbGVfc3RhdGVtZW50ICAgIHsgJCQgPSAk
MTsgfQotICAgIDsKLQotLy8gR3JhbW1hciBOb3RlOiAgTm8gbGFiZWxlZCBzdGF0ZW1lbnRzOyAn
Z290bycgaXMgbm90IHN1cHBvcnRlZC4KLQotc2ltcGxlX3N0YXRlbWVudAotICAgIDogZGVjbGFy
YXRpb25fc3RhdGVtZW50IHsgJCQgPSAkMTsgfQotICAgIHwgZXhwcmVzc2lvbl9zdGF0ZW1lbnQg
IHsgJCQgPSAkMTsgfQotICAgIHwgc2VsZWN0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQot
ICAgIHwgaXRlcmF0aW9uX3N0YXRlbWVudCAgIHsgJCQgPSAkMTsgfQotICAgIHwganVtcF9zdGF0
ZW1lbnQgICAgICAgIHsgJCQgPSAkMTsgfQotICAgIDsKLQotY29tcG91bmRfc3RhdGVtZW50Ci0g
ICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsgJCQgPSAwOyB9Ci0gICAgfCBMRUZUX0JSQUNF
IHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0gc3RhdGVtZW50X2xpc3QgeyBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyB9IFJJR0hUX0JSQUNFIHsKLSAgICAgICAg
aWYgKCQzICE9IDApCi0gICAgICAgICAgICAkMy0+c2V0T3AoRU9wU2VxdWVuY2UpOwotICAgICAg
ICAkJCA9ICQzOwotICAgIH0KLSAgICA7Ci0KLXN0YXRlbWVudF9ub19uZXdfc2NvcGUKLSAgICA6
IGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUgeyAkJCA9ICQxOyB9Ci0gICAgfCBzaW1w
bGVfc3RhdGVtZW50ICAgICAgICAgICAgICAgIHsgJCQgPSAkMTsgfQotICAgIDsKLQotY29tcG91
bmRfc3RhdGVtZW50X25vX25ld19zY29wZQotICAgIC8vIFN0YXRlbWVudCB0aGF0IGRvZXNuJ3Qg
Y3JlYXRlIGEgbmV3IHNjb3BlLCBmb3Igc2VsZWN0aW9uX3N0YXRlbWVudCwgaXRlcmF0aW9uX3N0
YXRlbWVudAotICAgIDogTEVGVF9CUkFDRSBSSUdIVF9CUkFDRSB7Ci0gICAgICAgICQkID0gMDsK
LSAgICB9Ci0gICAgfCBMRUZUX0JSQUNFIHN0YXRlbWVudF9saXN0IFJJR0hUX0JSQUNFIHsKLSAg
ICAgICAgaWYgKCQyKQotICAgICAgICAgICAgJDItPnNldE9wKEVPcFNlcXVlbmNlKTsKLSAgICAg
ICAgJCQgPSAkMjsKLSAgICB9Ci0gICAgOwotCi1zdGF0ZW1lbnRfbGlzdAotICAgIDogc3RhdGVt
ZW50IHsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVn
YXRlKCQxLCAwKTsKLSAgICB9Ci0gICAgfCBzdGF0ZW1lbnRfbGlzdCBzdGF0ZW1lbnQgewotICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQy
LCAwKTsKLSAgICB9Ci0gICAgOwotCi1leHByZXNzaW9uX3N0YXRlbWVudAotICAgIDogU0VNSUNP
TE9OICB7ICQkID0gMDsgfQotICAgIHwgZXhwcmVzc2lvbiBTRU1JQ09MT04gIHsgJCQgPSBzdGF0
aWNfY2FzdDxUSW50ZXJtTm9kZSo+KCQxKTsgfQotICAgIDsKLQotc2VsZWN0aW9uX3N0YXRlbWVu
dAotICAgIDogSUYgTEVGVF9QQVJFTiBleHByZXNzaW9uIFJJR0hUX1BBUkVOIHNlbGVjdGlvbl9y
ZXN0X3N0YXRlbWVudCB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNr
KCQxLmxpbmUsICQzKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMywgJDUs
ICQxLmxpbmUpOwotICAgIH0KLSAgICA7Ci0KLXNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudAotICAg
IDogc3RhdGVtZW50IEVMU0Ugc3RhdGVtZW50IHsKLSAgICAgICAgJCQubm9kZTEgPSAkMTsKLSAg
ICAgICAgJCQubm9kZTIgPSAkMzsKLSAgICB9Ci0gICAgfCBzdGF0ZW1lbnQgewotICAgICAgICAk
JC5ub2RlMSA9ICQxOwotICAgICAgICAkJC5ub2RlMiA9IDA7Ci0gICAgfQotICAgIDsKLQotLy8g
R3JhbW1hciBOb3RlOiAgTm8gJ3N3aXRjaCcuICBTd2l0Y2ggc3RhdGVtZW50cyBub3Qgc3VwcG9y
dGVkLgotCi1jb25kaXRpb24KLSAgICAvLyBJbiAxOTk2IGMrKyBkcmFmdCwgY29uZGl0aW9ucyBj
YW4gaW5jbHVkZSBzaW5nbGUgZGVjbGFyYXRpb25zCi0gICAgOiBleHByZXNzaW9uIHsKLSAgICAg
ICAgJCQgPSAkMTsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDEt
PmdldExpbmUoKSwgJDEpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgfQotICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBFUVVBTCBpbml0aWFs
aXplciB7Ci0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKLSAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAocGFyc2VDb250ZXh0
LT5ib29sRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoIXBhcnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRpYWxp
emVyKCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCAkNCwgaW50ZXJtTm9kZSkpCi0gICAgICAgICAg
ICAkJCA9ICQ0OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAgICAgJCQgPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIDsKLQot
aXRlcmF0aW9uX3N0YXRlbWVudAotICAgIDogV0hJTEUgTEVGVF9QQVJFTiB7IHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK3BhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsg
fSBjb25kaXRpb24gUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7Ci0gICAgICAg
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Ci0gICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgwLCAkNiwgJDQsIDAsIHRydWUsICQxLmxpbmUpOwot
ICAgICAgICAtLXBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICB9Ci0gICAgfCBE
TyB7ICsrcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IHN0YXRlbWVudCBXSElMRSBM
RUZUX1BBUkVOIGV4cHJlc3Npb24gUklHSFRfUEFSRU4gU0VNSUNPTE9OIHsKLSAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDgubGluZSwgJDYpKQotICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRMb29wKDAsICQzLCAkNiwgMCwgZmFsc2UsICQ0LmxpbmUpOwotICAgICAg
ICAtLXBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKLSAgICB9Ci0gICAgfCBGT1IgTEVG
VF9QQVJFTiB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK3BhcnNlQ29udGV4
dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBmb3JfaW5pdF9zdGF0ZW1lbnQgZm9yX3Jlc3Rfc3RhdGVt
ZW50IFJJR0hUX1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgewotICAgICAgICBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZExvb3AoJDQsICQ3LCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+
KCQ1Lm5vZGUxKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigkNS5ub2RlMiksIHRy
dWUsICQxLmxpbmUpOwotICAgICAgICAtLXBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsK
LSAgICB9Ci0gICAgOwotCi1mb3JfaW5pdF9zdGF0ZW1lbnQKLSAgICA6IGV4cHJlc3Npb25fc3Rh
dGVtZW50IHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCBkZWNsYXJhdGlvbl9zdGF0
ZW1lbnQgewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICA7Ci0KLWNvbmRpdGlvbm9wdAot
ICAgIDogY29uZGl0aW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgfCAvKiBNYXkg
YmUgbnVsbCAqLyB7Ci0gICAgICAgICQkID0gMDsKLSAgICB9Ci0gICAgOwotCi1mb3JfcmVzdF9z
dGF0ZW1lbnQKLSAgICA6IGNvbmRpdGlvbm9wdCBTRU1JQ09MT04gewotICAgICAgICAkJC5ub2Rl
MSA9ICQxOwotICAgICAgICAkJC5ub2RlMiA9IDA7Ci0gICAgfQotICAgIHwgY29uZGl0aW9ub3B0
IFNFTUlDT0xPTiBleHByZXNzaW9uICB7Ci0gICAgICAgICQkLm5vZGUxID0gJDE7Ci0gICAgICAg
ICQkLm5vZGUyID0gJDM7Ci0gICAgfQotICAgIDsKLQotanVtcF9zdGF0ZW1lbnQKLSAgICA6IENP
TlRJTlVFIFNFTUlDT0xPTiB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5n
TGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
Y29udGludWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7Ci0gICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAkJCA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BDb250aW51ZSwgJDEubGlu
ZSk7Ci0gICAgfQotICAgIHwgQlJFQUsgU0VNSUNPTE9OIHsKLSAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwg
IiIsICIiKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9
Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJy
ZWFrLCAkMS5saW5lKTsKLSAgICB9Ci0gICAgfCBSRVRVUk4gU0VNSUNPTE9OIHsKLSAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAkMS5s
aW5lKTsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJv
cigkMS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1
cm4iLCAiIik7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICB8IFJFVFVSTiBleHByZXNzaW9uIFNFTUlDT0xPTiB7Ci0gICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDIsICQx
LmxpbmUpOwotICAgICAgICBwYXJzZUNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlID0gdHJ1
ZTsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigk
MS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiLCAicmV0dXJuIiwg
IiIpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoKihwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICQyLT5nZXRUeXBl
KCkpIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9u
IHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOwotICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgfCBESVND
QVJEIFNFTUlDT0xPTiB7Ci0gICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICQxLmxpbmUpOwot
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxs
LCAkMS5saW5lKTsKLSAgICB9Ci0gICAgOwotCi0vLyBHcmFtbWFyIE5vdGU6ICBObyAnZ290bycu
ICBHb3RvcyBhcmUgbm90IHN1cHBvcnRlZC4KLQotdHJhbnNsYXRpb25fdW5pdAotICAgIDogZXh0
ZXJuYWxfZGVjbGFyYXRpb24gewotICAgICAgICAkJCA9ICQxOwotICAgICAgICBwYXJzZUNvbnRl
eHQtPnRyZWVSb290ID0gJCQ7Ci0gICAgfQotICAgIHwgdHJhbnNsYXRpb25fdW5pdCBleHRlcm5h
bF9kZWNsYXJhdGlvbiB7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZSgkMSwgJDIsIDApOwotICAgICAgICBwYXJzZUNvbnRleHQtPnRyZWVSb290
ID0gJCQ7Ci0gICAgfQotICAgIDsKLQotZXh0ZXJuYWxfZGVjbGFyYXRpb24KLSAgICA6IGZ1bmN0
aW9uX2RlZmluaXRpb24gewotICAgICAgICAkJCA9ICQxOwotICAgIH0KLSAgICB8IGRlY2xhcmF0
aW9uIHsKLSAgICAgICAgJCQgPSAkMTsKLSAgICB9Ci0gICAgOwotCi1mdW5jdGlvbl9kZWZpbml0
aW9uCi0gICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgewotICAgICAgICBURnVuY3Rpb24mIGZ1bmN0
aW9uID0gKigkMS5mdW5jdGlvbik7Ci0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRp
Y19jYXN0PFRGdW5jdGlvbio+KHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlv
bi5nZXRNYW5nbGVkTmFtZSgpKSk7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIE5vdGU6ICAncHJl
dkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3Zl
IHNlZW4gZnVuY3Rpb24KLSAgICAgICAgLy8gYXMgaXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0
IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAKLSAgICAg
ICAgLy8gYW4gZWFybGllciBvY2N1cmFuY2UuCi0gICAgICAgIC8vCi0gICAgICAgIGlmIChwcmV2
RGVjLT5pc0RlZmluZWQoKSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZW4g
dGhpcyBmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkuCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMg
YSBib2R5IiwgZnVuY3Rpb24uZ2V0TmFtZSgpLmNfc3RyKCksICIiKTsKLSAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIHByZXZEZWMtPnNldERl
ZmluZWQoKTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBSYWlzZSBlcnJvciBtZXNzYWdlIGlm
IG1haW4gZnVuY3Rpb24gdGFrZXMgYW55IHBhcmFtZXRlcnMgb3IgcmV0dXJuIGFueXRoaW5nIG90
aGVyIHRoYW4gdm9pZAotICAgICAgICAvLwotICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0TmFtZSgp
ID09ICJtYWluIikgewotICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSA+
IDApIHsKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5j
dGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24uZ2V0TmFtZSgpLmNf
c3RyKCksICIiKTsKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkuZ2V0
QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoJDEubGluZSwgIiIsIGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmlu
ZygpLCAibWFpbiBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiKTsKLSAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIE5ldyBzeW1ib2wgdGFibGUgc2NvcGUgZm9yIGJvZHkg
b2YgZnVuY3Rpb24gcGx1cyBpdHMgYXJndW1lbnRzCi0gICAgICAgIC8vCi0gICAgICAgIHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJl
bWVtYmVyIHRoZSByZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hlY2tpbmcgZm9yIFJFVFVSTiBzdGF0
ZW1lbnRzLgotICAgICAgICAvLwotICAgICAgICBwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlv
blR5cGUgPSAmKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSk7Ci0gICAgICAgIHBhcnNlQ29udGV4
dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSBmYWxzZTsKLQotICAgICAgICAvLwotICAgICAgICAv
LyBJbnNlcnQgcGFyYW1ldGVycyBpbnRvIHRoZSBzeW1ib2wgdGFibGUuCi0gICAgICAgIC8vIElm
IHRoZSBwYXJhbWV0ZXIgaGFzIG5vIG5hbWUsIGl0J3Mgbm90IGFuIGVycm9yLCBqdXN0IGRvbid0
IGluc2VydCBpdAotICAgICAgICAvLyAoY291bGQgYmUgdXNlZCBmb3IgdW51c2VkIGFyZ3MpLgot
ICAgICAgICAvLwotICAgICAgICAvLyBBbHNvLCBhY2N1bXVsYXRlIHRoZSBsaXN0IG9mIHBhcmFt
ZXRlcnMgaW50byB0aGUgSElMLCBzbyBsb3dlciBsZXZlbCBjb2RlCi0gICAgICAgIC8vIGtub3dz
IHdoZXJlIHRvIGZpbmQgcGFyYW1ldGVycy4KLSAgICAgICAgLy8KLSAgICAgICAgVEludGVybUFn
Z3JlZ2F0ZSogcGFyYW1Ob2RlcyA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgaSsrKSB7Ci0gICAgICAg
ICAgICBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uW2ldOwotICAgICAgICAgICAgaWYgKHBh
cmFtLm5hbWUgIT0gMCkgewotICAgICAgICAgICAgICAgIFRWYXJpYWJsZSAqdmFyaWFibGUgPSBu
ZXcgVFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKLSAgICAgICAgICAgICAgICAv
LwotICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4g
dGhlIHN5bWJvbCB0YWJsZS4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGlm
ICghIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAicmVkZWZpbml0aW9u
IiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7Ci0gICAgICAgICAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFy
aWFibGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAgICAgLy8gVHJhbnNmZXIgb3duZXJzaGlwIG9mIG5hbWUgcG9pbnRlciB0byBzeW1ib2wgdGFi
bGUuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBwYXJhbS5uYW1lID0gMDsK
LQotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0
ZXIgdG8gdGhlIEhJTAotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgcGFyYW1O
b2RlcyA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5
cGUoKSwgJDEubGluZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICQxLmxpbmUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBw
YXJhbU5vZGVzID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJh
bU5vZGVzLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJh
bS50eXBlLCAkMS5saW5lKSwgJDEubGluZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IocGFy
YW1Ob2RlcywgRU9wUGFyYW1ldGVycywgJDEubGluZSk7Ci0gICAgICAgICQxLmludGVybUFnZ3Jl
Z2F0ZSA9IHBhcmFtTm9kZXM7Ci0gICAgICAgIHBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bCA9IDA7Ci0gICAgfQotICAgIGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUgewotICAg
ICAgICAvLz8/IENoZWNrIHRoYXQgYWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVybiB0
eXBlICE9IHZvaWQgPwotICAgICAgICAvLyAgIE1heSBiZSBiZXN0IGRvbmUgYXMgcG9zdCBwcm9j
ZXNzIHBoYXNlIG9uIGludGVybWVkaWF0ZSBjb2RlCi0gICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBwYXJz
ZUNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAi
IiwgJDEuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUucG9wKCk7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jv
d0FnZ3JlZ2F0ZSgkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLCAwKTsKLSAgICAgICAgcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoJCQsIEVPcEZ1bmN0aW9uLCAk
MS5saW5lKTsKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoJDEuZnVuY3Rp
b24tPmdldE1hbmdsZWROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXRUeXBlKCQxLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkpOwotCi0gICAgICAgIC8v
IHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQg
b3RoZXIgdmVuZG9yIHNwZWNpZmljCi0gICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9y
bWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRyZWUKLSAgICAgICAgJCQtPmdl
dEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKHBhcnNlQ29udGV4dC0+Y29udGV4dFByYWdtYS5v
cHRpbWl6ZSk7Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1ZyhwYXJzZUNv
bnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcpOwotICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUo
KS0+YWRkVG9QcmFnbWFUYWJsZShwYXJzZUNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21hVGFi
bGUpOwotICAgIH0KLSAgICA7Ci0KLSUlCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJt
T3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAko
cmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw0MTcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1
ZGUgImNvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgiCi0KLS8vCi0vLyBUd28gcHVycG9zZXM6
Ci0vLyAxLiAgU2hvdyBhbiBleGFtcGxlIG9mIGhvdyB0byBpdGVyYXRlIHRyZWUuICBGdW5jdGlv
bnMgY2FuCi0vLyAgICAgYWxzbyBkaXJlY3RseSBjYWxsIFRyYXZlcnNlKCkgb24gY2hpbGRyZW4g
dGhlbXNlbHZlcyB0bwotLy8gICAgIGhhdmUgZmluZXIgZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhl
IHByb2Nlc3MgdGhhbiBzaG93biBoZXJlLgotLy8gICAgIFNlZSB0aGUgbGFzdCBmdW5jdGlvbiBm
b3IgaG93IHRvIGdldCBzdGFydGVkLgotLy8gMi4gIFByaW50IG91dCBhIHRleHQgYmFzZWQgZGVz
Y3JpcHRpb24gb2YgdGhlIHRyZWUuCi0vLwotCi0vLwotLy8gVXNlIHRoaXMgY2xhc3MgdG8gY2Fy
cnkgYWxvbmcgZGF0YSBmcm9tIG5vZGUgdG8gbm9kZSBpbgotLy8gdGhlIHRyYXZlcnNhbAotLy8K
LWNsYXNzIFRPdXRwdXRUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJs
aWM6Ci0gICAgVE91dHB1dFRyYXZlcnNlcihUSW5mb1NpbmsmIGkpIDogaW5mb1NpbmsoaSkgeyB9
Ci0gICAgVEluZm9TaW5rJiBpbmZvU2luazsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdmlzaXRT
eW1ib2woVEludGVybVN5bWJvbCopOwotICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRl
cm1Db25zdGFudFVuaW9uKik7Ci0gICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVElu
dGVybUJpbmFyeSopOwotICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVu
YXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVj
dGlvbiopOwotICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUqKTsKLSAgICBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKTsK
LSAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKik7Ci19Owot
Ci1UU3RyaW5nIFRUeXBlOjpnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0Ci17Ci0gICAgVFN0cmlu
Z1N0cmVhbSBzdHJlYW07Ci0KLSAgICBpZiAocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSAmJiBx
dWFsaWZpZXIgIT0gRXZxR2xvYmFsKQotICAgICAgICBzdHJlYW0gPDwgZ2V0UXVhbGlmaWVyU3Ry
aW5nKCkgPDwgIiAiIDw8IGdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIjsKLSAgICBpZiAoYXJy
YXkpCi0gICAgICAgIHN0cmVhbSA8PCAiYXJyYXkgb2YgIjsKLSAgICBpZiAobWF0cml4KQotICAg
ICAgICBzdHJlYW0gPDwgc2l6ZSA8PCAiWCIgPDwgc2l6ZSA8PCAiIG1hdHJpeCBvZiAiOwotICAg
IGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgICBzdHJlYW0gPDwgc2l6ZSA8PCAiLWNvbXBvbmVu
dCB2ZWN0b3Igb2YgIjsKLQotICAgIHN0cmVhbSA8PCBnZXRCYXNpY1N0cmluZygpOwotICAgIHJl
dHVybiBzdHJlYW0uc3RyKCk7Ci19Ci0KLS8vCi0vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBwcmlu
dGluZywgbm90IHBhcnQgb2YgdHJhdmVyc2luZy4KLS8vCi0KLXZvaWQgT3V0cHV0VHJlZVRleHQo
VEluZm9TaW5rJiBpbmZvU2luaywgVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IGludCBkZXB0aCkK
LXsKLSAgICBpbnQgaTsKLQotICAgIGluZm9TaW5rLmRlYnVnLmxvY2F0aW9uKG5vZGUtPmdldExp
bmUoKSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgaW5mb1Np
bmsuZGVidWcgPDwgIiAgIjsKLX0KLQotLy8KLS8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0
aGUgdHJhdmVyc2FsIGZ1bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQotLy8gaXMgdGhlIG9uZSB0aGF0
IHN0YXJ0cyB0aGUgdHJhdmVyc2FsLgotLy8KLS8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJpb3Ig
bm9kZXMgdG8gaGF2ZSB0aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCi0vLyBjb250aW51ZSBvbiB0byBj
aGlsZHJlbi4gIElmIHlvdSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAotLy8gcmV0dXJuIGZh
bHNlLgotLy8KLQotdm9pZCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sKiBub2RlKQotewotICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7
Ci0KLSAgICBpbmZvU2luay5kZWJ1ZyA8PCAiJyIgPDwgbm9kZS0+Z2V0U3ltYm9sKCkgPDwgIicg
IjsKLSAgICBpbmZvU2luay5kZWJ1ZyA8PCAiKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmco
KSA8PCAiKVxuIjsKLX0KLQotYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNp
dCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmsmIG91dCA9IGlu
Zm9TaW5rOwotCi0gICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBz
d2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAg
ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAibW92ZSBzZWNvbmQgY2hpbGQgdG8gZmlyc3QgY2hpbGQi
OyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZTogICAgICAgICAg
ICAgICBvdXQuZGVidWcgPDwgImluaXRpYWxpemUgZmlyc3QgY2hpbGQgd2l0aCBzZWNvbmQgY2hp
bGQiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogICAgICAgICAgICAgICAg
b3V0LmRlYnVnIDw8ICJhZGQgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAic3VidHJhY3Qgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAgICAgICAgICAgICAgICBvdXQuZGVidWcg
PDwgIm11bHRpcGx5IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOiAgb3V0LmRlYnVnIDw8ICJt
YXRyaXggbXVsdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogIG91dC5kZWJ1ZyA8PCAidmVjdG9y
IHNjYWxlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246ICBvdXQuZGVidWcgPDwgIm1hdHJpeCBzY2Fs
ZSBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVP
cE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOiAgb3V0LmRlYnVnIDw8ICJtYXRyaXggbXVsdCBzZWNv
bmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdkFz
c2lnbjogICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkaXZpZGUgc2Vjb25kIGNoaWxkIGlu
dG8gZmlyc3QgY2hpbGQiOyAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BJbmRleERpcmVj
dDogICBvdXQuZGVidWcgPDwgImRpcmVjdCBpbmRleCI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wSW5kZXhJbmRpcmVjdDogb3V0LmRlYnVnIDw8ICJpbmRpcmVjdCBpbmRleCI7IGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OiAgIG91dC5kZWJ1ZyA8PCAiZGlyZWN0
IGluZGV4IGZvciBzdHJ1Y3R1cmUiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3RvclN3
aXp6bGU6IG91dC5kZWJ1ZyA8PCAidmVjdG9yIHN3aXp6bGUiOyBicmVhazsKLQotICAgICAgICBj
YXNlIEVPcEFkZDogICAgb3V0LmRlYnVnIDw8ICJhZGQiOyAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcFN1YjogICAgb3V0LmRlYnVnIDw8ICJzdWJ0cmFjdCI7ICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE11bDogICAgb3V0LmRlYnVnIDw8
ICJjb21wb25lbnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdjog
ICAgb3V0LmRlYnVnIDw8ICJkaXZpZGUiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcEVxdWFsOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBFcXVhbCI7
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogICAgICAg
ICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTm90IEVxdWFsIjsgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIExl
c3MgVGhhbiI7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFu
OiAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXQuZGVidWcgPDwgIkNvbXBh
cmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wR3JlYXRl
clRoYW5FcXVhbDogb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6IG91dC5kZWJ1ZyA8
PCAidmVjdG9yLXNjYWxlIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNNYXRyaXg6IG91dC5kZWJ1ZyA8PCAidmVjdG9yLXRpbWVzLW1hdHJpeCI7ICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6IG91dC5kZWJ1ZyA8PCAibWF0cml4
LXRpbWVzLXZlY3RvciI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2Fs
YXI6IG91dC5kZWJ1ZyA8PCAibWF0cml4LXNjYWxlIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6IG91dC5kZWJ1ZyA8PCAibWF0cml4LW11bHRpcGx5
IjsgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6ICBvdXQuZGVidWcg
PDwgImxvZ2ljYWwtb3IiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IG91
dC5kZWJ1ZyA8PCAibG9naWNhbC14b3IiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2Fs
QW5kOiBvdXQuZGVidWcgPDwgImxvZ2ljYWwtYW5kIjsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
IG91dC5kZWJ1ZyA8PCAiPHVua25vd24gb3A+IjsKLSAgICB9Ci0KLSAgICBvdXQuZGVidWcgPDwg
IiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKLQotICAgIG91dC5kZWJ1
ZyA8PCAiXG4iOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVE91dHB1dFRyYXZlcnNl
cjo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIFRJ
bmZvU2luayYgb3V0ID0gaW5mb1Npbms7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUs
IGRlcHRoKTsKLQotICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNlIEVP
cE5lZ2F0aXZlOiAgICAgICBvdXQuZGVidWcgPDwgIk5lZ2F0ZSB2YWx1ZSI7ICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDoKLSAgICAgICAgY2FzZSBFT3BM
b2dpY2FsTm90OiAgICAgb3V0LmRlYnVnIDw8ICJOZWdhdGUgY29uZGl0aW9uYWwiOyAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogIG91dC5kZWJ1ZyA8PCAiUG9zdC1J
bmNyZW1lbnQiOyAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAg
b3V0LmRlYnVnIDw8ICJQb3N0LURlY3JlbWVudCI7ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcFByZUluY3JlbWVudDogICBvdXQuZGVidWcgPDwgIlByZS1JbmNyZW1lbnQiOyAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgIG91dC5kZWJ1ZyA8PCAiUHJl
LURlY3JlbWVudCI7ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jv
b2w6ICBvdXQuZGVidWcgPDwgIkNvbnZlcnQgaW50IHRvIGJvb2wiOyAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOm91dC5kZWJ1ZyA8PCAiQ29udmVydCBmbG9hdCB0byBi
b29sIjticmVhazsKLSAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0LmRlYnVnIDw8
ICJDb252ZXJ0IGJvb2wgdG8gZmxvYXQiO2JyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnZJbnRU
b0Zsb2F0OiBvdXQuZGVidWcgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6IG91dC5kZWJ1ZyA8PCAiQ29udmVydCBmbG9hdCB0
byBpbnQiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0LmRlYnVn
IDw8ICJDb252ZXJ0IGJvb2wgdG8gaW50IjsgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wUmFk
aWFuczogICAgICAgIG91dC5kZWJ1ZyA8PCAicmFkaWFucyI7ICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAgb3V0LmRlYnVnIDw8ICJkZWdyZWVzIjsg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFNpbjogICAgICAgICAgICBvdXQu
ZGVidWcgPDwgInNpbmUiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
Q29zOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY29zaW5lIjsgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJ0YW5nZW50
IjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFzaW46ICAgICAgICAgICBv
dXQuZGVidWcgPDwgImFyYyBzaW5lIjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wQWNvczogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYXJjIGNvc2luZSI7ICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMg
dGFuZ2VudCI7ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAg
ICAgIG91dC5kZWJ1ZyA8PCAiZXhwIjsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BMb2c6ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJsb2ciOyAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAgICBvdXQuZGVidWcgPDwg
ImV4cDIiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9nMjogICAg
ICAgICAgIG91dC5kZWJ1ZyA8PCAibG9nMiI7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BTcXJ0OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJzcXJ0IjsgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiAgICBvdXQuZGVidWcg
PDwgImludmVyc2Ugc3FydCI7ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BBYnM6
ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJBYnNvbHV0ZSB2YWx1ZSI7ICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAgICBvdXQuZGVidWcgPDwgIlNpZ24iOyAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRmxvb3I6ICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiRmxvb3IiOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BD
ZWlsOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJDZWlsaW5nIjsgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICBvdXQuZGVidWcgPDwgIkZyYWN0aW9u
IjsgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAg
b3V0LmRlYnVnIDw8ICJsZW5ndGgiOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcE5vcm1hbGl6ZTogICAgICBvdXQuZGVidWcgPDwgIm5vcm1hbGl6ZSI7ICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQuZGVidWcg
PDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLwljYXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRQZHkiOyAgICAg
ICAgICAgICAgICAgYnJlYWs7ICAgCi0gICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDogICAg
ICAgICBvdXQuZGVidWcgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgICAgICAgIAotCi0gICAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91dC5kZWJ1ZyA8
PCAiYW55IjsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBbGw6ICAg
ICAgICAgICAgb3V0LmRlYnVnIDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGRlZmF1bHQ6IG91dC5kZWJ1Zy5tZXNzYWdlKEVQcmVmaXhFcnJvciwgIkJhZCB1bmFy
eSBvcCIpOwotICAgIH0KLQotICAgIG91dC5kZWJ1ZyA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBs
ZXRlU3RyaW5nKCkgPDwgIikiOwotCi0gICAgb3V0LmRlYnVnIDw8ICJcbiI7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNp
dCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmsmIG91dCA9
IGluZm9TaW5rOwotCi0gICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wTnVsbCkgewotICAgICAg
ICBvdXQuZGVidWcubWVzc2FnZShFUHJlZml4RXJyb3IsICJub2RlIGlzIHN0aWxsIEVPcE51bGwh
Iik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIE91dHB1dFRyZWVUZXh0KG91
dCwgbm9kZSwgZGVwdGgpOwotCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7Ci0gICAgICAg
IGNhc2UgRU9wU2VxdWVuY2U6ICAgICAgb3V0LmRlYnVnIDw8ICJTZXF1ZW5jZVxuIjsgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGNhc2UgRU9wQ29tbWE6ICAgICAgICAgb3V0LmRlYnVnIDw8ICJDb21t
YVxuIjsgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgRU9wRnVuY3Rpb246ICAgICAgb3V0LmRl
YnVnIDw8ICJGdW5jdGlvbiBEZWZpbml0aW9uOiAiIDw8IG5vZGUtPmdldE5hbWUoKTsgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiAgb3V0LmRlYnVnIDw8ICJGdW5jdGlvbiBD
YWxsOiAiIDw8IG5vZGUtPmdldE5hbWUoKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUGFyYW1l
dGVyczogICAgb3V0LmRlYnVnIDw8ICJGdW5jdGlvbiBQYXJhbWV0ZXJzOiAiOyAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDogb3V0LmRlYnVnIDw8
ICJDb25zdHJ1Y3QgZmxvYXQiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMy
OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgdmVjMiI7ICBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RWZWMzOiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgdmVjMyI7ICBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3Qg
dmVjNCI7ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOiAgb3V0LmRlYnVn
IDw8ICJDb25zdHJ1Y3QgYm9vbCI7ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RC
VmVjMjogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgYnZlYzIiOyBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCVmVjMzogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgYnZlYzMiOyBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDogb3V0LmRlYnVnIDw8ICJDb25zdHJ1
Y3QgYnZlYzQiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6ICAgb3V0LmRl
YnVnIDw8ICJDb25zdHJ1Y3QgaW50IjsgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RJVmVjMjogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgaXZlYzIiOyBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzogb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgaXZlYzMiOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogb3V0LmRlYnVnIDw8ICJDb25z
dHJ1Y3QgaXZlYzQiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOiAgb3V0
LmRlYnVnIDw8ICJDb25zdHJ1Y3QgbWF0MiI7ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RNYXQzOiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgbWF0MyI7ICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1Y3QgbWF0NCI7
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6ICBvdXQuZGVidWcgPDwg
IkNvbnN0cnVjdCBzdHJ1Y3R1cmUiOyAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMZXNzVGhh
bjogICAgICAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0LmRlYnVnIDw8ICJD
b21wYXJlIEdyZWF0ZXIgVGhhbiI7ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcExl
c3NUaGFuRXF1YWw6ICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwi
OyAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXQuZGVidWcg
PDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIG9yIEVxdWFsIjsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wVmVjdG9yRXF1YWw6ICAgICAgb3V0LmRlYnVnIDw8ICJFcXVhbCI7ICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiAgIG91dC5k
ZWJ1ZyA8PCAiTm90RXF1YWwiOyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIEVPcE1vZDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAibW9kIjsgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BQb3c6ICAgICAgICAgICBvdXQuZGVidWcgPDwgInBvdyI7ICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICBvdXQuZGVidWcg
PDwgImFyYyB0YW5nZW50IjsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAg
ICBvdXQuZGVidWcgPDwgIm1pbiI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF4
OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJtYXgiOyAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcENsYW1wOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY2xhbXAiOyAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXQuZGVidWcgPDwgIm1peCI7ICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU3RlcDogICAgICAgICAgb3V0LmRlYnVnIDw8ICJz
dGVwIjsgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dC5k
ZWJ1ZyA8PCAic21vb3Roc3RlcCI7ICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcERpc3RhbmNl
OiAgICAgIG91dC5kZWJ1ZyA8PCAiZGlzdGFuY2UiOyAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BEb3Q6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRvdC1wcm9kdWN0Ijsg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ3Jvc3M6ICAgICAgICAgb3V0LmRl
YnVnIDw8ICJjcm9zcy1wcm9kdWN0IjsgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVP
cEZhY2VGb3J3YXJkOiAgIG91dC5kZWJ1ZyA8PCAiZmFjZS1mb3J3YXJkIjsgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXQuZGVidWcgPDwgInJlZmxl
Y3QiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUmVmcmFjdDogICAg
ICAgb3V0LmRlYnVnIDw8ICJyZWZyYWN0IjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcE11bDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY29tcG9uZW50LXdpc2UgbXVs
dGlwbHkiOyBicmVhazsKLQotICAgICAgICBkZWZhdWx0OiBvdXQuZGVidWcubWVzc2FnZShFUHJl
Zml4RXJyb3IsICJCYWQgYWdncmVnYXRpb24gb3AiKTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZS0+
Z2V0T3AoKSAhPSBFT3BTZXF1ZW5jZSAmJiBub2RlLT5nZXRPcCgpICE9IEVPcFBhcmFtZXRlcnMp
Ci0gICAgICAgIG91dC5kZWJ1ZyA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkg
PDwgIikiOwotCi0gICAgb3V0LmRlYnVnIDw8ICJcbiI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVElu
dGVybVNlbGVjdGlvbiogbm9kZSkKLXsKLSAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5rOwot
Ci0gICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7Ci0KLSAgICBvdXQuZGVidWcg
PDwgIlRlc3QgY29uZGl0aW9uIGFuZCBzZWxlY3QiOwotICAgIG91dC5kZWJ1ZyA8PCAiICgiIDw8
IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIilcbiI7Ci0KLSAgICArK2RlcHRoOwotCi0g
ICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKLSAgICBvdXQuZGVidWcg
PDwgIkNvbmRpdGlvblxuIjsKLSAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhp
cyk7Ci0KLSAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOwotICAgIGlm
IChub2RlLT5nZXRUcnVlQmxvY2soKSkgewotICAgICAgICBvdXQuZGVidWcgPDwgInRydWUgY2Fz
ZVxuIjsKLSAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMpOwotICAg
IH0gZWxzZQotICAgICAgICBvdXQuZGVidWcgPDwgInRydWUgY2FzZSBpcyBudWxsXG4iOwotCi0g
ICAgaWYgKG5vZGUtPmdldEZhbHNlQmxvY2soKSkgewotICAgICAgICBPdXRwdXRUcmVlVGV4dChp
bmZvU2luaywgbm9kZSwgZGVwdGgpOwotICAgICAgICBvdXQuZGVidWcgPDwgImZhbHNlIGNhc2Vc
biI7Ci0gICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAg
fQotCi0gICAgLS1kZXB0aDsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBUT3V0cHV0
VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUp
Ci17Ci0gICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKLQotICAgIGludCBzaXplID0gbm9k
ZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7Ci0gICAgICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOwot
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0VHlwZSgp
KSB7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKClbaV0uZ2V0QkNvbnN0KCkpCi0gICAgICAgICAgICAgICAg
ICAgIG91dC5kZWJ1ZyA8PCAidHJ1ZSI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBvdXQuZGVidWcgPDwgImZhbHNlIjsKLQotICAgICAgICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiICgiIDw8ICJjb25zdCBib29sIiA8PCAiKSI7Ci0gICAgICAgICAgICAgICAgb3V0
LmRlYnVnIDw8ICJcbiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEVidEZsb2F0OgotICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCBub2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpW2ldLmdldEZDb25zdCgpOwotICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8
PCAiIChjb25zdCBmbG9hdClcbiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgbm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKVtpXS5nZXRJQ29uc3QoKTsKLSAgICAgICAgICAgICAgICBvdXQuZGVi
dWcgPDwgIiAoY29uc3QgaW50KVxuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgb3V0LmluZm8ubWVzc2FnZShFUHJlZml4SW50
ZXJuYWxFcnJvciwgIlVua25vd24gY29uc3RhbnQiLCBub2RlLT5nZXRMaW5lKCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFRPdXRwdXRUcmF2
ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi17Ci0gICAg
VEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKLQotICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9k
ZSwgZGVwdGgpOwotCi0gICAgb3V0LmRlYnVnIDw8ICJMb29wIHdpdGggY29uZGl0aW9uICI7Ci0g
ICAgaWYgKCEgbm9kZS0+dGVzdEZpcnN0KCkpCi0gICAgICAgIG91dC5kZWJ1ZyA8PCAibm90ICI7
Ci0gICAgb3V0LmRlYnVnIDw8ICJ0ZXN0ZWQgZmlyc3RcbiI7Ci0KLSAgICArK2RlcHRoOwotCi0g
ICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKLSAgICBpZiAobm9kZS0+
Z2V0VGVzdCgpKSB7Ci0gICAgICAgIG91dC5kZWJ1ZyA8PCAiTG9vcCBDb25kaXRpb25cbiI7Ci0g
ICAgICAgIG5vZGUtPmdldFRlc3QoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIG91dC5kZWJ1ZyA8PCAiTm8gbG9vcCBjb25kaXRpb25cbiI7Ci0KLSAgICBPdXRwdXRUcmVl
VGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOwotICAgIGlmIChub2RlLT5nZXRCb2R5KCkpIHsK
LSAgICAgICAgb3V0LmRlYnVnIDw8ICJMb29wIEJvZHlcbiI7Ci0gICAgICAgIG5vZGUtPmdldEJv
ZHkoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG91dC5kZWJ1ZyA8PCAi
Tm8gbG9vcCBib2R5XG4iOwotCi0gICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpIHsKLSAgICAg
ICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKLSAgICAgICAgb3V0LmRl
YnVnIDw8ICJMb29wIFRlcm1pbmFsIEV4cHJlc3Npb25cbiI7Ci0gICAgICAgIG5vZGUtPmdldFRl
cm1pbmFsKCktPnRyYXZlcnNlKHRoaXMpOwotICAgIH0KLQotICAgIC0tZGVwdGg7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlz
aXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpCi17Ci0gICAgVEluZm9TaW5rJiBvdXQgPSBp
bmZvU2luazsKLQotICAgIE91dHB1dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOwotCi0gICAg
c3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkgewotICAgICAgICBjYXNlIEVPcEtpbGw6ICAgICAg
b3V0LmRlYnVnIDw8ICJCcmFuY2g6IEtpbGwiOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wQnJlYWs6ICAgICBvdXQuZGVidWcgPDwgIkJyYW5jaDogQnJlYWsiOyAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BDb250aW51ZTogIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBD
b250aW51ZSI7ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFJldHVybjogICAgb3V0LmRl
YnVnIDw8ICJCcmFuY2g6IFJldHVybiI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
ICAgICAgICAgICBvdXQuZGVidWcgPDwgIkJyYW5jaDogVW5rbm93biBCcmFuY2giOyBicmVhazsK
LSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKSB7Ci0gICAgICAgIG91dC5k
ZWJ1ZyA8PCAiIHdpdGggZXhwcmVzc2lvblxuIjsKLSAgICAgICAgKytkZXB0aDsKLSAgICAgICAg
bm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgLS1kZXB0aDsK
LSAgICB9IGVsc2UKLSAgICAgICAgb3V0LmRlYnVnIDw8ICJcbiI7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLS8vCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdG8gY2FsbCBleHRlcm5h
bGx5IHRvIHN0YXJ0IHRoZSB0cmF2ZXJzYWwuCi0vLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4g
YmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBza2lwIHByb2Nlc3Npbmcgb2YgdGhhdAotLy8gdHlwZSBv
ZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KLS8vCi12b2lk
IFRJbnRlcm1lZGlhdGU6Om91dHB1dFRyZWUoVEludGVybU5vZGUqIHJvb3QpCi17Ci0gICAgaWYg
KHJvb3QgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVE91dHB1dFRyYXZlcnNlciBpdChp
bmZvU2luayk7Ci0KLSAgICByb290LT50cmF2ZXJzZSgmaXQpOwotfQpJbmRleDogQU5HTEUvc3Jj
L2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxl
ci9pbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIv
aW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTE3ICswLDAgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCi0KLS8vCi0vLyBEZWZpbml0aW9uIG9mIHRoZSBpbi1tZW1vcnkgaGlnaC1sZXZl
bCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KLS8vIG9mIHNoYWRlcnMuICBUaGlzIGlzIGEg
dHJlZSB0aGF0IHBhcnNlciBjcmVhdGVzLgotLy8KLS8vIE5vZGVzIGluIHRoZSB0cmVlIGFyZSBk
ZWZpbmVkIGFzIGEgaGllcmFyY2h5IG9mIGNsYXNzZXMgZGVyaXZlZCBmcm9tIAotLy8gVEludGVy
bU5vZGUuIEVhY2ggaXMgYSBub2RlIGluIGEgdHJlZS4gIFRoZXJlIGlzIG5vIHByZXNldCBicmFu
Y2hpbmcgZmFjdG9yOwotLy8gZWFjaCBub2RlIGNhbiBoYXZlIGl0J3Mgb3duIHR5cGUgb2YgbGlz
dCBvZiBjaGlsZHJlbi4KLS8vCi0KLSNpZm5kZWYgX19JTlRFUk1FRElBVEVfSAotI2RlZmluZSBf
X0lOVEVSTUVESUFURV9ICi0KLSNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKLSNpbmNsdWRl
ICJjb21waWxlci9UeXBlcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL0NvbnN0YW50VW5pb24uaCIK
LQotLy8KLS8vIE9wZXJhdG9ycyB1c2VkIGJ5IHRoZSBoaWdoLWxldmVsIChwYXJzZSB0cmVlKSBy
ZXByZXNlbnRhdGlvbi4KLS8vCi1lbnVtIFRPcGVyYXRvciB7Ci0gICAgRU9wTnVsbCwgICAgICAg
ICAgICAvLyBpZiBpbiBhIG5vZGUsIHNob3VsZCBvbmx5IG1lYW4gYSBub2RlIGlzIHN0aWxsIGJl
aW5nIGJ1aWx0Ci0gICAgRU9wU2VxdWVuY2UsICAgICAgICAvLyBkZW5vdGVzIGEgbGlzdCBvZiBz
dGF0ZW1lbnRzLCBvciBwYXJhbWV0ZXJzLCBldGMuCi0gICAgRU9wRnVuY3Rpb25DYWxsLCAgICAK
LSAgICBFT3BGdW5jdGlvbiwgICAgICAgIC8vIEZvciBmdW5jdGlvbiBkZWZpbml0aW9uCi0gICAg
RU9wUGFyYW1ldGVycywgICAgICAvLyBhbiBhZ2dyZWdhdGUgbGlzdGluZyB0aGUgcGFyYW1ldGVy
cyB0byBhIGZ1bmN0aW9uCi0KLSAgICBFT3BEZWNsYXJhdGlvbiwKLSAgICBFT3BQcm90b3R5cGUs
Ci0KLSAgICAvLwotICAgIC8vIFVuYXJ5IG9wZXJhdG9ycwotICAgIC8vCi0KLSAgICBFT3BOZWdh
dGl2ZSwKLSAgICBFT3BMb2dpY2FsTm90LAotICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QsCi0KLSAg
ICBFT3BQb3N0SW5jcmVtZW50LAotICAgIEVPcFBvc3REZWNyZW1lbnQsCi0gICAgRU9wUHJlSW5j
cmVtZW50LAotICAgIEVPcFByZURlY3JlbWVudCwKLQotICAgIEVPcENvbnZJbnRUb0Jvb2wsCi0g
ICAgRU9wQ29udkZsb2F0VG9Cb29sLAotICAgIEVPcENvbnZCb29sVG9GbG9hdCwKLSAgICBFT3BD
b252SW50VG9GbG9hdCwKLSAgICBFT3BDb252RmxvYXRUb0ludCwKLSAgICBFT3BDb252Qm9vbFRv
SW50LAotCi0gICAgLy8KLSAgICAvLyBiaW5hcnkgb3BlcmF0aW9ucwotICAgIC8vCi0KLSAgICBF
T3BBZGQsCi0gICAgRU9wU3ViLAotICAgIEVPcE11bCwKLSAgICBFT3BEaXYsCi0gICAgRU9wRXF1
YWwsCi0gICAgRU9wTm90RXF1YWwsCi0gICAgRU9wVmVjdG9yRXF1YWwsCi0gICAgRU9wVmVjdG9y
Tm90RXF1YWwsCi0gICAgRU9wTGVzc1RoYW4sCi0gICAgRU9wR3JlYXRlclRoYW4sCi0gICAgRU9w
TGVzc1RoYW5FcXVhbCwKLSAgICBFT3BHcmVhdGVyVGhhbkVxdWFsLAotICAgIEVPcENvbW1hLAot
Ci0gICAgRU9wVmVjdG9yVGltZXNTY2FsYXIsCi0gICAgRU9wVmVjdG9yVGltZXNNYXRyaXgsCi0g
ICAgRU9wTWF0cml4VGltZXNWZWN0b3IsCi0gICAgRU9wTWF0cml4VGltZXNTY2FsYXIsCi0KLSAg
ICBFT3BMb2dpY2FsT3IsCi0gICAgRU9wTG9naWNhbFhvciwKLSAgICBFT3BMb2dpY2FsQW5kLAot
Ci0gICAgRU9wSW5kZXhEaXJlY3QsCi0gICAgRU9wSW5kZXhJbmRpcmVjdCwKLSAgICBFT3BJbmRl
eERpcmVjdFN0cnVjdCwKLQotICAgIEVPcFZlY3RvclN3aXp6bGUsCi0KLSAgICAvLwotICAgIC8v
IEJ1aWx0LWluIGZ1bmN0aW9ucyBwb3RlbnRpYWxseSBtYXBwZWQgdG8gb3BlcmF0b3JzCi0gICAg
Ly8KLQotICAgIEVPcFJhZGlhbnMsCi0gICAgRU9wRGVncmVlcywKLSAgICBFT3BTaW4sCi0gICAg
RU9wQ29zLAotICAgIEVPcFRhbiwKLSAgICBFT3BBc2luLAotICAgIEVPcEFjb3MsCi0gICAgRU9w
QXRhbiwKLQotICAgIEVPcFBvdywKLSAgICBFT3BFeHAsCi0gICAgRU9wTG9nLAotICAgIEVPcEV4
cDIsCi0gICAgRU9wTG9nMiwKLSAgICBFT3BTcXJ0LAotICAgIEVPcEludmVyc2VTcXJ0LAotCi0g
ICAgRU9wQWJzLAotICAgIEVPcFNpZ24sCi0gICAgRU9wRmxvb3IsCi0gICAgRU9wQ2VpbCwKLSAg
ICBFT3BGcmFjdCwKLSAgICBFT3BNb2QsCi0gICAgRU9wTWluLAotICAgIEVPcE1heCwKLSAgICBF
T3BDbGFtcCwKLSAgICBFT3BNaXgsCi0gICAgRU9wU3RlcCwKLSAgICBFT3BTbW9vdGhTdGVwLAot
Ci0gICAgRU9wTGVuZ3RoLAotICAgIEVPcERpc3RhbmNlLAotICAgIEVPcERvdCwKLSAgICBFT3BD
cm9zcywKLSAgICBFT3BOb3JtYWxpemUsCi0gICAgRU9wRmFjZUZvcndhcmQsCi0gICAgRU9wUmVm
bGVjdCwKLSAgICBFT3BSZWZyYWN0LAotCi0gICAgLy9FT3BEUGR4LCAgICAgICAgICAgIC8vIEZy
YWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KLSAgICAvL0VP
cERQZHksICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzIGV4dGVuc2lvbgotICAgIC8vRU9wRndpZHRoLCAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5
LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCi0KLSAgICBFT3BNYXRyaXhUaW1l
c01hdHJpeCwKLQotICAgIEVPcEFueSwKLSAgICBFT3BBbGwsCi0KLSAgICAvLwotICAgIC8vIEJy
YW5jaAotICAgIC8vCi0KLSAgICBFT3BLaWxsLCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHkK
LSAgICBFT3BSZXR1cm4sCi0gICAgRU9wQnJlYWssCi0gICAgRU9wQ29udGludWUsCi0KLSAgICAv
LwotICAgIC8vIENvbnN0cnVjdG9ycwotICAgIC8vCi0KLSAgICBFT3BDb25zdHJ1Y3RJbnQsCi0g
ICAgRU9wQ29uc3RydWN0Qm9vbCwKLSAgICBFT3BDb25zdHJ1Y3RGbG9hdCwKLSAgICBFT3BDb25z
dHJ1Y3RWZWMyLAotICAgIEVPcENvbnN0cnVjdFZlYzMsCi0gICAgRU9wQ29uc3RydWN0VmVjNCwK
LSAgICBFT3BDb25zdHJ1Y3RCVmVjMiwKLSAgICBFT3BDb25zdHJ1Y3RCVmVjMywKLSAgICBFT3BD
b25zdHJ1Y3RCVmVjNCwKLSAgICBFT3BDb25zdHJ1Y3RJVmVjMiwKLSAgICBFT3BDb25zdHJ1Y3RJ
VmVjMywKLSAgICBFT3BDb25zdHJ1Y3RJVmVjNCwKLSAgICBFT3BDb25zdHJ1Y3RNYXQyLAotICAg
IEVPcENvbnN0cnVjdE1hdDMsCi0gICAgRU9wQ29uc3RydWN0TWF0NCwKLSAgICBFT3BDb25zdHJ1
Y3RTdHJ1Y3QsCi0KLSAgICAvLwotICAgIC8vIG1vdmVzCi0gICAgLy8KLQotICAgIEVPcEFzc2ln
biwKLSAgICBFT3BJbml0aWFsaXplLAotICAgIEVPcEFkZEFzc2lnbiwKLSAgICBFT3BTdWJBc3Np
Z24sCi0gICAgRU9wTXVsQXNzaWduLAotICAgIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduLAot
ICAgIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduLAotICAgIEVPcE1hdHJpeFRpbWVzU2NhbGFy
QXNzaWduLAotICAgIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduLAotICAgIEVPcERpdkFzc2ln
biwKLX07Ci0KLWNsYXNzIFRJbnRlcm1UcmF2ZXJzZXI7Ci1jbGFzcyBUSW50ZXJtQWdncmVnYXRl
OwotY2xhc3MgVEludGVybUJpbmFyeTsKLWNsYXNzIFRJbnRlcm1VbmFyeTsKLWNsYXNzIFRJbnRl
cm1Db25zdGFudFVuaW9uOwotY2xhc3MgVEludGVybVNlbGVjdGlvbjsKLWNsYXNzIFRJbnRlcm1U
eXBlZDsKLWNsYXNzIFRJbnRlcm1TeW1ib2w7Ci1jbGFzcyBUSW50ZXJtTG9vcDsKLWNsYXNzIFRJ
bmZvU2luazsKLQotLy8KLS8vIEJhc2UgY2xhc3MgZm9yIHRoZSB0cmVlIG5vZGVzCi0vLwotY2xh
c3MgVEludGVybU5vZGUgewotcHVibGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUo
R2xvYmFsUG9vbEFsbG9jYXRvcikKLQotICAgIFRJbnRlcm1Ob2RlKCkgOiBsaW5lKDApIHt9Ci0K
LSAgICBUU291cmNlTG9jIGdldExpbmUoKSBjb25zdCB7IHJldHVybiBsaW5lOyB9Ci0gICAgdm9p
ZCBzZXRMaW5lKFRTb3VyY2VMb2MgbCkgeyBsaW5lID0gbDsgfQotCi0gICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBUSW50ZXJtVHlw
ZWQqIGdldEFzVHlwZWQoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwg
VEludGVybUFnZ3JlZ2F0ZSogZ2V0QXNBZ2dyZWdhdGUoKSB7IHJldHVybiAwOyB9Ci0gICAgdmly
dHVhbCBUSW50ZXJtQmluYXJ5KiBnZXRBc0JpbmFyeU5vZGUoKSB7IHJldHVybiAwOyB9Ci0gICAg
dmlydHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlOb2RlKCkgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgVEludGVybVNlbGVjdGlvbiogZ2V0QXNTZWxlY3Rpb25Ob2RlKCkgeyByZXR1cm4g
MDsgfQotICAgIHZpcnR1YWwgVEludGVybVN5bWJvbCogZ2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1
cm4gMDsgfQotICAgIHZpcnR1YWwgVEludGVybUxvb3AqIGdldEFzTG9vcE5vZGUoKSB7IHJldHVy
biAwOyB9Ci0gICAgdmlydHVhbCB+VEludGVybU5vZGUoKSB7IH0KLQotcHJvdGVjdGVkOgotICAg
IFRTb3VyY2VMb2MgbGluZTsKLX07Ci0KLS8vCi0vLyBUaGlzIGlzIGp1c3QgdG8gaGVscCB5YWNj
LgotLy8KLXN0cnVjdCBUSW50ZXJtTm9kZVBhaXIgewotICAgIFRJbnRlcm1Ob2RlKiBub2RlMTsK
LSAgICBUSW50ZXJtTm9kZSogbm9kZTI7Ci19OwotCi0vLwotLy8gSW50ZXJtZWRpYXRlIGNsYXNz
IGZvciBub2RlcyB0aGF0IGhhdmUgYSB0eXBlLgotLy8KLWNsYXNzIFRJbnRlcm1UeXBlZCA6IHB1
YmxpYyBUSW50ZXJtTm9kZSB7Ci1wdWJsaWM6Ci0gICAgVEludGVybVR5cGVkKGNvbnN0IFRUeXBl
JiB0KSA6IHR5cGUodCkgIHsgfQotICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRBc1R5cGVk
KCkgeyByZXR1cm4gdGhpczsgfQotCi0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFRUeXBlJiB0KSB7
IHR5cGUgPSB0OyB9Ci0gICAgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0
eXBlOyB9Ci0gICAgVFR5cGUqIGdldFR5cGVQb2ludGVyKCkgeyByZXR1cm4gJnR5cGU7IH0KLQot
ICAgIFRCYXNpY1R5cGUgZ2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNp
Y1R5cGUoKTsgfQotICAgIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
dHlwZS5nZXRRdWFsaWZpZXIoKTsgfQotICAgIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkgY29u
c3QgeyByZXR1cm4gdHlwZS5nZXRQcmVjaXNpb24oKTsgfQotICAgIGludCBnZXROb21pbmFsU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsgfQotICAgIAotICAgIGJv
b2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzTWF0cml4KCk7IH0KLSAgICBib29s
IGlzQXJyYXkoKSAgY29uc3QgeyByZXR1cm4gdHlwZS5pc0FycmF5KCk7IH0KLSAgICBib29sIGlz
VmVjdG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3RvcigpOyB9Ci0gICAgYm9vbCBpc1Nj
YWxhcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXIoKTsgfQotICAgIGNvbnN0IGNoYXIq
IGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1N0cmluZygpOyB9
Ci0gICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5nZXRRdWFsaWZpZXJTdHJpbmcoKTsgfQotICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVTdHJpbmco
KSBjb25zdCB7IHJldHVybiB0eXBlLmdldENvbXBsZXRlU3RyaW5nKCk7IH0KLQotcHJvdGVjdGVk
OgotICAgIFRUeXBlIHR5cGU7Ci19OwotCi0vLwotLy8gSGFuZGxlIGZvciwgZG8td2hpbGUsIGFu
ZCB3aGlsZSBsb29wcy4KLS8vCi1jbGFzcyBUSW50ZXJtTG9vcCA6IHB1YmxpYyBUSW50ZXJtTm9k
ZSB7Ci1wdWJsaWM6Ci0gICAgVEludGVybUxvb3AoVEludGVybU5vZGUgKmluaXQsIFRJbnRlcm1O
b2RlKiBhQm9keSwgVEludGVybVR5cGVkKiBhVGVzdCwgVEludGVybVR5cGVkKiBhVGVybWluYWws
IGJvb2wgdGVzdEZpcnN0KSA6IAotICAgICAgICAgICAgaW5pdChpbml0KSwKLSAgICAgICAgICAg
IGJvZHkoYUJvZHkpLAotICAgICAgICAgICAgdGVzdChhVGVzdCksCi0gICAgICAgICAgICB0ZXJt
aW5hbChhVGVybWluYWwpLAotICAgICAgICAgICAgZmlyc3QodGVzdEZpcnN0KSB7IH0KLQotICAg
IHZpcnR1YWwgVEludGVybUxvb3AqIGdldEFzTG9vcE5vZGUoKSB7IHJldHVybiB0aGlzOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKLQotICAgIFRJbnRl
cm1Ob2RlICpnZXRJbml0KCkgeyByZXR1cm4gaW5pdDsgfQotICAgIFRJbnRlcm1Ob2RlICpnZXRC
b2R5KCkgeyByZXR1cm4gYm9keTsgfQotICAgIFRJbnRlcm1UeXBlZCAqZ2V0VGVzdCgpIHsgcmV0
dXJuIHRlc3Q7IH0KLSAgICBUSW50ZXJtVHlwZWQgKmdldFRlcm1pbmFsKCkgeyByZXR1cm4gdGVy
bWluYWw7IH0KLSAgICBib29sIHRlc3RGaXJzdCgpIHsgcmV0dXJuIGZpcnN0OyB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICBUSW50ZXJtTm9kZSAqaW5pdDsKLSAgICBUSW50ZXJtTm9kZSAqYm9keTsgICAg
ICAgLy8gY29kZSB0byBsb29wIG92ZXIKLSAgICBUSW50ZXJtVHlwZWQgKnRlc3Q7ICAgICAgLy8g
ZXhpdCBjb25kaXRpb24gYXNzb2NpYXRlZCB3aXRoIGxvb3AsIGNvdWxkIGJlIDAgZm9yICdmb3In
IGxvb3BzCi0gICAgVEludGVybVR5cGVkICp0ZXJtaW5hbDsgIC8vIGV4aXN0cyBmb3IgZm9yLWxv
b3BzCi0gICAgYm9vbCBmaXJzdDsgICAgICAgICAgICAgIC8vIHRydWUgZm9yIHdoaWxlIGFuZCBm
b3IsIG5vdCBmb3IgZG8td2hpbGUKLX07Ci0KLS8vCi0vLyBIYW5kbGUgYnJlYWssIGNvbnRpbnVl
LCByZXR1cm4sIGFuZCBraWxsLgotLy8KLWNsYXNzIFRJbnRlcm1CcmFuY2ggOiBwdWJsaWMgVElu
dGVybU5vZGUgewotcHVibGljOgotICAgIFRJbnRlcm1CcmFuY2goVE9wZXJhdG9yIG9wLCBUSW50
ZXJtVHlwZWQqIGUpIDoKLSAgICAgICAgICAgIGZsb3dPcChvcCksCi0gICAgICAgICAgICBleHBy
ZXNzaW9uKGUpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJz
ZXIqKTsKLQotICAgIFRPcGVyYXRvciBnZXRGbG93T3AoKSB7IHJldHVybiBmbG93T3A7IH0KLSAg
ICBUSW50ZXJtVHlwZWQqIGdldEV4cHJlc3Npb24oKSB7IHJldHVybiBleHByZXNzaW9uOyB9Ci0K
LXByb3RlY3RlZDoKLSAgICBUT3BlcmF0b3IgZmxvd09wOwotICAgIFRJbnRlcm1UeXBlZCogZXhw
cmVzc2lvbjsgIC8vIG5vbi16ZXJvIGV4Y2VwdCBmb3IgInJldHVybiBleHA7IiBzdGF0ZW1lbnRz
Ci19OwotCi0vLwotLy8gTm9kZXMgdGhhdCBjb3JyZXNwb25kIHRvIHN5bWJvbHMgb3IgY29uc3Rh
bnRzIGluIHRoZSBzb3VyY2UgY29kZS4KLS8vCi1jbGFzcyBUSW50ZXJtU3ltYm9sIDogcHVibGlj
IFRJbnRlcm1UeXBlZCB7Ci1wdWJsaWM6Ci0gICAgLy8gaWYgc3ltYm9sIGlzIGluaXRpYWxpemVk
IGFzIHN5bWJvbChzeW0pLCB0aGUgbWVtb3J5IGNvbWVzIGZyb20gdGhlIHBvb2xhbGxvY2F0b3Ig
b2Ygc3ltLiBJZiBzeW0gY29tZXMgZnJvbQotICAgIC8vIHBlciBwcm9jZXNzIGdsb2JhbHBvb2xh
bGxvY2F0b3IsIHRoZW4gaXQgY2F1c2VzIGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UgcGVyIGNvbXBp
bGUKLSAgICAvLyBpdCBpcyBlc3NlbnRpYWwgdG8gdXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2ln
biB0byBzeW1ib2wKLSAgICBUSW50ZXJtU3ltYm9sKGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0s
IGNvbnN0IFRUeXBlJiB0KSA6IAotICAgICAgICAgICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAg
eyBzeW1ib2wgPSBzeW07fSAKLQotICAgIGludCBnZXRJZCgpIGNvbnN0IHsgcmV0dXJuIGlkOyB9
Ci0gICAgY29uc3QgVFN0cmluZyYgZ2V0U3ltYm9sKCkgY29uc3QgeyByZXR1cm4gc3ltYm9sOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAgIHZp
cnR1YWwgVEludGVybVN5bWJvbCogZ2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1cm4gdGhpczsgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgaW50IGlkOwotICAgIFRTdHJpbmcgc3ltYm9sOwotfTsKLQotY2xh
c3MgVEludGVybUNvbnN0YW50VW5pb24gOiBwdWJsaWMgVEludGVybVR5cGVkIHsKLXB1YmxpYzoK
LSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbihDb25zdGFudFVuaW9uICp1bmlvblBvaW50ZXIsIGNv
bnN0IFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgdW5pb25BcnJheVBvaW50ZXIodW5pb25Q
b2ludGVyKSB7IH0KLQotICAgIENvbnN0YW50VW5pb24qIGdldFVuaW9uQXJyYXlQb2ludGVyKCkg
Y29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXI7IH0KLSAgICB2b2lkIHNldFVuaW9uQXJy
YXlQb2ludGVyKENvbnN0YW50VW5pb24gKmMpIHsgdW5pb25BcnJheVBvaW50ZXIgPSBjOyB9Ci0K
LSAgICB2aXJ0dWFsIFRJbnRlcm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0YW50VW5pb24oKSAg
eyByZXR1cm4gdGhpczsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVy
c2VyKik7Ci0KLSAgICBUSW50ZXJtVHlwZWQqIGZvbGQoVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQq
LCBUSW5mb1NpbmsmKTsKLQotcHJvdGVjdGVkOgotICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXlQb2ludGVyOwotfTsKLQotLy8KLS8vIEludGVybWVkaWF0ZSBjbGFzcyBmb3Igbm9kZSB0eXBl
cyB0aGF0IGhvbGQgb3BlcmF0b3JzLgotLy8KLWNsYXNzIFRJbnRlcm1PcGVyYXRvciA6IHB1Ymxp
YyBUSW50ZXJtVHlwZWQgewotcHVibGljOgotICAgIFRPcGVyYXRvciBnZXRPcCgpIGNvbnN0IHsg
cmV0dXJuIG9wOyB9Ci0gICAgdm9pZCBzZXRPcChUT3BlcmF0b3IgbykgeyBvcCA9IG87IH0KLQot
ICAgIGJvb2wgbW9kaWZpZXNTdGF0ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNDb25zdHJ1Y3Rvcigp
IGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvKSA6
IFRJbnRlcm1UeXBlZChUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKSksIG9wKG8pIHt9Ci0g
ICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvLCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQo
dCksIG9wKG8pIHt9ICAgCi0gICAgVE9wZXJhdG9yIG9wOwotfTsKLQotLy8KLS8vIE5vZGVzIGZv
ciBhbGwgdGhlIGJhc2ljIGJpbmFyeSBtYXRoIG9wZXJhdG9ycy4KLS8vCi1jbGFzcyBUSW50ZXJt
QmluYXJ5IDogcHVibGljIFRJbnRlcm1PcGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgVEludGVybUJp
bmFyeShUT3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3Iobykge30KLQotICAgIHZpcnR1YWwg
VEludGVybUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gdGhpczsgfQotICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7Ci0KLSAgICB2b2lkIHNldExl
ZnQoVEludGVybVR5cGVkKiBuKSB7IGxlZnQgPSBuOyB9Ci0gICAgdm9pZCBzZXRSaWdodChUSW50
ZXJtVHlwZWQqIG4pIHsgcmlnaHQgPSBuOyB9Ci0gICAgVEludGVybVR5cGVkKiBnZXRMZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbGVmdDsgfQotICAgIFRJbnRlcm1UeXBlZCogZ2V0UmlnaHQoKSBjb25z
dCB7IHJldHVybiByaWdodDsgfQotICAgIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKTsKLQotcHJv
dGVjdGVkOgotICAgIFRJbnRlcm1UeXBlZCogbGVmdDsKLSAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0
OwotfTsKLQotLy8KLS8vIE5vZGVzIGZvciB1bmFyeSBtYXRoIG9wZXJhdG9ycy4KLS8vCi1jbGFz
cyBUSW50ZXJtVW5hcnkgOiBwdWJsaWMgVEludGVybU9wZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBU
SW50ZXJtVW5hcnkoVE9wZXJhdG9yIG8sIFRUeXBlJiB0KSA6IFRJbnRlcm1PcGVyYXRvcihvLCB0
KSwgb3BlcmFuZCgwKSB7fQotICAgIFRJbnRlcm1VbmFyeShUT3BlcmF0b3IgbykgOiBUSW50ZXJt
T3BlcmF0b3IobyksIG9wZXJhbmQoMCkge30KLQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyKik7Ci0gICAgdmlydHVhbCBUSW50ZXJtVW5hcnkqIGdldEFzVW5hcnlO
b2RlKCkgeyByZXR1cm4gdGhpczsgfQotCi0gICAgdm9pZCBzZXRPcGVyYW5kKFRJbnRlcm1UeXBl
ZCogbykgeyBvcGVyYW5kID0gbzsgfQotICAgIFRJbnRlcm1UeXBlZCogZ2V0T3BlcmFuZCgpIHsg
cmV0dXJuIG9wZXJhbmQ7IH0gICAgCi0gICAgYm9vbCBwcm9tb3RlKFRJbmZvU2luayYpOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgVEludGVybVR5cGVkKiBvcGVyYW5kOwotfTsKLQotdHlwZWRlZiBUVmVj
dG9yPFRJbnRlcm1Ob2RlKj4gVEludGVybVNlcXVlbmNlOwotdHlwZWRlZiBUVmVjdG9yPGludD4g
VFF1YWxpZmllckxpc3Q7Ci0vLwotLy8gTm9kZXMgdGhhdCBvcGVyYXRlIG9uIGFuIGFyYml0cmFy
eSBzaXplZCBzZXQgb2YgY2hpbGRyZW4uCi0vLwotY2xhc3MgVEludGVybUFnZ3JlZ2F0ZSA6IHB1
YmxpYyBUSW50ZXJtT3BlcmF0b3IgewotcHVibGljOgotICAgIFRJbnRlcm1BZ2dyZWdhdGUoKSA6
IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFsc2UpLCBwcmFnbWFUYWJs
ZSgwKSB7IH0KLSAgICBUSW50ZXJtQWdncmVnYXRlKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVy
YXRvcihvKSwgcHJhZ21hVGFibGUoMCkgeyB9Ci0gICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IGRl
bGV0ZSBwcmFnbWFUYWJsZTsgfQotCi0gICAgdmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRB
c0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2Uo
VEludGVybVRyYXZlcnNlciopOwotCi0gICAgVEludGVybVNlcXVlbmNlJiBnZXRTZXF1ZW5jZSgp
IHsgcmV0dXJuIHNlcXVlbmNlOyB9Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0IFRTdHJpbmcmIG4p
IHsgbmFtZSA9IG47IH0KLSAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1
cm4gbmFtZTsgfQotCi0gICAgdm9pZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRlZmluZWQgPSB0
cnVlOyB9Ci0gICAgYm9vbCBpc1VzZXJEZWZpbmVkKCkgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0K
LSAgICBUUXVhbGlmaWVyTGlzdCYgZ2V0UXVhbGlmaWVyKCkgeyByZXR1cm4gcXVhbGlmaWVyOyB9
Ci0gICAgdm9pZCBzZXRPcHRpbWl6ZShib29sIG8pIHsgb3B0aW1pemUgPSBvOyB9Ci0gICAgYm9v
bCBnZXRPcHRpbWl6ZSgpIHsgcmV0dXJuIG9wdGltaXplOyB9Ci0gICAgdm9pZCBzZXREZWJ1Zyhi
b29sIGQpIHsgZGVidWcgPSBkOyB9Ci0gICAgYm9vbCBnZXREZWJ1ZygpIHsgcmV0dXJuIGRlYnVn
OyB9Ci0gICAgdm9pZCBhZGRUb1ByYWdtYVRhYmxlKGNvbnN0IFRQcmFnbWFUYWJsZSYgcFRhYmxl
KTsKLSAgICBjb25zdCBUUHJhZ21hVGFibGUmIGdldFByYWdtYVRhYmxlKCkgY29uc3QgeyByZXR1
cm4gKnByYWdtYVRhYmxlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUSW50ZXJtQWdncmVnYXRlKGNv
bnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgY29weSBjb25zdHJ1Y3RvcgotICAg
IFRJbnRlcm1BZ2dyZWdhdGUmIG9wZXJhdG9yPShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8v
IGRpc2FsbG93IGFzc2lnbm1lbnQgb3BlcmF0b3IKLSAgICBUSW50ZXJtU2VxdWVuY2Ugc2VxdWVu
Y2U7Ci0gICAgVFF1YWxpZmllckxpc3QgcXVhbGlmaWVyOwotICAgIFRTdHJpbmcgbmFtZTsKLSAg
ICBib29sIHVzZXJEZWZpbmVkOyAvLyB1c2VkIGZvciB1c2VyIGRlZmluZWQgZnVuY3Rpb24gbmFt
ZXMKLSAgICBib29sIG9wdGltaXplOwotICAgIGJvb2wgZGVidWc7Ci0gICAgVFByYWdtYVRhYmxl
ICpwcmFnbWFUYWJsZTsKLX07Ci0KLS8vCi0vLyBGb3IgaWYgdGVzdHMuICBTaW1wbGlmaWVkIHNp
bmNlIHRoZXJlIGlzIG5vIHN3aXRjaCBzdGF0ZW1lbnQuCi0vLwotY2xhc3MgVEludGVybVNlbGVj
dGlvbiA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgewotcHVibGljOgotICAgIFRJbnRlcm1TZWxlY3Rp
b24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBm
YWxzZUIpIDoKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZChUVHlwZShFYnRWb2lkLCBFYnBVbmRl
ZmluZWQpKSwgY29uZGl0aW9uKGNvbmQpLCB0cnVlQmxvY2sodHJ1ZUIpLCBmYWxzZUJsb2NrKGZh
bHNlQikge30KLSAgICBUSW50ZXJtU2VsZWN0aW9uKFRJbnRlcm1UeXBlZCogY29uZCwgVEludGVy
bU5vZGUqIHRydWVCLCBUSW50ZXJtTm9kZSogZmFsc2VCLCBjb25zdCBUVHlwZSYgdHlwZSkgOgot
ICAgICAgICAgICAgVEludGVybVR5cGVkKHR5cGUpLCBjb25kaXRpb24oY29uZCksIHRydWVCbG9j
ayh0cnVlQiksIGZhbHNlQmxvY2soZmFsc2VCKSB7fQotCi0gICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKLQotICAgIGJvb2wgdXNlc1Rlcm5hcnlPcGVyYXRvcigp
IGNvbnN0IHsgcmV0dXJuIGdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQ7IH0KLSAgICBUSW50ZXJt
Tm9kZSogZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uOyB9Ci0gICAgVElu
dGVybU5vZGUqIGdldFRydWVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRydWVCbG9jazsgfQotICAg
IFRJbnRlcm1Ob2RlKiBnZXRGYWxzZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gZmFsc2VCbG9jazsg
fQotICAgIFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJuIHRo
aXM7IH0KLQotcHJvdGVjdGVkOgotICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOwotICAgIFRJ
bnRlcm1Ob2RlKiB0cnVlQmxvY2s7Ci0gICAgVEludGVybU5vZGUqIGZhbHNlQmxvY2s7Ci19Owot
Ci1lbnVtIFZpc2l0Ci17Ci0gICAgUHJlVmlzaXQsCi0gICAgSW5WaXNpdCwKLSAgICBQb3N0Vmlz
aXQKLX07Ci0KLS8vCi0vLyBGb3IgdHJhdmVyc2luZyB0aGUgdHJlZS4gIFVzZXIgc2hvdWxkIGRl
cml2ZSBmcm9tIHRoaXMsIAotLy8gcHV0IHRoZWlyIHRyYXZlcnNhbCBzcGVjaWZpYyBkYXRhIGlu
IGl0LCBhbmQgdGhlbiBwYXNzCi0vLyBpdCB0byBhIFRyYXZlcnNlIG1ldGhvZC4KLS8vCi0vLyBX
aGVuIHVzaW5nIHRoaXMsIGp1c3QgZmlsbCBpbiB0aGUgbWV0aG9kcyBmb3Igbm9kZXMgeW91IHdh
bnQgdmlzaXRlZC4KLS8vIFJldHVybiBmYWxzZSBmcm9tIGEgcHJlLXZpc2l0IHRvIHNraXAgdmlz
aXRpbmcgdGhhdCBub2RlJ3Mgc3VidHJlZS4KLS8vCi1jbGFzcyBUSW50ZXJtVHJhdmVyc2VyCi17
Ci1wdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2Nh
dG9yKQotCi0gICAgVEludGVybVRyYXZlcnNlcihib29sIHByZVZpc2l0ID0gdHJ1ZSwgYm9vbCBp
blZpc2l0ID0gZmFsc2UsIGJvb2wgcG9zdFZpc2l0ID0gZmFsc2UsIGJvb2wgcmlnaHRUb0xlZnQg
PSBmYWxzZSkgOiAKLSAgICAgICAgICAgIHByZVZpc2l0KHByZVZpc2l0KSwKLSAgICAgICAgICAg
IGluVmlzaXQoaW5WaXNpdCksCi0gICAgICAgICAgICBwb3N0VmlzaXQocG9zdFZpc2l0KSwKLSAg
ICAgICAgICAgIHJpZ2h0VG9MZWZ0KHJpZ2h0VG9MZWZ0KSwKLSAgICAgICAgICAgIGRlcHRoKDAp
IHt9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopIHt9Ci0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiop
IHt9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmlu
YXJ5Kikge3JldHVybiB0cnVlO30KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5Kikge3JldHVybiB0cnVlO30KLSAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKSB7cmV0dXJuIHRydWU7
fQotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSopIHtyZXR1cm4gdHJ1ZTt9Ci0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNp
dCB2aXNpdCwgVEludGVybUxvb3AqKSB7cmV0dXJuIHRydWU7fQotICAgIHZpcnR1YWwgYm9vbCB2
aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopIHtyZXR1cm4gdHJ1ZTt9Ci0K
LSAgICB2b2lkIGluY3JlbWVudERlcHRoKCkge2RlcHRoKys7fQotICAgIHZvaWQgZGVjcmVtZW50
RGVwdGgoKSB7ZGVwdGgtLTt9Ci0KLSAgICBjb25zdCBib29sIHByZVZpc2l0OwotICAgIGNvbnN0
IGJvb2wgaW5WaXNpdDsKLSAgICBjb25zdCBib29sIHBvc3RWaXNpdDsKLSAgICBjb25zdCBib29s
IHJpZ2h0VG9MZWZ0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgaW50IGRlcHRoOwotfTsKLQotI2VuZGlm
IC8vIF9fSU5URVJNRURJQVRFX0gKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9sb2NhbGludGVy
bWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9sb2NhbGludGVybWVk
aWF0ZS5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9sb2NhbGludGVy
bWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCi0KLSNpZm5kZWYgX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KLSNkZWZpbmUgX0xP
Q0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFu
Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL1N5bWJvbFRhYmxlLmgiCi0KLXN0cnVjdCBUVmVjdG9yRmllbGRzIHsKLSAgICBpbnQgb2Zm
c2V0c1s0XTsKLSAgICBpbnQgbnVtOwotfTsKLQotLy8KLS8vIFNldCBvZiBoZWxwZXIgZnVuY3Rp
b25zIHRvIGhlbHAgcGFyc2UgYW5kIGJ1aWxkIHRoZSB0cmVlLgotLy8KLWNsYXNzIFRJbmZvU2lu
azsKLWNsYXNzIFRJbnRlcm1lZGlhdGUgewotcHVibGljOiAgICAKLSAgICBQT09MX0FMTE9DQVRP
Ul9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCi0KLSAgICBUSW50ZXJtZWRpYXRlKFRJ
bmZvU2luayYgaSkgOiBpbmZvU2luayhpKSB7IH0KLSAgICBUSW50ZXJtU3ltYm9sKiBhZGRTeW1i
b2woaW50IElkLCBjb25zdCBUU3RyaW5nJiwgY29uc3QgVFR5cGUmLCBUU291cmNlTG9jKTsKLSAg
ICBUSW50ZXJtVHlwZWQqIGFkZENvbnZlcnNpb24oVE9wZXJhdG9yLCBjb25zdCBUVHlwZSYsIFRJ
bnRlcm1UeXBlZCopOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQmluYXJ5TWF0aChUT3BlcmF0b3Ig
b3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYywg
VFN5bWJvbFRhYmxlJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRBc3NpZ24oVE9wZXJhdG9yIG9w
LCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIFRTb3VyY2VMb2MpOwot
ICAgIFRJbnRlcm1UeXBlZCogYWRkSW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJh
c2UsIFRJbnRlcm1UeXBlZCogaW5kZXgsIFRTb3VyY2VMb2MpOwotICAgIFRJbnRlcm1UeXBlZCog
YWRkVW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIGNoaWxkLCBUU291cmNlTG9j
LCBUU3ltYm9sVGFibGUmKTsKLSAgICBUSW50ZXJtQWdncmVnYXRlKiBncm93QWdncmVnYXRlKFRJ
bnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIFRTb3VyY2VMb2MpOwotICAgIFRJ
bnRlcm1BZ2dyZWdhdGUqIG1ha2VBZ2dyZWdhdGUoVEludGVybU5vZGUqIG5vZGUsIFRTb3VyY2VM
b2MpOwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1O
b2RlKiwgVE9wZXJhdG9yLCBUU291cmNlTG9jKTsKLSAgICBUSW50ZXJtTm9kZSogIGFkZFNlbGVj
dGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlUGFpciBjb2RlLCBUU291cmNlTG9j
KTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZFNlbGVjdGlvbihUSW50ZXJtVHlwZWQqIGNvbmQsIFRJ
bnRlcm1UeXBlZCogdHJ1ZUJsb2NrLCBUSW50ZXJtVHlwZWQqIGZhbHNlQmxvY2ssIFRTb3VyY2VM
b2MpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQ29tbWEoVEludGVybVR5cGVkKiBsZWZ0LCBUSW50
ZXJtVHlwZWQqIHJpZ2h0LCBUU291cmNlTG9jKTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
YWRkQ29uc3RhbnRVbmlvbihDb25zdGFudFVuaW9uKiwgY29uc3QgVFR5cGUmLCBUU291cmNlTG9j
KTsKLSAgICBUSW50ZXJtVHlwZWQqIHByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUsIFRJ
bnRlcm1Db25zdGFudFVuaW9uKikgOwotICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoVFNvdXJjZUxv
YywgVEludGVybU5vZGUqLCBDb25zdGFudFVuaW9uKiwgVE9wZXJhdG9yLCBUU3ltYm9sVGFibGUm
LCBUVHlwZSwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtID0gZmFsc2UpOyAgICAgICAgCi0gICAg
VEludGVybU5vZGUqIGFkZExvb3AoVEludGVybU5vZGUqLCBUSW50ZXJtTm9kZSosIFRJbnRlcm1U
eXBlZCosIFRJbnRlcm1UeXBlZCosIGJvb2wgdGVzdEZpcnN0LCBUU291cmNlTG9jKTsKLSAgICBU
SW50ZXJtQnJhbmNoKiBhZGRCcmFuY2goVE9wZXJhdG9yLCBUU291cmNlTG9jKTsKLSAgICBUSW50
ZXJtQnJhbmNoKiBhZGRCcmFuY2goVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUU291cmNlTG9j
KTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZFN3aXp6bGUoVFZlY3RvckZpZWxkcyYsIFRTb3VyY2VM
b2MpOwotICAgIGJvb2wgcG9zdFByb2Nlc3MoVEludGVybU5vZGUqLCBFU2hMYW5ndWFnZSk7Ci0J
dm9pZCByZW1vdmUoVEludGVybU5vZGUqKTsKLSAgICB2b2lkIG91dHB1dFRyZWUoVEludGVybU5v
ZGUqKTsKLSAgICAKLXByb3RlY3RlZDoKLSAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwotCi1wcml2
YXRlOgotICAgIHZvaWQgb3BlcmF0b3I9KFRJbnRlcm1lZGlhdGUmKTsgLy8gcHJldmVudCBhc3Np
Z25tZW50cwotfTsKLQotI2VuZGlmIC8vIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCklu
ZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9j
b21waWxlci9vc2luY2x1ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9fT1NJTkNMVURFX0gKLSNkZWZpbmUgX19PU0lOQ0xV
REVfSAotCi0vLwotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGNvbnRhaW5zIHRoZSB3aW5kb3cncyBz
cGVjaWZpYyBkYXRhdHlwZXMgYW5kCi0vLyBkZWNsYXJlcyBhbnkgd2luZG93cyBzcGVjaWZpYyBm
dW5jdGlvbnMuCi0vLwotCi0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQot
I2RlZmluZSBBTkdMRV9PU19XSU4KLSNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fbGludXhfXykgfHwgXAotICAgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
X09wZW5CU0RfXykgfHwgXAotICAgICAgZGVmaW5lZChfX3N1bikKLSNkZWZpbmUgQU5HTEVfT1Nf
UE9TSVgKLSNlbHNlCi0jZXJyb3IgVW5zdXBwb3J0ZWQgcGxhdGZvcm0uCi0jZW5kaWYKLQotI2lm
IGRlZmluZWQoQU5HTEVfT1NfV0lOKQotI2RlZmluZSBTVFJJQ1QKLSNkZWZpbmUgVkNfRVhUUkFM
RUFOIDEKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lY
KQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KLSNpbmNsdWRl
IDxlcnJuby5oPgotI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KLQotI2luY2x1ZGUgImNvbXBpbGVy
L2RlYnVnLmgiCi0KLS8vCi0vLyBUaHJlYWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCi0vLwot
I2lmIGRlZmluZWQoQU5HTEVfT1NfV0lOKQotdHlwZWRlZiBEV09SRCBPU19UTFNJbmRleDsKLSNk
ZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggKFRMU19PVVRfT0ZfSU5ERVhFUykKLSNlbGlmIGRl
ZmluZWQoQU5HTEVfT1NfUE9TSVgpCi10eXBlZGVmIHVuc2lnbmVkIGludCBPU19UTFNJbmRleDsK
LSNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggMHhGRkZGRkZGRgotI2VuZGlmICAvLyBBTkdM
RV9PU19XSU4KLQotT1NfVExTSW5kZXggT1NfQWxsb2NUTFNJbmRleCgpOwotYm9vbCBPU19TZXRU
TFNWYWx1ZShPU19UTFNJbmRleCBuSW5kZXgsIHZvaWQgKmxwdlZhbHVlKTsKLWJvb2wgT1NfRnJl
ZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRleCk7Ci0KLWlubGluZSB2b2lkKiBPU19HZXRUTFNW
YWx1ZShPU19UTFNJbmRleCBuSW5kZXgpCi17Ci0gICAgYXNzZXJ0KG5JbmRleCAhPSBPU19JTlZB
TElEX1RMU19JTkRFWCk7Ci0jaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCi0gICAgcmV0dXJuIFRs
c0dldFZhbHVlKG5JbmRleCk7Ci0jZWxpZiBkZWZpbmVkKEFOR0xFX09TX1BPU0lYKQotICAgIHJl
dHVybiBwdGhyZWFkX2dldHNwZWNpZmljKG5JbmRleCk7Ci0jZW5kaWYgIC8vIEFOR0xFX09TX1dJ
TgotfQotCi0jZW5kaWYgLy8gX19PU0lOQ0xVREVfSApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L29zc291cmNlX3Bvc2l4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvb3Nz
b3VyY2VfcG9zaXguY3BwCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9v
c3NvdXJjZV9wb3NpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8KLS8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcG9zaXggc3BlY2lm
aWMgZnVuY3Rpb25zCi0vLwotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgotCi0jaWYg
IWRlZmluZWQoQU5HTEVfT1NfUE9TSVgpCi0jZXJyb3IgVHJ5aW5nIHRvIGJ1aWxkIGEgcG9zaXgg
c3BlY2lmaWMgZmlsZSBpbiBhIG5vbi1wb3NpeCBidWlsZC4KLSNlbmRpZgotCi0vLwotLy8gVGhy
ZWFkIExvY2FsIFN0b3JhZ2UgT3BlcmF0aW9ucwotLy8KLU9TX1RMU0luZGV4IE9TX0FsbG9jVExT
SW5kZXgoKQotewotICAgIHB0aHJlYWRfa2V5X3QgcFBvb2xJbmRleDsKLQotICAgIC8vCi0gICAg
Ly8gQ3JlYXRlIGdsb2JhbCBwb29sIGtleS4KLSAgICAvLwotICAgIGlmICgocHRocmVhZF9rZXlf
Y3JlYXRlKCZwUG9vbEluZGV4LCBOVUxMKSkgIT0gMCkgewotICAgICAgICBhc3NlcnQoMCAmJiAi
T1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3Jh
Z2UiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAg
cmV0dXJuIHBQb29sSW5kZXg7Ci0gICAgfQotfQotCi0KLWJvb2wgT1NfU2V0VExTVmFsdWUoT1Nf
VExTSW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSkKLXsKLSAgICBpZiAobkluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1
ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaWYgKHB0aHJlYWRfc2V0c3BlY2lmaWMobkluZGV4LCBscHZWYWx1ZSkgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LQotYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KQotewotICAgIGlmIChu
SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9T
X1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIERlbGV0ZSB0aGUgZ2xvYmFsIHBvb2wga2V5Lgot
ICAgIC8vCi0gICAgaWYgKHB0aHJlYWRfa2V5X2RlbGV0ZShuSW5kZXgpID09IDApCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotfQpJbmRleDog
QU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL29zc291cmNlX3dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5o
IgotLy8KLS8vIFRoaXMgZmlsZSBjb250YWlucyBjb250YWlucyB0aGUgd2luZG93J3Mgc3BlY2lm
aWMgZnVuY3Rpb25zCi0vLwotCi0jaWYgIWRlZmluZWQoQU5HTEVfT1NfV0lOKQotI2Vycm9yIFRy
eWluZyB0byBidWlsZCBhIHdpbmRvd3Mgc3BlY2lmaWMgZmlsZSBpbiBhIG5vbiB3aW5kb3dzIGJ1
aWxkLgotI2VuZGlmCi0KLQotLy8KLS8vIFRocmVhZCBMb2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMK
LS8vCi1PU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCkKLXsKLQlEV09SRCBkd0luZGV4ID0g
VGxzQWxsb2MoKTsKLQlpZiAoZHdJbmRleCA9PSBUTFNfT1VUX09GX0lOREVYRVMpIHsKLQkJYXNz
ZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9jYXRlIFRocmVhZCBM
b2NhbCBTdG9yYWdlIik7Ci0JCXJldHVybiBPU19JTlZBTElEX1RMU19JTkRFWDsKLQl9Ci0KLQly
ZXR1cm4gZHdJbmRleDsKLX0KLQotCi1ib29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5J
bmRleCwgdm9pZCAqbHB2VmFsdWUpCi17Ci0JaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19J
TkRFWCkgewotCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5k
ZXgiKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxw
dlZhbHVlKSkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7Ci19Ci0KLQot
Ym9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KQotewotCWlmIChuSW5kZXgg
PT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLQkJYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVl
KCk6IEludmFsaWQgVExTIEluZGV4Iik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoVGxz
RnJlZShuSW5kZXgpKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCi0JCXJldHVybiBmYWxzZTsKLX0K
SW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wYXJzZUNvbnN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5H
TEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzOCAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxw
ZXIuaCIKLQotLy8KLS8vIFVzZSB0aGlzIGNsYXNzIHRvIGNhcnJ5IGFsb25nIGRhdGEgZnJvbSBu
b2RlIHRvIG5vZGUgaW4gCi0vLyB0aGUgdHJhdmVyc2FsCi0vLwotY2xhc3MgVENvbnN0VHJhdmVy
c2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFRDb25zdFRyYXZl
cnNlcihDb25zdGFudFVuaW9uKiBjVW5pb24sIGJvb2wgc2luZ2xlQ29uc3RQYXJhbSwgVE9wZXJh
dG9yIGNvbnN0cnVjdFR5cGUsIFRJbmZvU2luayYgc2luaywgVFN5bWJvbFRhYmxlJiBzeW1UYWJs
ZSwgVFR5cGUmIHQpCi0gICAgICAgIDogZXJyb3IoZmFsc2UpLAotICAgICAgICAgIGluZGV4KDAp
LAotICAgICAgICAgIHVuaW9uQXJyYXkoY1VuaW9uKSwKLSAgICAgICAgICB0eXBlKHQpLAotICAg
ICAgICAgIGNvbnN0cnVjdG9yVHlwZShjb25zdHJ1Y3RUeXBlKSwKLSAgICAgICAgICBzaW5nbGVD
b25zdGFudFBhcmFtKHNpbmdsZUNvbnN0UGFyYW0pLAotICAgICAgICAgIGluZm9TaW5rKHNpbmsp
LAotICAgICAgICAgIHN5bWJvbFRhYmxlKHN5bVRhYmxlKSwKLSAgICAgICAgICBzaXplKDApLAot
ICAgICAgICAgIGlzTWF0cml4KGZhbHNlKSwKLSAgICAgICAgICBtYXRyaXhTaXplKDApIHsKLSAg
ICB9Ci0KLSAgICBib29sIGVycm9yOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNv
bnN0YW50VW5pb24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJt
QmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkq
KTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9u
Kik7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0
ZSopOwotICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOwotICAg
IGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKLQotICAgIGlu
dCBpbmRleDsKLSAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5OwotICAgIFRUeXBlIHR5cGU7
Ci0gICAgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZTsKLSAgICBib29sIHNpbmdsZUNvbnN0YW50
UGFyYW07Ci0gICAgVEluZm9TaW5rJiBpbmZvU2luazsKLSAgICBUU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlOwotICAgIGludCBzaXplOyAvLyBzaXplIG9mIHRoZSBjb25zdHJ1Y3RvciAoIDQgZm9y
IHZlYzQpCi0gICAgYm9vbCBpc01hdHJpeDsKLSAgICBpbnQgbWF0cml4U2l6ZTsgLy8gZGltZW5z
aW9uIG9mIHRoZSBtYXRyaXggKG5vbWluYWwgc2l6ZSBhbmQgbm90IHRoZSBpbnN0YW5jZSBzaXpl
KQotfTsKLQotLy8KLS8vIFRoZSByZXN0IG9mIHRoZSBmaWxlIGFyZSB0aGUgdHJhdmVyc2FsIGZ1
bmN0aW9ucy4gIFRoZSBsYXN0IG9uZQotLy8gaXMgdGhlIG9uZSB0aGF0IHN0YXJ0cyB0aGUgdHJh
dmVyc2FsLgotLy8KLS8vIFJldHVybiB0cnVlIGZyb20gaW50ZXJpb3Igbm9kZXMgdG8gaGF2ZSB0
aGUgZXh0ZXJuYWwgdHJhdmVyc2FsCi0vLyBjb250aW51ZSBvbiB0byBjaGlsZHJlbi4gIElmIHlv
dSBwcm9jZXNzIGNoaWxkcmVuIHlvdXJzZWxmLAotLy8gcmV0dXJuIGZhbHNlLgotLy8KLQotdm9p
ZCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0g
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiU3ltYm9sIE5v
ZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiLCBub2RlLT5nZXRMaW5lKCkpOwotICAg
IHJldHVybjsKLQotfQotCi1ib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgVFF1YWxpZmllciBxdWFsaWZpZXIg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCk7Ci0gICAgCi0gICAgaWYgKHF1YWxpZmll
ciAhPSBFdnFDb25zdCkgewotICAgICAgICBUU3RyaW5nIGJ1ZjsKLSAgICAgICAgYnVmLmFwcGVu
ZCgiJ2NvbnN0cnVjdG9yJyA6IGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8gIik7Ci0gICAgICAg
IGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhFcnJvciwgYnVmLmNfc3RyKCksIG5vZGUtPmdldExpbmUoKSk7
Ci0gICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgCi0gICAgfQot
Ci0gICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJCaW5hcnkg
Tm9kZSBmb3VuZCBpbiBjb25zdGFudCBjb25zdHJ1Y3RvciIsIG5vZGUtPmdldExpbmUoKSk7Ci0g
ICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIFRTdHJpbmcgYnVm
OwotICAgIGJ1Zi5hcHBlbmQoIidjb25zdHJ1Y3RvcicgOiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50
IHRvICIpOwotICAgIGJ1Zi5hcHBlbmQodHlwZS5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBidWYuY19zdHIoKSwgbm9kZS0+Z2V0
TGluZSgpKTsKLSAgICBlcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOyAgCi19Ci0KLWJv
b2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFn
Z3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUtPmlzQ29uc3RydWN0b3IoKSAmJiBub2Rl
LT5nZXRPcCgpICE9IEVPcENvbW1hKSB7Ci0gICAgICAgIFRTdHJpbmcgYnVmOwotICAgICAgICBi
dWYuYXBwZW5kKCInY29uc3RydWN0b3InIDogYXNzaWduaW5nIG5vbi1jb25zdGFudCB0byAiKTsK
LSAgICAgICAgYnVmLmFwcGVuZCh0eXBlLmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEVycm9yLCBidWYuY19zdHIoKSwgbm9kZS0+Z2V0
TGluZSgpKTsKLSAgICAgICAgZXJyb3IgPSB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7ICAK
LSAgICB9Ci0KLSAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMCkgewotICAg
ICAgICBlcnJvciA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBi
b29sIGZsYWcgPSBub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxICYmIG5vZGUtPmdldFNl
cXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgaWYg
KGZsYWcpIAotICAgIHsKLSAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IHRydWU7IAotICAg
ICAgICBjb25zdHJ1Y3RvclR5cGUgPSBub2RlLT5nZXRPcCgpOwotICAgICAgICBzaXplID0gbm9k
ZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKLQotICAgICAgICBpZiAobm9kZS0+Z2V0VHlw
ZSgpLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIGlzTWF0cml4ID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG1hdHJpeFNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKLSAgICAg
ICAgfQotICAgIH0gICAgICAgCi0KLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Ig
cCA9IG5vZGUtPmdldFNlcXVlbmNlKCkuYmVnaW4oKTsgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHAgIT0gbm9kZS0+Z2V0U2VxdWVuY2UoKS5lbmQoKTsgcCsrKSB7Ci0KLSAg
ICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wQ29tbWEpCi0gICAgICAgICAgICBpbmRleCA9
IDA7ICAgICAgICAgICAKLQotICAgICAgICAoKnApLT50cmF2ZXJzZSh0aGlzKTsKLSAgICB9ICAg
Ci0gICAgaWYgKGZsYWcpIAotICAgIHsKLSAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZh
bHNlOyAgIAotICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBFT3BOdWxsOwotICAgICAgICBzaXpl
ID0gMDsKLSAgICAgICAgaXNNYXRyaXggPSBmYWxzZTsKLSAgICAgICAgbWF0cml4U2l6ZSA9IDA7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZp
c2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQotewotICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIlNlbGVjdGlvbiBO
b2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIiwgbm9kZS0+Z2V0TGluZSgpKTsKLSAg
ICBlcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRDb25zdFRyYXZl
cnNlcjo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQotewot
ICAgIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5ID0gdW5pb25BcnJheTsKLSAgICBpbnQg
aW5zdGFuY2VTaXplID0gdHlwZS5nZXRPYmplY3RTaXplKCk7Ci0KLSAgICBpZiAoaW5kZXggPj0g
aW5zdGFuY2VTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNpbmdsZUNvbnN0YW50
UGFyYW0pIHsKLSAgICAgICAgaW50IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpOwotICAgIAotICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2Rl
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBzaXpl
OyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaW5kZXhdID0gcmln
aHRVbmlvbkFycmF5W2ldOwotCi0gICAgICAgICAgICAoaW5kZXgpKys7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICBpbnQgdG90YWxTaXplID0gaW5kZXggKyBzaXplOwotICAgICAg
ICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpOwotICAgICAgICBpZiAoIWlzTWF0cml4KSB7Ci0gICAgICAgICAgICBpbnQgY291bnQg
PSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmln
aHRVbmlvbkFycmF5W2NvdW50XTsKLQotICAgICAgICAgICAgICAgIChpbmRleCkrKzsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVj
dFNpemUoKSA+IDEpCi0gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7ICAvLyBmb3IgbWF0cml4IGNvbnN0cnVjdG9ycwotICAgICAgICAg
ICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgICAgIGludCBlbGVtZW50ID0gaW5kZXg7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpID0gaW5kZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgewotICAgICAg
ICAgICAgICAgIGlmIChpID49IGluc3RhbmNlU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50IC0gaSA9PSAwIHx8IChpIC0gZWxlbWVu
dCkgJSAobWF0cml4U2l6ZSArIDEpID09IDAgKQotICAgICAgICAgICAgICAgICAgICBsZWZ0VW5p
b25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJheVtjb3VudF07Ci0gICAgICAgICAgICAgICAgZWxz
ZSAKLSAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYp
OwotCi0gICAgICAgICAgICAgICAgKGluZGV4KSsrOwotCi0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPiAxKQotICAgICAgICAgICAgICAgICAgICBj
b3VudCsrOyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LX0KLQotYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVy
bUxvb3AqIG5vZGUpCi17Ci0gICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCAiTG9vcCBOb2RlIGZvdW5kIGluIGNvbnN0YW50IGNvbnN0cnVjdG9yIiwgbm9kZS0+
Z2V0TGluZSgpKTsKLSAgICBlcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFu
Y2gqIG5vZGUpCi17Ci0gICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCAiQnJhbmNoIE5vZGUgZm91bmQgaW4gY29uc3RhbnQgY29uc3RydWN0b3IiLCBub2RlLT5n
ZXRMaW5lKCkpOwotICAgIGVycm9yID0gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8v
Ci0vLyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdG8gY2FsbCBleHRlcm5hbGx5IHRvIHN0YXJ0
IHRoZSB0cmF2ZXJzYWwuCi0vLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5pdGlhbGl6
ZWQgdG8gMCB0byBza2lwIHByb2Nlc3Npbmcgb2YgdGhhdAotLy8gdHlwZSBvZiBub2RlLiAgSXQn
cyBjaGlsZHJlbiB3aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KLS8vCi1ib29sIFRJbnRlcm1lZGlh
dGU6OnBhcnNlQ29uc3RUcmVlKFRTb3VyY2VMb2MgbGluZSwgVEludGVybU5vZGUqIHJvb3QsIENv
bnN0YW50VW5pb24qIHVuaW9uQXJyYXksIFRPcGVyYXRvciBjb25zdHJ1Y3RvclR5cGUsIFRTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUsIFRUeXBlIHQsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbSkK
LXsKLSAgICBpZiAocm9vdCA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBUQ29u
c3RUcmF2ZXJzZXIgaXQodW5pb25BcnJheSwgc2luZ2xlQ29uc3RhbnRQYXJhbSwgY29uc3RydWN0
b3JUeXBlLCBpbmZvU2luaywgc3ltYm9sVGFibGUsIHQpOwotCi0gICAgcm9vdC0+dHJhdmVyc2Uo
Jml0KTsKLSAgICBpZiAoaXQuZXJyb3IpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3VuaXN0
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci91bmlzdGQuaAkocmV2aXNpb24g
NzQ2NTgpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvdW5pc3RkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEgKzAsMCBAQAotLy8gVGhpcyBpcyBhIE5VTEwgZmlsZSBhbmQgaXMgbWVhbnQgdG8gYmUgZW1w
dHkKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCShyZXZpc2lvbiA3
NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDczNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdo
dCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5W
SURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9m
IHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWlu
c3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElB
IHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91
IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3Rh
bGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBj
b25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcg
dGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBw
ZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0
cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJl
IiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJ
QSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQv
b3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBO
VklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2Yg
TlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1l
cnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1O
ZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBO
VklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5
IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHBy
ZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBi
dXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdl
ZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRo
ZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxp
Y2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklE
RUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhP
VVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlO
RlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklO
QVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBC
RSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFS
WSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8s
IExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwg
TU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUs
IEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0Us
IEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vLwotLy8gYXRvbS5jCi0vLwot
Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJp
bmcuaD4KLQotI2luY2x1ZGUgImNvbXBpbGVyL2RlYnVnLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgotCi0jdW5kZWYgbWFsbG9jCi0jdW5kZWYgcmVhbGxv
YwotI3VuZGVmIGZyZWUKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTdHJpbmcgdGFibGU6
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLSAgICBpbnQg
dmFsOwotICAgIGNvbnN0IGNoYXIgKnN0cjsKLX0gdG9rZW5zW10gPSB7Ci0gICAgeyBDUFBfQU5E
X09QLCAgICAgICAgICImJiIgfSwKLSAgICB7IENQUF9BTkRfQVNTSUdOLCAgICAgIiY9IiB9LAot
ICAgIHsgQ1BQX1NVQl9BU1NJR04sICAgICAiLT0iIH0sCi0gICAgeyBDUFBfTU9EX0FTU0lHTiwg
ICAgICIlPSIgfSwKLSAgICB7IENQUF9BRERfQVNTSUdOLCAgICAgIis9IiB9LAotICAgIHsgQ1BQ
X0RJVl9BU1NJR04sICAgICAiLz0iIH0sCi0gICAgeyBDUFBfTVVMX0FTU0lHTiwgICAgICIqPSIg
fSwKLSAgICB7IENQUF9SSUdIVF9CUkFDS0VULCAgIjo+IiB9LAotICAgIHsgQ1BQX0VRX09QLCAg
ICAgICAgICAiPT0iIH0sCi0gICAgeyBDUFBfWE9SX09QLCAgICAgICAgICJeXiIgfSwgCi0gICAg
eyBDUFBfWE9SX0FTU0lHTiwgICAgICJePSIgfSwgCi0gICAgeyBDUFBfRkxPQVRDT05TVEFOVCwg
ICI8ZmxvYXQtY29uc3Q+IiB9LAotICAgIHsgQ1BQX0dFX09QLCAgICAgICAgICAiPj0iIH0sCi0g
ICAgeyBDUFBfUklHSFRfT1AsICAgICAgICI+PiIgfSwKLSAgICB7IENQUF9SSUdIVF9BU1NJR04s
ICAgIj4+PSIgfSwgCi0gICAgeyBDUFBfSURFTlRJRklFUiwgICAgICI8aWRlbnQ+IiB9LAotICAg
IHsgQ1BQX0lOVENPTlNUQU5ULCAgICAiPGludC1jb25zdD4iIH0sCi0gICAgeyBDUFBfTEVfT1As
ICAgICAgICAgICI8PSIgfSwKLSAgICB7IENQUF9MRUZUX09QLCAgICAgICAgIjw8IiB9LAotICAg
IHsgQ1BQX0xFRlRfQVNTSUdOLCAgICAiPDw9IiB9LAotICAgIHsgQ1BQX0xFRlRfQlJBQ0tFVCwg
ICAiPDoiIH0sCi0gICAgeyBDUFBfTEVGVF9CUkFDRSwgICAgICI8JSIgfSwgCi0gICAgeyBDUFBf
REVDX09QLCAgICAgICAgICItLSIgfSwKLSAgICB7IENQUF9SSUdIVF9CUkFDRSwgICAgIiU+IiB9
LCAKLSAgICB7IENQUF9ORV9PUCwgICAgICAgICAgIiE9IiB9LAotICAgIHsgQ1BQX09SX09QLCAg
ICAgICAgICAifHwiIH0sCi0gICAgeyBDUFBfT1JfQVNTSUdOLCAgICAgICJ8PSIgfSwgCi0gICAg
eyBDUFBfSU5DX09QLCAgICAgICAgICIrKyIgfSwKLSAgICB7IENQUF9TVFJDT05TVEFOVCwgICAg
IjxzdHJpbmctY29uc3Q+IiB9LAotICAgIHsgQ1BQX1RZUEVJREVOVElGSUVSLCAiPHR5cGUtaWRl
bnQ+IiB9LAotfTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTdHJpbmcgdGFibGU6IC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotCi0jZGVmaW5lIElOSVRfU1RSSU5HX1RBQkxFX1NJWkUgMTYz
ODQKLQotdHlwZWRlZiBzdHJ1Y3QgU3RyaW5nVGFibGVfUmVjIHsKLSAgICBjaGFyICpzdHJpbmdz
OwotICAgIGludCBuZXh0RnJlZTsKLSAgICBpbnQgc2l6ZTsKLX0gU3RyaW5nVGFibGU7Ci0KLS8q
Ci0gKiBJbml0U3RyaW5nVGFibGUoKSAtIEluaXRpYWxpemUgdGhlIHN0cmluZyB0YWJsZS4KLSAq
Ci0gKi8KLQotc3RhdGljIGludCBJbml0U3RyaW5nVGFibGUoU3RyaW5nVGFibGUgKnN0YWJsZSkK
LXsKLSAgICBzdGFibGUtPnN0cmluZ3MgPSAoY2hhciAqKSBtYWxsb2MoSU5JVF9TVFJJTkdfVEFC
TEVfU0laRSk7Ci0gICAgaWYgKCFzdGFibGUtPnN0cmluZ3MpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIC8vIFplcm8tdGggb2Zmc2V0IG1lYW5zICJlbXB0eSIgc28gZG9uJ3QgdXNlIGl0LgotICAg
IHN0YWJsZS0+bmV4dEZyZWUgPSAxOwotICAgIHN0YWJsZS0+c2l6ZSA9IElOSVRfU1RSSU5HX1RB
QkxFX1NJWkU7Ci0gICAgcmV0dXJuIDE7Ci19IC8vIEluaXRTdHJpbmdUYWJsZQotCi0vKgotICog
RnJlZVN0cmluZ1RhYmxlKCkgLSBGcmVlIHRoZSBzdHJpbmcgdGFibGUuCi0gKgotICovCi0KLXN0
YXRpYyB2b2lkIEZyZWVTdHJpbmdUYWJsZShTdHJpbmdUYWJsZSAqc3RhYmxlKQotewotICAgIGlm
IChzdGFibGUtPnN0cmluZ3MpCi0gICAgICAgIGZyZWUoc3RhYmxlLT5zdHJpbmdzKTsKLSAgICBz
dGFibGUtPnN0cmluZ3MgPSBOVUxMOwotICAgIHN0YWJsZS0+bmV4dEZyZWUgPSAwOwotICAgIHN0
YWJsZS0+c2l6ZSA9IDA7Ci19IC8vIEZyZWVTdHJpbmdUYWJsZQotCi0vKgotICogSGFzaFN0cmlu
ZygpIC0gSGFzaCBhIHN0cmluZyB3aXRoIHRoZSBiYXNlIGhhc2ggZnVuY3Rpb24uCi0gKgotICov
Ci0KLXN0YXRpYyBpbnQgSGFzaFN0cmluZyhjb25zdCBjaGFyICpzKQotewotICAgIGludCBodmFs
ID0gMDsKLQotICAgIHdoaWxlICgqcykgewotICAgICAgICBodmFsID0gKGh2YWwqMTM1MDcgKyAq
cyoxOTcpIF4gKGh2YWwgPj4gMik7Ci0gICAgICAgIHMrKzsKLSAgICB9Ci0gICAgcmV0dXJuIGh2
YWwgJiAweDdmZmZmZmZmOwotfSAvLyBIYXNoU3RyaW5nCi0KLS8qCi0gKiBIYXNoU3RyaW5nMigp
IC0gSGFzaCBhIHN0cmluZyB3aXRoIHRoZSBpbmNyaW1lbnRpbmcgaGFzaCBmdW5jdGlvbi4KLSAq
Ci0gKi8KLQotc3RhdGljIGludCBIYXNoU3RyaW5nMihjb25zdCBjaGFyICpzKQotewotICAgIGlu
dCBodmFsID0gMDsKLQotICAgIHdoaWxlICgqcykgewotICAgICAgICBodmFsID0gKGh2YWwqNzI5
ICsgKnMqMzcpIF4gKGh2YWwgPj4gMSk7Ci0gICAgICAgIHMrKzsKLSAgICB9Ci0gICAgcmV0dXJu
IGh2YWw7Ci19IC8vIEhhc2hTdHJpbmcyCi0KLS8qCi0gKiBBZGRTdHJpbmcoKSAtIEFkZCBhIHN0
cmluZyB0byBhIHN0cmluZyB0YWJsZS4gIFJldHVybiBpdCdzIG9mZnNldC4KLSAqCi0gKi8KLQot
c3RhdGljIGludCBBZGRTdHJpbmcoU3RyaW5nVGFibGUgKnN0YWJsZSwgY29uc3QgY2hhciAqcykK
LXsKLSAgICBpbnQgbGVuLCBsb2M7Ci0gICAgY2hhciAqc3RyOwotCi0gICAgbGVuID0gKGludCkg
c3RybGVuKHMpOwotICAgIGlmIChzdGFibGUtPm5leHRGcmVlICsgbGVuICsgMSA+PSBzdGFibGUt
PnNpemUpIHsKLSAgICAgICAgYXNzZXJ0KHN0YWJsZS0+c2l6ZSA8IDEwMDAwMDApOwotICAgICAg
ICBzdHIgPSAoY2hhciAqKSBtYWxsb2Moc3RhYmxlLT5zaXplKjIpOwotICAgICAgICBtZW1jcHko
c3RyLCBzdGFibGUtPnN0cmluZ3MsIHN0YWJsZS0+c2l6ZSk7Ci0gICAgICAgIGZyZWUoc3RhYmxl
LT5zdHJpbmdzKTsKLSAgICAgICAgc3RhYmxlLT5zdHJpbmdzID0gc3RyOwotICAgIH0KLSAgICBs
b2MgPSBzdGFibGUtPm5leHRGcmVlOwotICAgIHN0cmNweSgmc3RhYmxlLT5zdHJpbmdzW2xvY10s
IHMpOwotICAgIHN0YWJsZS0+bmV4dEZyZWUgKz0gbGVuICsgMTsKLSAgICByZXR1cm4gbG9jOwot
fSAvLyBBZGRTdHJpbmcKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gSGFzaCB0YWJsZTog
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jZGVmaW5lIElOSVRfSEFTSF9UQUJMRV9TSVpFIDIw
NDcKLSNkZWZpbmUgSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUyAzCi0KLXR5cGVkZWYgc3RydWN0
IEhhc2hFbnRyeV9SZWMgewotICAgIGludCBpbmRleDsgICAgICAvLyBTdHJpbmcgdGFibGUgb2Zm
c2V0IG9mIHN0cmluZyByZXByZXNlbnRhdGlvbgotICAgIGludCB2YWx1ZTsgICAgICAvLyBBdG9t
IChzeW1ib2wpIHZhbHVlCi19IEhhc2hFbnRyeTsKLQotdHlwZWRlZiBzdHJ1Y3QgSGFzaFRhYmxl
X1JlYyB7Ci0gICAgSGFzaEVudHJ5ICplbnRyeTsKLSAgICBpbnQgc2l6ZTsKLSAgICBpbnQgZW50
cmllczsKLSAgICBpbnQgY291bnRzW0hBU0hfVEFCTEVfTUFYX0NPTExJU0lPTlMgKyAxXTsKLX0g
SGFzaFRhYmxlOwotCi0vKgotICogSW5pdEhhc2hUYWJsZSgpIC0gSW5pdGlhbGl6ZSB0aGUgaGFz
aCB0YWJsZS4KLSAqCi0gKi8KLQotc3RhdGljIGludCBJbml0SGFzaFRhYmxlKEhhc2hUYWJsZSAq
aHRhYmxlLCBpbnQgZnNpemUpCi17Ci0gICAgaW50IGlpOwotCi0gICAgaHRhYmxlLT5lbnRyeSA9
IChIYXNoRW50cnkgKikgbWFsbG9jKHNpemVvZihIYXNoRW50cnkpKmZzaXplKTsKLSAgICBpZiAo
IWh0YWJsZS0+ZW50cnkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGh0YWJsZS0+c2l6ZSA9IGZz
aXplOwotICAgIGZvciAoaWkgPSAwOyBpaSA8IGZzaXplOyBpaSsrKSB7Ci0gICAgICAgIGh0YWJs
ZS0+ZW50cnlbaWldLmluZGV4ID0gMDsKLSAgICAgICAgaHRhYmxlLT5lbnRyeVtpaV0udmFsdWUg
PSAwOwotICAgIH0KLSAgICBodGFibGUtPmVudHJpZXMgPSAwOwotICAgIGZvciAoaWkgPSAwOyBp
aSA8PSBIQVNIX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKQotICAgICAgICBodGFibGUtPmNv
dW50c1tpaV0gPSAwOwotICAgIHJldHVybiAxOwotfSAvLyBJbml0SGFzaFRhYmxlCi0KLS8qCi0g
KiBGcmVlSGFzaFRhYmxlKCkgLSBGcmVlIHRoZSBoYXNoIHRhYmxlLgotICoKLSAqLwotCi1zdGF0
aWMgdm9pZCBGcmVlSGFzaFRhYmxlKEhhc2hUYWJsZSAqaHRhYmxlKQotewotICAgIGlmIChodGFi
bGUtPmVudHJ5KQotICAgICAgICBmcmVlKGh0YWJsZS0+ZW50cnkpOwotICAgIGh0YWJsZS0+ZW50
cnkgPSBOVUxMOwotICAgIGh0YWJsZS0+c2l6ZSA9IDA7Ci0gICAgaHRhYmxlLT5lbnRyaWVzID0g
MDsKLX0gLy8gRnJlZUhhc2hUYWJsZQotCi0vKgotICogRW1wdHkoKSAtIFNlZSBpZiBhIGhhc2gg
dGFibGUgZW50cnkgaXMgZW1wdHkuCi0gKgotICovCi0KLXN0YXRpYyBpbnQgRW1wdHkoSGFzaFRh
YmxlICpodGFibGUsIGludCBoYXNobG9jKQotewotICAgIGFzc2VydChoYXNobG9jID49IDAgJiYg
aGFzaGxvYyA8IGh0YWJsZS0+c2l6ZSk7Ci0gICAgaWYgKGh0YWJsZS0+ZW50cnlbaGFzaGxvY10u
aW5kZXggPT0gMCkgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9IGVsc2UgewotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci19IC8vIEVtcHR5Ci0KLS8qCi0gKiBNYXRjaCgpIC0gU2VlIGlmIGEg
aGFzaCB0YWJsZSBlbnRyeSBpcyBtYXRjaGVzIGEgc3RyaW5nLgotICoKLSAqLwotCi1zdGF0aWMg
aW50IE1hdGNoKEhhc2hUYWJsZSAqaHRhYmxlLCBTdHJpbmdUYWJsZSAqc3RhYmxlLCBjb25zdCBj
aGFyICpzLCBpbnQgaGFzaGxvYykKLXsKLSAgICBpbnQgc3RybG9jOwotCi0gICAgc3RybG9jID0g
aHRhYmxlLT5lbnRyeVtoYXNobG9jXS5pbmRleDsKLSAgICBpZiAoIXN0cmNtcChzLCAmc3RhYmxl
LT5zdHJpbmdzW3N0cmxvY10pKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLX0gLy8gTWF0Y2gKLQotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8gQXRvbSB0YWJsZTogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jZGVmaW5lIElO
SVRfQVRPTV9UQUJMRV9TSVpFIDEwMjQKLQotCi1zdHJ1Y3QgQXRvbVRhYmxlX1JlYyB7Ci0gICAg
U3RyaW5nVGFibGUgc3RhYmxlOyAvLyBTdHJpbmcgdGFibGUuCi0gICAgSGFzaFRhYmxlIGh0YWJs
ZTsgICAvLyBIYXNoZXMgc3RyaW5nIHRvIGF0b20gbnVtYmVyIGFuZCB0b2tlbiB2YWx1ZS4gIE11
bHRpcGxlIHN0cmluZ3MgY2FuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHRoZSBz
YW1lIHRva2VuIHZhbHVlIGJ1dCBlYWNoIHVuaXF1ZSBzdHJpbmcgaXMgYSB1bmlxdWUgYXRvbS4K
LSAgICBpbnQgKmFtYXA7ICAgICAgICAgIC8vIE1hcHMgYXRvbSB2YWx1ZSB0byBvZmZzZXQgaW4g
c3RyaW5nIHRhYmxlLiAgQXRvbXMgYWxsIG1hcCB0byB1bmlxdWUKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHN0cmluZ3MgZXhjZXB0IGZvciBzb21lIHVuZGVmaW5lZCB2YWx1ZXMgaW4gdGhl
IGxvd2VyLCBmaXhlZCBwYXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgYXRv
bSB0YWJsZSB0aGF0IG1hcCB0byAiPHVuZGVmaW5lZD4iLiAgVGhlIGxvd2VzdCAyNTYgYXRvbXMK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gc2luZ2xlIGNoYXJhY3Rl
ciBBU0NJSSB2YWx1ZXMgZXhjZXB0IGZvciBhbHBoYW51bWVyaWMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNoYXJhY3RlcnMgYW5kICdfJywgd2hpY2ggY2FuIGJlIG90aGVyIHRva2Vucy4g
IE5leHQgY29tZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhbmd1YWdlIHRva2Vu
cyB3aXRoIHRoZWlyIGF0b20gdmFsdWVzIGVxdWFsIHRvIHRoZSB0b2tlbiB2YWx1ZS4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZW4gY29tZSBwcmVkZWZpbmVkIGF0b21zLCBmb2xsb3dl
ZCBieSB1c2VyIHNwZWNpZmllZCBpZGVudGlmaWVycy4KLSAgICBpbnQgKmFyZXY7ICAgICAgICAg
IC8vIFJldmVyc2VkIGF0b20gZm9yIHN5bWJvbCB0YWJsZSB1c2UuCi0gICAgaW50IG5leHRGcmVl
OwotICAgIGludCBzaXplOwotfTsKLQotc3RhdGljIEF0b21UYWJsZSBsYXRhYmxlID0geyB7IDAg
fSB9OwotQXRvbVRhYmxlICphdGFibGUgPSAmbGF0YWJsZTsKLQotc3RhdGljIGludCBBZGRBdG9t
Rml4ZWQoQXRvbVRhYmxlICphdGFibGUsIGNvbnN0IGNoYXIgKnMsIGludCBhdG9tKTsKLQotLyoK
LSAqIEdyb3dBdG9tVGFibGUoKSAtIEdyb3cgdGhlIGF0b20gdGFibGUgdG8gYXQgbGVhc3QgInNp
emUiIGlmIGl0J3Mgc21hbGxlci4KLSAqCi0gKi8KLQotc3RhdGljIGludCBHcm93QXRvbVRhYmxl
KEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgc2l6ZSkKLXsKLSAgICBpbnQgKm5ld21hcCwgKm5ld3Jl
djsKLQotICAgIGlmIChhdGFibGUtPnNpemUgPCBzaXplKSB7Ci0gICAgICAgIGlmIChhdGFibGUt
PmFtYXApIHsKLSAgICAgICAgICAgIG5ld21hcCA9IHJlYWxsb2MoYXRhYmxlLT5hbWFwLCBzaXpl
b2YoaW50KSpzaXplKTsKLSAgICAgICAgICAgIG5ld3JldiA9IHJlYWxsb2MoYXRhYmxlLT5hcmV2
LCBzaXplb2YoaW50KSpzaXplKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5ld21h
cCA9IG1hbGxvYyhzaXplb2YoaW50KSpzaXplKTsKLSAgICAgICAgICAgIG5ld3JldiA9IG1hbGxv
YyhzaXplb2YoaW50KSpzaXplKTsKLSAgICAgICAgICAgIGF0YWJsZS0+c2l6ZSA9IDA7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFuZXdtYXAgfHwgIW5ld3JldikgewotICAgICAgICAgICAgLyog
ZmFpbGVkIHRvIGdyb3cgLS0gZXJyb3IgKi8KLSAgICAgICAgICAgIGlmIChuZXdtYXApCi0gICAg
ICAgICAgICAgICAgYXRhYmxlLT5hbWFwID0gbmV3bWFwOwotICAgICAgICAgICAgaWYgKG5ld3Jl
dikKLSAgICAgICAgICAgICAgICBhdGFibGUtPmFtYXAgPSBuZXdyZXY7Ci0gICAgICAgICAgICBy
ZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KCZuZXdtYXBbYXRhYmxlLT5zaXpl
XSwgMCwgKHNpemUgLSBhdGFibGUtPnNpemUpICogc2l6ZW9mKGludCkpOwotICAgICAgICBtZW1z
ZXQoJm5ld3JldlthdGFibGUtPnNpemVdLCAwLCAoc2l6ZSAtIGF0YWJsZS0+c2l6ZSkgKiBzaXpl
b2YoaW50KSk7Ci0gICAgICAgIGF0YWJsZS0+YW1hcCA9IG5ld21hcDsKLSAgICAgICAgYXRhYmxl
LT5hcmV2ID0gbmV3cmV2OwotICAgICAgICBhdGFibGUtPnNpemUgPSBzaXplOwotICAgIH0KLSAg
ICByZXR1cm4gMDsKLX0gLy8gR3Jvd0F0b21UYWJsZQotCi0vKgotICogbFJldmVyc2UoKSAtIFJl
dmVyc2UgdGhlIGJvdHRvbSAyMCBiaXRzIG9mIGEgMzIgYml0IGludC4KLSAqCi0gKi8KLQotc3Rh
dGljIGludCBsUmV2ZXJzZShpbnQgZnZhbCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgaW4gPSBmdmFs
OwotICAgIGludCByZXN1bHQgPSAwLCBjbnQgPSAwOwotCi0gICAgd2hpbGUoaW4pIHsKLSAgICAg
ICAgcmVzdWx0IDw8PSAxOwotICAgICAgICByZXN1bHQgfD0gaW4mMTsKLSAgICAgICAgaW4gPj49
IDE7Ci0gICAgICAgIGNudCsrOwotICAgIH0KLQotICAgIC8vIERvbid0IHVzZSBhbGwgMzEgYml0
cy4gIE9uZSBtaWxsaW9uIGF0b21zIGlzIHBsZW50eSBhbmQgc29tZXRpbWVzIHRoZQotICAgIC8v
IHVwcGVyIGJpdHMgYXJlIHVzZWQgZm9yIG90aGVyIHRoaW5ncy4KLQotICAgIGlmIChjbnQgPCAy
MCkKLSAgICAgICAgcmVzdWx0IDw8PSAyMCAtIGNudDsKLSAgICByZXR1cm4gcmVzdWx0OwotfSAv
LyBsUmV2ZXJzZQotCi0vKgotICogQWxsb2NhdGVBdG9tKCkgLSBBbGxvY2F0ZSBhIG5ldyBhdG9t
LiAgQXNzb2NpYXRlZCB3aXRoIHRoZSAidW5kZWZpbmVkIiB2YWx1ZSBvZiAtMS4KLSAqCi0gKi8K
LQotc3RhdGljIGludCBBbGxvY2F0ZUF0b20oQXRvbVRhYmxlICphdGFibGUpCi17Ci0gICAgaWYg
KGF0YWJsZS0+bmV4dEZyZWUgPj0gYXRhYmxlLT5zaXplKQotICAgICAgICBHcm93QXRvbVRhYmxl
KGF0YWJsZSwgYXRhYmxlLT5uZXh0RnJlZSoyKTsKLSAgICBhdGFibGUtPmFtYXBbYXRhYmxlLT5u
ZXh0RnJlZV0gPSAtMTsKLSAgICBhdGFibGUtPmFyZXZbYXRhYmxlLT5uZXh0RnJlZV0gPSBsUmV2
ZXJzZShhdGFibGUtPm5leHRGcmVlKTsKLSAgICBhdGFibGUtPm5leHRGcmVlKys7Ci0gICAgcmV0
dXJuIGF0YWJsZS0+bmV4dEZyZWUgLSAxOwotfSAvLyBBbGxvY2F0ZUF0b20KLQotLyoKLSAqIFNl
dEF0b21WYWx1ZSgpIC0gQWxsb2NhdGUgYSBuZXcgYXRvbSBhc3NvY2lhdGVkIHdpdGggImhhc2hp
bmRleCIuCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIFNldEF0b21WYWx1ZShBdG9tVGFibGUgKmF0
YWJsZSwgaW50IGF0b21udW1iZXIsIGludCBoYXNoaW5kZXgpCi17Ci0gICAgYXRhYmxlLT5hbWFw
W2F0b21udW1iZXJdID0gYXRhYmxlLT5odGFibGUuZW50cnlbaGFzaGluZGV4XS5pbmRleDsKLSAg
ICBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLnZhbHVlID0gYXRvbW51bWJlcjsKLX0g
Ly8gU2V0QXRvbVZhbHVlCi0KLS8qCi0gKiBGaW5kSGFzaExvYygpIC0gRmluZCB0aGUgaGFzaCBs
b2NhdGlvbiBmb3IgdGhpcyBzdHJpbmcuICBSZXR1cm4gLTEgaXQgaGFzaCB0YWJsZSBpcyBmdWxs
LgotICoKLSAqLwotCi1zdGF0aWMgaW50IEZpbmRIYXNoTG9jKEF0b21UYWJsZSAqYXRhYmxlLCBj
b25zdCBjaGFyICpzKQotewotICAgIGludCBoYXNobG9jLCBoYXNoZGVsdGEsIGNvdW50OwotICAg
IGludCBGb3VuZEVtcHR5U2xvdCA9IDA7Ci0gICAgaW50IGNvbGxpc2lvbltIQVNIX1RBQkxFX01B
WF9DT0xMSVNJT05TICsgMV07Ci0KLSAgICBoYXNobG9jID0gSGFzaFN0cmluZyhzKSAlIGF0YWJs
ZS0+aHRhYmxlLnNpemU7Ci0gICAgaWYgKCFFbXB0eSgmYXRhYmxlLT5odGFibGUsIGhhc2hsb2Mp
KSB7Ci0gICAgICAgIGlmIChNYXRjaCgmYXRhYmxlLT5odGFibGUsICZhdGFibGUtPnN0YWJsZSwg
cywgaGFzaGxvYykpCi0gICAgICAgICAgICByZXR1cm4gaGFzaGxvYzsKLSAgICAgICAgY29sbGlz
aW9uWzBdID0gaGFzaGxvYzsKLSAgICAgICAgaGFzaGRlbHRhID0gSGFzaFN0cmluZzIocyk7Ci0g
ICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgd2hpbGUgKGNvdW50IDwgSEFTSF9UQUJMRV9NQVhf
Q09MTElTSU9OUykgewotICAgICAgICAgICAgaGFzaGxvYyA9ICgoaGFzaGxvYyArIGhhc2hkZWx0
YSkgJiAweDdmZmZmZmZmKSAlIGF0YWJsZS0+aHRhYmxlLnNpemU7Ci0gICAgICAgICAgICBpZiAo
IUVtcHR5KCZhdGFibGUtPmh0YWJsZSwgaGFzaGxvYykpIHsKLSAgICAgICAgICAgICAgICBpZiAo
TWF0Y2goJmF0YWJsZS0+aHRhYmxlLCAmYXRhYmxlLT5zdGFibGUsIHMsIGhhc2hsb2MpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNobG9jOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgRm91bmRFbXB0eVNsb3QgPSAxOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY291bnQr
KzsKLSAgICAgICAgICAgIGNvbGxpc2lvbltjb3VudF0gPSBoYXNobG9jOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFGb3VuZEVtcHR5U2xvdCkgewotICAgICAgICAgICAgaWYgKGNwcC0+b3B0
aW9ucy5EdW1wQXRvbVRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgaW50IGlpOwotICAgICAgICAg
ICAgICAgIGNoYXIgc3RyWzIwMF07Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiog
SGFzaCBmYWlsZWQgd2l0aCBtb3JlIHRoYW4gJWQgY29sbGlzaW9ucy4gTXVzdCBpbmNyZWFzZSBo
YXNoIHRhYmxlIHNpemUuICoqKiIsCi0gICAgICAgICAgICAgICAgICAgICAgIEhBU0hfVEFCTEVf
TUFYX0NPTExJU0lPTlMpOwotICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhzdHIpOwot
Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIqKiogTmV3IHN0cmluZyBcIiVzXCIsIGhh
c2g9JTA0eCwgZGVsdGE9JTA0eCIsIHMsIGNvbGxpc2lvblswXSwgaGFzaGRlbHRhKTsKLSAgICAg
ICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coc3RyKTsKLSAgICAgICAgICAgICAgICBmb3IgKGlp
ID0gMDsgaWkgPD0gSEFTSF9UQUJMRV9NQVhfQ09MTElTSU9OUzsgaWkrKykgewotICAgICAgICAg
ICAgICAgICAgICBzcHJpbnRmKHN0ciwgIioqKiBDb2xsaWRlcyBvbiB0cnkgJWQgYXQgaGFzaCBl
bnRyeSAlMDR4IHdpdGggXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpICsg
MSwgY29sbGlzaW9uW2lpXSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIGF0YWJsZS0+aHRhYmxlLmVu
dHJ5W2NvbGxpc2lvbltpaV1dLnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIENQUFNoSW5m
b0xvZ01zZyhzdHIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiAtMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF0YWJsZS0+aHRh
YmxlLmNvdW50c1tjb3VudF0rKzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGFzaGxv
YzsKLX0gLy8gRmluZEhhc2hMb2MKLQotLyoKLSAqIEluY3JlYXNlSGFzaFRhYmxlU2l6ZSgpCi0g
KgotICovCi0KLXN0YXRpYyBpbnQgSW5jcmVhc2VIYXNoVGFibGVTaXplKEF0b21UYWJsZSAqYXRh
YmxlKQotewotICAgIGludCBpaSwgc3RybG9jLCBvbGRoYXNobG9jLCB2YWx1ZSwgc2l6ZTsKLSAg
ICBBdG9tVGFibGUgb2xkdGFibGU7Ci0gICAgY2hhciAqczsKLQotICAgIC8vIFNhdmUgdGhlIG9s
ZCBhdG9tIHRhYmxlIGFuZCBjcmVhdGUgYSBuZXcgb25lOgotCi0gICAgb2xkdGFibGUgPSAqYXRh
YmxlOwotICAgIHNpemUgPSBvbGR0YWJsZS5odGFibGUuc2l6ZSoyICsgMTsKLSAgICBpZiAoIUlu
aXRBdG9tVGFibGUoYXRhYmxlLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBB
ZGQgYWxsIHRoZSBleGlzdGluZyB2YWx1ZXMgdG8gdGhlIG5ldyBhdG9tIHRhYmxlIHByZXNlcnZp
bmcgdGhlaXIgYXRvbSB2YWx1ZXM6Ci0KLSAgICBmb3IgKGlpID0gYXRhYmxlLT5uZXh0RnJlZTsg
aWkgPCBvbGR0YWJsZS5uZXh0RnJlZTsgaWkrKykgewotICAgICAgICBzdHJsb2MgPSBvbGR0YWJs
ZS5hbWFwW2lpXTsKLSAgICAgICAgcyA9ICZvbGR0YWJsZS5zdGFibGUuc3RyaW5nc1tzdHJsb2Nd
OwotICAgICAgICBvbGRoYXNobG9jID0gRmluZEhhc2hMb2MoJm9sZHRhYmxlLCBzKTsKLSAgICAg
ICAgYXNzZXJ0KG9sZGhhc2hsb2MgPj0gMCk7Ci0gICAgICAgIHZhbHVlID0gb2xkdGFibGUuaHRh
YmxlLmVudHJ5W29sZGhhc2hsb2NdLnZhbHVlOwotICAgICAgICBBZGRBdG9tRml4ZWQoYXRhYmxl
LCBzLCB2YWx1ZSk7Ci0gICAgfQotICAgIEZyZWVBdG9tVGFibGUoJm9sZHRhYmxlKTsKLSAgICBy
ZXR1cm4gMTsKLX0gLy8gSW5jcmVhc2VIYXNoVGFibGVTaXplCi0KLS8qCi0gKiBMb29rVXBBZGRT
dHJpbmdIYXNoKCkgLSBMb29rdXAgYSBzdHJpbmcgaW4gdGhlIGhhc2ggdGFibGUuICBJZiBpdCdz
IG5vdCB0aGVyZSwgYWRkIGl0IGFuZAotICogICAgICAgIGluaXRpYWxpemUgdGhlIGF0b20gdmFs
dWUgaW4gdGhlIGhhc2ggdGFibGUgdG8gMC4gIFJldHVybiB0aGUgaGFzaCB0YWJsZSBpbmRleC4K
LSAqLwotCi1zdGF0aWMgaW50IExvb2tVcEFkZFN0cmluZ0hhc2goQXRvbVRhYmxlICphdGFibGUs
IGNvbnN0IGNoYXIgKnMpCi17Ci0gICAgaW50IGhhc2hsb2MsIHN0cmxvYzsKLQotICAgIHdoaWxl
KDEpIHsKLSAgICAgICAgaGFzaGxvYyA9IEZpbmRIYXNoTG9jKGF0YWJsZSwgcyk7Ci0gICAgICAg
IGlmIChoYXNobG9jID49IDApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgSW5jcmVhc2VI
YXNoVGFibGVTaXplKGF0YWJsZSk7Ci0gICAgfQotCi0gICAgaWYgKEVtcHR5KCZhdGFibGUtPmh0
YWJsZSwgaGFzaGxvYykpIHsKLSAgICAgICAgYXRhYmxlLT5odGFibGUuZW50cmllcysrOwotICAg
ICAgICBzdHJsb2MgPSBBZGRTdHJpbmcoJmF0YWJsZS0+c3RhYmxlLCBzKTsKLSAgICAgICAgYXRh
YmxlLT5odGFibGUuZW50cnlbaGFzaGxvY10uaW5kZXggPSBzdHJsb2M7Ci0gICAgICAgIGF0YWJs
ZS0+aHRhYmxlLmVudHJ5W2hhc2hsb2NdLnZhbHVlID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGhh
c2hsb2M7Ci19IC8vIExvb2tVcEFkZFN0cmluZ0hhc2gKLQotLyoKLSAqIExvb2tVcEFkZFN0cmlu
ZygpIC0gTG9va3VwIGEgc3RyaW5nIGluIHRoZSBoYXNoIHRhYmxlLiAgSWYgaXQncyBub3QgdGhl
cmUsIGFkZCBpdCBhbmQKLSAqICAgICAgICBpbml0aWFsaXplIHRoZSBhdG9tIHZhbHVlIGluIHRo
ZSBoYXNoIHRhYmxlIHRvIHRoZSBuZXh0IGF0b20gbnVtYmVyLgotICogICAgICAgIFJldHVybiB0
aGUgYXRvbSB2YWx1ZSBvZiBzdHJpbmcuCi0gKi8KLQotaW50IExvb2tVcEFkZFN0cmluZyhBdG9t
VGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKLXsKLSAgICBpbnQgaGFzaGluZGV4LCBhdG9t
OwotCi0gICAgaGFzaGluZGV4ID0gTG9va1VwQWRkU3RyaW5nSGFzaChhdGFibGUsIHMpOwotICAg
IGF0b20gPSBhdGFibGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLnZhbHVlOwotICAgIGlmIChh
dG9tID09IDApIHsKLSAgICAgICAgYXRvbSA9IEFsbG9jYXRlQXRvbShhdGFibGUpOwotICAgICAg
ICBTZXRBdG9tVmFsdWUoYXRhYmxlLCBhdG9tLCBoYXNoaW5kZXgpOwotICAgIH0KLSAgICByZXR1
cm4gYXRvbTsKLX0gLy8gTG9va1VwQWRkU3RyaW5nCi0KLS8qCi0gKiBHZXRBdG9tU3RyaW5nKCkK
LSAqCi0gKi8KLQotY29uc3QgIGNoYXIgKkdldEF0b21TdHJpbmcoQXRvbVRhYmxlICphdGFibGUs
IGludCBhdG9tKQotewotICAgIGludCBzb2Zmc2V0OwotCi0gICAgaWYgKGF0b20gPiAwICYmIGF0
b20gPCBhdGFibGUtPm5leHRGcmVlKSB7Ci0gICAgICAgIHNvZmZzZXQgPSBhdGFibGUtPmFtYXBb
YXRvbV07Ci0gICAgICAgIGlmIChzb2Zmc2V0ID4gMCAmJiBzb2Zmc2V0IDwgYXRhYmxlLT5zdGFi
bGUubmV4dEZyZWUpIHsKLSAgICAgICAgICAgIHJldHVybiAmYXRhYmxlLT5zdGFibGUuc3RyaW5n
c1tzb2Zmc2V0XTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiAiPGludGVy
bmFsIGVycm9yOiBiYWQgc29mZnNldD4iOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKGF0b20gPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuICI8bnVsbCBhdG9tPiI7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXRvbSA9PSBFT0YpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gIjxFT0Y+IjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICI8aW52YWxpZCBhdG9tPiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci19IC8vIEdldEF0b21TdHJpbmcKLQotLyoKLSAqIEdldFJldmVyc2VkQXRvbSgpCi0g
KgotICovCi0KLWludCBHZXRSZXZlcnNlZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9t
KQotewotICAgIGlmIChhdG9tID4gMCAmJiBhdG9tIDwgYXRhYmxlLT5uZXh0RnJlZSkgewotICAg
ICAgICByZXR1cm4gYXRhYmxlLT5hcmV2W2F0b21dOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLX0gLy8gR2V0UmV2ZXJzZWRBdG9tCi0KLS8qCi0gKiBBZGRBdG9tKCkg
LSBBZGQgYSBzdHJpbmcgdG8gdGhlIGF0b20sIGhhc2ggYW5kIHN0cmluZyB0YWJsZXMgaWYgaXQg
aXNuJ3QgYWxyZWFkeSB0aGVyZS4KLSAqICAgICAgICAgUmV0dXJuIGl0J3MgYXRvbSBpbmRleC4K
LSAqLwotCi1pbnQgQWRkQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgY29uc3QgY2hhciAqcykKLXsK
LSAgICBpbnQgYXRvbTsKLQotICAgIGF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCBzKTsK
LSAgICByZXR1cm4gYXRvbTsKLX0gLy8gQWRkQXRvbQotCi0vKgotICogQWRkQXRvbUZpeGVkKCkg
LSBBZGQgYW4gYXRvbSB0byB0aGUgaGFzaCBhbmQgc3RyaW5nIHRhYmxlcyBpZiBpdCBpc24ndCBh
bHJlYWR5IHRoZXJlLgotICogICAgICAgICBBc3NpZ24gaXQgdGhlIGF0b20gdmFsdWUgb2YgImF0
b20iLgotICovCi0KLXN0YXRpYyBpbnQgQWRkQXRvbUZpeGVkKEF0b21UYWJsZSAqYXRhYmxlLCBj
b25zdCBjaGFyICpzLCBpbnQgYXRvbSkKLXsKLSAgICBpbnQgaGFzaGluZGV4LCBsc2l6ZTsKLQot
ICAgIGhhc2hpbmRleCA9IExvb2tVcEFkZFN0cmluZ0hhc2goYXRhYmxlLCBzKTsKLSAgICBpZiAo
YXRhYmxlLT5uZXh0RnJlZSA+PSBhdGFibGUtPnNpemUgfHwgYXRvbSA+PSBhdGFibGUtPnNpemUp
IHsKLSAgICAgICAgbHNpemUgPSBhdGFibGUtPnNpemUqMjsKLSAgICAgICAgaWYgKGxzaXplIDw9
IGF0b20pCi0gICAgICAgICAgICBsc2l6ZSA9IGF0b20gKyAxOwotICAgICAgICBHcm93QXRvbVRh
YmxlKGF0YWJsZSwgbHNpemUpOwotICAgIH0KLSAgICBhdGFibGUtPmFtYXBbYXRvbV0gPSBhdGFi
bGUtPmh0YWJsZS5lbnRyeVtoYXNoaW5kZXhdLmluZGV4OwotICAgIGF0YWJsZS0+aHRhYmxlLmVu
dHJ5W2hhc2hpbmRleF0udmFsdWUgPSBhdG9tOwotICAgIC8vaWYgKGF0b20gPj0gYXRhYmxlLT5u
ZXh0RnJlZSkKLSAgICAvLyAgICBhdGFibGUtPm5leHRGcmVlID0gYXRvbSArIDE7Ci0gICAgd2hp
bGUgKGF0b20gPj0gYXRhYmxlLT5uZXh0RnJlZSkgewotICAgICAgICBhdGFibGUtPmFyZXZbYXRh
YmxlLT5uZXh0RnJlZV0gPSBsUmV2ZXJzZShhdGFibGUtPm5leHRGcmVlKTsKLSAgICAgICAgYXRh
YmxlLT5uZXh0RnJlZSsrOwotICAgIH0KLSAgICByZXR1cm4gYXRvbTsKLX0gLy8gQWRkQXRvbUZp
eGVkCi0KLS8qCi0gKiBJbml0QXRvbVRhYmxlKCkgLSBJbml0aWFsaXplIHRoZSBhdG9tIHRhYmxl
LgotICoKLSAqLwotCi1pbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0
c2l6ZSkKLXsKLSAgICB1bnNpZ25lZCBpbnQgaWk7Ci0KLSAgICBodHNpemUgPSBodHNpemUgPD0g
MCA/IElOSVRfSEFTSF9UQUJMRV9TSVpFIDogaHRzaXplOwotICAgIGlmICghSW5pdFN0cmluZ1Rh
YmxlKCZhdGFibGUtPnN0YWJsZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghSW5pdEhh
c2hUYWJsZSgmYXRhYmxlLT5odGFibGUsIGh0c2l6ZSkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgYXRhYmxlLT5uZXh0RnJlZSA9IDA7Ci0gICAgYXRhYmxlLT5hbWFwID0gTlVMTDsKLSAgICBh
dGFibGUtPnNpemUgPSAwOwotICAgIEdyb3dBdG9tVGFibGUoYXRhYmxlLCBJTklUX0FUT01fVEFC
TEVfU0laRSk7Ci0gICAgaWYgKCFhdGFibGUtPmFtYXApCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgLy8gSW5pdGlhbGl6ZSBsb3dlciBwYXJ0IG9mIGF0b20gdGFibGUgdG8gIjx1bmRlZmluZWQ+
IiBhdG9tOgotCi0gICAgQWRkQXRvbUZpeGVkKGF0YWJsZSwgIjx1bmRlZmluZWQ+IiwgMCk7Ci0g
ICAgZm9yIChpaSA9IDA7IGlpIDwgRklSU1RfVVNFUl9UT0tFTl9TWTsgaWkrKykKLSAgICAgICAg
YXRhYmxlLT5hbWFwW2lpXSA9IGF0YWJsZS0+YW1hcFswXTsKLQotICAgIC8vIEFkZCBzaW5nbGUg
Y2hhcmFjdGVyIHRva2VucyB0byB0aGUgYXRvbSB0YWJsZToKLQotICAgIHsKLQkJY29uc3QgY2hh
ciAqcyA9ICJ+ISVeJiooKS0rPXwsLjw+Lz87Oltde30jIjsKLSAgICAgICAgY2hhciB0WzJdOwot
Ci0gICAgICAgIHRbMV0gPSAnXDAnOwotICAgICAgICB3aGlsZSAoKnMpIHsKLSAgICAgICAgICAg
IHRbMF0gPSAqczsKLSAgICAgICAgICAgIEFkZEF0b21GaXhlZChhdGFibGUsIHQsIHNbMF0pOwot
ICAgICAgICAgICAgcysrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQWRkIG11bHRpcGxl
IGNoYXJhY3RlciBzY2FubmVyIHRva2VucyA6Ci0KLSAgICBmb3IgKGlpID0gMDsgaWkgPCBzaXpl
b2YodG9rZW5zKS9zaXplb2YodG9rZW5zWzBdKTsgaWkrKykKLSAgICAgICAgQWRkQXRvbUZpeGVk
KGF0YWJsZSwgdG9rZW5zW2lpXS5zdHIsIHRva2Vuc1tpaV0udmFsKTsKLQotICAgIC8vIEFkZCBl
cnJvciBzeW1ib2wgaWYgcnVubmluZyBpbiBlcnJvciBtb2RlOgotCi0gICAgaWYgKGNwcC0+b3B0
aW9ucy5FcnJvck1vZGUpCi0gICAgICAgIEFkZEF0b21GaXhlZChhdGFibGUsICJlcnJvciIsIEVS
Uk9SX1NZKTsKLQotICAgIEFkZEF0b20oYXRhYmxlLCAiPCoqKiBlbmQgZml4ZWQgYXRvbXMgKioq
PiIpOwotCi0gICAgcmV0dXJuIDE7Ci19IC8vIEluaXRBdG9tVGFibGUKLQotLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8gRGVidWcgUHJpbnRpbmcgRnVuY3Rpb25zOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKgot
ICogUHJpbnRBdG9tVGFibGUoKQotICoKLSAqLwotCi12b2lkIFByaW50QXRvbVRhYmxlKEF0b21U
YWJsZSAqYXRhYmxlKQotewotICAgIGludCBpaTsKLSAgICBjaGFyIHN0clsyMDBdOwotCi0gICAg
Zm9yIChpaSA9IDA7IGlpIDwgYXRhYmxlLT5uZXh0RnJlZTsgaWkrKykgewotICAgICAgICBzcHJp
bnRmKHN0ciwgIiVkOiBcIiVzXCIiLCBpaSwgJmF0YWJsZS0+c3RhYmxlLnN0cmluZ3NbYXRhYmxl
LT5hbWFwW2lpXV0pOwotICAgICAgICBDUFBEZWJ1Z0xvZ01zZyhzdHIpOwotICAgIH0KLSAgICBz
cHJpbnRmKHN0ciwgIkhhc2ggdGFibGU6IHNpemU9JWQsIGVudHJpZXM9JWQsIGNvbGxpc2lvbnM9
IiwKLSAgICAgICAgICAgYXRhYmxlLT5odGFibGUuc2l6ZSwgYXRhYmxlLT5odGFibGUuZW50cmll
cyk7Ci0gICAgQ1BQRGVidWdMb2dNc2coc3RyKTsKLSAgICBmb3IgKGlpID0gMDsgaWkgPCBIQVNI
X1RBQkxFX01BWF9DT0xMSVNJT05TOyBpaSsrKSB7Ci0gICAgICAgIHNwcmludGYoc3RyLCAiICVk
IiwgYXRhYmxlLT5odGFibGUuY291bnRzW2lpXSk7Ci0gICAgICAgIENQUERlYnVnTG9nTXNnKHN0
cik7Ci0gICAgfQotCi19IC8vIFByaW50QXRvbVRhYmxlCi0KLQotLyoKLSAqIEdldFN0cmluZ09m
QXRvbSgpCi0gKgotICovCi0KLWNoYXIqIEdldFN0cmluZ09mQXRvbShBdG9tVGFibGUgKmF0YWJs
ZSwgaW50IGF0b20pCi17Ci0JIGNoYXIqIGNocl9zdHI7Ci0JIGNocl9zdHI9JmF0YWJsZS0+c3Rh
YmxlLnN0cmluZ3NbYXRhYmxlLT5hbWFwW2F0b21dXTsKLQkgcmV0dXJuIGNocl9zdHI7Ci19IC8v
IEdldFN0cmluZ09mQXRvbQotCi0vKgotICogRnJlZUF0b21UYWJsZSgpIC0gRnJlZSB0aGUgYXRv
bSB0YWJsZSBhbmQgYXNzb2NpYXRlZCBtZW1vcnkKLSAqCi0gKi8KLQotdm9pZCBGcmVlQXRvbVRh
YmxlKEF0b21UYWJsZSAqYXRhYmxlKQotewotICAgIEZyZWVTdHJpbmdUYWJsZSgmYXRhYmxlLT5z
dGFibGUpOwotICAgIEZyZWVIYXNoVGFibGUoJmF0YWJsZS0+aHRhYmxlKTsKLSAgICBpZiAoYXRh
YmxlLT5hbWFwKQotICAgICAgICBmcmVlKGF0YWJsZS0+YW1hcCk7Ci0gICAgaWYgKGF0YWJsZS0+
YXJldikKLSAgICAgICAgZnJlZShhdGFibGUtPmFyZXYpOwotICAgIGF0YWJsZS0+YW1hcCA9IE5V
TEw7Ci0gICAgYXRhYmxlLT5hcmV2ID0gTlVMTDsKLSAgICBhdGFibGUtPm5leHRGcmVlID0gMDsK
LSAgICBhdGFibGUtPnNpemUgPSAwOwotfSAvLyBGcmVlQXRvbVRhYmxlCi0KLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLyBFbmQgb2YgYXRvbS5jIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgJKHJldmlzaW9uIDc0NjU4KQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIw
MDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBz
dXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFn
cmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRp
b24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2Fy
ZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3Qg
YWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2Rp
Znkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJh
dGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBh
bmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWws
IG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhp
cyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1
c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdh
cmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFy
eQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNv
ZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwg
dGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFs
bCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0
aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1D
b3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQg
aW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBp
bXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAot
bGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91
ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElB
IFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBo
ZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFO
ICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlU
QVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1F
TlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9S
Ci1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJ
VEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxF
IEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBS
T0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBB
UklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNB
VElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVS
IENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElG
Ci1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vCi0vLyBhdG9tLmgKLS8vCi0KLSNpZiAhZGVm
aW5lZChfX0FUT01fSCkKLSNkZWZpbmUgX19BVE9NX0ggMQotCi10eXBlZGVmIHN0cnVjdCBBdG9t
VGFibGVfUmVjIEF0b21UYWJsZTsKLQotZXh0ZXJuIEF0b21UYWJsZSAqYXRhYmxlOwotCi1pbnQg
SW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Ci12b2lkIEZyZWVB
dG9tVGFibGUoQXRvbVRhYmxlICphdGFibGUpOwotaW50IEFkZEF0b20oQXRvbVRhYmxlICphdGFi
bGUsIGNvbnN0IGNoYXIgKnMpOwotdm9pZCBQcmludEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJs
ZSk7Ci1pbnQgTG9va1VwQWRkU3RyaW5nKEF0b21UYWJsZSAqYXRhYmxlLCBjb25zdCBjaGFyICpz
KTsKLWNvbnN0IGNoYXIgKkdldEF0b21TdHJpbmcoQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9t
KTsKLWludCBHZXRSZXZlcnNlZEF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKLWNo
YXIqIEdldFN0cmluZ09mQXRvbShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGF0b20pOwotI2VuZGlm
IC8vICFkZWZpbmVkKF9fQVRPTV9IKQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jb21waWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jb21waWxlLmgJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jb21waWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTkgKzAsMCBAQAotLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlv
bi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJl
IHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93
aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBy
ZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0
YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVy
bXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRo
aXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVu
dCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2Ug
dGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vu
c2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29m
dHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5
IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBt
b2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRo
YXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0
YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBm
b2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9u
cyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywg
c2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElB
IFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20g
TlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90
aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBi
eSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50
IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBv
ciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5j
b3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJ
RElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhP
VVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1Mg
T1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJ
T04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgot
Ci1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5E
SVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9V
VCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVU
SU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBV
TkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNU
UklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KLS8vCi0vLyBjb21waWxlLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX0NPTVBJTEVfSCkK
LSNkZWZpbmUgX19DT01QSUxFX0ggMQotCi1pbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKLQotdHlw
ZWRlZiBzdHJ1Y3QgT3B0aW9uc19SZWN7Ci0gICAgY29uc3QgY2hhciAqcHJvZmlsZVN0cmluZzsK
LSAgICBpbnQgRXJyb3JNb2RlOwotICAgIGludCBRdWlldDsKLQkKLSAgICAvLyBEZWJ1ZyBUaGUg
Q29tcGlsZXIgb3B0aW9uczoKLSAgICBpbnQgRHVtcEF0b21UYWJsZTsKLX0gT3B0aW9uczsKLQot
c3RydWN0IENQUFN0cnVjdF9SZWMgewotICAgIC8vIFB1YmxpYyBtZW1iZXJzCi0gICAgU291cmNl
TG9jICpwTGFzdFNvdXJjZUxvYzsgIC8vIFNldCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzdGF0ZW1l
bnQgYnkgdGhlIHRyZWUgd2Fsa2VycwotICAgIE9wdGlvbnMgb3B0aW9uczsgICAgICAgICAgICAv
LyBDb21waWxlIG9wdGlvbnMgYW5kIHBhcmFtZXRlcnMKLQotICAgIC8vIFByaXZhdGUgbWVtYmVy
cwotICAgIFNvdXJjZUxvYyBsYXN0U291cmNlTG9jOwotCi0gICAgLy8gU2Nhbm5lciBkYXRhOgot
Ci0gICAgU291cmNlTG9jICp0b2tlbkxvYzsgICAgICAgIC8vIFNvdXJjZSBsb2NhdGlvbiBvZiBt
b3N0IHJlY2VudCB0b2tlbiBzZWVuIGJ5IHRoZSBzY2FubmVyCi0gICAgaW50IG1vc3RSZWNlbnRU
b2tlbjsgICAgICAgIC8vIE1vc3QgcmVjZW50IHRva2VuIHNlZW4gYnkgdGhlIHNjYW5uZXIKLSAg
ICBJbnB1dFNyYyAqY3VycmVudElucHV0OwotICAgIGludCBwcmV2aW91c190b2tlbjsKLSAgICBp
bnQgcGFzdEZpcnN0U3RhdGVtZW50OyAgICAgLy8gdXNlZCB0byBtYWtlIHN1cmUgdGhhdCAjdmVy
c2lvbiBpcyB0aGUgZmlyc3Qgc3RhdGVtZW50IHNlZW4gaW4gdGhlIGZpbGUsIGlmIHByZXNlbnQK
LSAgICAKLQl2b2lkICpwQzsgICAgICAgICAgICAgICAgICAgLy8gc3RvcmluZyB0aGUgcGFyc2VD
b250ZXh0IG9mIHRoZSBjb21waWxlIG9iamVjdCBpbiBjcHAuICAKLSAgICAgCi0gICAgLy8gUHJp
dmF0ZSBtZW1iZXJzOgotICAgIFNvdXJjZUxvYyBsdG9rZW5Mb2M7Ci0JaW50IGlmZGVwdGg7ICAg
ICAgICAgICAgICAgIC8vY3VycmVudCAjaWYtI2Vsc2UtI2VuZGlmIG5lc3RpbmcgaW4gdGhlIGNw
cC5jIGZpbGUgKHByZS1wcm9jZXNzb3IpICAgIAotICAgIGludCBlbHNlZGVwdGhbNjRdOyAgICAg
ICAgICAvL0tlZXAgYSB0cmFjayBvZiAjaWYgZGVwdGguLk1heCBhbGxvd2VkIGlzIDY0LiAgIAot
ICAgIGludCBlbHNldHJhY2tlcjsgICAgICAgICAgICAvLyNpZi0jZWxzZSBhbmQgI2VuZGlmIGNv
bnN0cnVjdHMuLi5Db3VudGVyLgotICAgIGNvbnN0IGNoYXIgKkVyck1zZzsKLSAgICBpbnQgQ29t
cGlsZUVycm9yOyAgICAgICAgICAgLy9JbmRpY2F0ZSBjb21waWxlIGVycm9yIHdoZW4gI2Vycm9y
LCAjZWxzZSwjZWxpZiBtaXNtYXRjaC4KLQotICAgIC8vCi0gICAgLy8gR2xvYmFscyB1c2VkIHRv
IGNvbW11bmljYXRlIGJldHdlZW4gUGFQYXJzZVN0cmluZ3MoKSBhbmQgeXlfaW5wdXQoKWFuZCAK
LSAgICAvLyBhbHNvIGFjcm9zcyB0aGUgZmlsZXMuKGdlbl9nbHNsYW5nLmNwcCBhbmQgc2Nhbm5l
ci5jKQotICAgIC8vCi0gICAgaW50ICAgIFBhV2hpY2hTdHI7ICAgICAgICAgICAgLy8gd2hpY2gg
c3RyaW5nIHdlJ3JlIHBhcnNpbmcKLSAgICBpbnQqICAgUGFTdHJMZW47ICAgICAgICAgICAgICAv
LyBhcnJheSBvZiBsZW5ndGhzIG9mIHRoZSBQYUFyZ3Ygc3RyaW5ncwotICAgIGludCAgICBQYUFy
Z2M7ICAgICAgICAgICAgICAgIC8vIGNvdW50IG9mIHN0cmluZ3MgaW4gdGhlIGFycmF5Ci0gICAg
Y2hhcioqIFBhQXJndjsgICAgICAgICAgICAgICAgLy8gb3VyIGFycmF5IG9mIHN0cmluZ3MgdG8g
cGFyc2UgICAgCi0gICAgdW5zaWduZWQgaW50IHRva2Vuc0JlZm9yZUVPRiA6IDE7Ci19OwotCi0j
ZW5kaWYgLy8gIWRlZmluZWQoX19DT01QSUxFX0gpCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NwcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvY3BwLmMJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuYwkod29ya2luZyBjb3B5KQpAQCAtMSwxMDI0ICswLDAgQEAKLS8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24u
Ci0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0
byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2lu
ZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVk
aXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFu
Y2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1z
LCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlz
IE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQg
dG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRl
cm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNl
LCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3
YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBh
bmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9k
aWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0
IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFp
biB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9s
bG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMg
b2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNl
cnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBT
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5W
SURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhl
ciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkg
TlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCBy
aWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3Ig
Ynkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29y
cG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJ
QSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VU
Ci1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9S
IElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9O
IEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQot
SU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElS
RUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQg
T0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElP
TiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5E
RVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJ
Q1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0vLwotLy8gY3BwLmMKLS8vCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxz
dGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1
ZGUgPGN0eXBlLmg+Ci0KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxz
LmgiCi0KLXN0YXRpYyBpbnQgQ1BQaWYoeXlzdHlwZXBwICogeXlsdmFscHApOwotCi0vKiBEb24n
dCB1c2UgbWVtb3J5LmMncyByZXBsYWNlbWVudHMsIGFzIHdlIGNsZWFuIHVwIHByb3Blcmx5IGhl
cmUgKi8KLSN1bmRlZiBtYWxsb2MKLSN1bmRlZiBmcmVlCi0KLXN0YXRpYyBpbnQgYmluZEF0b20g
PSAwOwotc3RhdGljIGludCBjb25zdEF0b20gPSAwOwotc3RhdGljIGludCBkZWZhdWx0QXRvbSA9
IDA7Ci1zdGF0aWMgaW50IGRlZmluZUF0b20gPSAwOwotc3RhdGljIGludCBkZWZpbmVkQXRvbSA9
IDA7Ci1zdGF0aWMgaW50IGVsc2VBdG9tID0gMDsKLXN0YXRpYyBpbnQgZWxpZkF0b20gPSAwOwot
c3RhdGljIGludCBlbmRpZkF0b20gPSAwOwotc3RhdGljIGludCBpZkF0b20gPSAwOwotc3RhdGlj
IGludCBpZmRlZkF0b20gPSAwOwotc3RhdGljIGludCBpZm5kZWZBdG9tID0gMDsKLXN0YXRpYyBp
bnQgaW5jbHVkZUF0b20gPSAwOwotc3RhdGljIGludCBsaW5lQXRvbSA9IDA7Ci1zdGF0aWMgaW50
IHByYWdtYUF0b20gPSAwOwotc3RhdGljIGludCB0ZXh1bml0QXRvbSA9IDA7Ci1zdGF0aWMgaW50
IHVuZGVmQXRvbSA9IDA7Ci1zdGF0aWMgaW50IGVycm9yQXRvbSA9IDA7Ci1zdGF0aWMgaW50IF9f
TElORV9fQXRvbSA9IDA7Ci1zdGF0aWMgaW50IF9fRklMRV9fQXRvbSA9IDA7Ci1zdGF0aWMgaW50
IF9fVkVSU0lPTl9fQXRvbSA9IDA7Ci1zdGF0aWMgaW50IHZlcnNpb25BdG9tID0gMDsKLXN0YXRp
YyBpbnQgZXh0ZW5zaW9uQXRvbSA9IDA7Ci0KLXN0YXRpYyBTY29wZSAqbWFjcm9zID0gMDsKLSNk
ZWZpbmUgTUFYX01BQ1JPX0FSR1MgIDY0Ci0jZGVmaW5lIE1BWF9JRl9ORVNUSU5HICA2NAotCi1z
dGF0aWMgU291cmNlTG9jIGlmbG9jOyAvKiBvdXRlcm1vc3QgI2lmICovCi0KLWludCBJbml0Q1BQ
KHZvaWQpCi17Ci0gICAgY2hhciAgICAgICAgYnVmZmVyWzY0XSwgKnQ7Ci0gICAgY29uc3QgY2hh
ciAgKmY7Ci0KLSAgICAvLyBBZGQgdmFyaW91cyBhdG9tcyBuZWVkZWQgYnkgdGhlIENQUCBsaW5l
IHNjYW5uZXI6Ci0gICAgYmluZEF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiYmluZCIp
OwotICAgIGNvbnN0QXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJjb25zdCIpOwotICAg
IGRlZmF1bHRBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImRlZmF1bHQiKTsKLSAgICBk
ZWZpbmVBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImRlZmluZSIpOwotICAgIGRlZmlu
ZWRBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImRlZmluZWQiKTsKLSAgICBlbGlmQXRv
bSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJlbGlmIik7Ci0gICAgZWxzZUF0b20gPSBMb29r
VXBBZGRTdHJpbmcoYXRhYmxlLCAiZWxzZSIpOwotICAgIGVuZGlmQXRvbSA9IExvb2tVcEFkZFN0
cmluZyhhdGFibGUsICJlbmRpZiIpOwotICAgIGlmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFi
bGUsICJpZiIpOwotICAgIGlmZGVmQXRvbSA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsICJpZmRl
ZiIpOwotICAgIGlmbmRlZkF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiaWZuZGVmIik7
Ci0gICAgaW5jbHVkZUF0b20gPSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAiaW5jbHVkZSIpOwot
ICAgIGxpbmVBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgImxpbmUiKTsKLSAgICBwcmFn
bWFBdG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInByYWdtYSIpOwotICAgIHRleHVuaXRB
dG9tID0gTG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgInRleHVuaXQiKTsKLSAgICB1bmRlZkF0b20g
PSBMb29rVXBBZGRTdHJpbmcoYXRhYmxlLCAidW5kZWYiKTsKLQllcnJvckF0b20gPSBMb29rVXBB
ZGRTdHJpbmcoYXRhYmxlLCAiZXJyb3IiKTsKLSAgICBfX0xJTkVfX0F0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAiX19MSU5FX18iKTsKLSAgICBfX0ZJTEVfX0F0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAiX19GSUxFX18iKTsKLQlfX1ZFUlNJT05fX0F0b20gPSBMb29rVXBBZGRT
dHJpbmcoYXRhYmxlLCAiX19WRVJTSU9OX18iKTsKLSAgICB2ZXJzaW9uQXRvbSA9IExvb2tVcEFk
ZFN0cmluZyhhdGFibGUsICJ2ZXJzaW9uIik7Ci0gICAgZXh0ZW5zaW9uQXRvbSA9IExvb2tVcEFk
ZFN0cmluZyhhdGFibGUsICJleHRlbnNpb24iKTsKLSAgICBtYWNyb3MgPSBOZXdTY29wZUluUG9v
bChtZW1fQ3JlYXRlUG9vbCgwLCAwKSk7Ci0gICAgc3RyY3B5KGJ1ZmZlciwgIlBST0ZJTEVfIik7
Ci0gICAgdCA9IGJ1ZmZlciArIHN0cmxlbihidWZmZXIpOwotICAgIGYgPSBjcHAtPm9wdGlvbnMu
cHJvZmlsZVN0cmluZzsKLSAgICB3aGlsZSAoKGlzYWxudW0oKmYpIHx8ICpmID09ICdfJykgJiYg
dCA8IGJ1ZmZlciArIHNpemVvZihidWZmZXIpIC0gMSkKLSAgICAgICAgKnQrKyA9IHRvdXBwZXIo
KmYrKyk7Ci0gICAgKnQgPSAwOwotCi0gICAgUHJlZGVmaW5lSW50TWFjcm8oIkdMX0VTIiwgMSk7
Ci0gICAgUHJlZGVmaW5lSW50TWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7
Ci0KLQlyZXR1cm4gMTsKLX0gLy8gSW5pdENQUAotCi1pbnQgRnJlZUNQUCh2b2lkKQotewotICAg
IGlmIChtYWNyb3MpCi0gICAgewotICAgICAgICBtZW1fRnJlZVBvb2wobWFjcm9zLT5wb29sKTsK
LSAgICAgICAgbWFjcm9zID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMTsKLX0KLQotaW50IEZp
bmFsQ1BQKHZvaWQpCi17Ci0JaWYgKGNwcC0+aWZkZXB0aCkKLQkJQ1BQRXJyb3JUb0luZm9Mb2co
IiNpZiBtaXNtYXRjaCIpOwotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IENQUGRlZmlu
ZSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBpbnQgdG9rZW4sIG5hbWUsIGFyZ3NbTUFY
X01BQ1JPX0FSR1NdLCBhcmdjOwotICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7Ci0gICAgTWFjcm9T
eW1ib2wgbWFjOwotICAgIFN5bWJvbCAqc3ltYjsKLSAgICBTb3VyY2VMb2MgZHVtbXlMb2M7Ci0g
ICAgbWVtc2V0KCZtYWMsIDAsIHNpemVvZihtYWMpKTsKLSAgICB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaWYgKHRva2Vu
ICE9IENQUF9JREVOVElGSUVSKSB7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZGVmaW5l
Iik7Ci0gICAgICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0gICAgbmFtZSA9IHl5bHZhbHBwLT5z
Y19pZGVudDsKLSAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaWYgKHRva2VuID09ICcoJyAmJiAheXlsdmFscHAtPnNj
X2ludCkgewotICAgICAgICAvLyBnYXRoZXIgYXJndW1lbnRzCi0gICAgICAgIGFyZ2MgPSAwOwot
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoYXJnYyA9PSAw
ICYmIHRva2VuID09ICcpJykgYnJlYWs7Ci0gICAgICAgICAgICBpZiAodG9rZW4gIT0gQ1BQX0lE
RU5USUZJRVIpIHsKLQkJCQlDUFBFcnJvclRvSW5mb0xvZygiI2RlZmluZSIpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhcmdj
IDwgTUFYX01BQ1JPX0FSR1MpCi0gICAgICAgICAgICAgICAgYXJnc1thcmdjKytdID0geXlsdmFs
cHAtPnNjX2lkZW50OwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9IHdoaWxlICh0b2tlbiA9
PSAnLCcpOwotICAgICAgICBpZiAodG9rZW4gIT0gJyknKSB7Ci0gICAgICAgICAgICBDUFBFcnJv
clRvSW5mb0xvZygiI2RlZmluZSIpOwotICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAg
ICB9Ci0gICAgICAgIG1hYy5hcmdjID0gYXJnYzsKLSAgICAgICAgbWFjLmFyZ3MgPSBtZW1fQWxs
b2MobWFjcm9zLT5wb29sLCBhcmdjICogc2l6ZW9mKGludCkpOwotICAgICAgICBtZW1jcHkobWFj
LmFyZ3MsIGFyZ3MsIGFyZ2MgKiBzaXplb2YoaW50KSk7Ci0gICAgICAgIHRva2VuID0gY3BwLT5j
dXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQl9Ci0gICAg
bWFjLmJvZHkgPSBOZXdUb2tlblN0cmVhbShHZXRBdG9tU3RyaW5nKGF0YWJsZSwgbmFtZSksIG1h
Y3Jvcy0+cG9vbCk7Ci0gICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgaWYgKHRv
a2VuID09ICdcXCcpIHsKLSAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJUaGUgbGluZSBj
b250aW51YXRpb24gY2hhcmFjdGVyIChcXCkgaXMgbm90IHBhcnQgb2YgdGhlIE9wZW5HTCBFUyBT
aGFkaW5nIExhbmd1YWdlIik7Ci0gICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICAgIH0K
LSAgICAgICAgUmVjb3JkVG9rZW4obWFjLmJvZHksIHRva2VuLCB5eWx2YWxwcCk7Ci0gICAgICAg
IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICB9OwotCi0gICAgc3ltYiA9IExvb2tVcFN5bWJvbChtYWNyb3MsIG5hbWUpOwot
ICAgIGlmIChzeW1iKSB7Ci0gICAgICAgIGlmICghc3ltYi0+ZGV0YWlscy5tYWMudW5kZWYpIHsK
LSAgICAgICAgICAgIC8vIGFscmVhZHkgZGVmaW5lZCAtLSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5
IGFyZSBpZGVudGljYWwKLSAgICAgICAgICAgIGlmIChzeW1iLT5kZXRhaWxzLm1hYy5hcmdjICE9
IG1hYy5hcmdjKSBnb3RvIGVycm9yOwotICAgICAgICAgICAgZm9yIChhcmdjPTA7IGFyZ2MgPCBt
YWMuYXJnYzsgYXJnYysrKQotICAgICAgICAgICAgICAgIGlmIChzeW1iLT5kZXRhaWxzLm1hYy5h
cmdzW2FyZ2NdICE9IG1hYy5hcmdzW2FyZ2NdKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVy
cm9yOwotICAgICAgICAgICAgUmV3aW5kVG9rZW5TdHJlYW0oc3ltYi0+ZGV0YWlscy5tYWMuYm9k
eSk7Ci0gICAgICAgICAgICBSZXdpbmRUb2tlblN0cmVhbShtYWMuYm9keSk7Ci0gICAgICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICAgICAgaW50IG9sZF9sdmFsLCBvbGRfdG9rZW47Ci0gICAgICAg
ICAgICAgICAgb2xkX3Rva2VuID0gUmVhZFRva2VuKHN5bWItPmRldGFpbHMubWFjLmJvZHksIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBvbGRfbHZhbCA9IHl5bHZhbHBwLT5zY19pbnQ7Ci0g
ICAgICAgICAgICAgICAgdG9rZW4gPSBSZWFkVG9rZW4obWFjLmJvZHksIHl5bHZhbHBwKTsKLSAg
ICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gb2xkX3Rva2VuIHx8IHl5bHZhbHBwLT5zY19pbnQg
IT0gb2xkX2x2YWwpIHsgCi0gICAgICAgICAgICAgICAgZXJyb3I6Ci0gICAgICAgICAgICAgICAg
ICAgIFN0b3JlU3RyKCJNYWNybyBSZWRlZmluZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgU3Rv
cmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxuYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgRGVjTGluZU51
bWJlcigpOwotICAgICAgICAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAg
UmVzZXRUU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyB9Ci0gICAgICAgICAg
ICB9IHdoaWxlICh0b2tlbiA+IDApOwotICAgICAgICB9Ci0gICAgICAgIC8vRnJlZU1hY3JvKCZz
eW1iLT5kZXRhaWxzLm1hYyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZHVtbXlMb2MuZmlsZSA9
IDA7Ci0gICAgICAgIGR1bW15TG9jLmxpbmUgPSAwOwotICAgICAgICBzeW1iID0gQWRkU3ltYm9s
KCZkdW1teUxvYywgbWFjcm9zLCBuYW1lLCBNQUNST19TKTsKLSAgICB9Ci0gICAgc3ltYi0+ZGV0
YWlscy5tYWMgPSBtYWM7Ci0gICAgcmV0dXJuICdcbic7Ci19IC8vIENQUGRlZmluZQotCi1zdGF0
aWMgaW50IENQUHVuZGVmKHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGludCB0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0g
ICAgU3ltYm9sICpzeW1iOwotCWlmKHRva2VuID09ICdcbicpewotCQlDUFBFcnJvclRvSW5mb0xv
ZygiI3VuZGVmIik7Ci0JICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0gICAgaWYgKHRva2VuICE9
IENQUF9JREVOVElGSUVSKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgc3ltYiA9IExvb2tV
cFN5bWJvbChtYWNyb3MsIHl5bHZhbHBwLT5zY19pZGVudCk7Ci0gICAgaWYgKHN5bWIpIHsKLSAg
ICAgICAgc3ltYi0+ZGV0YWlscy5tYWMudW5kZWYgPSAxOwotICAgIH0KLSAgICB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAg
aWYgKHRva2VuICE9ICdcbicpIHsKLSAgICBlcnJvcjoKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIiN1bmRlZiIpOwotICAgIH0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIENQUHVuZGVmCi0K
LS8qIENQUGVsc2UgLS0gc2tpcCBmb3J3YXJkIHRvIGFwcHJvcHJpYXRlIHNwb3QuICBUaGlzIGlz
IGFjdHVhbGx5IHVzZWQKLSoqIHRvIHNraXAgdG8gYW5kICNlbmRpZiBhZnRlciBzZWVpbmcgYW4g
I2Vsc2UsIEFORCB0byBza2lwIHRvIGEgI2Vsc2UsCi0qKiAjZWxpZiwgb3IgI2VuZGlmIGFmdGVy
IGEgI2lmLyNpZmRlZi8jaWZuZGVmLyNlbGlmIHRlc3Qgd2FzIGZhbHNlCi0qLwotCi1zdGF0aWMg
aW50IENQUGVsc2UoaW50IG1hdGNoZWxzZSwgeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0gICAg
aW50IGF0b20sZGVwdGg9MDsKLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nh
bihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCQotCXdoaWxlICh0b2tlbiA+IDApIHsK
LSAgICAgICAgaWYgKHRva2VuICE9ICcjJykgewotCQkgICAgd2hpbGUgKHRva2VuICE9ICdcbicp
Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCQlpZiAoKHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKSkgIT0gQ1BQX0lERU5U
SUZJRVIpCi0JCQljb250aW51ZTsKLSAgICAgICAgYXRvbSA9IHl5bHZhbHBwLT5zY19pZGVudDsK
LSAgICAgICAgaWYgKGF0b20gPT0gaWZBdG9tIHx8IGF0b20gPT0gaWZkZWZBdG9tIHx8IGF0b20g
PT0gaWZuZGVmQXRvbSl7Ci0gICAgICAgICAgICBkZXB0aCsrOyBjcHAtPmlmZGVwdGgrKzsgY3Bw
LT5lbHNldHJhY2tlcisrOwotICAgICAgICAgICAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJh
Y2tlcl0gPSAwOwotCQl9Ci0JCWVsc2UgaWYgKGF0b20gPT0gZW5kaWZBdG9tKSB7Ci0gICAgICAg
ICAgICBpZigtLWRlcHRoPDApewotCQkJICAgIC0tY3BwLT5lbHNldHJhY2tlcjsKLSAgICAgICAg
ICAgICAgICBpZiAoY3BwLT5pZmRlcHRoKSAKLSAgICAgICAgICAgICAgICAgICAgLS1jcHAtPmlm
ZGVwdGg7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIC0tY3BwLT5lbHNldHJhY2tlcjsKLSAgICAgICAgICAgICAgICAt
LWNwcC0+aWZkZXB0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoKChpbnQpKG1h
dGNoZWxzZSkgIT0gMCkmJiBkZXB0aD09MCkgewotCQkJaWYgKGF0b20gPT0gZWxzZUF0b20gKSB7
Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnXG4n
KSB7Ci0gICAgICAgICAgICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQg
dG9rZW5zIGZvbGxvd2luZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQg
YSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIH0gCi0JCQkJYnJl
YWs7Ci0JCQl9IAotCQkJZWxzZSBpZiAoYXRvbSA9PSBlbGlmQXRvbSkgewotICAgICAgICAgICAg
ICAgIC8qIHdlIGRlY3JlbWVudCBjcHAtPmlmZGVwdGggaGVyZSwgYmVjYXVzZSBDUFBpZiB3aWxs
IGluY3JlbWVudAotICAgICAgICAgICAgICAgICAqIGl0IGFuZCB3ZSByZWFsbHkgd2FudCB0byBs
ZWF2ZSBpdCBhbG9uZSAqLwotCQkJCWlmIChjcHAtPmlmZGVwdGgpewotCQkJCQktLWNwcC0+aWZk
ZXB0aDsKLQkJCQkgICAgLS1jcHAtPmVsc2V0cmFja2VyOwotCQkJCX0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gQ1BQaWYoeXlsdmFscHApOwotICAgICAgICAgICAgfQotCQl9Ci0gICAgICAgIGVs
c2UgaWYoKGF0b209PWVsc2VBdG9tKSAmJiAoIUNoa0NvcnJlY3RFbHNlTmVzdGluZygpKSl7Ci0g
ICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2Vsc2UgYWZ0ZXIgYSAjZWxzZSIpOwotICAg
ICAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICAgICAgfQotCX07Ci0gICAgcmV0dXJu
IHRva2VuOwotfQotCi1lbnVtIGV2YWxfcHJlYyB7Ci0gICAgTUlOX1BSRUMsCi0gICAgQ09ORCwg
TE9HT1IsIExPR0FORCwgT1IsIFhPUiwgQU5ELCBFUVVBTCwgUkVMQVRJT04sIFNISUZULCBBREQs
IE1VTCwgVU5BUlksCi0gICAgTUFYX1BSRUMKLX07Ci0KLXN0YXRpYyBpbnQgb3BfbG9nb3IoaW50
IGEsIGludCBiKSB7IHJldHVybiBhIHx8IGI7IH0KLXN0YXRpYyBpbnQgb3BfbG9nYW5kKGludCBh
LCBpbnQgYikgeyByZXR1cm4gYSAmJiBiOyB9Ci1zdGF0aWMgaW50IG9wX29yKGludCBhLCBpbnQg
YikgeyByZXR1cm4gYSB8IGI7IH0KLXN0YXRpYyBpbnQgb3BfeG9yKGludCBhLCBpbnQgYikgeyBy
ZXR1cm4gYSBeIGI7IH0KLXN0YXRpYyBpbnQgb3BfYW5kKGludCBhLCBpbnQgYikgeyByZXR1cm4g
YSAmIGI7IH0KLXN0YXRpYyBpbnQgb3BfZXEoaW50IGEsIGludCBiKSB7IHJldHVybiBhID09IGI7
IH0KLXN0YXRpYyBpbnQgb3BfbmUoaW50IGEsIGludCBiKSB7IHJldHVybiBhICE9IGI7IH0KLXN0
YXRpYyBpbnQgb3BfZ2UoaW50IGEsIGludCBiKSB7IHJldHVybiBhID49IGI7IH0KLXN0YXRpYyBp
bnQgb3BfbGUoaW50IGEsIGludCBiKSB7IHJldHVybiBhIDw9IGI7IH0KLXN0YXRpYyBpbnQgb3Bf
Z3QoaW50IGEsIGludCBiKSB7IHJldHVybiBhID4gYjsgfQotc3RhdGljIGludCBvcF9sdChpbnQg
YSwgaW50IGIpIHsgcmV0dXJuIGEgPCBiOyB9Ci1zdGF0aWMgaW50IG9wX3NobChpbnQgYSwgaW50
IGIpIHsgcmV0dXJuIGEgPDwgYjsgfQotc3RhdGljIGludCBvcF9zaHIoaW50IGEsIGludCBiKSB7
IHJldHVybiBhID4+IGI7IH0KLXN0YXRpYyBpbnQgb3BfYWRkKGludCBhLCBpbnQgYikgeyByZXR1
cm4gYSArIGI7IH0KLXN0YXRpYyBpbnQgb3Bfc3ViKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAt
IGI7IH0KLXN0YXRpYyBpbnQgb3BfbXVsKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAqIGI7IH0K
LXN0YXRpYyBpbnQgb3BfZGl2KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAvIGI7IH0KLXN0YXRp
YyBpbnQgb3BfbW9kKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAlIGI7IH0KLXN0YXRpYyBpbnQg
b3BfcG9zKGludCBhKSB7IHJldHVybiBhOyB9Ci1zdGF0aWMgaW50IG9wX25lZyhpbnQgYSkgeyBy
ZXR1cm4gLWE7IH0KLXN0YXRpYyBpbnQgb3BfY21wbChpbnQgYSkgeyByZXR1cm4gfmE7IH0KLXN0
YXRpYyBpbnQgb3Bfbm90KGludCBhKSB7IHJldHVybiAhYTsgfQotCi1zdHJ1Y3QgewotICAgIGlu
dCB0b2tlbiwgcHJlYywgKCpvcCkoaW50LCBpbnQpOwotfSBiaW5vcFtdID0gewotICAgIHsgQ1BQ
X09SX09QLCBMT0dPUiwgb3BfbG9nb3IgfSwKLSAgICB7IENQUF9BTkRfT1AsIExPR0FORCwgb3Bf
bG9nYW5kIH0sCi0gICAgeyAnfCcsIE9SLCBvcF9vciB9LAotICAgIHsgJ14nLCBYT1IsIG9wX3hv
ciB9LAotICAgIHsgJyYnLCBBTkQsIG9wX2FuZCB9LAotICAgIHsgQ1BQX0VRX09QLCBFUVVBTCwg
b3BfZXEgfSwKLSAgICB7IENQUF9ORV9PUCwgRVFVQUwsIG9wX25lIH0sCi0gICAgeyAnPicsIFJF
TEFUSU9OLCBvcF9ndCB9LAotICAgIHsgQ1BQX0dFX09QLCBSRUxBVElPTiwgb3BfZ2UgfSwKLSAg
ICB7ICc8JywgUkVMQVRJT04sIG9wX2x0IH0sCi0gICAgeyBDUFBfTEVfT1AsIFJFTEFUSU9OLCBv
cF9sZSB9LAotICAgIHsgQ1BQX0xFRlRfT1AsIFNISUZULCBvcF9zaGwgfSwKLSAgICB7IENQUF9S
SUdIVF9PUCwgU0hJRlQsIG9wX3NociB9LAotICAgIHsgJysnLCBBREQsIG9wX2FkZCB9LAotICAg
IHsgJy0nLCBBREQsIG9wX3N1YiB9LAotICAgIHsgJyonLCBNVUwsIG9wX211bCB9LAotICAgIHsg
Jy8nLCBNVUwsIG9wX2RpdiB9LAotICAgIHsgJyUnLCBNVUwsIG9wX21vZCB9LAotfTsKLQotc3Ry
dWN0IHsKLSAgICBpbnQgdG9rZW4sICgqb3ApKGludCk7Ci19IHVub3BbXSA9IHsKLSAgICB7ICcr
Jywgb3BfcG9zIH0sCi0gICAgeyAnLScsIG9wX25lZyB9LAotICAgIHsgJ34nLCBvcF9jbXBsIH0s
Ci0gICAgeyAnIScsIG9wX25vdCB9LAotfTsKLQotI2RlZmluZSBBTEVOKEEpIChzaXplb2YoQSkv
c2l6ZW9mKEFbMF0pKQotCi1zdGF0aWMgaW50IGV2YWwoaW50IHRva2VuLCBpbnQgcHJlYywgaW50
ICpyZXMsIGludCAqZXJyLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBpbnQgICAgICAg
ICBpLCB2YWw7Ci0gICAgU3ltYm9sICAgICAgKnM7Ci0gICAgaWYgKHRva2VuID09IENQUF9JREVO
VElGSUVSKSB7Ci0gICAgICAgIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZGVmaW5lZEF0b20p
IHsKLSAgICAgICAgICAgIGludCBuZWVkY2xvc2UgPSAwOwotICAgICAgICAgICAgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAg
ICAgICAgICAgaWYgKHRva2VuID09ICcoJykgewotICAgICAgICAgICAgICAgIG5lZWRjbG9zZSA9
IDE7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHRva2VuICE9IENQUF9JREVOVElGSUVSKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0g
ICAgICAgICAgICAqcmVzID0gKHMgPSBMb29rVXBTeW1ib2wobWFjcm9zLCB5eWx2YWxwcC0+c2Nf
aWRlbnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgPyAhcy0+ZGV0YWlscy5tYWMudW5kZWYg
OiAwOwotICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKG5lZWRjbG9zZSkgewotICAg
ICAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnKScpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8g
ZXJyb3I7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgfQotCQl9IGVsc2UgaWYg
KE1hY3JvRXhwYW5kKHl5bHZhbHBwLT5zY19pZGVudCwgeXlsdmFscHApKSB7Ci0JCQl0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZXZhbCh0b2tlbiwgcHJlYywgcmVzLCBlcnIsIHl5bHZhbHBwKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLQl9
IGVsc2UgaWYgKHRva2VuID09IENQUF9JTlRDT05TVEFOVCkgewotICAgICAgICAqcmVzID0geXls
dmFscHAtPnNjX2ludDsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgIH0gZWxzZSBpZiAodG9rZW4gPT0gJygn
KSB7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgdG9rZW4gPSBldmFsKHRva2VuLCBNSU5fUFJFQywg
cmVzLCBlcnIsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKCEqZXJyKSB7Ci0gICAgICAgICAgICBp
ZiAodG9rZW4gIT0gJyknKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAg
ICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGkgPSBBTEVOKHVu
b3ApIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGlmICh1bm9wW2ldLnRva2VuID09
IHRva2VuKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChp
ID49IDApIHsKLSAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIHRva2VuID0gZXZhbCh0b2tl
biwgVU5BUlksIHJlcywgZXJyLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAqcmVzID0gdW5vcFtp
XS5vcCgqcmVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgd2hpbGUgKCEqZXJyKSB7Ci0gICAgICAgIGlmICh0b2tlbiA9
PSAnKScgfHwgdG9rZW4gPT0gJ1xuJykgYnJlYWs7Ci0gICAgICAgIGZvciAoaSA9IEFMRU4oYmlu
b3ApIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGlmIChiaW5vcFtpXS50b2tlbiA9
PSB0b2tlbikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAo
aSA8IDAgfHwgYmlub3BbaV0ucHJlYyA8PSBwcmVjKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIHZhbCA9ICpyZXM7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4o
Y3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgdG9rZW4gPSBldmFsKHRva2Vu
LCBiaW5vcFtpXS5wcmVjLCByZXMsIGVyciwgeXlsdmFscHApOwotICAgICAgICAqcmVzID0gYmlu
b3BbaV0ub3AodmFsLCAqcmVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRva2VuOwotZXJyb3I6Ci0g
ICAgQ1BQRXJyb3JUb0luZm9Mb2coImluY29ycmVjdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIik7
Ci0gICAgKmVyciA9IDE7Ci0gICAgKnJlcyA9IDA7Ci0gICAgcmV0dXJuIHRva2VuOwotfSAvLyBl
dmFsCi0KLXN0YXRpYyBpbnQgQ1BQaWYoeXlzdHlwZXBwICogeXlsdmFscHApIHsKLSAgICBpbnQg
dG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOwotICAgIGludCByZXMgPSAwLCBlcnIgPSAwOwotCWNwcC0+ZWxzZXRyYWNrZXIrKzsKLSAg
ICBjcHAtPmVsc2VkZXB0aFtjcHAtPmVsc2V0cmFja2VyXSA9IDA7Ci0gICAgaWYgKCFjcHAtPmlm
ZGVwdGgrKykKLSAgICAgICAgaWZsb2MgPSAqY3BwLT50b2tlbkxvYzsKLQlpZihjcHAtPmlmZGVw
dGggPk1BWF9JRl9ORVNUSU5HKXsKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIm1heCAjaWYg
bmVzdGluZyBkZXB0aCBleGNlZWRlZCIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JdG9rZW4gPSBldmFs
KHRva2VuLCBNSU5fUFJFQywgJnJlcywgJmVyciwgeXlsdmFscHApOwotICAgIGlmICh0b2tlbiAh
PSAnXG4nKSB7Ci0gICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5z
IGZvbGxvd2luZyB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGlu
ZSIpOwotICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykKLSAgICAgICAgICAgIHRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAg
ICB9IAotICAgIGlmICghcmVzICYmICFlcnIpIHsKLSAgICAgICAgdG9rZW4gPSBDUFBlbHNlKDEs
IHl5bHZhbHBwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8vIENQUGlmCi0KLXN0
YXRpYyBpbnQgQ1BQaWZkZWYoaW50IGRlZmluZWQsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewot
ICAgIGludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7Ci0gICAgaW50IG5hbWUgPSB5eWx2YWxwcC0+c2NfaWRlbnQ7Ci0JaWYoKytj
cHAtPmlmZGVwdGggPk1BWF9JRl9ORVNUSU5HKXsKLQkgICAgQ1BQRXJyb3JUb0luZm9Mb2coIm1h
eCAjaWYgbmVzdGluZyBkZXB0aCBleGNlZWRlZCIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY3BwLT5l
bHNldHJhY2tlcisrOwotICAgIGNwcC0+ZWxzZWRlcHRoW2NwcC0+ZWxzZXRyYWNrZXJdID0gMDsK
LSAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpIHsKLSAgICAgICAgICAgIGRlZmluZWQg
PyBDUFBFcnJvclRvSW5mb0xvZygiaWZkZWYiKTpDUFBFcnJvclRvSW5mb0xvZygiaWZuZGVmIik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU3ltYm9sICpzID0gTG9va1VwU3ltYm9sKG1hY3Jvcywg
bmFtZSk7Ci0gICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgaWYgKHRva2VuICE9ICdcbicpIHsKLSAgICAg
ICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAj
aWZkZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOwotICAg
ICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpCi0gICAgICAgICAgICAgICAgdG9rZW4gPSBj
cHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICgoKHMgJiYgIXMtPmRldGFpbHMubWFjLnVuZGVmKSA/IDEgOiAw
KSAhPSBkZWZpbmVkKQotICAgICAgICAgICAgdG9rZW4gPSBDUFBlbHNlKDEsIHl5bHZhbHBwKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRva2VuOwotfSAvLyBDUFBpZmRlZgotCi1zdGF0aWMgaW50IENQ
UGxpbmUoeXlzdHlwZXBwICogeXlsdmFscHApIAotewotICAgIGludCB0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0JaWYodG9rZW49
PSdcbicpewotCQlEZWNMaW5lTnVtYmVyKCk7Ci0gICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIj
bGluZSIpOwotICAgICAgICBJbmNMaW5lTnVtYmVyKCk7Ci0JCXJldHVybiB0b2tlbjsKLQl9Ci0J
ZWxzZSBpZiAodG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5UKSB7Ci0JCXl5bHZhbHBwLT5zY19pbnQ9
YXRvaSh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwotCQlTZXRMaW5lTnVtYmVyKHl5bHZhbHBwLT5z
Y19pbnQpOwotICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgIAotCQlpZiAodG9rZW4gPT0gQ1BQX0lOVENP
TlNUQU5UKSB7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50PWF0b2koeXlsdmFscHAtPnN5
bWJvbF9uYW1lKTsKLQkJCVNldFN0cmluZ051bWJlcih5eWx2YWxwcC0+c2NfaW50KTsKLSAgICAg
ICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLQkJCWlmKHRva2VuIT0nXG4nKQotCQkJCUNQUEVycm9yVG9JbmZvTG9nKCIj
bGluZSIpOwotICAgICAgICB9Ci0JCWVsc2UgaWYgKHRva2VuID09ICdcbicpewotCQkJcmV0dXJu
IHRva2VuOwotCQl9Ci0JCWVsc2V7Ci0gICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2xp
bmUiKTsKLQkJfQotCX0KLQllbHNlewotICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjbGlu
ZSIpOwotCX0KLSAgICByZXR1cm4gdG9rZW47Ci19Ci0KLXN0YXRpYyBpbnQgQ1BQZXJyb3IoeXlz
dHlwZXBwICogeXlsdmFscHApIHsKLQotCWludCB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5z
Y2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgY29uc3QgY2hhciAqbWVzc2Fn
ZTsKLQkKLSAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykgewotCQlpZiAodG9rZW4gPT0gQ1BQX0ZM
T0FUQ09OU1RBTlQgfHwgdG9rZW4gPT0gQ1BQX0lOVENPTlNUQU5UKXsKLSAgICAgICAgICAgIFN0
b3JlU3RyKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0JCX1lbHNlIGlmKHRva2VuID09IENQUF9J
REVOVElGSUVSIHx8IHRva2VuID09IENQUF9TVFJDT05TVEFOVCl7Ci0JCQlTdG9yZVN0cihHZXRT
dHJpbmdPZkF0b20oYXRhYmxlLHl5bHZhbHBwLT5zY19pZGVudCkpOwotCQl9ZWxzZSB7Ci0JCSAg
ICBTdG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHRva2VuKSk7Ci0JCX0KLQkJdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwot
CX0KLQlEZWNMaW5lTnVtYmVyKCk7Ci0JLy9zdG9yZSB0aGlzIG1zZyBpbnRvIHRoZSBzaGFkZXIn
cyBpbmZvcm1hdGlvbiBsb2cuLnNldCB0aGUgQ29tcGlsZSBFcnJvciBmbGFnISEhIQotCW1lc3Nh
Z2U9R2V0U3RyZnJvbVRTdHIoKTsKLSAgICBDUFBTaEluZm9Mb2dNc2cobWVzc2FnZSk7Ci0gICAg
UmVzZXRUU3RyaW5nKCk7Ci0gICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICBJbmNMaW5lTnVt
YmVyKCk7Ci0gICAgcmV0dXJuICdcbic7Ci19Ly9DUFBlcnJvcgotCi1zdGF0aWMgaW50IENQUHBy
YWdtYSh5eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLQljaGFyIFNyY1N0ck5hbWVbMl07Ci0JY2hh
cioqIGFsbFRva2VuczsKLQlpbnQgdG9rZW5Db3VudCA9IDA7Ci0JaW50IG1heFRva2VuQ291bnQg
PSAxMDsKLQljb25zdCBjaGFyKiBTcmNTdHI7Ci0JaW50IGk7Ci0KLQlpbnQgdG9rZW4gPSBjcHAt
PmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCQotCWlm
ICh0b2tlbj09J1xuJykgewotCQlEZWNMaW5lTnVtYmVyKCk7Ci0gICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCIjcHJhZ21hIik7Ci0gICAgICAgIEluY0xpbmVOdW1iZXIoKTsKLQkgICAgcmV0dXJu
IHRva2VuOwotCX0KLQkKLQlhbGxUb2tlbnMgPSAoY2hhcioqKW1hbGxvYyhzaXplb2YoY2hhciop
ICogbWF4VG9rZW5Db3VudCk7CQotCi0Jd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLQkJaWYgKHRv
a2VuQ291bnQgPj0gbWF4VG9rZW5Db3VudCkgewotCQkJbWF4VG9rZW5Db3VudCAqPSAyOwotCQkJ
YWxsVG9rZW5zID0gKGNoYXIqKilyZWFsbG9jKChjaGFyKiopYWxsVG9rZW5zLCBzaXplb2YoY2hh
ciopICogbWF4VG9rZW5Db3VudCk7Ci0JCX0KLQkJc3dpdGNoICh0b2tlbikgewotCQljYXNlIENQ
UF9JREVOVElGSUVSOgotCQkJU3JjU3RyID0gR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBw
LT5zY19pZGVudCk7Ci0JCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hhciopbWFsbG9jKHN0
cmxlbihTcmNTdHIpICsgMSk7Ci0JCQlzdHJjcHkoYWxsVG9rZW5zW3Rva2VuQ291bnQrK10sIFNy
Y1N0cik7Ci0JCQlicmVhazsKLQkJY2FzZSBDUFBfSU5UQ09OU1RBTlQ6Ci0JCQlTcmNTdHIgPSB5
eWx2YWxwcC0+c3ltYm9sX25hbWU7Ci0JCQlhbGxUb2tlbnNbdG9rZW5Db3VudF0gPSAoY2hhciop
bWFsbG9jKHN0cmxlbihTcmNTdHIpICsgMSk7Ci0JCQlzdHJjcHkoYWxsVG9rZW5zW3Rva2VuQ291
bnQrK10sIFNyY1N0cik7Ci0JCQlicmVhazsKLQkJY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKLQkJ
CVNyY1N0ciA9IHl5bHZhbHBwLT5zeW1ib2xfbmFtZTsKLQkJCWFsbFRva2Vuc1t0b2tlbkNvdW50
XSA9IChjaGFyKiltYWxsb2Moc3RybGVuKFNyY1N0cikgKyAxKTsKLQkJCXN0cmNweShhbGxUb2tl
bnNbdG9rZW5Db3VudCsrXSwgU3JjU3RyKTsKLQkJCWJyZWFrOwotCQljYXNlIC0xOgotICAgICAg
ICAgICAgLy8gRU9GCi0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIiNwcmFnbWEgZGlyZWN0
aXZlIG11c3QgZW5kIHdpdGggYSBuZXdsaW5lIik7CQkJCi0JCQlyZXR1cm4gdG9rZW47Ci0JCWRl
ZmF1bHQ6Ci0JCQlTcmNTdHJOYW1lWzBdID0gdG9rZW47Ci0JCQlTcmNTdHJOYW1lWzFdID0gJ1ww
JzsKLQkJCWFsbFRva2Vuc1t0b2tlbkNvdW50XSA9IChjaGFyKiltYWxsb2MoMik7Ci0JCQlzdHJj
cHkoYWxsVG9rZW5zW3Rva2VuQ291bnQrK10sIFNyY1N0ck5hbWUpOwotCQl9Ci0JCXRva2VuID0g
Y3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLQl9
Ci0KLQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgdG9rZW4s
IHl5bHZhbHBwKTsKLQlIYW5kbGVQcmFnbWEoKGNvbnN0IGNoYXIqKilhbGxUb2tlbnMsIHRva2Vu
Q291bnQpOwotCXRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5w
dXQsIHl5bHZhbHBwKTsKLQkKLQlmb3IgKGkgPSAwOyBpIDwgdG9rZW5Db3VudDsgKytpKSB7Ci0J
CWZyZWUgKGFsbFRva2Vuc1tpXSk7Ci0JfQotCWZyZWUgKGFsbFRva2Vucyk7CQotCi0JcmV0dXJu
IHRva2VuOyAgICAKLX0gLy8gQ1BQcHJhZ21hCi0KLSNkZWZpbmUgRVNTTF9WRVJTSU9OX05VTUJF
UiAxMDAKLSNkZWZpbmUgRVNTTF9WRVJTSU9OX1NUUklORyAiMTAwIgotCi1zdGF0aWMgaW50IENQ
UHZlcnNpb24oeXlzdHlwZXBwICogeXlsdmFscHApCi17Ci0KLSAgICBpbnQgdG9rZW4gPSBjcHAt
PmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCi0gICAg
aWYgKGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID09IDEpCi0gICAgICAgIENQUFNoSW5mb0xvZ01z
ZygiI3ZlcnNpb24gbXVzdCBvY2N1ciBiZWZvcmUgYW55IG90aGVyIHN0YXRlbWVudCBpbiB0aGUg
cHJvZ3JhbSIpOwotCi0gICAgaWYodG9rZW49PSdcbicpewotCQlEZWNMaW5lTnVtYmVyKCk7Ci0g
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIpOwotICAgICAgICBJbmNMaW5lTnVt
YmVyKCk7Ci0JCXJldHVybiB0b2tlbjsKLQl9Ci0gICAgaWYgKHRva2VuICE9IENQUF9JTlRDT05T
VEFOVCkKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiN2ZXJzaW9uIik7Ci0JCi0gICAgeXls
dmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0JLy9TZXRWZXJzaW9u
TnVtYmVyKHl5bHZhbHBwLT5zY19pbnQpOwotICAgIAotICAgIGlmICh5eWx2YWxwcC0+c2NfaW50
ICE9IEVTU0xfVkVSU0lPTl9OVU1CRVIpCi0gICAgICAgIENQUFNoSW5mb0xvZ01zZygiVmVyc2lv
biBudW1iZXIgbm90IHN1cHBvcnRlZCBieSBFU1NMIik7Ci0KLSAgICB0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgCi0JaWYg
KHRva2VuID09ICdcbicpewotCQlyZXR1cm4gdG9rZW47Ci0JfQotCWVsc2V7Ci0gICAgICAgIENQ
UEVycm9yVG9JbmZvTG9nKCIjdmVyc2lvbiIpOwotCX0KLSAgICByZXR1cm4gdG9rZW47Ci19IC8v
IENQUHZlcnNpb24KLQotc3RhdGljIGludCBDUFBleHRlbnNpb24oeXlzdHlwZXBwICogeXlsdmFs
cHApCi17Ci0KLSAgICBpbnQgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgIGNoYXIgZXh0ZW5zaW9uTmFtZVs4MF07Ci0KLSAg
ICBpZih0b2tlbj09J1xuJyl7Ci0JCURlY0xpbmVOdW1iZXIoKTsKLSAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCJleHRlbnNpb24gbmFtZSBub3Qgc3BlY2lmaWVkIik7Ci0gICAgICAgIEluY0xpbmVO
dW1iZXIoKTsKLQkJcmV0dXJuIHRva2VuOwotCX0KLQotICAgIGlmICh0b2tlbiAhPSBDUFBfSURF
TlRJRklFUikKLSAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNleHRlbnNpb24iKTsKLSAgICAK
LSAgICBzdHJjcHkoZXh0ZW5zaW9uTmFtZSwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBw
LT5zY19pZGVudCkpOwotCSAgICAKLSAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2Fu
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgaWYgKHRva2VuICE9ICc6Jykgewot
ICAgICAgICBDUFBTaEluZm9Mb2dNc2coIic6JyBtaXNzaW5nIGFmdGVyIGV4dGVuc2lvbiBuYW1l
Iik7Ci0gICAgICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0gICAgCi0gICAgdG9rZW4gPSBjcHAt
PmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgIGlm
ICh0b2tlbiAhPSBDUFBfSURFTlRJRklFUikgewotICAgICAgICBDUFBTaEluZm9Mb2dNc2coImJl
aGF2aW9yIGZvciBleHRlbnNpb24gbm90IHNwZWNpZmllZCIpOwotICAgICAgICByZXR1cm4gdG9r
ZW47Ci0gICAgfQotCi0gICAgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoZXh0ZW5zaW9uTmFtZSwg
R2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwotCi0gICAgdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwot
CWlmICh0b2tlbiA9PSAnXG4nKXsKLQkJcmV0dXJuIHRva2VuOwotCX0KLQllbHNlewotICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiI2V4dGVuc2lvbiIpOwotCX0KLSAgICByZXR1cm4gdG9rZW47
Ci19IC8vIENQUGV4dGVuc2lvbgotCi1pbnQgcmVhZENQUGxpbmUoeXlzdHlwZXBwICogeXlsdmFs
cHApCi17Ci0gICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICBjb25zdCBjaGFyICptZXNzYWdlOwotICAgIGludCBp
c1ZlcnNpb24gPSAwOwotCi0gICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSKSB7Ci0gICAg
ICAgIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZGVmaW5lQXRvbSkgewotICAgICAgICAgICAg
IHRva2VuID0gQ1BQZGVmaW5lKHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxw
cC0+c2NfaWRlbnQgPT0gZWxzZUF0b20pIHsKLQkJCSBpZihDaGtDb3JyZWN0RWxzZU5lc3Rpbmco
KSl7Ci0gICAgICAgICAgICAgICAgIGlmICghY3BwLT5pZmRlcHRoICl7Ci0gICAgICAgICAgICAg
ICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2Vsc2UgbWlzbWF0Y2giKTsKLSAgICAgICAgICAg
ICAgICAgICAgIGNwcC0+Q29tcGlsZUVycm9yPTE7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gJ1xuJykgewot
ICAgICAgICAgICAgICAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tl
bnMgZm9sbG93aW5nICNlbHNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5l
d2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQotICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgfQotCQkJICAgICB0
b2tlbiA9IENQUGVsc2UoMCwgeXlsdmFscHApOwotICAgICAgICAgICAgIH1lbHNlewotICAgICAg
ICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2Vsc2UgYWZ0ZXIgYSAjZWxzZSIpOwotICAg
ICAgICAgICAgICAgICBjcHAtPmlmZGVwdGg9MDsKLSAgICAgICAgICAgICAgICAgY3BwLT5wYXN0
Rmlyc3RTdGF0ZW1lbnQgPSAxOwotICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgICB9Ci0JCX0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVsaWZBdG9tKSB7Ci0g
ICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCl7Ci0gICAgICAgICAgICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCIjZWxpZiBtaXNtYXRjaCIpOwotICAgICAgICAgICAgICAgICBjcHAtPkNvbXBp
bGVFcnJvcj0xOwotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIC8vIHRoaXMgdG9rZW4gaXMg
cmVhbGx5IGEgZG9udCBjYXJlLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBlYXQgdGhlIHRva2Vucwot
ICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOyAKLSAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQotICAg
ICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKLQkJICAgIHRva2VuID0gQ1BQZWxzZSgwLCB5eWx2YWxwcCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGVuZGlmQXRvbSkgewotCQkg
ICAgIC0tY3BwLT5lbHNldHJhY2tlcjsKLSAgICAgICAgICAgICBpZiAoIWNwcC0+aWZkZXB0aCl7
Ci0gICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlzbWF0Y2giKTsK
LSAgICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgZWxzZQotCQkJICAJIC0tY3BwLT5pZmRlcHRoOwotCSAgICB9IGVsc2UgaWYg
KHl5bHZhbHBwLT5zY19pZGVudCA9PSBpZkF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQ
UGlmKHl5bHZhbHBwKTsKLSAgICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0g
aWZkZWZBdG9tKSB7Ci0gICAgICAgICAgICAgdG9rZW4gPSBDUFBpZmRlZigxLCB5eWx2YWxwcCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoeXlsdmFscHAtPnNjX2lkZW50ID09IGlmbmRlZkF0b20pIHsK
LSAgICAgICAgICAgICB0b2tlbiA9IENQUGlmZGVmKDAsIHl5bHZhbHBwKTsKLSAgICAgICAgfSBl
bHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gbGluZUF0b20pIHsKLSAgICAgICAgICAgICB0
b2tlbiA9IENQUGxpbmUoeXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5z
Y19pZGVudCA9PSBwcmFnbWFBdG9tKSB7Ci0gICAgICAgICAgICAgdG9rZW4gPSBDUFBwcmFnbWEo
eXlsdmFscHApOwotICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19pZGVudCA9PSB1bmRl
ZkF0b20pIHsKLSAgICAgICAgICAgICB0b2tlbiA9IENQUHVuZGVmKHl5bHZhbHBwKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZXJyb3JBdG9tKSB7Ci0gICAgICAg
ICAgICAgdG9rZW4gPSBDUFBlcnJvcih5eWx2YWxwcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeXls
dmFscHAtPnNjX2lkZW50ID09IHZlcnNpb25BdG9tKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IENQ
UHZlcnNpb24oeXlsdmFscHApOwotICAgICAgICAgICAgaXNWZXJzaW9uID0gMTsKLSAgICAgICAg
fSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZXh0ZW5zaW9uQXRvbSkgewotICAgICAg
ICAgICAgdG9rZW4gPSBDUFBleHRlbnNpb24oeXlsdmFscHApOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgU3RvcmVTdHIoIkludmFsaWQgRGlyZWN0aXZlIik7Ci0gICAgICAgICAgICBT
dG9yZVN0cihHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHl5bHZhbHBwLT5zY19pZGVudCkpOwotICAg
ICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigpOwotICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKG1lc3NhZ2UpOwotICAgICAgICAgICAgUmVzZXRUU3RyaW5nKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgd2hpbGUgKHRva2VuICE9ICdcbicgJiYgdG9rZW4gIT0gMCAmJiB0b2tlbiAh
PSBFT0YpIHsKLQkJdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotCX0KLSAgICAgICAgCi0gICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1l
bnQgPSAxOwotCi0gICAgcmV0dXJuIHRva2VuOwotfSAvLyByZWFkQ1BQbGluZQotCi12b2lkIEZy
ZWVNYWNybyhNYWNyb1N5bWJvbCAqcykgewotICAgIERlbGV0ZVRva2VuU3RyZWFtKHMtPmJvZHkp
OwotfQotCi12b2lkIFByZWRlZmluZUludE1hY3JvKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1
ZSkgewotICAgIFNvdXJjZUxvYyBsb2NhdGlvbiA9IHswfTsKLSAgICBTeW1ib2wgKnN5bWJvbCA9
IE5VTEw7Ci0gICAgTWFjcm9TeW1ib2wgbWFjcm8gPSB7MH07Ci0gICAgeXlzdHlwZXBwIHZhbCA9
IHswfTsKLSAgICBpbnQgYXRvbSA9IDA7Ci0KLSAgICBtYWNyby5ib2R5ID0gTmV3VG9rZW5TdHJl
YW0obmFtZSwgbWFjcm9zLT5wb29sKTsKLSAgICB2YWwuc2NfaW50ID0gdmFsdWU7Ci0gICAgc3By
aW50Zih2YWwuc3ltYm9sX25hbWUsICIlZCIsIHZhbHVlKTsKLSAgICBSZWNvcmRUb2tlbihtYWNy
by5ib2R5LCBDUFBfSU5UQ09OU1RBTlQsICZ2YWwpOwotICAgIGF0b20gPSBMb29rVXBBZGRTdHJp
bmcoYXRhYmxlLCBuYW1lKTsKLSAgICBzeW1ib2wgPSBBZGRTeW1ib2woJmxvY2F0aW9uLCBtYWNy
b3MsIGF0b20sIE1BQ1JPX1MpOwotICAgIHN5bWJvbC0+ZGV0YWlscy5tYWMgPSBtYWNybzsKLX0K
LQotc3RhdGljIGludCBlb2Zfc2NhbihJbnB1dFNyYyAqaW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KSB7IHJldHVybiAtMTsgfQotc3RhdGljIHZvaWQgbm9vcChJbnB1dFNyYyAqaW4sIGludCBjaCwg
eXlzdHlwZXBwICogeXlsdmFscHApIHsgfQotCi1zdGF0aWMgdm9pZCBQdXNoRW9mU3JjKCkgewot
ICAgIElucHV0U3JjICppbiA9IG1hbGxvYyhzaXplb2YoSW5wdXRTcmMpKTsKLSAgICBtZW1zZXQo
aW4sIDAsIHNpemVvZihJbnB1dFNyYykpOwotICAgIGluLT5zY2FuID0gZW9mX3NjYW47Ci0gICAg
aW4tPmdldGNoID0gZW9mX3NjYW47Ci0gICAgaW4tPnVuZ2V0Y2ggPSBub29wOwotICAgIGluLT5w
cmV2ID0gY3BwLT5jdXJyZW50SW5wdXQ7Ci0gICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbjsKLX0K
LQotc3RhdGljIHZvaWQgUG9wRW9mU3JjKCkgewotICAgIGlmIChjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbiA9PSBlb2Zfc2NhbikgewotICAgICAgICBJbnB1dFNyYyAqaW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dDsKLSAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQgPSBpbi0+cHJldjsKLSAgICAgICAgZnJl
ZShpbik7Ci0gICAgfQotfQotCi1zdGF0aWMgVG9rZW5TdHJlYW0gKlByZXNjYW5NYWNyb0FyZyhU
b2tlblN0cmVhbSAqYSwgeXlzdHlwZXBwICogeXlsdmFscHApIHsKLSAgICBpbnQgdG9rZW47Ci0g
ICAgVG9rZW5TdHJlYW0gKm47Ci0gICAgUmV3aW5kVG9rZW5TdHJlYW0oYSk7Ci0gICAgZG8gewot
ICAgICAgICB0b2tlbiA9IFJlYWRUb2tlbihhLCB5eWx2YWxwcCk7Ci0gICAgICAgIGlmICh0b2tl
biA9PSBDUFBfSURFTlRJRklFUiAmJiBMb29rVXBTeW1ib2wobWFjcm9zLCB5eWx2YWxwcC0+c2Nf
aWRlbnQpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfSB3aGlsZSAodG9rZW4gPiAwKTsKLSAg
ICBpZiAodG9rZW4gPD0gMCkgcmV0dXJuIGE7Ci0gICAgbiA9IE5ld1Rva2VuU3RyZWFtKCJtYWNy
byBhcmciLCAwKTsKLSAgICBQdXNoRW9mU3JjKCk7Ci0gICAgUmVhZEZyb21Ub2tlblN0cmVhbShh
LCAwLCAwKTsKLSAgICB3aGlsZSAoKHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKSkgPiAwKSB7Ci0gICAgICAgIGlmICh0b2tlbiA9PSBD
UFBfSURFTlRJRklFUiAmJiBNYWNyb0V4cGFuZCh5eWx2YWxwcC0+c2NfaWRlbnQsIHl5bHZhbHBw
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWNvcmRUb2tlbihuLCB0b2tlbiwg
eXlsdmFscHApOwotICAgIH0KLSAgICBQb3BFb2ZTcmMoKTsKLSAgICBEZWxldGVUb2tlblN0cmVh
bShhKTsKLSAgICByZXR1cm4gbjsKLX0gLy8gUHJlc2Nhbk1hY3JvQXJnCi0KLXR5cGVkZWYgc3Ry
dWN0IE1hY3JvSW5wdXRTcmMgewotICAgIElucHV0U3JjICAgIGJhc2U7Ci0gICAgTWFjcm9TeW1i
b2wgKm1hYzsKLSAgICBUb2tlblN0cmVhbSAqKmFyZ3M7Ci19IE1hY3JvSW5wdXRTcmM7Ci0KLS8q
IG1hY3JvX3NjYW4gLS0tCi0qKiByZXR1cm4gdGhlIG5leHQgdG9rZW4gZm9yIGEgbWFjcm8gZXhw
YW5pb24sIGhhbmRsaW5nIG1hY3JvIGFyZ3MgCi0qLwotc3RhdGljIGludCBtYWNyb19zY2FuKE1h
Y3JvSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotICAgIGludCBpOwotICAg
IGludCB0b2tlbiA9IFJlYWRUb2tlbihpbi0+bWFjLT5ib2R5LCB5eWx2YWxwcCk7Ci0gICAgaWYg
KHRva2VuID09IENQUF9JREVOVElGSUVSKSB7Ci0gICAgICAgIGZvciAoaSA9IGluLT5tYWMtPmFy
Z2MtMTsgaT49MDsgaS0tKQotICAgICAgICAgICAgaWYgKGluLT5tYWMtPmFyZ3NbaV0gPT0geXls
dmFscHAtPnNjX2lkZW50KSBicmVhazsKLSAgICAgICAgaWYgKGkgPj0gMCkgewotICAgICAgICAg
ICAgUmVhZEZyb21Ub2tlblN0cmVhbShpbi0+YXJnc1tpXSwgeXlsdmFscHAtPnNjX2lkZW50LCAw
KTsKLSAgICAgICAgICAgIHJldHVybiBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICh0b2tlbiA+IDAp
IHJldHVybiB0b2tlbjsKLSAgICBpbi0+bWFjLT5idXN5ID0gMDsKLSAgICBjcHAtPmN1cnJlbnRJ
bnB1dCA9IGluLT5iYXNlLnByZXY7Ci0gICAgaWYgKGluLT5hcmdzKSB7Ci0gICAgICAgIGZvciAo
aT1pbi0+bWFjLT5hcmdjLTE7IGk+PTA7IGktLSkKLSAgICAgICAgICAgIERlbGV0ZVRva2VuU3Ry
ZWFtKGluLT5hcmdzW2ldKTsKLSAgICAgICAgZnJlZShpbi0+YXJncyk7Ci0gICAgfQotICAgIGZy
ZWUoaW4pOwotICAgIHJldHVybiBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotfSAvLyBtYWNyb19zY2FuCi0KLS8qIE1hY3JvRXhwYW5kCi0qKiBj
aGVjayBhbiBpZGVudGlmaWVyIChhdG9tKSB0byBzZWUgaWYgaXQgYSBtYWNybyB0aGF0IHNob3Vs
ZCBiZSBleHBhbmRlZC4KLSoqIElmIGl0IGlzLCBwdXNoIGFuIElucHV0U3JjIHRoYXQgd2lsbCBw
cm9kdWNlIHRoZSBhcHByb3ByaWF0ZSBleHBhbnNpb24KLSoqIGFuZCByZXR1cm4gVFJVRS4gIElm
IG5vdCwgcmV0dXJuIEZBTFNFLgotKi8KLQotaW50IE1hY3JvRXhwYW5kKGludCBhdG9tLCB5eXN0
eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBTeW1ib2wgICAgICAgICAgICAgICpzeW0gPSBMb29r
VXBTeW1ib2wobWFjcm9zLCBhdG9tKTsKLSAgICBNYWNyb0lucHV0U3JjICAgICAgICppbjsKLSAg
ICBpbnQgaSxqLCB0b2tlbiwgZGVwdGg9MDsKLSAgICBjb25zdCBjaGFyICptZXNzYWdlOwotCWlm
IChhdG9tID09IF9fTElORV9fQXRvbSkgewotICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gR2V0
TGluZU51bWJlcigpOwotICAgICAgICBzcHJpbnRmKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwiJWQi
LHl5bHZhbHBwLT5zY19pbnQpOwotICAgICAgICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwg
eXlsdmFscHApOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgaWYgKGF0b20gPT0gX19G
SUxFX19BdG9tKSB7Ci0gICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBHZXRTdHJpbmdOdW1iZXIo
KTsKLSAgICAgICAgc3ByaW50Zih5eWx2YWxwcC0+c3ltYm9sX25hbWUsIiVkIix5eWx2YWxwcC0+
c2NfaW50KTsKLSAgICAgICAgVW5nZXRUb2tlbihDUFBfSU5UQ09OU1RBTlQsIHl5bHZhbHBwKTsK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCWlmIChhdG9tID09IF9fVkVSU0lPTl9fQXRvbSkg
ewotICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLEVTU0xfVkVSU0lPTl9TVFJJ
TkcpOwotICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gYXRvaSh5eWx2YWxwcC0+c3ltYm9sX25h
bWUpOwotICAgICAgICBVbmdldFRva2VuKENQUF9JTlRDT05TVEFOVCwgeXlsdmFscHApOwotICAg
ICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgaWYgKCFzeW0gfHwgc3ltLT5kZXRhaWxzLm1hYy51
bmRlZikgcmV0dXJuIDA7Ci0gICAgaWYgKHN5bS0+ZGV0YWlscy5tYWMuYnVzeSkgcmV0dXJuIDA7
ICAgICAgICAvLyBubyByZWN1cnNpdmUgZXhwYW5zaW9ucwotICAgIGluID0gbWFsbG9jKHNpemVv
ZigqaW4pKTsKLSAgICBtZW1zZXQoaW4sIDAsIHNpemVvZigqaW4pKTsKLSAgICBpbi0+YmFzZS5z
Y2FuID0gKHZvaWQgKiltYWNyb19zY2FuOwotICAgIGluLT5iYXNlLmxpbmUgPSBjcHAtPmN1cnJl
bnRJbnB1dC0+bGluZTsKLSAgICBpbi0+YmFzZS5uYW1lID0gY3BwLT5jdXJyZW50SW5wdXQtPm5h
bWU7Ci0gICAgaW4tPm1hYyA9ICZzeW0tPmRldGFpbHMubWFjOwotICAgIGlmIChzeW0tPmRldGFp
bHMubWFjLmFyZ3MpIHsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2Nhbihj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotCQlpZiAodG9rZW4gIT0gJygnKSB7Ci0gICAg
ICAgICAgICBVbmdldFRva2VuKHRva2VuLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB5eWx2YWxw
cC0+c2NfaWRlbnQgPSBhdG9tOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgaW4tPmFyZ3MgPSBtYWxsb2MoaW4tPm1hYy0+YXJnYyAqIHNpemVvZihUb2tlblN0cmVh
bSAqKSk7Ci0gICAgICAgIGZvciAoaT0wOyBpPGluLT5tYWMtPmFyZ2M7IGkrKykKLSAgICAgICAg
ICAgIGluLT5hcmdzW2ldID0gTmV3VG9rZW5TdHJlYW0oIm1hY3JvIGFyZyIsIDApOwotCQlpPTA7
aj0wOwotICAgICAgICBkb3sKLSAgICAgICAgICAgIGRlcHRoID0gMDsKLQkJCXdoaWxlKDEpIHsK
LSAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgU3RvcmVTdHIoIkVPRiBpbiBNYWNybyAiKTsKLSAgICAgICAg
ICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2U9R2V0U3RyZnJvbVRTdHIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICBSZXNl
dFRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmKChpbi0+bWFjLT5hcmdjPT0wKSAmJiAodG9rZW4hPScp
JykpIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSAwICYmICh0b2tlbiA9PSAn
LCcgfHwgdG9rZW4gPT0gJyknKSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuID09
ICcoJykgZGVwdGgrKzsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gJyknKSBkZXB0aC0t
OwotICAgICAgICAgICAgICAgIFJlY29yZFRva2VuKGluLT5hcmdzW2ldLCB0b2tlbiwgeXlsdmFs
cHApOwotICAgICAgICAgICAgICAgIGo9MTsKLQkJCX0KLSAgICAgICAgICAgIGlmICh0b2tlbiA9
PSAnKScpIHsKLSAgICAgICAgICAgICAgICBpZigoaW4tPm1hYy0+YXJnYz09MSkgJiZqPT0wKQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpKys7Ci0JCX13aGls
ZShpIDwgaW4tPm1hYy0+YXJnYyk7Ci0KLSAgICAgICAgaWYgKGkgPCBpbi0+bWFjLT5hcmdjKSB7
Ci0gICAgICAgICAgICBTdG9yZVN0cigiVG9vIGZldyBhcmdzIGluIE1hY3JvICIpOwotICAgICAg
ICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAg
ICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7Ci0gICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2co
bWVzc2FnZSk7Ci0gICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKLSAgICAgICAgfSBlbHNlIGlm
ICh0b2tlbiAhPSAnKScpIHsKLSAgICAgICAgICAgIGRlcHRoPTA7Ci0JCQl3aGlsZSAodG9rZW4g
Pj0gMCAmJiAoZGVwdGggPiAwIHx8IHRva2VuICE9ICcpJykpIHsKLSAgICAgICAgICAgICAgICBp
ZiAodG9rZW4gPT0gJyknKSBkZXB0aC0tOwotICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5j
dXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAg
ICAgICAgICBpZiAodG9rZW4gPT0gJygnKSBkZXB0aCsrOwotICAgICAgICAgICAgfQotCQkJCi0g
ICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkgewotICAgICAgICAgICAgICAgIFN0b3JlU3RyKCJF
T0YgaW4gTWFjcm8gIik7Ci0gICAgICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9t
KGF0YWJsZSxhdG9tKSk7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZT1HZXRTdHJmcm9tVFN0cigp
OwotICAgICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZyhtZXNzYWdlKTsKLSAgICAgICAgICAg
ICAgICBSZXNldFRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIFN0b3JlU3RyKCJUb28gbWFueSBhcmdzIGluIE1hY3JvICIpOwot
ICAgICAgICAgICAgU3RvcmVTdHIoR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSxhdG9tKSk7Ci0gICAg
ICAgICAgICBtZXNzYWdlPUdldFN0cmZyb21UU3RyKCk7Ci0gICAgICAgICAgICBDUFBTaEluZm9M
b2dNc2cobWVzc2FnZSk7Ci0gICAgICAgICAgICBSZXNldFRTdHJpbmcoKTsKLQkJfQotCQlmb3Ig
KGk9MDsgaTxpbi0+bWFjLT5hcmdjOyBpKyspIHsKLSAgICAgICAgICAgIGluLT5hcmdzW2ldID0g
UHJlc2Nhbk1hY3JvQXJnKGluLT5hcmdzW2ldLCB5eWx2YWxwcCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0jaWYgMAotICAgIHByaW50ZigiICA8JXM6JWQ+Zm91bmQgbWFjcm8gJXNcbiIsIEdldEF0b21T
dHJpbmcoYXRhYmxlLCBsb2MuZmlsZSksCi0gICAgICAgICAgIGxvYy5saW5lLCBHZXRBdG9tU3Ry
aW5nKGF0YWJsZSwgYXRvbSkpOwotICAgIGZvciAoaT0wOyBpPGluLT5tYWMtPmFyZ2M7IGkrKykg
ewotICAgICAgICBwcmludGYoIlx0YXJnICVzID0gJyIsIEdldEF0b21TdHJpbmcoYXRhYmxlLCBp
bi0+bWFjLT5hcmdzW2ldKSk7Ci0gICAgICAgIER1bXBUb2tlblN0cmVhbShzdGRvdXQsIGluLT5h
cmdzW2ldKTsKLSAgICAgICAgcHJpbnRmKCInXG4iKTsKLSAgICB9Ci0jZW5kaWYKLQkvKnJldGFp
biB0aGUgaW5wdXQgc291cmNlKi8KLSAgICBpbi0+YmFzZS5wcmV2ID0gY3BwLT5jdXJyZW50SW5w
dXQ7Ci0gICAgc3ltLT5kZXRhaWxzLm1hYy5idXN5ID0gMTsKLSAgICBSZXdpbmRUb2tlblN0cmVh
bShzeW0tPmRldGFpbHMubWFjLmJvZHkpOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5i
YXNlOwotICAgIHJldHVybiAxOwotfSAvLyBNYWNyb0V4cGFuZAotCi1pbnQgQ2hrQ29ycmVjdEVs
c2VOZXN0aW5nKHZvaWQpCi17Ci0gICAgaWYoY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tl
cl09PTApewotCSAgY3BwLT5lbHNlZGVwdGhbY3BwLT5lbHNldHJhY2tlcl09MTsKLSAgICAgIHJl
dHVybiAxOyAgICAgICAgICAKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQpJbmRleDogQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODYg
KzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJ
QSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENvcnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0
aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0
byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlm
aWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3Rp
dHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0
aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBub3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVk
aXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5
b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1Ympl
Y3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNs
dXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJQSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5h
bCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5WSURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJv
ZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGgg
b3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7
IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5
b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3Rp
Y2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQgYW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJl
ZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElBIFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwg
dHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBub3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlv
biBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBu
b3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBh
cmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0
byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1heSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0
aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJl
IG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBoYXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIu
IAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIg
QkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlU
SEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNI
QU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNF
IEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIK
LVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBTSEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkg
U1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVOVEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElO
IEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQv
T1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJRElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBB
TkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0YgQ09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEg
SEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KLS8vCi0vLyBjcHAuaAotLy8KLQotI2lmICFkZWZpbmVkKF9fQ1BQ
X0gpCi0jZGVmaW5lIF9fQ1BQX0ggMQotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3BhcnNlci5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaCIKLQot
aW50IEluaXRDUFAodm9pZCk7Ci1pbnQgRmluYWxDUFAodm9pZCk7Ci1pbnQgIHJlYWRDUFBsaW5l
KHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLWludCBNYWNyb0V4cGFuZChpbnQgYXRvbSwgeXlzdHlw
ZXBwICogeXlsdmFscHApOwotaW50IENoa0NvcnJlY3RFbHNlTmVzdGluZyh2b2lkKTsKLQotdHlw
ZWRlZiBzdHJ1Y3QgTWFjcm9TeW1ib2wgewotICAgIGludCBhcmdjOwotICAgIGludCAqYXJnczsK
LSAgICBUb2tlblN0cmVhbSAqYm9keTsKLSAgICB1bnNpZ25lZCBidXN5OjE7Ci0gICAgdW5zaWdu
ZWQgdW5kZWY6MTsKLX0gTWFjcm9TeW1ib2w7Ci0KLXZvaWQgRnJlZU1hY3JvKE1hY3JvU3ltYm9s
ICopOwotdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUp
OwotCi12b2lkICBDUFBEZWJ1Z0xvZ01zZyhjb25zdCBjaGFyICptc2cpOyAgICAgIC8vIFByaW50
cyBpbmZvcm1hdGlvbiBpbnRvIGRlYnVnIGxvZwotdm9pZCAgQ1BQU2hJbmZvTG9nTXNnKGNvbnN0
IGNoYXIqKTsgICAgICAgICAvLyBTdG9yZSBjcHAgRXJyIE1zZyBpbnRvIFNoLkluZm8uTG9nCi12
b2lkICBDUFBXYXJuaW5nVG9JbmZvTG9nKGNvbnN0IGNoYXIgKm1zZyk7IC8vIFByaW50cyB3YXJu
aW5nIG1lc3NhZ2VzIGludG8gaW5mbyBsb2cKLXZvaWQgIEhhbmRsZVByYWdtYShjb25zdCBjaGFy
KiosIGludCBudW1Ub2tlbnMpOyAgLy8gI3ByYWdtYSBkaXJlY3RpdmUgY29udGFpbmVyLgotdm9p
ZCAgUmVzZXRUU3RyaW5nKHZvaWQpOyAgICAgICAgICAgICAgICAgICAvLyAjZXJyb3IgTWVzc2Fn
ZSBhcyBUU3RyaW5nLgotdm9pZCAgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciopOyAgICAgICAgICAg
ICAvLyBTdGljayBhbGwgY3BwIGVycm9ycyBpbnRvIFNoLkluZm8ubG9nICAgLgotdm9pZCAgU3Rv
cmVTdHIoY2hhciopOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgVFN0cmluZyBp
biBQYXJzZSBDb250ZXh0Lgotdm9pZCAgU2V0TGluZU51bWJlcihpbnQpOyAgICAgICAgICAgICAg
ICAgICAvLyBTZXQgbGluZSBudW1iZXIuICAKLXZvaWQgIFNldFN0cmluZ051bWJlcihpbnQpOyAg
ICAgICAgICAgICAgICAgLy8gU2V0IHN0cmluZyBudW1iZXIuICAgIAotaW50ICAgR2V0TGluZU51
bWJlcih2b2lkKTsgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgU3RyaW5nIE51
bWJlci4gCi1pbnQgICBHZXRTdHJpbmdOdW1iZXIodm9pZCk7ICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgY3VycmVudCBTdHJpbmcgTnVtYmVyLiAKLWNvbnN0IGNoYXIqIEdldFN0cmZyb21UU3Ry
KHZvaWQpOyAgICAgICAgICAgLy8gQ29udmVydCBUU3RyaW5nIHRvIFN0cmluZy4gIAotdm9pZCAg
dXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciog
YmVoYXZpb3IpOwotaW50ICAgRnJlZUNQUCh2b2lkKTsKLQotI2VuZGlmIC8vICEoZGVmaW5lZChf
X0NQUF9IKQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3Qu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVj
dC5jCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
Y3Bwc3RydWN0LmMJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5W
SURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3Ug
aW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJt
cywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmli
dXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2Yg
dGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVh
c2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJ
QQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJp
ZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBO
VklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRl
ciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0
aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVk
aXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0
aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlv
dSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUg
Y29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5n
Ci10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhl
IE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2Ug
bWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4K
LUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdo
dHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElB
IGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMg
dGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3Ro
ZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRl
ZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZU
V0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJ
RUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhF
UiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8g
RVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAot
SU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhF
IFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBU
SEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhF
T1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElB
QklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0v
LwotLy8gY3Bwc3RydWN0LmMKLS8vCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oIgot
Ci1DUFBTdHJ1Y3QgICpjcHAgICAgICA9IE5VTEw7Ci1zdGF0aWMgaW50ICByZWZDb3VudCA9IDA7
Ci0KLWludCBJbml0UHJlcHJvY2Vzc29yKHZvaWQpOwotaW50IFJlc2V0UHJlcHJvY2Vzc29yKHZv
aWQpOwotaW50IEZyZWVDUFBTdHJ1Y3Qodm9pZCk7Ci1pbnQgRmluYWxpemVQcmVwcm9jZXNzb3Io
dm9pZCk7Ci0KLS8qCi0gKiBJbml0Q1BQU3RydWN0KCkgLSBJbml0aWxhaXplIHRoZSBDUFAgc3Ry
dWN0dXJlLgotICoKLSAqLwotCi1pbnQgSW5pdENQUFN0cnVjdCh2b2lkKQotewotICAgIGludCBs
ZW47Ci0gICAgY2hhciAqcDsKLQotICAgIGNwcCA9IChDUFBTdHJ1Y3QgKikgbWFsbG9jKHNpemVv
ZihDUFBTdHJ1Y3QpKTsKLSAgICBpZiAoY3BwID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmVmQ291bnQrKzsKLQotICAgIC8vIEluaXRpYWxpemUgcHVibGljIG1lbWJlcnM6Ci0g
ICAgY3BwLT5wTGFzdFNvdXJjZUxvYyA9ICZjcHAtPmxhc3RTb3VyY2VMb2M7Ci0gICAgCi0JcCA9
IChjaGFyICopICZjcHAtPm9wdGlvbnM7Ci0gICAgbGVuID0gc2l6ZW9mKGNwcC0+b3B0aW9ucyk7
Ci0gICAgd2hpbGUgKC0tbGVuID49IDApCi0gICAgICAgIHBbbGVuXSA9IDA7Ci0gICAgIAotICAg
IFJlc2V0UHJlcHJvY2Vzc29yKCk7Ci0gICAgcmV0dXJuIDE7Ci19IC8vIEluaXRDUFBTdHJ1Y3QK
LQotaW50IFJlc2V0UHJlcHJvY2Vzc29yKHZvaWQpCi17Ci0gICAgLy8gSW5pdGlhbGl6ZSBwcml2
YXRlIG1lbWJlcnM6Ci0KLSAgICBjcHAtPmxhc3RTb3VyY2VMb2MuZmlsZSA9IDA7Ci0gICAgY3Bw
LT5sYXN0U291cmNlTG9jLmxpbmUgPSAwOwotCWNwcC0+cEM9MDsKLSAgICBjcHAtPkNvbXBpbGVF
cnJvcj0wOyAKLQljcHAtPmlmZGVwdGg9MDsKLSAgICBmb3IoY3BwLT5lbHNldHJhY2tlcj0wOyBj
cHAtPmVsc2V0cmFja2VyPDY0OyBjcHAtPmVsc2V0cmFja2VyKyspCi0JCWNwcC0+ZWxzZWRlcHRo
W2NwcC0+ZWxzZXRyYWNrZXJdPTA7IAotCWNwcC0+ZWxzZXRyYWNrZXI9MDsKLSAgICBjcHAtPnRv
a2Vuc0JlZm9yZUVPRiA9IDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLS8vSW50aWFsaXppbmcgdGhl
IFByZXByb2Nlc3Nvci4KLQotaW50IEluaXRQcmVwcm9jZXNzb3Iodm9pZCkKLXsKLSAgICMgIGRl
ZmluZSBDUFBfU1RVRkYgdHJ1ZQotICAgICAgICAjICBpZmRlZiBDUFBfU1RVRkYKLSAgICAgICAg
ICAgIEZyZWVDUFBTdHJ1Y3QoKTsKLSAgICAgICAgICAgIEluaXRDUFBTdHJ1Y3QoKTsKLSAgICAg
ICAgICAgIGNwcC0+b3B0aW9ucy5RdWlldCA9IDE7Ci0gICAgICAgICAgICBjcHAtPm9wdGlvbnMu
cHJvZmlsZVN0cmluZyA9ICJnZW5lcmljIjsKLSAgICAgICAgICAgIGlmICghSW5pdEF0b21UYWJs
ZShhdGFibGUsIDApKQotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgaWYg
KCFJbml0U2Nhbm5lcihjcHApKQotCSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICMgIGVu
ZGlmCi0gIHJldHVybiAwOyAKLX0KLQotLy9GcmVlQ1BQU3RydWN0KCkgLSBGcmVlIHRoZSBDUFAg
c3RydWN0dXJlLgotCi1pbnQgRnJlZUNQUFN0cnVjdCh2b2lkKQotewotICAgIGlmIChyZWZDb3Vu
dCkKLSAgICB7Ci0gICAgICAgZnJlZShjcHApOwotICAgICAgIHJlZkNvdW50LS07Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiAxOwotfQotCi0vL0ZpbmFsaXppbmcgdGhlIFByZXByb2Nlc3Nvci4K
LQotaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKHZvaWQpCi17Ci0gICAjICBkZWZpbmUgQ1BQX1NU
VUZGIHRydWUKLSAgICAgICAgIyAgaWZkZWYgQ1BQX1NUVUZGCi0gICAgICAgICAgICBGcmVlQXRv
bVRhYmxlKGF0YWJsZSk7Ci0gICAgICAgICAgICBGcmVlQ1BQU3RydWN0KCk7Ci0gICAgICAgICAg
ICBGcmVlU2Nhbm5lcigpOwotICAgICAgICMgIGVuZGlmCi0gIHJldHVybiAwOyAKLX0KLQotCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIGNwcHN0cnVjdC5jIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCShyZXZp
c2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAot
Q29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3Jh
dGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVy
YXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIg
dXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhp
cyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMu
ICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVz
ZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUu
Ci0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZv
bGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRz
IHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBj
b3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEg
U29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRo
ZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291
cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1
dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5v
dGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBk
aXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0
d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxv
Z29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBl
eHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5z
ZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5j
bHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUg
aW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4g
d2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdh
cmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlO
RyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJ
TkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUs
Ci1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJ
TiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwg
TlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwg
RVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9E
VUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBT
T0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRS
QUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9U
SEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwotI2luY2x1ZGUg
PHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0j
aWZuZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUg
ImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaCIKLQotLy8gZGVmYXVsdCBhbGlnbm1lbnQg
YW5kIGNodW5rc2l6ZSwgaWYgY2FsbGVkIHdpdGggMCBhcmd1bWVudHMKLSNkZWZpbmUgQ0hVTktT
SVpFICAgICAgICg2NCoxMDI0KQotI2RlZmluZSBBTElHTiAgICAgICAgICAgOAotCi0vLyB3ZSBu
ZWVkIHRvIGNhbGwgdGhlIGByZWFsJyBtYWxsb2MgYW5kIGZyZWUsIG5vdCBvdXIgcmVwbGFjZW1l
bnRzCi0jdW5kZWYgbWFsbG9jCi0jdW5kZWYgZnJlZQotCi1zdHJ1Y3QgY2h1bmsgewotICAgIHN0
cnVjdCBjaHVuayAgICAgICAgKm5leHQ7Ci19OwotCi1zdHJ1Y3QgY2xlYW51cCB7Ci0gICAgc3Ry
dWN0IGNsZWFudXAgICAgICAqbmV4dDsKLSAgICB2b2lkICAgICAgICAgICAgICAgICgqZm4pKHZv
aWQgKik7Ci0gICAgdm9pZCAgICAgICAgICAgICAgICAqYXJnOwotfTsKLQotc3RydWN0IE1lbW9y
eVBvb2xfcmVjIHsKLSAgICBzdHJ1Y3QgY2h1bmsgICAgICAgICpuZXh0OwotICAgIHVpbnRwdHJf
dCAgICAgICAgICAgZnJlZSwgZW5kOwotICAgIHNpemVfdCAgICAgICAgICAgICAgY2h1bmtzaXpl
OwotICAgIHVpbnRwdHJfdCAgICAgICAgICAgYWxpZ25tYXNrOwotICAgIHN0cnVjdCBjbGVhbnVw
ICAgICAgKmNsZWFudXA7Ci19OwotCi1NZW1vcnlQb29sICptZW1fQ3JlYXRlUG9vbChzaXplX3Qg
Y2h1bmtzaXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pCi17Ci0gICAgTWVtb3J5UG9vbCAgKnBvb2w7
Ci0KLSAgICBpZiAoYWxpZ24gPT0gMCkgYWxpZ24gPSBBTElHTjsKLSAgICBpZiAoY2h1bmtzaXpl
ID09IDApIGNodW5rc2l6ZSA9IENIVU5LU0laRTsKLSAgICBpZiAoYWxpZ24gJiAoYWxpZ24tMSkp
IHJldHVybiAwOwotICAgIGlmIChjaHVua3NpemUgPCBzaXplb2YoTWVtb3J5UG9vbCkpIHJldHVy
biAwOwotICAgIGlmIChjaHVua3NpemUgJiAoYWxpZ24tMSkpIHJldHVybiAwOwotICAgIGlmICgh
KHBvb2wgPSBtYWxsb2MoY2h1bmtzaXplKSkpIHJldHVybiAwOwotICAgIHBvb2wtPm5leHQgPSAw
OwotICAgIHBvb2wtPmNodW5rc2l6ZSA9IGNodW5rc2l6ZTsKLSAgICBwb29sLT5hbGlnbm1hc2sg
PSAodWludHB0cl90KShhbGlnbiktMTsgIAotICAgIHBvb2wtPmZyZWUgPSAoKHVpbnRwdHJfdCko
cG9vbCArIDEpICsgcG9vbC0+YWxpZ25tYXNrKSAmIH5wb29sLT5hbGlnbm1hc2s7Ci0gICAgcG9v
bC0+ZW5kID0gKHVpbnRwdHJfdClwb29sICsgY2h1bmtzaXplOwotICAgIHBvb2wtPmNsZWFudXAg
PSAwOwotICAgIHJldHVybiBwb29sOwotfQotCi12b2lkIG1lbV9GcmVlUG9vbChNZW1vcnlQb29s
ICpwb29sKQotewotICAgIHN0cnVjdCBjbGVhbnVwICAgICAgKmNsZWFudXA7Ci0gICAgc3RydWN0
IGNodW5rICAgICAgICAqcCwgKm5leHQ7Ci0KLSAgICBmb3IgKGNsZWFudXAgPSBwb29sLT5jbGVh
bnVwOyBjbGVhbnVwOyBjbGVhbnVwID0gY2xlYW51cC0+bmV4dCkgewotICAgICAgICBjbGVhbnVw
LT5mbihjbGVhbnVwLT5hcmcpOwotICAgIH0KLSAgICBmb3IgKHAgPSAoc3RydWN0IGNodW5rICop
cG9vbDsgcDsgcCA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IHAtPm5leHQ7Ci0gICAgICAgIGZy
ZWUocCk7Ci0gICAgfQotfQotCi12b2lkICptZW1fQWxsb2MoTWVtb3J5UG9vbCAqcG9vbCwgc2l6
ZV90IHNpemUpCi17Ci0gICAgc3RydWN0IGNodW5rICpjaDsKLSAgICB2b2lkICpydiA9ICh2b2lk
ICopcG9vbC0+ZnJlZTsKLSAgICBzaXplID0gKHNpemUgKyBwb29sLT5hbGlnbm1hc2spICYgfnBv
b2wtPmFsaWdubWFzazsKLSAgICBpZiAoc2l6ZSA8PSAwKSBzaXplID0gcG9vbC0+YWxpZ25tYXNr
OwotICAgIHBvb2wtPmZyZWUgKz0gc2l6ZTsKLSAgICBpZiAocG9vbC0+ZnJlZSA+IHBvb2wtPmVu
ZCB8fCBwb29sLT5mcmVlIDwgKHVpbnRwdHJfdClydikgewotICAgICAgICBzaXplX3QgbWlucmVx
ID0gKHNpemUgKyBzaXplb2Yoc3RydWN0IGNodW5rKSArIHBvb2wtPmFsaWdubWFzaykKLSAgICAg
ICAgICAgICAgICAgICAgICAmIH5wb29sLT5hbGlnbm1hc2s7Ci0gICAgICAgIHBvb2wtPmZyZWUg
PSAodWludHB0cl90KXJ2OwotICAgICAgICBpZiAobWlucmVxID49IHBvb2wtPmNodW5rc2l6ZSkg
ewotICAgICAgICAgICAgLy8gcmVxdWVzdCBzaXplIGlzIHRvbyBiaWcgZm9yIHRoZSBjaHVua3Np
emUsIHNvIGFsbG9jYXRlIGl0IGFzCi0gICAgICAgICAgICAvLyBhIHNpbmdsZSBjaHVuayBvZiB0
aGUgcmlnaHQgc2l6ZQotICAgICAgICAgICAgY2ggPSBtYWxsb2MobWlucmVxKTsKLSAgICAgICAg
ICAgIGlmICghY2gpIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2gg
PSBtYWxsb2MocG9vbC0+Y2h1bmtzaXplKTsKLSAgICAgICAgICAgIGlmICghY2gpIHJldHVybiAw
OwotICAgICAgICAgICAgcG9vbC0+ZnJlZSA9ICh1aW50cHRyX3QpY2ggKyBtaW5yZXE7Ci0gICAg
ICAgICAgICBwb29sLT5lbmQgPSAodWludHB0cl90KWNoICsgcG9vbC0+Y2h1bmtzaXplOwotICAg
ICAgICB9Ci0gICAgICAgIGNoLT5uZXh0ID0gcG9vbC0+bmV4dDsKLSAgICAgICAgcG9vbC0+bmV4
dCA9IGNoOwotICAgICAgICBydiA9ICh2b2lkICopKCgodWludHB0cl90KShjaCsxKSArIHBvb2wt
PmFsaWdubWFzaykgJiB+cG9vbC0+YWxpZ25tYXNrKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJ2Owot
fQotCi1pbnQgbWVtX0FkZENsZWFudXAoTWVtb3J5UG9vbCAqcG9vbCwgdm9pZCAoKmZuKSh2b2lk
ICopLCB2b2lkICphcmcpIHsKLSAgICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cDsKLQotICAgIHBv
b2wtPmZyZWUgPSAocG9vbC0+ZnJlZSArIHNpemVvZih2b2lkICopIC0gMSkgJiB+KHNpemVvZih2
b2lkICopLTEpOwotICAgIGNsZWFudXAgPSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKHN0cnVjdCBj
bGVhbnVwKSk7Ci0gICAgaWYgKCFjbGVhbnVwKSByZXR1cm4gLTE7Ci0gICAgY2xlYW51cC0+bmV4
dCA9IHBvb2wtPmNsZWFudXA7Ci0gICAgY2xlYW51cC0+Zm4gPSBmbjsKLSAgICBjbGVhbnVwLT5h
cmcgPSBhcmc7Ci0gICAgcG9vbC0+Y2xlYW51cCA9IGNsZWFudXA7Ci0gICAgcmV0dXJuIDA7Ci19
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgJKHJldmlzaW9u
IDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHly
aWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24o
Ik5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwK
LWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJ
RElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYg
eW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGlu
c3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1J
biBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dp
bmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3Ug
YSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJp
Z2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3
YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5W
SURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBh
bmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRo
ZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ug
b2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xh
aW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUu
Ci1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBv
ZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVz
c2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1l
eHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGlu
ZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJp
bmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNo
IHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlz
IGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJP
VklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJ
VEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9O
LUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09N
QklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJ
QSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1Q
TEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAot
VE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElP
TiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdB
UkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwK
LVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJ
U0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLSNpZm5kZWYgX19NRU1P
UllfSAotI2RlZmluZSBfX01FTU9SWV9ICi0KLXR5cGVkZWYgc3RydWN0IE1lbW9yeVBvb2xfcmVj
IE1lbW9yeVBvb2w7Ci0KLWV4dGVybiBNZW1vcnlQb29sICptZW1fQ3JlYXRlUG9vbChzaXplX3Qg
Y2h1bmtzaXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pOwotZXh0ZXJuIHZvaWQgbWVtX0ZyZWVQb29s
KE1lbW9yeVBvb2wgKik7Ci1leHRlcm4gdm9pZCAqbWVtX0FsbG9jKE1lbW9yeVBvb2wgKnAsIHNp
emVfdCBzaXplKTsKLWV4dGVybiB2b2lkICptZW1fUmVhbGxvYyhNZW1vcnlQb29sICpwLCB2b2lk
ICpvbGQsIHNpemVfdCBvbGRzaXplLCBzaXplX3QgbmV3c2l6ZSk7Ci1leHRlcm4gaW50IG1lbV9B
ZGRDbGVhbnVwKE1lbW9yeVBvb2wgKnAsIHZvaWQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnKTsK
LQotI2VuZGlmIC8qIF9fTUVNT1JZX0ggKi8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvcGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9wYXJzZXIuaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkzICswLDAgQEAKLS8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRp
b24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2Fy
ZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxv
d2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3Ig
cmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2Vw
dGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRl
cm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0
aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1l
bnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNl
IHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNl
bnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNv
ZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlm
eSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQg
bW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0
aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJl
dGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUg
Zm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlv
bnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3Ms
IHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJ
QSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9t
IE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBv
dGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQg
YnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVu
dCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mg
b3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWlu
Y29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5W
SURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRI
T1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNT
IE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFks
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFU
SU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4K
LQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElO
RElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1P
VVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJV
VElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIg
VU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBT
VFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCi0KLSNpZm5kZWYgQklTT05fUEFSU0VSX0gKLSMgZGVmaW5lIEJJU09OX1BBUlNFUl9I
Ci0KLSNpZm5kZWYgeXlzdHlwZXBwCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgaW50ICAgIHNjX2lu
dDsKLSAgICBmbG9hdCAgc2NfZnZhbDsKLSAgICBpbnQgICAgc2NfaWRlbnQ7Ci0JY2hhciAgIHN5
bWJvbF9uYW1lW01BWF9TWU1CT0xfTkFNRV9MRU4rMV07Ci19IHl5c3R5cGVwcDsKLQotIyBkZWZp
bmUgWVlTVFlQRV9JU19UUklWSUFMIDEKLSNlbmRpZgotIyBkZWZpbmUJQ1BQX0FORF9PUAkgICAg
ICAgIDI1NwotIyBkZWZpbmUJQ1BQX1NVQl9BU1NJR04JICAgIDI1OQotIyBkZWZpbmUJQ1BQX01P
RF9BU1NJR04JICAgIDI2MAotIyBkZWZpbmUJQ1BQX0FERF9BU1NJR04JMjYxCi0jIGRlZmluZQlD
UFBfRElWX0FTU0lHTgkyNjIKLSMgZGVmaW5lCUNQUF9NVUxfQVNTSUdOCTI2MwotIyBkZWZpbmUJ
Q1BQX0VRX09QCSAgICAgICAgMjY0Ci0jIGRlZmluZSAgICBDUFBfWE9SX09QICAgICAgICAgMjY1
IAotIyBkZWZpbmUJRVJST1JfU1kJICAgIDI2NgotIyBkZWZpbmUJQ1BQX0ZMT0FUQ09OU1RBTlQJ
MjY3Ci0jIGRlZmluZQlDUFBfR0VfT1AJICAgICAgICAyNjgKLSMgZGVmaW5lCUNQUF9SSUdIVF9P
UCAgICAgICAgMjY5Ci0jIGRlZmluZQlDUFBfSURFTlRJRklFUgkgICAgMjcwCi0jIGRlZmluZQlD
UFBfSU5UQ09OU1RBTlQJICAgIDI3MQotIyBkZWZpbmUJQ1BQX0xFX09QCSAgICAgICAgMjcyCi0j
IGRlZmluZQlDUFBfTEVGVF9PUAkgICAgICAgIDI3MwotIyBkZWZpbmUJQ1BQX0RFQ19PUAkyNzQK
LSMgZGVmaW5lCUNQUF9ORV9PUAkgICAgICAgIDI3NQotIyBkZWZpbmUJQ1BQX09SX09QCSAgICAg
ICAgMjc2Ci0jIGRlZmluZQlDUFBfSU5DX09QCSAgICAyNzcKLSMgZGVmaW5lCUNQUF9TVFJDT05T
VEFOVAkgICAgMjc4Ci0jIGRlZmluZQlDUFBfVFlQRUlERU5USUZJRVIJMjc5Ci0KLSMgZGVmaW5l
CUZJUlNUX1VTRVJfVE9LRU5fU1kJMjg5Ci0KLSMgZGVmaW5lCUNQUF9SSUdIVF9BU1NJR04JICAg
IDI4MAotIyBkZWZpbmUJQ1BQX0xFRlRfQVNTSUdOCSAgICAyODEKLSMgZGVmaW5lCUNQUF9BTkRf
QVNTSUdOCTI4MgotIyBkZWZpbmUJQ1BQX09SX0FTU0lHTiAgCTI4MwotIyBkZWZpbmUJQ1BQX1hP
Ul9BU1NJR04JMjg0Ci0jIGRlZmluZQlDUFBfTEVGVF9CUkFDS0VUCTI4NQotIyBkZWZpbmUJQ1BQ
X1JJR0hUX0JSQUNLRVQJMjg2Ci0jIGRlZmluZQlDUFBfTEVGVF9CUkFDRQkyODcKLSMgZGVmaW5l
CUNQUF9SSUdIVF9CUkFDRQkyODgKLQotI2VuZGlmIC8qIG5vdCBCSVNPTl9QQVJTRVJfSCAqLwpJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgJKHJl
dmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KipcCi1Db3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KLQotTlZJRElBIENv
cnBvcmF0aW9uKCJOVklESUEiKSBzdXBwbGllcyB0aGlzIHNvZnR3YXJlIHRvIHlvdSBpbgotY29u
c2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQg
eW91ciB1c2UsCi1pbnN0YWxsYXRpb24sIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBv
ZiB0aGlzIE5WSURJQSBzb2Z0d2FyZQotY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0
ZXJtcy4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGVzZQotdGVybXMsIHBsZWFzZSBkbyBu
b3QgdXNlLCBpbnN0YWxsLCBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMgTlZJRElBCi1zb2Z0
d2FyZS4KLQotSW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byBhYmlkZSBieSB0
aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMsIE5WSURJQSBn
cmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUKLWxpY2Vuc2UsIHVuZGVyIE5WSURJ
QSdzIGNvcHlyaWdodHMgaW4gdGhpcyBvcmlnaW5hbCBOVklESUEgc29mdHdhcmUgKHRoZQotIk5W
SURJQSBTb2Z0d2FyZSIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1
dGUgdGhlCi1OVklESUEgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBp
biBzb3VyY2UgYW5kL29yIGJpbmFyeQotZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlz
dHJpYnV0ZSB0aGUgTlZJRElBIFNvZnR3YXJlLCB5b3UgbXVzdAotcmV0YWluIHRoZSBjb3B5cmln
aHQgbm90aWNlIG9mIE5WSURJQSwgdGhpcyBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcKLXRleHQg
YW5kIGRpc2NsYWltZXJzIGluIGFsbCBzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgTlZJRElB
IFNvZnR3YXJlLgotTmVpdGhlciB0aGUgbmFtZSwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBu
b3IgbG9nb3Mgb2YgTlZJRElBCi1Db3Jwb3JhdGlvbiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZQotTlZJRElBIFNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTlZJRElBLgotRXhjZXB0
IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhpcyBub3RpY2UsIG5vIG90aGVyIHJpZ2h0cyBvciBs
aWNlbnNlcwotZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBOVklESUEgaGVyZWlu
LCBpbmNsdWRpbmcgYnV0IG5vdAotbGltaXRlZCB0byBhbnkgcGF0ZW50IHJpZ2h0cyB0aGF0IG1h
eSBiZSBpbmZyaW5nZWQgYnkgeW91ciBkZXJpdmF0aXZlCi13b3JrcyBvciBieSBvdGhlciB3b3Jr
cyBpbiB3aGljaCB0aGUgTlZJRElBIFNvZnR3YXJlIG1heSBiZQotaW5jb3Jwb3JhdGVkLiBObyBo
YXJkd2FyZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuIAotCi1USEUgTlZJRElBIFNPRlRXQVJFIElT
IEJFSU5HIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKLUlO
Q0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBU
SVRMRSwKLU5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UsIE9SCi1JVFMgVVNFIEFORCBPUEVSQVRJT04gRUlUSEVSIEFMT05F
IE9SIElOIENPTUJJTkFUSU9OIFdJVEggT1RIRVIKLVBST0RVQ1RTLgotCi1JTiBOTyBFVkVOVCBT
SEFMTCBOVklESUEgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsCi1JTkNJREVO
VEFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQKLVRPLCBMT1NUIFBST0ZJVFM7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLVVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBPUiBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFLCBS
RVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRQotTlZJ
RElBIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCBBTkQgV0hFVEhFUiBVTkRFUiBUSEVPUlkgT0Yg
Q09OVFJBQ1QsCi1UT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkg
T1IgT1RIRVJXSVNFLCBFVkVOIElGCi1OVklESUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotIyBpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi1leHRlcm4gQ1BQU3RydWN0
ICpjcHA7Ci1pbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKLWludCBJbml0U2Nhbm5lcihDUFBTdHJ1
Y3QgKmNwcCk7Ci1pbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6
ZSk7Ci1pbnQgU2NhbkZyb21TdHJpbmcoY2hhciAqcyk7Ci1jaGFyKiBHZXRTdHJpbmdPZkF0b20o
QXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2Nhbm5lci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2Nhbm5lci5jCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1OSArMCww
IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENv
cnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMg
c29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0
aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRl
cyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRo
ZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3Ry
aWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIg
YWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0
byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2
ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5W
SURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNl
LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3
aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJv
dmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBt
dXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBh
bmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0
cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFk
ZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhl
Ci1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGlj
ZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBn
cmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFu
eSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUK
LXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5
IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0K
LVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJ
UywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIg
RVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRB
QklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5E
IE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJP
RFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVD
SUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5Z
IFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBE
SVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBX
SEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMg
QkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotLy8KLS8vIHNjYW5uZXIuYwotLy8KLQotI2luY2x1ZGUgPHN0ZGFyZy5o
PgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3Ry
aW5nLmg+Ci0KLSNpZiAwCi0gICAgI2luY2x1ZGUgPGllZWVmcC5oPgotICAgICNlbHNlCi0gICAg
I2RlZmluZSBpc2luZmYoeCkgKCgoKihpbnQgKikmKHgpICYgMHg3ZjgwMDAwMEwpPT0weDdmODAw
MDAwTCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAoKCooaW50ICopJih4KSAmIDB4MDA3
ZmZmZmZMKT09MDAwMDAwMDAwMEwpKQotI2VuZGlmCi0KLSNpbmNsdWRlICJjb21waWxlci9wcmVw
cm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi0KLQotdHlwZWRlZiBzdHJ1Y3QgU3RyaW5nSW5wdXRTcmMg
ewotICAgIElucHV0U3JjIGJhc2U7Ci0gICAgY2hhciAqcDsKLX0gU3RyaW5nSW5wdXRTcmM7Ci0K
LXN0YXRpYyBpbnQgZW9mX3NjYW4oSW5wdXRTcmMgKmlzLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkK
LXsKLSAgICByZXR1cm4gRU9GOwotfSAvLyBlb2Zfc2NhbgotCi1zdGF0aWMgdm9pZCBub29wKElu
cHV0U3JjICppbiwgaW50IGNoLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkge30KLQotc3RhdGljIElu
cHV0U3JjIGVvZl9pbnB1dHNyYyA9IHsgMCwgJmVvZl9zY2FuLCAmZW9mX3NjYW4sICZub29wIH07
Ci0KLXN0YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICosIHl5c3R5cGVwcCAqIHl5bHZhbHBw
KTsKLQotI2RlZmluZSBFT0xfU1kgJ1xuJwotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAj
ZGVmaW5lIERCR19CUkVBS1BPSU5UKCkgX19hc20gaW50IDMKLSNlbGlmIGRlZmluZWQoX01fQU1E
NjQpCi0gICAgI2RlZmluZSBEQkdfQlJFQUtQT0lOVCgpIGFzc2VydCghIkRiZ19CcmVha3BvaW50
Iik7Ci0jZWxzZQotICAgICNkZWZpbmUgREJHX0JSRUFLUE9JTlQoKQotI2VuZGlmCi0KLSNpZiBk
ZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfTV9BTUQ2NCkKLSAgICBfX2ludDY0IFJEVFND
ICggdm9pZCApIHsKLQotICAgICAgICBfX2ludDY0IHY7Ci0gICAgCi0gICAgICAgIF9fYXNtIF9f
ZW1pdCAweDBmCi0gICAgICAgIF9fYXNtIF9fZW1pdCAweDMxCi0gICAgICAgIF9fYXNtIG1vdiBk
d29yZCBwdHIgdiwgZWF4Ci0gICAgICAgIF9fYXNtIG1vdiBkd29yZCBwdHIgdis0LCBlZHgKLSAg
ICAKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgfQotI2VuZGlmCi0KLQotaW50IEluaXRTY2FubmVy
KENQUFN0cnVjdCAqY3BwKQotewotICAgIC8vIEFkZCB2YXJpb3VzIGF0b21zIG5lZWRlZCBieSB0
aGUgQ1BQIGxpbmUgc2Nhbm5lcjoKLSAgICBpZiAoIUluaXRDUFAoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBjcHAtPm1vc3RSZWNlbnRUb2tlbiA9IDA7Ci0gICAgY3BwLT50b2tlbkxvYyA9
ICZjcHAtPmx0b2tlbkxvYzsKLQotICAgIGNwcC0+bHRva2VuTG9jLmZpbGUgPSAwOwotICAgIGNw
cC0+bHRva2VuTG9jLmxpbmUgPSAwOwotCi0gICAgY3BwLT5jdXJyZW50SW5wdXQgPSAmZW9mX2lu
cHV0c3JjOwotICAgIGNwcC0+cHJldmlvdXNfdG9rZW4gPSAnXG4nOwotICAgIGNwcC0+cGFzdEZp
cnN0U3RhdGVtZW50ID0gMDsKLQotICAgIHJldHVybiAxOwotfSAvLyBJbml0U2Nhbm5lcgotCi1p
bnQgRnJlZVNjYW5uZXIodm9pZCkKLXsKLSAgICByZXR1cm4gKEZyZWVDUFAoKSk7Ci19Ci0KLS8q
Ci0gKiBzdHJfZ2V0Y2goKQotICogdGFrZXMgY2FyZSBvZiByZWFkaW5nIGZyb20gbXVsdGlwbGUg
c3RyaW5ncy4KLSAqIHJldHVybnMgdGhlIG5leHQtY2hhciBmcm9tIHRoZSBpbnB1dCBzdHJlYW0u
Ci0gKiByZXR1cm5zIEVPRiB3aGVuIHRoZSBjb21wbGV0ZSBzaGFkZXIgaXMgcGFyc2VkLgotICov
Ci1zdGF0aWMgaW50IHN0cl9nZXRjaChTdHJpbmdJbnB1dFNyYyAqaW4pCi17Ci0JZm9yKDs7KXsK
LQkgICBpZiAoKmluLT5wKXsKLQkgICAgICBpZiAoKmluLT5wID09ICdcbicpIHsKLSAgICAgICAg
ICAgICBpbi0+YmFzZS5saW5lKys7Ci0gICAgICAgICAgICAgSW5jTGluZU51bWJlcigpOwotICAg
ICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gKmluLT5wKys7Ci0JICAgfQotCSAgIGlmKCsrKGNw
cC0+UGFXaGljaFN0cikgPCBjcHAtPlBhQXJnYyl7Ci0JCSAgZnJlZShpbik7Ci0JCSAgU2V0U3Ry
aW5nTnVtYmVyKGNwcC0+UGFXaGljaFN0cik7Ci0gICAgCSAgU2V0TGluZU51bWJlcigxKTsKLQkJ
ICBTY2FuRnJvbVN0cmluZyhjcHAtPlBhQXJndltjcHAtPlBhV2hpY2hTdHJdKTsKLQkJICBpbj0o
U3RyaW5nSW5wdXRTcmMqKWNwcC0+Y3VycmVudElucHV0OwotCSAgICAgIGNvbnRpbnVlOyAgICAg
ICAgICAgICAKLQkgICB9Ci0JICAgZWxzZXsKLQkgICAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGlu
LT5iYXNlLnByZXY7Ci0JICAgICAgY3BwLT5QYVdoaWNoU3RyPTA7Ci0gICAgICAgICAgZnJlZShp
bik7Ci0gICAgICAgICAgcmV0dXJuIEVPRjsKLSAgICAgICB9ICAKLQl9Ci19IC8vIHN0cl9nZXRj
aAotCi1zdGF0aWMgdm9pZCBzdHJfdW5nZXRjaChTdHJpbmdJbnB1dFNyYyAqaW4sIGludCBjaCwg
eXlzdHlwZXBwICp0eXBlKSB7Ci0gICAgaWYgKGluLT5wWy0xXSA9PSBjaClpbi0+cC0tOwotCWVs
c2UgewotCQkqKGluLT5wKT0nXDAnOyAvL3RoaXMgd291bGQgdGFrZSBjYXJlIG9mIHNoaWZ0aW5n
IHRvIHRoZSBwcmV2aW91cyBzdHJpbmcuCi0JICAgIGNwcC0+UGFXaGljaFN0ci0tOwotCX0gIAot
CWlmIChjaCA9PSAnXG4nKSB7Ci0gICAgICAgIGluLT5iYXNlLmxpbmUtLTsKLSAgICAgICAgRGVj
TGluZU51bWJlcigpOwotICAgIH0KLX0gLy8gc3RyX3VuZ2V0Y2gKLQotaW50IFNjYW5Gcm9tU3Ry
aW5nKGNoYXIgKnMpCi17Ci0gICAgCi0JU3RyaW5nSW5wdXRTcmMgKmluID0gbWFsbG9jKHNpemVv
ZihTdHJpbmdJbnB1dFNyYykpOwotICAgIG1lbXNldChpbiwgMCwgc2l6ZW9mKFN0cmluZ0lucHV0
U3JjKSk7Ci0JaW4tPnAgPSBzOwotICAgIGluLT5iYXNlLmxpbmUgPSAxOwotICAgIGluLT5iYXNl
LnNjYW4gPSBieXRlX3NjYW47Ci0gICAgaW4tPmJhc2UuZ2V0Y2ggPSAoaW50ICgqKShJbnB1dFNy
YyAqLCB5eXN0eXBlcHAgKikpc3RyX2dldGNoOwotICAgIGluLT5iYXNlLnVuZ2V0Y2ggPSAodm9p
ZCAoKikoSW5wdXRTcmMgKiwgaW50LCB5eXN0eXBlcHAgKikpc3RyX3VuZ2V0Y2g7Ci0gICAgaW4t
PmJhc2UucHJldiA9IGNwcC0+Y3VycmVudElucHV0OwotICAgIGNwcC0+Y3VycmVudElucHV0ID0g
JmluLT5iYXNlOwotCi0gICAgcmV0dXJuIDE7Ci19IC8vIFNjYW5Gcm9tU3RyaW5nOwotCi0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLyBGbG9hdGluZyBwb2ludCBjb25zdGFudHM6IC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLS8qCi0gKiBsQnVpbGRGbG9hdFZhbHVlKCkgLSBRdWljayBhbmQgZGlydHkgY29udmVyc2lv
biB0byBmbG9hdGluZyBwb2ludC4gIFNpbmNlIGFsbAotICogICAgICAgICB3ZSBuZWVkIGlzIHNp
bmdsZSBwcmVjaXNpb24gdGhpcyBzaG91bGQgYmUgcXVpdGUgcHJlY2lzZS4KLSAqLwotCi1zdGF0
aWMgZmxvYXQgbEJ1aWxkRmxvYXRWYWx1ZShjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIGludCBl
eHApCi17Ci0gICAgZG91YmxlIHZhbCwgZXhwdmFsLCB0ZW47Ci0gICAgaW50IGlpLCBsbGVuLCBh
YnNleHA7Ci0gICAgZmxvYXQgcnY7Ci0KLSAgICB2YWwgPSAwLjA7Ci0gICAgbGxlbiA9IGxlbjsK
LSAgICBmb3IgKGlpID0gMDsgaWkgPCBsZW47IGlpKyspCi0gICAgICAgIHZhbCA9IHZhbCoxMC4w
ICsgKHN0cltpaV0gLSAnMCcpOwotICAgIGlmIChleHAgIT0gMCkgewotICAgICAgICBhYnNleHAg
PSBleHAgPiAwID8gZXhwIDogLWV4cDsKLSAgICAgICAgZXhwdmFsID0gMS4wZjsKLSAgICAgICAg
dGVuID0gMTAuMDsKLSAgICAgICAgd2hpbGUgKGFic2V4cCkgewotICAgICAgICAgICAgaWYgKGFi
c2V4cCAmIDEpCi0gICAgICAgICAgICAgICAgZXhwdmFsICo9IHRlbjsKLSAgICAgICAgICAgIHRl
biAqPSB0ZW47Ci0gICAgICAgICAgICBhYnNleHAgPj49IDE7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGV4cCA+PSAwKSB7Ci0gICAgICAgICAgICB2YWwgKj0gZXhwdmFsOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgdmFsIC89IGV4cHZhbDsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
diA9IChmbG9hdCl2YWw7Ci0gICAgaWYgKGlzaW5mZihydikpIHsKLQkJQ1BQRXJyb3JUb0luZm9M
b2coIiBFUlJPUl9fX0ZQX0NPTlNUX09WRVJGTE9XIik7Ci0gICAgfQotICAgIHJldHVybiBydjsK
LX0gLy8gbEJ1aWxkRmxvYXRWYWx1ZQotCi0KLS8qCi0gKiBsRmxvYXRDb25zdCgpIC0gU2NhbiBh
IGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgQXNzdW1lcyB0aGF0IHRoZSBzY2FubmVyCi0gKiAg
ICAgICAgIGhhcyBzZWVuIGF0IGxlYXN0IG9uZSBkaWdpdCwgZm9sbG93ZWQgYnkgZWl0aGVyIGEg
ZGVjaW1hbCAnLicgb3IgdGhlCi0gKiAgICAgICAgIGxldHRlciAnZScuCi0gKi8KLQotc3RhdGlj
IGludCBsRmxvYXRDb25zdChjaGFyICpzdHIsIGludCBsZW4sIGludCBjaCwgeXlzdHlwZXBwICog
eXlsdmFscHApCi17Ci0gICAgaW50IEhhc0RlY2ltYWwsIGRlY2xlbiwgZXhwLCBFeHBTaWduOwot
ICAgIGludCBzdHJfbGVuOwotICAgIGZsb2F0IGx2YWw7Ci0gICAgCi0gICAgSGFzRGVjaW1hbCA9
IDA7Ci0gICAgZGVjbGVuID0gMDsKLSAgICBleHAgPSAwOwotCQotICAgIHN0cl9sZW49bGVuOwot
ICAgIGlmIChjaCA9PSAnLicpIHsKLQkJc3RyW2xlbisrXT1jaDsKLSAgICAgICAgSGFzRGVjaW1h
bCA9IDE7Ci0gICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzkn
KSB7Ci0gICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgewotICAgICAg
ICAgICAgICAgIGRlY2xlbisrOwotICAgICAgICAgICAgICAgIGlmIChsZW4gPiAwIHx8IGNoICE9
ICcwJykgewotICAgICAgICAgICAgICAgICAgICBzdHJbbGVuXSA9IGNoOwotICAgICAgICAgICAg
ICAgICAgICBsZW4rKztzdHJfbGVuKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9J
bmZvTG9nKCJFUlJPUl9fX0ZQX0NPTlNUX1RPT19MT05HIik7Ci0gICAgICAgICAgICAgICAgbGVu
ID0gMSxzdHJfbGVuPTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBFeHBvbmVudDoKLQotICAgIGlmIChjaCA9PSAnZScgfHwgY2ggPT0gJ0UnKSB7Ci0gICAgICAg
IEV4cFNpZ24gPSAxOwotCQlzdHJbbGVuKytdPWNoOwotICAgICAgICBjaCA9IGNwcC0+Y3VycmVu
dElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICBpZiAo
Y2ggPT0gJysnKSB7Ci0gICAgICAgICAgICBzdHJbbGVuKytdPWNoOyAgCi0JCQljaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAg
ICB9IGVsc2UgaWYgKGNoID09ICctJykgewotICAgICAgICAgICAgRXhwU2lnbiA9IC0xOwotCQkJ
c3RyW2xlbisrXT1jaDsKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNo
ID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYg
Y2ggPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgZXhwID0gZXhwKjEwICsgY2ggLSAnMCc7Ci0J
CQkJc3RyW2xlbisrXT1jaDsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0
LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fRVJS
T1JfSU5fRVhQT05FTlQiKTsKLSAgICAgICAgfQotICAgICAgICBleHAgKj0gRXhwU2lnbjsKLSAg
ICB9Ci0gICAgICAKLSAgICBpZiAobGVuID09IDApIHsKLSAgICAgICAgbHZhbCA9IDAuMGY7Ci0J
CXN0cmNweShzdHIsIjAuMCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0cltsZW5dPSdcMCc7
ICAgICAgCi0gICAgICAgIGx2YWwgPSBsQnVpbGRGbG9hdFZhbHVlKHN0ciwgc3RyX2xlbiwgZXhw
IC0gZGVjbGVuKTsKLSAgICB9Ci0gICAgLy8gU3VmZml4OgotICAgIAotICAgIHl5bHZhbHBwLT5z
Y19mdmFsID0gbHZhbDsKLSAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLHN0cik7Ci0g
ICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2
YWxwcCk7ICAgICAgICAgICAgCi0gICAgcmV0dXJuIENQUF9GTE9BVENPTlNUQU5UOwotfSAvLyBs
RmxvYXRDb25zdAotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gTm9ybWFsIFNjYW5uZXIgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCi1zdGF0aWMgaW50IGJ5dGVfc2NhbihJbnB1dFNyYyAq
aW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQotewotICAgIGNoYXIgc3ltYm9sX25hbWVbTUFYX1NZ
TUJPTF9OQU1FX0xFTiArIDFdOwotICAgIGNoYXIgc3RyaW5nX3ZhbFtNQVhfU1RSSU5HX0xFTiAr
IDFdOwotICAgIGludCBBbHJlYWR5Q29tcGxhaW5lZDsKLSAgICBpbnQgbGVuLCBjaCwgaWksIGl2
YWwgPSAwOwotCi0gICAgZm9yICg7OykgewotICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gMDsK
LSAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLQkJCi0gICAgICAgIHdoaWxlIChjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JyB8
fCBjaCA9PSAnXHInKSB7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gMTsKLSAgICAg
ICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7Ci0gICAgICAgIH0KLQkJCi0gICAgICAgIGNwcC0+bHRva2VuTG9jLmZpbGUgPSBj
cHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKLSAgICAgICAgY3BwLT5sdG9rZW5Mb2MubGluZSA9IGNw
cC0+Y3VycmVudElucHV0LT5saW5lOwotICAgICAgICBsZW4gPSAwOwotICAgICAgICBzd2l0Y2gg
KGNoKSB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0JCQlyZXR1cm4gY2g7IC8vIFNpbmdsZSBjaGFyYWN0
ZXIgdG9rZW4KLSAgICAgICAgY2FzZSBFT0Y6Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0JCWNh
c2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKLSAgICAgICAg
Y2FzZSAnRic6IGNhc2UgJ0cnOiBjYXNlICdIJzogY2FzZSAnSSc6IGNhc2UgJ0onOgotICAgICAg
ICBjYXNlICdLJzogY2FzZSAnTCc6IGNhc2UgJ00nOiBjYXNlICdOJzogY2FzZSAnTyc6Ci0gICAg
ICAgIGNhc2UgJ1AnOiBjYXNlICdRJzogY2FzZSAnUic6IGNhc2UgJ1MnOiBjYXNlICdUJzoKLSAg
ICAgICAgY2FzZSAnVSc6IGNhc2UgJ1YnOiBjYXNlICdXJzogY2FzZSAnWCc6IGNhc2UgJ1knOgot
ICAgICAgICBjYXNlICdaJzogY2FzZSAnXyc6Ci0gICAgICAgIGNhc2UgJ2EnOiBjYXNlICdiJzog
Y2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzoKLSAgICAgICAgY2FzZSAnZic6IGNhc2UgJ2cn
OiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2UgJ2onOgotICAgICAgICBjYXNlICdrJzogY2FzZSAn
bCc6IGNhc2UgJ20nOiBjYXNlICduJzogY2FzZSAnbyc6Ci0gICAgICAgIGNhc2UgJ3AnOiBjYXNl
ICdxJzogY2FzZSAncic6IGNhc2UgJ3MnOiBjYXNlICd0JzoKLSAgICAgICAgY2FzZSAndSc6IGNh
c2UgJ3YnOiBjYXNlICd3JzogY2FzZSAneCc6IGNhc2UgJ3knOgotICAgICAgICBjYXNlICd6Jzog
ICAgICAgICAgICAKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwg
TUFYX1NZTUJPTF9OQU1FX0xFTikgewotICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVts
ZW5dID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgIGxlbisrOwotICAgICAgICAgICAgICAgICAg
ICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFs
cHApOwkJCQkJCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IHdoaWxlICgoY2ggPj0gJ2EnICYm
IGNoIDw9ICd6JykgfHwKLSAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0g
J1onKSB8fAotICAgICAgICAgICAgICAgICAgICAgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8
Ci0gICAgICAgICAgICAgICAgICAgICBjaCA9PSAnXycpOwotICAgICAgICAgICAgaWYgKGxlbiA+
PSBNQVhfU1lNQk9MX05BTUVfTEVOKQotICAgICAgICAgICAgICAgIGxlbiA9IE1BWF9TWU1CT0xf
TkFNRV9MRU4gLSAxOwotICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAg
ICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gs
IHl5bHZhbHBwKTsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0
cmluZyhhdGFibGUsIHN5bWJvbF9uYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBDUFBfSURFTlRJ
RklFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICcwJzoKLSAgICAgICAgICAg
IHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKLSAgICAgICAgICAgIGNoID0gY3Bw
LT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAg
ICAgICAgICBpZiAoY2ggPT0gJ3gnIHx8IGNoID09ICdYJykgewotCQkJCXl5bHZhbHBwLT5zeW1i
b2xfbmFtZVtsZW4rK10gPSBjaDsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAg
IGlmICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwKLSAgICAgICAgICAgICAgICAgICAgKGNo
ID49ICdBJyAmJiBjaCA8PSAnRicpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChjaCA+PSAnYScg
JiYgY2ggPD0gJ2YnKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEFs
cmVhZHlDb21wbGFpbmVkID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaXZhbCA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIGRvIHsKLQkJCQkJCXl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10g
PSBjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdmFsIDw9IDB4MGZmZmZmZmYpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJzAnOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGNoIC0gJ0EnICsgMTA7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWkgPSBjaCAtICdhJyArIDEwOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdmFsID0gKGl2YWwgPDwgNCkgfCBp
aTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFBbHJlYWR5Q29tcGxhaW5lZCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fSEVYX0NPTlNUX09WRVJGTE9XIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAxOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAt
PmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSB3aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB8fAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCJFUlJPUl9fX0VSUk9SX0lOX0hFWF9DT05TVEFOVCIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0JCQkJ
Y3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxw
cCk7Ci0JCQkJeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IENQUF9JTlRDT05TVEFOVDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gJzAnICYmIGNo
IDw9ICc3JykgeyAvLyBvY3RhbCBpbnRlZ2VyIGNvbnN0YW50cwotICAgICAgICAgICAgICAgIEFs
cmVhZHlDb21wbGFpbmVkID0gMDsKLSAgICAgICAgICAgICAgICBpdmFsID0gMDsKLSAgICAgICAg
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVts
ZW4rK10gPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl2YWwgPD0gMHgxZmZmZmZmZikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBjaCAtICcwJzsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGl2YWwgPSAoaXZhbCA8PCAzKSB8IGlpOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBbHJlYWR5Q29tcGxhaW5lZCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX09D
VF9DT05TVF9PVkVSRkxPVyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgQWxyZWFkeUNvbXBs
YWluZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNo
ID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc3Jyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNoID09ICcuJyB8fCBjaCA9PSAnZScgfHwgY2ggPT0gJ2YnIHx8IGNo
ID09ICdoJyB8fCBjaCA9PSAneCd8fCBjaCA9PSAnRScpIAotICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGxGbG9hdENvbnN0KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBjaCwgeXlsdmFs
cHApOwotICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsK
LQkJCQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5
bHZhbHBwKTsKLQkJCQl5eWx2YWxwcC0+c2NfaW50ID0gaXZhbDsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX0lOVENPTlNUQU5UOwotICAgICAgICAgICAgfSBlbHNlIHsKLQkJCQljcHAtPmN1
cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLQkJ
CQljaCA9ICcwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4u
LgotICAgICAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKLSAgICAg
ICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotICAg
ICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVf
TEVOKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAwIHx8IGNoICE9ICcwJykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSBjaDsK
LSAgICAgICAgICAgICAgICAgICBsZW4rKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gd2hpbGUg
KGNoID49ICcwJyAmJiBjaCA8PSAnOScpOwotICAgICAgICAgICAgaWYgKGNoID09ICcuJyB8fCBj
aCA9PSAnZScgfHwgY2ggPT0gJ2YnIHx8IGNoID09ICdoJyB8fCBjaCA9PSAneCd8fCBjaCA9PSAn
RScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoeXlsdmFscHAtPnN5bWJv
bF9uYW1lLCBsZW4sIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKLQkJCQljcHAtPmN1
cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAg
ICAgICAgICAgICAgICBpdmFsID0gMDsKLSAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5l
ZCA9IDA7Ci0gICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgbGVuOyBpaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNoID0geXlsdmFscHAtPnN5bWJvbF9uYW1lW2lpXSAtICcwJzsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKChpdmFsID4gMjE0NzQ4MzY0KSB8fCAoaXZhbCA9PSAy
MTQ3NDgzNjQgJiYgY2ggPj0gOCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQWxy
ZWFkeUNvbXBsYWluZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5m
b0xvZygiRVJST1JfX19JTlRFR0VSX0NPTlNUX09WRVJGTE9XIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgaXZhbCA9IGl2YWwqMTAgKyBjaDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7Ci0gICAgICAgICAgICAg
ICAgaWYoaXZhbD09MCkKLSAgICAgICAgICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJv
bF9uYW1lLCIwIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9JTlRDT05TVEFOVDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICctJzoKLSAgICAg
ICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIENQUF9ERUNfT1A7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9Jykgewot
ICAgICAgICAgICAgICAgIHJldHVybiBDUFBfU1VCX0FTU0lHTjsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJy
ZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICctJzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnKyc6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3Vy
cmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAg
ICAgaWYgKGNoID09ICcrJykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfSU5DX09QOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gQ1BQX0FERF9BU1NJR047Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFs
cHApOwotICAgICAgICAgICAgICAgIHJldHVybiAnKyc7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IGNhc2UgJyonOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnPScpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX01VTF9BU1NJR047Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIHJldHVybiAnKic7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgY2ggPSBjcHAtPmN1
cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAg
ICAgIGlmIChjaCA9PSAnPScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX01PRF9BU1NJ
R047Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc+Jyl7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIENQUF9SSUdIVF9CUkFDRTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5
eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclJzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgY2FzZSAnOic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICc+
JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQlJBQ0tFVDsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2go
Y3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICc6JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnXic6Ci0gICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwot
ICAgICAgICAgICAgaWYgKGNoID09ICdeJykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBf
WE9SX09QOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0g
Jz0nKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1hPUl9BU1NJR047Ci0gICAgICAg
ICAgICAgICAgZWxzZXsKLSAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdl
dGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAg
cmV0dXJuICdeJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBjYXNlICc9JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdl
dGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0g
Jz0nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENQUF9FUV9PUDsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICc9JzsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnISc6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAg
ICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfTkVfT1A7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0
LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAg
ICAgIHJldHVybiAnISc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJ3wnOgotICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnfCcpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX09SX09QOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY2ggPT0gJz0nKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX09SX0FTU0lHTjsK
LSAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5w
dXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAg
ICAgICAgICByZXR1cm4gJ3wnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgY2FzZSAnJic6Ci0gICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICcm
JykgewotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfQU5EX09QOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz0nKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQ1BQX0FORF9BU1NJR047Ci0gICAgICAgICAgICAgICAgZWxzZXsKLSAgICAgICAg
ICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBj
aCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuICcmJzsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJzwnOgotICAgICAgICAgICAgY2gg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsK
LSAgICAgICAgICAgIGlmIChjaCA9PSAnPCcpIHsKLSAgICAgICAgICAgICAgICBjaCA9IGNwcC0+
Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAg
ICAgICAgICAgIGlmKGNoID09ICc9JykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9M
RUZUX0FTU0lHTjsKLSAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgICAgICBj
cHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBw
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9MRUZUX09QOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc9
JykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFX09QOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnJScpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0xFRlRfQlJBQ0U7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGNoID09ICc6JykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBD
UFBfTEVGVF9CUkFDS0VUOwotICAgICAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAg
ICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwnOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICBjYXNlICc+JzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gJz4n
KSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICBpZihjaCA9PSAnPScpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBDUFBfUklHSFRfQVNTSUdOOwotICAgICAgICAgICAg
ICAgIGVsc2V7Ci0gICAgICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNo
KGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1BQX1JJR0hUX09QOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQ1BQX0dFX09QOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBj
aCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJz4nOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSAnLic6Ci0gICAgICAgICAgICBj
aCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHAp
OwotICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAgICAg
ICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5
bHZhbHBwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoeXlsdmFscHAtPnN5
bWJvbF9uYW1lLCAwLCAnLicsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNoID09ICcuJykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
LTE7IC8vIFNwZWNpYWwgRU9GIGhhY2sKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcuJzsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgJy8nOgotICAgICAgICAg
ICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZh
bHBwKTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICBkbyB7
Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+
Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT0g
J1xuJyAmJiBjaCAhPSBFT0YpOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PSBFT0YpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1xuJzsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgaW50
IG5sY291bnQgPSAwOwotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdl
dGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAgICAgZG8gewot
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyonKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY2ggPT0gJ1xuJykgbmxjb3VudCsrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoID09IEVPRikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCJFUlJPUl9fX0VPRl9JTl9DT01NRU5UIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19FT0ZfSU5fQ09NTUVOVCIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT0gJy8nKTsKLSAgICAgICAgICAgICAg
ICBpZiAobmxjb3VudCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xuJzsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gR28gdHJ5IGl0IGFnYWluLi4uCi0gICAg
ICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAgIHJldHVybiBD
UFBfRElWX0FTU0lHTjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3Bw
LT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcvJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50
SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB3
aGlsZSAoY2ggIT0gJyInICYmIGNoICE9ICdcbicgJiYgY2ggIT0gRU9GKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNoID09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0lu
Zm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKFxcKSBpcyBub3QgcGFydCBv
ZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobGVuIDwg
TUFYX1NUUklOR19MRU4pIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW5dID0g
Y2g7Ci0gICAgICAgICAgICAgICAgICAgIGxlbisrOwotICAgICAgICAgICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBzdHJpbmdfdmFs
W2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgaWYgKGNoID09ICciJykgewotICAgICAgICAgICAg
ICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN0cmluZ192
YWwpOwotICAgICAgICAgICAgICAgIHJldHVybiBDUFBfU1RSQ09OU1RBTlQ7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0NQ
UF9FT0xfSU5fU1RSSU5HIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX1NZOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfSAvLyBieXRlX3NjYW4KLQotaW50IHl5bGV4
X0NQUChjaGFyKiBidWYsIGludCBtYXhTaXplKQoteyAgICAKLQl5eXN0eXBlcHAgeXlsdmFscHA7
Ci0gICAgaW50IHRva2VuID0gJ1xuJzsgICAKLQotICAgIGZvcig7OykgewotCi0gICAgICAgIGNo
YXIqIHRva2VuU3RyaW5nID0gMDsKLSAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgJnl5bHZhbHBwKTsKLQkJaWYoY2hlY2tfRU9GKHRva2Vu
KSkKLQkJICAgIHJldHVybiAwOwotICAgICAgICBpZiAodG9rZW4gPT0gJyMnKSB7Ci0gICAgICAg
ICAgICBpZiAoY3BwLT5wcmV2aW91c190b2tlbiA9PSAnXG4nfHwgY3BwLT5wcmV2aW91c190b2tl
biA9PSAwKSB7Ci0JCQkgICAgdG9rZW4gPSByZWFkQ1BQbGluZSgmeXlsdmFscHApOwotICAgICAg
ICAgICAgICAgIGlmKGNoZWNrX0VPRih0b2tlbikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwotCQkJICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBDUFBFcnJvclRvSW5mb0xvZygicHJlcHJvY2Vzc29yIGNvbW1hbmQgbXVzdCBub3QgYmUg
cHJlY2VkZWQgYnkgYW55IG90aGVyIHN0YXRlbWVudCBpbiB0aGF0IGxpbmUiKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjcHAt
PnByZXZpb3VzX3Rva2VuID0gdG9rZW47Ci0gICAgICAgIC8vIGV4cGFuZCBtYWNyb3MKLSAgICAg
ICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSICYmIE1hY3JvRXhwYW5kKHl5bHZhbHBwLnNj
X2lkZW50LCAmeXlsdmFscHApKSB7Ci0gICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVu
dCA9IDE7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKHRva2VuID09ICdcbicpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAK
LSAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSKSB7ICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOwotICAgICAgICAgICAgdG9r
ZW5TdHJpbmcgPSBHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHl5bHZhbHBwLnNjX2lkZW50KTsKLSAg
ICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05TVEFOVHx8dG9rZW4gPT0gQ1BQ
X0lOVENPTlNUQU5UKXsgICAgICAgICAgICAgCi0gICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0
YXRlbWVudCA9IDE7ICAgICAgICAgICAgCi0gICAgICAgICAgICB0b2tlblN0cmluZyA9IHl5bHZh
bHBwLnN5bWJvbF9uYW1lOwotCQl9IGVsc2UgeyAgICAgICAgICAgIAotICAgICAgICAgICAgY3Bw
LT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOyAgICAgICAgICAgIAotICAgICAgICAgICAgdG9rZW5T
dHJpbmcgPSBHZXRTdHJpbmdPZkF0b20oYXRhYmxlLHRva2VuKTsKLQkgICAgfQotCi0gICAgICAg
IGlmICh0b2tlblN0cmluZykgewotICAgICAgICAgICAgaWYgKChzaWduZWQpc3RybGVuKHRva2Vu
U3RyaW5nKSA+PSBtYXhTaXplKSB7Ci0gICAgICAgICAgICAgICAgY3BwLT50b2tlbnNCZWZvcmVF
T0YgPSAxOwotICAgICAgICAgICAgICAgIHJldHVybiBtYXhTaXplOyAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgfSBlbHNlICBpZiAoc3RybGVuKHRva2VuU3RyaW5nKSA+IDApIHsKLQkJCSAg
ICBzdHJjcHkoYnVmLCB0b2tlblN0cmluZyk7Ci0gICAgICAgICAgICAgICAgY3BwLT50b2tlbnNC
ZWZvcmVFT0YgPSAxOwotICAgICAgICAgICAgICAgIHJldHVybiAoaW50KXN0cmxlbih0b2tlblN0
cmluZyk7Ci0gICAgICAgICAgICB9ICAKLQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0gLy8geXlsZXgKLQotLy9DaGVja3MgaWYgdGhl
IHRva2VuIGp1c3QgcmVhZCBpcyBFT0Ygb3Igbm90LgotaW50IGNoZWNrX0VPRihpbnQgdG9rZW4p
Ci17Ci0gICBpZih0b2tlbj09LTEpewotICAgICAgIGlmKGNwcC0+aWZkZXB0aCA+MCl7Ci0JCUNQ
UEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlzc2luZyEhIENvbXBpbGF0aW9uIHN0b3BwZWQiKTsK
LSAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKLSAgICAgICB9Ci0gICAgICByZXR1cm4gMTsK
LSAgIH0KLSAgIHJldHVybiAwOwotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVuZCBvZiBz
Y2FubmVyLmMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg1ICsw
LDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEg
Q29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhp
cyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8g
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmlj
YXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1
dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGgg
dGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlz
dHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91
ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0
IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVz
aXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwg
TlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1
Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9y
IHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBw
cm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91
IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNl
IGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRp
c3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRy
YWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24g
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90
aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJl
IGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8g
YW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2
ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBt
YXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAK
LQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJB
U0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhF
UiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBB
TkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1Q
Uk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQ
RUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBB
TlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09S
IERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5E
IFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhB
UyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCi0vLwotLy8gc2Nhbm5lci5oCi0vLwotCi0jaWYgIWRlZmluZWQoX19T
Q0FOTkVSX0gpCi0jZGVmaW5lIF9fU0NBTk5FUl9IIDEKLQotI2RlZmluZSBNQVhfU1lNQk9MX05B
TUVfTEVOIDEyOAotI2RlZmluZSBNQVhfU1RSSU5HX0xFTiA1MTIKLQotI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaCIKLQotLy8gTm90IHJlYWxseSBhdG9tIHRhYmxlIHN0
dWZmIGJ1dCBuZWVkZWQgZmlyc3QuLi4KLQotdHlwZWRlZiBzdHJ1Y3QgU291cmNlTG9jX1JlYyB7
Ci0gICAgdW5zaWduZWQgc2hvcnQgZmlsZSwgbGluZTsKLX0gU291cmNlTG9jOwotCi1pbnQgeXlw
YXJzZSAodm9pZCk7Ci0KLWludCB5eWxleF9DUFAoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSk7Ci0K
LXR5cGVkZWYgc3RydWN0IElucHV0U3JjIHsKLSAgICBzdHJ1Y3QgSW5wdXRTcmMJKnByZXY7Ci0g
ICAgaW50CQkJKCpzY2FuKShzdHJ1Y3QgSW5wdXRTcmMgKiwgeXlzdHlwZXBwICopOwotICAgIGlu
dAkJCSgqZ2V0Y2gpKHN0cnVjdCBJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKik7Ci0gICAgdm9pZAkJ
KCp1bmdldGNoKShzdHJ1Y3QgSW5wdXRTcmMgKiwgaW50LCB5eXN0eXBlcHAgKik7Ci0gICAgaW50
CQkJbmFtZTsgIC8qIGF0b20gKi8KLSAgICBpbnQJCQlsaW5lOwotfSBJbnB1dFNyYzsKLQotaW50
IEluaXRTY2FubmVyKENQUFN0cnVjdCAqY3BwKTsgICAvLyBJbnRpYWxpc2UgdGhlIGNwcCBzY2Fu
bmVyLiAKLWludCBTY2FuRnJvbVN0cmluZyhjaGFyICopOyAgICAgIC8vIFN0YXJ0IHNjYW5uaW5n
IHRoZSBpbnB1dCBmcm9tIHRoZSBzdHJpbmcgbWVudGlvbmVkLgotaW50IGNoZWNrX0VPRihpbnQp
OyAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGl0IGEgRU9GIGFicnVwdGx5IAotdm9pZCBD
UFBFcnJvclRvSW5mb0xvZyhjaGFyICopOyAgIC8vIHN0aWNraW5nIHRoZSBtc2csbGluZSBpbnRv
IHRoZSBTaGFkZXIncy5JbmZvLmxvZwotdm9pZCBTZXRMaW5lTnVtYmVyKGludCk7Ci12b2lkIFNl
dFN0cmluZ051bWJlcihpbnQpOwotdm9pZCBJbmNMaW5lTnVtYmVyKHZvaWQpOwotdm9pZCBEZWNM
aW5lTnVtYmVyKHZvaWQpOwotaW50IEZyZWVTY2FubmVyKHZvaWQpOyAgICAgICAgICAgICAgICAg
Ly8gRnJlZSB0aGUgY3BwIHNjYW5uZXIKLSNlbmRpZiAvLyAhKGRlZmluZWQoX19TQ0FOTkVSX0gp
Ci0KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaAko
cmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xv
YmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBD
b3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMgdGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNv
bnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5k
IHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24g
b2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2Ug
dGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8g
bm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29m
dHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkg
dGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEg
Z3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklE
SUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJO
VklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmli
dXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywg
aW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1zOyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRp
c3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwgeW91IG11c3QKLXJldGFpbiB0aGUgY29weXJp
Z2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0
IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJ
QSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mg
bm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRpb24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2Vw
dCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3Ig
bGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVp
biwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQgdG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBt
YXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29y
a3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2FyZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8g
aGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVyLiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJ
UyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1J
TkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
VElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9O
RSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVSCi1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQg
U0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULAotSU5DSURF
TlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwg
UkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5W
SURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9G
IENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZ
IE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8g
c2xnbG9iYWxzLmgKLS8vCi0KLSNpZiAhZGVmaW5lZChfX1NMR0xPQkFMU19IKQotI2RlZmluZSBf
X1NMR0xPQkFMU19IIDEKLQotdHlwZWRlZiBzdHJ1Y3QgQ1BQU3RydWN0X1JlYyBDUFBTdHJ1Y3Q7
Ci0KLWV4dGVybiBDUFBTdHJ1Y3QgKmNwcDsKLQotI3VuZGVmICBDUFBDX0RFQlVHX1RIRV9DT01Q
SUxFUgotI2lmIGRlZmluZWQoX0RFQlVHKQotI2RlZmluZSBDUFBDX0RFQlVHX1RIRV9DT01QSUxF
UiAxCi0jZW5kaWYKLQotI3VuZGVmICBDUFBDX0VOQUJMRV9UT09MUwotI2RlZmluZSBDUFBDX0VO
QUJMRV9UT09MUyAxCi0KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5Lmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uaCIKLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaCIKLSNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oIgotI2lmICFkZWZpbmVkKE5PX1BBUlNFUikKLSNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCi0jZW5kaWYKLQotI2lmICFk
ZWZpbmVkKE5VTEwpCi0jZGVmaW5lIE5VTEwgMAotI2VuZGlmCi0KLSNlbmRpZiAvLyAhKGRlZmlu
ZWQoX19TTEdMT0JBTFNfSCkKLQotCi0gICAgCi0KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc3ltYm9scy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc3ltYm9scy5jCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4NCArMCww
IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENv
cnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMg
c29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRo
ZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0
aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRl
cyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRo
ZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3Ry
aWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIg
YWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0
byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2
ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5W
SURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNl
LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3
aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJv
dmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBt
dXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBh
bmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0
cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFk
ZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhl
Ci1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGlj
ZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBn
cmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFu
eSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUK
LXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5
IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0K
LVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJ
UywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIg
RVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRB
QklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5E
IE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJP
RFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVD
SUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5Z
IFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBE
SVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBX
SEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMg
QkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotLy8KLS8vIHN5bWJvbHMuYwotLy8KLQotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJj
b21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBT
eW1ib2wgVGFibGUgVmFyaWFibGVzOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotU2NvcGUgKlNjb3Bl
TGlzdCA9IE5VTEw7Ci1TY29wZSAqQ3VycmVudFNjb3BlID0gTlVMTDsKLVNjb3BlICpHbG9iYWxT
Y29wZSA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkIHVubGlua1Njb3BlKHZvaWQgKl9zY29wZSkgewot
ICAgIFNjb3BlICpzY29wZSA9IF9zY29wZTsKLQotICAgIGlmIChzY29wZS0+bmV4dCkKLSAgICAg
ICAgc2NvcGUtPm5leHQtPnByZXYgPSBzY29wZS0+cHJldjsKLSAgICBpZiAoc2NvcGUtPnByZXYp
Ci0gICAgICAgIHNjb3BlLT5wcmV2LT5uZXh0ID0gc2NvcGUtPm5leHQ7Ci0gICAgZWxzZQotICAg
ICAgICBTY29wZUxpc3QgPSBzY29wZS0+bmV4dDsKLX0KLQotLyoKLSAqIE5ld1Njb3BlKCkKLSAq
Ci0gKi8KLVNjb3BlICpOZXdTY29wZUluUG9vbChNZW1vcnlQb29sICpwb29sKQotewotICAgIFNj
b3BlICpsU2NvcGU7Ci0KLSAgICBsU2NvcGUgPSBtZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFNjb3Bl
KSk7Ci0gICAgbFNjb3BlLT5wb29sID0gcG9vbDsKLSAgICBsU2NvcGUtPnBhcmVudCA9IE5VTEw7
Ci0gICAgbFNjb3BlLT5mdW5TY29wZSA9IE5VTEw7Ci0gICAgbFNjb3BlLT5zeW1ib2xzID0gTlVM
TDsKLSAgICAKLSAgICBsU2NvcGUtPmxldmVsID0gMDsKLQotICAgIGxTY29wZS0+cHJvZ3JhbXMg
PSBOVUxMOwotICAgIGlmICgobFNjb3BlLT5uZXh0ID0gU2NvcGVMaXN0KSkKLSAgICAgICAgU2Nv
cGVMaXN0LT5wcmV2ID0gbFNjb3BlOwotICAgIGxTY29wZS0+cHJldiA9IDA7Ci0gICAgU2NvcGVM
aXN0ID0gbFNjb3BlOwotICAgIG1lbV9BZGRDbGVhbnVwKHBvb2wsIHVubGlua1Njb3BlLCBsU2Nv
cGUpOwotICAgIHJldHVybiBsU2NvcGU7Ci19IC8vIE5ld1Njb3BlCi0KLS8qCi0gKiBQdXNoU2Nv
cGUoKQotICoKLSAqLwotCi12b2lkIFB1c2hTY29wZShTY29wZSAqZlNjb3BlKQotewotICAgIFNj
b3BlICpsU2NvcGU7Ci0KLSAgICBpZiAoQ3VycmVudFNjb3BlKSB7Ci0gICAgICAgIGZTY29wZS0+
bGV2ZWwgPSBDdXJyZW50U2NvcGUtPmxldmVsICsgMTsKLSAgICAgICAgaWYgKGZTY29wZS0+bGV2
ZWwgPT0gMSkgewotICAgICAgICAgICAgaWYgKCFHbG9iYWxTY29wZSkgewotICAgICAgICAgICAg
ICAgIC8qIEhBQ0sgLSBDVEQgLS0gaWYgR2xvYmFsU2NvcGU9PU5VTEwgYW5kIGxldmVsPT0xLCB3
ZSdyZQotICAgICAgICAgICAgICAgICAqIGRlZmluaW5nIGEgZnVuY3Rpb24gaW4gdGhlIHN1cGVy
Z2xvYmFsIHNjb3BlLiAgVGhpbmdzCi0gICAgICAgICAgICAgICAgICogd2lsbCBicmVhayBpZiB3
ZSBsZWF2ZSB0aGUgbGV2ZWwgYXMgMSwgc28gd2UgYXJiaXRyYXJpbHkKLSAgICAgICAgICAgICAg
ICAgKiBzZXQgaXQgdG8gMiAqLwotICAgICAgICAgICAgICAgIGZTY29wZS0+bGV2ZWwgPSAyOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChmU2NvcGUtPmxldmVsID49IDIp
IHsKLSAgICAgICAgICAgIGxTY29wZSA9IGZTY29wZTsKLSAgICAgICAgICAgIHdoaWxlIChsU2Nv
cGUtPmxldmVsID4gMikKLSAgICAgICAgICAgICAgICBsU2NvcGUgPSBsU2NvcGUtPm5leHQ7Ci0g
ICAgICAgICAgICBmU2NvcGUtPmZ1blNjb3BlID0gbFNjb3BlOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgZlNjb3BlLT5sZXZlbCA9IDA7Ci0gICAgfQotICAgIGZTY29wZS0+cGFy
ZW50ID0gQ3VycmVudFNjb3BlOwotICAgIEN1cnJlbnRTY29wZSA9IGZTY29wZTsKLX0gLy8gUHVz
aFNjb3BlCi0KLS8qCi0gKiBQb3BTY29wZSgpCi0gKgotICovCi0KLVNjb3BlICpQb3BTY29wZSh2
b2lkKQotewotICAgIFNjb3BlICpsU2NvcGU7Ci0KLSAgICBsU2NvcGUgPSBDdXJyZW50U2NvcGU7
Ci0gICAgaWYgKEN1cnJlbnRTY29wZSkKLSAgICAgICAgQ3VycmVudFNjb3BlID0gQ3VycmVudFNj
b3BlLT5wYXJlbnQ7Ci0gICAgcmV0dXJuIGxTY29wZTsKLX0gLy8gUG9wU2NvcGUKLQotLyoKLSAq
IE5ld1N5bWJvbCgpIC0gQWxsb2NhdGUgYSBuZXcgc3ltYm9sIG5vZGU7Ci0gKgotICovCi0KLVN5
bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwg
c3ltYm9sa2luZCBraW5kKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0gICAgY2hhciAqcGNoOwot
ICAgIHVuc2lnbmVkIGludCBpaTsKLQotICAgIGxTeW1iID0gKFN5bWJvbCAqKSBtZW1fQWxsb2Mo
ZlNjb3BlLT5wb29sLCBzaXplb2YoU3ltYm9sKSk7Ci0gICAgbFN5bWItPmxlZnQgPSBOVUxMOwot
ICAgIGxTeW1iLT5yaWdodCA9IE5VTEw7Ci0gICAgbFN5bWItPm5leHQgPSBOVUxMOwotICAgIGxT
eW1iLT5uYW1lID0gbmFtZTsKLSAgICBsU3ltYi0+bG9jID0gKmxvYzsKLSAgICBsU3ltYi0+a2lu
ZCA9IGtpbmQ7Ci0gICAgCi0gICAgLy8gQ2xlYXIgdW5pb24gYXJlYToKLQotICAgIHBjaCA9IChj
aGFyICopICZsU3ltYi0+ZGV0YWlsczsKLSAgICBmb3IgKGlpID0gMDsgaWkgPCBzaXplb2YobFN5
bWItPmRldGFpbHMpOyBpaSsrKQotICAgICAgICAqcGNoKysgPSAwOwotICAgIHJldHVybiBsU3lt
YjsKLX0gLy8gTmV3U3ltYm9sCi0KLS8qCi0gKiBsQWRkVG9UcmVlKCkgLSBVc2luZyBhIGJpbmFy
eSB0cmVlIGlzIG5vdCBhIGdvb2QgaWRlYSBmb3IgYmFzaWMgYXRvbSB2YWx1ZXMgYmVjYXVzZSB0
aGV5Ci0gKiAgICAgICAgIGFyZSBnZW5lcmF0ZWQgaW4gb3JkZXIuICBXZSdsbCBmaXggdGhpcyBs
YXRlciAoYnkgcmV2ZXJzaW5nIHRoZSBiaXQgcGF0dGVybikuCi0gKi8KLQotc3RhdGljIHZvaWQg
bEFkZFRvVHJlZShTeW1ib2wgKipmU3ltYm9scywgU3ltYm9sICpmU3ltYikKLXsKLSAgICBTeW1i
b2wgKmxTeW1iOwotICAgIGludCBscmV2LCBmcmV2OwotCi0gICAgbFN5bWIgPSAqZlN5bWJvbHM7
Ci0gICAgaWYgKGxTeW1iKSB7Ci0gICAgICAgIGZyZXYgPSBHZXRSZXZlcnNlZEF0b20oYXRhYmxl
LCBmU3ltYi0+bmFtZSk7Ci0gICAgICAgIHdoaWxlIChsU3ltYikgewotICAgICAgICAgICAgbHJl
diA9IEdldFJldmVyc2VkQXRvbShhdGFibGUsIGxTeW1iLT5uYW1lKTsKLSAgICAgICAgICAgIGlm
IChscmV2ID09IGZyZXYpIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiR2V0
QXRvbVN0cmluZyhhdGFibGUsIGZTeW1iLT5uYW1lKSIpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobHJldiA+IGZyZXYp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5sZWZ0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBsU3ltYiA9IGxTeW1iLT5sZWZ0OwotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWItPmxlZnQgPSBmU3ltYjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxTeW1iLT5yaWdodCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbFN5bWIgPSBsU3ltYi0+cmlnaHQ7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsU3ltYi0+cmln
aHQgPSBmU3ltYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgKmZTeW1ib2xzID0gZlN5bWI7Ci0gICAgfQotfSAvLyBsQWRk
VG9UcmVlCi0KLQotLyoKLSAqIEFkZFN5bWJvbCgpIC0gQWRkIGEgdmFyaWFibGUsIHR5cGUsIG9y
IGZ1bmN0aW9uIG5hbWUgdG8gYSBzY29wZS4KLSAqCi0gKi8KLQotU3ltYm9sICpBZGRTeW1ib2wo
U291cmNlTG9jICpsb2MsIFNjb3BlICpmU2NvcGUsIGludCBhdG9tLCBzeW1ib2xraW5kIGtpbmQp
Ci17Ci0gICAgU3ltYm9sICpsU3ltYjsKLQotICAgIGlmICghZlNjb3BlKQotICAgICAgICBmU2Nv
cGUgPSBDdXJyZW50U2NvcGU7Ci0gICAgbFN5bWIgPSBOZXdTeW1ib2wobG9jLCBmU2NvcGUsIGF0
b20sIGtpbmQpOwotICAgIGxBZGRUb1RyZWUoJmZTY29wZS0+c3ltYm9scywgbFN5bWIpOwotICAg
IHJldHVybiBsU3ltYjsKLX0gLy8gQWRkU3ltYm9sCi0KLQotLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog
U3ltYm9sIFNlbWFudGljIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogTG9va1Vw
TG9jYWxTeW1ib2woKQotICoKLSAqLwotCi1TeW1ib2wgKkxvb2tVcExvY2FsU3ltYm9sKFNjb3Bl
ICpmU2NvcGUsIGludCBhdG9tKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0gICAgaW50IHJuYW1l
LCByYXRvbTsKLQotICAgIHJhdG9tID0gR2V0UmV2ZXJzZWRBdG9tKGF0YWJsZSwgYXRvbSk7Ci0g
ICAgaWYgKCFmU2NvcGUpCi0gICAgICAgIGZTY29wZSA9IEN1cnJlbnRTY29wZTsKLSAgICBsU3lt
YiA9IGZTY29wZS0+c3ltYm9sczsKLSAgICB3aGlsZSAobFN5bWIpIHsKLSAgICAgICAgcm5hbWUg
PSBHZXRSZXZlcnNlZEF0b20oYXRhYmxlLCBsU3ltYi0+bmFtZSk7Ci0gICAgICAgIGlmIChybmFt
ZSA9PSByYXRvbSkgewotICAgICAgICAgICAgcmV0dXJuIGxTeW1iOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKHJuYW1lID4gcmF0b20pIHsKLSAgICAgICAgICAgICAgICBsU3lt
YiA9IGxTeW1iLT5sZWZ0OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBs
U3ltYiA9IGxTeW1iLT5yaWdodDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gTlVMTDsKLX0gLy8gTG9va1VwTG9jYWxTeW1ib2wKLQotLyoKLSAqIExvb2tVcFN5
bWJvbCgpCi0gKgotICovCi0KLVN5bWJvbCAqTG9va1VwU3ltYm9sKFNjb3BlICpmU2NvcGUsIGlu
dCBhdG9tKQotewotICAgIFN5bWJvbCAqbFN5bWI7Ci0KLSAgICBpZiAoIWZTY29wZSkKLSAgICAg
ICAgZlNjb3BlID0gQ3VycmVudFNjb3BlOwotICAgIHdoaWxlIChmU2NvcGUpIHsKLSAgICAgICAg
bFN5bWIgPSBMb29rVXBMb2NhbFN5bWJvbChmU2NvcGUsIGF0b20pOwotICAgICAgICBpZiAobFN5
bWIpCi0gICAgICAgICAgICByZXR1cm4gbFN5bWI7Ci0gICAgICAgIGZTY29wZSA9IGZTY29wZS0+
cGFyZW50OwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0gLy8gTG9va1VwU3ltYm9sCi0KSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCShyZXZpc2lvbiA3
NDY1OCkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLUNvcHly
aWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklESUEgQ29ycG9yYXRpb24o
Ik5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGluCi1jb25zaWRlcmF0aW9u
IG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCB5b3VyIHVzZSwK
LWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgTlZJ
RElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zLiAgSWYg
eW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNlIGRvIG5vdCB1c2UsIGlu
c3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEKLXNvZnR3YXJlLgotCi1J
biBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dp
bmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJRElBIGdyYW50cyB5b3Ug
YSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIgTlZJRElBJ3MgY29weXJp
Z2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhlCi0iTlZJRElBIFNvZnR3
YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUKLU5W
SURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGluIHNvdXJjZSBh
bmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlIHRo
ZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNvcHlyaWdodCBub3RpY2Ug
b2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwotdGV4dCBhbmQgZGlzY2xh
aW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBOVklESUEgU29mdHdhcmUu
Ci1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG5vciBsb2dvcyBv
ZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1FeGNlcHQgYXMgZXhwcmVz
c2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzCi1l
eHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBoZXJlaW4sIGluY2x1ZGlu
ZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJp
bmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVyIHdvcmtzIGluIHdoaWNo
IHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQuIE5vIGhhcmR3YXJlIGlz
IGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdBUkUgSVMgQkVJTkcgUFJP
VklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAotSU5DTFVESU5HIFdJ
VEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAotTk9O
LUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIgQUxPTkUgT1IgSU4gQ09N
QklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVWRU5UIFNIQUxMIE5WSURJ
QSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIEVYRU1Q
TEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAot
VE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UsIFJFUFJPRFVDVElP
TiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhFCi1OVklESUEgU09GVFdB
UkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9SWSBPRiBDT05UUkFDVCwK
LVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJ
U0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIHN5bWJvbHMuaAot
Ly8KLQotI2lmICFkZWZpbmVkKF9fU1lNQk9MU19IKQotI2RlZmluZSBfX1NZTUJPTFNfSCAxCi0K
LSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgiCi0KLXR5cGVkZWYgZW51
bSBzeW1ib2xraW5kIHsKLSAgIE1BQ1JPX1MKLX0gc3ltYm9sa2luZDsKLQotLy8gVHlwZWRlZnMg
Zm9yIHRoaW5ncyBkZWZpbmVkIGhlcmUgaW4gInN5bWJvbHMuaCI6Ci0KLXR5cGVkZWYgc3RydWN0
IFNjb3BlX1JlYyBTY29wZTsKLXR5cGVkZWYgc3RydWN0IFN5bWJvbF9SZWMgU3ltYm9sOwotCi10
eXBlZGVmIHN0cnVjdCBTeW1ib2xMaXN0X1JlYyB7Ci0gICAgc3RydWN0IFN5bWJvbExpc3RfUmVj
ICpuZXh0OwotICAgIFN5bWJvbCAqc3ltYjsKLX0gU3ltYm9sTGlzdDsKLQotc3RydWN0IFNjb3Bl
X1JlYyB7Ci0gICAgU2NvcGUgKm5leHQsICpwcmV2OyAgICAgLy8gZG91Ymx5LWxpbmtlZCBsaXN0
IG9mIGFsbCBzY29wZXMKLSAgICBTY29wZSAqcGFyZW50OwotICAgIFNjb3BlICpmdW5TY29wZTsg
ICAgICAgIC8vIFBvaW50cyB0byBiYXNlIHNjb3BlIG9mIGVuY2xvc2luZyBmdW5jdGlvbgotICAg
IE1lbW9yeVBvb2wgKnBvb2w7ICAgICAgIC8vIHBvb2wgdXNlZCBmb3IgYWxsb2NhdGlvbiBpbiB0
aGlzIHNjb3BlCi0gICAgU3ltYm9sICpzeW1ib2xzOwotICAgIAotCWludCBsZXZlbDsgICAgICAg
ICAgICAgIC8vIDAgPSBzdXBlciBnbG9iYWxzLCAxID0gZ2xvYmFscywgZXRjLgotCi0gICAgLy8g
T25seSB1c2VkIGF0IGdsb2JhbCBzY29wZSAobGV2ZWwgMSk6Ci0gICAgU3ltYm9sTGlzdCAqcHJv
Z3JhbXM7ICAgLy8gTGlzdCBvZiBwcm9ncmFtcyBmb3IgdGhpcyBjb21waWxhdGlvbi4KLX07Ci0K
LQotLy8gU3ltYm9sIHRhYmxlIGlzIGEgc2ltcGxlIGJpbmFyeSB0cmVlLgotCi0jaW5jbHVkZSAi
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oIiAgICAgICAgLy8gdG8gZ2V0IE1hY3JvU3ltYm9s
IGRlZgotCi1zdHJ1Y3QgU3ltYm9sX1JlYyB7Ci0gICAgU3ltYm9sICpsZWZ0LCAqcmlnaHQ7Ci0g
ICAgU3ltYm9sICpuZXh0OwotICAgIGludCBuYW1lOyAgICAgICAvLyBOYW1lIGF0b20KLSAgICBT
b3VyY2VMb2MgbG9jOwotICAgIHN5bWJvbGtpbmQga2luZDsKLSAgICB1bmlvbiB7Ci0gICAgICAg
IE1hY3JvU3ltYm9sIG1hYzsKLSAgICB9IGRldGFpbHM7Ci19OwotCi1leHRlcm4gU2NvcGUgKkN1
cnJlbnRTY29wZTsKLWV4dGVybiBTY29wZSAqR2xvYmFsU2NvcGU7Ci1leHRlcm4gU2NvcGUgKlNj
b3BlTGlzdDsKLQotU2NvcGUgKk5ld1Njb3BlSW5Qb29sKE1lbW9yeVBvb2wgKik7Ci0jZGVmaW5l
IE5ld1Njb3BlKCkgICAgICBOZXdTY29wZUluUG9vbChDdXJyZW50U2NvcGUtPnBvb2wpCi12b2lk
IFB1c2hTY29wZShTY29wZSAqZlNjb3BlKTsKLVNjb3BlICpQb3BTY29wZSh2b2lkKTsKLVN5bWJv
bCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAqZlNjb3BlLCBpbnQgbmFtZSwgc3lt
Ym9sa2luZCBraW5kKTsKLVN5bWJvbCAqQWRkU3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAq
ZlNjb3BlLCBpbnQgYXRvbSwgc3ltYm9sa2luZCBraW5kKTsKLVN5bWJvbCAqTG9va1VwTG9jYWxT
eW1ib2woU2NvcGUgKmZTY29wZSwgaW50IGF0b20pOwotU3ltYm9sICpMb29rVXBTeW1ib2woU2Nv
cGUgKmZTY29wZSwgaW50IGF0b20pOwotdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOwot
Ci0KLSNlbmRpZiAvLyAhZGVmaW5lZChfX1NZTUJPTFNfSCkKLQpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNDM5
ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotQ29weXJpZ2h0IChjKSAyMDAyLCBOVklE
SUEgQ29ycG9yYXRpb24uCi0KLU5WSURJQSBDb3Jwb3JhdGlvbigiTlZJRElBIikgc3VwcGxpZXMg
dGhpcyBzb2Z0d2FyZSB0byB5b3UgaW4KLWNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQg
dG8gdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHlvdXIgdXNlLAotaW5zdGFsbGF0aW9uLCBtb2Rp
ZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBOVklESUEgc29mdHdhcmUKLWNvbnN0
aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdp
dGggdGhlc2UKLXRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJl
ZGlzdHJpYnV0ZSB0aGlzIE5WSURJQQotc29mdHdhcmUuCi0KLUluIGNvbnNpZGVyYXRpb24gb2Yg
eW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kCi1zdWJq
ZWN0IHRvIHRoZXNlIHRlcm1zLCBOVklESUEgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhj
bHVzaXZlCi1saWNlbnNlLCB1bmRlciBOVklESUEncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2lu
YWwgTlZJRElBIHNvZnR3YXJlICh0aGUKLSJOVklESUEgU29mdHdhcmUiKSwgdG8gdXNlLCByZXBy
b2R1Y2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZQotTlZJRElBIFNvZnR3YXJlLCB3aXRo
IG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkKLWZvcm1z
OyBwcm92aWRlZCB0aGF0IGlmIHlvdSByZWRpc3RyaWJ1dGUgdGhlIE5WSURJQSBTb2Z0d2FyZSwg
eW91IG11c3QKLXJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBOVklESUEsIHRoaXMgbm90
aWNlIGFuZCB0aGUgZm9sbG93aW5nCi10ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCBy
ZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIE5WSURJQSBTb2Z0d2FyZS4KLU5laXRoZXIgdGhlIG5hbWUs
IHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3Mgbm9yIGxvZ29zIG9mIE5WSURJQQotQ29ycG9yYXRp
b24gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGUKLU5WSURJQSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbiBmcm9tIE5WSURJQS4KLUV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMg
bm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMKLWV4cHJlc3Mgb3IgaW1wbGllZCwg
YXJlIGdyYW50ZWQgYnkgTlZJRElBIGhlcmVpbiwgaW5jbHVkaW5nIGJ1dCBub3QKLWxpbWl0ZWQg
dG8gYW55IHBhdGVudCByaWdodHMgdGhhdCBtYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZh
dGl2ZQotd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIE5WSURJQSBTb2Z0d2Fy
ZSBtYXkgYmUKLWluY29ycG9yYXRlZC4gTm8gaGFyZHdhcmUgaXMgbGljZW5zZWQgaGVyZXVuZGVy
LiAKLQotVEhFIE5WSURJQSBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCBPTiBBTiAiQVMgSVMi
IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJ
VEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCi1JTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCi1OT04tSU5GUklOR0VNRU5ULCBNRVJD
SEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgotSVRTIFVT
RSBBTkQgT1BFUkFUSU9OIEVJVEhFUiBBTE9ORSBPUiBJTiBDT01CSU5BVElPTiBXSVRIIE9USEVS
Ci1QUk9EVUNUUy4KLQotSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIEJFIExJQUJMRSBGT1IgQU5Z
IFNQRUNJQUwsIElORElSRUNULAotSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgTE9TVCBQUk9GSVRTOyBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi1VU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgT1IgQVJJU0lORyBJ
TiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5E
L09SIERJU1RSSUJVVElPTiBPRiBUSEUKLU5WSURJQSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQg
QU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULAotVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRgotTlZJRElB
IEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotXCoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0vLwotLy8gdG9rZW5zLmMKLS8vCi0KLSNpbmNsdWRlIDxzdGRs
aWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUg
PGN0eXBlLmg+Ci0KLSNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBQcmVwcm9jZXNzb3IgYW5k
IFRva2VuIFJlY29yZGVyIGFuZCBQbGF5YmFjazogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKgotICogaWRzdHIoKQot
ICogQ29weSBhIHN0cmluZyB0byBhIG1hbGxvYydlZCBibG9jayBhbmQgY29udmVydCBpdCBpbnRv
IHNvbWV0aGluZyBzdWl0YWJsZQotICogZm9yIGFuIElECi0gKgotICovCi0KLXN0YXRpYyBjaGFy
ICppZHN0cihjb25zdCBjaGFyICpmc3RyLCBNZW1vcnlQb29sICpwb29sKQotewotICAgIHNpemVf
dCBsZW47Ci0gICAgY2hhciAqc3RyLCAqdDsKLSAgICBjb25zdCBjaGFyICpmOwotCi0gICAgbGVu
ID0gc3RybGVuKGZzdHIpOwotICAgIGlmICghcG9vbCkKLSAgICAgICAgc3RyID0gKGNoYXIgKikg
bWFsbG9jKGxlbiArIDEpOwotICAgIGVsc2UKLSAgICAgICAgc3RyID0gKGNoYXIgKikgbWVtX0Fs
bG9jKHBvb2wsIGxlbiArIDEpOwotICAgIAotICAgIGZvciAoZj1mc3RyLCB0PXN0cjsgKmY7IGYr
KykgewotICAgICAgICBpZiAoaXNhbG51bSgqZikpICp0KysgPSAqZjsKLSAgICAgICAgZWxzZSBp
ZiAoKmYgPT0gJy4nIHx8ICpmID09ICcvJykgKnQrKyA9ICdfJzsKLSAgICB9Ci0gICAgKnQgPSAw
OwotICAgIHJldHVybiBzdHI7Ci19IC8vIGlkc3RyCi0KLQotLyoKLSAqIGxOZXdCbG9jaygpCi0g
KgotICovCi0KLXN0YXRpYyBUb2tlbkJsb2NrICpsTmV3QmxvY2soVG9rZW5TdHJlYW0gKmZUb2ss
IE1lbW9yeVBvb2wgKnBvb2wpCi17Ci0gICAgVG9rZW5CbG9jayAqbEJsb2NrOwotCi0gICAgaWYg
KCFwb29sKQotICAgICAgICBsQmxvY2sgPSAoVG9rZW5CbG9jayAqKSBtYWxsb2Moc2l6ZW9mKFRv
a2VuQmxvY2spICsgMjU2KTsKLSAgICBlbHNlCi0gICAgICAgIGxCbG9jayA9IChUb2tlbkJsb2Nr
ICopIG1lbV9BbGxvYyhwb29sLCBzaXplb2YoVG9rZW5CbG9jaykgKyAyNTYpOwotICAgIGxCbG9j
ay0+Y291bnQgPSAwOwotICAgIGxCbG9jay0+Y3VycmVudCA9IDA7Ci0gICAgbEJsb2NrLT5kYXRh
ID0gKHVuc2lnbmVkIGNoYXIgKikgbEJsb2NrICsgc2l6ZW9mKFRva2VuQmxvY2spOwotICAgIGxC
bG9jay0+bWF4ID0gMjU2OwotICAgIGxCbG9jay0+bmV4dCA9IE5VTEw7Ci0gICAgaWYgKGZUb2st
PmhlYWQpIHsKLSAgICAgICAgZlRvay0+Y3VycmVudC0+bmV4dCA9IGxCbG9jazsKLSAgICB9IGVs
c2UgewotICAgICAgICBmVG9rLT5oZWFkID0gbEJsb2NrOwotICAgIH0KLSAgICBmVG9rLT5jdXJy
ZW50ID0gbEJsb2NrOwotICAgIHJldHVybiBsQmxvY2s7Ci19IC8vIGxOZXdCbG9jawotCi0vKgot
ICogbEFkZEJ5dGUoKQotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBsQWRkQnl0ZShUb2tlblN0cmVh
bSAqZlRvaywgdW5zaWduZWQgY2hhciBmVmFsKQotewotICAgIFRva2VuQmxvY2sgKmxCbG9jazsK
LSAgICBsQmxvY2sgPSBmVG9rLT5jdXJyZW50OwotICAgIGlmIChsQmxvY2stPmNvdW50ID49IGxC
bG9jay0+bWF4KQotICAgICAgICBsQmxvY2sgPSBsTmV3QmxvY2soZlRvaywgMCk7Ci0gICAgbEJs
b2NrLT5kYXRhW2xCbG9jay0+Y291bnQrK10gPSBmVmFsOwotfSAvLyBsQWRkQnl0ZQotCi0KLQot
LyoKLSAqIGxSZWFkQnl0ZSgpIC0gR2V0IHRoZSBuZXh0IGJ5dGUgZnJvbSBhIHN0cmVhbS4KLSAq
Ci0gKi8KLQotc3RhdGljIGludCBsUmVhZEJ5dGUoVG9rZW5TdHJlYW0gKnBUb2spCi17Ci0gICAg
VG9rZW5CbG9jayAqbEJsb2NrOwotICAgIGludCBsdmFsID0gLTE7Ci0KLSAgICBsQmxvY2sgPSBw
VG9rLT5jdXJyZW50OwotICAgIGlmIChsQmxvY2spIHsKLSAgICAgICAgaWYgKGxCbG9jay0+Y3Vy
cmVudCA+PSBsQmxvY2stPmNvdW50KSB7Ci0gICAgICAgICAgICBsQmxvY2sgPSBsQmxvY2stPm5l
eHQ7Ci0gICAgICAgICAgICBpZiAobEJsb2NrKQotICAgICAgICAgICAgICAgIGxCbG9jay0+Y3Vy
cmVudCA9IDA7Ci0gICAgICAgICAgICBwVG9rLT5jdXJyZW50ID0gbEJsb2NrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChsQmxvY2spCi0gICAgICAgICAgICBsdmFsID0gbEJsb2NrLT5kYXRhW2xC
bG9jay0+Y3VycmVudCsrXTsKLSAgICB9Ci0gICAgcmV0dXJuIGx2YWw7Ci19IC8vIGxSZWFkQnl0
ZQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gR2xvYmFsIEZ1bmN0
aW9uczovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKgotICogTmV3
VG9rZW5TdHJlYW0oKQotICoKLSAqLwotCi1Ub2tlblN0cmVhbSAqTmV3VG9rZW5TdHJlYW0oY29u
c3QgY2hhciAqbmFtZSwgTWVtb3J5UG9vbCAqcG9vbCkKLXsKLSAgICBUb2tlblN0cmVhbSAqcFRv
azsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcFRvayA9IChUb2tlblN0cmVhbSAqKSBtYWxs
b2Moc2l6ZW9mKFRva2VuU3RyZWFtKSk7Ci0gICAgZWxzZQotICAgICAgICBwVG9rID0gKFRva2Vu
U3RyZWFtKiltZW1fQWxsb2MocG9vbCwgc2l6ZW9mKFRva2VuU3RyZWFtKSk7Ci0gICAgcFRvay0+
bmV4dCA9IE5VTEw7Ci0gICAgcFRvay0+bmFtZSA9IGlkc3RyKG5hbWUsIHBvb2wpOwotICAgIHBU
b2stPmhlYWQgPSBOVUxMOwotICAgIHBUb2stPmN1cnJlbnQgPSBOVUxMOwotICAgIGxOZXdCbG9j
ayhwVG9rLCBwb29sKTsKLSAgICByZXR1cm4gcFRvazsKLX0gLy8gTmV3VG9rZW5TdHJlYW0KLQot
LyoKLSAqIERlbGV0ZVRva2VuU3RyZWFtKCkKLSAqCi0gKi8KLQotdm9pZCBEZWxldGVUb2tlblN0
cmVhbShUb2tlblN0cmVhbSAqcFRvaykKLXsKLSAgICBUb2tlbkJsb2NrICpwQmxvY2ssICpuQmxv
Y2s7Ci0KLSAgICBpZiAocFRvaykgewotICAgICAgICBwQmxvY2sgPSBwVG9rLT5oZWFkOwotICAg
ICAgICB3aGlsZSAocEJsb2NrKSB7Ci0gICAgICAgICAgICBuQmxvY2sgPSBwQmxvY2stPm5leHQ7
Ci0gICAgICAgICAgICBmcmVlKHBCbG9jayk7Ci0gICAgICAgICAgICBwQmxvY2sgPSBuQmxvY2s7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBUb2stPm5hbWUpCi0gICAgICAgICAgICBmcmVlKHBU
b2stPm5hbWUpOwotICAgICAgICBmcmVlKHBUb2spOwotICAgIH0KLX0gLy8gRGVsZXRlVG9rZW5T
dHJlYW0KLQotLyoKLSAqIFJlY29yZFRva2VuKCkgLSBBZGQgYSB0b2tlbiB0byB0aGUgZW5kIG9m
IGEgbGlzdCBmb3IgbGF0ZXIgcGxheWJhY2sgb3IgcHJpbnRvdXQuCi0gKgotICovCi0KLXZvaWQg
UmVjb3JkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIGludCB0b2tlbiwgeXlzdHlwZXBwICogeXls
dmFscHApCi17Ci0gICAgY29uc3QgY2hhciAqczsKLSAgICBjaGFyICpzdHI9TlVMTDsKLQotICAg
IGlmICh0b2tlbiA+IDI1NikKLSAgICAgICAgbEFkZEJ5dGUocFRvaywgKHVuc2lnbmVkIGNoYXIp
KCh0b2tlbiAmIDB4N2YpICsgMHg4MCkpOwotICAgIGVsc2UKLSAgICAgICAgbEFkZEJ5dGUocFRv
aywgKHVuc2lnbmVkIGNoYXIpKHRva2VuICYgMHg3ZikpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIENQUF9JREVOVElGSUVSOgotICAgIGNhc2UgQ1BQX1RZUEVJREVOVElGSUVSOgot
ICAgIGNhc2UgQ1BQX1NUUkNPTlNUQU5UOgotICAgICAgICBzID0gR2V0QXRvbVN0cmluZyhhdGFi
bGUsIHl5bHZhbHBwLT5zY19pZGVudCk7Ci0gICAgICAgIHdoaWxlICgqcykKLSAgICAgICAgICAg
IGxBZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSAqcysrKTsKLSAgICAgICAgbEFkZEJ5dGUo
cFRvaywgMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6Ci0g
ICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6Ci0gICAgICAgICBzdHI9eXlsdmFscHAtPnN5bWJvbF9u
YW1lOwotICAgICAgICAgd2hpbGUgKCpzdHIpewotICAgICAgICAgICAgbEFkZEJ5dGUocFRvaywo
dW5zaWduZWQgY2hhcikgKnN0cik7Ci0gICAgICAgICAgICAqc3RyKys7Ci0gICAgICAgICB9Ci0g
ICAgICAgICBsQWRkQnl0ZShwVG9rLCAwKTsKLSAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgJygn
OgotICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikoeXlsdmFscHAtPnNjX2lu
dCA/IDEgOiAwKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfSAvLyBS
ZWNvcmRUb2tlbgotCi0vKgotICogUmV3aW5kVG9rZW5TdHJlYW0oKSAtIFJlc2V0IGEgdG9rZW4g
c3RyZWFtIGluIHByZXBlcmF0aW9uIGZvciByZWFkaW5nLgotICoKLSAqLwotCi12b2lkIFJld2lu
ZFRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKQotewotICAgIGlmIChwVG9rLT5oZWFkKSB7
Ci0gICAgICAgIHBUb2stPmN1cnJlbnQgPSBwVG9rLT5oZWFkOwotICAgICAgICBwVG9rLT5jdXJy
ZW50LT5jdXJyZW50ID0gMDsKLSAgICB9Ci19IC8vIFJld2luZFRva2VuU3RyZWFtCi0KLS8qCi0g
KiBSZWFkVG9rZW4oKSAtIFJlYWQgdGhlIG5leHQgdG9rZW4gZnJvbSBhIHN0cmVhbS4KLSAqCi0g
Ki8KLQotaW50IFJlYWRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgeXlzdHlwZXBwICogeXlsdmFs
cHApCi17Ci0gICAgY2hhciBzeW1ib2xfbmFtZVtNQVhfU1lNQk9MX05BTUVfTEVOICsgMV07Ci0g
ICAgY2hhciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07Ci0gICAgaW50IGx0b2tlbiwg
bGVuOwotICAgIGNoYXIgY2g7Ci0KLSAgICBsdG9rZW4gPSBsUmVhZEJ5dGUocFRvayk7Ci0gICAg
aWYgKGx0b2tlbiA+PSAwKSB7Ci0gICAgICAgIGlmIChsdG9rZW4gPiAxMjcpCi0gICAgICAgICAg
ICBsdG9rZW4gKz0gMTI4OwotICAgICAgICBzd2l0Y2ggKGx0b2tlbikgewotICAgICAgICBjYXNl
IENQUF9JREVOVElGSUVSOgotICAgICAgICBjYXNlIENQUF9UWVBFSURFTlRJRklFUjoKLSAgICAg
ICAgICAgIGxlbiA9IDA7Ci0gICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAg
ICAgICAgIHdoaWxlICgoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwKLSAgICAgICAgICAgICAg
ICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fAotICAgICAgICAgICAgICAgICAgICAg
KGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8Ci0gICAgICAgICAgICAgICAgICAgICBjaCA9PSAn
XycpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xf
TkFNRV9MRU4pIHsKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9IGNoOwot
ICAgICAgICAgICAgICAgICAgICBsZW4rKzsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVh
ZEJ5dGUocFRvayk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0gICAgICAgICAgICBhc3NlcnQoY2ggPT0gJ1ww
Jyk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmcoYXRh
YmxlLCBzeW1ib2xfbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1BQX0lERU5USUZJRVI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFBfU1RSQ09OU1RBTlQ6Ci0gICAgICAg
ICAgICBsZW4gPSAwOwotICAgICAgICAgICAgd2hpbGUgKChjaCA9IGxSZWFkQnl0ZShwVG9rKSkg
IT0gMCkKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NUUklOR19MRU4pCi0gICAgICAg
ICAgICAgICAgICAgIHN0cmluZ192YWxbbGVuKytdID0gY2g7Ci0gICAgICAgICAgICBzdHJpbmdf
dmFsW2xlbl0gPSAwOwotICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gTG9va1VwQWRk
U3RyaW5nKGF0YWJsZSwgc3RyaW5nX3ZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKLSAgICAgICAgICAgIGxlbiA9IDA7Ci0gICAgICAgICAg
ICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKLSAgICAgICAgICAgIHdoaWxlICgoY2ggPj0gJzAnICYm
IGNoIDw9ICc5Jyl8fChjaD09J2UnfHxjaD09J0UnfHxjaD09Jy4nKXx8KGNoPT0nKyd8fGNoPT0n
LScpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9M
X05BTUVfTEVOKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSBjaDsK
LSAgICAgICAgICAgICAgICAgICAgbGVuKys7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gbFJl
YWRCeXRlKHBUb2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgYXNzZXJ0KGNoID09ICdc
MCcpOwotICAgICAgICAgICAgc3RyY3B5KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSxzeW1ib2xfbmFt
ZSk7Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c2NfZnZhbD0oZmxvYXQpYXRvZih5eWx2YWxwcC0+
c3ltYm9sX25hbWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BQX0lOVENP
TlNUQU5UOgotICAgICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgICAgIGNoID0gbFJlYWRCeXRl
KHBUb2spOwotICAgICAgICAgICAgd2hpbGUgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xF
TikgewotICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7Ci0gICAgICAg
ICAgICAgICAgICAgIGxlbisrOwotICAgICAgICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShw
VG9rKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzeW1i
b2xfbmFtZVtsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGFzc2VydChjaCA9PSAnXDAnKTsKLSAg
ICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25hbWUpOwotICAg
ICAgICAgICAgeXlsdmFscHAtPnNjX2ludD1hdG9pKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnKCc6Ci0gICAgICAgICAgICB5eWx2YWxw
cC0+c2NfaW50ID0gbFJlYWRCeXRlKHBUb2spOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGx0b2tlbjsKLSAgICB9Ci0gICAgcmV0dXJuIEVPRl9TWTsKLX0g
Ly8gUmVhZFRva2VuCi0KLXR5cGVkZWYgc3RydWN0IFRva2VuSW5wdXRTcmMgewotICAgIElucHV0
U3JjICAgICAgICAgICAgYmFzZTsKLSAgICBUb2tlblN0cmVhbSAgICAgICAgICp0b2tlbnM7Ci0g
ICAgaW50ICAgICAgICAgICAgICAgICAoKmZpbmFsKShDUFBTdHJ1Y3QgKik7Ci19IFRva2VuSW5w
dXRTcmM7Ci0KLXN0YXRpYyBpbnQgc2Nhbl90b2tlbihUb2tlbklucHV0U3JjICppbiwgeXlzdHlw
ZXBwICogeXlsdmFscHApCi17Ci0gICAgaW50IHRva2VuID0gUmVhZFRva2VuKGluLT50b2tlbnMs
IHl5bHZhbHBwKTsKLSAgICBpbnQgKCpmaW5hbCkoQ1BQU3RydWN0ICopOwotICAgIGNwcC0+dG9r
ZW5Mb2MtPmZpbGUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bmFtZTsKLSAgICBjcHAtPnRva2VuTG9j
LT5saW5lID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7Ci0gICAgaWYgKHRva2VuID09ICdcbicp
IHsKLSAgICAgICAgaW4tPmJhc2UubGluZSsrOwotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAg
fQotICAgIGlmICh0b2tlbiA+IDApIHJldHVybiB0b2tlbjsKLSAgICBjcHAtPmN1cnJlbnRJbnB1
dCA9IGluLT5iYXNlLnByZXY7Ci0gICAgZmluYWwgPSBpbi0+ZmluYWw7Ci0gICAgZnJlZShpbik7
Ci0gICAgaWYgKGZpbmFsICYmICFmaW5hbChjcHApKSByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci19Ci0K
LWludCBSZWFkRnJvbVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICp0cywgaW50IG5hbWUsIGludCAo
KmZpbmFsKShDUFBTdHJ1Y3QgKikpCi17Ci0gICAgVG9rZW5JbnB1dFNyYyAqaW4gPSBtYWxsb2Mo
c2l6ZW9mKFRva2VuSW5wdXRTcmMpKTsKLSAgICBtZW1zZXQoaW4sIDAsIHNpemVvZihUb2tlbklu
cHV0U3JjKSk7Ci0gICAgaW4tPmJhc2UubmFtZSA9IG5hbWU7Ci0gICAgaW4tPmJhc2UucHJldiA9
IGNwcC0+Y3VycmVudElucHV0OwotICAgIGluLT5iYXNlLnNjYW4gPSAoaW50ICgqKShJbnB1dFNy
YyAqLCB5eXN0eXBlcHAgKikpc2Nhbl90b2tlbjsKLSAgICBpbi0+YmFzZS5saW5lID0gMTsKLSAg
ICBpbi0+dG9rZW5zID0gdHM7Ci0gICAgaW4tPmZpbmFsID0gZmluYWw7Ci0gICAgUmV3aW5kVG9r
ZW5TdHJlYW0odHMpOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gJmluLT5iYXNlOwotICAgIHJl
dHVybiAxOwotfQotCi10eXBlZGVmIHN0cnVjdCBVbmdvdFRva2VuIHsKLSAgICBJbnB1dFNyYyAg
ICBiYXNlOwotICAgIGludCAgICAgICAgIHRva2VuOwotICAgIHl5c3R5cGVwcCAgICAgbHZhbDsK
LX0gVW5nb3RUb2tlbjsKLQotc3RhdGljIGludCByZWdldF90b2tlbihVbmdvdFRva2VuICp0LCB5
eXN0eXBlcHAgKiB5eWx2YWxwcCkKLXsKLSAgICBpbnQgdG9rZW4gPSB0LT50b2tlbjsKLSAgICAq
eXlsdmFscHAgPSB0LT5sdmFsOwotICAgIGNwcC0+Y3VycmVudElucHV0ID0gdC0+YmFzZS5wcmV2
OwotICAgIGZyZWUodCk7Ci0gICAgcmV0dXJuIHRva2VuOwotfQotCi12b2lkIFVuZ2V0VG9rZW4o
aW50IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewotICAgIFVuZ290VG9rZW4gKnQgPSBt
YWxsb2Moc2l6ZW9mKFVuZ290VG9rZW4pKTsKLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKFVuZ290
VG9rZW4pKTsKLSAgICB0LT50b2tlbiA9IHRva2VuOwotICAgIHQtPmx2YWwgPSAqeXlsdmFscHA7
Ci0gICAgdC0+YmFzZS5zY2FuID0gKHZvaWQgKilyZWdldF90b2tlbjsKLSAgICB0LT5iYXNlLnBy
ZXYgPSBjcHAtPmN1cnJlbnRJbnB1dDsKLSAgICB0LT5iYXNlLm5hbWUgPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+bmFtZTsKLSAgICB0LT5iYXNlLmxpbmUgPSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsK
LSAgICBjcHAtPmN1cnJlbnRJbnB1dCA9ICZ0LT5iYXNlOwotfQotCi0KLXZvaWQgRHVtcFRva2Vu
U3RyZWFtKEZJTEUgKmZwLCBUb2tlblN0cmVhbSAqcywgeXlzdHlwZXBwICogeXlsdmFscHApIHsK
LSAgICBpbnQgdG9rZW47Ci0gICAgY2hhciBzdHJbMTAwXTsKLQotICAgIGlmIChmcCA9PSAwKSBm
cCA9IHN0ZG91dDsKLSAgICBSZXdpbmRUb2tlblN0cmVhbShzKTsKLSAgICB3aGlsZSAoKHRva2Vu
ID0gUmVhZFRva2VuKHMsIHl5bHZhbHBwKSkgPiAwKSB7Ci0gICAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgICAgY2FzZSBDUFBfSURFTlRJRklFUjoKLSAgICAgICAgY2FzZSBDUFBfVFlQRUlE
RU5USUZJRVI6Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgIiVzICIsIEdldEF0b21TdHJpbmco
YXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENQUF9TVFJDT05TVEFOVDoKLSAgICAgICAgICAgIHNwcmludGYoc3RyLCAiXCIlc1wi
IiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zY19pZGVudCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BQX0ZMT0FUQ09OU1RBTlQ6Ci0gICAgICAgICAgICAv
L3ByaW50ZigiJWc5LjYgIiwgeXlsdmFscHAtPnNjX2Z2YWwpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ1BQX0lOVENPTlNUQU5UOgotICAgICAgICAgICAgLy9wcmludGYoIiVk
ICIsIHl5bHZhbHBwLT5zY19pbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBpZiAodG9rZW4gPj0gMTI3KQotICAgICAgICAgICAgICAgIHNwcmlu
dGYoc3RyLCAiJXMgIiwgR2V0QXRvbVN0cmluZyhhdGFibGUsIHRva2VuKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgc3ByaW50ZihzdHIsICIlYyIsIHRva2VuKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIENQUERlYnVnTG9nTXNnKHN0cik7Ci0g
ICAgfQotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEVuZCBvZiB0b2tlbnMuYyAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rv
a2Vucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9r
ZW5zLmgJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci90b2tlbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKlwKLUNvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgotCi1OVklE
SUEgQ29ycG9yYXRpb24oIk5WSURJQSIpIHN1cHBsaWVzIHRoaXMgc29mdHdhcmUgdG8geW91IGlu
Ci1jb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMs
IGFuZCB5b3VyIHVzZSwKLWluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0
aW9uIG9mIHRoaXMgTlZJRElBIHNvZnR3YXJlCi1jb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRo
ZXNlIHRlcm1zLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlCi10ZXJtcywgcGxlYXNl
IGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBOVklESUEK
LXNvZnR3YXJlLgotCi1JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRl
IGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZAotc3ViamVjdCB0byB0aGVzZSB0ZXJtcywgTlZJ
RElBIGdyYW50cyB5b3UgYSBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZQotbGljZW5zZSwgdW5kZXIg
TlZJRElBJ3MgY29weXJpZ2h0cyBpbiB0aGlzIG9yaWdpbmFsIE5WSURJQSBzb2Z0d2FyZSAodGhl
Ci0iTlZJRElBIFNvZnR3YXJlIiksIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIHJlZGlz
dHJpYnV0ZSB0aGUKLU5WSURJQSBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlv
bnMsIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5Ci1mb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3Ug
cmVkaXN0cmlidXRlIHRoZSBOVklESUEgU29mdHdhcmUsIHlvdSBtdXN0Ci1yZXRhaW4gdGhlIGNv
cHlyaWdodCBub3RpY2Ugb2YgTlZJRElBLCB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwot
dGV4dCBhbmQgZGlzY2xhaW1lcnMgaW4gYWxsIHN1Y2ggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBO
VklESUEgU29mdHdhcmUuCi1OZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1h
cmtzIG5vciBsb2dvcyBvZiBOVklESUEKLUNvcnBvcmF0aW9uIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlCi1OVklESUEgU29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOVklESUEuCi1F
eGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRz
IG9yIGxpY2Vuc2VzCi1leHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IE5WSURJQSBo
ZXJlaW4sIGluY2x1ZGluZyBidXQgbm90Ci1saW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRo
YXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUKLXdvcmtzIG9yIGJ5IG90aGVy
IHdvcmtzIGluIHdoaWNoIHRoZSBOVklESUEgU29mdHdhcmUgbWF5IGJlCi1pbmNvcnBvcmF0ZWQu
IE5vIGhhcmR3YXJlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4gCi0KLVRIRSBOVklESUEgU09GVFdB
UkUgSVMgQkVJTkcgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAotV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVE
LAotSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIFRJVExFLAotTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKLUlUUyBVU0UgQU5EIE9QRVJBVElPTiBFSVRIRVIg
QUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBPVEhFUgotUFJPRFVDVFMuCi0KLUlOIE5PIEVW
RU5UIFNIQUxMIE5WSURJQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwKLUlO
Q0lERU5UQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRAotVE8sIExPU1QgUFJPRklUUzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBV
U0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIEFORC9PUiBESVNUUklCVVRJT04gT0YgVEhF
Ci1OVklESUEgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VEIEFORCBXSEVUSEVSIFVOREVSIFRIRU9S
WSBPRiBDT05UUkFDVCwKLVRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJ
TElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYKLU5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLVwqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8K
LS8vIHRva2Vucy5oCi0vLwotCi0jaWYgIWRlZmluZWQoX19UT0tFTlNfSCkKLSNkZWZpbmUgX19U
T0tFTlNfSCAxCi0KLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgiCi0K
LSNkZWZpbmUgRU9GX1NZICgtMSkKLQotdHlwZWRlZiBzdHJ1Y3QgVG9rZW5CbG9ja19SZWMgVG9r
ZW5CbG9jazsKLQotdHlwZWRlZiBzdHJ1Y3QgVG9rZW5TdHJlYW1fUmVjIHsKLSAgICBzdHJ1Y3Qg
VG9rZW5TdHJlYW1fUmVjICpuZXh0OwotICAgIGNoYXIgKm5hbWU7Ci0gICAgVG9rZW5CbG9jayAq
aGVhZDsKLSAgICBUb2tlbkJsb2NrICpjdXJyZW50OwotfSBUb2tlblN0cmVhbTsKLQotc3RydWN0
IFRva2VuQmxvY2tfUmVjIHsKLSAgICBUb2tlbkJsb2NrICpuZXh0OwotICAgIGludCBjdXJyZW50
OwotICAgIGludCBjb3VudDsKLSAgICBpbnQgbWF4OwotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7
Ci19OwotCi1leHRlcm4gVG9rZW5TdHJlYW0gc3RkbGliX2NwcF9zdHJlYW07Ci0KLQotVG9rZW5T
dHJlYW0gKk5ld1Rva2VuU3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIE1lbW9yeVBvb2wgKnBvb2wp
Owotdm9pZCBEZWxldGVUb2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRvayk7IAotdm9pZCBSZWNv
cmRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgaW50IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxw
cCk7Ci12b2lkIFJld2luZFRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rKTsKLWludCBSZWFk
VG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLWludCBSZWFk
RnJvbVRva2VuU3RyZWFtKFRva2VuU3RyZWFtICpwVG9rLCBpbnQgbmFtZSwgaW50ICgqZmluYWwp
KENQUFN0cnVjdCAqKSk7Ci12b2lkIFVuZ2V0VG9rZW4oaW50LCB5eXN0eXBlcHAgKiB5eWx2YWxw
cCk7Ci0KLSNpZiBkZWZpbmVkKENQUENfRU5BQkxFX1RPT0xTKQotCi12b2lkIER1bXBUb2tlblN0
cmVhbShGSUxFICosIFRva2VuU3RyZWFtICosIHl5c3R5cGVwcCAqIHl5bHZhbHBwKTsKLQotI2Vu
ZGlmIC8vIGRlZmluZWQoQ1BQQ19FTkFCTEVfVE9PTFMpCi0KLSNlbmRpZiAvLyAhZGVmaW5lZChf
X1RPS0VOU19IKQpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdM
RS9zcmMvbGliRUdML0NvbmZpZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzk3ICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIENvbmZpZy5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6
Q29uZmlnIGNsYXNzLCBkZXNjcmliaW5nIHRoZSBmb3JtYXQsIHR5cGUKLS8vIGFuZCBzaXplIGZv
ciBhbiBlZ2w6OlN1cmZhY2UuIEltcGxlbWVudHMgRUdMQ29uZmlnIGFuZCByZWxhdGVkIGZ1bmN0
aW9uYWxpdHkuCi0vLyBbRUdMIDEuNF0gc2VjdGlvbiAzLjQgcGFnZSAxNS4KLQotI2luY2x1ZGUg
ImxpYkVHTC9Db25maWcuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx2ZWN0
b3I+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
LQotbmFtZXNwYWNlIGVnbAotewotQ29uZmlnOjpDb25maWcoRDNERElTUExBWU1PREUgZGlzcGxh
eU1vZGUsIEVHTGludCBtaW5JbnRlcnZhbCwgRUdMaW50IG1heEludGVydmFsLCBEM0RGT1JNQVQg
cmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQg
bXVsdGlTYW1wbGUpCi0gICAgOiBtRGlzcGxheU1vZGUoZGlzcGxheU1vZGUpLCBtUmVuZGVyVGFy
Z2V0Rm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCksIG1EZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhT
dGVuY2lsRm9ybWF0KSwgbU11bHRpU2FtcGxlKG11bHRpU2FtcGxlKQotewotICAgIHNldChkaXNw
bGF5TW9kZSwgbWluSW50ZXJ2YWwsIG1heEludGVydmFsLCByZW5kZXJUYXJnZXRGb3JtYXQsIGRl
cHRoU3RlbmNpbEZvcm1hdCwgbXVsdGlTYW1wbGUpOwotfQotCi12b2lkIENvbmZpZzo6c2V0RGVm
YXVsdHMoKQotewotICAgIG1CdWZmZXJTaXplID0gMDsKLSAgICBtUmVkU2l6ZSA9IDA7Ci0gICAg
bUdyZWVuU2l6ZSA9IDA7Ci0gICAgbUJsdWVTaXplID0gMDsKLSAgICBtTHVtaW5hbmNlU2l6ZSA9
IDA7Ci0gICAgbUFscGhhU2l6ZSA9IDA7Ci0gICAgbUFscGhhTWFza1NpemUgPSAwOwotICAgIG1C
aW5kVG9UZXh0dXJlUkdCID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtQmluZFRvVGV4dHVyZVJHQkEg
PSBFR0xfRE9OVF9DQVJFOwotICAgIG1Db2xvckJ1ZmZlclR5cGUgPSBFR0xfUkdCX0JVRkZFUjsK
LSAgICBtQ29uZmlnQ2F2ZWF0ID0gRUdMX0RPTlRfQ0FSRTsKLSAgICBtQ29uZmlnSUQgPSBFR0xf
RE9OVF9DQVJFOwotICAgIG1Db25mb3JtYW50ID0gMDsKLSAgICBtRGVwdGhTaXplID0gMDsKLSAg
ICBtTGV2ZWwgPSAwOwotICAgIG1NYXRjaE5hdGl2ZVBpeG1hcCA9IEVHTF9OT05FOwotICAgIG1N
YXhQQnVmZmVyV2lkdGggPSAwOwotICAgIG1NYXhQQnVmZmVySGVpZ2h0ID0gMDsKLSAgICBtTWF4
UEJ1ZmZlclBpeGVscyA9IDA7Ci0gICAgbU1heFN3YXBJbnRlcnZhbCA9IEVHTF9ET05UX0NBUkU7
Ci0gICAgbU1pblN3YXBJbnRlcnZhbCA9IEVHTF9ET05UX0NBUkU7Ci0gICAgbU5hdGl2ZVJlbmRl
cmFibGUgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1OYXRpdmVWaXN1YWxJRCA9IDA7Ci0gICAgbU5h
dGl2ZVZpc3VhbFR5cGUgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1SZW5kZXJhYmxlVHlwZSA9IEVH
TF9PUEVOR0xfRVNfQklUOwotICAgIG1TYW1wbGVCdWZmZXJzID0gMDsKLSAgICBtU2FtcGxlcyA9
IDA7Ci0gICAgbVN0ZW5jaWxTaXplID0gMDsKLSAgICBtU3VyZmFjZVR5cGUgPSBFR0xfV0lORE9X
X0JJVDsKLSAgICBtVHJhbnNwYXJlbnRUeXBlID0gRUdMX05PTkU7Ci0gICAgbVRyYW5zcGFyZW50
UmVkVmFsdWUgPSBFR0xfRE9OVF9DQVJFOwotICAgIG1UcmFuc3BhcmVudEdyZWVuVmFsdWUgPSBF
R0xfRE9OVF9DQVJFOwotICAgIG1UcmFuc3BhcmVudEJsdWVWYWx1ZSA9IEVHTF9ET05UX0NBUkU7
Ci19Ci0KLXZvaWQgQ29uZmlnOjpzZXQoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGlu
dCBtaW5JbnRlcnZhbCwgRUdMaW50IG1heEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0
Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUp
Ci17Ci0gICAgc3dpdGNoIChyZW5kZXJUYXJnZXRGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBE
M0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgIG1CdWZmZXJTaXplID0gMTY7Ci0gICAgICAgIG1SZWRT
aXplID0gNTsKLSAgICAgICAgbUdyZWVuU2l6ZSA9IDU7Ci0gICAgICAgIG1CbHVlU2l6ZSA9IDU7
Ci0gICAgICAgIG1BbHBoYVNpemUgPSAxOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNE
Rk1UX0EyUjEwRzEwQjEwOgotICAgICAgICBtQnVmZmVyU2l6ZSA9IDMyOwotICAgICAgICBtUmVk
U2l6ZSA9IDEwOwotICAgICAgICBtR3JlZW5TaXplID0gMTA7Ci0gICAgICAgIG1CbHVlU2l6ZSA9
IDEwOwotICAgICAgICBtQWxwaGFTaXplID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgbUJ1ZmZlclNpemUgPSAzMjsKLSAgICAgICAgbVJl
ZFNpemUgPSA4OwotICAgICAgICBtR3JlZW5TaXplID0gODsKLSAgICAgICAgbUJsdWVTaXplID0g
ODsKLSAgICAgICAgbUFscGhhU2l6ZSA9IDg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBE
M0RGTVRfUjVHNkI1OgotICAgICAgICBtQnVmZmVyU2l6ZSA9IDE2OwotICAgICAgICBtUmVkU2l6
ZSA9IDU7Ci0gICAgICAgIG1HcmVlblNpemUgPSA2OwotICAgICAgICBtQmx1ZVNpemUgPSA1Owot
ICAgICAgICBtQWxwaGFTaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZN
VF9YMVI1RzVCNToKLSAgICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKLSAgICAgICAgbVJlZFNpemUg
PSA1OwotICAgICAgICBtR3JlZW5TaXplID0gNTsKLSAgICAgICAgbUJsdWVTaXplID0gNTsKLSAg
ICAgICAgbUFscGhhU2l6ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRf
WDhSOEc4Qjg6Ci0gICAgICAgIG1CdWZmZXJTaXplID0gMzI7Ci0gICAgICAgIG1SZWRTaXplID0g
ODsKLSAgICAgICAgbUdyZWVuU2l6ZSA9IDg7Ci0gICAgICAgIG1CbHVlU2l6ZSA9IDg7Ci0gICAg
ICAgIG1BbHBoYVNpemUgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOUkVBQ0hBQkxFKCk7ICAgLy8gT3RoZXIgZm9ybWF0cyBzaG91bGQgbm90IGJlIHZhbGlk
Ci0gICAgfQotCi0gICAgbUx1bWluYW5jZVNpemUgPSAwOwotICAgIG1BbHBoYU1hc2tTaXplID0g
MDsKLSAgICBtQmluZFRvVGV4dHVyZVJHQiA9IEVHTF9GQUxTRTsKLSAgICBtQmluZFRvVGV4dHVy
ZVJHQkEgPSBFR0xfRkFMU0U7Ci0gICAgbUNvbG9yQnVmZmVyVHlwZSA9IEVHTF9SR0JfQlVGRkVS
OwotICAgIG1Db25maWdDYXZlYXQgPSAoZGlzcGxheU1vZGUuRm9ybWF0ID09IHJlbmRlclRhcmdl
dEZvcm1hdCkgPyBFR0xfTk9ORSA6IEVHTF9TTE9XX0NPTkZJRzsKLSAgICBtQ29uZmlnSUQgPSAw
OwotICAgIG1Db25mb3JtYW50ID0gRUdMX09QRU5HTF9FUzJfQklUOwotCi0gICAgc3dpdGNoIChk
ZXB0aFN0ZW5jaWxGb3JtYXQpCi0gICAgewotLy8gICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxF
OgotLy8gICAgICBtRGVwdGhTaXplID0gMTY7Ci0vLyAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7Ci0v
LyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RGTVRfRDMyOgotICAgICAgICBtRGVwdGhTaXpl
ID0gMzI7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBEM0RGTVRfRDE1UzE6Ci0gICAgICAgIG1EZXB0aFNpemUgPSAxNTsKLSAgICAgICAgbVN0
ZW5jaWxTaXplID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoK
LSAgICAgICAgbURlcHRoU2l6ZSA9IDI0OwotICAgICAgICBtU3RlbmNpbFNpemUgPSA4OwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgICBtRGVwdGhTaXpl
ID0gMjQ7Ci0gICAgICAgIG1TdGVuY2lsU2l6ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBEM0RGTVRfRDI0WDRTNDoKLSAgICAgICAgbURlcHRoU2l6ZSA9IDI0OwotICAgICAgICBt
U3RlbmNpbFNpemUgPSA0OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoK
LSAgICAgICAgbURlcHRoU2l6ZSA9IDE2OwotICAgICAgICBtU3RlbmNpbFNpemUgPSAwOwotICAg
ICAgICBicmVhazsKLS8vICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6Ci0vLyAgICAgIG1E
ZXB0aFNpemUgPSAzMjsKLS8vICAgICAgbVN0ZW5jaWxTaXplID0gMDsKLS8vICAgICAgYnJlYWs7
Ci0vLyAgICBjYXNlIEQzREZNVF9EMjRGUzg6Ci0vLyAgICAgIG1EZXB0aFNpemUgPSAyNDsKLS8v
ICAgICAgbVN0ZW5jaWxTaXplID0gODsKLS8vICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIG1MZXZlbCA9IDA7Ci0gICAgbU1h
dGNoTmF0aXZlUGl4bWFwID0gRUdMX05PTkU7Ci0gICAgbU1heFBCdWZmZXJXaWR0aCA9IDA7Ci0g
ICAgbU1heFBCdWZmZXJIZWlnaHQgPSAwOwotICAgIG1NYXhQQnVmZmVyUGl4ZWxzID0gMDsKLSAg
ICBtTWF4U3dhcEludGVydmFsID0gbWF4SW50ZXJ2YWw7Ci0gICAgbU1pblN3YXBJbnRlcnZhbCA9
IG1pbkludGVydmFsOwotICAgIG1OYXRpdmVSZW5kZXJhYmxlID0gRUdMX0ZBTFNFOwotICAgIG1O
YXRpdmVWaXN1YWxJRCA9IDA7Ci0gICAgbU5hdGl2ZVZpc3VhbFR5cGUgPSAwOwotICAgIG1SZW5k
ZXJhYmxlVHlwZSA9IEVHTF9PUEVOR0xfRVMyX0JJVDsKLSAgICBtU2FtcGxlQnVmZmVycyA9IG11
bHRpU2FtcGxlID8gMSA6IDA7Ci0gICAgbVNhbXBsZXMgPSBtdWx0aVNhbXBsZTsKLSAgICBtU3Vy
ZmFjZVR5cGUgPSBFR0xfUEJVRkZFUl9CSVQgfCBFR0xfV0lORE9XX0JJVCB8IEVHTF9TV0FQX0JF
SEFWSU9SX1BSRVNFUlZFRF9CSVQ7Ci0gICAgbVRyYW5zcGFyZW50VHlwZSA9IEVHTF9OT05FOwot
ICAgIG1UcmFuc3BhcmVudFJlZFZhbHVlID0gMDsKLSAgICBtVHJhbnNwYXJlbnRHcmVlblZhbHVl
ID0gMDsKLSAgICBtVHJhbnNwYXJlbnRCbHVlVmFsdWUgPSAwOwotfQotCi1FR0xDb25maWcgQ29u
ZmlnOjpnZXRIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiAoRUdMQ29uZmlnKShzaXplX3Qp
bUNvbmZpZ0lEOwotfQotCi1Tb3J0Q29uZmlnOjpTb3J0Q29uZmlnKGNvbnN0IEVHTGludCAqYXR0
cmliTGlzdCkKLSAgICA6IG1XYW50UmVkKGZhbHNlKSwgbVdhbnRHcmVlbihmYWxzZSksIG1XYW50
Qmx1ZShmYWxzZSksIG1XYW50QWxwaGEoZmFsc2UpLCBtV2FudEx1bWluYW5jZShmYWxzZSkKLXsK
LSAgICBzY2FuRm9yV2FudGVkQ29tcG9uZW50cyhhdHRyaWJMaXN0KTsKLX0KLQotdm9pZCBTb3J0
Q29uZmlnOjpzY2FuRm9yV2FudGVkQ29tcG9uZW50cyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3Qp
Ci17Ci0gICAgLy8gW0VHTF0gc2VjdGlvbiAzLjQuMSBwYWdlIDI0Ci0gICAgLy8gU29ydGluZyBy
dWxlICMzOiBieSBsYXJnZXIgdG90YWwgbnVtYmVyIG9mIGNvbG9yIGJpdHMsIG5vdCBjb25zaWRl
cmluZwotICAgIC8vIGNvbXBvbmVudHMgdGhhdCBhcmUgMCBvciBkb24ndC1jYXJlLgotICAgIGZv
ciAoY29uc3QgRUdMaW50ICphdHRyID0gYXR0cmliTGlzdDsgYXR0clswXSAhPSBFR0xfTk9ORTsg
YXR0ciArPSAyKQotICAgIHsKLSAgICAgICAgaWYgKGF0dHJbMV0gIT0gMCAmJiBhdHRyWzFdICE9
IEVHTF9ET05UX0NBUkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYXR0clswXSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfUkVEX1NJWkU6ICAgICAgIG1X
YW50UmVkID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0dSRUVOX1NJWkU6
ICAgICBtV2FudEdyZWVuID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0JM
VUVfU0laRTogICAgICBtV2FudEJsdWUgPSB0cnVlOyBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBFR0xfQUxQSEFfU0laRTogICAgIG1XYW50QWxwaGEgPSB0cnVlOyBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBFR0xfTFVNSU5BTkNFX1NJWkU6IG1XYW50THVtaW5hbmNlID0gdHJ1ZTsgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUVHTGludCBTb3J0Q29u
ZmlnOjp3YW50ZWRDb21wb25lbnRzU2l6ZShjb25zdCBDb25maWcgJmNvbmZpZykgY29uc3QKLXsK
LSAgICBFR0xpbnQgdG90YWwgPSAwOwotCi0gICAgaWYgKG1XYW50UmVkKSAgICAgICB0b3RhbCAr
PSBjb25maWcubVJlZFNpemU7Ci0gICAgaWYgKG1XYW50R3JlZW4pICAgICB0b3RhbCArPSBjb25m
aWcubUdyZWVuU2l6ZTsKLSAgICBpZiAobVdhbnRCbHVlKSAgICAgIHRvdGFsICs9IGNvbmZpZy5t
Qmx1ZVNpemU7Ci0gICAgaWYgKG1XYW50QWxwaGEpICAgICB0b3RhbCArPSBjb25maWcubUFscGhh
U2l6ZTsKLSAgICBpZiAobVdhbnRMdW1pbmFuY2UpIHRvdGFsICs9IGNvbmZpZy5tTHVtaW5hbmNl
U2l6ZTsKLQotICAgIHJldHVybiB0b3RhbDsKLX0KLQotYm9vbCBTb3J0Q29uZmlnOjpvcGVyYXRv
cigpKGNvbnN0IENvbmZpZyAqeCwgY29uc3QgQ29uZmlnICp5KSBjb25zdAotewotICAgIHJldHVy
biAoKnRoaXMpKCp4LCAqeSk7Ci19Ci0KLWJvb2wgU29ydENvbmZpZzo6b3BlcmF0b3IoKShjb25z
dCBDb25maWcgJngsIGNvbnN0IENvbmZpZyAmeSkgY29uc3QKLXsKLSAgICAjZGVmaW5lIFNPUlQo
YXR0cmlidXRlKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKHguYXR0cmli
dXRlICE9IHkuYXR0cmlidXRlKSAgICAgICAgICAgIFwKLSAgICAgICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJldHVybiB4LmF0dHJp
YnV0ZSA8IHkuYXR0cmlidXRlOyAgICAgIFwKLSAgICAgICAgfQotCi0gICAgTUVUQV9BU1NFUlQo
RUdMX05PTkUgPCBFR0xfU0xPV19DT05GSUcgJiYgRUdMX1NMT1dfQ09ORklHIDwgRUdMX05PTl9D
T05GT1JNQU5UX0NPTkZJRyk7Ci0gICAgU09SVChtQ29uZmlnQ2F2ZWF0KTsKLQotICAgIE1FVEFf
QVNTRVJUKEVHTF9SR0JfQlVGRkVSIDwgRUdMX0xVTUlOQU5DRV9CVUZGRVIpOwotICAgIFNPUlQo
bUNvbG9yQnVmZmVyVHlwZSk7Ci0KLSAgICAvLyBCeSBsYXJnZXIgdG90YWwgbnVtYmVyIG9mIGNv
bG9yIGJpdHMsIG9ubHkgY29uc2lkZXJpbmcgdGhvc2UgdGhhdCBhcmUgcmVxdWVzdGVkIHRvIGJl
ID4gMC4KLSAgICBFR0xpbnQgeENvbXBvbmVudHNTaXplID0gd2FudGVkQ29tcG9uZW50c1NpemUo
eCk7Ci0gICAgRUdMaW50IHlDb21wb25lbnRzU2l6ZSA9IHdhbnRlZENvbXBvbmVudHNTaXplKHkp
OwotICAgIGlmICh4Q29tcG9uZW50c1NpemUgIT0geUNvbXBvbmVudHNTaXplKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHhDb21wb25lbnRzU2l6ZSA+IHlDb21wb25lbnRzU2l6ZTsKLSAgICB9Ci0K
LSAgICBTT1JUKG1CdWZmZXJTaXplKTsKLSAgICBTT1JUKG1TYW1wbGVCdWZmZXJzKTsKLSAgICBT
T1JUKG1TYW1wbGVzKTsKLSAgICBTT1JUKG1EZXB0aFNpemUpOwotICAgIFNPUlQobVN0ZW5jaWxT
aXplKTsKLSAgICBTT1JUKG1BbHBoYU1hc2tTaXplKTsKLSAgICBTT1JUKG1OYXRpdmVWaXN1YWxU
eXBlKTsKLSAgICBTT1JUKG1Db25maWdJRCk7Ci0KLSAgICAjdW5kZWYgU09SVAotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi0vLyBXZSdkIGxpa2UgdG8gdXNlIFNvcnRDb25maWcgdG8gYWxzbyBl
bGltaW5hdGUgZHVwbGljYXRlIGNvbmZpZ3MuCi0vLyBUaGlzIHdvcmtzIGFzIGxvbmcgYXMgd2Ug
bmV2ZXIgaGF2ZSB0d28gY29uZmlncyB3aXRoIGRpZmZlcmVudCBwZXItUkdCLWNvbXBvbmVudCBs
YXlvdXRzLAotLy8gYnV0IHRoZSBzYW1lIHRvdGFsLgotLy8gNTU1MSBhbmQgNTY1IGFyZSBkaWZm
ZXJlbnQgYmVjYXVzZSBSK0crQiBpcyBkaWZmZXJlbnQuCi0vLyA1NTUxIGFuZCA1NTUgYXJlIGRp
ZmZlcmVudCBiZWNhdXNlIGJ1ZmZlclNpemUgaXMgZGlmZmVyZW50LgotY29uc3QgRUdMaW50IENv
bmZpZ1NldDo6bVNvcnRBdHRyaWJzW10gPQotewotICAgIEVHTF9SRURfU0laRSwgMSwKLSAgICBF
R0xfR1JFRU5fU0laRSwgMSwKLSAgICBFR0xfQkxVRV9TSVpFLCAxLAotICAgIEVHTF9MVU1JTkFO
Q0VfU0laRSwgMSwKLSAgICAvLyBCVVQgTk9UIEFMUEhBCi0gICAgRUdMX05PTkUKLX07Ci0KLUNv
bmZpZ1NldDo6Q29uZmlnU2V0KCkKLSAgICA6IG1TZXQoU29ydENvbmZpZyhtU29ydEF0dHJpYnMp
KQotewotfQotCi12b2lkIENvbmZpZ1NldDo6YWRkKEQzRERJU1BMQVlNT0RFIGRpc3BsYXlNb2Rl
LCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xpbnQgbWF4U3dhcEludGVydmFsLCBEM0RGT1JN
QVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0LCBFR0xp
bnQgbXVsdGlTYW1wbGUpCi17Ci0gICAgQ29uZmlnIGNvbmZpZyhkaXNwbGF5TW9kZSwgbWluU3dh
cEludGVydmFsLCBtYXhTd2FwSW50ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVu
Y2lsRm9ybWF0LCBtdWx0aVNhbXBsZSk7Ci0KLSAgICBtU2V0Lmluc2VydChjb25maWcpOwotfQot
Ci1zaXplX3QgQ29uZmlnU2V0OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNldC5zaXpl
KCk7Ci19Ci0KLWJvb2wgQ29uZmlnU2V0OjpnZXRDb25maWdzKEVHTENvbmZpZyAqY29uZmlncywg
Y29uc3QgRUdMaW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwgRUdMaW50ICpudW1D
b25maWcpCi17Ci0gICAgdmVjdG9yPGNvbnN0IENvbmZpZyo+IHBhc3NlZDsKLSAgICBwYXNzZWQu
cmVzZXJ2ZShtU2V0LnNpemUoKSk7Ci0KLSAgICBmb3IgKEl0ZXJhdG9yIGNvbmZpZyA9IG1TZXQu
YmVnaW4oKTsgY29uZmlnICE9IG1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAgIHsKLSAgICAgICAg
Ym9vbCBtYXRjaCA9IHRydWU7Ci0gICAgICAgIGNvbnN0IEVHTGludCAqYXR0cmlidXRlID0gYXR0
cmliTGlzdDsKLQotICAgICAgICB3aGlsZSAoYXR0cmlidXRlWzBdICE9IEVHTF9OT05FKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZVswXSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBFR0xfQlVGRkVSX1NJWkU6ICAgICAgICAgICAgICAgbWF0Y2gg
PSBjb25maWctPm1CdWZmZXJTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0FMUEhBX1NJWkU6ICAgICAgICAgICAg
ICAgIG1hdGNoID0gY29uZmlnLT5tQWxwaGFTaXplID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9CTFVFX1NJWkU6ICAg
ICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUJsdWVTaXplID49IGF0dHJpYnV0ZVsxXTsg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfR1JF
RU5fU0laRTogICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1HcmVlblNpemUgPj0gYXR0
cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgRUdMX1JFRF9TSVpFOiAgICAgICAgICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tUmVkU2l6
ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEVHTF9ERVBUSF9TSVpFOiAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZp
Zy0+bURlcHRoU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfU1RFTkNJTF9TSVpFOiAgICAgICAgICAgICAgbWF0
Y2ggPSBjb25maWctPm1TdGVuY2lsU2l6ZSA+PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0NPTkZJR19DQVZFQVQ6ICAgICAg
ICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29uZmlnQ2F2ZWF0ID09IGF0dHJpYnV0ZVsxXTsgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9DT05GSUdfSUQ6
ICAgICAgICAgICAgICAgICBtYXRjaCA9IGNvbmZpZy0+bUNvbmZpZ0lEID09IGF0dHJpYnV0ZVsx
XTsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xf
TEVWRUw6ICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1MZXZlbCA+PSBhdHRy
aWJ1dGVbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgRUdMX05BVElWRV9SRU5ERVJBQkxFOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tTmF0
aXZlUmVuZGVyYWJsZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEVHTF9OQVRJVkVfVklTVUFMX1RZUEU6ICAgICAgICBtYXRjaCA9IGNv
bmZpZy0+bU5hdGl2ZVZpc3VhbFR5cGUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfU0FNUExFUzogICAgICAgICAgICAgICAgICAg
bWF0Y2ggPSBjb25maWctPm1TYW1wbGVzID49IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX1NBTVBMRV9CVUZGRVJTOiAg
ICAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tU2FtcGxlQnVmZmVycyA+PSBhdHRyaWJ1dGVbMV07
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9TVVJGQUNF
X1RZUEU6ICAgICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1TdXJmYWNlVHlwZSAmIGF0dHJp
YnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBF
R0xfVFJBTlNQQVJFTlRfVFlQRTogICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVu
dFR5cGUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgRUdMX1RSQU5TUEFSRU5UX0JMVUVfVkFMVUU6ICAgIG1hdGNoID0gY29uZmlnLT5t
VHJhbnNwYXJlbnRCbHVlVmFsdWUgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEVHTF9UUkFOU1BBUkVOVF9HUkVFTl9WQUxVRTogICBtYXRjaCA9
IGNvbmZpZy0+bVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9PSBhdHRyaWJ1dGVbMV07ICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfUkVEX1ZBTFVFOiAg
ICAgbWF0Y2ggPSBjb25maWctPm1UcmFuc3BhcmVudFJlZFZhbHVlID09IGF0dHJpYnV0ZVsxXTsg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0JJTkRfVE9fVEVYVFVS
RV9SR0I6ICAgICAgIG1hdGNoID0gY29uZmlnLT5tQmluZFRvVGV4dHVyZVJHQiA9PSBhdHRyaWJ1
dGVbMV07ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9CSU5E
X1RPX1RFWFRVUkVfUkdCQTogICAgICBtYXRjaCA9IGNvbmZpZy0+bUJpbmRUb1RleHR1cmVSR0JB
ID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBFR0xfTUlOX1NXQVBfSU5URVJWQUw6ICAgICAgICAgbWF0Y2ggPSBjb25maWctPm1NaW5Td2Fw
SW50ZXJ2YWwgPT0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRUdMX01BWF9TV0FQX0lOVEVSVkFMOiAgICAgICAgIG1hdGNoID0gY29uZmln
LT5tTWF4U3dhcEludGVydmFsID09IGF0dHJpYnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEVHTF9MVU1JTkFOQ0VfU0laRTogICAgICAgICAgICBtYXRj
aCA9IGNvbmZpZy0+bUx1bWluYW5jZVNpemUgPj0gYXR0cmlidXRlWzFdOyAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBFR0xfQUxQSEFfTUFTS19TSVpFOiAgICAg
ICAgICAgbWF0Y2ggPSBjb25maWctPm1BbHBoYU1hc2tTaXplID49IGF0dHJpYnV0ZVsxXTsgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRUdMX0NPTE9SX0JVRkZF
Ul9UWVBFOiAgICAgICAgIG1hdGNoID0gY29uZmlnLT5tQ29sb3JCdWZmZXJUeXBlID09IGF0dHJp
YnV0ZVsxXTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEVHTF9S
RU5ERVJBQkxFX1RZUEU6ICAgICAgICAgICBtYXRjaCA9IChjb25maWctPm1SZW5kZXJhYmxlVHlw
ZSAmIGF0dHJpYnV0ZVsxXSkgPT0gYXR0cmlidXRlWzFdOyBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBFR0xfTUFUQ0hfTkFUSVZFX1BJWE1BUDogICAgICAgbWF0Y2ggPSBmYWxzZTsgVU5JTVBM
RU1FTlRFRCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgRUdMX0NPTkZPUk1BTlQ6ICAgICAgICAgICAgICAgIG1hdGNoID0gKGNv
bmZpZy0+bUNvbmZvcm1hbnQgJiBhdHRyaWJ1dGVbMV0pID09IGF0dHJpYnV0ZVsxXTsgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFtYXRjaCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
YXR0cmlidXRlICs9IDI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWF0Y2gpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHBhc3NlZC5wdXNoX2JhY2soJipjb25maWcpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKGNvbmZpZ3MpCi0gICAgewotICAgICAgICBzb3J0KHBhc3NlZC5iZWdp
bigpLCBwYXNzZWQuZW5kKCksIFNvcnRDb25maWcoYXR0cmliTGlzdCkpOwotCi0gICAgICAgIEVH
TGludCBpbmRleDsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY29uZmlnU2l6ZSAm
JiBpbmRleCA8IHN0YXRpY19jYXN0PEVHTGludD4ocGFzc2VkLnNpemUoKSk7IGluZGV4KyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbmZpZ3NbaW5kZXhdID0gcGFzc2VkW2luZGV4XS0+Z2V0
SGFuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAqbnVtQ29uZmlnID0gaW5kZXg7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgICpudW1Db25maWcgPSBwYXNzZWQuc2l6ZSgpOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1jb25zdCBlZ2w6OkNvbmZpZyAqQ29uZmln
U2V0OjpnZXQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSkKLXsKLSAgICBmb3IgKEl0ZXJhdG9yIGNv
bmZpZyA9IG1TZXQuYmVnaW4oKTsgY29uZmlnICE9IG1TZXQuZW5kKCk7IGNvbmZpZysrKQotICAg
IHsKLSAgICAgICAgaWYgKGNvbmZpZy0+Z2V0SGFuZGxlKCkgPT0gY29uZmlnSGFuZGxlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gJigqY29uZmlnKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBOVUxMOwotfQotfQpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9Db25maWcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML0NvbmZpZy5oCShyZXZpc2lvbiA3NDY1
OCkKKysrIEFOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE4
ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIENvbmZpZy5oOiBEZWZpbmVzIHRoZSBl
Z2w6OkNvbmZpZyBjbGFzcywgZGVzY3JpYmluZyB0aGUgZm9ybWF0LCB0eXBlCi0vLyBhbmQgc2l6
ZSBmb3IgYW4gZWdsOjpTdXJmYWNlLiBJbXBsZW1lbnRzIEVHTENvbmZpZyBhbmQgcmVsYXRlZCBm
dW5jdGlvbmFsaXR5LgotLy8gW0VHTCAxLjRdIHNlY3Rpb24gMy40IHBhZ2UgMTUuCi0KLSNpZm5k
ZWYgSU5DTFVERV9DT05GSUdfSF8KLSNkZWZpbmUgSU5DTFVERV9DT05GSUdfSF8KLQotI2RlZmlu
ZSBFR0xBUEkKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5j
bHVkZSA8c2V0PgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLQotbmFtZXNwYWNl
IGVnbAotewotY2xhc3MgRGlzcGxheTsKLQotY2xhc3MgQ29uZmlnCi17Ci0gIHB1YmxpYzoKLSAg
ICBDb25maWcoRDNERElTUExBWU1PREUgZGlzcGxheU1vZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2
YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQs
IEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQsIEVHTGludCBtdWx0aVNhbXBsZSk7Ci0KLSAg
ICB2b2lkIHNldERlZmF1bHRzKCk7Ci0gICAgdm9pZCBzZXQoRDNERElTUExBWU1PREUgZGlzcGxh
eU1vZGUsIEVHTGludCBtaW5Td2FwSW50ZXJ2YWwsIEVHTGludCBtYXhTd2FwSW50ZXJ2YWwsIEQz
REZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQsIEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQs
IEVHTGludCBtdWx0aVNhbXBsZSk7Ci0gICAgRUdMQ29uZmlnIGdldEhhbmRsZSgpIGNvbnN0Owot
Ci0gICAgY29uc3QgRDNERElTUExBWU1PREUgbURpc3BsYXlNb2RlOwotICAgIGNvbnN0IEQzREZP
Uk1BVCBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwotICAgIGNvbnN0IEQzREZPUk1BVCBtRGVwdGhTdGVu
Y2lsRm9ybWF0OwotICAgIGNvbnN0IEVHTGludCBtTXVsdGlTYW1wbGU7Ci0KLSAgICBFR0xpbnQg
bUJ1ZmZlclNpemU7ICAgICAgICAgICAgICAvLyBEZXB0aCBvZiB0aGUgY29sb3IgYnVmZmVyCi0g
ICAgRUdMaW50IG1SZWRTaXplOyAgICAgICAgICAgICAgICAgLy8gQml0cyBvZiBSZWQgaW4gdGhl
IGNvbG9yIGJ1ZmZlcgotICAgIEVHTGludCBtR3JlZW5TaXplOyAgICAgICAgICAgICAgIC8vIEJp
dHMgb2YgR3JlZW4gaW4gdGhlIGNvbG9yIGJ1ZmZlcgotICAgIEVHTGludCBtQmx1ZVNpemU7ICAg
ICAgICAgICAgICAgIC8vIEJpdHMgb2YgQmx1ZSBpbiB0aGUgY29sb3IgYnVmZmVyCi0gICAgRUdM
aW50IG1MdW1pbmFuY2VTaXplOyAgICAgICAgICAgLy8gQml0cyBvZiBMdW1pbmFuY2UgaW4gdGhl
IGNvbG9yIGJ1ZmZlcgotICAgIEVHTGludCBtQWxwaGFTaXplOyAgICAgICAgICAgICAgIC8vIEJp
dHMgb2YgQWxwaGEgaW4gdGhlIGNvbG9yIGJ1ZmZlcgotICAgIEVHTGludCBtQWxwaGFNYXNrU2l6
ZTsgICAgICAgICAgIC8vIEJpdHMgb2YgQWxwaGEgTWFzayBpbiB0aGUgbWFzayBidWZmZXIKLSAg
ICBFR0xCb29sZWFuIG1CaW5kVG9UZXh0dXJlUkdCOyAgICAvLyBUcnVlIGlmIGJpbmRhYmxlIHRv
IFJHQiB0ZXh0dXJlcy4KLSAgICBFR0xCb29sZWFuIG1CaW5kVG9UZXh0dXJlUkdCQTsgICAvLyBU
cnVlIGlmIGJpbmRhYmxlIHRvIFJHQkEgdGV4dHVyZXMuCi0gICAgRUdMZW51bSBtQ29sb3JCdWZm
ZXJUeXBlOyAgICAgICAgLy8gQ29sb3IgYnVmZmVyIHR5cGUKLSAgICBFR0xlbnVtIG1Db25maWdD
YXZlYXQ7ICAgICAgICAgICAvLyBBbnkgY2F2ZWF0cyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24KLSAg
ICBFR0xpbnQgbUNvbmZpZ0lEOyAgICAgICAgICAgICAgICAvLyBVbmlxdWUgRUdMQ29uZmlnIGlk
ZW50aWZpZXIKLSAgICBFR0xpbnQgbUNvbmZvcm1hbnQ7ICAgICAgICAgICAgICAvLyBXaGV0aGVy
IGNvbnRleHRzIGNyZWF0ZWQgd2l0aCB0aGlzIGNvbmZpZyBhcmUgY29uZm9ybWFudAotICAgIEVH
TGludCBtRGVwdGhTaXplOyAgICAgICAgICAgICAgIC8vIEJpdHMgb2YgWiBpbiB0aGUgZGVwdGgg
YnVmZmVyCi0gICAgRUdMaW50IG1MZXZlbDsgICAgICAgICAgICAgICAgICAgLy8gRnJhbWUgYnVm
ZmVyIGxldmVsCi0gICAgRUdMQm9vbGVhbiBtTWF0Y2hOYXRpdmVQaXhtYXA7ICAgLy8gTWF0Y2gg
dGhlIG5hdGl2ZSBwaXhtYXAgZm9ybWF0Ci0gICAgRUdMaW50IG1NYXhQQnVmZmVyV2lkdGg7ICAg
ICAgICAgLy8gTWF4aW11bSB3aWR0aCBvZiBwYnVmZmVyCi0gICAgRUdMaW50IG1NYXhQQnVmZmVy
SGVpZ2h0OyAgICAgICAgLy8gTWF4aW11bSBoZWlnaHQgb2YgcGJ1ZmZlcgotICAgIEVHTGludCBt
TWF4UEJ1ZmZlclBpeGVsczsgICAgICAgIC8vIE1heGltdW0gc2l6ZSBvZiBwYnVmZmVyCi0gICAg
RUdMaW50IG1NYXhTd2FwSW50ZXJ2YWw7ICAgICAgICAgLy8gTWF4aW11bSBzd2FwIGludGVydmFs
Ci0gICAgRUdMaW50IG1NaW5Td2FwSW50ZXJ2YWw7ICAgICAgICAgLy8gTWluaW11bSBzd2FwIGlu
dGVydmFsCi0gICAgRUdMQm9vbGVhbiBtTmF0aXZlUmVuZGVyYWJsZTsgICAgLy8gRUdMX1RSVUUg
aWYgbmF0aXZlIHJlbmRlcmluZyBBUElzIGNhbiByZW5kZXIgdG8gc3VyZmFjZQotICAgIEVHTGlu
dCBtTmF0aXZlVmlzdWFsSUQ7ICAgICAgICAgIC8vIEhhbmRsZSBvZiBjb3JyZXNwb25kaW5nIG5h
dGl2ZSB2aXN1YWwKLSAgICBFR0xpbnQgbU5hdGl2ZVZpc3VhbFR5cGU7ICAgICAgICAvLyBOYXRp
dmUgdmlzdWFsIHR5cGUgb2YgdGhlIGFzc29jaWF0ZWQgdmlzdWFsCi0gICAgRUdMaW50IG1SZW5k
ZXJhYmxlVHlwZTsgICAgICAgICAgLy8gV2hpY2ggY2xpZW50IHJlbmRlcmluZyBBUElzIGFyZSBz
dXBwb3J0ZWQuCi0gICAgRUdMaW50IG1TYW1wbGVCdWZmZXJzOyAgICAgICAgICAgLy8gTnVtYmVy
IG9mIG11bHRpc2FtcGxlIGJ1ZmZlcnMKLSAgICBFR0xpbnQgbVNhbXBsZXM7ICAgICAgICAgICAg
ICAgICAvLyBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgcGl4ZWwKLSAgICBFR0xpbnQgbVN0ZW5jaWxT
aXplOyAgICAgICAgICAgICAvLyBCaXRzIG9mIFN0ZW5jaWwgaW4gdGhlIHN0ZW5jaWwgYnVmZmVy
Ci0gICAgRUdMaW50IG1TdXJmYWNlVHlwZTsgICAgICAgICAgICAgLy8gV2hpY2ggdHlwZXMgb2Yg
RUdMIHN1cmZhY2VzIGFyZSBzdXBwb3J0ZWQuCi0gICAgRUdMZW51bSBtVHJhbnNwYXJlbnRUeXBl
OyAgICAgICAgLy8gVHlwZSBvZiB0cmFuc3BhcmVuY3kgc3VwcG9ydGVkCi0gICAgRUdMaW50IG1U
cmFuc3BhcmVudFJlZFZhbHVlOyAgICAgLy8gVHJhbnNwYXJlbnQgcmVkIHZhbHVlCi0gICAgRUdM
aW50IG1UcmFuc3BhcmVudEdyZWVuVmFsdWU7ICAgLy8gVHJhbnNwYXJlbnQgZ3JlZW4gdmFsdWUK
LSAgICBFR0xpbnQgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlOyAgICAvLyBUcmFuc3BhcmVudCBibHVl
IHZhbHVlCi19OwotCi0vLyBGdW5jdGlvbiBvYmplY3QgdXNlZCBieSBTVEwgc29ydGluZyByb3V0
aW5lcyBmb3Igb3JkZXJpbmcgQ29uZmlncyBhY2NvcmRpbmcgdG8gW0VHTF0gc2VjdGlvbiAzLjQu
MSBwYWdlIDI0LgotY2xhc3MgU29ydENvbmZpZwotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
U29ydENvbmZpZyhjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwotCi0gICAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IENvbmZpZyAqeCwgY29uc3QgQ29uZmlnICp5KSBjb25zdDsKLSAgICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgQ29uZmlnICZ4LCBjb25zdCBDb25maWcgJnkpIGNvbnN0OwotCi0gIHBy
aXZhdGU6Ci0gICAgdm9pZCBzY2FuRm9yV2FudGVkQ29tcG9uZW50cyhjb25zdCBFR0xpbnQgKmF0
dHJpYkxpc3QpOwotICAgIEVHTGludCB3YW50ZWRDb21wb25lbnRzU2l6ZShjb25zdCBDb25maWcg
JmNvbmZpZykgY29uc3Q7Ci0KLSAgICBib29sIG1XYW50UmVkOwotICAgIGJvb2wgbVdhbnRHcmVl
bjsKLSAgICBib29sIG1XYW50Qmx1ZTsKLSAgICBib29sIG1XYW50QWxwaGE7Ci0gICAgYm9vbCBt
V2FudEx1bWluYW5jZTsKLX07Ci0KLWNsYXNzIENvbmZpZ1NldAotewotICAgIGZyaWVuZCBEaXNw
bGF5OwotCi0gIHB1YmxpYzoKLSAgICBDb25maWdTZXQoKTsKLQotICAgIHZvaWQgYWRkKEQzRERJ
U1BMQVlNT0RFIGRpc3BsYXlNb2RlLCBFR0xpbnQgbWluU3dhcEludGVydmFsLCBFR0xpbnQgbWF4
U3dhcEludGVydmFsLCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBEM0RGT1JNQVQgZGVw
dGhTdGVuY2lsRm9ybWF0LCBFR0xpbnQgbXVsdGlTYW1wbGUpOwotICAgIHNpemVfdCBzaXplKCkg
Y29uc3Q7Ci0gICAgYm9vbCBnZXRDb25maWdzKEVHTENvbmZpZyAqY29uZmlncywgY29uc3QgRUdM
aW50ICphdHRyaWJMaXN0LCBFR0xpbnQgY29uZmlnU2l6ZSwgRUdMaW50ICpudW1Db25maWcpOwot
ICAgIGNvbnN0IGVnbDo6Q29uZmlnICpnZXQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSk7Ci0KLSAg
cHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29uZmlnU2V0KTsKLQotICAg
IHR5cGVkZWYgc3RkOjpzZXQ8Q29uZmlnLCBTb3J0Q29uZmlnPiBTZXQ7Ci0gICAgdHlwZWRlZiBT
ZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOwotICAgIFNldCBtU2V0OwotCi0gICAgc3RhdGljIGNvbnN0
IEVHTGludCBtU29ydEF0dHJpYnNbXTsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIElOQ0xVREVfQ09O
RklHX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUv
c3JjL2xpYkVHTC9EaXNwbGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0OTAgKzAsMCBAQAot
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotLy8KLQotLy8gRGlzcGxheS5jcHA6IEltcGxlbWVudHMgdGhlIGVnbDo6
RGlzcGxheSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBhYnN0cmFjdAotLy8gZGlzcGxheSBvbiB3
aGljaCBncmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVudHMgRUdMRGlzcGxheS4KLS8vIFtFR0wg
MS40XSBzZWN0aW9uIDIuMS4yIHBhZ2UgMy4KLQotI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5Lmgi
Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgotCi0jZGVmaW5lIFJF
Rl9SQVNUIDAgICAvLyBDYW4gYWxzbyBiZSBlbmFibGVkIGJ5IGRlZmluaW5nIEZPUkNFX1JFRl9S
QVNUIGluIHRoZSBwcm9qZWN0J3MgcHJlZGVmaW5lZCBtYWNyb3MKLQotbmFtZXNwYWNlIGVnbAot
ewotRGlzcGxheTo6RGlzcGxheShIREMgZGV2aWNlQ29udGV4dCkgOiBtRGMoZGV2aWNlQ29udGV4
dCkKLXsKLSAgICBtRDNkOU1vZHVsZSA9IE5VTEw7Ci0gICAgCi0gICAgbUQzZDkgPSBOVUxMOwot
ICAgIG1EM2Q5ZXggPSBOVUxMOwotICAgIG1EZXZpY2UgPSBOVUxMOwotICAgIG1EZXZpY2VXaW5k
b3cgPSBOVUxMOwotCi0gICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7Ci0KLSAgICAj
aWYgUkVGX1JBU1QgPT0gMSB8fCBkZWZpbmVkKEZPUkNFX1JFRl9SQVNUKQotICAgICAgICBtRGV2
aWNlVHlwZSA9IEQzRERFVlRZUEVfUkVGOwotICAgICNlbHNlCi0gICAgICAgIG1EZXZpY2VUeXBl
ID0gRDNEREVWVFlQRV9IQUw7Ci0gICAgI2VuZGlmCi0KLSAgICBtTWluU3dhcEludGVydmFsID0g
MTsKLSAgICBtTWF4U3dhcEludGVydmFsID0gMTsKLSAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7Ci19
Ci0KLURpc3BsYXk6On5EaXNwbGF5KCkKLXsKLSAgICB0ZXJtaW5hdGUoKTsKLX0KLQotYm9vbCBE
aXNwbGF5Ojppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoaXNJbml0aWFsaXplZCgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgbUQzZDlNb2R1bGUgPSBMb2FkTGli
cmFyeShURVhUKCJkM2Q5LmRsbCIpKTsKLSAgICBpZiAobUQzZDlNb2R1bGUgPT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIHRlcm1pbmF0ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgdHlwZWRlZiBJRGlyZWN0M0Q5KiAoV0lOQVBJICpEaXJlY3QzRENyZWF0ZTlGdW5jKShV
SU5UKTsKLSAgICBEaXJlY3QzRENyZWF0ZTlGdW5jIERpcmVjdDNEQ3JlYXRlOVB0ciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RDcmVhdGU5RnVuYz4oR2V0UHJvY0FkZHJlc3MobUQzZDlNb2R1
bGUsICJEaXJlY3QzRENyZWF0ZTkiKSk7Ci0KLSAgICBpZiAoRGlyZWN0M0RDcmVhdGU5UHRyID09
IE5VTEwpCi0gICAgewotICAgICAgICB0ZXJtaW5hdGUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJICpEaXJlY3QzRENyZWF0ZTlF
eEZ1bmMpKFVJTlQsIElEaXJlY3QzRDlFeCoqKTsKLSAgICBEaXJlY3QzRENyZWF0ZTlFeEZ1bmMg
RGlyZWN0M0RDcmVhdGU5RXhQdHIgPSByZWludGVycHJldF9jYXN0PERpcmVjdDNEQ3JlYXRlOUV4
RnVuYz4oR2V0UHJvY0FkZHJlc3MobUQzZDlNb2R1bGUsICJEaXJlY3QzRENyZWF0ZTlFeCIpKTsK
LQotICAgIC8vIFVzZSBEaXJlY3QzRDlFeCBpZiBhdmFpbGFibGUuIEFtb25nIG90aGVyIHRoaW5n
cywgdGhpcyB2ZXJzaW9uIGlzIGxlc3MKLSAgICAvLyBpbmNsaW5lZCB0byByZXBvcnQgYSBsb3N0
IGNvbnRleHQsIGZvciBleGFtcGxlIHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMKLSAgICAvLyBkZXNr
dG9wLiBEaXJlY3QzRDlFeCBpcyBhdmFpbGFibGUgaW4gV2luZG93cyBWaXN0YSBhbmQgbGF0ZXIg
aWYgc3VpdGFibGUgZHJpdmVycyBhcmUgYXZhaWxhYmxlLgotICAgIGlmIChEaXJlY3QzRENyZWF0
ZTlFeFB0ciAmJiBTVUNDRUVERUQoRGlyZWN0M0RDcmVhdGU5RXhQdHIoRDNEX1NES19WRVJTSU9O
LCAmbUQzZDlleCkpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1EM2Q5ZXgpOwotICAgICAgICBt
RDNkOWV4LT5RdWVyeUludGVyZmFjZShJSURfSURpcmVjdDNEOSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KCZtRDNkOSkpOwotICAgICAgICBBU1NFUlQobUQzZDkpOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRlOVB0cihEM0RfU0RLX1ZFUlNJ
T04pOwotICAgIH0KLQotICAgIGlmIChtRDNkOSkKLSAgICB7Ci0gICAgICAgIGlmIChtRGMgIT0g
TlVMTCkKLSAgICAgICAgewotICAgICAgICAvLyAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1F
OiBEZXRlcm1pbmUgd2hpY2ggYWRhcHRlciBpbmRleCB0aGUgZGV2aWNlIGNvbnRleHQgY29ycmVz
cG9uZHMgdG8KLSAgICAgICAgfQotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkdl
dERldmljZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmbURldmljZUNhcHMpOwotCi0gICAg
ICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FMTE9DLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobURldmljZUNhcHMuUGl4
ZWxTaGFkZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgdGVybWluYXRlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9JTklU
SUFMSVpFRCwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9
IDQ7Ci0gICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSAwOwotCi0gICAgICAgIGlmIChtRGV2aWNl
Q2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFU
RSkge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAwKTsgbU1h
eFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDApO30KLSAgICAgICAg
aWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJW
QUxfT05FKSAgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2
YWwsIDEpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMSk7
fQotICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJF
U0VOVF9JTlRFUlZBTF9UV08pICAgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1p
blN3YXBJbnRlcnZhbCwgMik7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcElu
dGVydmFsLCAyKTt9Ci0gICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZh
bHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFKSAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBz
dGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAzKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4
KG1NYXhTd2FwSW50ZXJ2YWwsIDMpO30KLSAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRh
dGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfRk9VUikgICAgICB7bU1pblN3YXBJ
bnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDQpOyBtTWF4U3dhcEludGVydmFs
ID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgNCk7fQotCi0gICAgICAgIGNvbnN0IEQzREZP
Uk1BVCByZW5kZXJUYXJnZXRGb3JtYXRzW10gPQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0RG
TVRfQTFSNUc1QjUsCi0gICAgICAgIC8vICBEM0RGTVRfQTJSMTBHMTBCMTAsICAgLy8gVGhlIGNv
bG9yX3JhbXAgY29uZm9ybWFuY2UgdGVzdCB1c2VzIFJlYWRQaXhlbHMgd2l0aCBVTlNJR05FRF9C
WVRFIGNhdXNpbmcgaXQgdG8gdGhpbmsgdGhhdCByZW5kZXJpbmcgc2tpcHBlZCBhIGNvbG91ciB2
YWx1ZS4KLSAgICAgICAgICAgIEQzREZNVF9BOFI4RzhCOCwKLSAgICAgICAgICAgIEQzREZNVF9S
NUc2QjUsCi0gICAgICAgICAgICBEM0RGTVRfWDFSNUc1QjUsCi0gICAgICAgICAgICBEM0RGTVRf
WDhSOEc4QjgKLSAgICAgICAgfTsKLQotICAgICAgICBjb25zdCBEM0RGT1JNQVQgZGVwdGhTdGVu
Y2lsRm9ybWF0c1tdID0KLSAgICAgICAgewotICAgICAgICAvLyAgRDNERk1UX0QxNl9MT0NLQUJM
RSwKLSAgICAgICAgICAgIEQzREZNVF9EMzIsCi0gICAgICAgIC8vICBEM0RGTVRfRDE1UzEsCi0g
ICAgICAgICAgICBEM0RGTVRfRDI0UzgsCi0gICAgICAgICAgICBEM0RGTVRfRDI0WDgsCi0gICAg
ICAgIC8vICBEM0RGTVRfRDI0WDRTNCwKLSAgICAgICAgICAgIEQzREZNVF9EMTYsCi0gICAgICAg
IC8vICBEM0RGTVRfRDMyRl9MT0NLQUJMRSwKLSAgICAgICAgLy8gIEQzREZNVF9EMjRGUzgKLSAg
ICAgICAgfTsKLQotICAgICAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7Ci0g
ICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlz
cGxheU1vZGUpOwotCi0gICAgICAgIENvbmZpZ1NldCBjb25maWdTZXQ7Ci0KLSAgICAgICAgZm9y
IChpbnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRleCA8IHNpemVvZihyZW5kZXJUYXJnZXRG
b3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyBmb3JtYXRJbmRleCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0ID0gcmVuZGVyVGFyZ2V0Rm9y
bWF0c1tmb3JtYXRJbmRleF07Ci0KLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDkt
PkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCByZW5k
ZXJUYXJnZXRGb3JtYXQpOwotCi0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgZGVwdGhTdGVuY2lsSW5kZXgg
PSAwOyBkZXB0aFN0ZW5jaWxJbmRleCA8IHNpemVvZihkZXB0aFN0ZW5jaWxGb3JtYXRzKSAvIHNp
emVvZihEM0RGT1JNQVQpOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCA9IGRlcHRo
U3RlbmNpbEZvcm1hdHNbZGVwdGhTdGVuY2lsSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwg
RDNEUlRZUEVfU1VSRkFDRSwgZGVwdGhTdGVuY2lsRm9ybWF0KTsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGVwdGhTdGVu
Y2lsTWF0Y2gobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0
LCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZvcm1hdCk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogZW51bWVyYXRlIG11
bHRpLXNhbXBsaW5nCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdTZXQuYWRk
KGN1cnJlbnREaXNwbGF5TW9kZSwgbU1pblN3YXBJbnRlcnZhbCwgbU1heFN3YXBJbnRlcnZhbCwg
cmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQsIDApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2l2ZSB0aGUgc29ydGVkIGNv
bmZpZ3MgYSB1bmlxdWUgSUQgYW5kIHN0b3JlIHRoZW0gaW50ZXJuYWxseQotICAgICAgICBFR0xp
bnQgaW5kZXggPSAxOwotICAgICAgICBmb3IgKENvbmZpZ1NldDo6SXRlcmF0b3IgY29uZmlnID0g
Y29uZmlnU2V0Lm1TZXQuYmVnaW4oKTsgY29uZmlnICE9IGNvbmZpZ1NldC5tU2V0LmVuZCgpOyBj
b25maWcrKykKLSAgICAgICAgewotICAgICAgICAgICAgQ29uZmlnIGNvbmZpZ3VyYXRpb24gPSAq
Y29uZmlnOwotICAgICAgICAgICAgY29uZmlndXJhdGlvbi5tQ29uZmlnSUQgPSBpbmRleDsKLSAg
ICAgICAgICAgIGluZGV4Kys7Ci0KLSAgICAgICAgICAgIG1Db25maWdTZXQubVNldC5pbnNlcnQo
Y29uZmlndXJhdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNyZWF0ZURldmljZSgp
KQotICAgICAgICB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGUoKTsKLQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkp
Ci0gICAgewotICAgICAgICB0ZXJtaW5hdGUoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGlzcGxheTo6dGVybWluYXRlKCkK
LXsKLSAgICBmb3IgKFN1cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5i
ZWdpbigpOyBzdXJmYWNlICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCi0gICAgewot
ICAgICAgICBkZWxldGUgKnN1cmZhY2U7Ci0gICAgfQotCi0gICAgZm9yIChDb250ZXh0U2V0Ojpp
dGVyYXRvciBjb250ZXh0ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsgY29udGV4dCAhPSBtQ29udGV4
dFNldC5lbmQoKTsgY29udGV4dCsrKQotICAgIHsKLSAgICAgICAgZ2xEZXN0cm95Q29udGV4dCgq
Y29udGV4dCk7Ci0gICAgfQotCi0gICAgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBtRGV2
aWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2UgPSBOVUxMOwotICAgIH0KLQotICAgIGlm
IChtRDNkOSkKLSAgICB7Ci0gICAgICAgIG1EM2Q5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EM2Q5
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURldmljZVdpbmRvdykKLSAgICB7Ci0gICAgICAg
IERlc3Ryb3lXaW5kb3cobURldmljZVdpbmRvdyk7Ci0gICAgICAgIG1EZXZpY2VXaW5kb3cgPSBO
VUxMOwotICAgIH0KLSAgICAKLSAgICBpZiAobUQzZDlleCkKLSAgICB7Ci0gICAgICAgIG1EM2Q5
ZXgtPlJlbGVhc2UoKTsKLSAgICAgICAgbUQzZDlleCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYg
KG1EM2Q5TW9kdWxlKQotICAgIHsKLSAgICAgICAgRnJlZUxpYnJhcnkobUQzZDlNb2R1bGUpOwot
ICAgICAgICBtRDNkOU1vZHVsZSA9IE5VTEw7Ci0gICAgfQotfQotCi12b2lkIERpc3BsYXk6OnN0
YXJ0U2NlbmUoKQotewotICAgIGlmICghbVNjZW5lU3RhcnRlZCkKLSAgICB7Ci0gICAgICAgIGxv
bmcgcmVzdWx0ID0gbURldmljZS0+QmVnaW5TY2VuZSgpOwotICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotICAgICAgICBtU2NlbmVTdGFydGVkID0gdHJ1ZTsKLSAgICB9Ci19Ci0K
LXZvaWQgRGlzcGxheTo6ZW5kU2NlbmUoKQotewotICAgIGlmIChtU2NlbmVTdGFydGVkKQotICAg
IHsKLSAgICAgICAgbG9uZyByZXN1bHQgPSBtRGV2aWNlLT5FbmRTY2VuZSgpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7
Ci0gICAgfQotfQotCi1ib29sIERpc3BsYXk6OmdldENvbmZpZ3MoRUdMQ29uZmlnICpjb25maWdz
LCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QsIEVHTGludCBjb25maWdTaXplLCBFR0xpbnQgKm51
bUNvbmZpZykKLXsKLSAgICByZXR1cm4gbUNvbmZpZ1NldC5nZXRDb25maWdzKGNvbmZpZ3MsIGF0
dHJpYkxpc3QsIGNvbmZpZ1NpemUsIG51bUNvbmZpZyk7Ci19Ci0KLWJvb2wgRGlzcGxheTo6Z2V0
Q29uZmlnQXR0cmliKEVHTENvbmZpZyBjb25maWcsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAq
dmFsdWUpCi17Ci0gICAgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24gPSBtQ29uZmln
U2V0LmdldChjb25maWcpOwotCi0gICAgc3dpdGNoIChhdHRyaWJ1dGUpCi0gICAgewotICAgICAg
Y2FzZSBFR0xfQlVGRkVSX1NJWkU6ICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlv
bi0+bUJ1ZmZlclNpemU7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfQUxQSEFf
U0laRTogICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUFscGhhU2l6ZTsg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfQkxVRV9TSVpFOiAgICAgICAgICAg
ICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUJsdWVTaXplOyAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFR0xfR1JFRU5fU0laRTogICAgICAgICAgICAgICAgKnZhbHVlID0g
Y29uZmlndXJhdGlvbi0+bUdyZWVuU2l6ZTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFR0xfUkVEX1NJWkU6ICAgICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+
bVJlZFNpemU7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfREVQVEhfU0la
RTogICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bURlcHRoU2l6ZTsgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfU1RFTkNJTF9TSVpFOiAgICAgICAgICAg
ICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVN0ZW5jaWxTaXplOyAgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFR0xfQ09ORklHX0NBVkVBVDogICAgICAgICAgICAgKnZhbHVlID0gY29u
ZmlndXJhdGlvbi0+bUNvbmZpZ0NhdmVhdDsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBF
R0xfQ09ORklHX0lEOiAgICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUNv
bmZpZ0lEOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfTEVWRUw6ICAgICAg
ICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUxldmVsOyAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfTkFUSVZFX1JFTkRFUkFCTEU6ICAgICAgICAg
KnZhbHVlID0gY29uZmlndXJhdGlvbi0+bU5hdGl2ZVJlbmRlcmFibGU7ICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBFR0xfTkFUSVZFX1ZJU1VBTF9UWVBFOiAgICAgICAgKnZhbHVlID0gY29uZmln
dXJhdGlvbi0+bU5hdGl2ZVZpc3VhbFR5cGU7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xf
U0FNUExFUzogICAgICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVNhbXBs
ZXM7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfU0FNUExFX0JVRkZFUlM6
ICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVNhbXBsZUJ1ZmZlcnM7ICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfU1VSRkFDRV9UWVBFOiAgICAgICAgICAgICAgKnZh
bHVlID0gY29uZmlndXJhdGlvbi0+bVN1cmZhY2VUeXBlOyAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfVFlQRTogICAgICAgICAgKnZhbHVlID0gY29uZmlndXJh
dGlvbi0+bVRyYW5zcGFyZW50VHlwZTsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfVFJB
TlNQQVJFTlRfQkxVRV9WQUxVRTogICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVRyYW5zcGFy
ZW50Qmx1ZVZhbHVlOyAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfR1JFRU5f
VkFMVUU6ICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bVRyYW5zcGFyZW50R3JlZW5WYWx1ZTsg
IGJyZWFrOwotICAgICAgY2FzZSBFR0xfVFJBTlNQQVJFTlRfUkVEX1ZBTFVFOiAgICAgKnZhbHVl
ID0gY29uZmlndXJhdGlvbi0+bVRyYW5zcGFyZW50UmVkVmFsdWU7ICAgIGJyZWFrOwotICAgICAg
Y2FzZSBFR0xfQklORF9UT19URVhUVVJFX1JHQjogICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlv
bi0+bUJpbmRUb1RleHR1cmVSR0I7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfQklORF9U
T19URVhUVVJFX1JHQkE6ICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUJpbmRUb1RleHR1
cmVSR0JBOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfTUlOX1NXQVBfSU5URVJWQUw6ICAg
ICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bU1pblN3YXBJbnRlcnZhbDsgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFR0xfTUFYX1NXQVBfSU5URVJWQUw6ICAgICAgICAgKnZhbHVlID0g
Y29uZmlndXJhdGlvbi0+bU1heFN3YXBJbnRlcnZhbDsgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFR0xfTFVNSU5BTkNFX1NJWkU6ICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+
bUx1bWluYW5jZVNpemU7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfQUxQSEFfTUFT
S19TSVpFOiAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUFscGhhTWFza1NpemU7
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfQ09MT1JfQlVGRkVSX1RZUEU6ICAgICAg
ICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUNvbG9yQnVmZmVyVHlwZTsgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBFR0xfUkVOREVSQUJMRV9UWVBFOiAgICAgICAgICAgKnZhbHVlID0gY29u
ZmlndXJhdGlvbi0+bVJlbmRlcmFibGVUeXBlOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBF
R0xfTUFUQ0hfTkFUSVZFX1BJWE1BUDogICAgICAgKnZhbHVlID0gZmFsc2U7IFVOSU1QTEVNRU5U
RUQoKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFR0xfQ09ORk9STUFOVDog
ICAgICAgICAgICAgICAgKnZhbHVlID0gY29uZmlndXJhdGlvbi0+bUNvbmZvcm1hbnQ7ICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERpc3BsYXk6OmNyZWF0ZURldmljZSgp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IFRDSEFSIHdpbmRvd05hbWVbXSA9IFRFWFQoIkFuZ2xlSGlk
ZGVuV2luZG93Iik7Ci0gICAgc3RhdGljIGNvbnN0IFRDSEFSIGNsYXNzTmFtZVtdID0gVEVYVCgi
U1RBVElDIik7Ci0KLSAgICBtRGV2aWNlV2luZG93ID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9B
Q1RJVkFURSwgY2xhc3NOYW1lLCB3aW5kb3dOYW1lLCBXU19ESVNBQkxFRCB8IFdTX1BPUFVQLCAw
LCAwLCAxLCAxLCBIV05EX01FU1NBR0UsIE5VTEwsIEdldE1vZHVsZUhhbmRsZShOVUxMKSwgTlVM
TCk7Ci0KLSAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07
Ci0KLSAgICAvLyBUaGUgZGVmYXVsdCBzd2FwIGNoYWluIGlzIG5ldmVyIGFjdHVhbGx5IHVzZWQu
IFN1cmZhY2Ugd2lsbCBjcmVhdGUgYSBuZXcgc3dhcCBjaGFpbiB3aXRoIHRoZSBwcm9wZXIgcGFy
YW1ldGVycy4KLSAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0g
RDNERk1UX1VOS05PV047Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0g
MTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gRDNERk1UX1VOS05P
V047Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gMTsKLSAgICBwcmVz
ZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gMTsKLSAgICBwcmVzZW50UGFyYW1ldGVy
cy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMu
RmxhZ3MgPSAwOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBtRGV2aWNl
V2luZG93OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7Ci0g
ICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlID0gRDNETVVMVElTQU1QTEVfTk9O
RTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IGNvbnZlcnRJ
bnRlcnZhbChtTWluU3dhcEludGVydmFsKTsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5Td2FwRWZm
ZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLldpbmRv
d2VkID0gVFJVRTsKLQotICAgIERXT1JEIGJlaGF2aW9yRmxhZ3MgPSBEM0RDUkVBVEVfRlBVX1BS
RVNFUlZFIHwgRDNEQ1JFQVRFX05PV0lORE9XQ0hBTkdFUzsKLQotICAgIEhSRVNVTFQgcmVzdWx0
ID0gbUQzZDktPkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5k
b3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfSEFSRFdBUkVfVkVSVEVYUFJPQ0VTU0lORyB8
IEQzRENSRUFURV9QVVJFREVWSUNFLCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKLQot
ICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
ZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAg
IHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGV2
aWNlV2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX1NPRlRXQVJFX1ZFUlRFWFBST0NF
U1NJTkcsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOwotCi0gICAgICAgIGlmIChyZXN1
bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxz
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwot
Ci0gICAgLy8gUGVybWFuZW50IG5vbi1kZWZhdWx0IHN0YXRlcwotICAgIG1EZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFLCBUUlVFKTsKLQotICAgIG1TY2VuZVN0
YXJ0ZWQgPSBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1TdXJmYWNlICpEaXNwbGF5
OjpjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBFR0xDb25maWcgY29uZmlnKQotewot
ICAgIGNvbnN0IENvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZyk7
Ci0KLSAgICBTdXJmYWNlICpzdXJmYWNlID0gbmV3IFN1cmZhY2UodGhpcywgY29uZmlndXJhdGlv
biwgd2luZG93KTsKLSAgICBtU3VyZmFjZVNldC5pbnNlcnQoc3VyZmFjZSk7Ci0KLSAgICByZXR1
cm4gc3VyZmFjZTsKLX0KLQotRUdMQ29udGV4dCBEaXNwbGF5OjpjcmVhdGVDb250ZXh0KEVHTENv
bmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQpCi17Ci0g
ICAgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZyA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZ0hhbmRs
ZSk7Ci0KLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChjb25maWcs
IHNoYXJlQ29udGV4dCk7Ci0gICAgbUNvbnRleHRTZXQuaW5zZXJ0KGNvbnRleHQpOwotCi0gICAg
cmV0dXJuIGNvbnRleHQ7Ci19Ci0KLXZvaWQgRGlzcGxheTo6ZGVzdHJveVN1cmZhY2UoZWdsOjpT
dXJmYWNlICpzdXJmYWNlKQotewotICAgIGRlbGV0ZSBzdXJmYWNlOwotICAgIG1TdXJmYWNlU2V0
LmVyYXNlKHN1cmZhY2UpOwotfQotCi12b2lkIERpc3BsYXk6OmRlc3Ryb3lDb250ZXh0KGdsOjpD
b250ZXh0ICpjb250ZXh0KQotewotICAgIGdsRGVzdHJveUNvbnRleHQoY29udGV4dCk7Ci0gICAg
bUNvbnRleHRTZXQuZXJhc2UoY29udGV4dCk7Ci19Ci0KLWJvb2wgRGlzcGxheTo6aXNJbml0aWFs
aXplZCgpCi17Ci0gICAgcmV0dXJuIG1EM2Q5ICE9IE5VTEwgJiYgbUNvbmZpZ1NldC5zaXplKCkg
PiAwOwotfQotCi1ib29sIERpc3BsYXk6OmlzVmFsaWRDb25maWcoRUdMQ29uZmlnIGNvbmZpZykK
LXsKLSAgICByZXR1cm4gbUNvbmZpZ1NldC5nZXQoY29uZmlnKSAhPSBOVUxMOwotfQotCi1ib29s
IERpc3BsYXk6OmlzVmFsaWRDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQotewotICAgIHJl
dHVybiBtQ29udGV4dFNldC5maW5kKGNvbnRleHQpICE9IG1Db250ZXh0U2V0LmVuZCgpOwotfQot
Ci1ib29sIERpc3BsYXk6OmlzVmFsaWRTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsK
LSAgICByZXR1cm4gbVN1cmZhY2VTZXQuZmluZChzdXJmYWNlKSAhPSBtU3VyZmFjZVNldC5lbmQo
KTsKLX0KLQotYm9vbCBEaXNwbGF5OjpoYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2UoSFdORCB3aW5k
b3cpCi17Ci0gICAgZm9yIChTdXJmYWNlU2V0OjppdGVyYXRvciBzdXJmYWNlID0gbVN1cmZhY2VT
ZXQuYmVnaW4oKTsgc3VyZmFjZSAhPSBtU3VyZmFjZVNldC5lbmQoKTsgc3VyZmFjZSsrKQotICAg
IHsKLSAgICAgICAgaWYgKCgqc3VyZmFjZSktPmdldFdpbmRvd0hhbmRsZSgpID09IHdpbmRvdykK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRGlzcGxheTo6c2V0U3dhcEludGVydmFsKEdM
aW50IGludGVydmFsKQotewotICAgIG1Td2FwSW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSAgICBtU3dh
cEludGVydmFsID0gc3RkOjptYXgobVN3YXBJbnRlcnZhbCwgbU1pblN3YXBJbnRlcnZhbCk7Ci0g
ICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1NYXhTd2FwSW50ZXJ2
YWwpOwotCi0gICAgbVByZXNlbnRJbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZhbChtU3dhcEludGVy
dmFsKTsKLX0KLQotRFdPUkQgRGlzcGxheTo6Z2V0UHJlc2VudEludGVydmFsKCkKLXsKLSAgICBy
ZXR1cm4gbVByZXNlbnRJbnRlcnZhbDsKLX0KLQotRFdPUkQgRGlzcGxheTo6Y29udmVydEludGVy
dmFsKEdMaW50IGludGVydmFsKQotewotICAgIHN3aXRjaChpbnRlcnZhbCkKLSAgICB7Ci0gICAg
ICBjYXNlIDA6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKLSAgICAgIGNh
c2UgMTogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FOwotICAgICAgY2FzZSAyOiByZXR1
cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9UV087Ci0gICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVT
RU5UX0lOVEVSVkFMX1RIUkVFOwotICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRF
UlZBTF9GT1VSOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9ERUZBVUxUOwotfQotCi1JRGlyZWN0M0REZXZpY2U5
ICpEaXNwbGF5OjpnZXREZXZpY2UoKQotewotICAgIHJldHVybiBtRGV2aWNlOwotfQotCi1EM0RD
QVBTOSBEaXNwbGF5OjpnZXREZXZpY2VDYXBzKCkKLXsKLSAgICByZXR1cm4gbURldmljZUNhcHM7
Ci19Ci0KLXZvaWQgRGlzcGxheTo6Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3Jt
YXQsIGJvb2wgKm11bHRpU2FtcGxlQXJyYXkpCi17Ci0gICAgZm9yIChpbnQgbXVsdGlTYW1wbGVJ
bmRleCA9IDA7IG11bHRpU2FtcGxlSW5kZXggPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsg
bXVsdGlTYW1wbGVJbmRleCsrKQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNk
OS0+Q2hlY2tEZXZpY2VNdWx0aVNhbXBsZVR5cGUobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBmb3Jt
YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRSVUUsIChEM0RNVUxUSVNBTVBMRV9UWVBFKW11bHRpU2FtcGxlSW5kZXgsIE5VTEwp
OwotCi0gICAgICAgIG11bHRpU2FtcGxlQXJyYXlbbXVsdGlTYW1wbGVJbmRleF0gPSBTVUNDRUVE
RUQocmVzdWx0KTsKLSAgICB9Ci19Ci0KLWJvb2wgRGlzcGxheTo6Z2V0Q29tcHJlc3NlZFRleHR1
cmVTdXBwb3J0KCkKLXsKLSAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7Ci0g
ICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5
TW9kZSk7Ci0KLSAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJU
WVBFX1RFWFRVUkUsIEQzREZNVF9EWFQxKSk7Ci19Ci19CkluZGV4OiBBTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkocmV2
aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw5OCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBEaXNwbGF5Lmg6IERl
ZmluZXMgdGhlIGVnbDo6RGlzcGxheSBjbGFzcywgcmVwcmVzZW50aW5nIHRoZSBhYnN0cmFjdAot
Ly8gZGlzcGxheSBvbiB3aGljaCBncmFwaGljcyBhcmUgZHJhd24uIEltcGxlbWVudHMgRUdMRGlz
cGxheS4KLS8vIFtFR0wgMS40XSBzZWN0aW9uIDIuMS4yIHBhZ2UgMy4KLQotI2lmbmRlZiBJTkNM
VURFX0RJU1BMQVlfSF8KLSNkZWZpbmUgSU5DTFVERV9ESVNQTEFZX0hfCi0KLSNpZm5kZWYgV0lO
MzJfTEVBTl9BTkRfTUVBTgotI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0jZW5kaWYKLSNp
bmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSA8c2V0Pgot
Ci0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotI2luY2x1ZGUgImxpYkVHTC9Db25m
aWcuaCIKLSNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgotCi1uYW1lc3BhY2UgZWdsCi17Ci1j
bGFzcyBEaXNwbGF5Ci17Ci0gIHB1YmxpYzoKLSAgICBEaXNwbGF5KEhEQyBkZXZpY2VDb250ZXh0
KTsKLQotICAgIH5EaXNwbGF5KCk7Ci0KLSAgICBib29sIGluaXRpYWxpemUoKTsKLSAgICB2b2lk
IHRlcm1pbmF0ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0U2NlbmUoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZW5kU2NlbmUoKTsKLQotICAgIGJvb2wgZ2V0Q29uZmlncyhFR0xDb25maWcgKmNv
bmZpZ3MsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCwgRUdMaW50IGNvbmZpZ1NpemUsIEVHTGlu
dCAqbnVtQ29uZmlnKTsKLSAgICBib29sIGdldENvbmZpZ0F0dHJpYihFR0xDb25maWcgY29uZmln
LCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKLQotICAgIGVnbDo6U3VyZmFjZSAq
Y3JlYXRlV2luZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZpZyk7Ci0gICAg
RUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGds
OjpDb250ZXh0ICpzaGFyZUNvbnRleHQpOwotCi0gICAgdm9pZCBkZXN0cm95U3VyZmFjZShlZ2w6
OlN1cmZhY2UgKnN1cmZhY2UpOwotICAgIHZvaWQgZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQg
KmNvbnRleHQpOwotCi0gICAgYm9vbCBpc0luaXRpYWxpemVkKCk7Ci0gICAgYm9vbCBpc1ZhbGlk
Q29uZmlnKEVHTENvbmZpZyBjb25maWcpOwotICAgIGJvb2wgaXNWYWxpZENvbnRleHQoZ2w6OkNv
bnRleHQgKmNvbnRleHQpOwotICAgIGJvb2wgaXNWYWxpZFN1cmZhY2UoZWdsOjpTdXJmYWNlICpz
dXJmYWNlKTsKLSAgICBib29sIGhhc0V4aXN0aW5nV2luZG93U3VyZmFjZShIV05EIHdpbmRvdyk7
Ci0KLSAgICB2b2lkIHNldFN3YXBJbnRlcnZhbChHTGludCBpbnRlcnZhbCk7Ci0gICAgRFdPUkQg
Z2V0UHJlc2VudEludGVydmFsKCk7Ci0gICAgc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChH
TGludCBpbnRlcnZhbCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRERldmljZTkgKmdldERldmlj
ZSgpOwotICAgIHZpcnR1YWwgRDNEQ0FQUzkgZ2V0RGV2aWNlQ2FwcygpOwotICAgIHZpcnR1YWwg
dm9pZCBnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlT
YW1wbGVBcnJheSk7Ci0gICAgdmlydHVhbCBib29sIGdldENvbXByZXNzZWRUZXh0dXJlU3VwcG9y
dCgpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERpc3BsYXkp
OwotICAgIGNvbnN0IEhEQyBtRGM7Ci0KLSAgICBITU9EVUxFIG1EM2Q5TW9kdWxlOwotICAgIAot
ICAgIFVJTlQgbUFkYXB0ZXI7Ci0gICAgRDNEREVWVFlQRSBtRGV2aWNlVHlwZTsKLSAgICBJRGly
ZWN0M0Q5ICptRDNkOTsgIC8vIEFsd2F5cyB2YWxpZCBhZnRlciBzdWNjZXNzZnVsIGluaXRpYWxp
emF0aW9uLgotICAgIElEaXJlY3QzRDlFeCAqbUQzZDlleDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYg
RDNEOUV4IGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsK
LSAgICBEM0RDQVBTOSBtRGV2aWNlQ2FwczsKLSAgICBIV05EIG1EZXZpY2VXaW5kb3c7Ci0KLSAg
ICBib29sIG1TY2VuZVN0YXJ0ZWQ7Ci0gICAgR0xpbnQgbVN3YXBJbnRlcnZhbDsKLSAgICBFR0xp
bnQgbU1heFN3YXBJbnRlcnZhbDsKLSAgICBFR0xpbnQgbU1pblN3YXBJbnRlcnZhbDsKLSAgICBE
V09SRCBtUHJlc2VudEludGVydmFsOwotCi0gICAgdHlwZWRlZiBzdGQ6OnNldDxTdXJmYWNlKj4g
U3VyZmFjZVNldDsKLSAgICBTdXJmYWNlU2V0IG1TdXJmYWNlU2V0OwotCi0gICAgQ29uZmlnU2V0
IG1Db25maWdTZXQ7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6c2V0PGdsOjpDb250ZXh0Kj4gQ29udGV4
dFNldDsKLSAgICBDb250ZXh0U2V0IG1Db250ZXh0U2V0OwotCi0gICAgYm9vbCBjcmVhdGVEZXZp
Y2UoKTsKLX07Ci19Ci0KLSNlbmRpZiAgIC8vIElOQ0xVREVfRElTUExBWV9IXwpJbmRleDogQU5H
TEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdM
L1N1cmZhY2UuY3BwCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9saWJFR0wvU3VyZmFj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDMxICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIFN1cmZhY2UuY3BwOiBJbXBsZW1lbnRzIHRoZSBlZ2w6OlN1cmZhY2UgY2xhc3MsIHJl
cHJlc2VudGluZyBhIGRyYXdpbmcgc3VyZmFjZQotLy8gc3VjaCBhcyB0aGUgY2xpZW50IGFyZWEg
b2YgYSB3aW5kb3csIGluY2x1ZGluZyBhbnkgYmFjayBidWZmZXJzLgotLy8gSW1wbGVtZW50cyBF
R0xTdXJmYWNlIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtFR0wgMS40XSBzZWN0aW9uIDIu
MiBwYWdlIDMuCi0KLSNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgotCi0jaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgotI2luY2x1ZGUgImxpYkVH
TC9EaXNwbGF5LmgiCi0KLW5hbWVzcGFjZSBlZ2wKLXsKLVN1cmZhY2U6OlN1cmZhY2UoRGlzcGxh
eSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93KSAKLSAgICA6IG1E
aXNwbGF5KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KQotewotICAg
IG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIG1CYWNr
QnVmZmVyID0gTlVMTDsKLSAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICBtRmxpcFRleHR1
cmUgPSBOVUxMOwotICAgIG1GbGlwU3RhdGUgPSBOVUxMOwotICAgIG1QcmVGbGlwU3RhdGUgPSBO
VUxMOwotCi0gICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdMaW50KSgxLjAgKiBFR0xfRElTUExB
WV9TQ0FMSU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFjdHVhbCBwaXhlbCBhc3BlY3QgcmF0
aW8KLSAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOwotICAgIG1Td2FwQmVoYXZp
b3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKLQotICAgIHJlc2V0U3dhcENoYWluKCk7Ci19Ci0K
LVN1cmZhY2U6On5TdXJmYWNlKCkKLXsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAg
ICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAobUJhY2tCdWZmZXIp
Ci0gICAgewotICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlm
IChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgp
OwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURlcHRo
U3RlbmNpbC0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlmIChtRmxpcFRleHR1cmUpCi0gICAg
ewotICAgICAgICBtRmxpcFRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAobUZs
aXBTdGF0ZSkKLSAgICB7Ci0gICAgICAgIG1GbGlwU3RhdGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0K
LSAgICBpZiAobVByZUZsaXBTdGF0ZSkKLSAgICB7Ci0gICAgICAgIG1QcmVGbGlwU3RhdGUtPlJl
bGVhc2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQotewot
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKLQot
ICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKLQotICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5tRGVw
dGhTdGVuY2lsRm9ybWF0OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9
IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IG1Db25maWctPm1S
ZW5kZXJUYXJnZXRGb3JtYXQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRo
U3RlbmNpbCA9IEZBTFNFOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKLSAgICBw
cmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gZ2V0V2luZG93SGFuZGxlKCk7Ci0gICAg
cHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2Ft
cGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQK
LSAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IERpc3BsYXk6OmNv
bnZlcnRJbnRlcnZhbChtQ29uZmlnLT5tTWluU3dhcEludGVydmFsKTsKLSAgICBwcmVzZW50UGFy
YW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOwotICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLldpbmRvd2VkID0gVFJVRTsKLQotICAgIFJFQ1Qgd2luZG93UmVjdDsKLSAgICBp
ZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSB3aW5kb3dSZWN0LnJpZ2h0IC0gd2lu
ZG93UmVjdC5sZWZ0OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSB3
aW5kb3dSZWN0LmJvdHRvbSAtIHdpbmRvd1JlY3QudG9wOwotCi0gICAgSURpcmVjdDNEU3dhcENo
YWluOSAqc3dhcENoYWluID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZzd2FwQ2hhaW4pOwot
Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0K
LSAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnM6ICUw
OGxYIiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MpOwotICAg
IH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWxTdXJmYWNlID0gTlVMTDsK
LSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2UocHJlc2VudFBh
cmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVz
ZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0LCBwcmVzZW50UGFyYW1ldGVycy5N
dWx0aVNhbXBsZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZkZXB0
aFN0ZW5jaWxTdXJmYWNlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgICAgIHN3YXBDaGFpbi0+UmVsZWFzZSgpOwot
Ci0gICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3Ig
bmV3IHN3YXAgY2hhaW46ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MpOwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJn
ZXQgPSBOVUxMOwotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
ckhlaWdodCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBs
ZVR5cGUsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZyZW5k
ZXJUYXJnZXQsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSk7Ci0KLSAgICAgICAgc3dhcENoYWluLT5SZWxlYXNlKCk7Ci0gICAgICAg
IGRlcHRoU3RlbmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgcmVuZGVyIHRhcmdldCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogJTA4bFgi
LCByZXN1bHQpOwotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQyk7Ci0gICAgfQot
Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIElEaXJlY3QzRFRleHR1cmU5
ICpmbGlwVGV4dHVyZSA9IE5VTEw7Ci0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJl
KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0LCBE
M0RQT09MX0RFRkFVTFQsICZmbGlwVGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAgICAgICBzd2FwQ2hhaW4t
PlJlbGVhc2UoKTsKLSAgICAgICAgZGVwdGhTdGVuY2lsU3VyZmFjZS0+UmVsZWFzZSgpOwotICAg
ICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLQotICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgZmxpcCB0ZXh0dXJlIGZvciBuZXcgc3dhcCBjaGFpbjogJTA4bFgiLCByZXN1bHQpOwot
ICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQyk7Ci0gICAgfQotCi0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKmJhY2tCdWZmZXIgPSBOVUxMOwotICAgIHN3YXBDaGFpbi0+R2V0QmFja0J1
ZmZlcigwLCBEM0RCQUNLQlVGRkVSX1RZUEVfTU9OTywgJmJhY2tCdWZmZXIpOwotCi0gICAgaWYg
KG1Td2FwQ2hhaW4pIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICBpZiAobURlcHRoU3RlbmNp
bCkgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgIGlmIChtQmFja0J1ZmZlcikgbUJhY2tC
dWZmZXItPlJlbGVhc2UoKTsKLSAgICBpZiAobVJlbmRlclRhcmdldCkgbVJlbmRlclRhcmdldC0+
UmVsZWFzZSgpOwotICAgIGlmIChtRmxpcFRleHR1cmUpIG1GbGlwVGV4dHVyZS0+UmVsZWFzZSgp
OwotCi0gICAgbVdpZHRoID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoOwotICAg
IG1IZWlnaHQgPSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0OwotCi0gICAgbVN3
YXBDaGFpbiA9IHN3YXBDaGFpbjsKLSAgICBtRGVwdGhTdGVuY2lsID0gZGVwdGhTdGVuY2lsU3Vy
ZmFjZTsKLSAgICBtQmFja0J1ZmZlciA9IGJhY2tCdWZmZXI7Ci0gICAgbVJlbmRlclRhcmdldCA9
IHJlbmRlclRhcmdldDsKLSAgICBtRmxpcFRleHR1cmUgPSBmbGlwVGV4dHVyZTsKLQotICAgIC8v
IFRoZSBmbGlwIHN0YXRlIGJsb2NrIHJlY29yZGVkIG1GbGlwVGV4dHVyZSBzbyBpdCBpcyBub3cg
aW52YWxpZC4KLSAgICByZWxlYXNlUmVjb3JkZWRTdGF0ZShkZXZpY2UpOwotfQotCi1IV05EIFN1
cmZhY2U6OmdldFdpbmRvd0hhbmRsZSgpCi17Ci0gICAgcmV0dXJuIG1XaW5kb3c7Ci19Ci0KLXZv
aWQgU3VyZmFjZTo6d3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKElEaXJlY3QzRERldmljZTkgKmRl
dmljZSkKLXsKLSAgICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zCi0gICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7Ci0gICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUsIEZBTFNFKTsKLSAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsK
LSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUp
OwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgRkFMU0Up
OwotICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsK
LSAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENP
TE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xP
UldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOwotICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7Ci0gICAgZGV2
aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKLSAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihO
VUxMKTsKLQotICAgIC8vIEp1c3Qgc2FtcGxlIHRoZSB0ZXh0dXJlCi0gICAgZGV2aWNlLT5TZXRU
ZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEpOwot
ICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwgRDNE
VEFfVEVYVFVSRSk7Ci0gICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgxLCBEM0RUU1Nf
Q09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOwotICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxM
KTsgLy8gVGhlIGFjdHVhbCB0ZXh0dXJlIHdpbGwgY2hhbmdlIGFmdGVyIHJlc2l6aW5nLiBCdXQg
dGhlIHByZS1mbGlwIHN0YXRlIGJsb2NrIG11c3Qgc2F2ZS9yZXN0b3JlIHRoZSB0ZXh0dXJlLgot
ICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhG
X1BPSU5UKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRF
UiwgRDNEVEVYRl9QT0lOVCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9TUkdCVEVYVFVSRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQz
RFNBTVBfQUREUkVTU1UsIEQzRFRBRERSRVNTX0NMQU1QKTsKLSAgICBkZXZpY2UtPlNldFNhbXBs
ZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NWLCBEM0RUQUREUkVTU19DTEFNUCk7Ci0gICAgZGV2
aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9URVgxKTsKLQotICAgIGRldmljZS0+
U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsgLy8gRHJhd1ByaW1pdGl2ZVVQIG9ubHkgY2FyZXMg
YWJvdXQgc3RyZWFtIDAsIG5vdCB0aGUgcmVzdC4KLX0KLQotdm9pZCBTdXJmYWNlOjphcHBseUZs
aXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpCi17Ci0gICAgSFJFU1VMVCBocjsKLQot
ICAgIGlmIChtRmxpcFN0YXRlID09IE5VTEwpCi0gICAgewotICAgICAgICAvLyBDcmVhdGUgdHdv
IHN0YXRlIGJsb2NrcyBib3RoIHJlY29yZGluZyB0aGUgc3RhdGVzIHRoYXQgYXJlIGNoYW5nZWQg
d2hlbiBzd2FwcGluZy4KLQotICAgICAgICAvLyBtUHJlRmxpcFN0YXRlIHdpbGwgcmVjb3JkIHRo
ZSBvcmlnaW5hbCBzdGF0ZSBlYWNoIGVudHJ5LgotICAgICAgICBociA9IGRldmljZS0+QmVnaW5T
dGF0ZUJsb2NrKCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgd3Jp
dGVSZWNvcmRhYmxlRmxpcFN0YXRlKGRldmljZSk7Ci0gICAgICAgIGhyID0gZGV2aWNlLT5FbmRT
dGF0ZUJsb2NrKCZtUHJlRmxpcFN0YXRlKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikg
fHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7
Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1Q
cmVGbGlwU3RhdGUtPkNhcHR1cmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1GbGlwU3Rh
dGUgd2lsbCByZWNvcmQgdGhlIHN0YXRlIGZvciB0aGUgc3dhcCBvcGVyYXRpb24uCi0gICAgICAg
IGhyID0gZGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChocikpOwotCi0gICAgICAgIHdyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShkZXZpY2UpOwotCi0g
ICAgICAgIGhyID0gZGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtRmxpcFN0YXRlKTsKLSAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
aHIgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1GbGlwU3RhdGUgPSBOVUxMOwotICAgICAgICAgICAgbVByZUZsaXBT
dGF0ZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbVByZUZsaXBTdGF0ZSA9IE5VTEw7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBociA9IG1GbGlwU3Rh
dGUtPkFwcGx5KCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaHIgPSBtUHJlRmxpcFN0YXRlLT5D
YXB0dXJlKCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgaHIgPSBt
RmxpcFN0YXRlLT5BcHBseSgpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAg
fQotCi0gICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXQoMCwgJm1QcmVGbGlwQmFja0J1ZmZlcik7
Ci0gICAgZGV2aWNlLT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKCZtUHJlRmxpcERlcHRoU3RlbmNp
bCk7Ci0KLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtQmFja0J1ZmZlcik7Ci0gICAg
ZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKE5VTEwpOwotfQotCi12b2lkIFN1cmZhY2U6
OnJlc3RvcmVTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpCi17Ci0gICAgbVByZUZsaXBT
dGF0ZS0+QXBwbHkoKTsKLQotICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1QcmVGbGlw
QmFja0J1ZmZlcik7Ci0gICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKG1QcmVGbGlw
RGVwdGhTdGVuY2lsKTsKLQotICAgIGlmIChtUHJlRmxpcEJhY2tCdWZmZXIpCi0gICAgewotICAg
ICAgICBtUHJlRmxpcEJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbVByZUZsaXBCYWNr
QnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVByZUZsaXBEZXB0aFN0ZW5jaWwpCi0g
ICAgewotICAgICAgICBtUHJlRmxpcERlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgICAgICBt
UHJlRmxpcERlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotfQotCi0vLyBPbiB0aGUgbmV4dCBm
bGlwLCB0aGlzIHdpbGwgY2F1c2UgdGhlIHN0YXRlIHRvIGJlIHJlY29yZGVkIGZyb20gc2NyYXRj
aC4KLS8vIEluIHBhcnRpY3VsYXIgd2UgbmVlZCB0byBkbyB0aGlzIGlmIHRoZSBmbGlwIHRleHR1
cmUgY2hhbmdlcy4KLXZvaWQgU3VyZmFjZTo6cmVsZWFzZVJlY29yZGVkU3RhdGUoSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlKQotewotICAgIGlmIChtRmxpcFN0YXRlKQotICAgIHsKLSAgICAgICAg
bUZsaXBTdGF0ZS0+UmVsZWFzZSgpOwotICAgICAgICBtRmxpcFN0YXRlID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBpZiAobVByZUZsaXBTdGF0ZSkKLSAgICB7Ci0gICAgICAgIG1QcmVGbGlwU3RhdGUt
PlJlbGVhc2UoKTsKLSAgICAgICAgbVByZUZsaXBTdGF0ZSA9IE5VTEw7Ci0gICAgfQotfQotCi1i
b29sIFN1cmZhY2U6OmNoZWNrRm9yV2luZG93UmVzaXplKCkKLXsKLSAgICBSRUNUIGNsaWVudDsK
LSAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZjbGllbnQpKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGlmIChnZXRXaWR0aCgpICE9IGNsaWVudC5yaWdodCAtIGNsaWVudC5sZWZ0IHx8IGdl
dEhlaWdodCgpICE9IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wKQotICAgIHsKLSAgICAgICAg
cmVzZXRTd2FwQ2hhaW4oKTsKLQotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNl
Kj4oZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkpID09IHRoaXMpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGdsTWFrZUN1cnJlbnQoZ2xHZXRDdXJyZW50Q29udGV4dCgpLCBzdGF0aWNfY2FzdDxlZ2w6
OkRpc3BsYXkqPihnZXRDdXJyZW50RGlzcGxheSgpKSwgdGhpcyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
U3VyZmFjZTo6c3dhcCgpCi17Ci0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBJ
RGlyZWN0M0RUZXh0dXJlOSAqZmxpcFRleHR1cmUgPSBtRmxpcFRleHR1cmU7Ci0gICAgICAgIGZs
aXBUZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsK
LQotICAgICAgICBFR0xpbnQgb2xkV2lkdGggPSBtV2lkdGg7Ci0gICAgICAgIEVHTGludCBvbGRI
ZWlnaHQgPSBtSGVpZ2h0OwotCi0gICAgICAgIGNoZWNrRm9yV2luZG93UmVzaXplKCk7Ci0KLSAg
ICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOwot
Ci0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFjZTsKLSAgICAgICAgZmxp
cFRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOwotCi0gICAgICAg
IG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotICAgICAgICBkZXZpY2UtPlN0cmV0Y2hSZWN0KHJlbmRl
clRhcmdldCwgTlVMTCwgdGV4dHVyZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7Ci0gICAg
ICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotCi0gICAgICAgIGFwcGx5RmxpcFN0YXRlKGRl
dmljZSk7Ci0gICAgICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBmbGlwVGV4dHVyZSk7Ci0KLSAg
ICAgICAgZmxvYXQgeHNjYWxlID0gKGZsb2F0KW1XaWR0aCAvIG9sZFdpZHRoOwotICAgICAgICBm
bG9hdCB5c2NhbGUgPSAoZmxvYXQpbUhlaWdodCAvIG9sZEhlaWdodDsKLQotICAgICAgICAvLyBS
ZW5kZXIgdGhlIHRleHR1cmUgdXBzaWRlIGRvd24gaW50byB0aGUgYmFjayBidWZmZXIKLSAgICAg
ICAgLy8gVGV4Y29vcmRzIGFyZSBjaG9zZW4gdG8gcGluIGEgcG90ZW50aWFsbHkgcmVzaXplZCBp
bWFnZSBpbnRvIHRoZSB1cHBlci1sZWZ0IGNvcm5lciB3aXRob3V0IHNjYWxpbmcuCi0gICAgICAg
IGZsb2F0IHF1YWRbNF1bNl0gPSB7eyAgICAgMCAtIDAuNWYsICAgICAgIDAgLSAwLjVmLCAwLjBm
LCAxLjBmLCAwLjBmLCAgIDEuMGYgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7bVdpZHRoIC0gMC41ZiwgICAgICAgMCAtIDAuNWYsIDAuMGYsIDEuMGYsIHhzY2FsZSwgMS4w
ZiAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttV2lkdGggLSAwLjVmLCBt
SGVpZ2h0IC0gMC41ZiwgMC4wZiwgMS4wZiwgeHNjYWxlLCAxLjBmLXlzY2FsZX0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeyAgICAgMCAtIDAuNWYsIG1IZWlnaHQgLSAwLjVmLCAwLjBm
LCAxLjBmLCAwLjBmLCAgIDEuMGYteXNjYWxlfX07ICAgLy8geCwgeSwgeiwgcmh3LCB1LCB2Ci0K
LSAgICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKLSAgICAgICAgZGV2aWNlLT5EcmF3UHJp
bWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsK
LQotICAgICAgICBmbGlwVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICB0ZXh0dXJlU3VyZmFj
ZS0+UmVsZWFzZSgpOwotCi0gICAgICAgIHJlc3RvcmVTdGF0ZShkZXZpY2UpOwotCi0gICAgICAg
IG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hh
aW4tPlByZXNlbnQoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgbURpc3BsYXktPmdldFByZXNlbnRJ
bnRlcnZhbCgpKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfRFJJVkVS
SU5URVJOQUxFUlJPUikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNE
RVJSX0RFVklDRUxPU1QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
Q09OVEVYVF9MT1NULCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotCi0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUVHTGludCBT
dXJmYWNlOjpnZXRXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1XaWR0aDsKLX0KLQotRUdM
aW50IFN1cmZhY2U6OmdldEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1IZWlnaHQ7Ci19
Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQotewotICAg
IGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVm
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLUlEaXJlY3QzRFN1
cmZhY2U5ICpTdXJmYWNlOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIGlmIChtRGVwdGhTdGVu
Y2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci19Ci19CkluZGV4OiBBTkdMRS9zcmMvbGliRUdML1N1
cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkocmV2aXNp
b24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw4MyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBTdXJmYWNlLmg6IERlZmlu
ZXMgdGhlIGVnbDo6U3VyZmFjZSBjbGFzcywgcmVwcmVzZW50aW5nIGEgZHJhd2luZyBzdXJmYWNl
Ci0vLyBzdWNoIGFzIHRoZSBjbGllbnQgYXJlYSBvZiBhIHdpbmRvdywgaW5jbHVkaW5nIGFueSBi
YWNrIGJ1ZmZlcnMuCi0vLyBJbXBsZW1lbnRzIEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQgZnVuY3Rp
b25hbGl0eS4gW0VHTCAxLjRdIHNlY3Rpb24gMi4yIHBhZ2UgMy4KLQotI2lmbmRlZiBJTkNMVURF
X1NVUkZBQ0VfSF8KLSNkZWZpbmUgSU5DTFVERV9TVVJGQUNFX0hfCi0KLSNkZWZpbmUgRUdMQVBJ
Ci0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBlZ2wKLXsKLWNsYXNzIERpc3BsYXk7Ci1j
bGFzcyBDb25maWc7Ci0KLWNsYXNzIFN1cmZhY2UKLXsKLSAgcHVibGljOgotICAgIFN1cmZhY2Uo
RGlzcGxheSAqZGlzcGxheSwgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgSFdORCB3aW5kb3cp
OwotCi0gICAgflN1cmZhY2UoKTsKLQotICAgIEhXTkQgZ2V0V2luZG93SGFuZGxlKCk7Ci0gICAg
Ym9vbCBzd2FwKCk7Ci0KLSAgICB2aXJ0dWFsIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oU3VyZmFjZSk7Ci0KLSAgICBEaXNwbGF5ICpjb25zdCBtRGlzcGxheTsKLSAg
ICBJRGlyZWN0M0RTd2FwQ2hhaW45ICptU3dhcENoYWluOwotICAgIElEaXJlY3QzRFN1cmZhY2U5
ICptQmFja0J1ZmZlcjsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKLSAgICBJRGlyZWN0M0RUZXh0dXJl
OSAqbUZsaXBUZXh0dXJlOwotCi0gICAgdm9pZCByZXNldFN3YXBDaGFpbigpOwotICAgIGJvb2wg
Y2hlY2tGb3JXaW5kb3dSZXNpemUoKTsKLQotICAgIHZvaWQgYXBwbHlGbGlwU3RhdGUoSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlKTsKLSAgICB2b2lkIHJlc3RvcmVTdGF0ZShJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UpOwotICAgIHZvaWQgd3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKElEaXJlY3Qz
RERldmljZTkgKmRldmljZSk7Ci0gICAgdm9pZCByZWxlYXNlUmVjb3JkZWRTdGF0ZShJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UpOwotICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICptRmxpcFN0YXRl
OwotICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICptUHJlRmxpcFN0YXRlOwotICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICptUHJlRmxpcEJhY2tCdWZmZXI7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1Q
cmVGbGlwRGVwdGhTdGVuY2lsOwotCi0gICAgY29uc3QgSFdORCBtV2luZG93OyAgICAgICAgICAg
IC8vIFdpbmRvdyB0aGF0IHRoZSBzdXJmYWNlIGlzIGNyZWF0ZWQgZm9yLgotICAgIGNvbnN0IGVn
bDo6Q29uZmlnICptQ29uZmlnOyAgICAvLyBFR0wgY29uZmlnIHN1cmZhY2Ugd2FzIGNyZWF0ZWQg
d2l0aAotICAgIEVHTGludCBtSGVpZ2h0OyAgICAgICAgICAgICAgICAvLyBIZWlnaHQgb2Ygc3Vy
ZmFjZQotICAgIEVHTGludCBtV2lkdGg7ICAgICAgICAgICAgICAgICAvLyBXaWR0aCBvZiBzdXJm
YWNlCi0vLyAgRUdMaW50IGhvcml6b250YWxSZXNvbHV0aW9uOyAgIC8vIEhvcml6b250YWwgZG90
IHBpdGNoCi0vLyAgRUdMaW50IHZlcnRpY2FsUmVzb2x1dGlvbjsgICAgIC8vIFZlcnRpY2FsIGRv
dCBwaXRjaAotLy8gIEVHTEJvb2xlYW4gbGFyZ2VzdFBCdWZmZXI7ICAgICAvLyBJZiB0cnVlLCBj
cmVhdGUgbGFyZ2VzdCBwYnVmZmVyIHBvc3NpYmxlCi0vLyAgRUdMQm9vbGVhbiBtaXBtYXBUZXh0
dXJlOyAgICAgIC8vIFRydWUgaWYgdGV4dHVyZSBoYXMgbWlwbWFwcwotLy8gIEVHTGludCBtaXBt
YXBMZXZlbDsgICAgICAgICAgICAvLyBNaXBtYXAgbGV2ZWwgdG8gcmVuZGVyIHRvCi0vLyAgRUdM
ZW51bSBtdWx0aXNhbXBsZVJlc29sdmU7ICAgIC8vIE11bHRpc2FtcGxlIHJlc29sdmUgYmVoYXZp
b3IKLSAgICBFR0xpbnQgbVBpeGVsQXNwZWN0UmF0aW87ICAgICAgLy8gRGlzcGxheSBhc3BlY3Qg
cmF0aW8KLSAgICBFR0xlbnVtIG1SZW5kZXJCdWZmZXI7ICAgICAgICAgLy8gUmVuZGVyIGJ1ZmZl
cgotICAgIEVHTGVudW0gbVN3YXBCZWhhdmlvcjsgICAgICAgICAvLyBCdWZmZXIgc3dhcCBiZWhh
dmlvcgotLy8gIEVHTGVudW0gdGV4dHVyZUZvcm1hdDsgICAgICAgICAvLyBGb3JtYXQgb2YgdGV4
dHVyZTogUkdCLCBSR0JBLCBvciBubyB0ZXh0dXJlCi0vLyAgRUdMZW51bSB0ZXh0dXJlVGFyZ2V0
OyAgICAgICAgIC8vIFR5cGUgb2YgdGV4dHVyZTogMkQgb3Igbm8gdGV4dHVyZQotLy8gIEVHTGVu
dW0gdmdBbHBoYUZvcm1hdDsgICAgICAgICAvLyBBbHBoYSBmb3JtYXQgZm9yIE9wZW5WRwotLy8g
IEVHTGVudW0gdmdDb2xvclNwYWNlOyAgICAgICAgICAvLyBDb2xvciBzcGFjZSBmb3IgT3BlblZH
Ci19OwotfQotCi0jZW5kaWYgICAvLyBJTkNMVURFX1NVUkZBQ0VfSF8KSW5kZXg6IEFOR0xFL3Ny
Yy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML2xpYkVH
TC5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEwODQgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8g
bGliRUdMLmNwcDogSW1wbGVtZW50cyB0aGUgZXhwb3J0ZWQgRUdMIGZ1bmN0aW9ucy4KLQotI2lu
Y2x1ZGUgPGV4Y2VwdGlvbj4KLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLSNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgotI2luY2x1
ZGUgImxpYkVHTC9EaXNwbGF5LmgiCi0KLQotYm9vbCB2YWxpZGF0ZShlZ2w6OkRpc3BsYXkgKmRp
c3BsYXkpCi17Ci0gICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9ESVNQTEFZLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
aWYgKCFkaXNwbGF5LT5pc0luaXRpYWxpemVkKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX05PVF9JTklUSUFMSVpFRCwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIHZhbGlkYXRlKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMQ29uZmlnIGNv
bmZpZykKLXsKLSAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghZGlzcGxheS0+aXNWYWxpZENvbmZpZyhjb25m
aWcpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09ORklHLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGUoZWdsOjpEaXNw
bGF5ICpkaXNwbGF5LCBnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBpZiAoIXZhbGlkYXRl
KGRpc3BsYXkpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlm
ICghZGlzcGxheS0+aXNWYWxpZENvbnRleHQoY29udGV4dCkpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9DT05URVhULCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGUoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZh
Y2UgKnN1cmZhY2UpCi17Ci0gICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRpc3BsYXktPmlzVmFsaWRTdXJm
YWNlKHN1cmZhY2UpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfU1VSRkFD
RSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1leHRlcm4gIkMiCi17
Ci1FR0xpbnQgX19zdGRjYWxsIGVnbEdldEVycm9yKHZvaWQpCi17Ci0gICAgVFJBQ0UoIigpIik7
Ci0KLSAgICBFR0xpbnQgZXJyb3IgPSBlZ2w6OmdldEN1cnJlbnRFcnJvcigpOwotCi0gICAgaWYg
KGVycm9yICE9IEVHTF9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgZWdsOjpzZXRDdXJyZW50RXJy
b3IoRUdMX1NVQ0NFU1MpOwotICAgIH0KLQotICAgIHJldHVybiBlcnJvcjsKLX0KLQotRUdMRGlz
cGxheSBfX3N0ZGNhbGwgZWdsR2V0RGlzcGxheShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5
X2lkKQotewotICAgIFRSQUNFKCIoRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheV9pZCA9IDB4
JTAuOHApIiwgZGlzcGxheV9pZCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBSZXR1cm4gdGhlIHNhbWUgRUdMRGlzcGxheSBoYW5kbGUgd2hlbiBkaXNwbGF5X2lkIGFscmVh
ZHkgY3JlYXRlZCBhIGRpc3BsYXkKLQotICAgICAgICBpZiAoZGlzcGxheV9pZCA9PSBFR0xfREVG
QVVMVF9ESVNQTEFZKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IGVnbDo6RGlz
cGxheSgoSERDKU5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlmIGRpc3BsYXlfaWQgaXMgYSB2YWxpZCBkaXNwbGF5
IGRldmljZSBjb250ZXh0Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgZWdsOjpEaXNwbGF5KChI
REMpZGlzcGxheV9pZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19E
SVNQTEFZKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX05PX0RJU1BMQVk7Ci19Ci0KLUVHTEJv
b2xlYW4gX19zdGRjYWxsIGVnbEluaXRpYWxpemUoRUdMRGlzcGxheSBkcHksIEVHTGludCAqbWFq
b3IsIEVHTGludCAqbWlub3IpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAu
OHAsIEVHTGludCAqbWFqb3IgPSAweCUwLjhwLCBFR0xpbnQgKm1pbm9yID0gMHglMC44cCkiLAot
ICAgICAgICAgIGRweSwgbWFqb3IsIG1pbm9yKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
aWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7
Ci0KLSAgICAgICAgaWYgKCFkaXNwbGF5LT5pbml0aWFsaXplKCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBFR0xfRkFMU0UpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG1ham9yKSAqbWFqb3IgPSAxOwotICAgICAgICBpZiAobWlu
b3IpICptaW5vciA9IDQ7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX0ZB
TFNFOwotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xUZXJtaW5hdGUoRUdMRGlzcGxheSBk
cHkpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHApIiwgZHB5KTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGRweSA9PSBFR0xfTk9fRElTUExBWSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfRElTUExBWSwgRUdMX0ZBTFNF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19j
YXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgZGlzcGxheS0+dGVybWluYXRlKCk7
Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1jb25z
dCBjaGFyICpfX3N0ZGNhbGwgZWdsUXVlcnlTdHJpbmcoRUdMRGlzcGxheSBkcHksIEVHTGludCBu
YW1lKQotewotICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xpbnQgbmFt
ZSA9ICVkKSIsIGRweSwgbmFtZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlz
cGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAg
ICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG5hbWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEVHTF9DTElFTlRfQVBJUzoKLSAgICAgICAgICAgIHJldHVybiBzdWNjZXNz
KCJPcGVuR0xfRVMiKTsKLSAgICAgICAgICBjYXNlIEVHTF9FWFRFTlNJT05TOgotICAgICAgICAg
ICAgcmV0dXJuIHN1Y2Nlc3MoIiIpOwotICAgICAgICAgIGNhc2UgRUdMX1ZFTkRPUjoKLSAgICAg
ICAgICAgIHJldHVybiBzdWNjZXNzKCJUcmFuc0dhbWluZyBJbmMuIik7Ci0gICAgICAgICAgY2Fz
ZSBFR0xfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKCIxLjQgKGdpdC1kZXZl
bCAiX19EQVRFX18iICIgX19USU1FX18iKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCAoY29uc3QgY2hhciopTlVMTCk7Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCAoY29uc3QgY2hhciopTlVMTCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7
Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbEdldENvbmZpZ3MoRUdMRGlzcGxheSBkcHks
IEVHTENvbmZpZyAqY29uZmlncywgRUdMaW50IGNvbmZpZ19zaXplLCBFR0xpbnQgKm51bV9jb25m
aWcpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyAq
Y29uZmlncyA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiRUdMaW50IGNvbmZpZ19zaXplID0gJWQs
IEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGNvbmZpZ3Ms
IGNvbmZpZ19zaXplLCBudW1fY29uZmlnKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWds
OjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQot
ICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFudW1fY29uZmlnKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVH
TF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBFR0xpbnQgYXR0cmliTGlzdFtd
ID0gICAge0VHTF9OT05FfTsKLQotICAgICAgICBpZiAoIWRpc3BsYXktPmdldENvbmZpZ3MoY29u
ZmlncywgYXR0cmliTGlzdCwgY29uZmlnX3NpemUsIG51bV9jb25maWcpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DLCBFR0xfRkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBFR0xfRkFMU0U7Ci19
Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbENob29zZUNvbmZpZyhFR0xEaXNwbGF5IGRweSwg
Y29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCwgRUdMQ29uZmlnICpjb25maWdzLCBFR0xpbnQgY29u
ZmlnX3NpemUsIEVHTGludCAqbnVtX2NvbmZpZykKLXsKLSAgICBUUkFDRSgiKEVHTERpc3BsYXkg
ZHB5ID0gMHglMC44cCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCA9IDB4JTAuOHAsICIKLSAg
ICAgICAgICAiRUdMQ29uZmlnICpjb25maWdzID0gMHglMC44cCwgRUdMaW50IGNvbmZpZ19zaXpl
ID0gJWQsIEVHTGludCAqbnVtX2NvbmZpZyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGF0
dHJpYl9saXN0LCBjb25maWdzLCBjb25maWdfc2l6ZSwgbnVtX2NvbmZpZyk7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6
RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghbnVtX2NvbmZpZykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfUEFSQU1FVEVSLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qg
RUdMaW50IGF0dHJpYkxpc3RbXSA9ICAgIHtFR0xfTk9ORX07Ci0KLSAgICAgICAgaWYgKCFhdHRy
aWJfbGlzdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXR0cmliX2xpc3QgPSBhdHRyaWJMaXN0
OwotICAgICAgICB9Ci0KLSAgICAgICAgZGlzcGxheS0+Z2V0Q29uZmlncyhjb25maWdzLCBhdHRy
aWJfbGlzdCwgY29uZmlnX3NpemUsIG51bV9jb25maWcpOwotCi0gICAgICAgIHJldHVybiBzdWNj
ZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIEVHTF9GQUxTRTsKLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsR2V0
Q29uZmlnQXR0cmliKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xpbnQgYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKQotewotICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAw
eCUwLjhwLCBFR0xDb25maWcgY29uZmlnID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVk
LCBFR0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgY29uZmlnLCBhdHRy
aWJ1dGUsIHZhbHVlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAo
IXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBFR0xfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWRpc3BsYXktPmdldENvbmZp
Z0F0dHJpYihjb25maWcsIGF0dHJpYnV0ZSwgdmFsdWUpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCBFR0xfRkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBFR0xfRkFMU0U7Ci19Ci0KLUVHTFN1
cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVH
TENvbmZpZyBjb25maWcsIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luLCBjb25zdCBFR0xpbnQgKmF0
dHJpYl9saXN0KQotewotICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xD
b25maWcgY29uZmlnID0gMHglMC44cCwgRUdMTmF0aXZlV2luZG93VHlwZSB3aW4gPSAweCUwLjhw
LCAiCi0gICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIsIGRw
eSwgY29uZmlnLCB3aW4sIGF0dHJpYl9saXN0KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsK
LQotICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICAgICAgfQotCi0gICAgICAgIEhX
TkQgd2luZG93ID0gKEhXTkQpd2luOwotCi0gICAgICAgIGlmICghSXNXaW5kb3cod2luZG93KSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTkFUSVZFX1dJTkRP
VywgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF0dHJpYl9saXN0
KQotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAoKmF0dHJpYl9saXN0ICE9IEVHTF9OT05F
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cmliX2xpc3RbMF0p
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfUkVOREVSX0JV
RkZFUjoKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJfbGlzdFsxXSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX0JBQ0tfQlVG
RkVSOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFR0xfU0lOR0xFX0JVRkZFUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7ICAgLy8gUmVuZGVyaW5nIGRp
cmVjdGx5IHRvIGZyb250IGJ1ZmZlciBub3Qgc3VwcG9ydGVkCi0gICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBFR0xfVkdfQ09M
T1JTUEFDRToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gs
IEVHTF9OT19TVVJGQUNFKTsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZP
Uk1BVDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfTUFUQ0gsIEVH
TF9OT19TVVJGQUNFKTsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChkaXNwbGF5LT5oYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2Uod2luZG93KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IChFR0xTdXJmYWNlKWRp
c3BsYXktPmNyZWF0ZVdpbmRvd1N1cmZhY2Uod2luZG93LCBjb25maWcpOwotCi0gICAgICAgIHJl
dHVybiBzdWNjZXNzKHN1cmZhY2UpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZB
Q0UpOwotICAgIH0KLQotICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLX0KLQotRUdMU3VyZmFj
ZSBfX3N0ZGNhbGwgZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoRUdMRGlzcGxheSBkcHksIEVHTENv
bmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCi17Ci0gICAgVFJBQ0UoIihF
R0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbmZpZyBjb25maWcgPSAweCUwLjhwLCBjb25z
dCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgY29uZmln
LCBhdHRyaWJfbGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYg
KCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gRUdMX05PX1NVUkZBQ0U7Ci0gICAgICAgIH0KLQotICAgICAgICBVTklNUExFTUVOVEVEKCk7
ICAgLy8gRklYTUUKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fRElTUExBWSk7Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IEVHTF9OT19TVVJGQUNFOwotfQotCi1FR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xDcmVhdGVQaXht
YXBTdXJmYWNlKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xOYXRpdmVQaXht
YXBUeXBlIHBpeG1hcCwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCkKLXsKLSAgICBUUkFDRSgi
KEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMQ29uZmlnIGNvbmZpZyA9IDB4JTAuOHAsIEVH
TE5hdGl2ZVBpeG1hcFR5cGUgcGl4bWFwID0gMHglMC44cCwgIgotICAgICAgICAgICJjb25zdCBF
R0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLCBkcHksIGNvbmZpZywgcGl4bWFwLCBhdHRy
aWJfbGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZShkaXNwbGF5LCBjb25maWcpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdM
X05PX1NVUkZBQ0U7Ci0gICAgICAgIH0KLQotICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUUKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhFR0xfTk9fRElTUExBWSk7Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VSRkFDRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9O
T19TVVJGQUNFOwotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95U3VyZmFjZShF
R0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmYWNlKQotewotICAgIFRSQUNFKCIoRUdMRGlz
cGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwKSIsIGRweSwg
c3VyZmFjZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZShkaXNwbGF5KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFM
U0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgZGlzcGxheS0+ZGVzdHJveVN1cmZhY2UoKGVnbDo6
U3VyZmFjZSopc3VyZmFjZSk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdM
X0ZBTFNFOwotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xRdWVyeVN1cmZhY2UoRUdMRGlz
cGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2
YWx1ZSkKLXsKLSAgICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFj
ZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBFR0xpbnQgKnZhbHVl
ID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgc3VyZmFjZSwgYXR0cmlidXRlLCB2YWx1ZSk7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNw
bGF5KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gKGVnbDo6U3VyZmFj
ZSopc3VyZmFjZTsKLQotICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xf
VkdfQ09MT1JTUEFDRToKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfQ09ORklHX0lEOgotICAgICAg
ICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIEVHTF9IRUlHSFQ6Ci0gICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJmYWNl
LT5nZXRIZWlnaHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX0hP
UklaT05UQUxfUkVTT0xVVElPTjoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBG
SVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xfTEFSR0VTVF9QQlVG
RkVSOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9NSVBNQVBfVEVYVFVSRToKLSAgICAgICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBFR0xfTUlQTUFQX0xFVkVMOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9NVUxUSVNB
TVBMRV9SRVNPTFZFOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9QSVhFTF9BU1BFQ1RfUkFUSU86
Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRUdMX1JFTkRFUl9CVUZGRVI6Ci0gICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgRUdMX1NXQVBfQkVIQVZJT1I6Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8g
RklYTUUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRUdMX1RFWFRVUkVfRk9S
TUFUOgotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEVHTF9URVhUVVJFX1RBUkdFVDoKLSAgICAgICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBFR0xfVkVSVElDQUxfUkVTT0xVVElPTjoKLSAgICAgICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFR0xf
V0lEVEg6Ci0gICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJmYWNlLT5nZXRXaWR0aCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxT
RSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9GQUxTRTsKLX0KLQotRUdMQm9vbGVhbiBfX3N0
ZGNhbGwgZWdsQmluZEFQSShFR0xlbnVtIGFwaSkKLXsKLSAgICBUUkFDRSgiKEVHTGVudW0gYXBp
ID0gMHglWCkiLCBhcGkpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGFwaSkK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgRUdMX09QRU5HTF9BUEk6Ci0gICAgICAgICAgY2Fz
ZSBFR0xfT1BFTlZHX0FQSToKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFN
RVRFUiwgRUdMX0ZBTFNFKTsgICAvLyBOb3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRp
b24KLSAgICAgICAgICBjYXNlIEVHTF9PUEVOR0xfRVNfQVBJOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BB
UkFNRVRFUiwgRUdMX0ZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVnbDo6c2V0Q3VycmVu
dEFQSShhcGkpOwotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKEVHTF9UUlVFKTsKLSAgICB9Ci0g
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9GQUxTRTsK
LX0KLQotRUdMZW51bSBfX3N0ZGNhbGwgZWdsUXVlcnlBUEkodm9pZCkKLXsKLSAgICBUUkFDRSgi
KCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgRUdMZW51bSBBUEkgPSBlZ2w6OmdldEN1
cnJlbnRBUEkoKTsKLQotICAgICAgICByZXR1cm4gc3VjY2VzcyhBUEkpOwotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX0ZBTFNFOwotfQot
Ci1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xXYWl0Q2xpZW50KHZvaWQpCi17Ci0gICAgVFJBQ0Uo
IigpIik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBG
SVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKDApOwotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
RUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1FR0xCb29s
ZWFuIF9fc3RkY2FsbCBlZ2xSZWxlYXNlVGhyZWFkKHZvaWQpCi17Ci0gICAgVFJBQ0UoIigpIik7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbE1ha2VDdXJyZW50KEVHTF9OT19ESVNQTEFZ
LCBFR0xfTk9fQ09OVEVYVCwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFKTsKLQotICAg
ICAgICByZXR1cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xf
RkFMU0UpOwotICAgIH0KLQotICAgIHJldHVybiBFR0xfRkFMU0U7Ci19Ci0KLUVHTFN1cmZhY2Ug
X19zdGRjYWxsIGVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKEVHTERpc3BsYXkgZHB5
LCBFR0xlbnVtIGJ1ZnR5cGUsIEVHTENsaWVudEJ1ZmZlciBidWZmZXIsIEVHTENvbmZpZyBjb25m
aWcsIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNwbGF5
IGRweSA9IDB4JTAuOHAsIEVHTGVudW0gYnVmdHlwZSA9IDB4JVgsIEVHTENsaWVudEJ1ZmZlciBi
dWZmZXIgPSAweCUwLjhwLCAiCi0gICAgICAgICAgIkVHTENvbmZpZyBjb25maWcgPSAweCUwLjhw
LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0ID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwg
YnVmdHlwZSwgYnVmZmVyLCBjb25maWcsIGF0dHJpYl9saXN0KTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBzdWNj
ZXNzKEVHTF9OT19TVVJGQUNFKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNF
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7Ci19Ci0KLUVHTEJvb2xlYW4g
X19zdGRjYWxsIGVnbFN1cmZhY2VBdHRyaWIoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSwgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50IHZhbHVlKQotewotICAgIFRSQUNFKCIoRUdM
RGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHN1cmZhY2UgPSAweCUwLjhwLCBFR0xp
bnQgYXR0cmlidXRlID0gJWQsIEVHTGludCB2YWx1ZSA9ICVkKSIsCi0gICAgICAgICAgZHB5LCBz
dXJmYWNlLCBhdHRyaWJ1dGUsIHZhbHVlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWds
OjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQot
ICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAg
IC8vIEZJWE1FCi0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX0ZBTFNFOwot
fQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xCaW5kVGV4SW1hZ2UoRUdMRGlzcGxheSBkcHks
IEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKLXsKLSAgICBUUkFDRSgiKEVHTERp
c3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0gMHglMC44cCwgRUdMaW50
IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUp
OwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
RUdMX0ZBTFNFOwotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xSZWxlYXNlVGV4SW1hZ2Uo
RUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSwgRUdMaW50IGJ1ZmZlcikKLXsKLSAg
ICBUUkFDRSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMU3VyZmFjZSBzdXJmYWNlID0g
MHglMC44cCwgRUdMaW50IGJ1ZmZlciA9ICVkKSIsIGRweSwgc3VyZmFjZSwgYnVmZmVyKTsKLQot
ICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nh
c3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXkp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwotICAgICAgICB9Ci0K
LSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0KLSAgICAgICAgcmV0dXJuIHN1
Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xT
d2FwSW50ZXJ2YWwoRUdMRGlzcGxheSBkcHksIEVHTGludCBpbnRlcnZhbCkKLXsKLSAgICBUUkFD
RSgiKEVHTERpc3BsYXkgZHB5ID0gMHglMC44cCwgRUdMaW50IGludGVydmFsID0gJWQpIiwgZHB5
LCBpbnRlcnZhbCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlz
cGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2
YWxpZGF0ZShkaXNwbGF5KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxT
RTsKLSAgICAgICAgfQotCi0gICAgICAgIGRpc3BsYXktPnNldFN3YXBJbnRlcnZhbChpbnRlcnZh
bCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1F
R0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xDcmVhdGVDb250ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xD
b25maWcgY29uZmlnLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQsIGNvbnN0IEVHTGludCAqYXR0
cmliX2xpc3QpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENv
bmZpZyBjb25maWcgPSAweCUwLjhwLCBFR0xDb250ZXh0IHNoYXJlX2NvbnRleHQgPSAweCUwLjhw
LCAiCi0gICAgICAgICAgImNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QgPSAweCUwLjhwKSIsIGRw
eSwgY29uZmlnLCBzaGFyZV9jb250ZXh0LCBhdHRyaWJfbGlzdCk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5LCBjb25maWcpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRFWFQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5jcmVhdGVDb250ZXh0KGNvbmZp
Zywgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250ZXh0KSk7Ci0KLSAgICAgICAg
cmV0dXJuIHN1Y2Nlc3MoY29udGV4dCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fQ09O
VEVYVCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9OT19DT05URVhUOwotfQotCi1FR0xCb29s
ZWFuIF9fc3RkY2FsbCBlZ2xEZXN0cm95Q29udGV4dChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4
dCBjdHgpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4JTAuOHAsIEVHTENvbnRl
eHQgY3R4ID0gMHglMC44cCkiLCBkcHksIGN0eCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7
Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjdHggPT0gRUdM
X05PX0NPTlRFWFQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0NPTlRFWFQsIEVHTF9GQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkaXNwbGF5LT5kZXN0
cm95Q29udGV4dCgoZ2w6OkNvbnRleHQqKWN0eCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3Mo
RUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1FR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xNYWtlQ3Vy
cmVudChFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBkcmF3LCBFR0xTdXJmYWNlIHJlYWQsIEVH
TENvbnRleHQgY3R4KQotewotICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBF
R0xTdXJmYWNlIGRyYXcgPSAweCUwLjhwLCBFR0xTdXJmYWNlIHJlYWQgPSAweCUwLjhwLCBFR0xD
b250ZXh0IGN0eCA9IDB4JTAuOHApIiwKLSAgICAgICAgICBkcHksIGRyYXcsIHJlYWQsIGN0eCk7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihjdHgpOwotICAgICAgICBJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgICAgICBpZiAoIWRldmlj
ZSB8fCBkZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCkgIT0gRDNEX09LKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZBTFNFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChjdHggIT0gRUdMX05PX0NPTlRFWFQgJiYgIXZhbGlk
YXRlKGRpc3BsYXksIGNvbnRleHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdM
X0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChkcmF3ICE9IEVHTF9OT19TVVJGQUNF
ICYmICF2YWxpZGF0ZShkaXNwbGF5LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihkcmF3KSkp
IHx8Ci0gICAgICAgICAgICAocmVhZCAhPSBFR0xfTk9fU1VSRkFDRSAmJiAhdmFsaWRhdGUoZGlz
cGxheSwgc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4ocmVhZCkpKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkcmF3
ICE9IHJlYWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBG
SVhNRQotICAgICAgICB9Ci0KLSAgICAgICAgZWdsOjpzZXRDdXJyZW50RGlzcGxheShkcHkpOwot
ICAgICAgICBlZ2w6OnNldEN1cnJlbnREcmF3U3VyZmFjZShkcmF3KTsKLSAgICAgICAgZWdsOjpz
ZXRDdXJyZW50UmVhZFN1cmZhY2UocmVhZCk7Ci0KLSAgICAgICAgZ2xNYWtlQ3VycmVudChjb250
ZXh0LCBkaXNwbGF5LCBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihkcmF3KSk7Ci0KLSAgICAg
ICAgcmV0dXJuIHN1Y2Nlc3MoRUdMX1RSVUUpOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZB
TFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1FR0xDb250ZXh0IF9f
c3RkY2FsbCBlZ2xHZXRDdXJyZW50Q29udGV4dCh2b2lkKQotewotICAgIFRSQUNFKCIoKSIpOwot
Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBnbEdldEN1cnJl
bnRDb250ZXh0KCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoY29udGV4dCk7Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihF
R0xfQkFEX0FMTE9DLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9O
T19DT05URVhUOwotfQotCi1FR0xTdXJmYWNlIF9fc3RkY2FsbCBlZ2xHZXRDdXJyZW50U3VyZmFj
ZShFR0xpbnQgcmVhZGRyYXcpCi17Ci0gICAgVFJBQ0UoIihFR0xpbnQgcmVhZGRyYXcgPSAlZCki
LCByZWFkZHJhdyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChyZWFkZHJhdyA9PSBF
R0xfUkVBRCkKLSAgICAgICAgewotICAgICAgICAgICAgRUdMU3VyZmFjZSByZWFkID0gZWdsOjpn
ZXRDdXJyZW50UmVhZFN1cmZhY2UoKTsKLSAgICAgICAgICAgIHJldHVybiBzdWNjZXNzKHJlYWQp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHJlYWRkcmF3ID09IEVHTF9EUkFXKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFR0xTdXJmYWNlIGRyYXcgPSBlZ2w6OmdldEN1cnJlbnREcmF3
U3VyZmFjZSgpOwotICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MoZHJhdyk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9QQVJBTUVURVIsIEVHTF9OT19TVVJGQUNFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9B
TExPQywgRUdMX05PX1NVUkZBQ0UpOwotICAgIH0KLQotICAgIHJldHVybiBFR0xfTk9fU1VSRkFD
RTsKLX0KLQotRUdMRGlzcGxheSBfX3N0ZGNhbGwgZWdsR2V0Q3VycmVudERpc3BsYXkodm9pZCkK
LXsKLSAgICBUUkFDRSgiKCkiKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgRUdMRGlzcGxh
eSBkcHkgPSBlZ2w6OmdldEN1cnJlbnREaXNwbGF5KCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nl
c3MoZHB5KTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9OT19ESVNQTEFZKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gRUdMX05PX0RJU1BMQVk7Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxsIGVn
bFF1ZXJ5Q29udGV4dChFR0xEaXNwbGF5IGRweSwgRUdMQ29udGV4dCBjdHgsIEVHTGludCBhdHRy
aWJ1dGUsIEVHTGludCAqdmFsdWUpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNwbGF5IGRweSA9IDB4
JTAuOHAsIEVHTENvbnRleHQgY3R4ID0gMHglMC44cCwgRUdMaW50IGF0dHJpYnV0ZSA9ICVkLCBF
R0xpbnQgKnZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGRweSwgY3R4LCBhdHRyaWJ1dGUs
IHZhbHVlKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5
ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKLQotICAgICAgICBpZiAoIXZhbGlk
YXRlKGRpc3BsYXkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwot
ICAgICAgICB9Ci0KLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0KLSAgICAg
ICAgcmV0dXJuIHN1Y2Nlc3MoMCk7Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfRkFMU0UpOwot
ICAgIH0KLQotICAgIHJldHVybiBFR0xfRkFMU0U7Ci19Ci0KLUVHTEJvb2xlYW4gX19zdGRjYWxs
IGVnbFdhaXRHTCh2b2lkKQotewotICAgIFRSQUNFKCIoKSIpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLQotICAgICAgICByZXR1cm4gc3Vj
Y2VzcygwKTsKLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIEVHTF9GQUxTRTsKLX0KLQotRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsV2FpdE5hdGl2
ZShFR0xpbnQgZW5naW5lKQotewotICAgIFRSQUNFKCIoRUdMaW50IGVuZ2luZSA9ICVkKSIsIGVu
Z2luZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBG
SVhNRQotCi0gICAgICAgIHJldHVybiBzdWNjZXNzKDApOwotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywg
RUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1FR0xCb29s
ZWFuIF9fc3RkY2FsbCBlZ2xTd2FwQnVmZmVycyhFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBz
dXJmYWNlKQotewotICAgIFRSQUNFKCIoRUdMRGlzcGxheSBkcHkgPSAweCUwLjhwLCBFR0xTdXJm
YWNlIHN1cmZhY2UgPSAweCUwLjhwKSIsIGRweSwgc3VyZmFjZSk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChz
dXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9TVVJGQUNFLCBFR0xfRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZWdsOjpTdXJmYWNlICplZ2xTdXJmYWNlID0gKGVnbDo6U3VyZmFjZSopc3VyZmFjZTsKLQotICAg
ICAgICBpZiAoZWdsU3VyZmFjZS0+c3dhcCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gc3VjY2VzcyhFR0xfVFJVRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVH
TF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVHTF9GQUxTRTsKLX0KLQotRUdMQm9vbGVh
biBfX3N0ZGNhbGwgZWdsQ29weUJ1ZmZlcnMoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3Vy
ZmFjZSwgRUdMTmF0aXZlUGl4bWFwVHlwZSB0YXJnZXQpCi17Ci0gICAgVFJBQ0UoIihFR0xEaXNw
bGF5IGRweSA9IDB4JTAuOHAsIEVHTFN1cmZhY2Ugc3VyZmFjZSA9IDB4JTAuOHAsIEVHTE5hdGl2
ZVBpeG1hcFR5cGUgdGFyZ2V0ID0gMHglMC44cCkiLCBkcHksIHN1cmZhY2UsIHRhcmdldCk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19j
YXN0PGVnbDo6RGlzcGxheSo+KGRweSk7Ci0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZShkaXNwbGF5
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEVHTF9GQUxTRTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotCi0gICAgICAgIHJldHVybiBz
dWNjZXNzKDApOwotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX0ZBTFNFKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gRUdMX0ZBTFNFOwotfQotCi1fX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBv
aW50ZXJUeXBlIF9fc3RkY2FsbCBlZ2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFt
ZSkKLXsKLSAgICBUUkFDRSgiKGNvbnN0IGNoYXIgKnByb2NuYW1lID0gXCIlc1wiKSIsIHByb2Nu
YW1lKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3RydWN0IEV4dGVuc2lvbgotICAgICAg
ICB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lOwotICAgICAgICAgICAgX19lZ2xNdXN0
Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBhZGRyZXNzOwotICAgICAgICB9OwotCi0g
ICAgICAgIHN0YXRpYyBjb25zdCBFeHRlbnNpb24gZWdsRXh0ZW5zaW9uc1tdID0KLSAgICAgICAg
ewotICAgICAgICAgICAgeyIiLCBOVUxMfSwKLSAgICAgICAgfTsKLQotICAgICAgICBmb3IgKGlu
dCBleHQgPSAwOyBleHQgPCBzaXplb2YoZWdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9u
KTsgZXh0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdHJjbXAocHJvY25hbWUsIGVn
bEV4dGVuc2lvbnNbZXh0XS5uYW1lKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSllZ2xF
eHRlbnNpb25zW2V4dF0uYWRkcmVzczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBnbEdldFByb2NBZGRyZXNzKHByb2NuYW1lKTsKLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKU5VTEwpOwotICAg
IH0KLQotICAgIHJldHVybiBOVUxMOwotfQotfQpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9saWJF
R0wuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLmRlZgkocmV2aXNp
b24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC5kZWYJKHdvcmtpbmcgY29weSkK
QEAgLTEsMzYgKzAsMCBAQAotTElCUkFSWQlsaWJFR0wKLUVYUE9SVFMKLQllZ2xCaW5kQVBJICAg
ICAgICAgICAgICAgICAgICAgIEAxNAotCWVnbEJpbmRUZXhJbWFnZSAgICAgICAgICAgICAgICAg
QDIwCi0JZWdsQ2hvb3NlQ29uZmlnICAgICAgICAgICAgICAgICBANwotCWVnbENvcHlCdWZmZXJz
ICAgICAgICAgICAgICAgICAgQDMzCi0JZWdsQ3JlYXRlQ29udGV4dCAgICAgICAgICAgICAgICBA
MjMKLQllZ2xDcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlciAgICAgICAgQDE4Ci0JZWdsQ3Jl
YXRlUGJ1ZmZlclN1cmZhY2UgICAgICAgICBAMTAKLQllZ2xDcmVhdGVQaXhtYXBTdXJmYWNlICAg
ICAgICAgIEAxMQotCWVnbENyZWF0ZVdpbmRvd1N1cmZhY2UgICAgICAgICAgQDkKLQllZ2xEZXN0
cm95Q29udGV4dCAgICAgICAgICAgICAgIEAyNAotCWVnbERlc3Ryb3lTdXJmYWNlICAgICAgICAg
ICAgICAgQDEyCi0JZWdsR2V0Q29uZmlnQXR0cmliICAgICAgICAgICAgICBAOAotCWVnbEdldENv
bmZpZ3MgICAgICAgICAgICAgICAgICAgQDYKLQllZ2xHZXRDdXJyZW50Q29udGV4dCAgICAgICAg
ICAgIEAyNgotCWVnbEdldEN1cnJlbnREaXNwbGF5ICAgICAgICAgICAgQDI4Ci0JZWdsR2V0Q3Vy
cmVudFN1cmZhY2UgICAgICAgICAgICBAMjcKLQllZ2xHZXREaXNwbGF5ICAgICAgICAgICAgICAg
ICAgIEAyCi0JZWdsR2V0RXJyb3IgICAgICAgICAgICAgICAgICAgICBAMQotCWVnbEdldFByb2NB
ZGRyZXNzICAgICAgICAgICAgICAgQDM0Ci0JZWdsSW5pdGlhbGl6ZSAgICAgICAgICAgICAgICAg
ICBAMwotCWVnbE1ha2VDdXJyZW50ICAgICAgICAgICAgICAgICAgQDI1Ci0JZWdsUXVlcnlBUEkg
ICAgICAgICAgICAgICAgICAgICBAMTUKLQllZ2xRdWVyeUNvbnRleHQgICAgICAgICAgICAgICAg
IEAyOQotCWVnbFF1ZXJ5U3RyaW5nICAgICAgICAgICAgICAgICAgQDUKLQllZ2xRdWVyeVN1cmZh
Y2UgICAgICAgICAgICAgICAgIEAxMwotCWVnbFJlbGVhc2VUZXhJbWFnZSAgICAgICAgICAgICAg
QDIxCi0JZWdsUmVsZWFzZVRocmVhZCAgICAgICAgICAgICAgICBAMTcKLQllZ2xTdXJmYWNlQXR0
cmliICAgICAgICAgICAgICAgIEAxOQotCWVnbFN3YXBCdWZmZXJzICAgICAgICAgICAgICAgICAg
QDMyCi0JZWdsU3dhcEludGVydmFsICAgICAgICAgICAgICAgICBAMjIKLQllZ2xUZXJtaW5hdGUg
ICAgICAgICAgICAgICAgICAgIEA0Ci0JZWdsV2FpdENsaWVudCAgICAgICAgICAgICAgICAgICBA
MTYKLQllZ2xXYWl0R0wgICAgICAgICAgICAgICAgICAgICAgIEAzMAotCWVnbFdhaXROYXRpdmUg
ICAgICAgICAgICAgICAgICAgQDMxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
QU5HTEUvc3JjL2xpYkVHTC9saWJFR0wudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9s
aWJFR0wvbGliRUdMLnZjcHJvagkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliRUdM
L2xpYkVHTC52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsMjUyICswLDAgQEAKLTw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgotPFZpc3VhbFN0dWRpb1Byb2pl
Y3QKLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKLQlWZXJzaW9uPSI5LjAwIgotCU5hbWU9Imxp
YkVHTCIKLQlQcm9qZWN0R1VJRD0ie0U3NDZGQ0E5LTY0QzMtNDMzRS04NUU4LTlBNUE2N0FCN0VE
Nn0iCi0JUm9vdE5hbWVzcGFjZT0ibGliRUdMIgotCUtleXdvcmQ9IldpbjMyUHJvaiIKLQlUYXJn
ZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiCi0JPgotCTxQbGF0Zm9ybXM+Ci0JCTxQbGF0Zm9y
bQotCQkJTmFtZT0iV2luMzIiCi0JCS8+Ci0JPC9QbGF0Zm9ybXM+Ci0JPFRvb2xGaWxlcz4KLQk8
L1Rvb2xGaWxlcz4KLQk8Q29uZmlndXJhdGlvbnM+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1l
PSJEZWJ1Z3xXaW4zMiIKLQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZp
Z3VyYXRpb25OYW1lKSIKLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9u
TmFtZSkiCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJ
CT4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8
VG9vbAotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5h
bWU9IlZDTUlETFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgotCQkJCU9wdGltaXphdGlvbj0iMCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9y
aWVzPSIkKFByb2plY3REaXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJ
UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJ
QkVHTF9FWFBPUlRTO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWCIKLQkJCQlNaW5p
bWFsUmVidWlsZD0idHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCi0JCQkJUnVudGlt
ZUxpYnJhcnk9IjEiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xl
dmVsPSIzIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJ
RGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZD
TWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJl
TGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIK
LQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkeGd1aWQubGliIgotCQkJCUxpbmtJbmNyZW1l
bnRhbD0iMiIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiIKLQkJCQlHZW5l
cmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJU3ViU3lzdGVtPSIyIgotCQkJCVJhbmRv
bWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKLQkJ
CQlUYXJnZXRNYWNoaW5lPSIxIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBTGlua1Rv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKLQkJCS8+Ci0J
CQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlO
YW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNGeENvcFRv
b2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgotCQkJCUNvbW1hbmRM
aW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxs
aWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91
dERpcilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29u
ZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXREaXIpXGxp
YkVHTC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZpZ3VyYXRp
b25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsmI3gwQTsiCi0JCQkvPgot
CQk8L0NvbmZpZ3VyYXRpb24+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJSZWxlYXNlfFdp
bjMyIgotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5h
bWUpIgotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKLQkJ
CUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJQ2hhcmFjdGVyU2V0PSIxIgotCQkJV2hvbGVQcm9n
cmFtT3B0aW1pemF0aW9uPSIxIgotCQkJPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1ByZUJ1aWxk
RXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgotCQkJ
Lz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgot
CQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJT3B0aW1pemF0aW9uPSIyIgotCQkJCUlu
bGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIyIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3Jp
ZXM9IiQoUHJvamVjdERpcikvLi47ICQoUHJvamVjdERpcikvLi4vLi4vaW5jbHVkZSIKLQkJCQlQ
cmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TElC
RUdMX0VYUE9SVFM7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO05PTUlOTUFYO19TRUNVUkVfU0NM
PTAiCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAi
Ci0JCQkJV2FybmluZ0xldmVsPSIzIgotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVt
cz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKLQkJCS8+Ci0JCQk8VG9v
bAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxU
b29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAot
CQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkeGd1aWQubGliIgot
CQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKLQkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdM
LmRlZiIKLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCi0JCQkJU3ViU3lzdGVt
PSIyIgotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiIKLQkJCQlFbmFibGVDT01EQVRGb2xkaW5n
PSIyIgotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSIKLQkJCQlEYXRhRXhlY3V0aW9uUHJl
dmVudGlvbj0iMCIKLQkJCQlUYXJnZXRNYWNoaW5lPSIxIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNBTGlua1Rvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01hbmlmZXN0
VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNGeENvcFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FwcFZlcmlm
aWVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29s
IgotCQkJCUNvbW1hbmRMaW5lPSJAZWNobyBvbiYjeDBEOyYjeDBBO21rZGlyICZxdW90OyQoUHJv
amVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7
Y29weSAmcXVvdDskKE91dERpcilcbGliRUdMLmRsbCZxdW90OyAmcXVvdDskKFByb2plY3REaXIp
Li5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1
b3Q7JChPdXREaXIpXGxpYkVHTC5saWImcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxp
YlwkKENvbmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtAZWNobyBvZmYmI3gwRDsm
I3gwQTsiCi0JCQkvPgotCQk8L0NvbmZpZ3VyYXRpb24+Ci0JPC9Db25maWd1cmF0aW9ucz4KLQk8
UmVmZXJlbmNlcz4KLQk8L1JlZmVyZW5jZXM+Ci0JPEZpbGVzPgotCQk8RmlsdGVyCi0JCQlOYW1l
PSJTb3VyY2UgRmlsZXMiCi0JCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7
YmF0O2FzbTthc214IgotCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1B
MDY2LTJBMzJENzUyQTJGRn0iCi0JCQk+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxD
b25maWcuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxDb21tb25cZGVidWcuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuXERpc3BsYXkuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXGxpYkVHTC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cU3VyZmFjZS5jcHAiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQk8L0ZpbHRlcj4KLQkJPEZpbHRlcgotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgotCQkJ
RmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7
OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKLQkJCT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuXENvbmZpZy5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXERpc3BsYXkuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxFR0xcZWdsLmgiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGluY2x1ZGVcRUdM
XGVnbGV4dC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxpbmNsdWRlXEVHTFxlZ2xwbGF0Zm9ybS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXG1haW4uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxTdXJmYWNlLmgiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQk8L0ZpbHRlcj4KLQkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJFR0wuZGVmIgot
CQkJPgotCQk8L0ZpbGU+Ci0JPC9GaWxlcz4KLQk8R2xvYmFscz4KLQk8L0dsb2JhbHM+Ci08L1Zp
c3VhbFN0dWRpb1Byb2plY3Q+CkluZGV4OiBBTkdMRS9zcmMvbGliRUdML21haW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbWFpbi5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysg
QU5HTEUvc3JjL2xpYkVHTC9tYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjEgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5jcHA6IERMTCBlbnRyeSBwb2ludCBhbmQg
bWFuYWdlbWVudCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KLQotI2luY2x1ZGUgImxpYkVHTC9tYWlu
LmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotc3RhdGljIERXT1JEIGN1cnJlbnRU
TFMgPSBUTFNfT1VUX09GX0lOREVYRVM7Ci0KLUJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNF
IGluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCkKLXsKLSAgICBzd2l0Y2gg
KHJlYXNvbikKLSAgICB7Ci0gICAgICBjYXNlIERMTF9QUk9DRVNTX0FUVEFDSDoKLSAgICAgICAg
ewotICAgICAgICAgICAgI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgICAgICBGSUxFICpkZWJ1
ZyA9IGZvcGVuKCJkZWJ1Zy50eHQiLCAicnQiKTsKLQotICAgICAgICAgICAgICAgIGlmIChkZWJ1
ZykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZjbG9zZShkZWJ1Zyk7
Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnID0gZm9wZW4oImRlYnVnLnR4dCIsICJ3dCIpOyAg
IC8vIEVyYXNlCi0gICAgICAgICAgICAgICAgICAgIGZjbG9zZShkZWJ1Zyk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgI2VuZGlmCi0KLSAgICAgICAgICAgIGN1cnJlbnRUTFMgPSBU
bHNBbGxvYygpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09GX0lO
REVYRVMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5pdGlh
bGl6ZSBpbmRleAotICAgICAgY2FzZSBETExfVEhSRUFEX0FUVEFDSDoKLSAgICAgICAgewotICAg
ICAgICAgICAgZWdsOjpDdXJyZW50ICpjdXJyZW50ID0gKGVnbDo6Q3VycmVudCopTG9jYWxBbGxv
YyhMUFRSLCBzaXplb2YoZWdsOjpDdXJyZW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMs
IGN1cnJlbnQpOwotCi0gICAgICAgICAgICAgICAgY3VycmVudC0+ZXJyb3IgPSBFR0xfU1VDQ0VT
UzsKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5BUEkgPSBFR0xfT1BFTkdMX0VTX0FQSTsKLSAg
ICAgICAgICAgICAgICBjdXJyZW50LT5kaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7Ci0gICAgICAg
ICAgICAgICAgY3VycmVudC0+ZHJhd1N1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsKLSAgICAgICAg
ICAgICAgICBjdXJyZW50LT5yZWFkU3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBETExfVEhSRUFEX0RF
VEFDSDoKLSAgICAgICAgewotICAgICAgICAgICAgdm9pZCAqY3VycmVudCA9IFRsc0dldFZhbHVl
KGN1cnJlbnRUTFMpOwotCi0gICAgICAgICAgICBpZiAoY3VycmVudCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBMb2NhbEZyZWUoKEhMT0NBTCljdXJyZW50KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRExMX1BST0NFU1NfREVU
QUNIOgotICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpjdXJyZW50ID0gVGxzR2V0VmFsdWUo
Y3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKWN1cnJlbnQpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBUbHNGcmVlKGN1cnJlbnRUTFMpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0
dXJuIFRSVUU7Ci19Ci0KLW5hbWVzcGFjZSBlZ2wKLXsKLXZvaWQgc2V0Q3VycmVudEVycm9yKEVH
TGludCBlcnJvcikKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1cnJlbnQqKVRsc0dldFZh
bHVlKGN1cnJlbnRUTFMpOwotCi0gICAgY3VycmVudC0+ZXJyb3IgPSBlcnJvcjsKLX0KLQotRUdM
aW50IGdldEN1cnJlbnRFcnJvcigpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50
KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIHJldHVybiBjdXJyZW50LT5lcnJvcjsK
LX0KLQotdm9pZCBzZXRDdXJyZW50QVBJKEVHTGVudW0gQVBJKQotewotICAgIEN1cnJlbnQgKmN1
cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50
LT5BUEkgPSBBUEk7Ci19Ci0KLUVHTGVudW0gZ2V0Q3VycmVudEFQSSgpCi17Ci0gICAgQ3VycmVu
dCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgIHJl
dHVybiBjdXJyZW50LT5BUEk7Ci19Ci0KLXZvaWQgc2V0Q3VycmVudERpc3BsYXkoRUdMRGlzcGxh
eSBkcHkpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShj
dXJyZW50VExTKTsKLQotICAgIGN1cnJlbnQtPmRpc3BsYXkgPSBkcHk7Ci19Ci0KLUVHTERpc3Bs
YXkgZ2V0Q3VycmVudERpc3BsYXkoKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVu
dCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4gY3VycmVudC0+ZGlzcGxh
eTsKLX0KLQotdm9pZCBzZXRDdXJyZW50RHJhd1N1cmZhY2UoRUdMU3VyZmFjZSBzdXJmYWNlKQot
ewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRM
Uyk7Ci0KLSAgICBjdXJyZW50LT5kcmF3U3VyZmFjZSA9IHN1cmZhY2U7Ci19Ci0KLUVHTFN1cmZh
Y2UgZ2V0Q3VycmVudERyYXdTdXJmYWNlKCkKLXsKLSAgICBDdXJyZW50ICpjdXJyZW50ID0gKEN1
cnJlbnQqKVRsc0dldFZhbHVlKGN1cnJlbnRUTFMpOwotCi0gICAgcmV0dXJuIGN1cnJlbnQtPmRy
YXdTdXJmYWNlOwotfQotCi12b2lkIHNldEN1cnJlbnRSZWFkU3VyZmFjZShFR0xTdXJmYWNlIHN1
cmZhY2UpCi17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShj
dXJyZW50VExTKTsKLQotICAgIGN1cnJlbnQtPnJlYWRTdXJmYWNlID0gc3VyZmFjZTsKLX0KLQot
RUdMU3VyZmFjZSBnZXRDdXJyZW50UmVhZFN1cmZhY2UoKQotewotICAgIEN1cnJlbnQgKmN1cnJl
bnQgPSAoQ3VycmVudCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4gY3Vy
cmVudC0+cmVhZFN1cmZhY2U7Ci19Ci19Ci0KLXZvaWQgZXJyb3IoRUdMaW50IGVycm9yQ29kZSkK
LXsKLSAgICBlZ2w6OnNldEN1cnJlbnRFcnJvcihlcnJvckNvZGUpOwotfQpJbmRleDogQU5HTEUv
c3JjL2xpYkVHTC9tYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9tYWluLmgJ
KHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2xpYkVHTC9tYWluLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNjAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5oOiBNYW5h
Z2VtZW50IG9mIHRocmVhZC1sb2NhbCBkYXRhLgotCi0jaWZuZGVmIExJQkVHTF9NQUlOX0hfCi0j
ZGVmaW5lIExJQkVHTF9NQUlOX0hfCi0KLSNkZWZpbmUgRUdMQVBJCi0jaW5jbHVkZSA8RUdML2Vn
bC5oPgotCi1uYW1lc3BhY2UgZWdsCi17Ci1zdHJ1Y3QgQ3VycmVudAotewotICAgIEVHTGludCBl
cnJvcjsKLSAgICBFR0xlbnVtIEFQSTsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXk7Ci0gICAgRUdM
U3VyZmFjZSBkcmF3U3VyZmFjZTsKLSAgICBFR0xTdXJmYWNlIHJlYWRTdXJmYWNlOwotfTsKLQot
dm9pZCBzZXRDdXJyZW50RXJyb3IoRUdMaW50IGVycm9yKTsKLUVHTGludCBnZXRDdXJyZW50RXJy
b3IoKTsKLQotdm9pZCBzZXRDdXJyZW50QVBJKEVHTGVudW0gQVBJKTsKLUVHTGVudW0gZ2V0Q3Vy
cmVudEFQSSgpOwotCi12b2lkIHNldEN1cnJlbnREaXNwbGF5KEVHTERpc3BsYXkgZHB5KTsKLUVH
TERpc3BsYXkgZ2V0Q3VycmVudERpc3BsYXkoKTsKLQotdm9pZCBzZXRDdXJyZW50RHJhd1N1cmZh
Y2UoRUdMU3VyZmFjZSBzdXJmYWNlKTsKLUVHTFN1cmZhY2UgZ2V0Q3VycmVudERyYXdTdXJmYWNl
KCk7Ci0KLXZvaWQgc2V0Q3VycmVudFJlYWRTdXJmYWNlKEVHTFN1cmZhY2Ugc3VyZmFjZSk7Ci1F
R0xTdXJmYWNlIGdldEN1cnJlbnRSZWFkU3VyZmFjZSgpOwotfQotCi12b2lkIGVycm9yKEVHTGlu
dCBlcnJvckNvZGUpOwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotY29uc3QgVCAmZXJyb3IoRUdMaW50
IGVycm9yQ29kZSwgY29uc3QgVCAmcmV0dXJuVmFsdWUpCi17Ci0gICAgZXJyb3IoZXJyb3JDb2Rl
KTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4KLWNv
bnN0IFQgJnN1Y2Nlc3MoY29uc3QgVCAmcmV0dXJuVmFsdWUpCi17Ci0gICAgZWdsOjpzZXRDdXJy
ZW50RXJyb3IoRUdMX1NVQ0NFU1MpOwotCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi0j
ZW5kaWYgIC8vIExJQkVHTF9NQUlOX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5jcHAJKHJldmlzaW9u
IDc0NjU4KQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1NjYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gQmxpdC5jcHA6IFN1cmZh
Y2UgY29weSB1dGlsaXR5IGNsYXNzLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCIKLQot
I2luY2x1ZGUgPGQzZHg5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0KLW5hbWVzcGFjZQotewotLy8gU3RhbmRhcmQgVmVydGV4
IFNoYWRlcgotLy8gSW5wdXQgMCBpcyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbi4KLS8vIE91dHB1
dHMgdGhlIGhvbW9nZW5vdXMgcG9zaXRpb24gYXMtaXMuCi0vLyBPdXRwdXRzIGEgdGV4IGNvb3Jk
IHdpdGggKDAsMCkgaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kICgx
LDEpIGluIHRoZSBib3R0b20gcmlnaHQuCi0vLyBDMC5YIG11c3QgYmUgbmVnYXRpdmUgaGFsZi1w
aXhlbCB3aWR0aCwgQzAuWSBtdXN0IGJlIGhhbGYtcGl4ZWwgaGVpZ2h0LiBDMC5aVyBtdXN0IGJl
IDAuCi1jb25zdCBjaGFyIHN0YW5kYXJkdnNbXSA9Ci0ic3RydWN0IFZTX09VVFBVVFxuIgotIntc
biIKLSIgICAgZmxvYXQ0IHBvc2l0aW9uIDogUE9TSVRJT047XG4iCi0iICAgIGZsb2F0NCB0ZXhj
b29yZCA6IFRFWENPT1JEMDtcbiIKLSJ9O1xuIgotIlxuIgotInVuaWZvcm0gZmxvYXQ0IGhhbGZQ
aXhlbFNpemUgOiBjMDtcbiIKLSJcbiIKLSJWU19PVVRQVVQgbWFpbihpbiBmbG9hdDQgcG9zaXRp
b24gOiBQT1NJVElPTilcbiIKLSJ7XG4iCi0iICAgIFZTX09VVFBVVCBPdXQ7XG4iCi0iXG4iCi0i
ICAgIE91dC5wb3NpdGlvbiA9IHBvc2l0aW9uICsgaGFsZlBpeGVsU2l6ZTtcbiIKLSIgICAgT3V0
LnRleGNvb3JkID0gcG9zaXRpb24gKiBmbG9hdDQoMC41LCAtMC41LCAxLjAsIDEuMCkgKyBmbG9h
dDQoMC41LCAwLjUsIDAsIDApO1xuIgotIlxuIgotIiAgICByZXR1cm4gT3V0O1xuIgotIn1cbiI7
Ci0KLS8vIEZsaXAgWSBWZXJ0ZXggU2hhZGVyCi0vLyBJbnB1dCAwIGlzIHRoZSBob21vZ2Vub3Vz
IHBvc2l0aW9uLgotLy8gT3V0cHV0cyB0aGUgaG9tb2dlbm91cyBwb3NpdGlvbiBhcy1pcy4KLS8v
IE91dHB1dHMgYSB0ZXggY29vcmQgd2l0aCAoMCwxKSBpbiB0aGUgdXBwZXItbGVmdCBjb3JuZXIg
b2YgdGhlIHNjcmVlbiBhbmQgKDEsMCkgaW4gdGhlIGJvdHRvbSByaWdodC4KLS8vIEMwLlhZIG11
c3QgYmUgdGhlIGhhbGYtcGl4ZWwgd2lkdGggYW5kIGhlaWdodC4gQzAuWlcgbXVzdCBiZSAwLgot
Y29uc3QgY2hhciBmbGlweXZzW10gPQotInN0cnVjdCBWU19PVVRQVVRcbiIKLSJ7XG4iCi0iICAg
IGZsb2F0NCBwb3NpdGlvbiA6IFBPU0lUSU9OO1xuIgotIiAgICBmbG9hdDQgdGV4Y29vcmQgOiBU
RVhDT09SRDA7XG4iCi0ifTtcbiIKLSJcbiIKLSJ1bmlmb3JtIGZsb2F0NCBoYWxmUGl4ZWxTaXpl
IDogYzA7XG4iCi0iXG4iCi0iVlNfT1VUUFVUIG1haW4oaW4gZmxvYXQ0IHBvc2l0aW9uIDogUE9T
SVRJT04pXG4iCi0ie1xuIgotIiAgICBWU19PVVRQVVQgT3V0O1xuIgotIlxuIgotIiAgICBPdXQu
cG9zaXRpb24gPSBwb3NpdGlvbiArIGhhbGZQaXhlbFNpemU7XG4iCi0iICAgIE91dC50ZXhjb29y
ZCA9IHBvc2l0aW9uICogZmxvYXQ0KDAuNSwgMC41LCAxLjAsIDEuMCkgKyBmbG9hdDQoMC41LCAw
LjUsIDAsIDApO1xuIgotIlxuIgotIiAgICByZXR1cm4gT3V0O1xuIgotIn1cbiI7Ci0KLS8vIFBh
c3N0aHJvdWdoIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyB0ZXh0dXJlIDAgc2FtcGxlZCBhdCB0
ZXhjb29yZCAwLgotY29uc3QgY2hhciBwYXNzdGhyb3VnaHBzW10gPQotInNhbXBsZXIyRCB0ZXgg
OiBzMDtcbiIKLSJcbiIKLSJmbG9hdDQgbWFpbihmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDAp
IDogQ09MT1JcbiIKLSJ7XG4iCi0iCXJldHVybiB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTtcbiIK
LSJ9XG4iOwotCi0vLyBMdW1pbmFuY2UgQ29udmVyc2lvbiBQaXhlbCBTaGFkZXIKLS8vIE91dHB1
dHMgc2FtcGxlKHRleDAsIHRjMCkucnJyYS4KLS8vIEZvciBMQSBvdXRwdXQgKHBhc3MgQSkgc2V0
IEMwLlggPSAxLCBDMC5ZID0gMC4KLS8vIEZvciBMIG91dHB1dCAoQSA9IDEpIHNldCBDMC5YID0g
MCwgQzAuWSA9IDEuCi1jb25zdCBjaGFyIGx1bWluYW5jZXBzW10gPQotInNhbXBsZXIyRCB0ZXgg
OiBzMDtcbiIKLSJcbiIKLSJ1bmlmb3JtIGZsb2F0NCBtb2RlIDogYzA7XG4iCi0iXG4iCi0iZmxv
YXQ0IG1haW4oZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SXG4iCi0ie1xuIgot
IglmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7XG4iCi0iCXRtcC53ID0gdG1w
LncgKiBtb2RlLnggKyBtb2RlLnk7XG4iCi0iCXJldHVybiB0bXAueHh4dztcbiIKLSJ9XG4iOwot
Ci0vLyBSR0IvQSBDb21wb25lbnQgTWFzayBQaXhlbCBTaGFkZXIKLS8vIE91dHB1dHMgc2FtcGxl
KHRleDAsIHRjMCkgd2l0aCBvcHRpb25zIHRvIGZvcmNlIFJHQiA9IDAgYW5kL29yIEEgPSAxLgot
Ly8gVG8gZm9yY2UgUkdCID0gMCwgc2V0IEMwLlggPSAwLCBvdGhlcndpc2UgQzAuWCA9IDEuCi0v
LyBUbyBmb3JjZSBBID0gMSwgc2V0IEMwLlogPSAwLCBDMC5XID0gMSwgb3RoZXJ3aXNlIEMwLlog
PSAxLCBDMC5XID0gMC4KLWNvbnN0IGNoYXIgY29tcG9uZW50bWFza3BzW10gPQotInNhbXBsZXIy
RCB0ZXggOiBzMDtcbiIKLSJcbiIKLSJ1bmlmb3JtIGZsb2F0NCBtb2RlIDogYzA7XG4iCi0iXG4i
Ci0iZmxvYXQ0IG1haW4oZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SXG4iCi0i
e1xuIgotIglmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7XG4iCi0iCXRtcC54
eXogPSB0bXAueHl6ICogbW9kZS54O1xuIgotIgl0bXAudyA9IHRtcC53ICogbW9kZS56ICsgbW9k
ZS53O1xuIgotIglyZXR1cm4gdG1wO1xuIgotIn1cbiI7Ci0KLX0KLQotbmFtZXNwYWNlIGdsCi17
Ci0KLWNvbnN0IGNoYXIgKiBjb25zdCBCbGl0OjptU2hhZGVyU291cmNlW10gPQotewotICAgIHN0
YW5kYXJkdnMsCi0gICAgZmxpcHl2cywKLSAgICBwYXNzdGhyb3VnaHBzLAotICAgIGx1bWluYW5j
ZXBzLAotICAgIGNvbXBvbmVudG1hc2twcwotfTsKLQotQmxpdDo6QmxpdChDb250ZXh0ICpjb250
ZXh0KQotICA6IG1Db250ZXh0KGNvbnRleHQpLCBtUXVhZFZlcnRleEJ1ZmZlcihOVUxMKSwgbVF1
YWRWZXJ0ZXhEZWNsYXJhdGlvbihOVUxMKSwgbVNhdmVkUmVuZGVyVGFyZ2V0KE5VTEwpLCBtU2F2
ZWREZXB0aFN0ZW5jaWwoTlVMTCksIG1TYXZlZFN0YXRlQmxvY2soTlVMTCkKLXsKLSAgICBpbml0
R2VvbWV0cnkoKTsKLSAgICBtZW1zZXQobUNvbXBpbGVkU2hhZGVycywgMCwgc2l6ZW9mKG1Db21w
aWxlZFNoYWRlcnMpKTsKLX0KLQotQmxpdDo6fkJsaXQoKQotewotICAgIGlmIChtU2F2ZWRTdGF0
ZUJsb2NrKSBtU2F2ZWRTdGF0ZUJsb2NrLT5SZWxlYXNlKCk7Ci0gICAgaWYgKG1RdWFkVmVydGV4
QnVmZmVyKSBtUXVhZFZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgIGlmIChtUXVhZFZlcnRl
eERlY2xhcmF0aW9uKSBtUXVhZFZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IFNIQURFUl9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAgaWYg
KG1Db21waWxlZFNoYWRlcnNbaV0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1Db21waWxlZFNo
YWRlcnNbaV0tPlJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBCbGl0Ojpp
bml0R2VvbWV0cnkoKQotewotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBxdWFkW10gPQotICAgIHsK
LSAgICAgICAgLTEsIC0xLAotICAgICAgICAtMSwgIDEsCi0gICAgICAgICAxLCAtMSwKLSAgICAg
ICAgIDEsICAxCi0gICAgfTsKLQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERl
dmljZSgpOwotCi0gICAgSFJFU1VMVCBociA9IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNp
emVvZihxdWFkKSwgRDNEVVNBR0VfV1JJVEVPTkxZLCAwLCBEM0RQT09MX0RFRkFVTFQsICZtUXVh
ZFZlcnRleEJ1ZmZlciwgTlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9G
TUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LQotICAgIHZvaWQgKmxvY2tQdHI7Ci0gICAgbVF1YWRWZXJ0ZXhCdWZmZXItPkxvY2soMCwgMCwg
JmxvY2tQdHIsIDApOwotICAgIG1lbWNweShsb2NrUHRyLCBxdWFkLCBzaXplb2YocXVhZCkpOwot
ICAgIG1RdWFkVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgIHN0YXRpYyBjb25zdCBEM0RW
RVJURVhFTEVNRU5UOSBlbGVtZW50c1tdID0KLSAgICB7Ci0gICAgICAgIHsgMCwgMCwgRDNEREVD
TFRZUEVfRkxPQVQyLCBEM0RERUNMTUVUSE9EX0RFRkFVTFQsIEQzRERFQ0xVU0FHRV9QT1NJVElP
TiwgMCB9LAotICAgICAgICBEM0RERUNMX0VORCgpCi0gICAgfTsKLQotICAgIGhyID0gZGV2aWNl
LT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJm1RdWFkVmVydGV4RGVjbGFyYXRp
b24pOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGhyID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgRDNEU2hhZGVyVHlwZT4KLWJvb2wgQmxpdDo6c2V0U2hhZGVyKFNoYWRlcklkIHNvdXJjZSwg
Y29uc3QgY2hhciAqcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgKFdJTkFQ
SSBJRGlyZWN0M0REZXZpY2U5OjoqY3JlYXRlU2hhZGVyKShjb25zdCBEV09SRCAqLCBEM0RTaGFk
ZXJUeXBlKiopLAotICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3Qz
RERldmljZTk6OipzZXRTaGFkZXIpKEQzRFNoYWRlclR5cGUqKSkKLXsKLSAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEQzRFNoYWRlclR5cGUgKnNoYWRl
cjsKLQotICAgIGlmIChtQ29tcGlsZWRTaGFkZXJzW3NvdXJjZV0gIT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIHNoYWRlciA9IHN0YXRpY19jYXN0PEQzRFNoYWRlclR5cGUqPihtQ29tcGlsZWRTaGFk
ZXJzW3NvdXJjZV0pOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBJRDNEWEJ1ZmZl
ciAqc2hhZGVyQ29kZTsKLSAgICAgICAgSFJFU1VMVCBociA9IEQzRFhDb21waWxlU2hhZGVyKG1T
aGFkZXJTb3VyY2Vbc291cmNlXSwgc3RybGVuKG1TaGFkZXJTb3VyY2Vbc291cmNlXSksIE5VTEws
IE5VTEwsICJtYWluIiwgcHJvZmlsZSwgMCwgJnNoYWRlckNvZGUsIE5VTEwsIE5VTEwpOwotCi0g
ICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkZhaWxl
ZCB0byBjb21waWxlICVzIHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24gJWQsIGVycm9yIDB4JTA4
WC4iLCBwcm9maWxlLCAoaW50KXNvdXJjZSwgaHIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaHIgPSAoZGV2aWNlLT4qY3JlYXRlU2hhZGVyKShzdGF0
aWNfY2FzdDxjb25zdCBEV09SRCo+KHNoYWRlckNvZGUtPkdldEJ1ZmZlclBvaW50ZXIoKSksICZz
aGFkZXIpOwotICAgICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgewotICAgICAgICAgICAg
c2hhZGVyQ29kZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRl
ICVzIHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24gJWQsIGVycm9yIDB4JTA4WC4iLCBwcm9maWxl
LCAoaW50KXNvdXJjZSwgaHIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgc2hhZGVyQ29kZS0+UmVsZWFzZSgpOwotCi0gICAgICAgIG1Db21waWxlZFNo
YWRlcnNbc291cmNlXSA9IHNoYWRlcjsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIGhyID0gKGRldmlj
ZS0+KnNldFNoYWRlcikoc2hhZGVyKTsKLQotICAgIGlmIChGQUlMRUQoaHIpKQotICAgIHsKLSAg
ICAgICAgRVJSKCJGYWlsZWQgdG8gc2V0ICVzIHNoYWRlciBmb3IgYmxpdCBvcGVyYXRpb24gJWQs
IGVycm9yIDB4JTA4WC4iLCBwcm9maWxlLCAoaW50KXNvdXJjZSwgaHIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQmxpdDo6c2V0
VmVydGV4U2hhZGVyKFNoYWRlcklkIHNoYWRlcikKLXsKLSAgICByZXR1cm4gc2V0U2hhZGVyPElE
aXJlY3QzRFZlcnRleFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9k
ZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAiLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlVmVy
dGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0VmVydGV4U2hhZGVyKTsKLX0KLQotYm9v
bCBCbGl0OjpzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpCi17Ci0gICAgcmV0dXJuIHNl
dFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPnN1cHBvcnRz
U2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiLCAmSURpcmVjdDNERGV2aWNlOTo6
Q3JlYXRlUGl4ZWxTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRQaXhlbFNoYWRlcik7Ci19
Ci0KLVJFQ1QgQmxpdDo6Z2V0U3VyZmFjZVJlY3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2Up
IGNvbnN0Ci17Ci0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVz
YygmZGVzYyk7Ci0KLSAgICBSRUNUIHJlY3Q7Ci0gICAgcmVjdC5sZWZ0ID0gMDsKLSAgICByZWN0
LnRvcCA9IDA7Ci0gICAgcmVjdC5yaWdodCA9IGRlc2MuV2lkdGg7Ci0gICAgcmVjdC5ib3R0b20g
PSBkZXNjLkhlaWdodDsKLQotICAgIHJldHVybiByZWN0OwotfQotCi1ib29sIEJsaXQ6OmJveEZp
bHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkK
LXsKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVyZSA9IGNvcHlTdXJmYWNlVG9UZXh0dXJl
KHNvdXJjZSwgZ2V0U3VyZmFjZVJlY3Qoc291cmNlKSk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgc2F2ZVN0YXRlKCk7Ci0KLSAgICBkZXZpY2Ut
PlNldFRleHR1cmUoMCwgdGV4dHVyZSk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwg
ZGVzdCk7Ci0KLSAgICBzZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKLSAgICBz
ZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfUEFTU1RIUk9VR0gpOwotCi0gICAgc2V0Q29tbW9uQmxp
dFN0YXRlKCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxU
RVIsIEQzRFRFWEZfTElORUFSKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RT
QU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9MSU5FQVIpOwotCi0gICAgc2V0Vmlld3BvcnQoZ2V0U3Vy
ZmFjZVJlY3QoZGVzdCksIDAsIDApOwotCi0gICAgcmVuZGVyKCk7Ci0KLSAgICB0ZXh0dXJlLT5S
ZWxlYXNlKCk7Ci0KLSAgICByZXN0b3JlU3RhdGUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIEJsaXQ6OmZvcm1hdENvbnZlcnQoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgY29u
c3QgUkVDVCAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQotewotICAgIElEaXJlY3QzRFRl
eHR1cmU5ICp0ZXh0dXJlID0gY29weVN1cmZhY2VUb1RleHR1cmUoc291cmNlLCBzb3VyY2VSZWN0
KTsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBz
YXZlU3RhdGUoKTsKLQotICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCB0ZXh0dXJlKTsKLSAgICBk
ZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBkZXN0KTsKLQotICAgIHNldFZpZXdwb3J0KHNvdXJj
ZVJlY3QsIHhvZmZzZXQsIHlvZmZzZXQpOwotCi0gICAgc2V0Q29tbW9uQmxpdFN0YXRlKCk7Ci0g
ICAgaWYgKHNldEZvcm1hdENvbnZlcnRTaGFkZXJzKGRlc3RGb3JtYXQpKQotICAgIHsKLSAgICAg
ICAgcmVuZGVyKCk7Ci0gICAgfQotCi0gICAgdGV4dHVyZS0+UmVsZWFzZSgpOwotCi0gICAgcmVz
dG9yZVN0YXRlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCbGl0OjpzZXRGb3Jt
YXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZvcm1hdCkKLXsKLSAgICBib29sIG9rYXkgPSBz
ZXRWZXJ0ZXhTaGFkZXIoU0hBREVSX1ZTX1NUQU5EQVJEKTsKLQotICAgIHN3aXRjaCAoZGVzdEZv
cm1hdCkKLSAgICB7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2FzZSBH
TF9SR0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgIGNhc2UgR0xfUkdCOgotICAg
ICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgb2theSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIo
U0hBREVSX1BTX0NPTVBPTkVOVE1BU0spOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgb2th
eSA9IG9rYXkgJiYgc2V0UGl4ZWxTaGFkZXIoU0hBREVSX1BTX0xVTUlOQU5DRSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGlmICghb2theSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBlbnVtIHsgWCA9IDAsIFkgPSAxLCBaID0gMiwgVyA9IDMgfTsK
LQotICAgIC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgY29uc3RhbnQgZGVwZW5kcyBvbiB0aGUgc2hh
ZGVyIHRoYXQgd2FzIHNlbGVjdGVkLgotICAgIC8vIFNlZSB0aGUgc2hhZGVyIGFzc2VtYmx5IGNv
ZGUgYWJvdmUgZm9yIGRldGFpbHMuCi0gICAgZmxvYXQgcHNDb25zdDBbNF0gPSB7IDAsIDAsIDAs
IDAgfTsKLQotICAgIHN3aXRjaCAoZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VY
VDoKLSAgICAgICAgcHNDb25zdDBbWF0gPSAxOwotICAgICAgICBwc0NvbnN0MFtaXSA9IDE7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgcHNDb25zdDBbWF0g
PSAxOwotICAgICAgICBwc0NvbnN0MFtXXSA9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBj
YXNlIEdMX0FMUEhBOgotICAgICAgICBwc0NvbnN0MFtaXSA9IDE7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgcHNDb25zdDBbWV0gPSAxOwotICAg
ICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIHBz
Q29uc3QwW1hdID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZ2V0RGV2aWNlKCkt
PlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIHBzQ29uc3QwLCAxKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1JRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29weVN1cmZhY2VUb1RleHR1cmUo
SURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpCi17Ci0g
ICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOwotICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgRDNEU1VSRkFDRV9ERVNDIHNvdXJj
ZURlc2M7Ci0gICAgc3VyZmFjZS0+R2V0RGVzYygmc291cmNlRGVzYyk7Ci0KLSAgICAvLyBDb3B5
IHRoZSByZW5kZXIgdGFyZ2V0IGludG8gYSB0ZXh0dXJlCi0gICAgSURpcmVjdDNEVGV4dHVyZTkg
KnRleHR1cmU7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUoc291
cmNlUmVjdC5yaWdodCAtIHNvdXJjZVJlY3QubGVmdCwgc291cmNlUmVjdC5ib3R0b20gLSBzb3Vy
Y2VSZWN0LnRvcCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBzb3VyY2VEZXNjLkZvcm1hdCwg
RDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCi0gICAgewotICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdM
X09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RUZXh0dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAg
SURpcmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOwotICAgIHJlc3VsdCA9IHRleHR1cmUt
PkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOwotCi0gICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgIHRleHR1cmUtPlJl
bGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0
M0RUZXh0dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAgUkVDVCBkM2RTb3VyY2VSZWN0OwotICAg
IGQzZFNvdXJjZVJlY3QubGVmdCA9IHNvdXJjZVJlY3QubGVmdDsKLSAgICBkM2RTb3VyY2VSZWN0
LnJpZ2h0ID0gc291cmNlUmVjdC5yaWdodDsKLSAgICBkM2RTb3VyY2VSZWN0LnRvcCA9IHNvdXJj
ZVJlY3QudG9wOwotICAgIGQzZFNvdXJjZVJlY3QuYm90dG9tID0gc291cmNlUmVjdC5ib3R0b207
Ci0KLSAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOwotICAgIHJlc3VsdCA9IGRldmljZS0+U3RyZXRj
aFJlY3Qoc3VyZmFjZSwgJmQzZFNvdXJjZVJlY3QsIHRleHR1cmVTdXJmYWNlLCBOVUxMLCBEM0RU
RVhGX05PTkUpOwotCi0gICAgdGV4dHVyZVN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICB0ZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAo
SURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXh0dXJlOwot
fQotCi12b2lkIEJsaXQ6OnNldFZpZXdwb3J0KGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBEM0RWSUVXUE9SVDkgdnA7Ci0gICAgdnAuWCAgICAgID0g
eG9mZnNldDsKLSAgICB2cC5ZICAgICAgPSB5b2Zmc2V0OwotICAgIHZwLldpZHRoICA9IHNvdXJj
ZVJlY3QucmlnaHQgLSBzb3VyY2VSZWN0LmxlZnQ7Ci0gICAgdnAuSGVpZ2h0ID0gc291cmNlUmVj
dC5ib3R0b20gLSBzb3VyY2VSZWN0LnRvcDsKLSAgICB2cC5NaW5aICAgPSAwLjBmOwotICAgIHZw
Lk1heFogICA9IDEuMGY7Ci0gICAgZGV2aWNlLT5TZXRWaWV3cG9ydCgmdnApOwotCi0gICAgZmxv
YXQgaGFsZlBpeGVsQWRqdXN0WzRdID0geyAtMS4wZi92cC5XaWR0aCwgMS4wZi92cC5IZWlnaHQs
IDAsIDAgfTsKLSAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50RigwLCBoYWxmUGl4
ZWxBZGp1c3QsIDEpOwotfQotCi12b2lkIEJsaXQ6OnNldENvbW1vbkJsaXRTdGF0ZSgpCi17Ci0g
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBkZXZpY2Ut
PlNldERlcHRoU3RlbmNpbFN1cmZhY2UoTlVMTCk7Ci0KLSAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElEKTsKLSAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVOREVOQUJMRSwgRkFMU0UpOwotICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQ1VMTE1PREUsIEQzRENVTExfTk9ORSk7Ci0gICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19DTElQUExBTkVFTkFCTEUsIDApOwotICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgRDNEQ09MT1JXUklURUVOQUJMRV9B
TFBIQSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfQkxVRSB8IEQzRENPTE9SV1JJVEVFTkFCTEVfR1JF
RU4gfCBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCk7Ci0gICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19TUkdCV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NDSVNTT1JURVNURU5BQkxFLCBGQUxTRSk7Ci0KLSAgICBkZXZpY2UtPlNldFNh
bXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7Ci0gICAgZGV2
aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfUE9JTlQp
OwotICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfU1JHQlRFWFRVUkUsIEZB
TFNFKTsKLSAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NVLCBE
M0RUQUREUkVTU19DTEFNUCk7Ci0gICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBNQVhfVkVSVEVYX0FUVFJJQlMrMTsgaSsrKQotICAgIHsKLSAgICAgICAgZGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgIH0KLX0KLQotdm9pZCBCbGl0OjpyZW5kZXIoKQot
ewotICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKLSAgICBJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIEhSRVNVTFQgaHIgPSBkZXZp
Y2UtPlNldFN0cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMiAqIHNpemVvZihm
bG9hdCkpOwotICAgIGhyID0gZGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRl
eERlY2xhcmF0aW9uKTsKLQotICAgIGRpc3BsYXktPnN0YXJ0U2NlbmUoKTsKLSAgICBociA9IGRl
dmljZS0+RHJhd1ByaW1pdGl2ZShEM0RQVF9UUklBTkdMRVNUUklQLCAwLCAyKTsKLX0KLQotdm9p
ZCBCbGl0OjpzYXZlU3RhdGUoKQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOwotCi0gICAgSFJFU1VMVCBocjsKLQotICAgIGRldmljZS0+R2V0RGVwdGhTdGVu
Y2lsU3VyZmFjZSgmbVNhdmVkRGVwdGhTdGVuY2lsKTsKLSAgICBkZXZpY2UtPkdldFJlbmRlclRh
cmdldCgwLCAmbVNhdmVkUmVuZGVyVGFyZ2V0KTsKLQotICAgIGlmIChtU2F2ZWRTdGF0ZUJsb2Nr
ID09IE5VTEwpCi0gICAgewotICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7
Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgICAgIHNldENvbW1vbkJsaXRT
dGF0ZSgpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkdW1teUNvbnN0WzRdID0geyAw
LCAwLCAwLCAwIH07Ci0KLSAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7Ci0g
ICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15Q29uc3QsIDEp
OwotICAgICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwotICAgICAgICBkZXZpY2Ut
PlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKDAsIGR1bW15Q29uc3QsIDEpOwotCi0gICAgICAgIEQz
RFZJRVdQT1JUOSBkdW1teVZwOwotICAgICAgICBkdW1teVZwLlggPSAwOwotICAgICAgICBkdW1t
eVZwLlkgPSAwOwotICAgICAgICBkdW1teVZwLldpZHRoID0gMTsKLSAgICAgICAgZHVtbXlWcC5I
ZWlnaHQgPSAxOwotICAgICAgICBkdW1teVZwLk1pblogPSAwOwotICAgICAgICBkdW1teVZwLk1h
eFogPSAxOwotCi0gICAgICAgIGRldmljZS0+U2V0Vmlld3BvcnQoJmR1bW15VnApOwotCi0gICAg
ICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsKLQotICAgICAgICBkZXZpY2UtPlNldFN0
cmVhbVNvdXJjZSgwLCBtUXVhZFZlcnRleEJ1ZmZlciwgMCwgMCk7Ci0KLSAgICAgICAgZGV2aWNl
LT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihtUXVhZFZlcnRleERlY2xhcmF0aW9uKTsKLQotICAgICAg
ICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbVNhdmVkU3RhdGVCbG9jayk7Ci0gICAgICAg
IEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IGhyID09IEVfT1VUT0ZNRU1PUlkpOwotICAgIH0KLQotICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJs
b2NrICE9IE5VTEwpOwotCi0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIGhyID0gbVNhdmVkU3RhdGVCbG9jay0+Q2FwdHVyZSgpOwotICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgfQotfQotCi12b2lkIEJsaXQ6OnJlc3RvcmVTdGF0ZSgp
Ci17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBk
ZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVNhdmVkRGVwdGhTdGVuY2lsKTsKLSAgICBp
ZiAobVNhdmVkRGVwdGhTdGVuY2lsICE9IE5VTEwpCi0gICAgewotICAgICAgICBtU2F2ZWREZXB0
aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNhdmVkRGVwdGhTdGVuY2lsID0gTlVMTDsK
LSAgICB9Ci0KLSAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtU2F2ZWRSZW5kZXJUYXJn
ZXQpOwotICAgIGlmIChtU2F2ZWRSZW5kZXJUYXJnZXQgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAg
IG1TYXZlZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBtU2F2ZWRSZW5kZXJUYXJn
ZXQgPSBOVUxMOwotICAgIH0KLQotICAgIEFTU0VSVChtU2F2ZWRTdGF0ZUJsb2NrICE9IE5VTEwp
OwotCi0gICAgaWYgKG1TYXZlZFN0YXRlQmxvY2sgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1T
YXZlZFN0YXRlQmxvY2stPkFwcGx5KCk7Ci0gICAgfQotfQotCi19CkluZGV4OiBBTkdMRS9zcmMv
bGliR0xFU3YyL0JsaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQu
aAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw5MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBCbGl0LmNw
cDogU3VyZmFjZSBjb3B5IHV0aWxpdHkgY2xhc3MuCi0KLSNpZm5kZWYgTElCR0xFU1YyX0JMSVRf
SF8KLSNkZWZpbmUgTElCR0xFU1YyX0JMSVRfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2RlZmlu
ZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlIDxkM2Q5Lmg+
Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNs
YXNzIENvbnRleHQ7Ci0KLWNsYXNzIEJsaXQKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IEJs
aXQoQ29udGV4dCAqY29udGV4dCk7Ci0gICAgfkJsaXQoKTsKLQotICAgIC8vIENvcHkgZnJvbSBz
b3VyY2Ugc3VyZmFjZSB0byBkZXN0IHN1cmZhY2UuCi0gICAgLy8gc291cmNlUmVjdCwgeG9mZnNl
dCwgeW9mZnNldCBhcmUgaW4gRDNEIGNvb3JkaW5hdGVzICgwLDAgaW4gdXBwZXItbGVmdCkKLSAg
ICAvLyBzb3VyY2UgaXMgaW50ZXJwcmV0ZWQgYXMgUkdCQSBhbmQgZGVzdEZvcm1hdCBzcGVjaWZp
ZXMgdGhlIGRlc2lyZWQgcmVzdWx0IGZvcm1hdC4gRm9yIGV4YW1wbGUsIGlmIGRlc3RGb3JtYXQg
PSBHTF9SR0IsIHRoZSBhbHBoYSBjaGFubmVsIHdpbGwgYmUgZm9yY2VkIHRvIDAuCi0gICAgYm9v
bCBmb3JtYXRDb252ZXJ0KElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIGNvbnN0IFJFQ1QgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7Ci0KLSAgICAvLyAyeDIgYm94IGZpbHRlciBzYW1w
bGUgZnJvbSBzb3VyY2UgdG8gZGVzdC4KLSAgICAvLyBSZXF1aXJlcyB0aGF0IHNvdXJjZSBpcyBS
R0IoQSkgYW5kIGRlc3QgaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyBzb3VyY2UuCi0gICAgYm9vbCBi
b3hGaWx0ZXIoSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3QpOwotCi0gIHByaXZhdGU6Ci0gICAgQ29udGV4dCAqbUNvbnRleHQ7Ci0KLSAgICBJRGlyZWN0
M0RWZXJ0ZXhCdWZmZXI5ICptUXVhZFZlcnRleEJ1ZmZlcjsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhE
ZWNsYXJhdGlvbjkgKm1RdWFkVmVydGV4RGVjbGFyYXRpb247Ci0KLSAgICB2b2lkIGluaXRHZW9t
ZXRyeSgpOwotCi0gICAgYm9vbCBzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudW0gZGVzdEZv
cm1hdCk7Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqY29weVN1cmZhY2VUb1RleHR1cmUoSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpOwotICAgIHZv
aWQgc2V0Vmlld3BvcnQoY29uc3QgUkVDVCAmc291cmNlUmVjdCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCk7Ci0gICAgdm9pZCBzZXRDb21tb25CbGl0U3RhdGUoKTsKLSAgICBSRUNUIGdl
dFN1cmZhY2VSZWN0KElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKSBjb25zdDsKLQotICAgIC8v
IFRoaXMgZW51bSBpcyB1c2VkIHRvIGluZGV4IG1Db21waWxlZFNoYWRlcnMgYW5kIG1TaGFkZXJT
b3VyY2UuCi0gICAgZW51bSBTaGFkZXJJZAotICAgIHsKLSAgICAgICAgU0hBREVSX1ZTX1NUQU5E
QVJELAotICAgICAgICBTSEFERVJfVlNfRkxJUFksCi0gICAgICAgIFNIQURFUl9QU19QQVNTVEhS
T1VHSCwKLSAgICAgICAgU0hBREVSX1BTX0xVTUlOQU5DRSwKLSAgICAgICAgU0hBREVSX1BTX0NP
TVBPTkVOVE1BU0ssCi0gICAgICAgIFNIQURFUl9DT1VOVAotICAgIH07Ci0KLSAgICBzdGF0aWMg
Y29uc3QgY2hhciAqIGNvbnN0IG1TaGFkZXJTb3VyY2VbXTsKLQotICAgIC8vIFRoaXMgYWN0dWFs
bHkgY29udGFpbnMgSURpcmVjdDNEVmVydGV4U2hhZGVyOSBvciBJRGlyZWN0M0RQaXhlbFNoYWRl
cjkgY2FzdGVkIHRvIElVbmtub3duLgotICAgIElVbmtub3duICptQ29tcGlsZWRTaGFkZXJzW1NI
QURFUl9DT1VOVF07Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgRDNEU2hhZGVyVHlwZT4KLSAgICBi
b29sIHNldFNoYWRlcihTaGFkZXJJZCBzb3VyY2UsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCi0gICAg
ICAgICAgICAgICAgICAgSFJFU1VMVCAoV0lOQVBJIElEaXJlY3QzRERldmljZTk6OipjcmVhdGVT
aGFkZXIpKGNvbnN0IERXT1JEICosIEQzRFNoYWRlclR5cGUgKiopLAotICAgICAgICAgICAgICAg
ICAgIEhSRVNVTFQgKFdJTkFQSSBJRGlyZWN0M0REZXZpY2U5Ojoqc2V0U2hhZGVyKShEM0RTaGFk
ZXJUeXBlKikpOwotCi0gICAgYm9vbCBzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVyKTsK
LSAgICBib29sIHNldFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcik7Ci0gICAgdm9pZCByZW5k
ZXIoKTsKLQotICAgIHZvaWQgc2F2ZVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlU3RhdGUoKTsK
LSAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbVNhdmVkU3RhdGVCbG9jazsKLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbVNhdmVkUmVuZGVyVGFyZ2V0OwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpt
U2F2ZWREZXB0aFN0ZW5jaWw7Ci0KLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQmxpdCk7
Ci19OwotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfQkxJVF9IXwpJbmRleDogQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9CdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIv
QnVmZmVyLmNwcAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gQnVmZmVyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OkJ1ZmZlciBjbGFzcywgcmVwcmVz
ZW50aW5nIHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9vcgotLy8gaW5kZXggZGF0YS4gSW1wbGVtZW50
cyBHTCBidWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgotLy8gW09wZW5H
TCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjEuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIv
QnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBnbAotewotCi1CdWZmZXI6OkJ1ZmZlcihHTHVpbnQgaWQp
IDogUmVmQ291bnRPYmplY3QoaWQpCi17Ci0gICAgbUNvbnRlbnRzID0gTlVMTDsKLSAgICBtU2l6
ZSA9IDA7Ci0gICAgbVVzYWdlID0gR0xfRFlOQU1JQ19EUkFXOwotfQotCi1CdWZmZXI6On5CdWZm
ZXIoKQotewotICAgIGRlbGV0ZVtdIG1Db250ZW50czsKLX0KLQotdm9pZCBCdWZmZXI6OmJ1ZmZl
ckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNhZ2UpCi17
Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVtdIG1Db250ZW50czsK
LSAgICAgICAgbUNvbnRlbnRzID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2l6ZSAhPSBt
U2l6ZSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVtdIG1Db250ZW50czsKLSAgICAgICAgbUNvbnRl
bnRzID0gbmV3IEdMdWJ5dGVbc2l6ZV07Ci0gICAgICAgIG1lbXNldChtQ29udGVudHMsIDAsIHNp
emUpOwotICAgIH0KLQotICAgIGlmIChkYXRhICE9IE5VTEwgJiYgc2l6ZSA+IDApCi0gICAgewot
ICAgICAgICBtZW1jcHkobUNvbnRlbnRzLCBkYXRhLCBzaXplKTsKLSAgICB9Ci0KLSAgICBtU2l6
ZSA9IHNpemU7Ci0gICAgbVVzYWdlID0gdXNhZ2U7Ci19Ci0KLXZvaWQgQnVmZmVyOjpidWZmZXJT
dWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0
KQotewotICAgIG1lbWNweShtQ29udGVudHMgKyBvZmZzZXQsIGRhdGEsIHNpemUpOwotfQotCi19
CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2xp
YkdMRVN2Mi9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBCdWZmZXIuaDogRGVmaW5lcyB0aGUgZ2w6OkJ1ZmZlciBjbGFzcywg
cmVwcmVzZW50aW5nIHN0b3JhZ2Ugb2YgdmVydGV4IGFuZC9vcgotLy8gaW5kZXggZGF0YS4gSW1w
bGVtZW50cyBHTCBidWZmZXIgb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgotLy8g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjEuCi0KLSNpZm5kZWYgTElCR0xF
U1YyX0JVRkZFUl9IXwotI2RlZmluZSBMSUJHTEVTVjJfQlVGRkVSX0hfCi0KLSNpbmNsdWRlIDxj
c3RkZGVmPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9SZWZDb3VudE9iamVjdC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotY2xh
c3MgQnVmZmVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0Ci17Ci0gIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBCdWZmZXIoR0x1aW50IGlkKTsKLQotICAgIHZpcnR1YWwgfkJ1ZmZlcigpOwotCi0gICAg
dm9pZCBidWZmZXJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVt
IHVzYWdlKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXpl
aXB0ciBzaXplLCBHTGludHB0ciBvZmZzZXQpOwotCi0gICAgdm9pZCAqZGF0YSgpIHsgcmV0dXJu
IG1Db250ZW50czsgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbVNpemU7IH0K
LSAgICBHTGVudW0gdXNhZ2UoKSBjb25zdCB7IHJldHVybiBtVXNhZ2U7IH0KLQotICBwcml2YXRl
OgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXIpOwotCi0gICAgR0x1Ynl0ZSAq
bUNvbnRlbnRzOwotICAgIHNpemVfdCBtU2l6ZTsKLSAgICBHTGVudW0gbVVzYWdlOwotfTsKLQot
fQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfQlVGRkVSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGli
R0xFU3YyL0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzMzE5ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
Ci0KLS8vIENvbnRleHQuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6Q29udGV4dCBjbGFzcywgbWFu
YWdpbmcgYWxsIEdMIHN0YXRlIGFuZCBwZXJmb3JtaW5nCi0vLyByZW5kZXJpbmcgb3BlcmF0aW9u
cy4gSXQgaXMgdGhlIEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQu
Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGht
PgotCi0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVCdWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvUHJvZ3JhbS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9n
ZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5
L2R4OS5oIgotCi0jdW5kZWYgbmVhcgotI3VuZGVmIGZhcgotCi1uYW1lc3BhY2UgZ2wKLXsKLUNv
bnRleHQ6OkNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgY29uc3QgZ2w6OkNvbnRl
eHQgKnNoYXJlQ29udGV4dCkKLSAgICA6IG1Db25maWcoY29uZmlnKQotewotICAgIHNldENsZWFy
Q29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7Ci0KLSAgICBtU3RhdGUuZGVwdGhDbGVhclZh
bHVlID0gMS4wZjsKLSAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSAwOwotCi0gICAgbVN0
YXRlLmN1bGxGYWNlID0gZmFsc2U7Ci0gICAgbVN0YXRlLmN1bGxNb2RlID0gR0xfQkFDSzsKLSAg
ICBtU3RhdGUuZnJvbnRGYWNlID0gR0xfQ0NXOwotICAgIG1TdGF0ZS5kZXB0aFRlc3QgPSBmYWxz
ZTsKLSAgICBtU3RhdGUuZGVwdGhGdW5jID0gR0xfTEVTUzsKLSAgICBtU3RhdGUuYmxlbmQgPSBm
YWxzZTsKLSAgICBtU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9PTkU7Ci0gICAgbVN0YXRlLnNv
dXJjZUJsZW5kQWxwaGEgPSBHTF9PTkU7Ci0gICAgbVN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pF
Uk87Ci0gICAgbVN0YXRlLmRlc3RCbGVuZEFscGhhID0gR0xfWkVSTzsKLSAgICBtU3RhdGUuYmxl
bmRFcXVhdGlvblJHQiA9IEdMX0ZVTkNfQUREOwotICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxw
aGEgPSBHTF9GVU5DX0FERDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5yZWQgPSAwOwotICAgIG1T
dGF0ZS5ibGVuZENvbG9yLmdyZWVuID0gMDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5ibHVlID0g
MDsKLSAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSA9IDA7Ci0gICAgbVN0YXRlLnN0ZW5jaWxU
ZXN0ID0gZmFsc2U7Ci0gICAgbVN0YXRlLnN0ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIG1T
dGF0ZS5zdGVuY2lsUmVmID0gMDsKLSAgICBtU3RhdGUuc3RlbmNpbE1hc2sgPSAtMTsKLSAgICBt
U3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IC0xOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja0Z1bmMg
PSBHTF9BTFdBWVM7Ci0gICAgbVN0YXRlLnN0ZW5jaWxCYWNrUmVmID0gMDsKLSAgICBtU3RhdGUu
c3RlbmNpbEJhY2tNYXNrID0gLSAxOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9
IC0xOwotICAgIG1TdGF0ZS5zdGVuY2lsRmFpbCA9IEdMX0tFRVA7Ci0gICAgbVN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhGYWlsID0gR0xfS0VFUDsKLSAgICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBh
c3MgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5zdGVuY2lsQmFja0ZhaWwgPSBHTF9LRUVQOwotICAg
IG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5z
dGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MgPSBHTF9LRUVQOwotICAgIG1TdGF0ZS5wb2x5Z29uT2Zm
c2V0RmlsbCA9IGZhbHNlOwotICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMC4wZjsK
LSAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gMC4wZjsKLSAgICBtU3RhdGUuc2FtcGxl
QWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7Ci0gICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlID0gZmFs
c2U7Ci0gICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSAxLjBmOwotICAgIG1TdGF0ZS5z
YW1wbGVDb3ZlcmFnZUludmVydCA9IGZhbHNlOwotICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGZh
bHNlOwotICAgIG1TdGF0ZS5kaXRoZXIgPSB0cnVlOwotICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1h
cEhpbnQgPSBHTF9ET05UX0NBUkU7Ci0KLSAgICBtU3RhdGUubGluZVdpZHRoID0gMS4wZjsKLQot
ICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOwotICAgIG1TdGF0ZS52aWV3cG9ydFkgPSAwOwotICAg
IG1TdGF0ZS52aWV3cG9ydFdpZHRoID0gY29uZmlnLT5tRGlzcGxheU1vZGUuV2lkdGg7Ci0gICAg
bVN0YXRlLnZpZXdwb3J0SGVpZ2h0ID0gY29uZmlnLT5tRGlzcGxheU1vZGUuSGVpZ2h0OwotICAg
IG1TdGF0ZS56TmVhciA9IDAuMGY7Ci0gICAgbVN0YXRlLnpGYXIgPSAxLjBmOwotCi0gICAgbVN0
YXRlLnNjaXNzb3JYID0gMDsKLSAgICBtU3RhdGUuc2Npc3NvclkgPSAwOwotICAgIG1TdGF0ZS5z
Y2lzc29yV2lkdGggPSBjb25maWctPm1EaXNwbGF5TW9kZS5XaWR0aDsKLSAgICBtU3RhdGUuc2Np
c3NvckhlaWdodCA9IGNvbmZpZy0+bURpc3BsYXlNb2RlLkhlaWdodDsKLQotICAgIG1TdGF0ZS5j
b2xvck1hc2tSZWQgPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiA9IHRydWU7Ci0g
ICAgbVN0YXRlLmNvbG9yTWFza0JsdWUgPSB0cnVlOwotICAgIG1TdGF0ZS5jb2xvck1hc2tBbHBo
YSA9IHRydWU7Ci0gICAgbVN0YXRlLmRlcHRoTWFzayA9IHRydWU7Ci0KLSAgICBpZiAoc2hhcmVD
b250ZXh0ICE9IE5VTEwpCi0gICAgewotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyID0gc2hhcmVD
b250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOwotICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5hZGRS
ZWYoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlciA9
IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTsKLSAgICB9Ci0KLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4y
NF0gc2VjdGlvbiAzLjcgcGFnZSA4MzoKLSAgICAvLyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSwgVEVY
VFVSRV8yRCBhbmQgVEVYVFVSRV9DVUJFX01BUCBoYXZlIHR3b2RpbWVuc2lvbmFsCi0gICAgLy8g
YW5kIGN1YmUgbWFwIHRleHR1cmUgc3RhdGUgdmVjdG9ycyByZXNwZWN0aXZlbHkgYXNzb2NpYXRl
ZCB3aXRoIHRoZW0uCi0gICAgLy8gSW4gb3JkZXIgdGhhdCBhY2Nlc3MgdG8gdGhlc2UgaW5pdGlh
bCB0ZXh0dXJlcyBub3QgYmUgbG9zdCwgdGhleSBhcmUgdHJlYXRlZCBhcyB0ZXh0dXJlCi0gICAg
Ly8gb2JqZWN0cyBhbGwgb2Ygd2hvc2UgbmFtZXMgYXJlIDAuCi0KLSAgICBtVGV4dHVyZTJEWmVy
byA9IG5ldyBUZXh0dXJlMkQoMCk7Ci0gICAgbVRleHR1cmVDdWJlTWFwWmVybyA9IG5ldyBUZXh0
dXJlQ3ViZU1hcCgwKTsKLQotICAgIG1Db2xvcmJ1ZmZlclplcm8gPSBOVUxMOwotICAgIG1EZXB0
aFN0ZW5jaWxidWZmZXJaZXJvID0gTlVMTDsKLQotICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0g
MDsKLSAgICBiaW5kQXJyYXlCdWZmZXIoMCk7Ci0gICAgYmluZEVsZW1lbnRBcnJheUJ1ZmZlcigw
KTsKLSAgICBiaW5kVGV4dHVyZUN1YmVNYXAoMCk7Ci0gICAgYmluZFRleHR1cmUyRCgwKTsKLSAg
ICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOwotICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7Ci0g
ICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKLQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwg
U0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewotICAgICAgICBtSW5jb21wbGV0ZVRl
eHR1cmVzW3R5cGVdID0gTlVMTDsKLSAgICB9Ci0KLSAgICBtU3RhdGUuY3VycmVudFByb2dyYW0g
PSAwOwotCi0gICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS51bnBhY2tB
bGlnbm1lbnQgPSA0OwotCi0gICAgbUJ1ZmZlckJhY2tFbmQgPSBOVUxMOwotICAgIG1WZXJ0ZXhE
YXRhTWFuYWdlciA9IE5VTEw7Ci0gICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotICAgIG1C
bGl0ID0gTlVMTDsKLQotICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOwotICAgIG1JbnZhbGlkVmFs
dWUgPSBmYWxzZTsKLSAgICBtSW52YWxpZE9wZXJhdGlvbiA9IGZhbHNlOwotICAgIG1PdXRPZk1l
bW9yeSA9IGZhbHNlOwotICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSBmYWxzZTsK
LQotICAgIG1IYXNCZWVuQ3VycmVudCA9IGZhbHNlOwotCi0gICAgbU1heFN1cHBvcnRlZFNhbXBs
ZXMgPSAwOwotICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBOVUxMOwotICAgIG1hcmtBbGxT
dGF0ZURpcnR5KCk7Ci19Ci0KLUNvbnRleHQ6On5Db250ZXh0KCkKLXsKLSAgICBpZiAobVN0YXRl
LmN1cnJlbnRQcm9ncmFtICE9IDApCi0gICAgewotICAgICAgICBQcm9ncmFtICpwcm9ncmFtT2Jq
ZWN0ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0p
OwotICAgICAgICBpZiAocHJvZ3JhbU9iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJv
Z3JhbU9iamVjdC0+cmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgICAgIG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbSA9IDA7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtRnJhbWVidWZmZXJNYXAuZW1wdHko
KSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdp
bigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVt
cHR5KCkpCi0gICAgewotICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdp
bigpLT5zZWNvbmQ7Ci0gICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2Ft
cGxlU3VwcG9ydC5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCB0eXBlID0gMDsgdHlw
ZSA8IFNBTVBMRVJfVFlQRV9DT1VOVDsgdHlwZSsrKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQg
c2FtcGxlciA9IDA7IHNhbXBsZXIgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgc2FtcGxlcisr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2Ft
cGxlcl0uc2V0KE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgdHlwZSA9
IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09VTlQ7IHR5cGUrKykKLSAgICB7Ci0gICAgICAgIGRl
bGV0ZSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdOwotICAgIH0KLQotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBtU3RhdGUu
dmVydGV4QXR0cmlidXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAg
bVN0YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVm
ZmVyLnNldChOVUxMKTsKLSAgICBtU3RhdGUudGV4dHVyZTJELnNldChOVUxMKTsKLSAgICBtU3Rh
dGUudGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOwotICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0
KE5VTEwpOwotCi0gICAgZGVsZXRlIG1UZXh0dXJlMkRaZXJvOwotICAgIGRlbGV0ZSBtVGV4dHVy
ZUN1YmVNYXBaZXJvOwotCi0gICAgZGVsZXRlIG1CdWZmZXJCYWNrRW5kOwotICAgIGRlbGV0ZSBt
VmVydGV4RGF0YU1hbmFnZXI7Ci0gICAgZGVsZXRlIG1JbmRleERhdGFNYW5hZ2VyOwotICAgIGRl
bGV0ZSBtQmxpdDsKLQotICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKQotICAgIHsKLSAg
ICAgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIG1S
ZXNvdXJjZU1hbmFnZXItPnJlbGVhc2UoKTsKLX0KLQotdm9pZCBDb250ZXh0OjptYWtlQ3VycmVu
dChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKLXsKLSAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5nZXREZXZpY2UoKTsKLQotICAgIGlm
ICghbUhhc0JlZW5DdXJyZW50KQotICAgIHsKLSAgICAgICAgbURldmljZUNhcHMgPSBkaXNwbGF5
LT5nZXREZXZpY2VDYXBzKCk7Ci0KLSAgICAgICAgbUJ1ZmZlckJhY2tFbmQgPSBuZXcgRHg5QmFj
a0VuZCh0aGlzLCBkZXZpY2UpOwotICAgICAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgVmVy
dGV4RGF0YU1hbmFnZXIodGhpcywgbUJ1ZmZlckJhY2tFbmQpOwotICAgICAgICBtSW5kZXhEYXRh
TWFuYWdlciA9IG5ldyBJbmRleERhdGFNYW5hZ2VyKHRoaXMsIG1CdWZmZXJCYWNrRW5kKTsKLSAg
ICAgICAgbUJsaXQgPSBuZXcgQmxpdCh0aGlzKTsKLQotICAgICAgICBjb25zdCBEM0RGT1JNQVQg
cmVuZGVyQnVmZmVyRm9ybWF0c1tdID0KLSAgICAgICAgewotICAgICAgICAgICAgRDNERk1UX0E4
UjhHOEI4LAotICAgICAgICAgICAgRDNERk1UX1g4UjhHOEI4LAotICAgICAgICAgICAgRDNERk1U
X1I1RzZCNSwKLSAgICAgICAgICAgIEQzREZNVF9EMjRTOAotICAgICAgICB9OwotCi0gICAgICAg
IGludCBtYXggPSAwOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZihyZW5kZXJC
dWZmZXJGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyArK2kpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBuZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8x
Nl9TQU1QTEVTICsgMV07Ci0gICAgICAgICAgICBkaXNwbGF5LT5nZXRNdWx0aVNhbXBsZVN1cHBv
cnQocmVuZGVyQnVmZmVyRm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAg
ICBtTXVsdGlTYW1wbGVTdXBwb3J0W3JlbmRlckJ1ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1w
bGVBcnJheTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NB
TVBMRVM7IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICht
dWx0aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYg
aiA+IG1heCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
bU1heFN1cHBvcnRlZFNhbXBsZXMgPSBtYXg7Ci0KLSAgICAgICAgbVN1cHBvcnRzQ29tcHJlc3Nl
ZFRleHR1cmVzID0gZGlzcGxheS0+Z2V0Q29tcHJlc3NlZFRleHR1cmVTdXBwb3J0KCk7Ci0KLSAg
ICAgICAgaW5pdEV4dGVuc2lvblN0cmluZygpOwotCi0gICAgICAgIG1TdGF0ZS52aWV3cG9ydFgg
PSAwOwotICAgICAgICBtU3RhdGUudmlld3BvcnRZID0gMDsKLSAgICAgICAgbVN0YXRlLnZpZXdw
b3J0V2lkdGggPSBzdXJmYWNlLT5nZXRXaWR0aCgpOwotICAgICAgICBtU3RhdGUudmlld3BvcnRI
ZWlnaHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKLQotICAgICAgICBtU3RhdGUuc2Npc3Nvclgg
PSAwOwotICAgICAgICBtU3RhdGUuc2Npc3NvclkgPSAwOwotICAgICAgICBtU3RhdGUuc2Npc3Nv
cldpZHRoID0gc3VyZmFjZS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JIZWln
aHQgPSBzdXJmYWNlLT5nZXRIZWlnaHQoKTsKLQotICAgICAgICBtSGFzQmVlbkN1cnJlbnQgPSB0
cnVlOwotICAgIH0KLQotICAgIC8vIFdyYXAgdGhlIGV4aXN0aW5nIERpcmVjdDNEIDkgcmVzb3Vy
Y2VzIGludG8gR0wgb2JqZWN0cyBhbmQgYXNzaWduIHRoZW0gdG8gdGhlICcwJyBuYW1lcwotICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gc3VyZmFjZS0+Z2V0UmVu
ZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IHN1cmZh
Y2UtPmdldERlcHRoU3RlbmNpbCgpOwotCi0gICAgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyWmVy
byA9IG5ldyBDb2xvcmJ1ZmZlcihkZWZhdWx0UmVuZGVyVGFyZ2V0KTsKLSAgICBEZXB0aFN0ZW5j
aWxidWZmZXIgKmRlcHRoU3RlbmNpbGJ1ZmZlclplcm8gPSBuZXcgRGVwdGhTdGVuY2lsYnVmZmVy
KGRlcHRoU3RlbmNpbCk7Ci0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBE
ZWZhdWx0RnJhbWVidWZmZXIoY29sb3JidWZmZXJaZXJvLCBkZXB0aFN0ZW5jaWxidWZmZXJaZXJv
KTsKLQotICAgIHNldEZyYW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZlclplcm8pOwotCi0gICAgZGVm
YXVsdFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotCi0gICAgaWYgKGRlcHRoU3RlbmNpbCkKLSAg
ICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICAKLSAgICBt
U3VwcG9ydHNTaGFkZXJNb2RlbDMgPSBtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24gPT0g
RDNEUFNfVkVSU0lPTigzLCAwKTsKLQotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci19Ci0KLS8v
IFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgYWxsIG9mIHRoZSBzdGF0ZS1yZWxhdGVkIGRpcnR5IGZs
YWdzLCBzbyB0aGF0IGFsbCBzdGF0ZSBpcyBzZXQgZHVyaW5nIG5leHQgcHJlLWRyYXcuCi12b2lk
IENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKLXsKLSAgICBtQXBwbGllZFJlbmRlclRhcmdl
dFNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7Ci0gICAgbUFw
cGxpZWRQcm9ncmFtID0gMDsKLQotICAgIG1DbGVhclN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1D
dWxsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAg
bU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAg
ICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0
eSA9IHRydWU7Ci0gICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICBtU2FtcGxlU3Rh
dGVEaXJ0eSA9IHRydWU7Ci0gICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOwotICAgIG1Gcm9u
dEZhY2VEaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAobUJ1ZmZlckJhY2tFbmQgIT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIG1CdWZmZXJCYWNrRW5kLT5pbnZhbGlkYXRlKCk7Ci0gICAgfQotfQotCi12
b2lkIENvbnRleHQ6OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQg
Ymx1ZSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgPSBy
ZWQ7Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiA9IGdyZWVuOwotICAgIG1TdGF0
ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSA9IGJsdWU7Ci0gICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1
ZS5hbHBoYSA9IGFscGhhOwotfQotCi12b2lkIENvbnRleHQ6OnNldENsZWFyRGVwdGgoZmxvYXQg
ZGVwdGgpCi17Ci0gICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOwotfQotCi12b2lk
IENvbnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpbCkKLXsKLSAgICBtU3RhdGUuc3Rl
bmNpbENsZWFyVmFsdWUgPSBzdGVuY2lsOwotfQotCi12b2lkIENvbnRleHQ6OnNldEN1bGxGYWNl
KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLmN1bGxGYWNlICE9IGVuYWJsZWQpCi0g
ICAgewotICAgICAgICBtU3RhdGUuY3VsbEZhY2UgPSBlbmFibGVkOwotICAgICAgICBtQ3VsbFN0
YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0N1bGxGYWNlRW5h
YmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5jdWxsRmFjZTsKLX0KLQotdm9pZCBD
b250ZXh0OjpzZXRDdWxsTW9kZShHTGVudW0gbW9kZSkKLXsKLSAgICBpZiAobVN0YXRlLmN1bGxN
b2RlICE9IG1vZGUpCi0gICAgewotICAgICAgICBtU3RhdGUuY3VsbE1vZGUgPSBtb2RlOwotICAg
ICAgICBtQ3VsbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0Ojpz
ZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KQotewotICAgIGlmIChtU3RhdGUuZnJvbnRGYWNlICE9
IGZyb250KQotICAgIHsKLSAgICAgICAgbVN0YXRlLmZyb250RmFjZSA9IGZyb250OwotICAgICAg
ICBtRnJvbnRGYWNlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRE
ZXB0aFRlc3QoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0ICE9IGVu
YWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuZGVwdGhUZXN0ID0gZW5hYmxlZDsKLSAgICAg
ICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6Omlz
RGVwdGhUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kZXB0aFRlc3Q7
Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMpCi17Ci0g
ICAgaWYgKG1TdGF0ZS5kZXB0aEZ1bmMgIT0gZGVwdGhGdW5jKQotICAgIHsKLSAgICAgICAgbVN0
YXRlLmRlcHRoRnVuYyA9IGRlcHRoRnVuYzsKLSAgICAgICAgbURlcHRoU3RhdGVEaXJ0eSA9IHRy
dWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldERlcHRoUmFuZ2UoZmxvYXQgek5lYXIs
IGZsb2F0IHpGYXIpCi17Ci0gICAgbVN0YXRlLnpOZWFyID0gek5lYXI7Ci0gICAgbVN0YXRlLnpG
YXIgPSB6RmFyOwotfQotCi12b2lkIENvbnRleHQ6OnNldEJsZW5kKGJvb2wgZW5hYmxlZCkKLXsK
LSAgICBpZiAobVN0YXRlLmJsZW5kICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUu
YmxlbmQgPSBlbmFibGVkOwotICAgICAgICBtQmxlbmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9
Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNCbGVuZEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVy
biBtU3RhdGUuYmxlbmQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0QmxlbmRGYWN0b3JzKEdMZW51
bSBzb3VyY2VSR0IsIEdMZW51bSBkZXN0UkdCLCBHTGVudW0gc291cmNlQWxwaGEsIEdMZW51bSBk
ZXN0QWxwaGEpCi17Ci0gICAgaWYgKG1TdGF0ZS5zb3VyY2VCbGVuZFJHQiAhPSBzb3VyY2VSR0Ig
fHwKLSAgICAgICAgbVN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgIT0gc291cmNlQWxwaGEgfHwKLSAg
ICAgICAgbVN0YXRlLmRlc3RCbGVuZFJHQiAhPSBkZXN0UkdCIHx8Ci0gICAgICAgIG1TdGF0ZS5k
ZXN0QmxlbmRBbHBoYSAhPSBkZXN0QWxwaGEpCi0gICAgewotICAgICAgICBtU3RhdGUuc291cmNl
QmxlbmRSR0IgPSBzb3VyY2VSR0I7Ci0gICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgPSBkZXN0
UkdCOwotICAgICAgICBtU3RhdGUuc291cmNlQmxlbmRBbHBoYSA9IHNvdXJjZUFscGhhOwotICAg
ICAgICBtU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBkZXN0QWxwaGE7Ci0gICAgICAgIG1CbGVuZFN0
YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRCbGVuZENvbG9y
KGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQotewotICAg
IGlmIChtU3RhdGUuYmxlbmRDb2xvci5yZWQgIT0gcmVkIHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVu
ZENvbG9yLmdyZWVuICE9IGdyZWVuIHx8Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmJsdWUg
IT0gYmx1ZSB8fAotICAgICAgICBtU3RhdGUuYmxlbmRDb2xvci5hbHBoYSAhPSBhbHBoYSkKLSAg
ICB7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLnJlZCA9IHJlZDsKLSAgICAgICAgbVN0YXRl
LmJsZW5kQ29sb3IuZ3JlZW4gPSBncmVlbjsKLSAgICAgICAgbVN0YXRlLmJsZW5kQ29sb3IuYmx1
ZSA9IGJsdWU7Ci0gICAgICAgIG1TdGF0ZS5ibGVuZENvbG9yLmFscGhhID0gYWxwaGE7Ci0gICAg
ICAgIG1CbGVuZFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0Ojpz
ZXRCbGVuZEVxdWF0aW9uKEdMZW51bSByZ2JFcXVhdGlvbiwgR0xlbnVtIGFscGhhRXF1YXRpb24p
Ci17Ci0gICAgaWYgKG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IHJnYkVxdWF0aW9uIHx8Ci0g
ICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgIT0gYWxwaGFFcXVhdGlvbikKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gcmdiRXF1YXRpb247Ci0gICAgICAg
IG1TdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBhbHBoYUVxdWF0aW9uOwotICAgICAgICBtQmxl
bmRTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNp
bFRlc3QoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3QgIT0gZW5h
YmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsVGVzdCA9IGVuYWJsZWQ7Ci0gICAg
ICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6
OmlzU3RlbmNpbFRlc3RFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnN0ZW5j
aWxUZXN0OwotfQotCi12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxQYXJhbXMoR0xlbnVtIHN0ZW5j
aWxGdW5jLCBHTGludCBzdGVuY2lsUmVmLCBHTHVpbnQgc3RlbmNpbE1hc2spCi17Ci0gICAgaWYg
KG1TdGF0ZS5zdGVuY2lsRnVuYyAhPSBzdGVuY2lsRnVuYyB8fAotICAgICAgICBtU3RhdGUuc3Rl
bmNpbFJlZiAhPSBzdGVuY2lsUmVmIHx8Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsTWFzayAhPSBz
dGVuY2lsTWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5zdGVuY2lsRnVuYyA9IHN0ZW5jaWxG
dW5jOwotICAgICAgICBtU3RhdGUuc3RlbmNpbFJlZiA9IChzdGVuY2lsUmVmID4gMCkgPyBzdGVu
Y2lsUmVmIDogMDsKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxNYXNrID0gc3RlbmNpbE1hc2s7Ci0g
ICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRl
eHQ6OnNldFN0ZW5jaWxCYWNrUGFyYW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0
ZW5jaWxCYWNrUmVmLCBHTHVpbnQgc3RlbmNpbEJhY2tNYXNrKQotewotICAgIGlmIChtU3RhdGUu
c3RlbmNpbEJhY2tGdW5jICE9IHN0ZW5jaWxCYWNrRnVuYyB8fAotICAgICAgICBtU3RhdGUuc3Rl
bmNpbEJhY2tSZWYgIT0gc3RlbmNpbEJhY2tSZWYgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxC
YWNrTWFzayAhPSBzdGVuY2lsQmFja01hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuc3RlbmNp
bEJhY2tGdW5jID0gc3RlbmNpbEJhY2tGdW5jOwotICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tS
ZWYgPSAoc3RlbmNpbEJhY2tSZWYgPiAwKSA/IHN0ZW5jaWxCYWNrUmVmIDogMDsKLSAgICAgICAg
bVN0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IHN0ZW5jaWxCYWNrTWFzazsKLSAgICAgICAgbVN0ZW5j
aWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNp
bFdyaXRlbWFzayhHTHVpbnQgc3RlbmNpbFdyaXRlbWFzaykKLXsKLSAgICBpZiAobVN0YXRlLnN0
ZW5jaWxXcml0ZW1hc2sgIT0gc3RlbmNpbFdyaXRlbWFzaykKLSAgICB7Ci0gICAgICAgIG1TdGF0
ZS5zdGVuY2lsV3JpdGVtYXNrID0gc3RlbmNpbFdyaXRlbWFzazsKLSAgICAgICAgbVN0ZW5jaWxT
dGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U3RlbmNpbEJh
Y2tXcml0ZW1hc2soR0x1aW50IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKQotewotICAgIGlmIChtU3Rh
dGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgIT0gc3RlbmNpbEJhY2tXcml0ZW1hc2spCi0gICAgewot
ICAgICAgICBtU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBzdGVuY2lsQmFja1dyaXRlbWFz
azsKLSAgICAgICAgbVN0ZW5jaWxTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQg
Q29udGV4dDo6c2V0U3RlbmNpbE9wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxGYWlsLCBHTGVudW0g
c3RlbmNpbFBhc3NEZXB0aEZhaWwsIEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoUGFzcykKLXsKLSAg
ICBpZiAobVN0YXRlLnN0ZW5jaWxGYWlsICE9IHN0ZW5jaWxGYWlsIHx8Ci0gICAgICAgIG1TdGF0
ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2lsUGFzc0RlcHRoRmFpbCB8fAotICAgICAg
ICBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgIT0gc3RlbmNpbFBhc3NEZXB0aFBhc3MpCi0g
ICAgewotICAgICAgICBtU3RhdGUuc3RlbmNpbEZhaWwgPSBzdGVuY2lsRmFpbDsKLSAgICAgICAg
bVN0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gc3RlbmNpbFBhc3NEZXB0aEZhaWw7Ci0gICAg
ICAgIG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IHN0ZW5jaWxQYXNzRGVwdGhQYXNzOwot
ICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBDb250
ZXh0OjpzZXRTdGVuY2lsQmFja09wZXJhdGlvbnMoR0xlbnVtIHN0ZW5jaWxCYWNrRmFpbCwgR0xl
bnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCwgR0xlbnVtIHN0ZW5jaWxCYWNrUGFzc0RlcHRo
UGFzcykKLXsKLSAgICBpZiAobVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCAhPSBzdGVuY2lsQmFja0Zh
aWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCAhPSBzdGVuY2ls
QmFja1Bhc3NEZXB0aEZhaWwgfHwKLSAgICAgICAgbVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRo
UGFzcyAhPSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpCi0gICAgewotICAgICAgICBtU3RhdGUu
c3RlbmNpbEJhY2tGYWlsID0gc3RlbmNpbEJhY2tGYWlsOwotICAgICAgICBtU3RhdGUuc3RlbmNp
bEJhY2tQYXNzRGVwdGhGYWlsID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOwotICAgICAgICBt
U3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNz
OwotICAgICAgICBtU3RlbmNpbFN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBD
b250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0RmlsbChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1T
dGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCAhPSBlbmFibGVkKQotICAgIHsKLSAgICAgICAgbVN0YXRl
LnBvbHlnb25PZmZzZXRGaWxsID0gZW5hYmxlZDsKLSAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0
ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNQb2x5Z29uT2Zmc2V0
RmlsbEVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUucG9seWdvbk9mZnNldEZp
bGw7Ci0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRQb2x5Z29uT2Zmc2V0UGFyYW1zKEdMZmxvYXQg
ZmFjdG9yLCBHTGZsb2F0IHVuaXRzKQotewotICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZh
Y3RvciAhPSBmYWN0b3IgfHwKLSAgICAgICAgbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0cyAhPSB1
bml0cykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gZmFjdG9y
OwotICAgICAgICBtU3RhdGUucG9seWdvbk9mZnNldFVuaXRzID0gdW5pdHM7Ci0gICAgICAgIG1Q
b2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6
OnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKG1TdGF0
ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgIT0gZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIG1TdGF0
ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBlbmFibGVkOwotICAgICAgICBtU2FtcGxlU3RhdGVE
aXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIENvbnRleHQ6OmlzU2FtcGxlQWxwaGFUb0Nv
dmVyYWdlRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVBbHBoYVRv
Q292ZXJhZ2U7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2UoYm9vbCBlbmFi
bGVkKQotewotICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UgIT0gZW5hYmxlZCkKLSAgICB7
Ci0gICAgICAgIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSA9IGVuYWJsZWQ7Ci0gICAgICAgIG1TYW1w
bGVTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29udGV4dDo6aXNTYW1wbGVD
b3ZlcmFnZUVuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUuc2FtcGxlQ292ZXJh
Z2U7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2FtcGxlQ292ZXJhZ2VQYXJhbXMoR0xjbGFtcGYg
dmFsdWUsIGJvb2wgaW52ZXJ0KQotewotICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1
ZSAhPSB2YWx1ZSB8fAotICAgICAgICBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQgIT0gaW52
ZXJ0KQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgPSB2YWx1ZTsK
LSAgICAgICAgbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0ID0gaW52ZXJ0OwotICAgICAgICBt
U2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OnNldFNj
aXNzb3JUZXN0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0ICE9
IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBlbmFibGVkOwot
ICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBDb250
ZXh0Ojppc1NjaXNzb3JUZXN0RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5z
Y2lzc29yVGVzdDsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXREaXRoZXIoYm9vbCBlbmFibGVkKQot
ewotICAgIGlmIChtU3RhdGUuZGl0aGVyICE9IGVuYWJsZWQpCi0gICAgewotICAgICAgICBtU3Rh
dGUuZGl0aGVyID0gZW5hYmxlZDsKLSAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOwot
ICAgIH0KLX0KLQotYm9vbCBDb250ZXh0Ojppc0RpdGhlckVuYWJsZWQoKSBjb25zdAotewotICAg
IHJldHVybiBtU3RhdGUuZGl0aGVyOwotfQotCi12b2lkIENvbnRleHQ6OnNldExpbmVXaWR0aChH
TGZsb2F0IHdpZHRoKQotewotICAgIG1TdGF0ZS5saW5lV2lkdGggPSB3aWR0aDsKLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVtIGhpbnQpCi17Ci0gICAgbVN0
YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IGhpbnQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Vmll
d3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpCi17Ci0gICAgbVN0YXRlLnZpZXdwb3J0WCA9IHg7Ci0gICAgbVN0YXRlLnZpZXdwb3J0WSA9
IHk7Ci0gICAgbVN0YXRlLnZpZXdwb3J0V2lkdGggPSB3aWR0aDsKLSAgICBtU3RhdGUudmlld3Bv
cnRIZWlnaHQgPSBoZWlnaHQ7Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclBhcmFtcyhH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBp
ZiAobVN0YXRlLnNjaXNzb3JYICE9IHggfHwgbVN0YXRlLnNjaXNzb3JZICE9IHkgfHwgCi0gICAg
ICAgIG1TdGF0ZS5zY2lzc29yV2lkdGggIT0gd2lkdGggfHwgbVN0YXRlLnNjaXNzb3JIZWlnaHQg
IT0gaGVpZ2h0KQotICAgIHsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JYID0geDsKLSAgICAgICAg
bVN0YXRlLnNjaXNzb3JZID0geTsKLSAgICAgICAgbVN0YXRlLnNjaXNzb3JXaWR0aCA9IHdpZHRo
OwotICAgICAgICBtU3RhdGUuc2Npc3NvckhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgbVNjaXNz
b3JTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6c2V0Q29sb3JN
YXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCi17Ci0gICAg
aWYgKG1TdGF0ZS5jb2xvck1hc2tSZWQgIT0gcmVkIHx8IG1TdGF0ZS5jb2xvck1hc2tHcmVlbiAh
PSBncmVlbiB8fAotICAgICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSAhPSBibHVlIHx8IG1TdGF0
ZS5jb2xvck1hc2tBbHBoYSAhPSBhbHBoYSkKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1h
c2tSZWQgPSByZWQ7Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1hc2tHcmVlbiA9IGdyZWVuOwotICAg
ICAgICBtU3RhdGUuY29sb3JNYXNrQmx1ZSA9IGJsdWU7Ci0gICAgICAgIG1TdGF0ZS5jb2xvck1h
c2tBbHBoYSA9IGFscGhhOwotICAgICAgICBtTWFza1N0YXRlRGlydHkgPSB0cnVlOwotICAgIH0K
LX0KLQotdm9pZCBDb250ZXh0OjpzZXREZXB0aE1hc2soYm9vbCBtYXNrKQotewotICAgIGlmICht
U3RhdGUuZGVwdGhNYXNrICE9IG1hc2spCi0gICAgewotICAgICAgICBtU3RhdGUuZGVwdGhNYXNr
ID0gbWFzazsKLSAgICAgICAgbU1hc2tTdGF0ZURpcnR5ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ29udGV4dDo6c2V0QWN0aXZlU2FtcGxlcihpbnQgYWN0aXZlKQotewotICAgIG1TdGF0ZS5h
Y3RpdmVTYW1wbGVyID0gYWN0aXZlOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Z2V0UmVhZEZyYW1l
YnVmZmVySGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZl
cjsKLX0KLQotR0x1aW50IENvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7Ci19Ci0KLUdMdWludCBDb250
ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUu
cmVuZGVyYnVmZmVyLmlkKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhh
bmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwotfQot
Ci12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkVuYWJsZWQodW5zaWduZWQgaW50IGF0dHJp
Yk51bSwgYm9vbCBlbmFibGVkKQotewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmli
TnVtXS5tRW5hYmxlZCA9IGVuYWJsZWQ7Ci19Ci0KLWNvbnN0IEF0dHJpYnV0ZVN0YXRlICZDb250
ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKQotewotICAg
IHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV07Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgQnVmZmVy
ICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0
IHZvaWQgKnBvaW50ZXIpCi17Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1d
Lm1Cb3VuZEJ1ZmZlci5zZXQoYm91bmRCdWZmZXIpOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tU2l6ZSA9IHNpemU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVth
dHRyaWJOdW1dLm1UeXBlID0gdHlwZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV0ubU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tU3RyaWRlID0gc3RyaWRlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tUG9pbnRlciA9IHBvaW50ZXI7Ci19Ci0KLWNvbnN0IHZvaWQgKkNvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3QK
LXsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVy
OwotfQotCi0vLyByZXR1cm5zIGVudGlyZSBzZXQgb2YgYXR0cmlidXRlcyBhcyBhIGJsb2NrCi1j
b25zdCBBdHRyaWJ1dGVTdGF0ZSAqQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliQmxvY2soKQotewot
ICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlOwotfQotCi12b2lkIENvbnRleHQ6OnNl
dFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQotewotICAgIG1TdGF0ZS5wYWNrQWxpZ25t
ZW50ID0gYWxpZ25tZW50OwotfQotCi1HTGludCBDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7Ci19Ci0KLXZvaWQgQ29u
dGV4dDo6c2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKLXsKLSAgICBtU3RhdGUu
dW5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50OwotfQotCi1HTGludCBDb250ZXh0OjpnZXRVbnBh
Y2tBbGlnbm1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RhdGUudW5wYWNrQWxpZ25tZW50
OwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVJl
c291cmNlTWFuYWdlci0+Y3JlYXRlQnVmZmVyKCk7Ci19Ci0KLUdMdWludCBDb250ZXh0OjpjcmVh
dGVQcm9ncmFtKCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlUHJvZ3Jh
bSgpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKQotewot
ICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVTaGFkZXIodHlwZSk7Ci19Ci0KLUdM
dWludCBDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFu
YWdlci0+Y3JlYXRlVGV4dHVyZSgpOwotfQotCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVy
YnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlUmVuZGVyYnVm
ZmVyKCk7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIGZyYW1lYnVmZmVyIG5hbWUKLUdMdWlu
dCBDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgdW5zaWduZWQgaW50IGhhbmRs
ZSA9IDE7Ci0KLSAgICB3aGlsZSAobUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtRnJh
bWVidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBoYW5kbGUrKzsKLSAgICB9Ci0KLSAg
ICBtRnJhbWVidWZmZXJNYXBbaGFuZGxlXSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gaGFuZGxlOwot
fQotCi12b2lkIENvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQotewotICAgIGlm
IChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRCdWZmZXIoYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIGRl
dGFjaEJ1ZmZlcihidWZmZXIpOwotICAgIH0KLSAgICAKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5k
ZWxldGVCdWZmZXIoYnVmZmVyKTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1
aW50IHNoYWRlcikKLXsKLSAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVTaGFkZXIoc2hhZGVy
KTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewot
ICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQg
Q29udGV4dDo6ZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICBpZiAobVJlc291
cmNlTWFuYWdlci0+Z2V0VGV4dHVyZSh0ZXh0dXJlKSkKLSAgICB7Ci0gICAgICAgIGRldGFjaFRl
eHR1cmUodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlVGV4
dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoR0x1
aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0UmVuZGVy
YnVmZmVyKHJlbmRlcmJ1ZmZlcikpCi0gICAgewotICAgICAgICBkZXRhY2hSZW5kZXJidWZmZXIo
cmVuZGVyYnVmZmVyKTsKLSAgICB9Ci0gICAgCi0gICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRl
UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGVsZXRlRnJh
bWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQotewotICAgIEZyYW1lYnVmZmVyTWFwOjppdGVy
YXRvciBmcmFtZWJ1ZmZlck9iamVjdCA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVy
KTsKLQotICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdCAhPSBtRnJhbWVidWZmZXJNYXAuZW5kKCkp
Ci0gICAgewotICAgICAgICBkZXRhY2hGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci0KLSAgICAg
ICAgZGVsZXRlIGZyYW1lYnVmZmVyT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1GcmFtZWJ1ZmZl
ck1hcC5lcmFzZShmcmFtZWJ1ZmZlck9iamVjdCk7Ci0gICAgfQotfQotCi1CdWZmZXIgKkNvbnRl
eHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKQotewotICAgIHJldHVybiBtUmVzb3VyY2VNYW5h
Z2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsKLX0KLQotU2hhZGVyICpDb250ZXh0OjpnZXRTaGFkZXIo
R0x1aW50IGhhbmRsZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0U2hhZGVy
KGhhbmRsZSk7Ci19Ci0KLVByb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0oR0x1aW50IGhhbmRs
ZSkKLXsKLSAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShoYW5kbGUpOwot
fQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRUZXh0dXJlKEdMdWludCBoYW5kbGUpCi17Ci0gICAg
cmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFRleHR1cmUoaGFuZGxlKTsKLX0KLQotUmVuZGVy
YnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSkKLXsKLSAgICBy
ZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7Ci19Ci0KLUZy
YW1lYnVmZmVyICpDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXIoKQotewotICAgIHJldHVybiBn
ZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVhZEZyYW1lYnVmZmVyKTsKLX0KLQotRnJhbWVidWZmZXIg
KkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIGdldEZyYW1lYnVm
ZmVyKG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRBcnJh
eUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmNo
ZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwotCi0gICAgbVN0YXRlLmFycmF5QnVmZmVyLnNl
dChnZXRCdWZmZXIoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZEVsZW1lbnRBcnJh
eUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmNo
ZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwotCi0gICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1
ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOwotfQotCi12b2lkIENvbnRleHQ6OmJpbmRUZXh0
dXJlMkQoR0x1aW50IHRleHR1cmUpCi17Ci0gICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tUZXh0
dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBTQU1QTEVSXzJEKTsKLQotICAgIG1TdGF0ZS50ZXh0dXJl
MkQuc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwotCi0gICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJl
W1NBTVBMRVJfMkRdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQobVN0YXRlLnRleHR1cmUyRC5n
ZXQoKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKEdMdWludCB0ZXh0
dXJlKQotewotICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4
dHVyZSwgU0FNUExFUl9DVUJFKTsKLQotICAgIG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcC5zZXQoZ2V0
VGV4dHVyZSh0ZXh0dXJlKSk7Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9D
VUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcC5nZXQo
KSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVi
dWZmZXIpCi17Ci0gICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCi0gICAgewot
ICAgICAgICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7
Ci0gICAgfQotCi0gICAgbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9IGZyYW1lYnVmZmVyOwotfQot
Ci12b2lkIENvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQot
ewotICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQotICAgIHsKLSAgICAgICAg
bUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZlcigpOwotICAgIH0K
LQotICAgIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKLX0KLQotdm9pZCBD
b250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgbVJl
c291cmNlTWFuYWdlci0+Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKHJlbmRlcmJ1ZmZlcik7
Ci0KLSAgICBtU3RhdGUucmVuZGVyYnVmZmVyLnNldChnZXRSZW5kZXJidWZmZXIocmVuZGVyYnVm
ZmVyKSk7Ci19Ci0KLXZvaWQgQ29udGV4dDo6dXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsK
LSAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOwotICAgIG1T
dGF0ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVzdCBzd2l0
Y2ggYmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMgZmxhZ2dl
ZC4KLQotICAgIGlmIChwcmlvclByb2dyYW0gIT0gcHJvZ3JhbSkKLSAgICB7Ci0gICAgICAgIFBy
b2dyYW0gKm5ld1Byb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKHByb2dyYW0p
OwotICAgICAgICBQcm9ncmFtICpvbGRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJv
Z3JhbShwcmlvclByb2dyYW0pOwotCi0gICAgICAgIGlmIChuZXdQcm9ncmFtKQotICAgICAgICB7
Ci0gICAgICAgICAgICBuZXdQcm9ncmFtLT5hZGRSZWYoKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKG9sZFByb2dyYW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9sZFByb2dy
YW0tPnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpzZXRG
cmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmJ1ZmZlcikKLXsKLSAgICBkZWxldGUgbUZyYW1l
YnVmZmVyTWFwWzBdOwotICAgIG1GcmFtZWJ1ZmZlck1hcFswXSA9IGJ1ZmZlcjsKLX0KLQotdm9p
ZCBDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnJl
bmRlcmJ1ZmZlcikKLXsKLSAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IG1T
dGF0ZS5yZW5kZXJidWZmZXIuZ2V0KCk7Ci0gICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZXRTdG9y
YWdlKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1
ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQotewotICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRv
ciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAo
ZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcmFtZWJ1
ZmZlci0+c2Vjb25kOwotICAgIH0KLX0KLQotQnVmZmVyICpDb250ZXh0OjpnZXRBcnJheUJ1ZmZl
cigpCi17Ci0gICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKLX0KLQotQnVmZmVy
ICpDb250ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZmZXIoKQotewotICAgIHJldHVybiBtU3RhdGUu
ZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOwotfQotCi1Qcm9ncmFtICpDb250ZXh0OjpnZXRDdXJy
ZW50UHJvZ3JhbSgpCi17Ci0gICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0o
bVN0YXRlLmN1cnJlbnRQcm9ncmFtKTsKLX0KLQotVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0
dXJlMkQoKQotewotICAgIGlmIChtU3RhdGUudGV4dHVyZTJELmlkKCkgPT0gMCkgICAvLyBTcGVj
aWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9u
IHRoZSB0YXJnZXQKLSAgICB7Ci0gICAgICAgIHJldHVybiBtVGV4dHVyZTJEWmVybzsKLSAgICB9
Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZTJEKj4obVN0YXRlLnRleHR1cmUyRC5n
ZXQoKSk7Ci19Ci0KLVRleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgp
Ci17Ci0gICAgaWYgKG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcC5pZCgpID09IDApICAgLy8gU3BlY2lh
bCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0dXJlcyBiYXNlZCBvbiB0
aGUgdGFyZ2V0Ci0gICAgewotICAgICAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwWmVybzsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPihtU3RhdGUudGV4
dHVyZUN1YmVNYXAuZ2V0KCkpOwotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4
dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgU2FtcGxlclR5cGUgdHlwZSkKLXsKLSAgICBHTHVp
bnQgdGV4aWQgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKLQot
ICAgIGlmICh0ZXhpZCA9PSAwKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICBjYXNlIFNB
TVBMRVJfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVybzsKLSAgICAgICAgICBjYXNlIFNBTVBMRVJf
Q1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmdldCgpOwotfQot
Ci1ib29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJh
bXMpCi17Ci0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1NIQURFUl9D
T01QSUxFUjogICAgICAgICAgKnBhcmFtcyA9IEdMX1RSVUU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDogICAqcGFy
YW1zID0gbVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0OyAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9ERVBUSF9XUklURU1BU0s6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhNYXNr
OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoK
LSAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLmNvbG9yTWFza1JlZDsKLSAgICAgICAgcGFyYW1z
WzFdID0gbVN0YXRlLmNvbG9yTWFza0dyZWVuOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUu
Y29sb3JNYXNrQmx1ZTsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhh
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmN1bGxGYWNlOwotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9GSUxMOiAgICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7Ci0gICAgICBj
YXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVB
bHBoYVRvQ292ZXJhZ2U7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsKLSAgICAgIGNhc2UgR0xfU0NJU1NPUl9U
RVNUOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNjaXNzb3JUZXN0OwotICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFRl
c3Q7Ci0gICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5kZXB0aFRlc3Q7Ci0gICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5ibGVuZDsKLSAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRpdGhlcjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250
ZXh0OjpnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpCi17Ci0gICAgLy8g
UGxlYXNlIG5vdGU6IERFUFRIX0NMRUFSX1ZBTFVFIGlzIGluY2x1ZGVkIGluIG91ciBpbnRlcm5h
bCBnZXRGbG9hdHYgaW1wbGVtZW50YXRpb24KLSAgICAvLyBiZWNhdXNlIGl0IGlzIHN0b3JlZCBh
cyBhIGZsb2F0LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIEdMIEVTIDIuMCBzcGVjIG5hbWVz
Ci0gICAgLy8gR2V0SW50ZWdlcnYgYXMgaXRzIG5hdGl2ZSBxdWVyeSBmdW5jdGlvbi4gQXMgaXQg
d291bGQgcmVxdWlyZSBjb252ZXJzaW9uIGluIGFueQotICAgIC8vIGNhc2UsIHRoaXMgc2hvdWxk
IG1ha2Ugbm8gZGlmZmVyZW5jZSB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4KLSAgICBzd2l0
Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmxpbmVXaWR0aDsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOiAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZUNv
dmVyYWdlVmFsdWU7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6ICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOiAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHln
b25PZmZzZXRGYWN0b3I7ICBicmVhazsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5J
VFM6ICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRVbml0czsgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgotICAgICAgICBwYXJhbXNbMF0g
PSBnbDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTjsKLSAgICAgICAgcGFyYW1zWzFdID0g
Z2w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVg7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1swXSA9IGds
OjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOOwotICAgICAgICBwYXJhbXNbMV0gPSBzdXBw
b3J0c1NoYWRlck1vZGVsMygpID8gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00z
IDogZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00yOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS56
TmVhcjsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnpGYXI7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKLSAgICAgICAgcGFyYW1zWzBdID0gbVN0
YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9IG1TdGF0ZS5jb2xv
ckNsZWFyVmFsdWUuZ3JlZW47Ci0gICAgICAgIHBhcmFtc1syXSA9IG1TdGF0ZS5jb2xvckNsZWFy
VmFsdWUuYmx1ZTsKLSAgICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5h
bHBoYTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgotICAgICAg
ICBwYXJhbXNbMF0gPSBtU3RhdGUuYmxlbmRDb2xvci5yZWQ7Ci0gICAgICAgIHBhcmFtc1sxXSA9
IG1TdGF0ZS5ibGVuZENvbG9yLmdyZWVuOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuYmxl
bmRDb2xvci5ibHVlOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuYmxlbmRDb2xvci5hbHBo
YTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29udGV4dDo6Z2V0SW50ZWdl
cnYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQotewotICAgIC8vIFBsZWFzZSBub3RlOiBE
RVBUSF9DTEVBUl9WQUxVRSBpcyBub3QgaW5jbHVkZWQgaW4gb3VyIGludGVybmFsIGdldEludGVn
ZXJ2IGltcGxlbWVudGF0aW9uCi0gICAgLy8gYmVjYXVzZSBpdCBpcyBzdG9yZWQgYXMgYSBmbG9h
dCwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBHTCBFUyAyLjAgc3BlYyBuYW1lcwotICAgIC8v
IEdldEludGVnZXJ2IGFzIGl0cyBuYXRpdmUgcXVlcnkgZnVuY3Rpb24uIEFzIGl0IHdvdWxkIHJl
cXVpcmUgY29udmVyc2lvbiBpbiBhbnkKLSAgICAvLyBjYXNlLCB0aGlzIHNob3VsZCBtYWtlIG5v
IGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIFlvdSBtYXkgZmluZCBpdCBp
biAKLSAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYuCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAqcGFyYW1z
ID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICpwYXJhbXMgPSBnbDo6TUFY
X1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhf
VkFSWUlOR19WRUNUT1JTOiAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkFSWUlOR19W
RUNUT1JTOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0gZ2w6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lN
QUdFX1VOSVRTOyBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTOiAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOyAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAg
KnBhcmFtcyA9IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0g
Z2w6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM7ICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFOiAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1JF
TkRFUkJVRkZFUl9TSVpFOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OVU1fU0hB
REVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9S
TUFUUzogICAgICAvKiBubyBzaGFkZXIgYmluYXJ5IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKTsgICAgICAgYnJlYWs7Ci0gICAg
ICAvL2Nhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzogICAgICAgICAgICAgIC8vIG5vdyBlcXVp
dmFsZW50IHRvIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRQotICAgICAgY2FzZSBH
TF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6ICAgICAqcGFyYW1zID0gbVN0YXRlLmRy
YXdGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVBRF9G
UkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZWFkRnJhbWVi
dWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9C
SU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOiAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VycmVudFByb2dyYW07ICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5wYWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnVucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfR0VORVJBVEVfTUlQTUFQX0hJTlQ6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZ2Vu
ZXJhdGVNaXBtYXBIaW50OyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BQ1RJVkVf
VEVYVFVSRTogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxl
ciArIEdMX1RFWFRVUkUwKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzogICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxGdW5jOyAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5zdGVuY2lsTWFzazsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnN0ZW5jaWxCYWNrRnVuYzsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
U1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNp
bEJhY2tSZWY7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JB
Q0tfVkFMVUVfTUFTSzogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja01hc2s7
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfRkFJTDogICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWw7ICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzogICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzczsgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1NURU5DSUxfQkFDS19GQUlMOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJh
Y2tQYXNzRGVwdGhGYWlsOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
UEFTU19ERVBUSF9QQVNTOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0
aFBhc3M7ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6ICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoRnVuYzsgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc291cmNlQmxlbmRSR0I7ICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CTEVORF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0JMRU5EX0RTVF9SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRl
c3RCbGVuZFJHQjsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRf
RFNUX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVzdEJsZW5kQWxw
aGE7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9S
R0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCOyAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOiAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9XUklURU1BU0s6ICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc3RlbmNpbFdyaXRlbWFzazsgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzazsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxDbGVhclZhbHVlOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1VCUElYRUxf
QklUUzogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVEVYVFVSRV9TSVpFOyAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6ICAg
ICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU7ICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgIAotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMoKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBhdCBjdXJyZW50LCBvbmx5IEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQgYW5kIAotICAgICAgICAgICAgICAgIC8vIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUIGFyZSBzdXBwb3J0ZWQKLSAgICAgICAgICAgICAgICAq
cGFyYW1zID0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIEdMc2l6ZWkgbWF4U2FtcGxlcyA9IGdldE1heFN1cHBvcnRlZFNh
bXBsZXMoKTsKLSAgICAgICAgICAgIGlmIChtYXhTYW1wbGVzICE9IDApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1heFNhbXBsZXM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICAgCi0gICAgICBjYXNl
IEdMX1NBTVBMRVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGlmIChmcmFtZWJ1
ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOgotICAgICAgICAgICAg
ICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9TQU1QTEVTOgotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZnJhbWVidWZm
ZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9U
WVBFOiAgICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOyAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDogKnBh
cmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQg
bWF4RGltZW5zaW9uID0gc3RkOjptYXgoKGludClnbDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAo
aW50KWdsOjpNQVhfVEVYVFVSRV9TSVpFKTsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IG1heERp
bWVuc2lvbjsKLSAgICAgICAgICAgIHBhcmFtc1sxXSA9IG1heERpbWVuc2lvbjsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1B
VFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJl
cygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzFdID0gR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1ZJRVdQT1JUOgotICAgICAgICBwYXJhbXNb
MF0gPSBtU3RhdGUudmlld3BvcnRYOwotICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUudmlld3Bv
cnRZOwotICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUudmlld3BvcnRXaWR0aDsKLSAgICAgICAg
cGFyYW1zWzNdID0gbVN0YXRlLnZpZXdwb3J0SGVpZ2h0OwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU0NJU1NPUl9CT1g6Ci0gICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS5zY2lzc29y
WDsKLSAgICAgICAgcGFyYW1zWzFdID0gbVN0YXRlLnNjaXNzb3JZOwotICAgICAgICBwYXJhbXNb
Ml0gPSBtU3RhdGUuc2Npc3NvcldpZHRoOwotICAgICAgICBwYXJhbXNbM10gPSBtU3RhdGUuc2Np
c3NvckhlaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NVTExfRkFDRV9NT0RF
OiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1bGxNb2RlOyAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6ICAgICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmZyb250RmFjZTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1JFRF9CSVRTOgotICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOgotICAgICAg
Y2FzZSBHTF9CTFVFX0JJVFM6Ci0gICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVi
dWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVy
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9SRURfQklUUzogICAqcGFyYW1z
ID0gY29sb3JidWZmZXItPmdldFJlZFNpemUoKTsgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfR1JFRU5fQklUUzogKnBhcmFtcyA9IGNvbG9yYnVmZmVyLT5nZXRHcmVlblNpemUo
KTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0JMVUVfQklUUzogICpwYXJhbXMg
PSBjb2xvcmJ1ZmZlci0+Z2V0Qmx1ZVNpemUoKTsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9BTFBIQV9CSVRTOiAqcGFyYW1zID0gY29sb3JidWZmZXItPmdldEFscGhhU2l6ZSgp
OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0JJ
VFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpEZXB0aFN0ZW5jaWxidWZm
ZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0KLSAgICAg
ICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAq
cGFyYW1zID0gZGVwdGhidWZmZXItPmdldERlcHRoU2l6ZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAw
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0JJVFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpEZXB0
aFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlcigpOwotCi0gICAgICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlcikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgPCAwIHx8IG1TdGF0ZS5hY3RpdmVT
YW1wbGVyID4gZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIC0gMSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfMkRdW21TdGF0ZS5hY3RpdmVTYW1wbGVy
XS5pZCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9URVhUVVJF
X0JJTkRJTkdfQ1VCRV9NQVA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0
aXZlU2FtcGxlciA8IDAgfHwgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBnbDo6TUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFMgLSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVb
U0FNUExFUl9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRl
ckluZm8oR0xlbnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1z
KQotewotICAgIC8vIFBsZWFzZSBub3RlOiB0aGUgcXVlcnkgdHlwZSByZXR1cm5lZCBmb3IgREVQ
VEhfQ0xFQVJfVkFMVUUgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgotICAgIC8vIGlzIEZMT0FUIHJh
dGhlciB0aGFuIElOVCwgYXMgd291bGQgYmUgc3VnZ2VzdGVkIGJ5IHRoZSBHTCBFUyAyLjAgc3Bl
Yy4gVGhpcyBpcyBkdWUKLSAgICAvLyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIHN0b3JlZCBpbnRl
cm5hbGx5IGFzIGEgZmxvYXQsIGFuZCBzbyB3b3VsZCByZXF1aXJlIGNvbnZlcnNpb24KLSAgICAv
LyBpZiByZXR1cm5lZCBmcm9tIENvbnRleHQ6OmdldEludGVnZXJ2LiBTaW5jZSB0aGlzIGNvbnZl
cnNpb24gaXMgYWxyZWFkeSBpbXBsZW1lbnRlZCAKLSAgICAvLyBpbiB0aGUgY2FzZSB0aGF0IG9u
ZSBjYWxscyBnbEdldEludGVnZXJ2IHRvIHJldHJpZXZlIGEgZmxvYXQtdHlwZWQgc3RhdGUgdmFy
aWFibGUsIHdlCi0gICAgLy8gcGxhY2UgREVQVEhfQ0xFQVJfVkFMVUUgd2l0aCB0aGUgZmxvYXRz
LiBUaGlzIHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UgdG8gdGhlIGNhbGxpbmcKLSAgICAvLyBh
cHBsaWNhdGlvbi4KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6IC8qIG5vIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRz
IGFyZSBzdXBwb3J0ZWQgKi8gCi0gICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzoK
LSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAgICAgICAgICAqbnVt
UGFyYW1zID0gMDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFY
X1ZFUlRFWF9BVFRSSUJTOgotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9S
UzoKLSAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzoKLSAgICAgIGNhc2UgR0xfTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFM6Ci0gICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6Ci0gICAgICBj
YXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9C
SU5BUllfRk9STUFUUzoKLSAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JN
QVRTOgotICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQklORElORzoKLSAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6
Ci0gICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTToKLSAgICAgIGNhc2UgR0xfUEFDS19BTElH
Tk1FTlQ6Ci0gICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6Ci0gICAgICBjYXNlIEdMX0dF
TkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgY2FzZSBHTF9SRURfQklUUzoKLSAgICAgIGNhc2Ug
R0xfR1JFRU5fQklUUzoKLSAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgotICAgICAgY2FzZSBHTF9B
TFBIQV9CSVRTOgotICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgotICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0JJVFM6Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0g
ICAgICBjYXNlIEdMX0NVTExfRkFDRV9NT0RFOgotICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOgot
ICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRToKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5D
OgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6Ci0gICAgICBjYXNlIEdMX1NURU5D
SUxfUkVGOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6Ci0gICAgICBjYXNlIEdMX1NURU5D
SUxfUEFTU19ERVBUSF9GQUlMOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFT
UzoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6Ci0gICAgICBjYXNlIEdMX1NURU5D
SUxfQkFDS19WQUxVRV9NQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOgotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X1BBU1NfREVQVEhfRkFJTDoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhf
UEFTUzoKLSAgICAgIGNhc2UgR0xfREVQVEhfRlVOQzoKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JD
X1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOgotICAgICAgY2FzZSBHTF9CTEVO
RF9EU1RfUkdCOgotICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6Ci0gICAgICBjYXNlIEdM
X0JMRU5EX0VRVUFUSU9OX1JHQjoKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6
Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfV1JJVEVNQVNLOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOgotICAg
ICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOgotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpF
OgotICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgotICAgICAgY2FzZSBH
TF9TQU1QTEVfQlVGRkVSUzoKLSAgICAgIGNhc2UgR0xfU0FNUExFUzoKLSAgICAgIGNhc2UgR0xf
SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgotICAgICAgY2FzZSBHTF9JTVBMRU1FTlRB
VElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKLSAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJE
OgotICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgICp0eXBlID0gR0xfSU5UOwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9TQU1QTEVTX0FOR0xF
OgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAg
ICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVklF
V1BPUlRfRElNUzoKLSAgICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7Ci0gICAg
ICAgICAgICAqbnVtUGFyYW1zID0gMjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfVklFV1BPUlQ6Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgotICAgICAgICB7
Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSA0
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TSEFERVJfQ09NUElM
RVI6Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6Ci0gICAgICBjYXNlIEdM
X0RFUFRIX1dSSVRFTUFTSzoKLSAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAg
ICAvLyBDVUxMX0ZBQ0UgdGhyb3VnaCBESVRIRVIgYXJlIG5hdHVyYWwgdG8gSXNFbmFibGVkLAot
ICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIC8vIGJ1dCBjYW4gYmUgcmV0
cmlldmVkIHRocm91Z2ggdGhlIEdldHtUeXBlfXYgcXVlcmllcy4KLSAgICAgIGNhc2UgR0xfU0FN
UExFX0FMUEhBX1RPX0NPVkVSQUdFOiAvLyBGb3IgdGhpcyBwdXJwb3NlLCB0aGV5IGFyZSB0cmVh
dGVkIGhlcmUgYXMgYm9vbC1uYXR1cmFsCi0gICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRToK
LSAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6
Ci0gICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6Ci0gICAgICBjYXNlIEdMX0JMRU5EOgotICAgICAg
Y2FzZSBHTF9ESVRIRVI6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsK
LSAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICp0
eXBlID0gR0xfQk9PTDsKLSAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6Ci0gICAg
ICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTOgotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09W
RVJBR0VfVkFMVUU6Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAgY2Fz
ZSBHTF9MSU5FX1dJRFRIOgotICAgICAgICB7Ci0gICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FU
OwotICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRToKLSAgICAgIGNhc2UgR0xf
QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgotICAgICAgY2FzZSBHTF9ERVBUSF9SQU5HRToKLSAg
ICAgICAgewotICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKLSAgICAgICAgICAgICpudW1Q
YXJhbXMgPSAyOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT0xP
Ul9DTEVBUl9WQUxVRToKLSAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7Ci0gICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQXBwbGllcyB0aGUg
cmVuZGVyIHRhcmdldCBzdXJmYWNlLCBkZXB0aCBzdGVuY2lsIHN1cmZhY2UsIHZpZXdwb3J0IHJl
Y3RhbmdsZSBhbmQKLS8vIHNjaXNzb3IgcmVjdGFuZ2xlIHRvIHRoZSBEaXJlY3QzRCA5IGRldmlj
ZQotYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdwb3J0KQot
ewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgRnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0KLSAg
ICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1lYnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5l
c3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICB7Ci0gICAgICAgIGVycm9yKEdM
X0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVm
ZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVw
dGhTdGVuY2lsID0gTlVMTDsKLQotICAgIHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwg
PSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCk7Ci0gICAgaWYgKHJl
bmRlclRhcmdldFNlcmlhbCAhPSBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCkKLSAgICB7Ci0g
ICAgICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7Ci0gICAgICAg
IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwotICAgICAg
ICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOyAvLyBTY2lzc29yIGFyZWEgbXVzdCBiZSBjbGFt
cGVkIHRvIHJlbmRlciB0YXJnZXQncyBzaXplLS0gdGhpcyBpcyBkaWZmZXJlbnQgZm9yIGRpZmZl
cmVudCByZW5kZXIgdGFyZ2V0cy4KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgZGVwdGhidWZm
ZXJTZXJpYWwgPSAwOwotICAgIHVuc2lnbmVkIGludCBzdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsK
LSAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05P
TkUpCi0gICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0
RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAgICAgIGRlcHRoYnVmZmVyU2Vy
aWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCktPmdldFNlcmlhbCgpOwot
ICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5
cGUoKSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZm
ZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7Ci0gICAgICAg
IHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZl
cigpLT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0g
bUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAotICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFs
ICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCkKLSAgICB7Ci0gICAgICAgIGRldmljZS0+
U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWwpOwotICAgICAgICBtQXBwbGllZERl
cHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgICAgIG1BcHBsaWVkU3Rl
bmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7Ci0gICAgfQotCi0gICAgRDNE
VklFV1BPUlQ5IHZpZXdwb3J0OwotICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwotICAgIHJlbmRl
clRhcmdldC0+R2V0RGVzYygmZGVzYyk7Ci0KLSAgICBpZiAoaWdub3JlVmlld3BvcnQpCi0gICAg
ewotICAgICAgICB2aWV3cG9ydC5YID0gMDsKLSAgICAgICAgdmlld3BvcnQuWSA9IDA7Ci0gICAg
ICAgIHZpZXdwb3J0LldpZHRoID0gZGVzYy5XaWR0aDsKLSAgICAgICAgdmlld3BvcnQuSGVpZ2h0
ID0gZGVzYy5IZWlnaHQ7Ci0gICAgICAgIHZpZXdwb3J0Lk1pblogPSAwLjBmOwotICAgICAgICB2
aWV3cG9ydC5NYXhaID0gMS4wZjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgdmll
d3BvcnQuWCA9IHN0ZDo6bWF4KG1TdGF0ZS52aWV3cG9ydFgsIDApOwotICAgICAgICB2aWV3cG9y
dC5ZID0gc3RkOjptYXgobVN0YXRlLnZpZXdwb3J0WSwgMCk7Ci0gICAgICAgIHZpZXdwb3J0Lldp
ZHRoID0gc3RkOjptaW4obVN0YXRlLnZpZXdwb3J0V2lkdGgsIChpbnQpZGVzYy5XaWR0aCAtIChp
bnQpdmlld3BvcnQuWCk7Ci0gICAgICAgIHZpZXdwb3J0LkhlaWdodCA9IHN0ZDo6bWluKG1TdGF0
ZS52aWV3cG9ydEhlaWdodCwgKGludClkZXNjLkhlaWdodCAtIChpbnQpdmlld3BvcnQuWSk7Ci0g
ICAgICAgIHZpZXdwb3J0Lk1pblogPSBjbGFtcDAxKG1TdGF0ZS56TmVhcik7Ci0gICAgICAgIHZp
ZXdwb3J0Lk1heFogPSBjbGFtcDAxKG1TdGF0ZS56RmFyKTsKLSAgICB9Ci0KLSAgICBpZiAodmll
d3BvcnQuV2lkdGggPD0gMCB8fCB2aWV3cG9ydC5IZWlnaHQgPD0gMCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsgICAvLyBOb3RoaW5nIHRvIHJlbmRlcgotICAgIH0KLQotICAgIGRldmlj
ZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsKLQotICAgIGlmIChtU2Npc3NvclN0YXRlRGlydHkp
Ci0gICAgewotICAgICAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBSRUNUIHJlY3QgPSB7bVN0YXRlLnNjaXNzb3JYLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIG1TdGF0ZS5zY2lzc29yWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUu
c2Npc3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAg
IG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0fTsKLSAgICAgICAgICAgIHJl
Y3QucmlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxVSU5UPihyZWN0LnJpZ2h0KSwgZGVzYy5X
aWR0aCk7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PFVJ
TlQ+KHJlY3QuYm90dG9tKSwgZGVzYy5IZWlnaHQpOwotICAgICAgICAgICAgZGV2aWNlLT5TZXRT
Y2lzc29yUmVjdCgmcmVjdCk7Ci0gICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1NDSVNTT1JURVNURU5BQkxFLCBUUlVFKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NP
UlRFU1RFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TY2lzc29yU3RhdGVE
aXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtU3RhdGUuY3VycmVudFByb2dyYW0pCi0g
ICAgewotICAgICAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFByb2dyYW0o
KTsKLQotICAgICAgICBHTGludCBoYWxmUGl4ZWxTaXplID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhI
YWxmUGl4ZWxTaXplTG9jYXRpb24oKTsKLSAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8g
dmlld3BvcnQuV2lkdGgsIDEuMGYgLyB2aWV3cG9ydC5IZWlnaHR9OwotICAgICAgICBwcm9ncmFt
T2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGhhbGZQaXhlbFNpemUsIDEsIChHTGZsb2F0KikmeHkpOwot
Ci0gICAgICAgIEdMaW50IHdpbmRvdyA9IHByb2dyYW1PYmplY3QtPmdldER4Vmlld3BvcnRMb2Nh
dGlvbigpOwotICAgICAgICBHTGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZpZXdwb3J0V2lkdGgg
LyAyLjBmLCBtU3RhdGUudmlld3BvcnRIZWlnaHQgLyAyLjBmLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAv
IDIuMGYsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0
WSArIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtT2JqZWN0
LT5zZXRVbmlmb3JtNGZ2KHdpbmRvdywgMSwgKEdMZmxvYXQqKSZ3aHh5KTsKLQotICAgICAgICBH
TGludCBkZXB0aCA9IHByb2dyYW1PYmplY3QtPmdldER4RGVwdGhMb2NhdGlvbigpOwotICAgICAg
ICBHTGZsb2F0IGR6WzJdID0geyhtU3RhdGUuekZhciAtIG1TdGF0ZS56TmVhcikgLyAyLjBmLCAo
bVN0YXRlLnpOZWFyICsgbVN0YXRlLnpGYXIpIC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1PYmpl
Y3QtPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIChHTGZsb2F0KikmZHopOwotCi0gICAgICAgIEdM
aW50IG5lYXIgPSBwcm9ncmFtT2JqZWN0LT5nZXREZXB0aFJhbmdlTmVhckxvY2F0aW9uKCk7Ci0g
ICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xZnYobmVhciwgMSwgJm1TdGF0ZS56TmVh
cik7Ci0KLSAgICAgICAgR0xpbnQgZmFyID0gcHJvZ3JhbU9iamVjdC0+Z2V0RGVwdGhSYW5nZUZh
ckxvY2F0aW9uKCk7Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xZnYoZmFyLCAx
LCAmbVN0YXRlLnpGYXIpOwotCi0gICAgICAgIEdMaW50IGRpZmYgPSBwcm9ncmFtT2JqZWN0LT5n
ZXREZXB0aFJhbmdlRGlmZkxvY2F0aW9uKCk7Ci0gICAgICAgIEdMZmxvYXQgekRpZmYgPSBtU3Rh
dGUuekZhciAtIG1TdGF0ZS56TmVhcjsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9y
bTFmdihkaWZmLCAxLCAmekRpZmYpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0v
LyBBcHBsaWVzIHRoZSBmaXhlZC1mdW5jdGlvbiBzdGF0ZSAoY3VsbGluZywgZGVwdGggdGVzdCwg
YWxwaGEgYmxlbmRpbmcsIHN0ZW5jaWxpbmcsIGV0YykgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNl
Ci12b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKQotewotICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgIFByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBnZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgR0xpbnQgZnJvbnRDQ1cgPSBwcm9n
cmFtT2JqZWN0LT5nZXREeEZyb250Q0NXTG9jYXRpb24oKTsKLSAgICBHTGludCBjY3cgPSAobVN0
YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cpOwotICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0x
aXYoZnJvbnRDQ1csIDEsICZjY3cpOwotCi0gICAgR0xpbnQgcG9pbnRzT3JMaW5lcyA9IHByb2dy
YW1PYmplY3QtPmdldER4UG9pbnRzT3JMaW5lc0xvY2F0aW9uKCk7Ci0gICAgR0xpbnQgYWx3YXlz
RnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOwotICAgIHByb2dyYW1PYmplY3QtPnNl
dFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsKLQotICAgIEZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAg
aWYgKG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCi0gICAgewotICAgICAgICBp
ZiAobVN0YXRlLmN1bGxGYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBlczJkeDo6Q29udmVydEN1bGxNb2RlKG1TdGF0ZS5j
dWxsTW9kZSwgbVN0YXRlLmZyb250RmFjZSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DVUxMTU9E
RSwgRDNEQ1VMTF9OT05FKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1DdWxsU3RhdGVEaXJ0eSA9
IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGF0ZURpcnR5KQotICAgIHsKLSAgICAg
ICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QgJiYgZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVm
ZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7Ci0gICAgICAgICAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6Q29udmVydENvbXBhcmlzb24o
bVN0YXRlLmRlcHRoRnVuYykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9G
QUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGVwdGhTdGF0ZURpcnR5ID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKG1CbGVuZFN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0
YXRlLmJsZW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIFRSVUUpOwotCi0gICAgICAgICAgICBpZiAobVN0YXRl
LnNvdXJjZUJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0ZS5zb3VyY2VCbGVu
ZFJHQiAhPSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgJiYKLSAgICAgICAgICAgICAgICBt
U3RhdGUuZGVzdEJsZW5kUkdCICE9IEdMX0NPTlNUQU5UX0FMUEhBICYmIG1TdGF0ZS5kZXN0Qmxl
bmRSR0IgIT0gR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRGQUNUT1IsIGVz
MmR4OjpDb252ZXJ0Q29sb3IobVN0YXRlLmJsZW5kQ29sb3IpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ERkFDVE9SLCBEM0RDT0xPUl9SR0JBKHVub3JtPDg+KG1T
dGF0ZS5ibGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5i
bGVuZENvbG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENv
bG9yLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5ibGVuZENvbG9yLmFs
cGhhKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX1NSQ0JMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNl
QmxlbmRSR0IpKTsKLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVT
VEJMRU5ELCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuZGVzdEJsZW5kUkdCKSk7Ci0g
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0JMRU5ET1AsIGVzMmR4OjpD
b252ZXJ0QmxlbmRPcChtU3RhdGUuYmxlbmRFcXVhdGlvblJHQikpOwotCi0gICAgICAgICAgICBp
ZiAobVN0YXRlLnNvdXJjZUJsZW5kUkdCICE9IG1TdGF0ZS5zb3VyY2VCbGVuZEFscGhhIHx8IAot
ICAgICAgICAgICAgICAgIG1TdGF0ZS5kZXN0QmxlbmRSR0IgIT0gbVN0YXRlLmRlc3RCbGVuZEFs
cGhhIHx8IAotICAgICAgICAgICAgICAgIG1TdGF0ZS5ibGVuZEVxdWF0aW9uUkdCICE9IG1TdGF0
ZS5ibGVuZEVxdWF0aW9uQWxwaGEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFCTEUsIFRSVUUp
OwotCi0gICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVO
REFMUEhBLCBlczJkeDo6Q29udmVydEJsZW5kRnVuYyhtU3RhdGUuc291cmNlQmxlbmRBbHBoYSkp
OwotICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJMRU5E
QUxQSEEsIGVzMmR4OjpDb252ZXJ0QmxlbmRGdW5jKG1TdGF0ZS5kZXN0QmxlbmRBbHBoYSkpOwot
ICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQkxFTkRPUEFMUEhB
LCBlczJkeDo6Q29udmVydEJsZW5kT3AobVN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSkpOwotCi0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TRVBBUkFURUFMUEhBQkxFTkRFTkFC
TEUsIEZBTFNFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQUxQSEFCTEVO
REVOQUJMRSwgRkFMU0UpOwotICAgICAgICB9Ci0KLSAgICAgICAgbUJsZW5kU3RhdGVEaXJ0eSA9
IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtU3RlbmNpbFN0YXRlRGlydHkgfHwgbUZyb250RmFj
ZURpcnR5KQotICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAmJiBmcmFtZWJ1
ZmZlck9iamVjdC0+aGFzU3RlbmNpbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOwotICAgICAgICAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBUUlVFKTsK
LQotICAgICAgICAgICAgLy8gRklYTUU6IFVuc3VwcG9ydGVkIGJ5IEQzRDkKLSAgICAgICAgICAg
IGNvbnN0IEQzRFJFTkRFUlNUQVRFVFlQRSBEM0RSU19DQ1dfU1RFTkNJTFJFRiA9IEQzRFJTX1NU
RU5DSUxSRUY7Ci0gICAgICAgICAgICBjb25zdCBEM0RSRU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NX
X1NURU5DSUxNQVNLID0gRDNEUlNfU1RFTkNJTE1BU0s7Ci0gICAgICAgICAgICBjb25zdCBEM0RS
RU5ERVJTVEFURVRZUEUgRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0sgPSBEM0RSU19TVEVOQ0lM
V1JJVEVNQVNLOwotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrICE9IG1T
dGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayB8fCAKLSAgICAgICAgICAgICAgICBtU3RhdGUuc3Rl
bmNpbFJlZiAhPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWYgfHwgCi0gICAgICAgICAgICAgICAgbVN0
YXRlLnN0ZW5jaWxNYXNrICE9IG1TdGF0ZS5zdGVuY2lsQmFja01hc2spCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgRVJSKCJTZXBhcmF0ZSBmcm9udC9iYWNrIHN0ZW5jaWwgd3JpdGVt
YXNrcywgcmVmZXJlbmNlIHZhbHVlcywgb3Igc3RlbmNpbCBtYXNrIHZhbHVlcyBhcmUgaW52YWxp
ZCB1bmRlciBXZWJHTC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBnZXQgdGhlIG1h
eGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCByZWYKLSAgICAgICAgICAgIGdsOjpEZXB0aFN0ZW5j
aWxidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1
ZmZlcigpOwotICAgICAgICAgICAgR0x1aW50IG1heFN0ZW5jaWwgPSAoMSA8PCBzdGVuY2lsYnVm
ZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAtIDE7Ci0KLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVu
ZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVN
QVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNr
KTsKLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9
PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMRlVOQyA6IEQzRFJTX0NDV19TVEVOQ0lMRlVOQywgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNv
bihtU3RhdGUuc3RlbmNpbEZ1bmMpKTsKLQotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxSRUYgOiBEM0RS
U19DQ1dfU1RFTkNJTFJFRiwgKG1TdGF0ZS5zdGVuY2lsUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwp
ID8gbVN0YXRlLnN0ZW5jaWxSZWYgOiBtYXhTdGVuY2lsKTsKLSAgICAgICAgICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lM
TUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxNYXNrKTsKLQotICAg
ICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0ND
VyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRl
LnN0ZW5jaWxGYWlsKSk7Ci0gICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKG1TdGF0
ZS5mcm9udEZhY2UgPT0gR0xfQ0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNEUlNfQ0NXX1NU
RU5DSUxaRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzMmR4OjpD
b252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCkpOwotICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQz
RFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3AobVN0YXRlLnN0ZW5j
aWxQYXNzRGVwdGhQYXNzKSk7Ci0KLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxXUklURU1BU0sgOiBEM0RS
U19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKLSAg
ICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9D
VyA/IEQzRFJTX1NURU5DSUxGVU5DIDogRDNEUlNfQ0NXX1NURU5DSUxGVU5DLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRDb21wYXJpc29uKG1TdGF0
ZS5zdGVuY2lsQmFja0Z1bmMpKTsKLQotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFJFRiA6IEQzRFJTX0ND
V19TVEVOQ0lMUkVGLCAobVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDwgKEdMaW50KW1heFN0ZW5jaWwp
ID8gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmIDogbWF4U3RlbmNpbCk7Ci0gICAgICAgICAgICBkZXZp
Y2UtPlNldFJlbmRlclN0YXRlKG1TdGF0ZS5mcm9udEZhY2UgPT0gR0xfQ1cgPyBEM0RSU19TVEVO
Q0lMTUFTSyA6IEQzRFJTX0NDV19TVEVOQ0lMTUFTSywgbVN0YXRlLnN0ZW5jaWxCYWNrTWFzayk7
Ci0KLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9
PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxGQUlMIDogRDNEUlNfQ0NXX1NURU5DSUxGQUlMLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3Ao
bVN0YXRlLnN0ZW5jaWxCYWNrRmFpbCkpOwotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NXID8gRDNEUlNfU1RFTkNJTFpGQUlMIDogRDNE
UlNfQ0NXX1NURU5DSUxaRkFJTCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVzMmR4OjpDb252ZXJ0U3RlbmNpbE9wKG1TdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwp
KTsKLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9
PSBHTF9DVyA/IEQzRFJTX1NURU5DSUxQQVNTIDogRDNEUlNfQ0NXX1NURU5DSUxQQVNTLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRTdGVuY2lsT3Ao
bVN0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcykpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19T
VEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU3RlbmNpbFN0YXRl
RGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobU1hc2tTdGF0ZURpcnR5KQotICAgIHsK
LSAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCBl
czJkeDo6Q29udmVydENvbG9yTWFzayhtU3RhdGUuY29sb3JNYXNrUmVkLCBtU3RhdGUuY29sb3JN
YXNrR3JlZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5jb2xvck1hc2tCbHVlLCBt
U3RhdGUuY29sb3JNYXNrQWxwaGEpKTsKLSAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19aV1JJVEVFTkFCTEUsIG1TdGF0ZS5kZXB0aE1hc2sgPyBUUlVFIDogRkFMU0UpOwotCi0g
ICAgICAgIG1NYXNrU3RhdGVEaXJ0eSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtUG9seWdv
bk9mZnNldFN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnBvbHlnb25PZmZz
ZXRGaWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RGVwdGhTdGVuY2lsYnVmZmVyICpk
ZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAg
ICAgICAgaWYgKGRlcHRoYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywgKigoRFdPUkQq
KSZtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvcikpOwotICAgICAgICAgICAgICAgIGZsb2F0IGRl
cHRoQmlhcyA9IGxkZXhwKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0VW5pdHMsIC0oaW50KShkZXB0aGJ1
ZmZlci0+Z2V0RGVwdGhTaXplKCkpKTsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0RFUFRIQklBUywgKigoRFdPUkQqKSZkZXB0aEJpYXMpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklBUywgMCk7Ci0gICAg
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFUFRIQklBUywgMCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmlzTXVsdGlzYW1wbGUoKSAmJiBtU2FtcGxl
U3RhdGVEaXJ0eSkKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVy
YWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNvdmVy
YWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVN0YXRl
LnNhbXBsZUNvdmVyYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTLCBUUlVFKTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGludCBtYXNrID0gMDsKLSAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJh
Z2VWYWx1ZSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHRocmVz
aG9sZCA9IDAuNWY7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1l
YnVmZmVyT2JqZWN0LT5nZXRTYW1wbGVzKCk7ICsraSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1hc2sgPDw9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChp
ICsgMSkgKiBtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSA+PSB0aHJlc2hvbGQpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCArPSAxLjBm
OwotICAgICAgICAgICAgICAgICAgICAgICAgbWFzayB8PSAxOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1hc2sgPSB+bWFzazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIG1hc2spOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBUywgRkFMU0UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAobURpdGhlclN0YXRlRGlydHkpCi0gICAgewotICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0RJVEhFUkVOQUJMRSwgbVN0YXRlLmRpdGhlciA/IFRSVUUgOiBGQUxTRSk7Ci0K
LSAgICAgICAgbURpdGhlclN0YXRlRGlydHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtRnJvbnRG
YWNlRGlydHkgPSBmYWxzZTsKLX0KLQotLy8gRmlsbCBpbiB0aGUgc2VtYW50aWNJbmRleCBmaWVs
ZCBvZiB0aGUgYXJyYXkgb2YgVHJhbnNsYXRlZEF0dHJpYnV0ZXMgYmFzZWQgb24gdGhlIGFjdGl2
ZSBHTFNMIHByb2dyYW0uCi12b2lkIENvbnRleHQ6Omxvb2t1cEF0dHJpYnV0ZU1hcHBpbmcoVHJh
bnNsYXRlZEF0dHJpYnV0ZSAqYXR0cmlidXRlcykKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXNb
aV0uZW5hYmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgYXR0cmlidXRlc1tpXS5zZW1hbnRp
Y0luZGV4ID0gZ2V0Q3VycmVudFByb2dyYW0oKS0+Z2V0U2VtYW50aWNJbmRleChpKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4QnVmZmVyKEdMZW51
bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgYm9vbCAqdXNlSW5kZXhpbmcsIFRy
YW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykKLXsKLSAgICBUcmFuc2xhdGVkQXR0cmlidXRl
IHRyYW5zbGF0ZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAgIEdMZW51bSBlcnIgPSBtVmVy
dGV4RGF0YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKGZpcnN0LCBjb3VudCwgdHJhbnNsYXRl
ZCk7Ci0gICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnI7Ci0gICAgfQotCi0gICAgbG9va3VwQXR0cmlidXRlTWFwcGluZyh0cmFuc2xhdGVkKTsKLQot
ICAgIG1CdWZmZXJCYWNrRW5kLT5zZXR1cEF0dHJpYnV0ZXNQcmVEcmF3KHRyYW5zbGF0ZWQpOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7
Ci0gICAgICAgIGlmICh0cmFuc2xhdGVkW2ldLmVuYWJsZWQgJiYgdHJhbnNsYXRlZFtpXS5ub25B
cnJheSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnBy
ZVJlbmRlclZhbGlkYXRlVW5pbmRleGVkKG1vZGUsIGNvdW50LCBpbmRleEluZm8pOwotICAgICAg
ICAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtQnVmZmVyQmFj
a0VuZC0+c2V0dXBJbmRpY2VzUHJlRHJhdygqaW5kZXhJbmZvKTsKLQotICAgICAgICAgICAgKnVz
ZUluZGV4aW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBHTF9OT19FUlJPUjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgICp1c2VJbmRleGluZyA9IGZhbHNlOwotICAgIHJldHVybiBHTF9O
T19FUlJPUjsKLX0KLQotR0xlbnVtIENvbnRleHQ6OmFwcGx5VmVydGV4QnVmZmVyKGNvbnN0IFRy
YW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbykKLXsKLSAgICBUcmFuc2xhdGVkQXR0cmlidXRl
IHRyYW5zbGF0ZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAgIEdMZW51bSBlcnIgPSBtVmVy
dGV4RGF0YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKGluZGV4SW5mby5taW5JbmRleCwgaW5k
ZXhJbmZvLm1heEluZGV4LWluZGV4SW5mby5taW5JbmRleCsxLCB0cmFuc2xhdGVkKTsKLQotICAg
IGlmIChlcnIgPT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICBsb29rdXBBdHRyaWJ1dGVN
YXBwaW5nKHRyYW5zbGF0ZWQpOwotCi0gICAgICAgIG1CdWZmZXJCYWNrRW5kLT5zZXR1cEF0dHJp
YnV0ZXNQcmVEcmF3KHRyYW5zbGF0ZWQpOwotICAgIH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0K
LS8vIEFwcGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQgYXJyYXkgYmluZGluZ3MgdG8gdGhl
IERpcmVjdDNEIDkgZGV2aWNlCi1HTGVudW0gQ29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcihjb25z
dCB2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUs
IFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykKLXsKLSAgICBHTGVudW0gZXJyID0gbUlu
ZGV4RGF0YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKG1vZGUsIHR5cGUsIGNvdW50LCBtU3Rh
dGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpLCBpbmRpY2VzLCBpbmRleEluZm8pOwotCi0gICAg
aWYgKGVyciA9PSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXJCYWNrRW5kLT5z
ZXR1cEluZGljZXNQcmVEcmF3KCppbmRleEluZm8pOwotICAgIH0KLQotICAgIHJldHVybiBlcnI7
Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFudHMgdG8gdGhl
IERpcmVjdDNEIDkgZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCi17Ci0gICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0gICAgUHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0gICAgSURpcmVjdDNEVmVydGV4U2hh
ZGVyOSAqdmVydGV4U2hhZGVyID0gcHJvZ3JhbU9iamVjdC0+Z2V0VmVydGV4U2hhZGVyKCk7Ci0g
ICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IHByb2dyYW1PYmplY3QtPmdl
dFBpeGVsU2hhZGVyKCk7Ci0KLSAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFk
ZXIpOwotICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOwotCi0gICAgaWYg
KHByb2dyYW1PYmplY3QtPmdldFNlcmlhbCgpICE9IG1BcHBsaWVkUHJvZ3JhbSkKLSAgICB7Ci0g
ICAgICAgIHByb2dyYW1PYmplY3QtPmRpcnR5QWxsVW5pZm9ybXMoKTsKLSAgICAgICAgcHJvZ3Jh
bU9iamVjdC0+ZGlydHlBbGxTYW1wbGVycygpOwotICAgICAgICBtQXBwbGllZFByb2dyYW0gPSBw
cm9ncmFtT2JqZWN0LT5nZXRTZXJpYWwoKTsKLSAgICB9Ci0KLSAgICBwcm9ncmFtT2JqZWN0LT5h
cHBseVVuaWZvcm1zKCk7Ci19Ci0KLS8vIEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVy
IHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6YXBwbHlUZXh0
dXJlcygpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0g
ICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICBm
b3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBz
YW1wbGVyKyspCi0gICAgewotICAgICAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtT2JqZWN0
LT5nZXRTYW1wbGVyTWFwcGluZyhzYW1wbGVyKTsKLSAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9
IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBTYW1wbGVyVHlwZSB0ZXh0dXJlVHlwZSA9IHBy
b2dyYW1PYmplY3QtPmdldFNhbXBsZXJUeXBlKHNhbXBsZXIpOwotCi0gICAgICAgICAgICBUZXh0
dXJlICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBl
KTsKLQotICAgICAgICAgICAgaWYgKHByb2dyYW1PYmplY3QtPmlzU2FtcGxlckRpcnR5KHNhbXBs
ZXIpIHx8IHRleHR1cmUtPmlzRGlydHkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZS0+aXNDb21wbGV0ZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIHdyYXBTID0gdGV4dHVyZS0+Z2V0V3JhcFMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIHdyYXBUID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIG1pbkZpbHRlciA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwot
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gbWFnRmlsdGVyID0gdGV4dHVyZS0+Z2V0TWFnRmls
dGVyKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2Ft
cGxlciwgRDNEU0FNUF9BRERSRVNTVSwgZXMyZHg6OkNvbnZlcnRUZXh0dXJlV3JhcCh3cmFwUykp
OwotICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShzYW1wbGVyLCBE
M0RTQU1QX0FERFJFU1NWLCBlczJkeDo6Q29udmVydFRleHR1cmVXcmFwKHdyYXBUKSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2FtcGxlciwgRDNEU0FN
UF9NQUdGSUxURVIsIGVzMmR4OjpDb252ZXJ0TWFnRmlsdGVyKG1hZ0ZpbHRlcikpOwotICAgICAg
ICAgICAgICAgICAgICBEM0RURVhUVVJFRklMVEVSVFlQRSBkM2RNaW5GaWx0ZXIsIGQzZE1pcEZp
bHRlcjsKLSAgICAgICAgICAgICAgICAgICAgZXMyZHg6OkNvbnZlcnRNaW5GaWx0ZXIobWluRmls
dGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVyKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoc2FtcGxlciwgRDNEU0FNUF9NSU5GSUxURVIsIGQzZE1p
bkZpbHRlcik7Ci0gICAgICAgICAgICAgICAgICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKHNh
bXBsZXIsIEQzRFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGRldmljZS0+U2V0VGV4dHVyZShzYW1wbGVyLCB0ZXh0dXJlLT5nZXRUZXh0dXJlKCkp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUoc2FtcGxlciwgZ2V0
SW5jb21wbGV0ZVRleHR1cmUodGV4dHVyZVR5cGUpLT5nZXRUZXh0dXJlKCkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0
U2FtcGxlckRpcnR5KHNhbXBsZXIsIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwcm9ncmFtT2JqZWN0LT5pc1NhbXBsZXJEaXJ0eShz
YW1wbGVyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFRleHR1
cmUoc2FtcGxlciwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0U2Ft
cGxlckRpcnR5KHNhbXBsZXIsIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAgIAot
ICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
dm9pZCogcGl4ZWxzKQotewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldFJlYWRG
cmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBH
TF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKGdldFJlYWRG
cmFtZWJ1ZmZlckhhbmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAw
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICB9Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXIt
PmdldFJlbmRlclRhcmdldCgpOwotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERl
dmljZSgpOwotCi0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgcmVuZGVyVGFyZ2V0LT5H
ZXREZXNjKCZkZXNjKTsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNlOwot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVPZmZzY3JlZW5QbGFpblN1cmZhY2Uo
ZGVzYy5XaWR0aCwgZGVzYy5IZWlnaHQsIGRlc2MuRm9ybWF0LCBEM0RQT09MX1NZU1RFTU1FTSwg
JnN5c3RlbVN1cmZhY2UsIE5VTEwpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwotCi0gICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJ
U0FNUExFX05PTkUpCi0gICAgewotICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6
IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBub24tbXVsdGlzYW1wbGVk
IHJlbmRlciB0YXJnZXQKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBkZXZpY2UtPkdldFJlbmRlclRh
cmdldERhdGEocmVuZGVyVGFyZ2V0LCBzeXN0ZW1TdXJmYWNlKTsKLQotICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAg
ICAgICBzd2l0Y2ggKHJlc3VsdCkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBEM0RFUlJf
RFJJVkVSSU5URVJOQUxFUlJPUjoKLSAgICAgICAgICAgIGNhc2UgRDNERVJSX0RFVklDRUxPU1Q6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgRDNETE9DS0VEX1JFQ1QgbG9jazsKLSAgICBSRUNUIHJlY3QgPSB7
c3RkOjptYXgoeCwgMCksCi0gICAgICAgICAgICAgICAgIHN0ZDo6bWF4KHksIDApLAotICAgICAg
ICAgICAgICAgICBzdGQ6Om1pbih4ICsgd2lkdGgsIChpbnQpZGVzYy5XaWR0aCksCi0gICAgICAg
ICAgICAgICAgIHN0ZDo6bWluKHkgKyBoZWlnaHQsIChpbnQpZGVzYy5IZWlnaHQpfTsKLQotICAg
IHJlc3VsdCA9IHN5c3RlbVN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrLCAmcmVjdCwgRDNETE9DS19S
RUFET05MWSk7Ci0KLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAg
cmV0dXJuOyAgIC8vIE5vIHNlbnNpYmxlIGVycm9yIHRvIGdlbmVyYXRlCi0gICAgfQotCi0gICAg
dW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHM7Ci0gICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilwaXhlbHM7Ci0gICAgdW5zaWdu
ZWQgc2hvcnQgKmRlc3QxNiA9ICh1bnNpZ25lZCBzaG9ydCopcGl4ZWxzOwotCi0gICAgR0xzaXpl
aSBvdXRwdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCBtU3RhdGUu
cGFja0FsaWdubWVudCk7Ci0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlY3QuYm90dG9tIC0g
cmVjdC50b3A7IGorKykKLSAgICB7Ci0gICAgICAgIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRf
QThSOEc4QjggJiYKLSAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAg
ICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBGYXN0IHBhdGggZm9yIEVYVF9yZWFkX2Zvcm1hdF9iZ3JhLCBnaXZlbgotICAgICAgICAgICAg
Ly8gYW4gUkdCQSBzb3VyY2UgYnVmZmVyLiAgTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBubwotICAg
ICAgICAgICAgLy8gYWxwaGEgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoIGJlbG93LgotICAgICAg
ICAgICAgbWVtY3B5KGRlc3QgKyBqICogb3V0cHV0UGl0Y2gsCi0gICAgICAgICAgICAgICAgICAg
c291cmNlICsgaiAqIGxvY2suUGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgKHJlY3QucmlnaHQg
LSByZWN0LmxlZnQpICogNCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCByOwotICAgICAgICAgICAgZmxvYXQgZzsKLSAg
ICAgICAgICAgIGZsb2F0IGI7Ci0gICAgICAgICAgICBmbG9hdCBhOwotCi0gICAgICAgICAgICBz
d2l0Y2ggKGRlc2MuRm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEQz
REZNVF9SNUc2QjU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICog
bG9jay5QaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAg
ICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKLSAgICAgICAg
ICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTApICogKDEuMGYgLyAweDA3RTApOwotICAgICAg
ICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9YMVI1RzVCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IHhyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkg
KyBqICogbG9jay5QaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAg
ICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0g
ICAgICAgICAgICAgICAgICAgIGcgPSAoeHJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7
Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAmIDB4N0MwMCkgKiAoMS4wZiAvIDB4N0Mw
MCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNl
ICsgMiAqIGkgKyBqICogbG9jay5QaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChh
cmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFy
Z2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAgICAgICAgICBnID0g
KGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwotICAgICAgICAgICAgICAgICAgICBy
ID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4
Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
YXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogbG9jay5QaXRjaCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAv
IDB4RkYwMDAwMDApOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZG
KSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAm
IDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgICAgICAgICAg
ciA9IChhcmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogbG9j
ay5QaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAg
ICAgICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAg
ICAgICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAw
MEZGMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgx
LjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25l
ZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBsb2NrLlBpdGNoKTsKLQotICAgICAgICAgICAg
ICAgICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAzRkYpICogKDEuMGYgLyAweDAw
MDAwM0ZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAo
MS4wZiAvIDB4MDAwRkZDMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNG
RjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRw
dXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVk
IGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSAr
IGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0g
KHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9C
R1JBX0VYVDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAg
ICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hh
cikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAq
IG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5z
aWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQg
KiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAu
NWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAv
LyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBp
eGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBl
IGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQg
ICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAg
IDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAg
IDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAg
ICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29t
cG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAg
ZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8
PCAxMil8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIHIg
KyAwLjVmKSA8PCA4KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2ln
bmVkIHNob3J0KSgxNSAqIGIgKyAwLjVmKSA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVW
X0VYVDoKLSAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdM
IHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAg
ICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4
ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAg
ICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8g
fCA0dGggfCAgICAgICAgICAzcmQgICAgICAgICAgIHwgICAgICAgICAgIDJuZCAgICAgICAgICB8
ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2Yg
QkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28g
Zm9ydGguCi0gICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8g
c2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNp
Z25lZCBzaG9ydCkoICAgICBhICsgMC41ZikgPDwgMTUpIHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDEwKSB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8
PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9GT1JNQVQKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTog
ICAvLyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9IAot
ICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41Zikg
PDwgMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoNjMgKiBn
ICsgMC41ZikgPDwgNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9y
dCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3lzdGVtU3Vy
ZmFjZS0+VW5sb2NrUmVjdCgpOwotCi0gICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwotfQot
Ci12b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKLXsKLSAgICBGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlmICgh
ZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9
IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAgICAgZXJyb3IoR0xfSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7Ci0gICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0gICAgRFdPUkQgZmxhZ3MgPSAwOwotCi0gICAg
aWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAgIHsKLSAgICAgICAgbWFzayAmPSB+
R0xfQ09MT1JfQlVGRkVSX0JJVDsKLQotICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdl
dENvbG9yYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZs
YWdzIHw9IEQzRENMRUFSX1RBUkdFVDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtYXNr
ICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKLSAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX0RFUFRI
X0JVRkZFUl9CSVQ7Ci0gICAgICAgIGlmIChtU3RhdGUuZGVwdGhNYXNrICYmIGZyYW1lYnVmZmVy
T2JqZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgR0x1aW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLQotICAgIGlmIChtYXNrICYgR0xfU1RF
TkNJTF9CVUZGRVJfQklUKQotICAgIHsKLSAgICAgICAgbWFzayAmPSB+R0xfU1RFTkNJTF9CVUZG
RVJfQklUOwotICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJU
eXBlKCkgIT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCkt
PmdldERlcHRoU3RlbmNpbCgpOwotICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0g
ICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOwotCi0gICAgICAgICAgICB1
bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBlczJkeDo6R2V0U3RlbmNpbFNpemUoZGVzYy5Gb3Jt
YXQpOwotICAgICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVuY2lsU2l6ZSkg
LSAxOwotCi0gICAgICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgIT0gMCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICB9Ci0KLSAgICBpZiAo
IWFwcGx5UmVuZGVyVGFyZ2V0KHRydWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Np
c3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKLSAgICB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBEM0RDT0xPUiBjb2xvciA9IEQzRENPTE9SX0FSR0IodW5vcm08OD4o
bVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSksIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bm9ybTw4PihtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCks
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm9ybTw4Piht
U3RhdGUuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVub3JtPDg+KG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUuYmx1ZSkp
OwotICAgIGZsb2F0IGRlcHRoID0gY2xhbXAwMShtU3RhdGUuZGVwdGhDbGVhclZhbHVlKTsKLSAg
ICBpbnQgc3RlbmNpbCA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7Ci0K
LSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldFJlbmRlclRhcmdldCgpOwotCi0gICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgcmVu
ZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsKLQotICAgIGJvb2wgYWxwaGFVbm1hc2tlZCA9IChl
czJkeDo6R2V0QWxwaGFTaXplKGRlc2MuRm9ybWF0KSA9PSAwKSB8fCBtU3RhdGUuY29sb3JNYXNr
QWxwaGE7Ci0KLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoZmxhZ3Mg
JiBEM0RDTEVBUl9TVEVOQ0lMKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChtU3RhdGUuc3RlbmNpbFdyaXRlbWFzayAmIHN0ZW5jaWxVbm1hc2tlZCkgIT0gc3Rl
bmNpbFVubWFza2VkOwotICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoZmxh
Z3MgJiBEM0RDTEVBUl9UQVJHRVQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICEobVN0YXRlLmNvbG9yTWFza1JlZCAmJiBtU3RhdGUuY29sb3JNYXNrR3JlZW4gJiYK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuY29sb3JNYXNr
Qmx1ZSAmJiBhbHBoYVVubWFza2VkKTsKLQotICAgIGlmIChuZWVkTWFza2VkQ29sb3JDbGVhciB8
fCBuZWVkTWFza2VkU3RlbmNpbENsZWFyKQotICAgIHsKLSAgICAgICAgLy8gU3RhdGUgd2hpY2gg
aXMgYWx0ZXJlZCBpbiBhbGwgcGF0aHMgZnJvbSB0aGlzIHBvaW50IHRvIHRoZSBjbGVhciBjYWxs
IGlzIHNhdmVkLgotICAgICAgICAvLyBTdGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIG9ubHkgc29t
ZSBwYXRocyB3aWxsIGJlIGZsYWdnZWQgZGlydHkgaW4gdGhlIGNhc2UgdGhhdAotICAgICAgICAv
LyAgdGhhdCBwYXRoIGlzIHRha2VuLgotICAgICAgICBIUkVTVUxUIGhyOwotICAgICAgICBpZiAo
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9PSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBo
ciA9IGRldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSB8fCBociA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9G
TUVNT1JZKTsKLQotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJ
VEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfWkZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19aRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAgICAgICAgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19GSUxMTU9ERSwgRDNERklMTF9TT0xJRCk7Ci0gICAgICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBVEVTVEVOQUJMRSwgRkFMU0Up
OwotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5B
QkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NM
SVBQTEFORUVOQUJMRSwgMCk7Ci0gICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOwotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgICAgICBkZXZpY2UtPlNl
dFBpeGVsU2hhZGVyKE5VTEwpOwotICAgICAgICAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIo
TlVMTCk7Ci0gICAgICAgICAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwgRDNERlZG
X0RJRkZVU0UpOwotICAgICAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKDAsIDEp
OwotCi0gICAgICAgICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbU1hc2tlZENsZWFy
U2F2ZWRTdGF0ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSB8fCBociA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBociA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEFTU0VSVChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpOwotCi0g
ICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGhyID0gbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+Q2FwdHVyZSgpOwotICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICB9Ci0KLSAgICAgICAgZGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRlVOQywgRDNEQ01QX0FMV0FZUyk7Ci0gICAgICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRkFMU0UpOwotICAgICAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NVTExNT0RFLCBEM0RDVUxMX05PTkUpOwotICAg
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0ZJTExNT0RFLCBEM0RGSUxMX1NPTElE
KTsKLSAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQVRFU1RFTkFCTEUs
IEZBTFNFKTsKLSAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5E
RU5BQkxFLCBGQUxTRSk7Ci0gICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJ
UFBMQU5FRU5BQkxFLCAwKTsKLQotICAgICAgICBpZiAoZmxhZ3MgJiBEM0RDTEVBUl9UQVJHRVQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09M
T1JXUklURUVOQUJMRSwgKG1TdGF0ZS5jb2xvck1hc2tSZWQgICA/IEQzRENPTE9SV1JJVEVFTkFC
TEVfUkVEICAgOiAwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChtU3RhdGUuY29sb3JNYXNrR3JlZW4gPyBEM0RDT0xPUldSSVRF
RU5BQkxFX0dSRUVOIDogMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAobVN0YXRlLmNvbG9yTWFza0JsdWUgID8gRDNEQ09MT1JX
UklURUVOQUJMRV9CTFVFICA6IDApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TdGF0ZS5jb2xvck1hc2tBbHBoYSA/IEQzRENP
TE9SV1JJVEVFTkFCTEVfQUxQSEEgOiAwKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJ
VEVFTkFCTEUsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAh
PSAweDAgJiYgKGZsYWdzICYgRDNEQ0xFQVJfU1RFTkNJTCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJVRSk7Ci0g
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1P
REUsIEZBTFNFKTsKLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RF
TkNJTEZVTkMsIEQzRENNUF9BTFdBWVMpOwotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMUkVGLCBzdGVuY2lsKTsKLSAgICAgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1h
c2spOwotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRkFJ
TCwgRDNEU1RFTkNJTE9QX1JFUExBQ0UpOwotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19TVEVOQ0lMWkZBSUwsIEQzRFNURU5DSUxPUF9SRVBMQUNFKTsKLSAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTFBBU1MsIEQzRFNURU5DSUxP
UF9SRVBMQUNFKTsKLSAgICAgICAgICAgIG1TdGVuY2lsU3RhdGVEaXJ0eSA9IHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXZpY2UtPlNldFJl
bmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7Ci0gICAgICAgIGRldmljZS0+U2V0VmVy
dGV4U2hhZGVyKE5VTEwpOwotICAgICAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXIHwg
RDNERlZGX0RJRkZVU0UpOwotICAgICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwg
MSk7Ci0KLSAgICAgICAgc3RydWN0IFZlcnRleAotICAgICAgICB7Ci0gICAgICAgICAgICBmbG9h
dCB4LCB5LCB6LCB3OwotICAgICAgICAgICAgRDNEQ09MT1IgZGlmZnVzZTsKLSAgICAgICAgfTsK
LQotICAgICAgICBWZXJ0ZXggcXVhZFs0XTsKLSAgICAgICAgcXVhZFswXS54ID0gMC4wZjsKLSAg
ICAgICAgcXVhZFswXS55ID0gKGZsb2F0KWRlc2MuSGVpZ2h0OwotICAgICAgICBxdWFkWzBdLnog
PSAwLjBmOwotICAgICAgICBxdWFkWzBdLncgPSAxLjBmOwotICAgICAgICBxdWFkWzBdLmRpZmZ1
c2UgPSBjb2xvcjsKLQotICAgICAgICBxdWFkWzFdLnggPSAoZmxvYXQpZGVzYy5XaWR0aDsKLSAg
ICAgICAgcXVhZFsxXS55ID0gKGZsb2F0KWRlc2MuSGVpZ2h0OwotICAgICAgICBxdWFkWzFdLnog
PSAwLjBmOwotICAgICAgICBxdWFkWzFdLncgPSAxLjBmOwotICAgICAgICBxdWFkWzFdLmRpZmZ1
c2UgPSBjb2xvcjsKLQotICAgICAgICBxdWFkWzJdLnggPSAwLjBmOwotICAgICAgICBxdWFkWzJd
LnkgPSAwLjBmOwotICAgICAgICBxdWFkWzJdLnogPSAwLjBmOwotICAgICAgICBxdWFkWzJdLncg
PSAxLjBmOwotICAgICAgICBxdWFkWzJdLmRpZmZ1c2UgPSBjb2xvcjsKLQotICAgICAgICBxdWFk
WzNdLnggPSAoZmxvYXQpZGVzYy5XaWR0aDsKLSAgICAgICAgcXVhZFszXS55ID0gMC4wZjsKLSAg
ICAgICAgcXVhZFszXS56ID0gMC4wZjsKLSAgICAgICAgcXVhZFszXS53ID0gMS4wZjsKLSAgICAg
ICAgcXVhZFszXS5kaWZmdXNlID0gY29sb3I7Ci0KLSAgICAgICAgZGlzcGxheS0+c3RhcnRTY2Vu
ZSgpOwotICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklBTkdMRVNUUklQ
LCAyLCBxdWFkLCBzaXplb2YoVmVydGV4KSk7Ci0KLSAgICAgICAgaWYgKGZsYWdzICYgRDNEQ0xF
QVJfWkJVRkZFUikKLSAgICAgICAgewotICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsKLSAgICAgICAgICAgIGRldmljZS0+Q2xlYXIo
MCwgTlVMTCwgRDNEQ0xFQVJfWkJVRkZFUiwgY29sb3IsIGRlcHRoLCBzdGVuY2lsKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlICE9IE5VTEwpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUtPkFwcGx5KCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoZmxhZ3MpCi0gICAgewotICAgICAgICBkZXZpY2Ut
PkNsZWFyKDAsIE5VTEwsIGZsYWdzLCBjb2xvciwgZGVwdGgsIHN0ZW5jaWwpOwotICAgIH0KLX0K
LQotdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xz
aXplaSBjb3VudCkKLXsKLSAgICBpZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOwotICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZl
VHlwZTsKLSAgICBpbnQgcHJpbWl0aXZlQ291bnQ7Ci0KLSAgICBpZighZXMyZHg6OkNvbnZlcnRQ
cmltaXRpdmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50
KSkKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICBpZiAocHJp
bWl0aXZlQ291bnQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBhcHBseVN0YXRlKG1vZGUpOwotCi0gICAgVHJhbnNsYXRlZEluZGV4RGF0YSBp
bmRleEluZm87Ci0gICAgYm9vbCB1c2VJbmRleGluZzsKLSAgICBHTGVudW0gZXJyID0gYXBwbHlW
ZXJ0ZXhCdWZmZXIobW9kZSwgZmlyc3QsIGNvdW50LCAmdXNlSW5kZXhpbmcsICZpbmRleEluZm8p
OwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoZXJyKTsKLSAgICB9Ci0KLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVz
KCk7Ci0KLSAgICBpZiAoIWdldEN1cnJlbnRQcm9ncmFtKCktPnZhbGlkYXRlU2FtcGxlcnMoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
fQotCi0gICAgaWYgKCFjdWxsU2tpcHNEcmF3KG1vZGUpKQotICAgIHsKLSAgICAgICAgZGlzcGxh
eS0+c3RhcnRTY2VuZSgpOwotICAgICAgICBpZiAodXNlSW5kZXhpbmcpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGRldmljZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgLShJ
TlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5tYXhJ
bmRleC1pbmRleEluZm8ubWluSW5kZXgrMSwgaW5kZXhJbmZvLm9mZnNldC9pbmRleEluZm8uaW5k
ZXhTaXplLCBwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgMCwg
cHJpbWl0aXZlQ291bnQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbnRleHQ6OmRy
YXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIGluZGljZXMpCi17Ci0gICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQot
ICAgIGlmICghaW5kaWNlcyAmJiAhbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOwotICAgIElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgIEQzRFBSSU1JVElWRVRZUEUgcHJpbWl0aXZl
VHlwZTsKLSAgICBpbnQgcHJpbWl0aXZlQ291bnQ7Ci0KLSAgICBpZighZXMyZHg6OkNvbnZlcnRQ
cmltaXRpdmVUeXBlKG1vZGUsIGNvdW50LCAmcHJpbWl0aXZlVHlwZSwgJnByaW1pdGl2ZUNvdW50
KSkKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICBpZiAocHJp
bWl0aXZlQ291bnQgPD0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KGZhbHNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBhcHBseVN0YXRlKG1vZGUpOwotCi0gICAgVHJhbnNsYXRlZEluZGV4RGF0YSBp
bmRleEluZm87Ci0gICAgR0xlbnVtIGVyciA9IGFwcGx5SW5kZXhCdWZmZXIoaW5kaWNlcywgY291
bnQsIG1vZGUsIHR5cGUsICZpbmRleEluZm8pOwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1Ip
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsKLSAgICB9Ci0KLSAgICBlcnIgPSBh
cHBseVZlcnRleEJ1ZmZlcihpbmRleEluZm8pOwotICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1Ip
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoZXJyKTsKLSAgICB9Ci0KLSAgICBhcHBseVNo
YWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVzKCk7Ci0KLSAgICBpZiAoIWdldEN1cnJlbnRQcm9n
cmFtKCktPnZhbGlkYXRlU2FtcGxlcnMoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKCFjdWxsU2tpcHNEcmF3KG1v
ZGUpKQotICAgIHsKLSAgICAgICAgZGlzcGxheS0+c3RhcnRTY2VuZSgpOwotICAgICAgICBkZXZp
Y2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIC0oSU5UKWluZGV4SW5mby5t
aW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWF4SW5kZXgtaW5kZXhJbmZv
Lm1pbkluZGV4KzEsIGluZGV4SW5mby5vZmZzZXQvaW5kZXhJbmZvLmluZGV4U2l6ZSwgcHJpbWl0
aXZlQ291bnQpOwotICAgIH0KLX0KLQotdm9pZCBDb250ZXh0OjpmaW5pc2goKQotewotICAgIGVn
bDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKLSAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICBJRGlyZWN0M0RRdWVyeTkgKm9jY2x1c2lvblF1
ZXJ5ID0gTlVMTDsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVRdWVyeShE
M0RRVUVSWVRZUEVfT0NDTFVTSU9OLCAmb2NjbHVzaW9uUXVlcnkpOwotCi0gICAgaWYgKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgaWYgKG9jY2x1c2lvblF1ZXJ5
KQotICAgIHsKLSAgICAgICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKnNhdmVkU3RhdGUgPSBOVUxM
OwotICAgICAgICBkZXZpY2UtPkNyZWF0ZVN0YXRlQmxvY2soRDNEU0JUX0FMTCwgJnNhdmVkU3Rh
dGUpOwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gb2NjbHVzaW9uUXVlcnktPklzc3VlKEQz
RElTU1VFX0JFR0lOKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAg
ICAgICAvLyBSZW5kZXIgc29tZXRoaW5nIG91dHNpZGUgdGhlIHJlbmRlciB0YXJnZXQKLSAgICAg
ICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKDAsIDEpOwotICAgICAgICBkZXZpY2UtPlNl
dFBpeGVsU2hhZGVyKE5VTEwpOwotICAgICAgICBkZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxM
KTsKLSAgICAgICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyk7Ci0gICAgICAgIGZsb2F0
IGRhdGFbNF0gPSB7LTEuMGYsIC0xLjBmLCAtMS4wZiwgMS4wZn07Ci0gICAgICAgIGRpc3BsYXkt
PnN0YXJ0U2NlbmUoKTsKLSAgICAgICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfUE9J
TlRMSVNULCAxLCBkYXRhLCBzaXplb2YoZGF0YSkpOwotCi0gICAgICAgIHJlc3VsdCA9IG9jY2x1
c2lvblF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwotCi0gICAgICAgIHdoaWxlIChvY2NsdXNpb25RdWVyeS0+R2V0RGF0YShOVUxM
LCAwLCBEM0RHRVREQVRBX0ZMVVNIKSA9PSBTX0ZBTFNFKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBLZWVwIHBvbGxpbmcsIGJ1dCBhbGxvdyBvdGhlciB0aHJlYWRzIHRvIGRvIHNvbWV0aGlu
ZyB1c2VmdWwgZmlyc3QKLSAgICAgICAgICAgIFNsZWVwKDApOwotICAgICAgICB9Ci0KLSAgICAg
ICAgb2NjbHVzaW9uUXVlcnktPlJlbGVhc2UoKTsKLQotICAgICAgICBpZiAoc2F2ZWRTdGF0ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgc2F2ZWRTdGF0ZS0+QXBwbHkoKTsKLSAgICAgICAgICAg
IHNhdmVkU3RhdGUtPlJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb250
ZXh0OjpmbHVzaCgpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNl
KCk7Ci0gICAgSURpcmVjdDNEUXVlcnk5ICpldmVudFF1ZXJ5ID0gTlVMTDsKLQotICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfRVZFTlQsICZldmVu
dFF1ZXJ5KTsKLQotICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LQotICAgIGlmIChldmVudFF1ZXJ5KQotICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBl
dmVudFF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwotCi0gICAgICAgIHJlc3VsdCA9IGV2ZW50UXVlcnktPkdldERhdGEoTlVMTCwg
MCwgRDNER0VUREFUQV9GTFVTSCk7Ci0gICAgICAgIGV2ZW50UXVlcnktPlJlbGVhc2UoKTsKLQot
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
dm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRW51bSgpCi17Ci0gICAgbUludmFsaWRFbnVtID0g
dHJ1ZTsKLX0KLQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkVmFsdWUoKQotewotICAgIG1J
bnZhbGlkVmFsdWUgPSB0cnVlOwotfQotCi12b2lkIENvbnRleHQ6OnJlY29yZEludmFsaWRPcGVy
YXRpb24oKQotewotICAgIG1JbnZhbGlkT3BlcmF0aW9uID0gdHJ1ZTsKLX0KLQotdm9pZCBDb250
ZXh0OjpyZWNvcmRPdXRPZk1lbW9yeSgpCi17Ci0gICAgbU91dE9mTWVtb3J5ID0gdHJ1ZTsKLX0K
LQotdm9pZCBDb250ZXh0OjpyZWNvcmRJbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24oKQotewot
ICAgIG1JbnZhbGlkRnJhbWVidWZmZXJPcGVyYXRpb24gPSB0cnVlOwotfQotCi0vLyBHZXQgb25l
IG9mIHRoZSByZWNvcmRlZCBlcnJvcnMgYW5kIGNsZWFyIGl0cyBmbGFnLCBpZiBhbnkuCi0vLyBb
T3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjUgcGFnZSAxMy4KLUdMZW51bSBDb250ZXh0Ojpn
ZXRFcnJvcigpCi17Ci0gICAgaWYgKG1JbnZhbGlkRW51bSkKLSAgICB7Ci0gICAgICAgIG1JbnZh
bGlkRW51bSA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9JTlZBTElEX0VOVU07Ci0gICAg
fQotCi0gICAgaWYgKG1JbnZhbGlkVmFsdWUpCi0gICAgewotICAgICAgICBtSW52YWxpZFZhbHVl
ID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfVkFMVUU7Ci0gICAgfQotCi0g
ICAgaWYgKG1JbnZhbGlkT3BlcmF0aW9uKQotICAgIHsKLSAgICAgICAgbUludmFsaWRPcGVyYXRp
b24gPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAg
fQotCi0gICAgaWYgKG1PdXRPZk1lbW9yeSkKLSAgICB7Ci0gICAgICAgIG1PdXRPZk1lbW9yeSA9
IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwotICAgIH0KLQotICAg
IGlmIChtSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKQotICAgIHsKLSAgICAgICAgbUludmFs
aWRGcmFtZWJ1ZmZlck9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBHTF9JTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJS
T1I7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSBjb25zdAotewot
ICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXRN
YXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbU1heFN1cHBvcnRlZFNh
bXBsZXM7Ci19Ci0KLWludCBDb250ZXh0OjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RG
T1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdAotewotICAgIGlmIChyZXF1ZXN0ZWQg
PT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZXF1ZXN0ZWQ7Ci0gICAgfQotCi0gICAgc3Rk
OjptYXA8RDNERk9STUFULCBib29sICo+Ojpjb25zdF9pdGVyYXRvciBpdHIgPSBtTXVsdGlTYW1w
bGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKLSAgICBpZiAoaXRyID09IG1NdWx0aVNhbXBsZVN1cHBv
cnQuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZm9yIChp
bnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpCi0g
ICAgewotICAgICAgICBpZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9O
T05NQVNLQUJMRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgQ29udGV4dDo6c3VwcG9ydHNDb21w
cmVzc2VkVGV4dHVyZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU3VwcG9ydHNDb21wcmVzc2Vk
VGV4dHVyZXM7Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIp
Ci17Ci0gICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi45IHBhZ2UgMjI6Ci0gICAg
Ly8gSWYgYSBidWZmZXIgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXQgaXMgYm91bmQsIGFsbCBi
aW5kaW5ncyB0byB0aGF0IG9iamVjdCBpbiB0aGUgY3VycmVudCBjb250ZXh0Ci0gICAgLy8gKGku
ZS4gaW4gdGhlIHRocmVhZCB0aGF0IGNhbGxlZCBEZWxldGUtQnVmZmVycykgYXJlIHJlc2V0IHRv
IHplcm8uCi0KLSAgICBpZiAobVN0YXRlLmFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQotICAg
IHsKLSAgICAgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBp
ZiAobVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICB7Ci0gICAg
ICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZv
ciAoaW50IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlKyspCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRy
aWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQoTlVM
TCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShH
THVpbnQgdGV4dHVyZSkKLXsKLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjgg
cGFnZSA4NDoKLSAgICAvLyBJZiBhIHRleHR1cmUgb2JqZWN0IGlzIGRlbGV0ZWQsIGl0IGlzIGFz
IGlmIGFsbCB0ZXh0dXJlIHVuaXRzIHdoaWNoIGFyZSBib3VuZCB0byB0aGF0IHRleHR1cmUgb2Jq
ZWN0IGFyZQotICAgIC8vIHJlYm91bmQgdG8gdGV4dHVyZSBvYmplY3QgemVybwotCi0gICAgZm9y
IChpbnQgdHlwZSA9IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09VTlQ7IHR5cGUrKykKLSAgICB7
Ci0gICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFM7IHNhbXBsZXIrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5pZCgpID09IHRleHR1cmUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJd
LnNldChOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFtP
cGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNCBwYWdlIDExMjoKLSAgICAvLyBJZiBhIHRleHR1
cmUgb2JqZWN0IGlzIGRlbGV0ZWQgd2hpbGUgaXRzIGltYWdlIGlzIGF0dGFjaGVkIHRvIHRoZSBj
dXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIsIHRoZW4gaXQgaXMKLSAgICAvLyBhcyBpZiBGcmFt
ZWJ1ZmZlclRleHR1cmUyRCBoYWQgYmVlbiBjYWxsZWQsIHdpdGggYSB0ZXh0dXJlIG9mIDAsIGZv
ciBlYWNoIGF0dGFjaG1lbnQgcG9pbnQgdG8gd2hpY2ggdGhpcwotICAgIC8vIGltYWdlIHdhcyBh
dHRhY2hlZCBpbiB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgotCi0gICAgRnJhbWVi
dWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgIEZyYW1l
YnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlm
IChyZWFkRnJhbWVidWZmZXIpCi0gICAgewotICAgICAgICByZWFkRnJhbWVidWZmZXItPmRldGFj
aFRleHR1cmUodGV4dHVyZSk7Ci0gICAgfQotCi0gICAgaWYgKGRyYXdGcmFtZWJ1ZmZlciAmJiBk
cmF3RnJhbWVidWZmZXIgIT0gcmVhZEZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAgZHJhd0Zy
YW1lYnVmZmVyLT5kZXRhY2hUZXh0dXJlKHRleHR1cmUpOwotICAgIH0KLX0KLQotdm9pZCBDb250
ZXh0OjpkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgLy8gW09w
ZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA3OgotICAgIC8vIElmIGEgZnJhbWVi
dWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gdGhlIHRhcmdldCBGUkFNRUJVRkZFUiBp
cyBkZWxldGVkLCBpdCBpcyBhcyB0aG91Z2gKLSAgICAvLyBCaW5kRnJhbWVidWZmZXIgaGFkIGJl
ZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IG9mIEZSQU1FQlVGRkVSIGFuZCBmcmFtZWJ1ZmZl
ciBvZiB6ZXJvLgotCi0gICAgaWYgKG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIgPT0gZnJhbWVidWZm
ZXIpCi0gICAgewotICAgICAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOwotICAgIH0KLQotICAg
IGlmIChtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyID09IGZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAg
ICAgYmluZERyYXdGcmFtZWJ1ZmZlcigwKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4dDo6ZGV0
YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgLy8gW09wZW5HTCBF
UyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA5OgotICAgIC8vIElmIGEgcmVuZGVyYnVmZmVy
IHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIFJFTkRFUkJVRkZFUiBpcyBkZWxldGVkLCBpdCBp
cyBhcyB0aG91Z2ggQmluZFJlbmRlcmJ1ZmZlcgotICAgIC8vIGhhZCBiZWVuIGV4ZWN1dGVkIHdp
dGggdGhlIHRhcmdldCBSRU5ERVJCVUZGRVIgYW5kIG5hbWUgb2YgemVyby4KLQotICAgIGlmICht
U3RhdGUucmVuZGVyYnVmZmVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyKQotICAgIHsKLSAgICAgICAg
YmluZFJlbmRlcmJ1ZmZlcigwKTsKLSAgICB9Ci0KLSAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0g
c2VjdGlvbiA0LjQgcGFnZSAxMTE6Ci0gICAgLy8gSWYgYSByZW5kZXJidWZmZXIgb2JqZWN0IGlz
IGRlbGV0ZWQgd2hpbGUgaXRzIGltYWdlIGlzIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50bHkgYm91
bmQgZnJhbWVidWZmZXIsCi0gICAgLy8gdGhlbiBpdCBpcyBhcyBpZiBGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciBoYWQgYmVlbiBjYWxsZWQsIHdpdGggYSByZW5kZXJidWZmZXIgb2YgMCwgZm9yIGVh
Y2ggYXR0YWNobWVudAotICAgIC8vIHBvaW50IHRvIHdoaWNoIHRoaXMgaW1hZ2Ugd2FzIGF0dGFj
aGVkIGluIHRoZSBjdXJyZW50bHkgYm91bmQgZnJhbWVidWZmZXIuCi0KLSAgICBGcmFtZWJ1ZmZl
ciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgRnJhbWVidWZm
ZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKHJl
YWRGcmFtZWJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVu
ZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci0gICAgfQotCi0gICAgaWYgKGRyYXdGcmFtZWJ1ZmZl
ciAmJiBkcmF3RnJhbWVidWZmZXIgIT0gcmVhZEZyYW1lYnVmZmVyKQotICAgIHsKLSAgICAgICAg
ZHJhd0ZyYW1lYnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLSAgICB9
Ci19Ci0KLVRleHR1cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFNhbXBsZXJUeXBl
IHR5cGUpCi17Ci0gICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV07Ci0K
LSAgICBpZiAodCA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IEdMdWJ5dGUg
Y29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07Ci0KLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAg
ICAgICB7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICAvLyBkZWZhdWx0IGZhbGxzIHRocm91Z2ggdG8gU0FNUExFUl8yRAotCi0gICAg
ICAgICAgY2FzZSBTQU1QTEVSXzJEOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRl
eHR1cmUyRCAqaW5jb21wbGV0ZTJkID0gbmV3IFRleHR1cmUyRChUZXh0dXJlOjpJTkNPTVBMRVRF
X1RFWFRVUkVfSUQpOwotICAgICAgICAgICAgICAgIGluY29tcGxldGUyZC0+c2V0SW1hZ2UoMCwg
R0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAg
ICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlMmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU0FNUExFUl9DVUJFOgotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBUZXh0dXJlQ3ViZU1hcCAqaW5jb21wbGV0ZUN1YmUgPSBuZXcgVGV4dHVy
ZUN1YmVNYXAoVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKLQotICAgICAgICAgICAg
ICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1
YmUtPnNldEltYWdlTmVnWCgwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBv
c1koMCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3Ip
OwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIEdMX1JHQkEs
IDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAg
ICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVD
dWJlLT5zZXRJbWFnZU5lZ1ooMCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgMSwgY29sb3IpOwotCi0gICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlQ3ViZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgbUlu
Y29tcGxldGVUZXh0dXJlc1t0eXBlXSA9IHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHQ7Ci19Ci0K
LWJvb2wgQ29udGV4dDo6Y3VsbFNraXBzRHJhdyhHTGVudW0gZHJhd01vZGUpCi17Ci0gICAgcmV0
dXJuIG1TdGF0ZS5jdWxsRmFjZSAmJiBtU3RhdGUuY3VsbE1vZGUgPT0gR0xfRlJPTlRfQU5EX0JB
Q0sgJiYgaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOwotfQotCi1ib29sIENvbnRleHQ6OmlzVHJp
YW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGRyYXdNb2RlKQotICAg
IHsKLSAgICAgIGNhc2UgR0xfVFJJQU5HTEVTOgotICAgICAgY2FzZSBHTF9UUklBTkdMRV9GQU46
Ci0gICAgICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIGNhc2UgR0xfUE9JTlRTOgotICAgICAgY2FzZSBHTF9MSU5FUzoKLSAgICAgIGNhc2UgR0xf
TElORV9MT09QOgotICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZXMpCi17Ci0gICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUyk7Ci0KLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVu
dFZhbHVlWzBdID0gdmFsdWVzWzBdOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhd
Lm1DdXJyZW50VmFsdWVbMV0gPSB2YWx1ZXNbMV07Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsyXSA9IHZhbHVlc1syXTsKLSAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzNdID0gdmFsdWVzWzNdOwotCi0gICAgbVZl
cnRleERhdGFNYW5hZ2VyLT5kaXJ0eUN1cnJlbnRWYWx1ZXMoKTsKLX0KLQotdm9pZCBDb250ZXh0
Ojppbml0RXh0ZW5zaW9uU3RyaW5nKCkKLXsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9P
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9F
WFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAiOwotICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX2JsaXQgIjsKLSAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
cmdiOF9yZ2JhOCAiOwotCi0gICAgaWYgKHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkpCi0g
ICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9jb21wcmVz
c2lvbl9keHQxICI7Ci0gICAgfQotCi0gICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAh
PSAwKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUgIjsKLSAgICB9Ci0KLSAgICBpZiAobUJ1ZmZlckJhY2tFbmQtPnN1
cHBvcnRJbnRJbmRpY2VzKCkpCi0gICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9PRVNfZWxlbWVudF9pbmRleF91aW50ICI7Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmc6OnNp
emVfdHlwZSBlbmQgPSBtRXh0ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKLSAg
ICBpZiAoZW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgIHsKLSAgICAgICAgbUV4dGVuc2lv
blN0cmluZy5yZXNpemUoZW5kKzEpOwotICAgIH0KLX0KLQotY29uc3QgY2hhciAqQ29udGV4dDo6
Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUV4dGVuc2lvblN0cmlu
Zy5jX3N0cigpOwotfQotCi12b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNY
MCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBH
TGludCBkc3RZMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFz
aykKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAg
IEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAg
ICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0K
LSAgICBpZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCByZWFkRnJhbWVidWZmZXItPmNvbXBsZXRlbmVz
cygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIHx8Ci0gICAgICAgICFkcmF3RnJhbWVidWZm
ZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9D
T01QTEVURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U2Ft
cGxlcygpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgIH0KLQotICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICBSRUNUIGRlc3RSZWN0
OwotCi0gICAgaWYgKHNyY1gwIDwgc3JjWDEpCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0Lmxl
ZnQgPSBzcmNYMDsKLSAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHNyY1gxOwotICAgICAgICBk
ZXN0UmVjdC5sZWZ0ID0gZHN0WDA7Ci0gICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDE7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gxOwot
ICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDE7Ci0gICAgICAgIHNvdXJjZVJlY3QucmlnaHQg
PSBzcmNYMDsKLSAgICAgICAgZGVzdFJlY3QucmlnaHQgPSBkc3RYMDsKLSAgICB9Ci0KLSAgICAv
LyBBcmd1bWVudHMgdG8gU3RyZXRjaFJlY3QgbXVzdCBiZSBpbiBEM0Qtc3R5bGUgKDAtdG9wKSBj
b29yZGluYXRlcywgc28gd2UgbXVzdCAKLSAgICAvLyBmbGlwIG91ciBZLXZhbHVlcyBoZXJlCi0g
ICAgaWYgKHNyY1kwIDwgc3JjWTEpCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9
IHNyY1kxOwotICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMTsKLSAgICAgICAgc291cmNl
UmVjdC50b3AgPSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3QudG9wID0gZHN0WTA7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTA7Ci0gICAg
ICAgIGRlc3RSZWN0LmJvdHRvbSA9IGRzdFkwOwotICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNy
Y1kxOwotICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMTsKLSAgICB9Ci0KLSAgICBSRUNUIHNv
dXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0OwotICAgIFJFQ1QgZGVzdFNjaXNzb3JlZFJl
Y3QgPSBkZXN0UmVjdDsKLQotICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCi0gICAgewotICAg
ICAgICAvLyBPbmx5IHdyaXRlIHRvIHBhcnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZl
ciB3aGljaCBwYXNzIHRoZSBzY2lzc29yIHRlc3QKLSAgICAgICAgLy8gUGxlYXNlIG5vdGU6IHRo
ZSBkZXN0UmVjdCBpcyBub3cgaW4gRDNELXN0eWxlIGNvb3JkaW5hdGVzLCBzbyB0aGUgKnRvcCog
b2YgdGhlCi0gICAgICAgIC8vIHJlY3Qgd2lsbCBiZSBjaGVja2VkIGFnYWluc3Qgc2Npc3Nvclks
IHJhdGhlciB0aGFuIHRoZSBib3R0b20uCi0gICAgICAgIGlmIChkZXN0UmVjdC5sZWZ0IDwgbVN0
YXRlLnNjaXNzb3JYKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeERpZmYgPSBtU3RhdGUu
c2Npc3NvclggLSBkZXN0UmVjdC5sZWZ0OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3Qu
bGVmdCA9IG1TdGF0ZS5zY2lzc29yWDsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qu
bGVmdCArPSB4RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZXN0UmVjdC5yaWdodCA+
IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGludCB4RGlmZiA9IGRlc3RSZWN0LnJpZ2h0IC0gKG1TdGF0ZS5zY2lzc29yWCArIG1T
dGF0ZS5zY2lzc29yV2lkdGgpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QucmlnaHQg
PSBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRoOwotICAgICAgICAgICAgc291
cmNlU2Npc3NvcmVkUmVjdC5yaWdodCAtPSB4RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChkZXN0UmVjdC50b3AgPCBtU3RhdGUuc2Npc3NvclkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yWSAtIGRlc3RSZWN0LnRvcDsKLSAgICAgICAgICAg
IGRlc3RTY2lzc29yZWRSZWN0LnRvcCA9IG1TdGF0ZS5zY2lzc29yWTsKLSAgICAgICAgICAgIHNv
dXJjZVNjaXNzb3JlZFJlY3QudG9wICs9IHlEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGRlc3RSZWN0LmJvdHRvbSA+IG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeURpZmYgPSBkZXN0UmVjdC5ib3R0b20gLSAo
bVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpOwotICAgICAgICAgICAgZGVz
dFNjaXNzb3JlZFJlY3QuYm90dG9tID0gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JI
ZWlnaHQ7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmJvdHRvbSAtPSB5RGlmZjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCA9IGZhbHNlOwot
ICAgIGJvb2wgYmxpdERlcHRoU3RlbmNpbCA9IGZhbHNlOwotCi0gICAgUkVDVCBzb3VyY2VUcmlt
bWVkUmVjdCA9IHNvdXJjZVNjaXNzb3JlZFJlY3Q7Ci0gICAgUkVDVCBkZXN0VHJpbW1lZFJlY3Qg
PSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2UgJiBkZXN0aW5hdGlvbiBy
ZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0aGV5IGZhbGwgb3V0IG9m
IHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFuZCByZWFkIHN1cmZhY2Vz
LgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgMCkKLSAgICB7Ci0gICAgICAgIGlu
dCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0OwotICAgICAgICBzb3VyY2VUcmlt
bWVkUmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmxlZnQgKz0geERpZmY7
Ci0gICAgfQotCi0gICAgaW50IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsKLSAgICBpbnQgcmVhZEJ1ZmZlckhlaWdodCA9IHJl
YWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7Ci0gICAgaW50IGRy
YXdCdWZmZXJXaWR0aCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lk
dGgoKTsKLSAgICBpbnQgZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29s
b3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3Qucmln
aHQgPiByZWFkQnVmZmVyV2lkdGgpCi0gICAgewotICAgICAgICBpbnQgeERpZmYgPSBzb3VyY2VU
cmltbWVkUmVjdC5yaWdodCAtIHJlYWRCdWZmZXJXaWR0aDsKLSAgICAgICAgc291cmNlVHJpbW1l
ZFJlY3QucmlnaHQgPSByZWFkQnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5y
aWdodCAtPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QudG9wIDwg
MCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC50b3A7
Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA9IDA7Ci0gICAgICAgIGRlc3RUcmltbWVk
UmVjdC50b3AgKz0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJv
dHRvbSA+IHJlYWRCdWZmZXJIZWlnaHQpCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSBzb3Vy
Y2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1l
ZFJlY3QuYm90dG9tIC09IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3Qu
bGVmdCA8IDApCi0gICAgewotICAgICAgICBpbnQgeERpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0
LmxlZnQ7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ID0gMDsKLSAgICAgICAgc291cmNl
VHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRS
ZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRoKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0g
ZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZHJhd0J1ZmZlcldpZHRoOwotICAgICAgICBkZXN0VHJp
bW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVyV2lkdGg7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRS
ZWN0LnJpZ2h0IC09IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QudG9w
IDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QudG9w
OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QudG9wID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1l
ZFJlY3QudG9wICs9IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QuYm90
dG9tID4gZHJhd0J1ZmZlckhlaWdodCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IGRlc3RU
cmltbWVkUmVjdC5ib3R0b20gLSBkcmF3QnVmZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1l
ZFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJl
Y3QuYm90dG9tIC09IHlEaWZmOwotICAgIH0KLQotICAgIGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkg
PSBmYWxzZTsKLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC0gc291cmNlVHJpbW1l
ZFJlY3QudG9wIDwgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQo
KSB8fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHNvdXJjZVRyaW1tZWRSZWN0
LmxlZnQgPCByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkgfHwg
Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkZXN0VHJpbW1lZFJlY3QudG9wIDwg
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSB8fAotICAgICAg
ICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkZXN0VHJpbW1lZFJlY3QubGVmdCA8IGRyYXdGcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSB8fAotICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC50b3AgIT0gMCB8fCBkZXN0VHJpbW1lZFJlY3QudG9wICE9IDAgfHwgc291cmNl
VHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC5sZWZ0ICE9IDApCi0gICAg
ewotICAgICAgICBwYXJ0aWFsQnVmZmVyQ29weSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1h
c2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAgIHsKLSAgICAgICAgaWYgKHJlYWRGcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1
ZmZlclR5cGUoKSB8fAotICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZl
cigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCkt
PmdldEQzREZvcm1hdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkNvbG9yIGJ1ZmZl
ciBmb3JtYXQgY29udmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVk
IGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0
aWFsQnVmZmVyQ29weSAmJiByZWFkRnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYmxpdFJlbmRlclRhcmdldCA9IHRydWU7Ci0KLSAgICB9Ci0K
LSAgICBpZiAobWFzayAmIChHTF9ERVBUSF9CVUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJf
QklUKSkKLSAgICB7Ci0gICAgICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqcmVhZERTQnVmZmVyID0g
TlVMTDsKLSAgICAgICAgRGVwdGhTdGVuY2lsYnVmZmVyICpkcmF3RFNCdWZmZXIgPSBOVUxMOwot
Ci0gICAgICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsLCBhbmQgZG8g
bm90IHN1cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVkIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZl
ciwgc28gaWYgd2UgaGF2ZQotICAgICAgICAvLyBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVm
ZmVyLCBpdCB3aWxsIGJlIHRoZSBzYW1lIGJ1ZmZlci4KLQotICAgICAgICBpZiAobWFzayAmIEdM
X0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWFkRnJhbWVi
dWZmZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZl
cigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXIt
PmdldERlcHRoYnVmZmVyVHlwZSgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJU
eXBlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
KCktPmdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0g
ICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hc2sgJiBH
TF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWFkRnJh
bWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3Rl
bmNpbGJ1ZmZlclR5cGUoKSB8fAotICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXIt
PmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJS
KCJPbmx5IHdob2xlLWJ1ZmZlciBkZXB0aCBhbmQgc3RlbmNpbCBibGl0cyBhcmUgc3VwcG9ydGVk
IGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOyAvLyBvbmx5IHdob2xlLWJ1ZmZlciBjb3BpZXMgYXJlIHBlcm1p
dHRlZAotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChkcmF3RFNCdWZmZXIgJiYgZHJhd0RTQnVm
ZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkgfHwgCi0gICAgICAgICAgICAocmVhZERTQnVmZmVyICYm
IHJlYWREU0J1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoU3RlbmNpbCkKLSAgICB7Ci0g
ICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXkoKTsKLSAgICAgICAgZGlz
cGxheS0+ZW5kU2NlbmUoKTsKLQotICAgICAgICBpZiAoYmxpdFJlbmRlclRhcmdldCkKLSAgICAg
ICAgewotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHJl
YWRGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCksICZzb3VyY2VUcmltbWVkUmVjdCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0ZyYW1l
YnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSwgJmRlc3RUcmltbWVkUmVjdCwgRDNEVEVYRl9OT05F
KTsKLQotICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVj
dCByZXR1cm5lZCAleC4iLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qo
cmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVMTCwgZHJhd0ZyYW1lYnVmZmVy
LT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLQotICAgICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigi
QmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCBy
ZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLX0KLQotfQotCi1leHRlcm4gIkMiCi17Ci1nbDo6Q29udGV4dCAqZ2xDcmVhdGVD
b250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFy
ZUNvbnRleHQpCi17Ci0gICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChjb25maWcsIHNoYXJlQ29u
dGV4dCk7Ci19Ci0KLXZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCkK
LXsKLSAgICBkZWxldGUgY29udGV4dDsKLQotICAgIGlmIChjb250ZXh0ID09IGdsOjpnZXRDb250
ZXh0KCkpCi0gICAgewotICAgICAgICBnbDo6bWFrZUN1cnJlbnQoTlVMTCwgTlVMTCwgTlVMTCk7
Ci0gICAgfQotfQotCi12b2lkIGdsTWFrZUN1cnJlbnQoZ2w6OkNvbnRleHQgKmNvbnRleHQsIGVn
bDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIGdsOjpt
YWtlQ3VycmVudChjb250ZXh0LCBkaXNwbGF5LCBzdXJmYWNlKTsKLX0KLQotZ2w6OkNvbnRleHQg
KmdsR2V0Q3VycmVudENvbnRleHQoKQotewotICAgIHJldHVybiBnbDo6Z2V0Q29udGV4dCgpOwot
fQotfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDgwICswLDAgQEAK
LS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIENvbnRleHQuaDogRGVmaW5lcyB0aGUgZ2w6OkNvbnRl
eHQgY2xhc3MsIG1hbmFnaW5nIGFsbCBHTCBzdGF0ZSBhbmQgcGVyZm9ybWluZwotLy8gcmVuZGVy
aW5nIG9wZXJhdGlvbnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBv
ZiBFR0xDb250ZXh0LgotCi0jaWZuZGVmIExJQkdMRVNWMl9DT05URVhUX0hfCi0jZGVmaW5lIExJ
QkdMRVNWMl9DT05URVhUX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMy
L2dsMi5oPgotI2RlZmluZSBFR0xBUEkKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jaW5jbHVkZSA8
ZDNkOS5oPgotCi0jaW5jbHVkZSA8bWFwPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL1JlZkNvdW50T2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBlZ2wKLXsKLWNsYXNzIERpc3Bs
YXk7Ci1jbGFzcyBTdXJmYWNlOwotY2xhc3MgQ29uZmlnOwotfQotCi1uYW1lc3BhY2UgZ2wKLXsK
LXN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOwotc3RydWN0IFRyYW5zbGF0ZWRJbmRleERhdGE7
Ci0KLWNsYXNzIEJ1ZmZlcjsKLWNsYXNzIFNoYWRlcjsKLWNsYXNzIFByb2dyYW07Ci1jbGFzcyBU
ZXh0dXJlOwotY2xhc3MgVGV4dHVyZTJEOwotY2xhc3MgVGV4dHVyZUN1YmVNYXA7Ci1jbGFzcyBG
cmFtZWJ1ZmZlcjsKLWNsYXNzIFJlbmRlcmJ1ZmZlcjsKLWNsYXNzIFJlbmRlcmJ1ZmZlclN0b3Jh
Z2U7Ci1jbGFzcyBDb2xvcmJ1ZmZlcjsKLWNsYXNzIERlcHRoYnVmZmVyOwotY2xhc3MgU3RlbmNp
bGJ1ZmZlcjsKLWNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKLWNsYXNzIFZlcnRleERhdGFNYW5h
Z2VyOwotY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsKLWNsYXNzIEJ1ZmZlckJhY2tFbmQ7Ci1jbGFz
cyBCbGl0OwotCi1lbnVtCi17Ci0gICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTIsCi0gICAgTUFY
X1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgPSAxMjgsCi0gICAgTUFYX1ZBUllJTkdfVkVDVE9SUyA9
IDgsCi0gICAgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAwLAotICAgIE1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTID0gMTYsCi0gICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyA9IDE2LAotICAgIE1B
WF9SRU5ERVJCVUZGRVJfU0laRSA9IDQwOTYsICAgLy8gRklYTUU6IFZlcmlmeQotICAgIE1BWF9E
UkFXX0JVRkZFUlMgPSAxLAotCi0gICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQg
PSBHTF9SR0IsCi0gICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFID0gR0xfVU5TSUdO
RURfU0hPUlRfNV82XzUKLX07Ci0KLWNvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5H
RV9NSU4gPSAxLjBmOwotY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01BWCA9
IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOID0gMS4wZjsK
LWNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00yID0gMS4wZjsKLWNv
bnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zID0gNjQuMGY7Ci0KLXN0
cnVjdCBDb2xvcgotewotICAgIGZsb2F0IHJlZDsKLSAgICBmbG9hdCBncmVlbjsKLSAgICBmbG9h
dCBibHVlOwotICAgIGZsb2F0IGFscGhhOwotfTsKLQotLy8gSGVscGVyIHN0cnVjdHVyZSBkZXNj
cmliaW5nIGEgc2luZ2xlIHZlcnRleCBhdHRyaWJ1dGUKLWNsYXNzIEF0dHJpYnV0ZVN0YXRlCi17
Ci0gIHB1YmxpYzoKLSAgICBBdHRyaWJ1dGVTdGF0ZSgpCi0gICAgICAgIDogbVR5cGUoR0xfRkxP
QVQpLCBtU2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihO
VUxMKSwgbUVuYWJsZWQoZmFsc2UpCi0gICAgewotICAgICAgICBtQ3VycmVudFZhbHVlWzBdID0g
MDsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDA7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVb
Ml0gPSAwOwotICAgICAgICBtQ3VycmVudFZhbHVlWzNdID0gMTsKLSAgICB9Ci0KLSAgICAvLyBG
cm9tIFZlcnRleEFycmF5UG9pbnRlcgotICAgIEdMZW51bSBtVHlwZTsKLSAgICBHTGludCBtU2l6
ZTsKLSAgICBib29sIG1Ob3JtYWxpemVkOwotICAgIEdMc2l6ZWkgbVN0cmlkZTsgLy8gMCBtZWFu
cyBuYXR1cmFsIHN0cmlkZQotICAgIGNvbnN0IHZvaWQgKm1Qb2ludGVyOwotCi0gICAgQmluZGlu
Z1BvaW50ZXI8QnVmZmVyPiBtQm91bmRCdWZmZXI7IC8vIENhcHR1cmVkIHdoZW4gVmVydGV4QXJy
YXlQb2ludGVyIGlzIGNhbGxlZC4KLQotICAgIGJvb2wgbUVuYWJsZWQ7IC8vIEZyb20gRW5hYmxl
L0Rpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheQotCi0gICAgZmxvYXQgbUN1cnJlbnRWYWx1ZVs0XTsg
Ly8gRnJvbSBWZXJ0ZXhBdHRyaWI0ZgotfTsKLQotLy8gSGVscGVyIHN0cnVjdHVyZSB0byBzdG9y
ZSBhbGwgcmF3IHN0YXRlCi1zdHJ1Y3QgU3RhdGUKLXsKLSAgICBDb2xvciBjb2xvckNsZWFyVmFs
dWU7Ci0gICAgR0xjbGFtcGYgZGVwdGhDbGVhclZhbHVlOwotICAgIGludCBzdGVuY2lsQ2xlYXJW
YWx1ZTsKLQotICAgIGJvb2wgY3VsbEZhY2U7Ci0gICAgR0xlbnVtIGN1bGxNb2RlOwotICAgIEdM
ZW51bSBmcm9udEZhY2U7Ci0gICAgYm9vbCBkZXB0aFRlc3Q7Ci0gICAgR0xlbnVtIGRlcHRoRnVu
YzsKLSAgICBib29sIGJsZW5kOwotICAgIEdMZW51bSBzb3VyY2VCbGVuZFJHQjsKLSAgICBHTGVu
dW0gZGVzdEJsZW5kUkdCOwotICAgIEdMZW51bSBzb3VyY2VCbGVuZEFscGhhOwotICAgIEdMZW51
bSBkZXN0QmxlbmRBbHBoYTsKLSAgICBHTGVudW0gYmxlbmRFcXVhdGlvblJHQjsKLSAgICBHTGVu
dW0gYmxlbmRFcXVhdGlvbkFscGhhOwotICAgIENvbG9yIGJsZW5kQ29sb3I7Ci0gICAgYm9vbCBz
dGVuY2lsVGVzdDsKLSAgICBHTGVudW0gc3RlbmNpbEZ1bmM7Ci0gICAgR0xpbnQgc3RlbmNpbFJl
ZjsKLSAgICBHTHVpbnQgc3RlbmNpbE1hc2s7Ci0gICAgR0xlbnVtIHN0ZW5jaWxGYWlsOwotICAg
IEdMZW51bSBzdGVuY2lsUGFzc0RlcHRoRmFpbDsKLSAgICBHTGVudW0gc3RlbmNpbFBhc3NEZXB0
aFBhc3M7Ci0gICAgR0x1aW50IHN0ZW5jaWxXcml0ZW1hc2s7Ci0gICAgR0xlbnVtIHN0ZW5jaWxC
YWNrRnVuYzsKLSAgICBHTGludCBzdGVuY2lsQmFja1JlZjsKLSAgICBHTHVpbnQgc3RlbmNpbEJh
Y2tNYXNrOwotICAgIEdMZW51bSBzdGVuY2lsQmFja0ZhaWw7Ci0gICAgR0xlbnVtIHN0ZW5jaWxC
YWNrUGFzc0RlcHRoRmFpbDsKLSAgICBHTGVudW0gc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOwot
ICAgIEdMdWludCBzdGVuY2lsQmFja1dyaXRlbWFzazsKLSAgICBib29sIHBvbHlnb25PZmZzZXRG
aWxsOwotICAgIEdMZmxvYXQgcG9seWdvbk9mZnNldEZhY3RvcjsKLSAgICBHTGZsb2F0IHBvbHln
b25PZmZzZXRVbml0czsKLSAgICBib29sIHNhbXBsZUFscGhhVG9Db3ZlcmFnZTsKLSAgICBib29s
IHNhbXBsZUNvdmVyYWdlOwotICAgIEdMY2xhbXBmIHNhbXBsZUNvdmVyYWdlVmFsdWU7Ci0gICAg
Ym9vbCBzYW1wbGVDb3ZlcmFnZUludmVydDsKLSAgICBib29sIHNjaXNzb3JUZXN0OwotICAgIGJv
b2wgZGl0aGVyOwotCi0gICAgR0xmbG9hdCBsaW5lV2lkdGg7Ci0KLSAgICBHTGVudW0gZ2VuZXJh
dGVNaXBtYXBIaW50OwotCi0gICAgR0xpbnQgdmlld3BvcnRYOwotICAgIEdMaW50IHZpZXdwb3J0
WTsKLSAgICBHTHNpemVpIHZpZXdwb3J0V2lkdGg7Ci0gICAgR0xzaXplaSB2aWV3cG9ydEhlaWdo
dDsKLSAgICBmbG9hdCB6TmVhcjsKLSAgICBmbG9hdCB6RmFyOwotCi0gICAgR0xpbnQgc2Npc3Nv
clg7Ci0gICAgR0xpbnQgc2Npc3Nvclk7Ci0gICAgR0xzaXplaSBzY2lzc29yV2lkdGg7Ci0gICAg
R0xzaXplaSBzY2lzc29ySGVpZ2h0OwotCi0gICAgYm9vbCBjb2xvck1hc2tSZWQ7Ci0gICAgYm9v
bCBjb2xvck1hc2tHcmVlbjsKLSAgICBib29sIGNvbG9yTWFza0JsdWU7Ci0gICAgYm9vbCBjb2xv
ck1hc2tBbHBoYTsKLSAgICBib29sIGRlcHRoTWFzazsKLQotICAgIGludCBhY3RpdmVTYW1wbGVy
OyAgIC8vIEFjdGl2ZSB0ZXh0dXJlIHVuaXQgc2VsZWN0b3IgLSBHTF9URVhUVVJFMAotICAgIEJp
bmRpbmdQb2ludGVyPEJ1ZmZlcj4gYXJyYXlCdWZmZXI7Ci0gICAgQmluZGluZ1BvaW50ZXI8QnVm
ZmVyPiBlbGVtZW50QXJyYXlCdWZmZXI7Ci0gICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gdGV4
dHVyZTJEOwotICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IHRleHR1cmVDdWJlTWFwOwotICAg
IEdMdWludCByZWFkRnJhbWVidWZmZXI7Ci0gICAgR0x1aW50IGRyYXdGcmFtZWJ1ZmZlcjsKLSAg
ICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IHJlbmRlcmJ1ZmZlcjsKLSAgICBHTHVpbnQg
Y3VycmVudFByb2dyYW07Ci0KLSAgICBBdHRyaWJ1dGVTdGF0ZSB2ZXJ0ZXhBdHRyaWJ1dGVbTUFY
X1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlPiBzYW1wbGVyVGV4
dHVyZVtTQU1QTEVSX1RZUEVfQ09VTlRdW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLQotICAg
IEdMaW50IHVucGFja0FsaWdubWVudDsKLSAgICBHTGludCBwYWNrQWxpZ25tZW50OwotfTsKLQot
Y2xhc3MgQ29udGV4dAotewotICBwdWJsaWM6Ci0gICAgQ29udGV4dChjb25zdCBlZ2w6OkNvbmZp
ZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0KTsKLQotICAgIH5Db250
ZXh0KCk7Ci0KLSAgICB2b2lkIG1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWds
OjpTdXJmYWNlICpzdXJmYWNlKTsKLQotICAgIHZvaWQgbWFya0FsbFN0YXRlRGlydHkoKTsKLQot
ICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlvbgotICAgIHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9hdCBy
ZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSk7Ci0KLSAgICB2b2lkIHNl
dENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpOwotCi0gICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwoaW50
IHN0ZW5jaWwpOwotCi0gICAgdm9pZCBzZXRDdWxsRmFjZShib29sIGVuYWJsZWQpOwotICAgIGJv
b2wgaXNDdWxsRmFjZUVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0Q3VsbE1vZGUoR0xl
bnVtIG1vZGUpOwotCi0gICAgdm9pZCBzZXRGcm9udEZhY2UoR0xlbnVtIGZyb250KTsKLQotICAg
IHZvaWQgc2V0RGVwdGhUZXN0KGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc0RlcHRoVGVzdEVu
YWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0RGVwdGhGdW5jKEdMZW51bSBkZXB0aEZ1bmMp
OwotCi0gICAgdm9pZCBzZXREZXB0aFJhbmdlKGZsb2F0IHpOZWFyLCBmbG9hdCB6RmFyKTsKLSAg
ICAKLSAgICB2b2lkIHNldEJsZW5kKGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc0JsZW5kRW5h
YmxlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRCbGVuZEZhY3RvcnMoR0xlbnVtIHNvdXJjZVJH
QiwgR0xlbnVtIGRlc3RSR0IsIEdMZW51bSBzb3VyY2VBbHBoYSwgR0xlbnVtIGRlc3RBbHBoYSk7
Ci0gICAgdm9pZCBzZXRCbGVuZENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJs
dWUsIGZsb2F0IGFscGhhKTsKLSAgICB2b2lkIHNldEJsZW5kRXF1YXRpb24oR0xlbnVtIHJnYkVx
dWF0aW9uLCBHTGVudW0gYWxwaGFFcXVhdGlvbik7Ci0KLSAgICB2b2lkIHNldFN0ZW5jaWxUZXN0
KGJvb2wgZW5hYmxlZCk7Ci0gICAgYm9vbCBpc1N0ZW5jaWxUZXN0RW5hYmxlZCgpIGNvbnN0Owot
Ci0gICAgdm9pZCBzZXRTdGVuY2lsUGFyYW1zKEdMZW51bSBzdGVuY2lsRnVuYywgR0xpbnQgc3Rl
bmNpbFJlZiwgR0x1aW50IHN0ZW5jaWxNYXNrKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxCYWNrUGFy
YW1zKEdMZW51bSBzdGVuY2lsQmFja0Z1bmMsIEdMaW50IHN0ZW5jaWxCYWNrUmVmLCBHTHVpbnQg
c3RlbmNpbEJhY2tNYXNrKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxXcml0ZW1hc2soR0x1aW50IHN0
ZW5jaWxXcml0ZW1hc2spOwotICAgIHZvaWQgc2V0U3RlbmNpbEJhY2tXcml0ZW1hc2soR0x1aW50
IHN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxPcGVyYXRpb25zKEdM
ZW51bSBzdGVuY2lsRmFpbCwgR0xlbnVtIHN0ZW5jaWxQYXNzRGVwdGhGYWlsLCBHTGVudW0gc3Rl
bmNpbFBhc3NEZXB0aFBhc3MpOwotICAgIHZvaWQgc2V0U3RlbmNpbEJhY2tPcGVyYXRpb25zKEdM
ZW51bSBzdGVuY2lsQmFja0ZhaWwsIEdMZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWwsIEdM
ZW51bSBzdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3MpOwotCi0gICAgdm9pZCBzZXRQb2x5Z29uT2Zm
c2V0RmlsbChib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJs
ZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0UG9seWdvbk9mZnNldFBhcmFtcyhHTGZsb2F0IGZh
Y3RvciwgR0xmbG9hdCB1bml0cyk7Ci0KLSAgICB2b2lkIHNldFNhbXBsZUFscGhhVG9Db3ZlcmFn
ZShib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVk
KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFNhbXBsZUNvdmVyYWdlKGJvb2wgZW5hYmxlZCk7Ci0g
ICAgYm9vbCBpc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRT
YW1wbGVDb3ZlcmFnZVBhcmFtcyhHTGNsYW1wZiB2YWx1ZSwgYm9vbCBpbnZlcnQpOwotCi0gICAg
dm9pZCBzZXRTY2lzc29yVGVzdChib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNTY2lzc29yVGVz
dEVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0RGl0aGVyKGJvb2wgZW5hYmxlZCk7Ci0g
ICAgYm9vbCBpc0RpdGhlckVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0TGluZVdpZHRo
KEdMZmxvYXQgd2lkdGgpOwotCi0gICAgdm9pZCBzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xlbnVt
IGhpbnQpOwotCi0gICAgdm9pZCBzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2b2lkIHNldFNjaXNzb3JQYXJh
bXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0g
ICAgdm9pZCBzZXRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9v
bCBhbHBoYSk7Ci0gICAgdm9pZCBzZXREZXB0aE1hc2soYm9vbCBtYXNrKTsKLQotICAgIHZvaWQg
c2V0QWN0aXZlU2FtcGxlcihpbnQgYWN0aXZlKTsKLQotICAgIEdMdWludCBnZXRSZWFkRnJhbWVi
dWZmZXJIYW5kbGUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxl
KCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0OwotCi0g
ICAgR0x1aW50IGdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFZl
cnRleEF0dHJpYkVuYWJsZWQodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKTsK
LSAgICBjb25zdCBBdHRyaWJ1dGVTdGF0ZSAmZ2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQg
aW50IGF0dHJpYk51bSk7Ci0gICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBp
bnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgR0xzaXpl
aSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpOwotICAgIGNvbnN0IHZvaWQgKmdldFZlcnRl
eEF0dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7Ci0KLSAgICBjb25z
dCBBdHRyaWJ1dGVTdGF0ZSAqZ2V0VmVydGV4QXR0cmliQmxvY2soKTsKLQotICAgIHZvaWQgc2V0
VW5wYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCk7Ci0gICAgR0xpbnQgZ2V0VW5wYWNrQWxp
Z25tZW50KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25t
ZW50KTsKLSAgICBHTGludCBnZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7Ci0KLSAgICAvLyBUaGVz
ZSBjcmVhdGUgIGFuZCBkZXN0cm95IG1ldGhvZHMgYXJlIG1lcmVseSBwYXNzLXRocm91Z2hzIHRv
IAotICAgIC8vIFJlc291cmNlTWFuYWdlciwgd2hpY2ggb3ducyB0aGVzZSBvYmplY3QgdHlwZXMK
LSAgICBHTHVpbnQgY3JlYXRlQnVmZmVyKCk7Ci0gICAgR0x1aW50IGNyZWF0ZVNoYWRlcihHTGVu
dW0gdHlwZSk7Ci0gICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsKLSAgICBHTHVpbnQgY3JlYXRl
VGV4dHVyZSgpOwotICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKLQotICAgIHZvaWQg
ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpOwotICAgIHZvaWQgZGVsZXRlU2hhZGVyKEdMdWlu
dCBzaGFkZXIpOwotICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7Ci0gICAg
dm9pZCBkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKLSAgICB2b2lkIGRlbGV0ZVJlbmRl
cmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKLQotICAgIC8vIEZyYW1lYnVmZmVycyBhcmUg
b3duZWQgYnkgdGhlIENvbnRleHQsIHNvIHRoZXNlIG1ldGhvZHMgZG8gbm90IHBhc3MgdGhyb3Vn
aAotICAgIEdMdWludCBjcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIHZvaWQgZGVsZXRlRnJhbWVi
dWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKLQotICAgIHZvaWQgYmluZEFycmF5QnVmZmVyKEdM
dWludCBidWZmZXIpOwotICAgIHZvaWQgYmluZEVsZW1lbnRBcnJheUJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpOwotICAgIHZvaWQg
YmluZFRleHR1cmVDdWJlTWFwKEdMdWludCB0ZXh0dXJlKTsKLSAgICB2b2lkIGJpbmRSZWFkRnJh
bWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKLSAgICB2b2lkIGJpbmREcmF3RnJhbWVidWZm
ZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKLSAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0x1aW50
IHJlbmRlcmJ1ZmZlcik7Ci0gICAgdm9pZCB1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKLQot
ICAgIHZvaWQgc2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcik7Ci0K
LSAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVu
ZGVyYnVmZmVyKTsKLQotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29u
c3QgR0xmbG9hdCAqdmFsdWVzKTsKLQotICAgIEJ1ZmZlciAqZ2V0QnVmZmVyKEdMdWludCBoYW5k
bGUpOwotICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpOwotICAgIFByb2dyYW0g
KmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSk7Ci0gICAgVGV4dHVyZSAqZ2V0VGV4dHVyZShHTHVp
bnQgaGFuZGxlKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoR0x1aW50IGhhbmRs
ZSk7Ci0gICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0K
LSAgICBCdWZmZXIgKmdldEFycmF5QnVmZmVyKCk7Ci0gICAgQnVmZmVyICpnZXRFbGVtZW50QXJy
YXlCdWZmZXIoKTsKLSAgICBQcm9ncmFtICpnZXRDdXJyZW50UHJvZ3JhbSgpOwotICAgIFRleHR1
cmUyRCAqZ2V0VGV4dHVyZTJEKCk7Ci0gICAgVGV4dHVyZUN1YmVNYXAgKmdldFRleHR1cmVDdWJl
TWFwKCk7Ci0gICAgVGV4dHVyZSAqZ2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBs
ZXIsIFNhbXBsZXJUeXBlIHR5cGUpOwotICAgIEZyYW1lYnVmZmVyICpnZXRSZWFkRnJhbWVidWZm
ZXIoKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0KLSAgICBib29s
IGdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyk7Ci0gICAgYm9vbCBnZXRJ
bnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0Qm9vbGVh
bnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4gKnBhcmFtcyk7Ci0KLSAgICBib29sIGdldFF1ZXJ5
UGFyYW1ldGVySW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpu
dW1QYXJhbXMpOwotCi0gICAgYm9vbCBhcHBseVJlbmRlclRhcmdldChib29sIGlnbm9yZVZpZXdw
b3J0KTsKLSAgICB2b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKTsKLSAgICBHTGVudW0g
YXBwbHlWZXJ0ZXhCdWZmZXIoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50
LCBib29sICp1c2VJbmRleGluZywgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKLSAg
ICBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5k
ZXhJbmZvKTsKLSAgICBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCB2b2lkICppbmRpY2Vz
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRl
eERhdGEgKmluZGV4SW5mbyk7Ci0gICAgR0xlbnVtIGFwcGx5Q291bnRpbmdJbmRleEJ1ZmZlcihH
TGVudW0gbW9kZSwgR0xlbnVtIGNvdW50LCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8p
OwotICAgIHZvaWQgYXBwbHlTaGFkZXJzKCk7Ci0gICAgdm9pZCBhcHBseVRleHR1cmVzKCk7Ci0K
LSAgICB2b2lkIHJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCB2b2lkKiBwaXhlbHMpOwot
ICAgIHZvaWQgY2xlYXIoR0xiaXRmaWVsZCBtYXNrKTsKLSAgICB2b2lkIGRyYXdBcnJheXMoR0xl
bnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsKLSAgICB2b2lkIGRyYXdFbGVt
ZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQq
IGluZGljZXMpOwotICAgIHZvaWQgZmluaXNoKCk7Ci0gICAgdm9pZCBmbHVzaCgpOwotCi0gICAg
dm9pZCByZWNvcmRJbnZhbGlkRW51bSgpOwotICAgIHZvaWQgcmVjb3JkSW52YWxpZFZhbHVlKCk7
Ci0gICAgdm9pZCByZWNvcmRJbnZhbGlkT3BlcmF0aW9uKCk7Ci0gICAgdm9pZCByZWNvcmRPdXRP
Zk1lbW9yeSgpOwotICAgIHZvaWQgcmVjb3JkSW52YWxpZEZyYW1lYnVmZmVyT3BlcmF0aW9uKCk7
Ci0KLSAgICBHTGVudW0gZ2V0RXJyb3IoKTsKLQotICAgIGJvb2wgc3VwcG9ydHNTaGFkZXJNb2Rl
bDMoKSBjb25zdDsKLSAgICBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsK
LSAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50
IHJlcXVlc3RlZCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkg
Y29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpIGNvbnN0OwotCi0g
ICAgdm9pZCBibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBz
cmNYMSwgR0xpbnQgc3JjWTEsIAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgw
LCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMYml0ZmllbGQgbWFzayk7Ci0KLSAgICBCbGl0ICpnZXRCbGl0dGVyKCkgeyBy
ZXR1cm4gbUJsaXQ7IH0KLQotICAgIGNvbnN0IEQzRENBUFM5ICZnZXREZXZpY2VDYXBzKCkgeyBy
ZXR1cm4gbURldmljZUNhcHM7IH0KLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihDb250ZXh0KTsKLQotICAgIHZvaWQgbG9va3VwQXR0cmlidXRlTWFwcGluZyhUcmFu
c2xhdGVkQXR0cmlidXRlICphdHRyaWJ1dGVzKTsKLQotICAgIHZvaWQgZGV0YWNoQnVmZmVyKEdM
dWludCBidWZmZXIpOwotICAgIHZvaWQgZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7Ci0g
ICAgdm9pZCBkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwotICAgIHZvaWQg
ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwotCi0gICAgVGV4dHVyZSAq
Z2V0SW5jb21wbGV0ZVRleHR1cmUoU2FtcGxlclR5cGUgdHlwZSk7Ci0KLSAgICBib29sIGN1bGxT
a2lwc0RyYXcoR0xlbnVtIGRyYXdNb2RlKTsKLSAgICBib29sIGlzVHJpYW5nbGVNb2RlKEdMZW51
bSBkcmF3TW9kZSk7Ci0KLSAgICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uc3QgbUNvbmZpZzsKLQot
ICAgIFN0YXRlICAgbVN0YXRlOwotCi0gICAgVGV4dHVyZTJEICptVGV4dHVyZTJEWmVybzsKLSAg
ICBUZXh0dXJlQ3ViZU1hcCAqbVRleHR1cmVDdWJlTWFwWmVybzsKLQotICAgIENvbG9yYnVmZmVy
ICptQ29sb3JidWZmZXJaZXJvOwotICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqbURlcHRoU3RlbmNp
bGJ1ZmZlclplcm87Ci0KLSAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgRnJhbWVidWZmZXIq
PiBGcmFtZWJ1ZmZlck1hcDsKLSAgICBGcmFtZWJ1ZmZlck1hcCBtRnJhbWVidWZmZXJNYXA7Ci0K
LSAgICB2b2lkIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKLSAgICBzdGQ6OnN0cmluZyBtRXh0ZW5z
aW9uU3RyaW5nOwotCi0gICAgQnVmZmVyQmFja0VuZCAqbUJ1ZmZlckJhY2tFbmQ7Ci0gICAgVmVy
dGV4RGF0YU1hbmFnZXIgKm1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBJbmRleERhdGFNYW5hZ2Vy
ICptSW5kZXhEYXRhTWFuYWdlcjsKLQotICAgIEJsaXQgKm1CbGl0OwotICAgIAotICAgIFRleHR1
cmUgKm1JbmNvbXBsZXRlVGV4dHVyZXNbU0FNUExFUl9UWVBFX0NPVU5UXTsKLQotICAgIC8vIFJl
Y29yZGVkIGVycm9ycwotICAgIGJvb2wgbUludmFsaWRFbnVtOwotICAgIGJvb2wgbUludmFsaWRW
YWx1ZTsKLSAgICBib29sIG1JbnZhbGlkT3BlcmF0aW9uOwotICAgIGJvb2wgbU91dE9mTWVtb3J5
OwotICAgIGJvb2wgbUludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbjsKLQotICAgIGJvb2wgbUhh
c0JlZW5DdXJyZW50OwotCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbTsKLSAgICB1
bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50
IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3Rl
bmNpbGJ1ZmZlclNlcmlhbDsKLQotICAgIGJvb2wgbVN1cHBvcnRzU2hhZGVyTW9kZWwzOwotICAg
IHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPiBtTXVsdGlTYW1wbGVTdXBwb3J0OwotICAgIEdM
c2l6ZWkgbU1heFN1cHBvcnRlZFNhbXBsZXM7Ci0gICAgYm9vbCBtU3VwcG9ydHNDb21wcmVzc2Vk
VGV4dHVyZXM7Ci0KLSAgICAvLyBzdGF0ZSBjYWNoaW5nIGZsYWdzCi0gICAgYm9vbCBtQ2xlYXJT
dGF0ZURpcnR5OwotICAgIGJvb2wgbUN1bGxTdGF0ZURpcnR5OwotICAgIGJvb2wgbURlcHRoU3Rh
dGVEaXJ0eTsKLSAgICBib29sIG1NYXNrU3RhdGVEaXJ0eTsKLSAgICBib29sIG1QaXhlbFBhY2tp
bmdTdGF0ZURpcnR5OwotICAgIGJvb2wgbUJsZW5kU3RhdGVEaXJ0eTsKLSAgICBib29sIG1TdGVu
Y2lsU3RhdGVEaXJ0eTsKLSAgICBib29sIG1Qb2x5Z29uT2Zmc2V0U3RhdGVEaXJ0eTsKLSAgICBi
b29sIG1TY2lzc29yU3RhdGVEaXJ0eTsKLSAgICBib29sIG1TYW1wbGVTdGF0ZURpcnR5OwotICAg
IGJvb2wgbUZyb250RmFjZURpcnR5OwotICAgIGJvb2wgbURpdGhlclN0YXRlRGlydHk7Ci0KLSAg
ICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZTsKLQotICAgIEQz
RENBUFM5IG1EZXZpY2VDYXBzOwotCi0gICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5h
Z2VyOwotfTsKLX0KLQotZXh0ZXJuICJDIgotewotLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1
c2UgYnkgRUdMCi1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmln
ICpjb25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQpOwotdm9pZCBnbERlc3Ry
b3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKLXZvaWQgZ2xNYWtlQ3VycmVudChnbDo6
Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1
cmZhY2UpOwotZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKTsKLV9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3Mo
Y29uc3QgY2hhciAqcHJvY25hbWUpOwotfQotCi0jZW5kaWYgICAvLyBJTkNMVURFX0NPTlRFWFRf
SF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiA3NDY1OCkK
KysrIEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDQ1NSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBGcmFtZWJ1ZmZlci5jcHA6
IEltcGxlbWVudHMgdGhlIGdsOjpGcmFtZWJ1ZmZlciBjbGFzcy4gSW1wbGVtZW50cyBHTCBmcmFt
ZWJ1ZmZlcgotLy8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVT
IDIuMC4yNF0gc2VjdGlvbiA0LjQgcGFnZSAxMDUuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvRnJh
bWVidWZmZXIuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotRnJh
bWVidWZmZXI6OkZyYW1lYnVmZmVyKCkKLXsKLSAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9O
RTsKLSAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZlclR5
cGUgPSBHTF9OT05FOwotfQotCi1GcmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKCkKLXsKLSAgICBt
Q29sb3JidWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNl
dChOVUxMKTsKLSAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotfQotCi1SZW5k
ZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBoYW5kbGUpIGNvbnN0Ci17Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Q29udGV4dCgpOwotICAgIFJlbmRlcmJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKLQotICAgIGlmICh0
eXBlID09IEdMX05PTkUpCi0gICAgewotICAgICAgICBidWZmZXIgPSBOVUxMOwotICAgIH0KLSAg
ICBlbHNlIGlmICh0eXBlID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICB7Ci0gICAgICAgIGJ1ZmZl
ciA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwotICAgIH0KLSAgICBlbHNlIGlm
IChJc1RleHR1cmVUYXJnZXQodHlwZSkpCi0gICAgewotICAgICAgICBidWZmZXIgPSBjb250ZXh0
LT5nZXRUZXh0dXJlKGhhbmRsZSktPmdldENvbG9yYnVmZmVyKHR5cGUpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBi
dWZmZXI7Ci19Ci0KLXZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBl
LCBHTHVpbnQgY29sb3JidWZmZXIpCi17Ci0gICAgbUNvbG9yYnVmZmVyVHlwZSA9IHR5cGU7Ci0g
ICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGNvbG9y
YnVmZmVyKSk7Ci19Ci0KLXZvaWQgRnJhbWVidWZmZXI6OnNldERlcHRoYnVmZmVyKEdMZW51bSB0
eXBlLCBHTHVpbnQgZGVwdGhidWZmZXIpCi17Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IHR5cGU7
Ci0gICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGRl
cHRoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xl
bnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKQotewotICAgIG1TdGVuY2lsYnVmZmVyVHlw
ZSA9IHR5cGU7Ci0gICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChsb29rdXBSZW5kZXJidWZm
ZXIodHlwZSwgc3RlbmNpbGJ1ZmZlcikpOwotfQotCi12b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hU
ZXh0dXJlKEdMdWludCB0ZXh0dXJlKQotewotICAgIGlmIChtQ29sb3JidWZmZXJQb2ludGVyLmlk
KCkgPT0gdGV4dHVyZSAmJiBJc1RleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCi0gICAg
ewotICAgICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbUNvbG9yYnVm
ZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclBvaW50
ZXIuaWQoKSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkK
LSAgICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVw
dGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobVN0ZW5jaWxidWZm
ZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc1RleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZm
ZXJUeXBlKSkKLSAgICB7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0g
ICAgICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgfQotfQotCi12b2lk
IEZyYW1lYnVmZmVyOjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKLXsK
LSAgICBpZiAobUNvbG9yYnVmZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtQ29s
b3JidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICB7Ci0gICAgICAgIG1Db2xvcmJ1
ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNldChOVUxM
KTsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1
ZmZlciAmJiBtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKLSAgICB7Ci0gICAg
ICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJQb2lu
dGVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQb2ludGVyLmlk
KCkgPT0gcmVuZGVyYnVmZmVyICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZG
RVIpCi0gICAgewotICAgICAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAg
ICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAgIH0KLX0KLQotdW5zaWduZWQg
aW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoKQotewotICAgIFJlbmRlcmJ1
ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZmZXJQb2ludGVyLmdldCgpOwotCi0gICAgaWYg
KGNvbG9yYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbG9yYnVmZmVyLT5nZXRTZXJp
YWwoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKkZy
YW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQotewotICAgIFJlbmRlcmJ1ZmZlciAqY29sb3Ji
dWZmZXIgPSBtQ29sb3JidWZmZXJQb2ludGVyLmdldCgpOwotCi0gICAgaWYgKGNvbG9yYnVmZmVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1l
YnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVu
Y2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKLSAgICAKLSAgICBpZiAoIWRl
cHRoc3RlbmNpbGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1T
dGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVwdGhzdGVuY2ls
YnVmZmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlcHRoc3RlbmNpbGJ1ZmZlci0+Z2V0RGVw
dGhTdGVuY2lsKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXVuc2lnbmVkIGlu
dCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJTZXJpYWwoKQotewotICAgIFJlbmRlcmJ1ZmZl
ciAqZGVwdGhidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwotCi0gICAgaWYgKGRl
cHRoYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlcHRoYnVmZmVyLT5nZXRTZXJpYWwo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IEZyYW1lYnVmZmVy
OjpnZXRTdGVuY2lsYnVmZmVyU2VyaWFsKCkKLXsKLSAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxi
dWZmZXIgPSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7Ci0KLSAgICBpZiAoc3RlbmNpbGJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotQ29sb3JidWZmZXIgKkZyYW1lYnVmZmVyOjpn
ZXRDb2xvcmJ1ZmZlcigpCi17Ci0gICAgUmVuZGVyYnVmZmVyICpyYiA9IG1Db2xvcmJ1ZmZlclBv
aW50ZXIuZ2V0KCk7Ci0KLSAgICBpZiAocmIgIT0gTlVMTCAmJiByYi0+aXNDb2xvcmJ1ZmZlcigp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbG9yYnVmZmVyKj4ocmItPmdl
dFN0b3JhZ2UoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLX0KLQotRGVwdGhTdGVuY2lsYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhi
dWZmZXIoKQotewotICAgIFJlbmRlcmJ1ZmZlciAqcmIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdl
dCgpOwotCi0gICAgaWYgKHJiICE9IE5VTEwgJiYgcmItPmlzRGVwdGhidWZmZXIoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxEZXB0aFN0ZW5jaWxidWZmZXIqPihyYi0+Z2V0
U3RvcmFnZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgfQotfQotCi1EZXB0aFN0ZW5jaWxidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2ls
YnVmZmVyKCkKLXsKLSAgICBSZW5kZXJidWZmZXIgKnJiID0gbVN0ZW5jaWxidWZmZXJQb2ludGVy
LmdldCgpOwotCi0gICAgaWYgKHJiICE9IE5VTEwgJiYgcmItPmlzU3RlbmNpbGJ1ZmZlcigpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERlcHRoU3RlbmNpbGJ1ZmZlcio+KHJi
LT5nZXRTdG9yYWdlKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci19Ci0KLUdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJUeXBl
KCkKLXsKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZTsKLX0KLQotR0xlbnVtIEZyYW1lYnVm
ZmVyOjpnZXREZXB0aGJ1ZmZlclR5cGUoKQotewotICAgIHJldHVybiBtRGVwdGhidWZmZXJUeXBl
OwotfQotCi1HTGVudW0gRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJUeXBlKCkKLXsKLSAg
ICByZXR1cm4gbVN0ZW5jaWxidWZmZXJUeXBlOwotfQotCi1HTHVpbnQgRnJhbWVidWZmZXI6Omdl
dENvbG9yYnVmZmVySGFuZGxlKCkKLXsKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyUG9pbnRlci5p
ZCgpOwotfQotCi1HTHVpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVySGFuZGxlKCkKLXsK
LSAgICByZXR1cm4gbURlcHRoYnVmZmVyUG9pbnRlci5pZCgpOwotfQotCi1HTHVpbnQgRnJhbWVi
dWZmZXI6OmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKQotewotICAgIHJldHVybiBtU3RlbmNpbGJ1
ZmZlclBvaW50ZXIuaWQoKTsKLX0KLQotYm9vbCBGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbCgpCi17
Ci0gICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAg
RGVwdGhTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3RlbmNpbGJ1ZmZl
cigpOwotCi0gICAgICAgIGlmIChzdGVuY2lsYnVmZmVyT2JqZWN0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gc3RlbmNpbGJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbFNpemUoKSA+IDA7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRnJhbWVi
dWZmZXI6OmlzTXVsdGlzYW1wbGUoKQotewotICAgIC8vIElmIHRoZSBmcmFtZWJ1ZmZlciBpcyBu
b3QgY29tcGxldGUsIGF0dGFjaG1lbnQgc2FtcGxlcyBtYXkgYmUgbWlzbWF0Y2hlZCwgYW5kIGl0
Ci0gICAgLy8gY2Fubm90IGJlIHVzZWQgYXMgYSBtdWx0aXNhbXBsZSBmcmFtZWJ1ZmZlci4gSWYg
aXQgaXMgY29tcGxldGUsIGl0IGlzIHJlcXVpcmVkIHRvCi0gICAgLy8gaGF2ZSBhIGNvbG9yIGF0
dGFjaG1lbnQsIGFuZCBhbGwgaXRzIGF0dGFjaG1lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1i
ZXIgb2Ygc2FtcGxlcywKLSAgICAvLyBzbyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIHRoZSBj
b2xvcmJ1ZmZlciB3aWxsIGluZGljYXRlIHdoZXRoZXIgdGhlIGZyYW1lYnVmZmVyIGlzCi0gICAg
Ly8gbXVsdGlzYW1wbGVkLgotICAgIGlmIChjb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZF
Ul9DT01QTEVURSAmJiBnZXRDb2xvcmJ1ZmZlcigpLT5nZXRTYW1wbGVzKCkgPiAwKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLUdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNz
KCkKLXsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCBoZWlnaHQgPSAwOwotICAgIGludCBz
YW1wbGVzID0gLTE7Ci0KLSAgICBpZiAobUNvbG9yYnVmZmVyVHlwZSAhPSBHTF9OT05FKQotICAg
IHsKLSAgICAgICAgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyID0gZ2V0Q29sb3JidWZmZXIoKTsK
LQotICAgICAgICBpZiAoIWNvbG9yYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpID09IDAgfHwgY29sb3JidWZmZXItPmdl
dEhlaWdodCgpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJV
RkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoSXNU
ZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVmZmVyLT5nZXRGb3JtYXQoKSkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgd2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0
V2lkdGgoKTsKLSAgICAgICAgaGVpZ2h0ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgpOwotICAg
ICAgICBzYW1wbGVzID0gY29sb3JidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lO
R19BVFRBQ0hNRU5UOwotICAgIH0KLQotICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhidWZm
ZXIgPSBOVUxMOwotICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IE5VTEw7
Ci0KLSAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAg
ZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwotCi0gICAgICAgIGlmICghZGVwdGhidWZm
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVwdGhidWZmZXItPmdl
dFdpZHRoKCkgPT0gMCB8fCBkZXB0aGJ1ZmZlci0+Z2V0SGVpZ2h0KCkgPT0gMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA9PSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB3aWR0aCA9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgaGVp
Z2h0ID0gZGVwdGhidWZmZXItPmdldEhlaWdodCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKHdpZHRoICE9IGRlcHRoYnVmZmVyLT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBkZXB0aGJ1
ZmZlci0+Z2V0SGVpZ2h0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
c2FtcGxlcyA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgc2FtcGxlcyA9IGRlcHRoYnVm
ZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2FtcGxlcyAh
PSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9BTkdMRTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKElzVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBl
KSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChkZXB0aGJ1ZmZlci0+
Z2V0Rm9ybWF0KCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAg
IHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKCFzdGVu
Y2lsYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxi
dWZmZXItPmdldFdpZHRoKCkgPT0gMCB8fCBzdGVuY2lsYnVmZmVyLT5nZXRIZWlnaHQoKSA9PSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3RlbmNpbGJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAg
ICAgICAgICAgIGhlaWdodCA9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKHdpZHRoICE9IHN0ZW5jaWxidWZmZXItPmdldFdpZHRoKCkgfHwg
aGVpZ2h0ICE9IHN0ZW5jaWxidWZmZXItPmdldEhlaWdodCgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHNhbXBsZXMgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHNhbXBsZXMgPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAoc2FtcGxlcyAhPSBzdGVuY2lsYnVmZmVyLT5nZXRTYW1wbGVzKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJ
U0FNUExFX0FOR0xFOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoSXNUZXh0dXJl
VGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChJ
c0NvbXByZXNzZWQoc3RlbmNpbGJ1ZmZlci0+Z2V0Rm9ybWF0KCkpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09
IEdMX1JFTkRFUkJVRkZFUiAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVS
KQotICAgIHsKLSAgICAgICAgaWYgKGRlcHRoYnVmZmVyLT5nZXRGb3JtYXQoKSAhPSBHTF9ERVBU
SDI0X1NURU5DSUw4X09FUyB8fAotICAgICAgICAgICAgc3RlbmNpbGJ1ZmZlci0+Z2V0Rm9ybWF0
KCkgIT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgfHwKLSAgICAgICAgICAgIGRlcHRoYnVmZmVy
LT5nZXRTZXJpYWwoKSAhPSBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFOwotfQotCi1EZWZh
dWx0RnJhbWVidWZmZXI6OkRlZmF1bHRGcmFtZWJ1ZmZlcihDb2xvcmJ1ZmZlciAqY29sb3IsIERl
cHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhTdGVuY2lsKQotewotICAgIG1Db2xvcmJ1ZmZlclR5cGUg
PSBHTF9SRU5ERVJCVUZGRVI7Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX1JFTkRFUkJVRkZF
UjsKLSAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9SRU5ERVJCVUZGRVI7Ci0KLSAgICBtQ29s
b3JidWZmZXJQb2ludGVyLnNldChuZXcgUmVuZGVyYnVmZmVyKDAsIGNvbG9yKSk7Ci0KLSAgICBS
ZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIo
MCwgZGVwdGhTdGVuY2lsKTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChkZXB0aFN0ZW5j
aWxSZW5kZXJidWZmZXIpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoZGVwdGhTdGVu
Y2lsUmVuZGVyYnVmZmVyKTsKLX0KLQotaW50IEZyYW1lYnVmZmVyOjpnZXRTYW1wbGVzKCkKLXsK
LSAgICBpZiAoY29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAg
ewotICAgICAgICByZXR1cm4gZ2V0Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLUdMZW51bSBE
ZWZhdWx0RnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCi17Ci0gICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFOwotfQotCi19CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5o
CShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw5NiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBG
cmFtZWJ1ZmZlci5oOiBEZWZpbmVzIHRoZSBnbDo6RnJhbWVidWZmZXIgY2xhc3MuIEltcGxlbWVu
dHMgR0wgZnJhbWVidWZmZXIKLS8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40IHBhZ2UgMTA1LgotCi0jaWZuZGVmIExJQkdM
RVNWMl9GUkFNRUJVRkZFUl9IXwotI2RlZmluZSBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KLQot
I2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8ZDNk
OS5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvUmVmQ291bnRPYmplY3QuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBSZW5kZXJidWZm
ZXI7Ci1jbGFzcyBDb2xvcmJ1ZmZlcjsKLWNsYXNzIERlcHRoYnVmZmVyOwotY2xhc3MgU3RlbmNp
bGJ1ZmZlcjsKLWNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKLQotY2xhc3MgRnJhbWVidWZmZXIK
LXsKLSAgcHVibGljOgotICAgIEZyYW1lYnVmZmVyKCk7Ci0KLSAgICB2aXJ0dWFsIH5GcmFtZWJ1
ZmZlcigpOwotCi0gICAgdm9pZCBzZXRDb2xvcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGNv
bG9yYnVmZmVyKTsKLSAgICB2b2lkIHNldERlcHRoYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQg
ZGVwdGhidWZmZXIpOwotICAgIHZvaWQgc2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1
aW50IHN0ZW5jaWxidWZmZXIpOwotCi0gICAgdm9pZCBkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0
dXJlKTsKLSAgICB2b2lkIGRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsK
LQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKCk7Ci0gICAgdW5zaWduZWQgaW50IGdldERlcHRoYnVmZmVyU2VyaWFs
KCk7Ci0gICAgdW5zaWduZWQgaW50IGdldFN0ZW5jaWxidWZmZXJTZXJpYWwoKTsKLQotICAgIENv
bG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcigpOwotICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqZ2V0
RGVwdGhidWZmZXIoKTsKLSAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIo
KTsKLQotICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKLSAgICBHTGVudW0gZ2V0RGVw
dGhidWZmZXJUeXBlKCk7Ci0gICAgR0xlbnVtIGdldFN0ZW5jaWxidWZmZXJUeXBlKCk7Ci0KLSAg
ICBHTHVpbnQgZ2V0Q29sb3JidWZmZXJIYW5kbGUoKTsKLSAgICBHTHVpbnQgZ2V0RGVwdGhidWZm
ZXJIYW5kbGUoKTsKLSAgICBHTHVpbnQgZ2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOwotCi0gICAg
Ym9vbCBoYXNTdGVuY2lsKCk7Ci0gICAgYm9vbCBpc011bHRpc2FtcGxlKCk7Ci0gICAgaW50IGdl
dFNhbXBsZXMoKTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGNvbXBsZXRlbmVzcygpOwotCi0gIHBy
b3RlY3RlZDoKLSAgICBHTGVudW0gbUNvbG9yYnVmZmVyVHlwZTsKLSAgICBCaW5kaW5nUG9pbnRl
cjxSZW5kZXJidWZmZXI+IG1Db2xvcmJ1ZmZlclBvaW50ZXI7Ci0KLSAgICBHTGVudW0gbURlcHRo
YnVmZmVyVHlwZTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1EZXB0aGJ1ZmZl
clBvaW50ZXI7Ci0KLSAgICBHTGVudW0gbVN0ZW5jaWxidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQ
b2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXJQb2ludGVyOwotCi0gIHByaXZhdGU6
Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1lYnVmZmVyKTsKLQotICAgIFJlbmRl
cmJ1ZmZlciAqbG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgaGFuZGxlKSBj
b25zdDsKLX07Ci0KLWNsYXNzIERlZmF1bHRGcmFtZWJ1ZmZlciA6IHB1YmxpYyBGcmFtZWJ1ZmZl
cgotewotICBwdWJsaWM6Ci0gICAgRGVmYXVsdEZyYW1lYnVmZmVyKENvbG9yYnVmZmVyICpjb2xv
ciwgRGVwdGhTdGVuY2lsYnVmZmVyICpkZXB0aFN0ZW5jaWwpOwotCi0gICAgdmlydHVhbCBHTGVu
dW0gY29tcGxldGVuZXNzKCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oRGVmYXVsdEZyYW1lYnVmZmVyKTsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xF
U1YyX0ZSQU1FQlVGRkVSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHJldmlzaW9u
IDc0NjU4KQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwyODA2ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFByb2dyYW0uY3Bw
OiBJbXBsZW1lbnRzIHRoZSBnbDo6UHJvZ3JhbSBjbGFzcy4gSW1wbGVtZW50cyBHTCBwcm9ncmFt
IG9iamVjdHMKLS8vIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0
XSBzZWN0aW9uIDIuMTAuMyBwYWdlIDI4LgotCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0u
aCIKLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21h
aW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3V0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLXVuc2lnbmVkIGludCBQcm9ncmFtOjpt
Q3VycmVudFNlcmlhbCA9IDE7Ci0KLXN0ZDo6c3RyaW5nIHN0cihpbnQgaSkKLXsKLSAgICBjaGFy
IGJ1ZmZlclsyMF07Ci0gICAgc3ByaW50ZihidWZmZXIsICIlZCIsIGkpOwotICAgIHJldHVybiBi
dWZmZXI7Ci19Ci0KLVVuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKSA6IHR5cGUodHlwZSksIG5hbWUobmFt
ZSksIGFycmF5U2l6ZShhcnJheVNpemUpCi17Ci0gICAgaW50IGJ5dGVzID0gVW5pZm9ybVR5cGVT
aXplKHR5cGUpICogYXJyYXlTaXplOwotICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRl
c107Ci0gICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci0gICAg
aGFuZGxlc1NldCA9IGZhbHNlOwotfQotCi1Vbmlmb3JtOjp+VW5pZm9ybSgpCi17Ci0gICAgZGVs
ZXRlW10gZGF0YTsKLX0KLQotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qg
c3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5k
ZXgpIAotICAgIDogbmFtZShuYW1lKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCi17
Ci19Ci0KLVByb2dyYW06OlByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQg
aGFuZGxlKSA6IG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlciksIG1IYW5kbGUoaGFuZGxlKQotewot
ICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7Ci0gICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0K
LSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5V
TEw7Ci0gICAgbUNvbnN0YW50VGFibGVQUyA9IE5VTEw7Ci0gICAgbUNvbnN0YW50VGFibGVWUyA9
IE5VTEw7Ci0KLSAgICBtSW5mb0xvZyA9IE5VTEw7Ci0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwot
Ci0gICAgdW5saW5rKCk7Ci0KLSAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7Ci0KLSAgICBtUmVm
Q291bnQgPSAwOwotCi0gICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7Ci19Ci0KLVByb2dyYW06
On5Qcm9ncmFtKCkKLXsKLSAgICB1bmxpbmsodHJ1ZSk7Ci0KLSAgICBpZiAobVZlcnRleFNoYWRl
ciAhPSBOVUxMKQotICAgIHsKLSAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwotICAg
IH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIG1G
cmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtOjphdHRh
Y2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09
IEdMX1ZFUlRFWF9TSEFERVIpCi0gICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
bVZlcnRleFNoYWRlciA9IChWZXJ0ZXhTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAgbVZlcnRleFNo
YWRlci0+YWRkUmVmKCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09
IEdMX0ZSQUdNRU5UX1NIQURFUikKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIG1GcmFnbWVudFNoYWRlciA9IChGcmFnbWVudFNoYWRlciopc2hhZGVyOwotICAgICAgICBt
RnJhZ21lbnRTaGFkZXItPmFkZFJlZigpOwotICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hh
ZGVyICpzaGFkZXIpCi17Ci0gICAgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX1ZFUlRFWF9T
SEFERVIpCi0gICAgewotICAgICAgICBpZiAobVZlcnRleFNoYWRlciAhPSBzaGFkZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1W
ZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURF
UikKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gc2hhZGVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtRnJh
Z21lbnRTaGFkZXItPnJlbGVhc2UoKTsKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsK
LSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgdW5saW5rKCk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyc0NvdW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gKG1WZXJ0ZXhTaGFkZXIgPyAxIDogMCkgKyAobUZyYWdtZW50
U2hhZGVyID8gMSA6IDApOwotfQotCi1JRGlyZWN0M0RQaXhlbFNoYWRlcjkgKlByb2dyYW06Omdl
dFBpeGVsU2hhZGVyKCkKLXsKLSAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKLX0KLQotSURp
cmVjdDNEVmVydGV4U2hhZGVyOSAqUHJvZ3JhbTo6Z2V0VmVydGV4U2hhZGVyKCkKLXsKLSAgICBy
ZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YmluZEF0dHJpYnV0
ZUxvY2F0aW9uKEdMdWludCBpbmRleCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBpZiAoaW5k
ZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtQXR0
cmlidXRlQmluZGluZ1tpXS5lcmFzZShuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1BdHRy
aWJ1dGVCaW5kaW5nW2luZGV4XS5pbnNlcnQobmFtZSk7Ci0gICAgfQotfQotCi1HTHVpbnQgUHJv
Z3JhbTo6Z2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBpZiAo
bmFtZSkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGluZGV4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtTGlua2Vk
QXR0cmlidXRlW2luZGV4XS5uYW1lID09IHN0ZDo6c3RyaW5nKG5hbWUpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotaW50IFByb2dyYW06OmdldFNlbWFudGlj
SW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KQotewotICAgIGlmIChhdHRyaWJ1dGVJbmRleCA+PSAw
ICYmIGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1TZW1hbnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4XTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gLTE7Ci19Ci0KLS8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0ZXh0dXJlIHVuaXQgY29y
cmVzcG9uZGluZyB0byBhIERpcmVjdDNEIDkgc2FtcGxlcgotLy8gaW5kZXggcmVmZXJlbmNlZCBp
biB0aGUgY29tcGlsZWQgSExTTCBzaGFkZXIKLUdMaW50IFByb2dyYW06OmdldFNhbXBsZXJNYXBw
aW5nKHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgpCi17Ci0gICAgYXNzZXJ0KHNhbXBsZXJJbmRl
eCA8IHNpemVvZihtU2FtcGxlcnMpL3NpemVvZihtU2FtcGxlcnNbMF0pKTsKLQotICAgIEdMaW50
IGxvZ2ljYWxUZXh0dXJlVW5pdCA9IC0xOwotCi0gICAgaWYgKG1TYW1wbGVyc1tzYW1wbGVySW5k
ZXhdLmFjdGl2ZSkKLSAgICB7Ci0gICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVy
c1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdDsKLSAgICB9Ci0KLSAgICBpZiAobG9n
aWNhbFRleHR1cmVVbml0IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCi0gICAgewotICAgICAg
ICByZXR1cm4gbG9naWNhbFRleHR1cmVVbml0OwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0K
LQotU2FtcGxlclR5cGUgUHJvZ3JhbTo6Z2V0U2FtcGxlclR5cGUodW5zaWduZWQgaW50IHNhbXBs
ZXJJbmRleCkKLXsKLSAgICBhc3NlcnQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykv
c2l6ZW9mKG1TYW1wbGVyc1swXSkpOwotICAgIGFzc2VydChtU2FtcGxlcnNbc2FtcGxlckluZGV4
XS5hY3RpdmUpOwotCi0gICAgcmV0dXJuIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLnR5cGU7Ci19
Ci0KLWJvb2wgUHJvZ3JhbTo6aXNTYW1wbGVyRGlydHkodW5zaWduZWQgaW50IHNhbXBsZXJJbmRl
eCkgY29uc3QKLXsKLSAgICBpZiAoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykvc2l6
ZW9mKG1TYW1wbGVyc1swXSkpCi0gICAgewotICAgICAgICByZXR1cm4gbVNhbXBsZXJzW3NhbXBs
ZXJJbmRleF0uZGlydHk7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBQcm9ncmFtOjpzZXRTYW1wbGVyRGlydHkodW5zaWduZWQg
aW50IHNhbXBsZXJJbmRleCwgYm9vbCBkaXJ0eSkKLXsKLSAgICBpZiAoc2FtcGxlckluZGV4IDwg
c2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpCi0gICAgewotICAgICAgICBt
U2FtcGxlcnNbc2FtcGxlckluZGV4XS5kaXJ0eSA9IGRpcnR5OwotICAgIH0KLSAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihjb25z
dCBjaGFyICpuYW1lLCBib29sIGRlY29yYXRlZCkKLXsKLSAgICBzdGQ6OnN0cmluZyBuYW1lU3Ry
KG5hbWUpOwotICAgIGludCBzdWJzY3JpcHQgPSAwOwotICAgIHNpemVfdCBiZWdpbkIgPSBuYW1l
U3RyLmZpbmQoJ1snKTsKLSAgICBzaXplX3QgZW5kQiA9IG5hbWVTdHIuZmluZCgnXScpOwotICAg
IGlmIChiZWdpbkIgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgZW5kQiAhPSBzdGQ6OnN0cmluZzo6
bnBvcykKLSAgICB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHN1YnNjclN0ciA9IG5hbWVTdHIuc3Vi
c3RyKGJlZ2luQiArIDEsIGJlZ2luQiAtIGVuZEIgLSAxKTsKLSAgICAgICAgbmFtZVN0ci5lcmFz
ZShiZWdpbkIpOwotICAgICAgICBzdWJzY3JpcHQgPSBhdG9pKHN1YnNjclN0ci5jX3N0cigpKTsK
LSAgICB9Ci0KLSAgICBpZiAoIWRlY29yYXRlZCkKLSAgICB7Ci0gICAgICAgIG5hbWVTdHIgPSBk
ZWNvcmF0ZShuYW1lU3RyKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMg
PSBtVW5pZm9ybUluZGV4LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9
IDA7IGxvY2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCi0gICAgewotICAgICAgICBp
ZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lU3RyICYmCi0gICAgICAgICAg
ICBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIC0xOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCi17Ci0gICAgaWYgKGxvY2F0aW9u
IDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVu
aWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0ZMT0FUKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAg
ICAgICAgICAgIHYsIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAgICAgaW50IGFy
cmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlT
aXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRl
bXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5W
QUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgICAgICBHTGJv
b2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50XTsKLQotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2
W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9vbGVhbiksCi0gICAg
ICAgICAgICAgICBib29sUGFyYW1zLCBzaXplb2YoR0xib29sZWFuKSAqIGNvdW50KTsKLQotICAg
ICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBy
b2dyYW06OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50
KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQot
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzIpCi0gICAgewotICAg
ICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAg
IGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJy
YXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0K
LSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMiwKLSAgICAgICAgICAgICAgIHYsIDIg
KiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6
ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09
IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQgKiAyXTsKLQotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50ICogMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAodltpXSA9PSAwLjBmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGJvb2xlYW4pICog
MiwKLSAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIDIgKiBzaXplb2YoR0xib29sZWFuKSAqIGNv
dW50KTsKLQotICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKLSAgICB9Ci0gICAgZWxzZSAK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMz
KQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6
ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9u
LWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9
IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDMsCi0gICAgICAg
ICAgICAgICB2LCAzICogc2l6ZW9mKEdMZmxvYXQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNl
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAqIDNdOwotCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiAzOyArK2kpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICh2W2ldID09IDAuMGYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYm9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9U
UlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdM
Ym9vbGVhbikgKiAzLAotICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgMyAqIHNpemVvZihHTGJv
b2xlYW4pICogY291bnQpOwotCi0gICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAgIH0K
LSAgICBlbHNlIAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9u
IDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVu
aWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0ZMT0FUX1ZFQzQpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9y
bS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJy
YXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAg
ICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICog
NCwKLSAgICAgICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAg
IHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQot
ICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6
bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50
ICogNF07Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDQ7ICsraSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMC4wZikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtZW1j
cHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiBzaXplb2YoR0xib29sZWFuKSAqIDQsCi0gICAgICAgICAgICAgICBib29sUGFyYW1zLCA0ICog
c2l6ZW9mKEdMYm9vbGVhbikgKiBjb3VudCk7Ci0KLSAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJh
bXM7Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybU1hdHJp
eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
Ci17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDIpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5
U2l6ZTsKLQotICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWlu
KGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotCi0gICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogNCwKLSAgICAgICAgICAgdmFsdWUsIDQg
KiBzaXplb2YoR0xmbG9hdCkgKiBjb3VudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtOjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFU
MykKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgYXJyYXlT
aXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgaWYgKGFycmF5U2l6ZSA9PSAx
ICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdy
aXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJ
T04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkg
KiA5LAotICAgICAgICAgICB2YWx1ZSwgOSAqIHNpemVvZihHTGZsb2F0KSAqIGNvdW50KTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm1NYXRyaXg0ZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7
Ci0KLSAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihhcnJh
eVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIDE2LAotICAgICAgICAgICB2YWx1ZSwgMTYgKiBz
aXplb2YoR0xmbG9hdCkgKiBjb3VudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQ
cm9ncmFtOjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0g
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UKQotICAgIHsKLSAgICAgICAgaW50
IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJy
YXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAt
IChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgICAg
IG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAgICAgICB2LCBzaXplb2YoR0xpbnQpICog
Y291bnQpOwotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JP
T0wpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlT
aXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50
ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50LCBjb3VudCk7Ci0gICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xl
YW5bY291bnRdOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tp
XSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtZW1jcHko
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBz
aXplb2YoR0xib29sZWFuKSwKLSAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIHNpemVvZihHTGJv
b2xlYW4pICogY291bnQpOwotCi0gICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lO
VF9WRUMyKQotICAgIHsKLSAgICAgICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFy
cmF5U2l6ZTsKLQotICAgICAgICBpZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBj
b3VudCA9IHN0ZDo6bWluKGFycmF5U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGludCkgKiAyLAotICAg
ICAgICAgICAgICAgdiwgMiAqIHNpemVvZihHTGludCkgKiBjb3VudCk7Ci0gICAgfQotICAgIGVs
c2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMyKQotICAgIHsKLSAgICAg
ICAgaW50IGFycmF5U2l6ZSA9IHRhcmdldFVuaWZvcm0tPmFycmF5U2l6ZTsKLQotICAgICAgICBp
ZiAoYXJyYXlTaXplID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgICAgICBjb3VudCA9IHN0ZDo6bWluKGFycmF5
U2l6ZSAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAg
ICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW2NvdW50ICogMl07Ci0K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAqIDI7ICsraSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKHZbaV0gPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBib29sUGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tpXSA9IEdMX1RS
VUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xi
b29sZWFuKSAqIDIsCi0gICAgICAgICAgICAgICBib29sUGFyYW1zLCAyICogc2l6ZW9mKEdMYm9v
bGVhbikgKiBjb3VudCk7Ci0KLSAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsKLSAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5U
X1ZFQzMpCi0gICAgewotICAgICAgICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJy
YXlTaXplOwotCi0gICAgICAgIGlmIChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNv
dW50ID0gc3RkOjptaW4oYXJyYXlTaXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMaW50KSAqIDMsCi0gICAg
ICAgICAgICAgICB2LCAzICogc2l6ZW9mKEdMaW50KSAqIGNvdW50KTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCi0gICAgewotICAgICAg
ICBpbnQgYXJyYXlTaXplID0gdGFyZ2V0VW5pZm9ybS0+YXJyYXlTaXplOwotCi0gICAgICAgIGlm
IChhcnJheVNpemUgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBp
cyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgICAgIGNvdW50ID0gc3RkOjptaW4oYXJyYXlT
aXplIC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAg
ICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bY291bnQgKiAzXTsKLQot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICogMzsgKytpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAodltpXSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGJvb2xQYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sUGFyYW1zW2ldID0gR0xfVFJV
RTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1lbWNweSh0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGJv
b2xlYW4pICogMywKLSAgICAgICAgICAgICAgIGJvb2xQYXJhbXMsIDMgKiBzaXplb2YoR0xib29s
ZWFuKSAqIGNvdW50KTsKLQotICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFByb2dyYW06OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAgIGlmIChsb2NhdGlvbiA8IDAg
fHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3Jt
LT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRf
VkVDNCkKLSAgICB7Ci0gICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7Ci0KLSAgICAgICAgaWYgKGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291
bnQgPSBzdGQ6Om1pbihhcnJheVNpemUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLQotICAgICAgICBtZW1jcHkodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xpbnQpICogNCwKLSAgICAg
ICAgICAgICAgIHYsIDQgKiBzaXplb2YoR0xpbnQpICogY291bnQpOwotICAgIH0KLSAgICBlbHNl
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0KLSAgICAgICAgaWYg
KGFycmF5U2l6ZSA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICAgICAgY291bnQgPSBzdGQ6Om1pbihhcnJheVNp
emUgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICAg
ICAgR0xib29sZWFuICpib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltjb3VudCAqIDRdOwotCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgKiA0OyArK2kpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICh2W2ldID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbaV0gPSBHTF9UUlVF
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbWVtY3B5KHRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMYm9v
bGVhbikgKiA0LAotICAgICAgICAgICAgICAgYm9vbFBhcmFtcywgNCAqIHNpemVvZihHTGJvb2xl
YW4pICogY291bnQpOwotCi0gICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBH
TGZsb2F0ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAo
aW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9y
bUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgc3dpdGNoIChVbmlm
b3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICB7Ci0gICAgICBjYXNl
IEdMX0JPT0w6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9
IChHTGJvb2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogY291bnQ7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0g
ICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQgKiBzaXplb2YoR0xmbG9hdCksCi0gICAgICAgICAg
ICAgICBjb3VudCAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9JTlQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xp
bnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogY291bnQ7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxv
YXQpaW50UGFyYW1zW2ldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMaW50
ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1V
bmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uaW5kZXhdOwotCi0gICAgdW5zaWduZWQgaW50IGNvdW50ID0gVW5pZm9ybUNvbXBv
bmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgc3dpdGNoIChVbmlmb3JtQ29t
cG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JP
T0w6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IHRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogY291bnQ7
Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpYm9vbFBh
cmFtc1tpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFy
YW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogY291bnQ7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJh
bXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJhbXNbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgbWVtY3B5KHBhcmFt
cywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiBjb3VudCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihH
TGludCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6ZGlydHlBbGxVbmlm
b3JtcygpCi17Ci0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7
IGluZGV4KyspCi0gICAgewotICAgICAgICBtVW5pZm9ybXNbaW5kZXhdLT5kaXJ0eSA9IHRydWU7
Ci0gICAgfQotfQotCi12b2lkIFByb2dyYW06OmRpcnR5QWxsU2FtcGxlcnMoKQotewotICAgIGZv
ciAodW5zaWduZWQgaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UzsgKytpbmRleCkKLSAgICB7Ci0gICAgICAgIG1TYW1wbGVyc1tpbmRleF0uZGlydHkgPSB0cnVl
OwotICAgIH0KLX0KLQotLy8gQXBwbGllcyBhbGwgdGhlIHVuaWZvcm1zIHNldCBmb3IgdGhpcyBw
cm9ncmFtIG9iamVjdCB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgUHJvZ3JhbTo6YXBw
bHlVbmlmb3JtcygpCi17Ci0gICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1J
bmRleC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlv
biA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisrKQotICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLQotICAgICAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+ZGlydHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBhcnJheVNpemUg
PSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7Ci0gICAgICAgICAgICBHTGZsb2F0ICpmID0gKEdM
ZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGE7Ci0gICAgICAgICAgICBHTGludCAqaSA9IChHTGlu
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKLSAgICAgICAgICAgIEdMYm9vbGVhbiAqYiA9IChHTGJv
b2xlYW4qKXRhcmdldFVuaWZvcm0tPmRhdGE7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
VW5pZm9ybS0+dHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09M
OiAgICAgICBhcHBseVVuaWZvcm0xYnYobG9jYXRpb24sIGFycmF5U2l6ZSwgYik7ICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjogIGFwcGx5VW5pZm9ybTJidihs
b2NhdGlvbiwgYXJyYXlTaXplLCBiKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQk9PTF9WRUMzOiAgYXBwbHlVbmlmb3JtM2J2KGxvY2F0aW9uLCBhcnJheVNpemUsIGIpOyAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6ICBhcHBseVVuaWZv
cm00YnYobG9jYXRpb24sIGFycmF5U2l6ZSwgYik7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUOiAgICAgIGFwcGx5VW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXlTaXpl
LCBmKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogYXBw
bHlVbmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiBhcHBseVVuaWZvcm0zZnYobG9jYXRpb24sIGFy
cmF5U2l6ZSwgZik7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6IGFwcGx5VW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXlTaXplLCBmKTsgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogYXBwbHlVbmlmb3JtTWF0cml4MmZ2
KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQzOiBhcHBseVVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGFycmF5U2l6ZSwgZik7
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IGFwcGx5VW5pZm9ybU1h
dHJpeDRmdihsb2NhdGlvbiwgYXJyYXlTaXplLCBmKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfSU5UOiAgICAgICAgYXBwbHlVbmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheVNpemUsIGkp
OyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjogICBhcHBseVVu
aWZvcm0yaXYobG9jYXRpb24sIGFycmF5U2l6ZSwgaSk7ICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0lOVF9WRUMzOiAgIGFwcGx5VW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXlT
aXplLCBpKTsgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6ICAg
YXBwbHlVbmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi0vLyBDb21waWxlcyB0aGUgSExTTCBjb2RlIG9mIHRoZSBh
dHRhY2hlZCBzaGFkZXJzIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwotSUQzRFhCdWZmZXIgKlBy
b2dyYW06OmNvbXBpbGVUb0JpbmFyeShjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9m
aWxlLCBJRDNEWENvbnN0YW50VGFibGUgKipjb25zdGFudFRhYmxlKQotewotICAgIGlmICghaGxz
bCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIElEM0RYQnVmZmVy
ICpiaW5hcnkgPSBOVUxMOwotICAgIElEM0RYQnVmZmVyICplcnJvck1lc3NhZ2UgPSBOVUxMOwot
Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBEM0RYQ29tcGlsZVNoYWRlcihobHNsLCAoVUlOVClzdHJs
ZW4oaGxzbCksIE5VTEwsIE5VTEwsICJtYWluIiwgcHJvZmlsZSwgMCwgJmJpbmFyeSwgJmVycm9y
TWVzc2FnZSwgY29uc3RhbnRUYWJsZSk7Ci0KLSAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gYmluYXJ5OwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEM0RYQnVmZmVyKilO
VUxMKTsKLSAgICB9Ci0KLSAgICBpZiAoZXJyb3JNZXNzYWdlKQotICAgIHsKLSAgICAgICAgY29u
c3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBv
aW50ZXIoKTsKLQotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIiVzXG4iLCBtZXNzYWdlKTsKLSAg
ICAgICAgVFJBQ0UoIlxuJXMiLCBobHNsKTsKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdl
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLy8gUGFja3MgdmFyeWluZ3MgaW50
byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09w
ZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9u
IDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0
ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dyYW06OnBhY2tWYXJ5aW5ncyhjb25z
dCBWYXJ5aW5nICpwYWNraW5nW11bNF0pCi17Ci0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0
b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAh
PSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAg
ICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5z
aXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7
Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgICAgIGlmIChtID09IDIgfHwg
bSA9PSAzIHx8IG0gPT0gNCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7
IHIgPD0gTUFYX1ZBUllJTkdfVkVDVE9SUyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAg
ICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYg
YXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFy
eWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gTUFYX1ZBUllJTkdfVkVD
VE9SUyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHgg
PCA0ICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWls
YWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5jb2wgPSAyOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciAr
IHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobSA9PSAxKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgTUFYX1ZBUllJTkdfVkVDVE9SUzsgeSsrKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGNvbHVt
biA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+IG4gJiYgc3BhY2VbeF0gPCBz
cGFjZVtjb2x1bW5dKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29s
dW1uID0geDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChzcGFjZVtjb2x1bW5dID4gbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBm
b3IgKGludCByID0gMDsgciA8IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7IHIrKykKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcg
PSByOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBu
OyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNv
bCA9IGNvbHVtbjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBp
ZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiQ291
bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAg
ICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUg
bnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBm
b3IgKGludCByID0gMDsgciA8IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7IHIrKykKLSAgICB7Ci0gICAg
ICAgIGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8
fCBwYWNraW5nW3JdWzNdKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlcnMrKzsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZWdpc3RlcnM7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bTo6bGlua1ZhcnlpbmdzKCkKLXsKLSAgICBpZiAobVBpeGVsSExTTC5lbXB0eSgpIHx8IG1WZXJ0
ZXhITFNMLmVtcHR5KCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgY29uc3QgVmFyeWluZyAqcGFja2luZ1tNQVhfVkFSWUlOR19WRUNUT1JTXVs0XSA9IHtOVUxM
fTsKLSAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1ZhcnlpbmdzKHBhY2tpbmcpOwotCi0gICAgaWYg
KHJlZ2lzdGVycyA8IDApCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKHJlZ2lzdGVycyA9PSBNQVhfVkFSWUlOR19WRUNUT1JTICYmIG1GcmFnbWVudFNoYWRl
ci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBhcHBlbmRUb0luZm9Mb2coIk5vIHZh
cnlpbmcgcmVnaXN0ZXJzIGxlZnQgdG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQiKTsKLQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Ig
aW5wdXQgPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IG1GcmFn
bWVudFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCi0gICAgewotICAgICAgICBib29s
IG1hdGNoZWQgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBv
dXRwdXQgPSBtVmVydGV4U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigpOyBvdXRwdXQgIT0gbVZlcnRl
eFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IG91dHB1dCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAob3V0cHV0LT5uYW1lID09IGlucHV0LT5uYW1lKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChvdXRwdXQtPnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXpl
ICE9IGlucHV0LT5zaXplKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kVG9JbmZvTG9nKCJUeXBlIG9mIHZlcnRleCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNo
IHRoYXQgb2YgdGhlIGZyYWdtZW50IHZhcnlpbmciLCBvdXRwdXQtPm5hbWUuY19zdHIoKSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIG91dHB1dC0+cmVnID0gaW5wdXQtPnJlZzsKLSAgICAgICAgICAgICAg
ICBvdXRwdXQtPmNvbCA9IGlucHV0LT5jb2w7Ci0KLSAgICAgICAgICAgICAgICBtYXRjaGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghbWF0Y2hlZCkKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kVG9J
bmZvTG9nKCJGcmFnbWVudCB2YXJ5aW5nIHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZl
cnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRD
b250ZXh0KCk7Ci0gICAgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygp
OwotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMgPyAiQ09MT1IiIDogIlRF
WENPT1JEIik7Ci0KLSAgICBtVmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCi0gICAg
ICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAg
Zm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbVZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1WZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1
dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXR0cmlidXRl
LT50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICBtVmVydGV4
SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMjogbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKLSAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzM6IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0
NCAiOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogbVZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
IG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0OiBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAg
ICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZl
cnRleEhMU0wgKz0gZGVjb3JhdGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBz
dHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZh
cmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExT
TCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAg
InN0cnVjdCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogUE9TSVRJT047XG4iOwotCi0gICAg
Zm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGludCBy
ZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChw
YWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZs
b2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWlu
Z1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAg
IGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVy
cykgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobVZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNp
emUgJiYgc20zKQotICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Q
b2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgbVZlcnRleEhMU0wgKz0gIn07XG4i
Ci0gICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICJWU19PVVRQVVQg
bWFpbihWU19JTlBVVCBpbnB1dClcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAg
IGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1WZXJ0ZXhTaGFkZXIt
Pm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtVmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAi
ICAgICIgKyBkZWNvcmF0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAgICAgICAgaWYg
KFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9
Ci0KLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIihpbnB1dC4iICsgZGVjb3JhdGUoYXR0cmlidXRl
LT5uYW1lKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBtVmVydGV4SExTTCArPSAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAtIGR4
X0hhbGZQaXhlbFNpemUueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCi0gICAgICAgICAgICAgICAgICAg
IiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueSA9IC0oZ2xfUG9zaXRpb24ueSAtIGR4X0hhbGZQaXhl
bFNpemUueSAqIGdsX1Bvc2l0aW9uLncpO1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0
cHV0LmdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41
O1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Q
b3NpdGlvbi53O1xuIjsKLQotICAgIGlmIChtVmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAm
JiBzbTMpCi0gICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2lu
dFNpemUgPSBjbGFtcChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9J
TlRfU0laRV9SQU5HRV9NQVhfU00zKSArICIpO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAobUZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhITFNMICs9
ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKLSAgICB9Ci0KLSAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gbVZlcnRleFNoYWRlci0+dmFy
eWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtVmVydGV4U2hhZGVyLT52YXJ5aW5ncy5lbmQoKTsg
dmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291
bnQodmFyeWluZy0+dHlwZSk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBy
ID0gdmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqOwotICAgICAgICAgICAgICAgICAgICBtVmVy
dGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihyKTsKLQotICAgICAgICAgICAgICAgICAg
ICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0
aXBsZSB2YXJ5aW5ncwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0g
cGFja2luZ1tyXVswXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0g
Ii4iOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goeCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMDogbVZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG1WZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBtVmVydGV4SExTTCArPSAi
eiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogbVZl
cnRleEhMU0wgKz0gInciOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhI
TFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGkpICsg
Il0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJv
d3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
VmVydGV4SExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhITFNMICs9
ICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIG1WZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICBtUGl4ZWxI
TFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAg
IAotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBtRnJhZ21lbnRTaGFk
ZXItPnZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbUZyYWdtZW50U2hhZGVyLT52YXJ5aW5n
cy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNp
emU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlh
YmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAg
ICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsgIiA6ICIg
KyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K
LSAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1h
bnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVu
dFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKLSAgICB7Ci0gICAgICAgIG1QaXhlbEhM
U0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6IFRFWENPT1JEMDtcbiI7Ci0gICAgfQot
Ci0gICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAg
ICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xuIjsKLSAgICB9Ci0K
LSAgICBtUGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAg
ICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Db2xvclsxXSA6IENPTE9SO1xuIgot
ICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgICAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAg
ICAgICAgICAie1xuIjsKLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQotICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlu
cHV0LmdsX0ZyYWdDb29yZC53O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJh
Z0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfVmlld3BvcnQueCAr
IGR4X1ZpZXdwb3J0Lno7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29v
cmQueSA9IChpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9WaWV3cG9ydC55ICsgZHhf
Vmlld3BvcnQudztcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC56
ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4i
OwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBz
bTMpCi0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZCA9IGZs
b2F0MihpbnB1dC5nbF9Qb2ludENvb3JkLngsIDEuMCAtIGlucHV0LmdsX1BvaW50Q29vcmQueSk7
XG4iOwotICAgIH0KLQotICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcp
Ci0gICAgewotICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBkeF9Q
b2ludHNPckxpbmVzIHx8IChkeF9Gcm9udENDVyA/IChpbnB1dC52RmFjZSA+PSAwLjApIDogKGlu
cHV0LnZGYWNlIDw9IDAuMCkpO1xuIjsKLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0Ojpp
dGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigpOyB2YXJ5
aW5nICE9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7
Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUp
OwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5
aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNM
ICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZh
cnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtUGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiWyIgKyBzdHIo
aikgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBt
UGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIG1QaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBn
bF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAi
ICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICIgICAgb3V0cHV0LmdsX0NvbG9yWzBdID0gZ2xfQ29sb3JbMF07XG4iCi0gICAgICAgICAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCi0g
ICAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgIFRSQUNFKCJcbiVzIiwgbVBpeGVsSExTTC5j
X3N0cigpKTsKLSAgICBUUkFDRSgiXG4lcyIsIG1WZXJ0ZXhITFNMLmNfc3RyKCkpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLS8vIExpbmtzIHRoZSBITFNMIGNvZGUgb2YgdGhlIHZlcnRleCBh
bmQgcGl4ZWwgc2hhZGVyIGJ5IG1hdGNoaW5nIHVwIHRoZWlyIHZhcnlpbmdzLAotLy8gY29tcGls
aW5nIHRoZW0gaW50byBiaW5hcmllcywgZGV0ZXJtaW5pbmcgdGhlIGF0dHJpYnV0ZSBtYXBwaW5n
cywgYW5kIGNvbGxlY3RpbmcKLS8vIGEgbGlzdCBvZiB1bmlmb3Jtcwotdm9pZCBQcm9ncmFtOjps
aW5rKCkKLXsKLSAgICB1bmxpbmsoKTsKLQotICAgIGlmICghbUZyYWdtZW50U2hhZGVyIHx8ICFt
RnJhZ21lbnRTaGFkZXItPmlzQ29tcGlsZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIW1WZXJ0ZXhTaGFkZXIgfHwgIW1WZXJ0ZXhTaGFkZXItPmlzQ29tcGls
ZWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtUGl4ZWxITFNMID0g
bUZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hh
ZGVyLT5nZXRITFNMKCk7Ci0KLSAgICBpZiAoIWxpbmtWYXJ5aW5ncygpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7
Ci0gICAgY29uc3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVy
TW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAiOwotICAgIGNvbnN0IGNoYXIgKnBpeGVsUHJv
ZmlsZSA9IGNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18y
XzAiOwotCi0gICAgSUQzRFhCdWZmZXIgKnZlcnRleEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeSht
VmVydGV4SExTTC5jX3N0cigpLCB2ZXJ0ZXhQcm9maWxlLCAmbUNvbnN0YW50VGFibGVWUyk7Ci0g
ICAgSUQzRFhCdWZmZXIgKnBpeGVsQmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1QaXhlbEhMU0wu
Y19zdHIoKSwgcGl4ZWxQcm9maWxlLCAmbUNvbnN0YW50VGFibGVQUyk7Ci0KLSAgICBpZiAodmVy
dGV4QmluYXJ5ICYmIHBpeGVsQmluYXJ5KQotICAgIHsKLSAgICAgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0gICAgICAgIEhSRVNVTFQgdmVydGV4UmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoKERXT1JEKil2ZXJ0ZXhCaW5hcnktPkdldEJ1ZmZl
clBvaW50ZXIoKSwgJm1WZXJ0ZXhFeGVjdXRhYmxlKTsKLSAgICAgICAgSFJFU1VMVCBwaXhlbFJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoKERXT1JEKilwaXhlbEJpbmFyeS0+R2V0
QnVmZmVyUG9pbnRlcigpLCAmbVBpeGVsRXhlY3V0YWJsZSk7Ci0KLSAgICAgICAgaWYgKHZlcnRl
eFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCB2ZXJ0ZXhSZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSB8fCBwaXhlbFJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBw
aXhlbFJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHZlcnRleFJlc3VsdCkgJiYgU1VDQ0VFREVEKHBpeGVsUmVzdWx0KSk7Ci0KLSAg
ICAgICAgdmVydGV4QmluYXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIHBpeGVsQmluYXJ5LT5SZWxl
YXNlKCk7Ci0gICAgICAgIHZlcnRleEJpbmFyeSA9IE5VTEw7Ci0gICAgICAgIHBpeGVsQmluYXJ5
ID0gTlVMTDsKLQotICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUgJiYgbVBpeGVsRXhlY3V0
YWJsZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFsaW5rQXR0cmlidXRlcygpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKCFsaW5rVW5pZm9ybXMobUNvbnN0YW50VGFibGVQUykpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoIWxpbmtVbmlmb3JtcyhtQ29uc3RhbnRUYWJsZVZTKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRo
ZXNlIHVuaWZvcm1zIGFyZSBzZWFyY2hlZCBhcyBhbHJlYWR5LWRlY29yYXRlZCBiZWNhdXNlIGds
XyBhbmQgZHhfCi0gICAgICAgICAgICAvLyBhcmUgcmVzZXJ2ZWQgcHJlZml4ZXMsIGFuZCBkbyBu
b3QgcmVjZWl2ZSBhZGRpdGlvbmFsIGRlY29yYXRpb24KLSAgICAgICAgICAgIG1EZXB0aFJhbmdl
TmVhckxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJnbF9EZXB0aFJhbmdlLm5lYXIiLCB0
cnVlKTsKLSAgICAgICAgICAgIG1EZXB0aFJhbmdlRmFyTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9j
YXRpb24oImdsX0RlcHRoUmFuZ2UuZmFyIiwgdHJ1ZSk7Ci0gICAgICAgICAgICBtRGVwdGhSYW5n
ZURpZmZMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZ2xfRGVwdGhSYW5nZS5kaWZmIiwg
dHJ1ZSk7Ci0gICAgICAgICAgICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9u
KCJkeF9EZXB0aCIsIHRydWUpOwotICAgICAgICAgICAgbUR4Vmlld3BvcnRMb2NhdGlvbiA9IGdl
dFVuaWZvcm1Mb2NhdGlvbigiZHhfVmlld3BvcnQiLCB0cnVlKTsKLSAgICAgICAgICAgIG1EeEhh
bGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6
ZSIsIHRydWUpOwotICAgICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1M
b2NhdGlvbigiZHhfRnJvbnRDQ1ciLCB0cnVlKTsKLSAgICAgICAgICAgIG1EeFBvaW50c09yTGlu
ZXNMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIsIHRydWUp
OwotCi0gICAgICAgICAgICBtTGlua2VkID0gdHJ1ZTsgICAvLyBTdWNjZXNzCi0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLS8vIERldGVybWluZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBHTCBhdHRyaWJ1
dGVzIGFuZCBEaXJlY3QzRCA5IHZlcnRleCBzdHJlYW0gdXNhZ2UgaW5kaWNlcwotYm9vbCBQcm9n
cmFtOjpsaW5rQXR0cmlidXRlcygpCi17Ci0gICAgdW5zaWduZWQgaW50IHVzZWRMb2NhdGlvbnMg
PSAwOwotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRp
b24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSBtVmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgaW50IGxvY2F0
aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlm
IChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVt
cHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgYWN0aXZl
IGF0dHJpYnV0ZXMgYm91bmQgdG8gdGhlIHNhbWUgbG9jYXRpb247IG5vdCBhbiBlcnJvcgotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICph
dHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRy
aWJ1dGUtPnR5cGUpOwotCi0gICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZF
UlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFwcGVuZFRvSW5m
b0xvZygiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8g
Zml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKLQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByb3dzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNl
ZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlvbiArIGkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJp
bmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1
dGUgPSBtVmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbVZl
cnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAg
ICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwot
Ci0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJp
YkxvY2F0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dD
b3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0g
QWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FU
VFJJQlMpOwotCi0gICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxh
YmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMg
KCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmlidXRlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRl
eCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gbVZl
cnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUlu
ZGV4XS5uYW1lKTsKLSAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50
KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKLQotICAgICAgICBm
b3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKLSAgICAgICAgewotICAgICAgICAgICAgbVNl
bWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBQcm9ncmFtOjpnZXRBdHRyaWJ1dGVCaW5k
aW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQotewotICAgIGZvciAoaW50IGxvY2F0aW9uID0g
MDsgbG9jYXRpb24gPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGxvY2F0aW9uKyspCi0gICAgewotICAg
ICAgICBpZiAobUF0dHJpYnV0ZUJpbmRpbmdbbG9jYXRpb25dLmZpbmQobmFtZSkgIT0gbUF0dHJp
YnV0ZUJpbmRpbmdbbG9jYXRpb25dLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbG9jYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJv
b2wgUHJvZ3JhbTo6bGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29uc3RhbnRUYWJs
ZSkKLXsKLSAgICBEM0RYQ09OU1RBTlRUQUJMRV9ERVNDIGNvbnN0YW50VGFibGVEZXNjcmlwdGlv
bjsKLSAgICBEM0RYQ09OU1RBTlRfREVTQyBjb25zdGFudERlc2NyaXB0aW9uOwotICAgIFVJTlQg
ZGVzY3JpcHRpb25Db3VudCA9IDE7Ci0KLSAgICBjb25zdGFudFRhYmxlLT5HZXREZXNjKCZjb25z
dGFudFRhYmxlRGVzY3JpcHRpb24pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgY29uc3RhbnRJ
bmRleCA9IDA7IGNvbnN0YW50SW5kZXggPCBjb25zdGFudFRhYmxlRGVzY3JpcHRpb24uQ29uc3Rh
bnRzOyBjb25zdGFudEluZGV4KyspCi0gICAgewotICAgICAgICBEM0RYSEFORExFIGNvbnN0YW50
SGFuZGxlID0gY29uc3RhbnRUYWJsZS0+R2V0Q29uc3RhbnQoMCwgY29uc3RhbnRJbmRleCk7Ci0g
ICAgICAgIGNvbnN0YW50VGFibGUtPkdldENvbnN0YW50RGVzYyhjb25zdGFudEhhbmRsZSwgJmNv
bnN0YW50RGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKLQotICAgICAgICBpZiAoIWRl
ZmluZVVuaWZvcm0oY29uc3RhbnRIYW5kbGUsIGNvbnN0YW50RGVzY3JpcHRpb24pKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQWRkcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb25zdGFudCBm
b3VuZCBpbiB0aGUgYmluYXJ5IHNoYWRlciB0byB0aGUgbGlzdCBvZiB1bmlmb3JtcwotLy8gUmV0
dXJucyB0cnVlIGlmIHN1Y2Nlc2Z1bCAodW5pZm9ybSBub3QgYWxyZWFkeSBkZWZpbmVkKQotYm9v
bCBQcm9ncmFtOjpkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhIQU5ETEUgJmNvbnN0YW50SGFuZGxl
LCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlvbiwgc3RkOjpzdHJp
bmcgbmFtZSkKLXsKLSAgICBpZiAoY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlclNldCA9PSBE
M0RYUlNfU0FNUExFUikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgg
PSBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXg7Ci0KLSAgICAgICAgYXNzZXJ0KHNh
bXBsZXJJbmRleCA8IHNpemVvZihtU2FtcGxlcnMpL3NpemVvZihtU2FtcGxlcnNbMF0pKTsKLQot
ICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICBt
U2FtcGxlcnNbc2FtcGxlckluZGV4XS50eXBlID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9
PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gU0FNUExFUl9DVUJFIDogU0FNUExFUl8yRDsKLSAgICAg
ICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKLSAgICAg
ICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0uZGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIHN3
aXRjaChjb25zdGFudERlc2NyaXB0aW9uLkNsYXNzKQotICAgIHsKLSAgICAgIGNhc2UgRDNEWFBD
X1NUUlVDVDoKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGQg
PSAwOyBmaWVsZCA8IGNvbnN0YW50RGVzY3JpcHRpb24uU3RydWN0TWVtYmVyczsgZmllbGQrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0g
bUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKLQot
ICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxkRGVzY3JpcHRpb247Ci0gICAg
ICAgICAgICAgICAgVUlOVCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLQotICAgICAgICAgICAgICAg
IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZpZWxkRGVz
Y3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKLQotICAgICAgICAgICAgICAgIGlmICghZGVm
aW5lVW5pZm9ybShmaWVsZEhhbmRsZSwgZmllbGREZXNjcmlwdGlvbiwgbmFtZSArIGNvbnN0YW50
RGVzY3JpcHRpb24uTmFtZSArICIuIikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgY2FzZSBEM0RYUENf
U0NBTEFSOgotICAgICAgY2FzZSBEM0RYUENfVkVDVE9SOgotICAgICAgY2FzZSBEM0RYUENfTUFU
UklYX0NPTFVNTlM6Ci0gICAgICBjYXNlIEQzRFhQQ19PQkpFQ1Q6Ci0gICAgICAgIHJldHVybiBk
ZWZpbmVVbmlmb3JtKGNvbnN0YW50RGVzY3JpcHRpb24sIG5hbWUgKyBjb25zdGFudERlc2NyaXB0
aW9uLk5hbWUpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBQcm9ncmFtOjpkZWZpbmVVbmlmb3Jt
KGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZjb25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmlu
ZyAmbmFtZSkKLXsKLSAgICBVbmlmb3JtICp1bmlmb3JtID0gY3JlYXRlVW5pZm9ybShjb25zdGFu
dERlc2NyaXB0aW9uLCBuYW1lKTsKLQotICAgIGlmKCF1bmlmb3JtKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGFscmVhZHkgZGVmaW5lZAot
ICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKG5hbWUuY19zdHIoKSwgdHJ1
ZSk7Ci0gICAgR0xlbnVtIHR5cGUgPSB1bmlmb3JtLT50eXBlOwotCi0gICAgaWYgKGxvY2F0aW9u
ID49IDApCi0gICAgewotICAgICAgICBkZWxldGUgdW5pZm9ybTsKLQotICAgICAgICBpZiAobVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XS0+dHlwZSAhPSB0eXBlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7Ci0gICAgdW5zaWduZWQgaW50IHVu
aWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5hcnJheVNpemU7ICsraSkKLSAgICB7Ci0gICAgICAgIG1V
bmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihuYW1lLCBpLCB1bmlmb3JtSW5k
ZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVW5pZm9ybSAqUHJvZ3JhbTo6
Y3JlYXRlVW5pZm9ybShjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlv
biwgc3RkOjpzdHJpbmcgJm5hbWUpCi17Ci0gICAgaWYgKGNvbnN0YW50RGVzY3JpcHRpb24uUm93
cyA9PSAxKSAgIC8vIFZlY3RvcnMgYW5kIHNjYWxhcnMKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBEM0RY
UFRfU0FNUExFUjJEOgotICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVJDVUJFOgotICAgICAg
ICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgbmFtZSwg
Y29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEQzRFhQVF9CT09MOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0
aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJu
IG5ldyBVbmlmb3JtKEdMX0JPT0wsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMp
OwotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzIs
IG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNl
IDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9CT09MX1ZFQzMsIG5hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9CT09MX1ZFQzQsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RYUFRfSU5UOgotICAgICAgICAgICAgc3dp
dGNoIChjb25zdGFudERlc2NyaXB0aW9uLkNvbHVtbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBV
bmlmb3JtKEdMX0lOVF9WRUMyLCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsK
LSAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfSU5UX1ZFQzMsIG5h
bWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDQ6
IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlRfVkVDNCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlv
bi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzRFhQVF9GTE9B
VDoKLSAgICAgICAgICAgIHN3aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9G
TE9BVCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX0ZMT0FUX1ZFQzIsIG5hbWUsIGNvbnN0YW50
RGVzY3JpcHRpb24uRWxlbWVudHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcg
VW5pZm9ybShHTF9GTE9BVF9WRUMzLCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRz
KTsKLSAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfVkVD
NCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBlbHNlIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJvd3MgPT0gY29uc3Rh
bnREZXNjcmlwdGlvbi5Db2x1bW5zKSAgLy8gU3F1YXJlIG1hdHJpY2VzCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgRDNEWFBUX0ZMT0FUOgotICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0
aW9uLlJvd3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5l
dyBVbmlmb3JtKEdMX0ZMT0FUX01BVDIsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVu
dHMpOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVW5pZm9ybShHTF9GTE9BVF9N
QVQzLCBuYW1lLCBjb25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKLSAgICAgICAgICAgICAg
Y2FzZSA0OiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfRkxPQVRfTUFUNCwgbmFtZSwgY29uc3RhbnRE
ZXNjcmlwdGlvbi5FbGVtZW50cyk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBP
dXRwdXRITFNMOjpkZWNvcmF0ZQotc3RkOjpzdHJpbmcgUHJvZ3JhbTo6ZGVjb3JhdGUoY29uc3Qg
c3RkOjpzdHJpbmcgJnN0cmluZykKLXsKLSAgICBpZiAoc3RyaW5nLnN1YnN0cigwLCAzKSAhPSAi
Z2xfIiAmJiBzdHJpbmcuc3Vic3RyKDAsIDMpICE9ICJkeF8iKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICJfIiArIHN0cmluZzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHN0cmluZzsKLSAgICB9Ci19Ci0KLXN0ZDo6c3RyaW5nIFByb2dyYW06OnVuZGVjb3JhdGUoY29u
c3Qgc3RkOjpzdHJpbmcgJnN0cmluZykKLXsKLSAgICBpZiAoc3RyaW5nLnN1YnN0cigwLCAxKSA9
PSAiXyIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RyaW5nLnN1YnN0cigxKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICB9Ci19Ci0KLWJvb2wg
UHJvZ3JhbTo6YXBwbHlVbmlmb3JtMWJ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGJvb2xlYW4gKnYpCi17Ci0gICAgQk9PTCAqdmVjdG9yID0gbmV3IEJPT0xbY291bnRd
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGlm
ICh2W2ldID09IEdMX0ZBTFNFKQotICAgICAgICAgICAgdmVjdG9yW2ldID0gMDsKLSAgICAgICAg
ZWxzZSAKLSAgICAgICAgICAgIHZlY3RvcltpXSA9IDE7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
Ci0KLSAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7Ci0gICAgRDNEWEhBTkRMRSBjb25zdGFudFZT
OwotICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNv
bnN0YW50VlMpOwotCi0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
Ci0KLSAgICBpZiAoY29uc3RhbnRQUykKLSAgICB7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMt
PlNldEJvb2xBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOwotICAgIH0K
LQotICAgIGlmIChjb25zdGFudFZTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+
U2V0Qm9vbEFycmF5KGRldmljZSwgY29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7Ci0gICAgfQot
Ci0gICAgZGVsZXRlIFtdIHZlY3RvcjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBy
b2dyYW06OmFwcGx5VW5pZm9ybTJidihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xib29sZWFuICp2KQotewotICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZF
Q1RPUjRbY291bnRdOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
IHsKLSAgICAgICAgdmVjdG9yW2ldID0gRDNEWFZFQ1RPUjQoKHZbMF0gPT0gR0xfRkFMU0UgPyAw
LjBmIDogMS4wZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2WzFdID09IEdM
X0ZBTFNFID8gMC4wZiA6IDEuMGYpLCAwLCAwKTsKLQotICAgICAgICB2ICs9IDI7Ci0gICAgfQot
Ci0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07Ci0KLSAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7Ci0gICAgRDNEWEhB
TkRMRSBjb25zdGFudFZTOwotICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAm
Y29uc3RhbnRQUywgJmNvbnN0YW50VlMpOwotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IGdldERldmljZSgpOwotCi0gICAgaWYgKGNvbnN0YW50UFMpCi0gICAgewotICAgICAgICBtQ29u
c3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3Rvciwg
Y291bnQpOwotICAgIH0KLQotICAgIGlmIChjb25zdGFudFZTKQotICAgIHsKLSAgICAgICAgbUNv
bnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3Is
IGNvdW50KTsKLSAgICB9Ci0KLSAgICBkZWxldGVbXSB2ZWN0b3I7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0zYnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdikKLXsKLSAgICBEM0RYVkVDVE9SNCAqdmVj
dG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3RvcltpXSA9IEQzRFhWRUNUT1I0KCh2WzBd
ID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodlsxXSA9PSBHTF9GQUxTRSA/IDAuMGYgOiAxLjBmKSwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh2WzJdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLCAwKTsKLQot
ICAgICAgICB2ICs9IDM7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICBEM0RYSEFORExF
IGNvbnN0YW50UFM7Ci0gICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOwotICAgIGdldENvbnN0YW50
SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOwotICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgaWYgKGNvbnN0YW50
UFMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZp
Y2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOwotICAgIH0KLQotICAgIGlmIChjb25zdGFu
dFZTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2
aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKLSAgICB9Ci0KLSAgICBkZWxldGVbXSB2
ZWN0b3I7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZv
cm00YnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdikK
LXsKLSAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKLQot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3Rv
cltpXSA9IEQzRFhWRUNUT1I0KCh2WzBdID09IEdMX0ZBTFNFID8gMC4wZiA6IDEuMGYpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodlsxXSA9PSBHTF9GQUxTRSA/IDAuMGYgOiAx
LjBmKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2WzJdID09IEdMX0ZBTFNF
ID8gMC4wZiA6IDEuMGYpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZbM10g
PT0gR0xfRkFMU0UgPyAwLjBmIDogMS4wZikpOwotCi0gICAgICAgIHYgKz0gMzsKLSAgICB9Ci0K
LSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmluZGV4XTsKLQotICAgIEQzRFhIQU5ETEUgY29uc3RhbnRQUzsKLSAgICBEM0RYSEFO
RExFIGNvbnN0YW50VlM7Ci0gICAgZ2V0Q29uc3RhbnRIYW5kbGVzKHRhcmdldFVuaWZvcm0sICZj
b25zdGFudFBTLCAmY29uc3RhbnRWUyk7Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0g
Z2V0RGV2aWNlKCk7Ci0KLSAgICBpZiAoY29uc3RhbnRQUykKLSAgICB7Ci0gICAgICAgIG1Db25z
dGFudFRhYmxlUFMtPlNldFZlY3RvckFycmF5KGRldmljZSwgY29uc3RhbnRQUywgdmVjdG9yLCBj
b3VudCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbnN0YW50VlMpCi0gICAgewotICAgICAgICBtQ29u
c3RhbnRUYWJsZVZTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHZlY3Rvciwg
Y291bnQpOwotICAgIH0KLQotICAgIGRlbGV0ZSBbXSB2ZWN0b3I7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICBE
M0RYSEFORExFIGNvbnN0YW50UFM7Ci0gICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOwotICAgIGdl
dENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMp
OwotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgaWYg
KGNvbnN0YW50UFMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRGbG9hdEFy
cmF5KGRldmljZSwgY29uc3RhbnRQUywgdiwgY291bnQpOwotICAgIH0KLQotICAgIGlmIChjb25z
dGFudFZTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0RmxvYXRBcnJheShk
ZXZpY2UsIGNvbnN0YW50VlMsIHYsIGNvdW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0gICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9
IG5ldyBEM0RYVkVDVE9SNFtjb3VudF07Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCi0gICAgewotICAgICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCh2WzBdLCB2WzFd
LCAwLCAwKTsKLQotICAgICAgICB2ICs9IDI7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAg
ICBEM0RYSEFORExFIGNvbnN0YW50UFM7Ci0gICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOwotICAg
IGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50
VlMpOwotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAg
aWYgKGNvbnN0YW50UFMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0
b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOwotICAgIH0KLQotICAg
IGlmIChjb25zdGFudFZTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVj
dG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKLSAgICB9Ci0KLSAg
ICBkZWxldGVbXSB2ZWN0b3I7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFt
OjphcHBseVVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnYpCi17Ci0gICAgRDNEWFZFQ1RPUjQgKnZlY3RvciA9IG5ldyBEM0RYVkVDVE9SNFtj
b3VudF07Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAg
ICAgICB2ZWN0b3JbaV0gPSBEM0RYVkVDVE9SNCh2WzBdLCB2WzFdLCB2WzJdLCAwKTsKLQotICAg
ICAgICB2ICs9IDM7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICBEM0RYSEFORExFIGNv
bnN0YW50UFM7Ci0gICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOwotICAgIGdldENvbnN0YW50SGFu
ZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOwotICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgaWYgKGNvbnN0YW50UFMp
Ci0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2Us
IGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOwotICAgIH0KLQotICAgIGlmIChjb25zdGFudFZT
KQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNl
LCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKLSAgICB9Ci0KLSAgICBkZWxldGVbXSB2ZWN0
b3I7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm00
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCi17Ci0g
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07Ci0KLSAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7Ci0gICAgRDNEWEhBTkRM
RSBjb25zdGFudFZTOwotICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29u
c3RhbnRQUywgJmNvbnN0YW50VlMpOwotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdl
dERldmljZSgpOwotCi0gICAgaWYgKGNvbnN0YW50UFMpCi0gICAgewotICAgICAgICBtQ29uc3Rh
bnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIChEM0RYVkVDVE9S
NCopdiwgY291bnQpOwotICAgIH0KLQotICAgIGlmIChjb25zdGFudFZTKQotICAgIHsKLSAgICAg
ICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCAo
RDNEWFZFQ1RPUjQqKXYsIGNvdW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIEQzRFhNQVRSSVggKm1hdHJp
eCA9IG5ldyBEM0RYTUFUUklYW2NvdW50XTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIG1hdHJpeFtpXSA9IEQzRFhNQVRSSVgodmFsdWVbMF0s
IHZhbHVlWzJdLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlWzFd
LCB2YWx1ZVszXSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAg
ICAgMCwgICAgICAgIDEsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAg
ICAgIDAsICAgICAgICAwLCAxKTsKLQotICAgICAgICB2YWx1ZSArPSA0OwotICAgIH0KLQotICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOwotCi0gICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOwotICAgIEQzRFhIQU5ETEUg
Y29uc3RhbnRWUzsKLSAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0
YW50UFMsICZjb25zdGFudFZTKTsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKLQotICAgIGlmIChjb25zdGFudFBTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50
VGFibGVQUy0+U2V0TWF0cml4VHJhbnNwb3NlQXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCBtYXRy
aXgsIGNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAoY29uc3RhbnRWUykKLSAgICB7Ci0gICAgICAg
IG1Db25zdGFudFRhYmxlVlMtPlNldE1hdHJpeFRyYW5zcG9zZUFycmF5KGRldmljZSwgY29uc3Rh
bnRWUywgbWF0cml4LCBjb3VudCk7Ci0gICAgfQotCi0gICAgZGVsZXRlW10gbWF0cml4OwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlmb3JtTWF0cml4M2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKLXsK
LSAgICBEM0RYTUFUUklYICptYXRyaXggPSBuZXcgRDNEWE1BVFJJWFtjb3VudF07Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBtYXRyaXhbaV0g
PSBEM0RYTUFUUklYKHZhbHVlWzBdLCB2YWx1ZVszXSwgdmFsdWVbNl0sIDAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVbMV0sIHZhbHVlWzRdLCB2YWx1ZVs3XSwgMCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVsyXSwgdmFsdWVbNV0sIHZhbHVlWzhd
LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAwLCAgICAgICAg
MCwgICAgICAgIDEpOwotCi0gICAgICAgIHZhbHVlICs9IDk7Ci0gICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0KLSAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7Ci0gICAgRDNEWEhBTkRMRSBjb25zdGFu
dFZTOwotICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywg
JmNvbnN0YW50VlMpOwotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OwotCi0gICAgaWYgKGNvbnN0YW50UFMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBT
LT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIG1hdHJpeCwgY291
bnQpOwotICAgIH0KLQotICAgIGlmIChjb25zdGFudFZTKQotICAgIHsKLSAgICAgICAgbUNvbnN0
YW50VGFibGVWUy0+U2V0TWF0cml4VHJhbnNwb3NlQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCBt
YXRyaXgsIGNvdW50KTsKLSAgICB9Ci0KLSAgICBkZWxldGVbXSBtYXRyaXg7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQotewotICAgIEQz
RFhNQVRSSVggKm1hdHJpeCA9IG5ldyBEM0RYTUFUUklYW2NvdW50XTsKLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIG1hdHJpeFtpXSA9IEQzRFhN
QVRSSVgodmFsdWVbMF0sIHZhbHVlWzRdLCB2YWx1ZVs4XSwgIHZhbHVlWzEyXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXSwgdmFsdWVbNV0sIHZhbHVlWzldLCAgdmFs
dWVbMTNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlWzJdLCB2YWx1ZVs2
XSwgdmFsdWVbMTBdLCB2YWx1ZVsxNF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVbM10sIHZhbHVlWzddLCB2YWx1ZVsxMV0sIHZhbHVlWzE1XSk7Ci0KLSAgICAgICAgdmFs
dWUgKz0gMTY7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICBEM0RYSEFORExFIGNvbnN0
YW50UFM7Ci0gICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOwotICAgIGdldENvbnN0YW50SGFuZGxl
cyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOwotICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgaWYgKGNvbnN0YW50UFMpCi0g
ICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRNYXRyaXhUcmFuc3Bvc2VBcnJheShk
ZXZpY2UsIGNvbnN0YW50UFMsIG1hdHJpeCwgY291bnQpOwotICAgIH0KLQotICAgIGlmIChjb25z
dGFudFZTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0TWF0cml4VHJhbnNw
b3NlQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCBtYXRyaXgsIGNvdW50KTsKLSAgICB9Ci0KLSAg
ICBkZWxldGVbXSBtYXRyaXg7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFt
OjphcHBseVVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KQotewotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAgRDNEWEhBTkRMRSBjb25zdGFudFBTOwot
ICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKLSAgICBnZXRDb25zdGFudEhhbmRsZXModGFyZ2V0
VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKLSAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIGlmIChjb25zdGFudFBTKQotICAgIHsKLSAg
ICAgICAgRDNEWENPTlNUQU5UX0RFU0MgY29uc3RhbnREZXNjcmlwdGlvbjsKLSAgICAgICAgVUlO
VCBkZXNjcmlwdGlvbkNvdW50ID0gMTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtQ29uc3Rh
bnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoY29uc3RhbnRQUywgJmNvbnN0YW50RGVzY3JpcHRp
b24sICZkZXNjcmlwdGlvbkNvdW50KTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19TQU1QTEVSKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IG1Db25zdGFu
dFRhYmxlUFMtPkdldFNhbXBsZXJJbmRleChjb25zdGFudFBTKTsKLQotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleDsgc2FtcGxlckluZGV4IDwg
Zmlyc3RJbmRleCArIGNvdW50OyBzYW1wbGVySW5kZXgrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBHTGludCBtYXBwZWRTYW1wbGVyID0gdlswXTsKLQotICAgICAgICAgICAgICAg
IGlmIChzYW1wbGVySW5kZXggPj0gMCAmJiBzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
U2FtcGxlcnNbc2FtcGxlckluZGV4XS5hY3RpdmUpOwotICAgICAgICAgICAgICAgICAgICBtU2Ft
cGxlcnNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSBtYXBwZWRTYW1wbGVyOwot
ICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5kaXJ0eSA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjb25zdGFudFBTKQotICAgIHsKLSAg
ICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0SW50QXJyYXkoZGV2aWNlLCBjb25zdGFudFBTLCB2
LCBjb3VudCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbnN0YW50VlMpCi0gICAgewotICAgICAgICBt
Q29uc3RhbnRUYWJsZVZTLT5TZXRJbnRBcnJheShkZXZpY2UsIGNvbnN0YW50VlMsIHYsIGNvdW50
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVu
aWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQot
ewotICAgIEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOwotCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9y
W2ldID0gRDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAwLCAwKTsKLQotICAg
ICAgICB2ICs9IDI7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAgICBEM0RYSEFORExFIGNv
bnN0YW50UFM7Ci0gICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOwotICAgIGdldENvbnN0YW50SGFu
ZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0YW50VlMpOwotICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAgaWYgKGNvbnN0YW50UFMp
Ci0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRWZWN0b3JBcnJheShkZXZpY2Us
IGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOwotICAgIH0KLQotICAgIGlmIChjb25zdGFudFZT
KQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0VmVjdG9yQXJyYXkoZGV2aWNl
LCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKLSAgICB9Ci0KLSAgICBkZWxldGVbXSB2ZWN0
b3I7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0z
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQotewotICAg
IEQzRFhWRUNUT1I0ICp2ZWN0b3IgPSBuZXcgRDNEWFZFQ1RPUjRbY291bnRdOwotCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdmVjdG9yW2ldID0g
RDNEWFZFQ1RPUjQoKGZsb2F0KXZbMF0sIChmbG9hdCl2WzFdLCAoZmxvYXQpdlsyXSwgMCk7Ci0K
LSAgICAgICAgdiArPSAzOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAgRDNEWEhBTkRM
RSBjb25zdGFudFBTOwotICAgIEQzRFhIQU5ETEUgY29uc3RhbnRWUzsKLSAgICBnZXRDb25zdGFu
dEhhbmRsZXModGFyZ2V0VW5pZm9ybSwgJmNvbnN0YW50UFMsICZjb25zdGFudFZTKTsKLSAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAgIGlmIChjb25zdGFu
dFBTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVQUy0+U2V0VmVjdG9yQXJyYXkoZGV2
aWNlLCBjb25zdGFudFBTLCB2ZWN0b3IsIGNvdW50KTsKLSAgICB9Ci0KLSAgICBpZiAoY29uc3Rh
bnRWUykKLSAgICB7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlVlMtPlNldFZlY3RvckFycmF5KGRl
dmljZSwgY29uc3RhbnRWUywgdmVjdG9yLCBjb3VudCk7Ci0gICAgfQotCi0gICAgZGVsZXRlW10g
dmVjdG9yOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6YXBwbHlVbmlm
b3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKLXsK
LSAgICBEM0RYVkVDVE9SNCAqdmVjdG9yID0gbmV3IEQzRFhWRUNUT1I0W2NvdW50XTsKLQotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHZlY3Rvcltp
XSA9IEQzRFhWRUNUT1I0KChmbG9hdCl2WzBdLCAoZmxvYXQpdlsxXSwgKGZsb2F0KXZbMl0sIChm
bG9hdCl2WzNdKTsKLQotICAgICAgICB2ICs9IDQ7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0K
LSAgICBEM0RYSEFORExFIGNvbnN0YW50UFM7Ci0gICAgRDNEWEhBTkRMRSBjb25zdGFudFZTOwot
ICAgIGdldENvbnN0YW50SGFuZGxlcyh0YXJnZXRVbmlmb3JtLCAmY29uc3RhbnRQUywgJmNvbnN0
YW50VlMpOwotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0g
ICAgaWYgKGNvbnN0YW50UFMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5TZXRW
ZWN0b3JBcnJheShkZXZpY2UsIGNvbnN0YW50UFMsIHZlY3RvciwgY291bnQpOwotICAgIH0KLQot
ICAgIGlmIChjb25zdGFudFZTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50VGFibGVWUy0+U2V0
VmVjdG9yQXJyYXkoZGV2aWNlLCBjb25zdGFudFZTLCB2ZWN0b3IsIGNvdW50KTsKLSAgICB9Ci0K
LSAgICBkZWxldGUgW10gdmVjdG9yOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUHJv
Z3JhbTo6YXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIGlm
ICghZm9ybWF0KQotICAgIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNoYXIgaW5m
b1sxMDI0XTsKLQotICAgIHZhX2xpc3QgdmFyYXJnOwotICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9y
bWF0KTsKLSAgICB2c25wcmludGYoaW5mbywgc2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7
Ci0gICAgdmFfZW5kKHZhcmFyZyk7Ci0KLSAgICBzaXplX3QgaW5mb0xlbmd0aCA9IHN0cmxlbihp
bmZvKTsKLQotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICBtSW5mb0xvZyA9IG5l
dyBjaGFyW2luZm9MZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsK
LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0cmxl
bihtSW5mb0xvZyk7Ci0gICAgICAgIGNoYXIgKm5ld0xvZyA9IG5ldyBjaGFyW2xvZ0xlbmd0aCAr
IGluZm9MZW5ndGggKyAxXTsKLSAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwotICAg
ICAgICBzdHJjcHkobmV3TG9nICsgbG9nTGVuZ3RoLCBpbmZvKTsKLQotICAgICAgICBkZWxldGVb
XSBtSW5mb0xvZzsKLSAgICAgICAgbUluZm9Mb2cgPSBuZXdMb2c7Ci0gICAgfQotfQotCi12b2lk
IFByb2dyYW06OnJlc2V0SW5mb0xvZygpCi17Ci0gICAgaWYgKG1JbmZvTG9nKQotICAgIHsKLSAg
ICAgICAgZGVsZXRlIFtdIG1JbmZvTG9nOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0aGUgcHJv
Z3JhbSBvYmplY3QgdG8gYW4gdW5saW5rZWQgc3RhdGUsIGFmdGVyIGRldGFjaGluZyBhIHNoYWRl
ciwgYmVmb3JlIHJlLWxpbmtpbmcsIG9yIGF0IGRlc3RydWN0aW9uCi12b2lkIFByb2dyYW06OnVu
bGluayhib29sIGRlc3Ryb3kpCi17Ci0gICAgaWYgKGRlc3Ryb3kpICAgLy8gT2JqZWN0IGJlaW5n
IGRlc3RydWN0ZWQKLSAgICB7Ci0gICAgICAgIGlmIChtRnJhZ21lbnRTaGFkZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwotICAgICAgICAgICAg
bUZyYWdtZW50U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVmVydGV4
U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7
Ci0gICAgICAgICAgICBtVmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJs
ZS0+UmVsZWFzZSgpOwotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtVmVydGV4RXhlY3V0
YWJsZS0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAg
fQotCi0gICAgaWYgKG1Db25zdGFudFRhYmxlUFMpCi0gICAgewotICAgICAgICBtQ29uc3RhbnRU
YWJsZVBTLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Db25zdGFudFRhYmxlUFMgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtQ29uc3RhbnRUYWJsZVZTKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50
VGFibGVWUy0+UmVsZWFzZSgpOwotICAgICAgICBtQ29uc3RhbnRUYWJsZVZTID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBpbmRleCsrKQotICAgIHsKLSAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtpbmRleF0ubmFtZS5j
bGVhcigpOwotICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAtMTsKLSAgICB9Ci0KLSAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGlu
ZGV4KyspCi0gICAgewotICAgICAgICBtU2FtcGxlcnNbaW5kZXhdLmFjdGl2ZSA9IGZhbHNlOwot
ICAgICAgICBtU2FtcGxlcnNbaW5kZXhdLmRpcnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB3aGls
ZSAoIW1Vbmlmb3Jtcy5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1Vbmlmb3Jtcy5i
YWNrKCk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wb3BfYmFjaygpOwotICAgIH0KLQotICAgIG1EZXB0
aFJhbmdlRGlmZkxvY2F0aW9uID0gLTE7Ci0gICAgbURlcHRoUmFuZ2VOZWFyTG9jYXRpb24gPSAt
MTsKLSAgICBtRGVwdGhSYW5nZUZhckxvY2F0aW9uID0gLTE7Ci0gICAgbUR4RGVwdGhMb2NhdGlv
biA9IC0xOwotICAgIG1EeFZpZXdwb3J0TG9jYXRpb24gPSAtMTsKLSAgICBtRHhIYWxmUGl4ZWxT
aXplTG9jYXRpb24gPSAtMTsKLSAgICBtRHhGcm9udENDV0xvY2F0aW9uID0gLTE7Ci0gICAgbUR4
UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gLTE7Ci0KLSAgICBtVW5pZm9ybUluZGV4LmNsZWFyKCk7
Ci0KLSAgICBtUGl4ZWxITFNMLmNsZWFyKCk7Ci0gICAgbVZlcnRleEhMU0wuY2xlYXIoKTsKLQot
ICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwotICAgIG1JbmZvTG9nID0gTlVMTDsKLQotICAgIG1MaW5r
ZWQgPSBmYWxzZTsKLX0KLQotYm9vbCBQcm9ncmFtOjppc0xpbmtlZCgpCi17Ci0gICAgcmV0dXJu
IG1MaW5rZWQ7Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKLXsKLSAg
ICByZXR1cm4gbVZhbGlkYXRlZDsKLX0KLQotdm9pZCBQcm9ncmFtOjpyZWxlYXNlKCkKLXsKLSAg
ICBtUmVmQ291bnQtLTsKLQotICAgIGlmIChtUmVmQ291bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVz
KQotICAgIHsKLSAgICAgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUHJvZ3JhbShtSGFuZGxl
KTsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvZ3JhbTo6YWRkUmVmKCkKLXsKLSAgICBtUmVmQ291bnQr
KzsKLX0KLQotdW5zaWduZWQgaW50IFByb2dyYW06OmdldFJlZkNvdW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbVJlZkNvdW50OwotfQotCi11bnNpZ25lZCBpbnQgUHJvZ3JhbTo6Z2V0U2VyaWFs
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVNlcmlhbDsKLX0KLQotdW5zaWduZWQgaW50IFByb2dy
YW06Omlzc3VlU2VyaWFsKCkKLXsKLSAgICByZXR1cm4gbUN1cnJlbnRTZXJpYWwrKzsKLX0KLQot
aW50IFByb2dyYW06OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAotewotICAgIGlmICghbUluZm9M
b2cpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7Ci0gICAgfQotfQotCi12b2lkIFByb2dy
YW06OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmlu
Zm9Mb2cpCi17Ci0gICAgaW50IGluZGV4ID0gMDsKLQotICAgIGlmIChtSW5mb0xvZykKLSAgICB7
Ci0gICAgICAgIHdoaWxlIChpbmRleCA8IGJ1ZlNpemUgLSAxICYmIGluZGV4IDwgKGludClzdHJs
ZW4obUluZm9Mb2cpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nW2luZGV4XSA9IG1J
bmZvTG9nW2luZGV4XTsKLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsK
LSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoKQotICAgIHsKLSAgICAgICAgKmxlbmd0aCA9IGluZGV4
OwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBt
YXhDb3VudCwgR0xzaXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycykKLXsKLSAgICBpbnQgdG90
YWwgPSAwOwotCi0gICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCi0gICAgewotICAgICAgICBpZiAodG90
YWwgPCBtYXhDb3VudCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyc1t0b3RhbF0gPSBt
VmVydGV4U2hhZGVyLT5nZXRIYW5kbGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRvdGFsKys7
Ci0gICAgfQotCi0gICAgaWYgKG1GcmFnbWVudFNoYWRlcikKLSAgICB7Ci0gICAgICAgIGlmICh0
b3RhbCA8IG1heENvdW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGFkZXJzW3RvdGFsXSA9
IG1GcmFnbWVudFNoYWRlci0+Z2V0SGFuZGxlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b3Rh
bCsrOwotICAgIH0KLQotICAgIGlmIChjb3VudCkKLSAgICB7Ci0gICAgICAgICpjb3VudCA9IHRv
dGFsOwotICAgIH0KLX0KLQotdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50
IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdM
ZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKQotewotICAgIHVuc2lnbmVkIGludCBhdHRyaWJ1dGUg
PSAwOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykKLSAgICB7
Ci0gICAgICAgIGRvCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZSsrOwotCi0gICAg
ICAgICAgICBBU1NFUlQoYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsgICAvLyBpbmRl
eCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCi0gICAgICAg
IH0KLSAgICAgICAgd2hpbGUgKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5
KCkpOwotICAgIH0KLQotICAgIGlmIChidWZzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIGNvbnN0
IGNoYXIgKnN0cmluZyA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmNfc3RyKCk7
Ci0KLSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcsIGJ1ZnNpemUpOwotICAgICAgICBuYW1l
W2J1ZnNpemUgLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgewot
ICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgICpzaXplID0gMTsgICAvLyBBbHdheXMgYSBzaW5nbGUgJ3R5cGUnIGluc3RhbmNlCi0KLSAg
ICAqdHlwZSA9IG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS50eXBlOwotfQotCi1HTGludCBQ
cm9ncmFtOjpnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCi17Ci0gICAgaW50IGNvdW50ID0gMDsK
LQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCi0gICAgewotICAgICAgICBpZiAoIW1M
aW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3Vu
dDsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlTWF4TGVuZ3RoKCkKLXsK
LSAgICBpbnQgbWF4TGVuZ3RoID0gMDsKLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0g
MDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4Kysp
Ci0gICAgewotICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5h
bWUuZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjptYXgo
KGludCkobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZS5sZW5ndGgoKSArIDEp
LCBtYXhMZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1heExlbmd0aDsK
LX0KLQotdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXpl
aSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdM
Y2hhciAqbmFtZSkKLXsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybSA9IDA7Ci0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKQotICAgIHsKLSAgICAgICAgZG8KLSAg
ICAgICAgewotICAgICAgICAgICAgdW5pZm9ybSsrOwotCi0gICAgICAgICAgICBBU1NFUlQodW5p
Zm9ybSA8IG1Vbmlmb3Jtcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFu
IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpCi0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKG1Vbmlm
b3Jtc1t1bmlmb3JtXS0+bmFtZS5zdWJzdHIoMCwgMykgPT0gImR4XyIpOwotICAgIH0KLQotICAg
IGlmIChidWZzaXplID4gMCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IHVu
ZGVjb3JhdGUobVVuaWZvcm1zW3VuaWZvcm1dLT5uYW1lKTsKLQotICAgICAgICBpZiAobVVuaWZv
cm1zW3VuaWZvcm1dLT5hcnJheVNpemUgIT0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgc3Ry
aW5nICs9ICJbMF0iOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RybmNweShuYW1lLCBzdHJpbmcu
Y19zdHIoKSwgYnVmc2l6ZSk7Ci0gICAgICAgIG5hbWVbYnVmc2l6ZSAtIDFdID0gJ1wwJzsKLQot
ICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gc3Ry
bGVuKG5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgKnNpemUgPSBtVW5pZm9ybXNbdW5p
Zm9ybV0tPmFycmF5U2l6ZTsKLQotICAgICp0eXBlID0gbVVuaWZvcm1zW3VuaWZvcm1dLT50eXBl
OwotfQotCi1HTGludCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtQ291bnQoKQotewotICAgIGlu
dCBjb3VudCA9IDA7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMu
c2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1J
bmRleCA8IG51bVVuaWZvcm1zOyB1bmlmb3JtSW5kZXgrKykKLSAgICB7Ci0gICAgICAgIGlmICht
VW5pZm9ybXNbdW5pZm9ybUluZGV4XS0+bmFtZS5zdWJzdHIoMCwgMykgIT0gImR4XyIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gY291bnQ7Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgo
KQotewotICAgIGludCBtYXhMZW5ndGggPSAwOwotCi0gICAgdW5zaWduZWQgaW50IG51bVVuaWZv
cm1zID0gbVVuaWZvcm1zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5k
ZXggPSAwOyB1bmlmb3JtSW5kZXggPCBudW1Vbmlmb3JtczsgdW5pZm9ybUluZGV4KyspCi0gICAg
ewotICAgICAgICBpZiAoIW1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lLmVtcHR5KCkgJiYg
bVVuaWZvcm1zW3VuaWZvcm1JbmRleF0tPm5hbWUuc3Vic3RyKDAsIDMpICE9ICJkeF8iKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heCgoaW50KSh1bmRlY29yYXRl
KG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5uYW1lKS5sZW5ndGgoKSArIDEpLCBtYXhMZW5ndGgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1heExlbmd0aDsKLX0KLQotdm9pZCBQ
cm9ncmFtOjpmbGFnRm9yRGVsZXRpb24oKQotewotICAgIG1EZWxldGVTdGF0dXMgPSB0cnVlOwot
fQotCi1ib29sIFByb2dyYW06OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbURlbGV0ZVN0YXR1czsKLX0KLQotdm9pZCBQcm9ncmFtOjp2YWxpZGF0ZSgpCi17Ci0g
ICAgcmVzZXRJbmZvTG9nKCk7Ci0KLSAgICBpZiAoIWlzTGlua2VkKCkpIAotICAgIHsKLSAgICAg
ICAgYXBwZW5kVG9JbmZvTG9nKCJQcm9ncmFtIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVsbHkgbGlu
a2VkLiIpOwotICAgICAgICBtVmFsaWRhdGVkID0gZmFsc2U7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIGFwcGx5VW5pZm9ybXMoKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVNhbXBs
ZXJzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZFRvSW5mb0xvZygiU2FtcGxlcnMg
b2YgY29uZmxpY3RpbmcgdHlwZXMgcmVmZXIgdG8gdGhlIHNhbWUgdGV4dHVyZSBpbWFnZSB1bml0
LiIpOwotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbVZhbGlkYXRlZCA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLWJvb2wgUHJvZ3JhbTo6dmFsaWRhdGVTYW1wbGVycygpIGNvbnN0Ci17
Ci0gICAgLy8gaWYgYW55IHR3byBhY3RpdmUgc2FtcGxlcnMgaW4gYSBwcm9ncmFtIGFyZSBvZiBk
aWZmZXJlbnQgdHlwZXMsIGJ1dCByZWZlciB0byB0aGUgc2FtZQotICAgIC8vIHRleHR1cmUgaW1h
Z2UgdW5pdCwgYW5kIHRoaXMgaXMgdGhlIGN1cnJlbnQgcHJvZ3JhbSwgdGhlbiBWYWxpZGF0ZVBy
b2dyYW0gd2lsbCBmYWlsLCBhbmQKLSAgICAvLyBEcmF3QXJyYXlzIGFuZCBEcmF3RWxlbWVudHMg
d2lsbCBpc3N1ZSB0aGUgSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IuCi0gICAgc3RkOjptYXA8aW50
LCBTYW1wbGVyVHlwZT4gc2FtcGxlck1hcDsgCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKG1T
YW1wbGVyc1tpXS5hY3RpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzYW1wbGVyTWFw
LmZpbmQobVNhbXBsZXJzW2ldLmxvZ2ljYWxUZXh0dXJlVW5pdCkgIT0gc2FtcGxlck1hcC5lbmQo
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobVNhbXBsZXJzW2ldLnR5cGUg
IT0gc2FtcGxlck1hcFttU2FtcGxlcnNbaV0ubG9naWNhbFRleHR1cmVVbml0XSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNhbXBsZXJNYXBbbVNhbXBsZXJzW2ld
LmxvZ2ljYWxUZXh0dXJlVW5pdF0gPSBtU2FtcGxlcnNbaV0udHlwZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFByb2dyYW06
OmdldENvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBEM0RYSEFORExFICpj
b25zdGFudFBTLCBEM0RYSEFORExFICpjb25zdGFudFZTKQotewotICAgIGlmICghdGFyZ2V0VW5p
Zm9ybS0+aGFuZGxlc1NldCkKLSAgICB7Ci0gICAgICAgIHRhcmdldFVuaWZvcm0tPnBzSGFuZGxl
ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29uc3RhbnRCeU5hbWUoMCwgdGFyZ2V0VW5pZm9ybS0+
bmFtZS5jX3N0cigpKTsKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dnNIYW5kbGUgPSBtQ29uc3Rh
bnRUYWJsZVZTLT5HZXRDb25zdGFudEJ5TmFtZSgwLCB0YXJnZXRVbmlmb3JtLT5uYW1lLmNfc3Ry
KCkpOwotICAgICAgICB0YXJnZXRVbmlmb3JtLT5oYW5kbGVzU2V0ID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICAqY29uc3RhbnRQUyA9IHRhcmdldFVuaWZvcm0tPnBzSGFuZGxlOwotICAgICpjb25zdGFu
dFZTID0gdGFyZ2V0VW5pZm9ybS0+dnNIYW5kbGU7Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldERl
cHRoUmFuZ2VEaWZmTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRGVwdGhSYW5nZURp
ZmZMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RGVwdGhSYW5nZU5lYXJMb2NhdGlv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EZXB0aFJhbmdlTmVhckxvY2F0aW9uOwotfQotCi1H
TGludCBQcm9ncmFtOjpnZXREZXB0aFJhbmdlRmFyTG9jYXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtRGVwdGhSYW5nZUZhckxvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeERl
cHRoTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhEZXB0aExvY2F0aW9uOwotfQot
Ci1HTGludCBQcm9ncmFtOjpnZXREeFZpZXdwb3J0TG9jYXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtRHhWaWV3cG9ydExvY2F0aW9uOwotfQotCi1HTGludCBQcm9ncmFtOjpnZXREeEhhbGZQ
aXhlbFNpemVMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1EeEhhbGZQaXhlbFNpemVM
b2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhGcm9udENDV0xvY2F0aW9uKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbUR4RnJvbnRDQ1dMb2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3Jh
bTo6Z2V0RHhQb2ludHNPckxpbmVzTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRHhQ
b2ludHNPckxpbmVzTG9jYXRpb247Ci19Ci0KLX0KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCShy
ZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDIzMiArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBQcm9ncmFt
Lmg6IERlZmluZXMgdGhlIGdsOjpQcm9ncmFtIGNsYXNzLiBJbXBsZW1lbnRzIEdMIHByb2dyYW0g
b2JqZWN0cwotLy8gYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRd
IHNlY3Rpb24gMi4xMC4zIHBhZ2UgMjguCi0KLSNpZm5kZWYgTElCR0xFU1YyX1BST0dSQU1fSF8K
LSNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fSF8KLQotI2luY2x1ZGUgPGQzZHg5Lmg+Ci0jaW5j
bHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNs
dWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIK
LQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBSZXNvdXJjZU1hbmFnZXI7Ci1jbGFzcyBGcmFnbWVu
dFNoYWRlcjsKLWNsYXNzIFZlcnRleFNoYWRlcjsKLQotLy8gSGVscGVyIHN0cnVjdCByZXByZXNl
bnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCi17Ci0gICAgVW5p
Zm9ybShHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUpOwotCi0gICAgflVuaWZvcm0oKTsKLQotICAgIGNvbnN0IEdMZW51bSB0eXBlOwot
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5
U2l6ZTsKLQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgYm9vbCBkaXJ0eTsKLQotICAg
IEQzRFhIQU5ETEUgdnNIYW5kbGU7Ci0gICAgRDNEWEhBTkRMRSBwc0hhbmRsZTsKLSAgICBib29s
IGhhbmRsZXNTZXQ7Ci19OwotCi0vLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9y
bXMvZWxlbWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwotc3RydWN0IFVuaWZvcm1M
b2NhdGlvbgotewotICAgIFVuaWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwg
dW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCk7Ci0KLSAgICBzdGQ6OnN0
cmluZyBuYW1lOwotICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwotICAgIHVuc2lnbmVkIGludCBp
bmRleDsKLX07Ci0KLWNsYXNzIFByb2dyYW0KLXsKLSAgcHVibGljOgotICAgIFByb2dyYW0oUmVz
b3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKLQotICAgIH5Qcm9ncmFtKCk7
Ci0KLSAgICBib29sIGF0dGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlcik7Ci0gICAgYm9vbCBkZXRh
Y2hTaGFkZXIoU2hhZGVyICpzaGFkZXIpOwotICAgIGludCBnZXRBdHRhY2hlZFNoYWRlcnNDb3Vu
dCgpIGNvbnN0OwotCi0gICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpnZXRQaXhlbFNoYWRlcigp
OwotICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKmdldFZlcnRleFNoYWRlcigpOwotCi0gICAg
dm9pZCBiaW5kQXR0cmlidXRlTG9jYXRpb24oR0x1aW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1l
KTsKLSAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSk7Ci0g
ICAgaW50IGdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KTsKLQotICAgIHZvaWQg
ZGlydHlBbGxTYW1wbGVycygpOwotCi0gICAgR0xpbnQgZ2V0U2FtcGxlck1hcHBpbmcodW5zaWdu
ZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgU2FtcGxlclR5cGUgZ2V0U2FtcGxlclR5cGUodW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCk7Ci0gICAgYm9vbCBpc1NhbXBsZXJEaXJ0eSh1bnNpZ25l
ZCBpbnQgc2FtcGxlckluZGV4KSBjb25zdDsKLSAgICB2b2lkIHNldFNhbXBsZXJEaXJ0eSh1bnNp
Z25lZCBpbnQgc2FtcGxlckluZGV4LCBib29sIGRpcnR5KTsKLQotICAgIEdMaW50IGdldFVuaWZv
cm1Mb2NhdGlvbihjb25zdCBjaGFyICpuYW1lLCBib29sIGRlY29yYXRlZCk7Ci0gICAgYm9vbCBz
ZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBzZXRVbmlm
b3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsK
LSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAg
ICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZv
cm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAg
ICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLQotICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50
IGxvY2F0aW9uLCBHTGZsb2F0ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50
IGxvY2F0aW9uLCBHTGludCAqcGFyYW1zKTsKLQotICAgIEdMaW50IGdldERlcHRoUmFuZ2VEaWZm
TG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREZXB0aFJhbmdlTmVhckxvY2F0aW9uKCkg
Y29uc3Q7Ci0gICAgR0xpbnQgZ2V0RGVwdGhSYW5nZUZhckxvY2F0aW9uKCkgY29uc3Q7Ci0gICAg
R0xpbnQgZ2V0RHhEZXB0aExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhWaWV3cG9y
dExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24o
KSBjb25zdDsKLSAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKLSAgICBH
TGludCBnZXREeFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCBkaXJ0
eUFsbFVuaWZvcm1zKCk7Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7Ci0KLSAgICB2b2lkIGxp
bmsoKTsKLSAgICBib29sIGlzTGlua2VkKCk7Ci0gICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBj
b25zdDsKLSAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5n
dGgsIGNoYXIgKmluZm9Mb2cpOwotICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkg
bWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpOwotCi0gICAgdm9pZCBn
ZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKTsKLSAgICBH
TGludCBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpOwotICAgIEdMaW50IGdldEFjdGl2ZUF0dHJp
YnV0ZU1heExlbmd0aCgpOwotCi0gICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRl
eCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0g
KnR5cGUsIEdMY2hhciAqbmFtZSk7Ci0gICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCk7
Ci0gICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwotCi0gICAgdm9pZCBhZGRS
ZWYoKTsKLSAgICB2b2lkIHJlbGVhc2UoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0UmVmQ291bnQo
KSBjb25zdDsKLSAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigpOwotICAgIGJvb2wgaXNGbGFnZ2Vk
Rm9yRGVsZXRpb24oKSBjb25zdDsKLQotICAgIHZvaWQgdmFsaWRhdGUoKTsKLSAgICBib29sIHZh
bGlkYXRlU2FtcGxlcnMoKSBjb25zdDsKLSAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7Ci0K
LSAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7Ci0KLSAgICBJRDNEWEJ1ZmZlciAqY29t
cGlsZVRvQmluYXJ5KGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIElEM0RY
Q29uc3RhbnRUYWJsZSAqKmNvbnN0YW50VGFibGUpOwotICAgIHZvaWQgdW5saW5rKGJvb2wgZGVz
dHJveSA9IGZhbHNlKTsKLQotICAgIGludCBwYWNrVmFyeWluZ3MoY29uc3QgVmFyeWluZyAqcGFj
a2luZ1tdWzRdKTsKLSAgICBib29sIGxpbmtWYXJ5aW5ncygpOwotCi0gICAgYm9vbCBsaW5rQXR0
cmlidXRlcygpOwotICAgIGludCBnZXRBdHRyaWJ1dGVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lKTsKLQotICAgIGJvb2wgbGlua1VuaWZvcm1zKElEM0RYQ29uc3RhbnRUYWJsZSAqY29u
c3RhbnRUYWJsZSk7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKGNvbnN0IEQzRFhIQU5ETEUgJmNv
bnN0YW50SGFuZGxlLCBjb25zdCBEM0RYQ09OU1RBTlRfREVTQyAmY29uc3RhbnREZXNjcmlwdGlv
biwgc3RkOjpzdHJpbmcgbmFtZSA9ICIiKTsKLSAgICBib29sIGRlZmluZVVuaWZvcm0oY29uc3Qg
RDNEWENPTlNUQU5UX0RFU0MgJmNvbnN0YW50RGVzY3JpcHRpb24sIHN0ZDo6c3RyaW5nICZuYW1l
KTsKLSAgICBVbmlmb3JtICpjcmVhdGVVbmlmb3JtKGNvbnN0IEQzRFhDT05TVEFOVF9ERVNDICZj
b25zdGFudERlc2NyaXB0aW9uLCBzdGQ6OnN0cmluZyAmbmFtZSk7Ci0gICAgYm9vbCBhcHBseVVu
aWZvcm0xYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAq
dik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0yYnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMYm9vbGVhbiAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0zYnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9vbGVhbiAqdik7Ci0gICAgYm9vbCBh
cHBseVVuaWZvcm00YnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMYm9v
bGVhbiAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtMmZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBib29s
IGFwcGx5VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgYXBwbHlVbmlmb3JtTWF0cml4
MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7
Ci0gICAgYm9vbCBhcHBseVVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIGFwcGx5VW5pZm9ybU1hdHJp
eDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
OwotICAgIGJvb2wgYXBwbHlVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdik7Ci0gICAgYm9vbCBhcHBseVVuaWZvcm0yaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKLSAgICBib29sIGFwcGx5VW5pZm9y
bTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwotICAg
IGJvb2wgYXBwbHlVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCAqdik7Ci0KLSAgICB2b2lkIGdldENvbnN0YW50SGFuZGxlcyhVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtLCBEM0RYSEFORExFICpjb25zdGFudFBTLCBEM0RYSEFORExFICpjb25zdGFudFZT
KTsKLQotICAgIHZvaWQgYXBwZW5kVG9JbmZvTG9nKGNvbnN0IGNoYXIgKmluZm8sIC4uLik7Ci0g
ICAgdm9pZCByZXNldEluZm9Mb2coKTsKLQotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0
ZShjb25zdCBzdGQ6OnN0cmluZyAmc3RyaW5nKTsgICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29y
ZQotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB1bmRlY29yYXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZz
dHJpbmcpOyAgIC8vIFJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUKLQotICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKLQotICAgIEZyYWdtZW50U2hhZGVyICptRnJhZ21lbnRT
aGFkZXI7Ci0gICAgVmVydGV4U2hhZGVyICptVmVydGV4U2hhZGVyOwotCi0gICAgc3RkOjpzdHJp
bmcgbVBpeGVsSExTTDsKLSAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKLQotICAgIElEaXJl
Y3QzRFBpeGVsU2hhZGVyOSAqbVBpeGVsRXhlY3V0YWJsZTsKLSAgICBJRGlyZWN0M0RWZXJ0ZXhT
aGFkZXI5ICptVmVydGV4RXhlY3V0YWJsZTsKLSAgICBJRDNEWENvbnN0YW50VGFibGUgKm1Db25z
dGFudFRhYmxlUFM7Ci0gICAgSUQzRFhDb25zdGFudFRhYmxlICptQ29uc3RhbnRUYWJsZVZTOwot
Ci0gICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1BdHRyaWJ1dGVCaW5kaW5nW01BWF9WRVJURVhf
QVRUUklCU107Ci0gICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRS
SUJTXTsKLSAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAg
IHN0cnVjdCBTYW1wbGVyCi0gICAgewotICAgICAgICBib29sIGFjdGl2ZTsKLSAgICAgICAgR0xp
bnQgbG9naWNhbFRleHR1cmVVbml0OwotICAgICAgICBTYW1wbGVyVHlwZSB0eXBlOwotICAgICAg
ICBib29sIGRpcnR5OwotICAgIH07Ci0KLSAgICBTYW1wbGVyIG1TYW1wbGVyc1tNQVhfVEVYVFVS
RV9JTUFHRV9VTklUU107Ci0KLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBVbmlm
b3JtQXJyYXk7Ci0gICAgVW5pZm9ybUFycmF5IG1Vbmlmb3JtczsKLSAgICB0eXBlZGVmIHN0ZDo6
dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4OwotICAgIFVuaWZvcm1JbmRleCBt
VW5pZm9ybUluZGV4OwotCi0gICAgR0xpbnQgbURlcHRoUmFuZ2VEaWZmTG9jYXRpb247Ci0gICAg
R0xpbnQgbURlcHRoUmFuZ2VOZWFyTG9jYXRpb247Ci0gICAgR0xpbnQgbURlcHRoUmFuZ2VGYXJM
b2NhdGlvbjsKLSAgICBHTGludCBtRHhEZXB0aExvY2F0aW9uOwotICAgIEdMaW50IG1EeFZpZXdw
b3J0TG9jYXRpb247Ci0gICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uOwotICAgIEdM
aW50IG1EeEZyb250Q0NXTG9jYXRpb247Ci0gICAgR0xpbnQgbUR4UG9pbnRzT3JMaW5lc0xvY2F0
aW9uOwotCi0gICAgYm9vbCBtTGlua2VkOwotICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAvLyBG
bGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBs
b25nZXIgaW4gdXNlCi0gICAgY2hhciAqbUluZm9Mb2c7Ci0gICAgYm9vbCBtVmFsaWRhdGVkOwot
Ci0gICAgdW5zaWduZWQgaW50IG1SZWZDb3VudDsKLQotICAgIHVuc2lnbmVkIGludCBtU2VyaWFs
OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVudFNlcmlhbDsKLQotICAgIFJlc291
cmNlTWFuYWdlciAqbVJlc291cmNlTWFuYWdlcjsKLSAgICBjb25zdCBHTHVpbnQgbUhhbmRsZTsK
LX07Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0hfCkluZGV4OiBBTkdMRS9z
cmMvbGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmNwcAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9z
cmMvbGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSAr
MCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBSZWZDb3VudE9iamVjdC5jcHA6IERlZmlu
ZXMgdGhlIGdsOjpSZWZDb3VudE9iamVjdCBiYXNlIGNsYXNzIHRoYXQgcHJvdmlkZXMKLS8vIGxp
ZmVjeWNsZSBzdXBwb3J0IGZvciBHTCBvYmplY3RzIHVzaW5nIHRoZSB0cmFkaXRpb25hbCBCaW5k
T2JqZWN0IHNjaGVtZSwgYnV0Ci0vLyB0aGF0IG5lZWQgdG8gYmUgcmVmZXJlbmNlIGNvdW50ZWQg
Zm9yIGNvcnJlY3QgY3Jvc3MtY29udGV4dCBkZWxldGlvbi4KLS8vIChDb25jcmV0ZWx5LCB0ZXh0
dXJlcywgYnVmZmVycyBhbmQgcmVuZGVyYnVmZmVycy4pCi0KLSNpbmNsdWRlICJSZWZDb3VudE9i
amVjdC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotUmVmQ291bnRPYmplY3Q6OlJlZkNvdW50T2Jq
ZWN0KEdMdWludCBpZCkKLXsKLSAgICBtSWQgPSBpZDsKLSAgICBtUmVmQ291bnQgPSAwOwotfQot
Ci1SZWZDb3VudE9iamVjdDo6flJlZkNvdW50T2JqZWN0KCkKLXsKLX0KLQotdm9pZCBSZWZDb3Vu
dE9iamVjdDo6YWRkUmVmKCkgY29uc3QKLXsKLSAgICBtUmVmQ291bnQrKzsKLX0KLQotdm9pZCBS
ZWZDb3VudE9iamVjdDo6cmVsZWFzZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1SZWZDb3VudCA+
IDApOwotCi0gICAgaWYgKC0tbVJlZkNvdW50ID09IDApCi0gICAgewotICAgICAgICBkZWxldGUg
dGhpczsKLSAgICB9Ci19Ci0KLXZvaWQgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0
KFJlZkNvdW50T2JqZWN0ICpuZXdPYmplY3QpCi17Ci0gICAgLy8gYWRkUmVmIGZpcnN0IGluIGNh
c2UgbmV3T2JqZWN0ID09IG1PYmplY3QgYW5kIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRv
IGl0LgotICAgIGlmIChuZXdPYmplY3QgIT0gTlVMTCkgbmV3T2JqZWN0LT5hZGRSZWYoKTsKLSAg
ICBpZiAobU9iamVjdCAhPSBOVUxMKSBtT2JqZWN0LT5yZWxlYXNlKCk7Ci0KLSAgICBtT2JqZWN0
ID0gbmV3T2JqZWN0OwotfQotCi19CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1JlZkNvdW50
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZWZDb3VudE9iamVj
dC5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVmQ291bnRPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0vLyBSZWZDb3VudE9iamVjdC5oOiBEZWZpbmVzIHRoZSBnbDo6UmVmQ291bnRPYmplY3QgYmFz
ZSBjbGFzcyB0aGF0IHByb3ZpZGVzCi0vLyBsaWZlY3ljbGUgc3VwcG9ydCBmb3IgR0wgb2JqZWN0
cyB1c2luZyB0aGUgdHJhZGl0aW9uYWwgQmluZE9iamVjdCBzY2hlbWUsIGJ1dAotLy8gdGhhdCBu
ZWVkIHRvIGJlIHJlZmVyZW5jZSBjb3VudGVkIGZvciBjb3JyZWN0IGNyb3NzLWNvbnRleHQgZGVs
ZXRpb24uCi0vLyAoQ29uY3JldGVseSwgdGV4dHVyZXMsIGJ1ZmZlcnMgYW5kIHJlbmRlcmJ1ZmZl
cnMuKQotCi0jaWZuZGVmIExJQkdMRVNWMl9SRUZDT1VOVE9CSkVDVF9IXwotI2RlZmluZSBMSUJH
TEVTVjJfUkVGQ09VTlRPQkpFQ1RfSF8KLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLSNkZWZpbmUg
R0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2Rl
YnVnLmgiCi0KLW5hbWVzcGFjZSBnbAotewotCi1jbGFzcyBSZWZDb3VudE9iamVjdAotewotICBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgUmVmQ291bnRPYmplY3QoR0x1aW50IGlkKTsKLSAgICB2aXJ0
dWFsIH5SZWZDb3VudE9iamVjdCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkZFJlZigpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlKCkgY29uc3Q7Ci0KLSAgICBHTHVpbnQgaWQoKSBj
b25zdCB7IHJldHVybiBtSWQ7IH0KLSAgICAKLSAgcHJpdmF0ZToKLSAgICBHTHVpbnQgbUlkOwot
Ci0gICAgbXV0YWJsZSBzdGQ6OnNpemVfdCBtUmVmQ291bnQ7Ci19OwotCi1jbGFzcyBSZWZDb3Vu
dE9iamVjdEJpbmRpbmdQb2ludGVyCi17Ci0gIHByb3RlY3RlZDoKLSAgICBSZWZDb3VudE9iamVj
dEJpbmRpbmdQb2ludGVyKCkgOiBtT2JqZWN0KE5VTEwpIHsgfQotICAgIH5SZWZDb3VudE9iamVj
dEJpbmRpbmdQb2ludGVyKCkgeyBBU1NFUlQobU9iamVjdCA9PSBOVUxMKTsgfSAvLyBPYmplY3Rz
IGhhdmUgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGlzIGRlc3Ry
b3llZCwgc28gdGhleSBtdXN0IGJlIGV4cGxpY2l0bHkgY2xlYW5lZCB1cC4KLQotICAgIHZvaWQg
c2V0KFJlZkNvdW50T2JqZWN0ICpuZXdPYmplY3QpOwotICAgIFJlZkNvdW50T2JqZWN0ICpnZXQo
KSBjb25zdCB7IHJldHVybiBtT2JqZWN0OyB9Ci0KLSAgcHVibGljOgotICAgIEdMdWludCBpZCgp
IGNvbnN0IHsgcmV0dXJuIChtT2JqZWN0ICE9IE5VTEwpID8gbU9iamVjdC0+aWQoKSA6IDA7IH0K
LSAgICBib29sIG9wZXJhdG9yICEgKCkgY29uc3QgeyByZXR1cm4gKGdldCgpID09IE5VTEwpOyB9
Ci0KLSAgcHJpdmF0ZToKLSAgICBSZWZDb3VudE9iamVjdCAqbU9iamVjdDsKLX07Ci0KLXRlbXBs
YXRlIDxjbGFzcyBPYmplY3RUeXBlPgotY2xhc3MgQmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVm
Q291bnRPYmplY3RCaW5kaW5nUG9pbnRlcgotewotICBwdWJsaWM6Ci0gICAgdm9pZCBzZXQoT2Jq
ZWN0VHlwZSAqbmV3T2JqZWN0KSB7IFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNldChu
ZXdPYmplY3QpOyB9Ci0gICAgT2JqZWN0VHlwZSAqZ2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8T2JqZWN0VHlwZSo+KFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmdldCgpKTsg
fQotICAgIE9iamVjdFR5cGUgKm9wZXJhdG9yIC0+ICgpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9
Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9SRUZDT1VOVE9CSkVDVF9IXwpJbmRl
eDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAkocmV2aXNpb24gNzQ2NTgpCisrKyBB
TkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NDg0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFJlbmRlcmJ1ZmZlci5jcHA6IHRo
ZSBnbDo6UmVuZGVyYnVmZmVyIGNsYXNzIGFuZCBpdHMgZGVyaXZlZCBjbGFzc2VzCi0vLyBDb2xv
cmJ1ZmZlciwgRGVwdGhidWZmZXIgYW5kIFN0ZW5jaWxidWZmZXIuIEltcGxlbWVudHMgR0wgcmVu
ZGVyYnVmZmVyCi0vLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDQuNC4zIHBhZ2UgMTA4LgotCi0jaW5jbHVkZSAibGliR0xFU3Yy
L1JlbmRlcmJ1ZmZlci5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0KLW5hbWVzcGFjZSBnbAotewotdW5zaWduZWQgaW50
IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Om1DdXJyZW50U2VyaWFsID0gMTsKLQotUmVuZGVyYnVmZmVy
OjpSZW5kZXJidWZmZXIoR0x1aW50IGlkLCBSZW5kZXJidWZmZXJTdG9yYWdlICpzdG9yYWdlKSA6
IFJlZkNvdW50T2JqZWN0KGlkKQotewotICAgIEFTU0VSVChzdG9yYWdlICE9IE5VTEwpOwotICAg
IG1TdG9yYWdlID0gc3RvcmFnZTsKLX0KLQotUmVuZGVyYnVmZmVyOjp+UmVuZGVyYnVmZmVyKCkK
LXsKLSAgICBkZWxldGUgbVN0b3JhZ2U7Ci19Ci0KLWJvb2wgUmVuZGVyYnVmZmVyOjppc0NvbG9y
YnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0b3JhZ2UtPmlzQ29sb3JidWZmZXIoKTsK
LX0KLQotYm9vbCBSZW5kZXJidWZmZXI6OmlzRGVwdGhidWZmZXIoKSBjb25zdAotewotICAgIHJl
dHVybiBtU3RvcmFnZS0+aXNEZXB0aGJ1ZmZlcigpOwotfQotCi1ib29sIFJlbmRlcmJ1ZmZlcjo6
aXNTdGVuY2lsYnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0b3JhZ2UtPmlzU3RlbmNp
bGJ1ZmZlcigpOwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5k
ZXJUYXJnZXQoKQotewotICAgIHJldHVybiBtU3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci19
Ci0KLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCi17
Ci0gICAgcmV0dXJuIG1TdG9yYWdlLT5nZXREZXB0aFN0ZW5jaWwoKTsKLX0KLQotaW50IFJlbmRl
cmJ1ZmZlcjo6Z2V0V2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBtU3RvcmFnZS0+Z2V0V2lk
dGgoKTsKLX0KLQotaW50IFJlbmRlcmJ1ZmZlcjo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVN0b3JhZ2UtPmdldEhlaWdodCgpOwotfQotCi1HTGVudW0gUmVuZGVyYnVmZmVyOjpn
ZXRGb3JtYXQoKSBjb25zdAotewotICAgIHJldHVybiBtU3RvcmFnZS0+Z2V0Rm9ybWF0KCk7Ci19
Ci0KLUQzREZPUk1BVCBSZW5kZXJidWZmZXI6OmdldEQzREZvcm1hdCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1TdG9yYWdlLT5nZXREM0RGb3JtYXQoKTsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRl
cmJ1ZmZlcjo6Z2V0U2VyaWFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVN0b3JhZ2UtPmdldFNl
cmlhbCgpOwotfQotCi12b2lkIFJlbmRlcmJ1ZmZlcjo6c2V0U3RvcmFnZShSZW5kZXJidWZmZXJT
dG9yYWdlICpuZXdTdG9yYWdlKQotewotICAgIEFTU0VSVChuZXdTdG9yYWdlICE9IE5VTEwpOwot
Ci0gICAgZGVsZXRlIG1TdG9yYWdlOwotICAgIG1TdG9yYWdlID0gbmV3U3RvcmFnZTsKLX0KLQot
UmVuZGVyYnVmZmVyU3RvcmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSgpCi17Ci0gICAgbVNlcmlh
bCA9IGlzc3VlU2VyaWFsKCk7Ci19Ci0KLVJlbmRlcmJ1ZmZlclN0b3JhZ2U6On5SZW5kZXJidWZm
ZXJTdG9yYWdlKCkKLXsKLX0KLQotYm9vbCBSZW5kZXJidWZmZXJTdG9yYWdlOjppc0NvbG9yYnVm
ZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyYnVmZmVy
U3RvcmFnZTo6aXNEZXB0aGJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyU3Rv
cmFnZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKLXsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotSURpcmVj
dDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCi17Ci0g
ICAgcmV0dXJuIE5VTEw7Ci19Ci0KLWludCBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRXaWR0aCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1XaWR0aDsKLX0KLQotaW50IFJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6OmdldEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1IZWlnaHQ7Ci19Ci0KLXZvaWQg
UmVuZGVyYnVmZmVyU3RvcmFnZTo6c2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0g
ICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgbUhlaWdodCA9IGhlaWdodDsKLX0KLQotR0xlbnVtIFJl
bmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Gb3Jt
YXQ7Ci19Ci0KLUQzREZPUk1BVCBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXREM0RGb3JtYXQoKSBj
b25zdAotewotICAgIHJldHVybiBtRDNERm9ybWF0OwotfQotCi1HTHNpemVpIFJlbmRlcmJ1ZmZl
clN0b3JhZ2U6OmdldFNhbXBsZXMoKSBjb25zdAotewotICAgIHJldHVybiBtU2FtcGxlczsKLX0K
LQotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFNlcmlhbCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1TZXJpYWw7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9y
YWdlOjppc3N1ZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0K
LUNvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0
KSA6IG1SZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotewotICAgIGlmIChyZW5kZXJUYXJnZXQp
Ci0gICAgewotICAgICAgICByZW5kZXJUYXJnZXQtPkFkZFJlZigpOwotCi0gICAgICAgIEQzRFNV
UkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZk
ZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgc2V0U2l6ZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3Jp
cHRpb24uSGVpZ2h0KTsKLSAgICAgICAgbUQzREZvcm1hdCA9IGRlc2NyaXB0aW9uLkZvcm1hdDsK
LSAgICAgICAgbVNhbXBsZXMgPSBlczJkeDo6R2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUo
ZGVzY3JpcHRpb24uTXVsdGlTYW1wbGVUeXBlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgbUQzREZvcm1hdCA9IEQzREZNVF9VTktOT1dOOwotICAgICAgICBtU2FtcGxlcyA9IDA7
Ci0gICAgfQotfQotCi1Db2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCi17Ci0gICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsK
LSAgICBEM0RGT1JNQVQgcmVxdWVzdGVkRm9ybWF0ID0gZXMyZHg6OkNvbnZlcnRSZW5kZXJidWZm
ZXJGb3JtYXQoZm9ybWF0KTsKLSAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IGdldENvbnRleHQo
KS0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMocmVxdWVzdGVkRm9ybWF0LCBzYW1wbGVzKTsK
LQotICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVzID09IC0xKQotICAgIHsKLSAgICAgICAgZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh3
aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKLSAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgcmVxdWVzdGVkRm9ybWF0
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
czJkeDo6R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxlcyksIDAs
IEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAg
ICAgewotICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0KLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBzZXRTaXpl
KHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBtRm9ybWF0ID0gZm9ybWF0OwotICAgICAgICBtRDNE
Rm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgICAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNh
bXBsZXM7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNldFNpemUoMCwgMCk7Ci0g
ICAgICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsKLSAgICAgICAgbUQzREZvcm1hdCA9IEQzREZNVF9V
TktOT1dOOwotICAgICAgICBtU2FtcGxlcyA9IDA7Ci0gICAgfQotfQotCi1Db2xvcmJ1ZmZlcjo6
fkNvbG9yYnVmZmVyKCkKLXsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAg
IG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29sb3JidWZmZXI6
OmlzQ29sb3JidWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1HTHVpbnQg
Q29sb3JidWZmZXI6OmdldFJlZFNpemUoKSBjb25zdAotewotICAgIGlmIChtUmVuZGVyVGFyZ2V0
KQotICAgIHsKLSAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOwotICAgICAgICBt
UmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgcmV0dXJuIGVz
MmR4OjpHZXRSZWRTaXplKGRlc2NyaXB0aW9uLkZvcm1hdCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLUdMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKCkgY29uc3QKLXsKLSAg
ICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNj
cmlwdGlvbjsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwot
Ci0gICAgICAgIHJldHVybiBlczJkeDo6R2V0R3JlZW5TaXplKGRlc2NyaXB0aW9uLkZvcm1hdCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUdMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0Qmx1
ZVNpemUoKSBjb25zdAotewotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAg
RDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOwotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXRE
ZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgcmV0dXJuIGVzMmR4OjpHZXRCbHVlU2l6ZShk
ZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1HTHVpbnQg
Q29sb3JidWZmZXI6OmdldEFscGhhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCi0gICAgewotICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Ci0gICAgICAg
IG1SZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKLQotICAgICAgICByZXR1cm4g
ZXMyZHg6OkdldEFscGhhU2l6ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgIH0KLQotICAgIHJl
dHVybiAwOwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqQ29sb3JidWZmZXI6OmdldFJlbmRlclRh
cmdldCgpCi17Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci19Ci0KLURlcHRoU3RlbmNpbGJ1
ZmZlcjo6RGVwdGhTdGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwp
IDogbURlcHRoU3RlbmNpbChkZXB0aFN0ZW5jaWwpCi17Ci0gICAgaWYgKGRlcHRoU3RlbmNpbCkK
LSAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+QWRkUmVmKCk7Ci0KLSAgICAgICAgRDNEU1VS
RkFDRV9ERVNDIGRlc2NyaXB0aW9uOwotICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRl
c2NyaXB0aW9uKTsKLQotICAgICAgICBzZXRTaXplKGRlc2NyaXB0aW9uLldpZHRoLCBkZXNjcmlw
dGlvbi5IZWlnaHQpOwotICAgICAgICBtRm9ybWF0ID0gKGRlc2NyaXB0aW9uLkZvcm1hdCA9PSBE
M0RGTVRfRDE2ID8gR0xfREVQVEhfQ09NUE9ORU5UMTYgOiBHTF9ERVBUSDI0X1NURU5DSUw4X09F
Uyk7Ci0gICAgICAgIG1TYW1wbGVzID0gZXMyZHg6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVU
eXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7IAotICAgICAgICBtRDNERm9ybWF0ID0g
ZGVzY3JpcHRpb24uRm9ybWF0OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRDNE
Rm9ybWF0ID0gRDNERk1UX1VOS05PV047IAotICAgICAgICBtU2FtcGxlcyA9IDA7Ci0gICAgfQot
fQotCi1EZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykKLXsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBnZXREZXZpY2UoKTsKLQotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIAotICAg
IGludCBzdXBwb3J0ZWRTYW1wbGVzID0gZ2V0Q29udGV4dCgpLT5nZXROZWFyZXN0U3VwcG9ydGVk
U2FtcGxlcyhEM0RGTVRfRDI0UzgsIHNhbXBsZXMpOwotCi0gICAgaWYgKHN1cHBvcnRlZFNhbXBs
ZXMgPT0gLTEpCi0gICAgewotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0QyNFM4LCBlczJkeDo6
R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxlcyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0Us
ICZtRGVwdGhTdGVuY2lsLCAwKTsKLQotICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgewotICAgICAgICBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsK
LSAgICAgICAgc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgbUZvcm1hdCA9IEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1UX0QyNFM4Owot
ICAgICAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIHNldFNpemUoMCwgMCk7Ci0gICAgICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsg
Ly9kZWZhdWx0IGZvcm1hdAotICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05PV047Ci0g
ICAgICAgIG1TYW1wbGVzID0gMDsKLSAgICB9Ci19Ci0KLURlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRl
cHRoU3RlbmNpbGJ1ZmZlcigpCi17Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAg
ICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgfQotfQotCi1ib29sIERlcHRoU3Rl
bmNpbGJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgRGVwdGhTdGVuY2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKSBjb25zdAotewot
ICAgIHJldHVybiB0cnVlOwotfQotCi1HTHVpbnQgRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0
aFNpemUoKSBjb25zdAotewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAg
RDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOwotICAgICAgICBtRGVwdGhTdGVuY2lsLT5HZXRE
ZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgcmV0dXJuIGVzMmR4OjpHZXREZXB0aFNpemUo
ZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotR0x1aW50
IERlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAotewotICAgIGlmICht
RGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9u
OwotICAgICAgICBtRGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAg
ICAgcmV0dXJuIGVzMmR4OjpHZXRTdGVuY2lsU2l6ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAg
IH0KLQotICAgIHJldHVybiAwOwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqRGVwdGhTdGVuY2ls
YnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQotewotICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwot
fQotCi1EZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3Rl
bmNpbCkgOiBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKQotewotICAgIGlmIChkZXB0
aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7
IC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxp
bmcgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3
aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2Ug
aW4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJi
dWZmZXJTdG9yYWdlCi0gICAgfQotfQotCi1EZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpIDogRGVwdGhTdGVuY2lsYnVmZmVyKHdp
ZHRoLCBoZWlnaHQsIHNhbXBsZXMpCi17Ci0gICAgaWYgKGdldERlcHRoU3RlbmNpbCgpKQotICAg
IHsKLSAgICAgICAgbUZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OyAvLyBJZiB0aGUgcmVu
ZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25l
IG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQot
ICAgIH0KLX0KLQotRGVwdGhidWZmZXI6On5EZXB0aGJ1ZmZlcigpCi17Ci19Ci0KLWJvb2wgRGVw
dGhidWZmZXI6OmlzRGVwdGhidWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIERlcHRoYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKSBjb25zdAotewotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotU3RlbmNpbGJ1ZmZlcjo6U3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJm
YWNlOSAqZGVwdGhTdGVuY2lsKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwpCi17
Ci0gICAgaWYgKGRlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1Gb3JtYXQgPSBHTF9TVEVO
Q0lMX0lOREVYODsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVk
LCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMg
Zm9yIHVzZSBpbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2UKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbUZvcm1h
dCA9IEdMX1JHQkE0OyAvL2RlZmF1bHQgZm9ybWF0Ci0gICAgfQotfQotCi1TdGVuY2lsYnVmZmVy
OjpTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKSA6
IERlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKQotewotICAgIGlmIChn
ZXREZXB0aFN0ZW5jaWwoKSkKLSAgICB7Ci0gICAgICAgIG1Gb3JtYXQgPSBHTF9TVEVOQ0lMX0lO
REVYODsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUg
Y2FsbGluZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVz
ZSBpbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2UKLSAgICB9Ci19Ci0KLVN0ZW5jaWxidWZmZXI6On5TdGVuY2lsYnVmZmVyKCkK
LXsKLX0KLQotYm9vbCBTdGVuY2lsYnVmZmVyOjppc0RlcHRoYnVmZmVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU3RlbmNpbGJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLX0KSW5kZXg6IEFOR0xFL3NyYy9saWJH
TEVTdjIvUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9S
ZW5kZXJidWZmZXIuaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3NSArMCwwIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwotCi0vLyBSZW5kZXJidWZmZXIuaDogRGVmaW5lcyB0aGUgd3JhcHBlciBjbGFzcyBn
bDo6UmVuZGVyYnVmZmVyLCBhcyB3ZWxsIGFzIHRoZQotLy8gY2xhc3MgaGllcmFyY2h5IHVzZWQg
dG8gc3RvcmUgaXRzIGNvbnRlbnRzOiBSZW5kZXJidWZmZXJTdG9yYWdlLCBDb2xvcmJ1ZmZlciwK
LS8vIERlcHRoU3RlbmNpbGJ1ZmZlciwgRGVwdGhidWZmZXIgYW5kIFN0ZW5jaWxidWZmZXIuIElt
cGxlbWVudHMgR0wgcmVuZGVyYnVmZmVyCi0vLyBvYmplY3RzIGFuZCByZWxhdGVkIGZ1bmN0aW9u
YWxpdHkuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDQuNC4zIHBhZ2UgMTA4LgotCi0jaWZu
ZGVmIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJV
RkZFUl9IXwotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNp
bmNsdWRlIDxkM2Q5Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9SZWZDb3VudE9iamVjdC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotLy8g
QSBjbGFzcyBkZXJpdmVkIGZyb20gUmVuZGVyYnVmZmVyU3RvcmFnZSBpcyBjcmVhdGVkIHdoZW5l
dmVyIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQotLy8gaXMgY2FsbGVkLiBUaGUgc3BlY2lmaWMgY29u
Y3JldGUgdHlwZSBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGludGVybmFsIGZvcm1hdCBpcwotLy8g
Y29sb3VyIGRlcHRoLCBzdGVuY2lsIG9yIHBhY2tlZCBkZXB0aC9zdGVuY2lsLgotY2xhc3MgUmVu
ZGVyYnVmZmVyU3RvcmFnZQotewotICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyU3RvcmFnZSgp
OwotCi0gICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyU3RvcmFnZSgpID0gMDsKLQotICAgIHZpcnR1
YWwgYm9vbCBpc0NvbG9yYnVmZmVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRGVwdGhi
dWZmZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdGVuY2lsYnVmZmVyKCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKLSAg
ICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsKLQotICAgIHZp
cnR1YWwgaW50IGdldFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0SGVpZ2h0KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0Rm9ybWF0KCkgY29uc3Q7Ci0gICAgRDNERk9S
TUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OwotICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0
OwotICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKLQotICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRTaXpl
KGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgR0xlbnVtIG1Gb3JtYXQ7Ci0gICAgRDNERk9S
TUFUIG1EM0RGb3JtYXQ7Ci0gICAgR0xzaXplaSBtU2FtcGxlczsKLSAgICB1bnNpZ25lZCBpbnQg
bVNlcmlhbDsKLQotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5k
ZXJidWZmZXJTdG9yYWdlKTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJp
YWw7Ci0KLSAgICBpbnQgbVdpZHRoOwotICAgIGludCBtSGVpZ2h0OwotfTsKLQotLy8gUmVuZGVy
YnVmZmVyIGltcGxlbWVudHMgdGhlIEdMIHJlbmRlcmJ1ZmZlciBvYmplY3QuCi0vLyBJdCdzIG9u
bHkgYSB3cmFwcGVyIGZvciBhIFJlbmRlcmJ1ZmZlclN0b3JhZ2UsIGJ1dCB0aGUgaW50ZXJuYWwg
b2JqZWN0Ci0vLyBjYW4gY2hhbmdlIHdoZW5ldmVyIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSBpcyBj
YWxsZWQuCi1jbGFzcyBSZW5kZXJidWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKLXsKLSAg
cHVibGljOgotICAgIFJlbmRlcmJ1ZmZlcihHTHVpbnQgaWQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2Ug
KnN0b3JhZ2UpOwotCi0gICAgflJlbmRlcmJ1ZmZlcigpOwotCi0gICAgYm9vbCBpc0NvbG9yYnVm
ZmVyKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0RlcHRoYnVmZmVyKCkgY29uc3Q7Ci0gICAgYm9vbCBp
c1N0ZW5jaWxidWZmZXIoKSBjb25zdDsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5k
ZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0K
LSAgICBpbnQgZ2V0V2lkdGgoKSBjb25zdDsKLSAgICBpbnQgZ2V0SGVpZ2h0KCkgY29uc3Q7Ci0g
ICAgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0OwotICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQo
KSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Ci0KLSAgICB2b2lk
IHNldFN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqbmV3U3RvcmFnZSk7Ci0gICAgUmVuZGVy
YnVmZmVyU3RvcmFnZSAqZ2V0U3RvcmFnZSgpIHsgcmV0dXJuIG1TdG9yYWdlOyB9Ci0KLSAgcHJp
dmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyKTsKLQotICAg
IFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKm1TdG9yYWdlOwotfTsKLQotY2xhc3MgQ29sb3JidWZmZXIg
OiBwdWJsaWMgUmVuZGVyYnVmZmVyU3RvcmFnZQotewotICBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
Q29sb3JidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCk7Ci0gICAgQ29sb3Ji
dWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBs
ZXMpOwotCi0gICAgfkNvbG9yYnVmZmVyKCk7Ci0KLSAgICBib29sIGlzQ29sb3JidWZmZXIoKSBj
b25zdDsKLQotICAgIEdMdWludCBnZXRSZWRTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEdy
ZWVuU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpIGNvbnN0OwotICAgIEdM
dWludCBnZXRBbHBoYVNpemUoKSBjb25zdDsKLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1S
ZW5kZXJUYXJnZXQ7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
Q29sb3JidWZmZXIpOwotfTsKLQotY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyIDogcHVibGljIFJl
bmRlcmJ1ZmZlclN0b3JhZ2UKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IERlcHRoU3RlbmNp
bGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKLSAgICBEZXB0aFN0ZW5j
aWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwotCi0gICAg
fkRlcHRoU3RlbmNpbGJ1ZmZlcigpOwotCi0gICAgdmlydHVhbCBib29sIGlzRGVwdGhidWZmZXIo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdGVuY2lsYnVmZmVyKCkgY29uc3Q7Ci0KLSAg
ICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldFN0ZW5jaWxTaXpl
KCkgY29uc3Q7Ci0KLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7Ci0K
LSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGVwdGhTdGVuY2lsYnVm
ZmVyKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKLX07Ci0KLWNsYXNz
IERlcHRoYnVmZmVyIDogcHVibGljIERlcHRoU3RlbmNpbGJ1ZmZlcgotewotICBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgRGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7
Ci0gICAgRGVwdGhidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMp
OwotCi0gICAgfkRlcHRoYnVmZmVyKCk7Ci0KLSAgICBib29sIGlzRGVwdGhidWZmZXIoKSBjb25z
dDsKLSAgICBib29sIGlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0OwotCi0gIHByaXZhdGU6Ci0gICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRoYnVmZmVyKTsKLX07Ci0KLWNsYXNzIFN0ZW5j
aWxidWZmZXIgOiBwdWJsaWMgRGVwdGhTdGVuY2lsYnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBTdGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOwot
ICAgIFN0ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMp
OwotCi0gICAgflN0ZW5jaWxidWZmZXIoKTsKLQotICAgIGJvb2wgaXNEZXB0aGJ1ZmZlcigpIGNv
bnN0OwotICAgIGJvb2wgaXNTdGVuY2lsYnVmZmVyKCkgY29uc3Q7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3RlbmNpbGJ1ZmZlcik7Ci19OwotfQotCi0jZW5k
aWYgICAvLyBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xF
U3YyL1Jlc291cmNlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2
Mi9SZXNvdXJjZU1hbmFnZXIuY3BwCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9saWJH
TEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNDAgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gUmVzb3VyY2VNYW5hZ2VyLmNwcDogSW1wbGVtZW50
cyB0aGUgZ2w6OlJlc291cmNlTWFuYWdlciBjbGFzcywgd2hpY2ggdHJhY2tzIGFuZCAKLS8vIHJl
dHJpZXZlcyBvYmplY3RzIHdoaWNoIG1heSBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgQ29udGV4dHMu
Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJs
aWJHTEVTdjIvQnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1NoYWRl
ci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCi0KLW5hbWVzcGFjZSBnbAotewot
UmVzb3VyY2VNYW5hZ2VyOjpSZXNvdXJjZU1hbmFnZXIoKQotewotICAgIG1SZWZDb3VudCA9IDE7
Ci19Ci0KLVJlc291cmNlTWFuYWdlcjo6flJlc291cmNlTWFuYWdlcigpCi17Ci0gICAgd2hpbGUg
KCFtQnVmZmVyTWFwLmVtcHR5KCkpCi0gICAgewotICAgICAgICBkZWxldGVCdWZmZXIobUJ1ZmZl
ck1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtUHJvZ3JhbU1hcC5l
bXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlUHJvZ3JhbShtUHJvZ3JhbU1hcC5iZWdpbigp
LT5maXJzdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtU2hhZGVyTWFwLmVtcHR5KCkpCi0gICAg
ewotICAgICAgICBkZWxldGVTaGFkZXIobVNoYWRlck1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAg
fQotCi0gICAgd2hpbGUgKCFtUmVuZGVyYnVmZmVyTWFwLmVtcHR5KCkpCi0gICAgewotICAgICAg
ICBkZWxldGVSZW5kZXJidWZmZXIobVJlbmRlcmJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7Ci0g
ICAgfQotCi0gICAgd2hpbGUgKCFtVGV4dHVyZU1hcC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAg
ZGVsZXRlVGV4dHVyZShtVGV4dHVyZU1hcC5iZWdpbigpLT5maXJzdCk7Ci0gICAgfQotfQotCi12
b2lkIFJlc291cmNlTWFuYWdlcjo6YWRkUmVmKCkKLXsKLSAgICBtUmVmQ291bnQrKzsKLX0KLQot
dm9pZCBSZXNvdXJjZU1hbmFnZXI6OnJlbGVhc2UoKQotewotICAgIGlmICgtLW1SZWZDb3VudCA9
PSAwKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5z
IGFuIHVudXNlZCBidWZmZXIgbmFtZQotR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlQnVm
ZmVyKCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKLQotICAgIHdoaWxlIChtQnVm
ZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtQnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAg
aGFuZGxlKys7Ci0gICAgfQotCi0gICAgbUJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKLQotICAg
IHJldHVybiBoYW5kbGU7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIHNoYWRlci9wcm9ncmFt
IG5hbWUKLUdMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkK
LXsKLSAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKLQotICAgIHdoaWxlIChtU2hhZGVyTWFw
LmZpbmQoaGFuZGxlKSAhPSBtU2hhZGVyTWFwLmVuZCgpIHx8IG1Qcm9ncmFtTWFwLmZpbmQoaGFu
ZGxlKSAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkgICAvLyBTaGFyZWQgbmFtZSBzcGFjZQotICAgIHsK
LSAgICAgICAgaGFuZGxlKys7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gR0xfVkVSVEVYX1NI
QURFUikKLSAgICB7Ci0gICAgICAgIG1TaGFkZXJNYXBbaGFuZGxlXSA9IG5ldyBWZXJ0ZXhTaGFk
ZXIodGhpcywgaGFuZGxlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GUkFHTUVO
VF9TSEFERVIpCi0gICAgewotICAgICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcgRnJhZ21l
bnRTaGFkZXIodGhpcywgaGFuZGxlKTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwot
Ci0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotLy8gUmV0dXJucyBhbiB1bnVzZWQgcHJvZ3JhbS9z
aGFkZXIgbmFtZQotR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0g
ICAgdW5zaWduZWQgaW50IGhhbmRsZSA9IDE7Ci0KLSAgICB3aGlsZSAobVByb2dyYW1NYXAuZmlu
ZChoYW5kbGUpICE9IG1Qcm9ncmFtTWFwLmVuZCgpIHx8IG1TaGFkZXJNYXAuZmluZChoYW5kbGUp
ICE9IG1TaGFkZXJNYXAuZW5kKCkpICAgLy8gU2hhcmVkIG5hbWUgc3BhY2UKLSAgICB7Ci0gICAg
ICAgIGhhbmRsZSsrOwotICAgIH0KLQotICAgIG1Qcm9ncmFtTWFwW2hhbmRsZV0gPSBuZXcgUHJv
Z3JhbSh0aGlzLCBoYW5kbGUpOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotLy8gUmV0dXJu
cyBhbiB1bnVzZWQgdGV4dHVyZSBuYW1lCi1HTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVU
ZXh0dXJlKCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKLQotICAgIHdoaWxlICht
VGV4dHVyZU1hcC5maW5kKGhhbmRsZSkgIT0gbVRleHR1cmVNYXAuZW5kKCkpCi0gICAgewotICAg
ICAgICBoYW5kbGUrKzsKLSAgICB9Ci0KLSAgICBtVGV4dHVyZU1hcFtoYW5kbGVdID0gTlVMTDsK
LQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KLS8vIFJldHVybnMgYW4gdW51c2VkIHJlbmRlcmJ1
ZmZlciBuYW1lCi1HTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVSZW5kZXJidWZmZXIoKQot
ewotICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOwotCi0gICAgd2hpbGUgKG1SZW5kZXJidWZm
ZXJNYXAuZmluZChoYW5kbGUpICE9IG1SZW5kZXJidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAg
ICAgICBoYW5kbGUrKzsKLSAgICB9Ci0KLSAgICBtUmVuZGVyYnVmZmVyTWFwW2hhbmRsZV0gPSBO
VUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRl
bGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQotewotICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVm
ZmVyT2JqZWN0ID0gbUJ1ZmZlck1hcC5maW5kKGJ1ZmZlcik7Ci0KLSAgICBpZiAoYnVmZmVyT2Jq
ZWN0ICE9IG1CdWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBpZiAoYnVmZmVyT2JqZWN0
LT5zZWNvbmQpIGJ1ZmZlck9iamVjdC0+c2Vjb25kLT5yZWxlYXNlKCk7Ci0gICAgICAgIG1CdWZm
ZXJNYXAuZXJhc2UoYnVmZmVyT2JqZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VNYW5h
Z2VyOjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKLXsKLSAgICBTaGFkZXJNYXA6Oml0ZXJh
dG9yIHNoYWRlck9iamVjdCA9IG1TaGFkZXJNYXAuZmluZChzaGFkZXIpOwotCi0gICAgaWYgKHNo
YWRlck9iamVjdCAhPSBtU2hhZGVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgaWYgKHNoYWRl
ck9iamVjdC0+c2Vjb25kLT5nZXRSZWZDb3VudCgpID09IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGRlbGV0ZSBzaGFkZXJPYmplY3QtPnNlY29uZDsKLSAgICAgICAgICAgIG1TaGFkZXJNYXAu
ZXJhc2Uoc2hhZGVyT2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+c2Vjb25kLT5mbGFnRm9yRGVsZXRpb24oKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVByb2dyYW0o
R0x1aW50IHByb2dyYW0pCi17Ci0gICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3JhbU9iamVj
dCA9IG1Qcm9ncmFtTWFwLmZpbmQocHJvZ3JhbSk7Ci0KLSAgICBpZiAocHJvZ3JhbU9iamVjdCAh
PSBtUHJvZ3JhbU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChwcm9ncmFtT2JqZWN0LT5z
ZWNvbmQtPmdldFJlZkNvdW50KCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRl
IHByb2dyYW1PYmplY3QtPnNlY29uZDsKLSAgICAgICAgICAgIG1Qcm9ncmFtTWFwLmVyYXNlKHBy
b2dyYW1PYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgeyAKLSAgICAg
ICAgICAgIHByb2dyYW1PYmplY3QtPnNlY29uZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVUZXh0dXJlKEdMdWlu
dCB0ZXh0dXJlKQotewotICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIHRleHR1cmVPYmplY3QgPSBt
VGV4dHVyZU1hcC5maW5kKHRleHR1cmUpOwotCi0gICAgaWYgKHRleHR1cmVPYmplY3QgIT0gbVRl
eHR1cmVNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBpZiAodGV4dHVyZU9iamVjdC0+c2Vjb25k
KSB0ZXh0dXJlT2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsKLSAgICAgICAgbVRleHR1cmVNYXAu
ZXJhc2UodGV4dHVyZU9iamVjdCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6
ZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCi17Ci0gICAgUmVuZGVyYnVm
ZmVyTWFwOjppdGVyYXRvciByZW5kZXJidWZmZXJPYmplY3QgPSBtUmVuZGVyYnVmZmVyTWFwLmZp
bmQocmVuZGVyYnVmZmVyKTsKLQotICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QgIT0gbVJlbmRl
cmJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3Qt
PnNlY29uZCkgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsKLSAgICAgICAg
bVJlbmRlcmJ1ZmZlck1hcC5lcmFzZShyZW5kZXJidWZmZXJPYmplY3QpOwotICAgIH0KLX0KLQot
QnVmZmVyICpSZXNvdXJjZU1hbmFnZXI6OmdldEJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQot
ewotICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyID0gbUJ1ZmZlck1hcC5maW5kKGhhbmRs
ZSk7Ci0KLSAgICBpZiAoYnVmZmVyID09IG1CdWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJ1
ZmZlci0+c2Vjb25kOwotICAgIH0KLX0KLQotU2hhZGVyICpSZXNvdXJjZU1hbmFnZXI6OmdldFNo
YWRlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQotewotICAgIFNoYWRlck1hcDo6aXRlcmF0b3Igc2hh
ZGVyID0gbVNoYWRlck1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAoc2hhZGVyID09IG1TaGFk
ZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNoYWRlci0+c2Vjb25kOwotICAgIH0KLX0KLQotVGV4
dHVyZSAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRUZXh0dXJlKHVuc2lnbmVkIGludCBoYW5kbGUpCi17
Ci0gICAgaWYgKGhhbmRsZSA9PSAwKSByZXR1cm4gTlVMTDsKLQotICAgIFRleHR1cmVNYXA6Oml0
ZXJhdG9yIHRleHR1cmUgPSBtVGV4dHVyZU1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAodGV4
dHVyZSA9PSBtVGV4dHVyZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gdGV4dHVyZS0+c2Vjb25kOwot
ICAgIH0KLX0KLQotUHJvZ3JhbSAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRQcm9ncmFtKHVuc2lnbmVk
IGludCBoYW5kbGUpCi17Ci0gICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3JhbSA9IG1Qcm9n
cmFtTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChwcm9ncmFtID09IG1Qcm9ncmFtTWFwLmVu
ZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIHJldHVybiBwcm9ncmFtLT5zZWNvbmQ7Ci0gICAgfQotfQotCi1SZW5kZXJidWZm
ZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0UmVuZGVyYnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUp
Ci17Ci0gICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciByZW5kZXJidWZmZXIgPSBtUmVuZGVy
YnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChyZW5kZXJidWZmZXIgPT0gbVJlbmRl
cmJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gcmVuZGVyYnVmZmVyLT5zZWNvbmQ7Ci0gICAg
fQotfQotCi12b2lkIFJlc291cmNlTWFuYWdlcjo6c2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5k
bGUsIFJlbmRlcmJ1ZmZlciAqYnVmZmVyKQotewotICAgIG1SZW5kZXJidWZmZXJNYXBbaGFuZGxl
XSA9IGJ1ZmZlcjsKLX0KLQotdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNrQnVmZmVyQWxsb2Nh
dGlvbih1bnNpZ25lZCBpbnQgYnVmZmVyKQotewotICAgIGlmIChidWZmZXIgIT0gMCAmJiAhZ2V0
QnVmZmVyKGJ1ZmZlcikpCi0gICAgewotICAgICAgICBCdWZmZXIgKmJ1ZmZlck9iamVjdCA9IG5l
dyBCdWZmZXIoYnVmZmVyKTsKLSAgICAgICAgbUJ1ZmZlck1hcFtidWZmZXJdID0gYnVmZmVyT2Jq
ZWN0OwotICAgICAgICBidWZmZXJPYmplY3QtPmFkZFJlZigpOwotICAgIH0KLX0KLQotdm9pZCBS
ZXNvdXJjZU1hbmFnZXI6OmNoZWNrVGV4dHVyZUFsbG9jYXRpb24oR0x1aW50IHRleHR1cmUsIFNh
bXBsZXJUeXBlIHR5cGUpCi17Ci0gICAgaWYgKCFnZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1
cmUgIT0gMCkKLSAgICB7Ci0gICAgICAgIFRleHR1cmUgKnRleHR1cmVPYmplY3Q7Ci0KLSAgICAg
ICAgaWYgKHR5cGUgPT0gU0FNUExFUl8yRCkKLSAgICAgICAgewotICAgICAgICAgICAgdGV4dHVy
ZU9iamVjdCA9IG5ldyBUZXh0dXJlMkQodGV4dHVyZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAodHlwZSA9PSBTQU1QTEVSX0NVQkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRleHR1
cmVPYmplY3QgPSBuZXcgVGV4dHVyZUN1YmVNYXAodGV4dHVyZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbVRleHR1cmVNYXBbdGV4dHVyZV0gPSB0
ZXh0dXJlT2JqZWN0OwotICAgICAgICB0ZXh0dXJlT2JqZWN0LT5hZGRSZWYoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpjaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24oR0x1
aW50IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAocmVuZGVyYnVmZmVyICE9IDAgJiYgIWdldFJl
bmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpy
ZW5kZXJidWZmZXJPYmplY3QgPSBuZXcgUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlciwgbmV3IENv
bG9yYnVmZmVyKDAsIDAsIEdMX1JHQkE0LCAwKSk7Ci0gICAgICAgIG1SZW5kZXJidWZmZXJNYXBb
cmVuZGVyYnVmZmVyXSA9IHJlbmRlcmJ1ZmZlck9iamVjdDsKLSAgICAgICAgcmVuZGVyYnVmZmVy
T2JqZWN0LT5hZGRSZWYoKTsKLSAgICB9Ci19Ci0KLX0KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVT
djIvUmVzb3VyY2VNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9S
ZXNvdXJjZU1hbmFnZXIuaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3Yy
L1Jlc291cmNlTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkyICswLDAgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCi0KLS8vIFJlc291cmNlTWFuYWdlci5oIDogRGVmaW5lcyB0aGUgUmVzb3Vy
Y2VNYW5hZ2VyIGNsYXNzLCB3aGljaCB0cmFja3Mgb2JqZWN0cwotLy8gc2hhcmVkIGJ5IG11bHRp
cGxlIEdMIGNvbnRleHRzLgotCi0jaWZuZGVmIExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8K
LSNkZWZpbmUgTElCR0xFU1YyX1JFU09VUkNFTUFOQUdFUl9IXwotCi0jZGVmaW5lIEdMX0FQSUNB
TEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0KLW5hbWVzcGFjZSBnbAotewotY2xhc3MgQnVmZmVyOwot
Y2xhc3MgU2hhZGVyOwotY2xhc3MgUHJvZ3JhbTsKLWNsYXNzIFRleHR1cmU7Ci1jbGFzcyBSZW5k
ZXJidWZmZXI7Ci0KLWVudW0gU2FtcGxlclR5cGUKLXsKLSAgICBTQU1QTEVSXzJELAotICAgIFNB
TVBMRVJfQ1VCRSwKLQotICAgIFNBTVBMRVJfVFlQRV9DT1VOVAotfTsKLQotY2xhc3MgUmVzb3Vy
Y2VNYW5hZ2VyCi17Ci0gIHB1YmxpYzoKLSAgICBSZXNvdXJjZU1hbmFnZXIoKTsKLSAgICB+UmVz
b3VyY2VNYW5hZ2VyKCk7Ci0KLSAgICB2b2lkIGFkZFJlZigpOwotICAgIHZvaWQgcmVsZWFzZSgp
OwotCi0gICAgR0x1aW50IGNyZWF0ZUJ1ZmZlcigpOwotICAgIEdMdWludCBjcmVhdGVTaGFkZXIo
R0xlbnVtIHR5cGUpOwotICAgIEdMdWludCBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgR0x1aW50IGNy
ZWF0ZVRleHR1cmUoKTsKLSAgICBHTHVpbnQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0KLSAgICB2
b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKLSAgICB2b2lkIGRlbGV0ZVNoYWRlcihH
THVpbnQgc2hhZGVyKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOwot
ICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBkZWxldGVS
ZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICBCdWZmZXIgKmdldEJ1ZmZl
cihHTHVpbnQgaGFuZGxlKTsKLSAgICBTaGFkZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsK
LSAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpOwotICAgIFRleHR1cmUgKmdl
dFRleHR1cmUoR0x1aW50IGhhbmRsZSk7Ci0gICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZm
ZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgCi0gICAgdm9pZCBzZXRSZW5kZXJidWZmZXIoR0x1aW50
IGhhbmRsZSwgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIpOwotCi0gICAgdm9pZCBjaGVja0J1
ZmZlckFsbG9jYXRpb24odW5zaWduZWQgaW50IGJ1ZmZlcik7Ci0gICAgdm9pZCBjaGVja1RleHR1
cmVBbGxvY2F0aW9uKEdMdWludCB0ZXh0dXJlLCBTYW1wbGVyVHlwZSB0eXBlKTsKLSAgICB2b2lk
IGNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKLQotICBw
cml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZXNvdXJjZU1hbmFnZXIpOwot
Ci0gICAgc3RkOjpzaXplX3QgbVJlZkNvdW50OwotCi0gICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVp
bnQsIEJ1ZmZlcio+IEJ1ZmZlck1hcDsKLSAgICBCdWZmZXJNYXAgbUJ1ZmZlck1hcDsKLQotICAg
IHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBTaGFkZXIqPiBTaGFkZXJNYXA7Ci0gICAgU2hhZGVy
TWFwIG1TaGFkZXJNYXA7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgUHJvZ3JhbSo+
IFByb2dyYW1NYXA7Ci0gICAgUHJvZ3JhbU1hcCBtUHJvZ3JhbU1hcDsKLQotICAgIHR5cGVkZWYg
c3RkOjptYXA8R0x1aW50LCBUZXh0dXJlKj4gVGV4dHVyZU1hcDsKLSAgICBUZXh0dXJlTWFwIG1U
ZXh0dXJlTWFwOwotCi0gICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFJlbmRlcmJ1ZmZlcio+
IFJlbmRlcmJ1ZmZlck1hcDsKLSAgICBSZW5kZXJidWZmZXJNYXAgbVJlbmRlcmJ1ZmZlck1hcDsK
LX07Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KSW5kZXg6
IEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliR0xFU3YyL1NoYWRlci5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2xpYkdM
RVN2Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwNCArMCwwIEBACi0vLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0vLwotCi0vLyBTaGFkZXIuY3BwOiBJbXBsZW1lbnRzIHRoZSBnbDo6U2hhZGVyIGNs
YXNzIGFuZCBpdHMgIGRlcml2ZWQgY2xhc3NlcwotLy8gVmVydGV4U2hhZGVyIGFuZCBGcmFnbWVu
dFNoYWRlci4gSW1wbGVtZW50cyBHTCBzaGFkZXIgb2JqZWN0cyBhbmQgcmVsYXRlZAotLy8gZnVu
Y3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMi4xMCBwYWdlIDI0IGFuZCBz
ZWN0aW9uIDMuOCBwYWdlIDg0LgotCi0jaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgotCi0j
aW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJsYW5nLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgi
Ci0KLW5hbWVzcGFjZSBnbAotewotdm9pZCAqU2hhZGVyOjptRnJhZ21lbnRDb21waWxlciA9IE5V
TEw7Ci12b2lkICpTaGFkZXI6Om1WZXJ0ZXhDb21waWxlciA9IE5VTEw7Ci0KLVNoYWRlcjo6U2hh
ZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtSGFuZGxlKGhh
bmRsZSksIG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlcikKLXsKLSAgICBtU291cmNlID0gTlVMTDsK
LSAgICBtSGxzbCA9IE5VTEw7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOwotCi0gICAgLy8gUGVyZm9y
bSBhIG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzaGFkZXIgY29tcGlsZXIgKG9yIGFm
dGVyIGJlaW5nIGRlc3RydWN0ZWQgYnkgcmVsZWFzZUNvbXBpbGVyKQotICAgIGlmICghbUZyYWdt
ZW50Q29tcGlsZXIpCi0gICAgewotICAgICAgICBpbnQgcmVzdWx0ID0gU2hJbml0aWFsaXplKCk7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgewotICAgICAgICAgICAgVEJ1aWx0SW5S
ZXNvdXJjZSByZXNvdXJjZXM7Ci0gICAgICAgICAgICBTaEluaXRCdWlsdEluUmVzb3VyY2UoJnJl
c291cmNlcyk7Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyA9IE1BWF9W
RVJURVhfQVRUUklCUzsKLSAgICAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVj
dG9ycyA9IE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOwotICAgICAgICAgICAgcmVzb3VyY2Vz
Lk1heFZhcnlpbmdWZWN0b3JzID0gTUFYX1ZBUllJTkdfVkVDVE9SUzsKLSAgICAgICAgICAgIHJl
c291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUUzsKLSAgICAgICAgICAgIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzID0gTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM7Ci0gICAgICAgICAgICBy
ZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPSBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsK
LSAgICAgICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gTUFYX0ZS
QUdNRU5UX1VOSUZPUk1fVkVDVE9SUzsKLSAgICAgICAgICAgIHJlc291cmNlcy5NYXhEcmF3QnVm
ZmVycyA9IE1BWF9EUkFXX0JVRkZFUlM7Ci0KLSAgICAgICAgICAgIG1GcmFnbWVudENvbXBpbGVy
ID0gU2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5nRnJhZ21lbnQsIEVTaFNwZWNHTEVTMiwgJnJl
c291cmNlcyk7Ci0gICAgICAgICAgICBtVmVydGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBp
bGVyKEVTaExhbmdWZXJ0ZXgsIEVTaFNwZWNHTEVTMiwgJnJlc291cmNlcyk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBtUmVmQ291bnQgPSAwOwotICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsK
LX0KLQotU2hhZGVyOjp+U2hhZGVyKCkKLXsKLSAgICBkZWxldGVbXSBtU291cmNlOwotICAgIGRl
bGV0ZVtdIG1IbHNsOwotICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwotfQotCi1HTHVpbnQgU2hhZGVy
OjpnZXRIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiBtSGFuZGxlOwotfQotCi12b2lkIFNo
YWRlcjo6c2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0IGNoYXIgKipzdHJpbmcsIGNvbnN0
IEdMaW50ICpsZW5ndGgpCi17Ci0gICAgZGVsZXRlW10gbVNvdXJjZTsKLSAgICBpbnQgdG90YWxM
ZW5ndGggPSAwOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsK
LSAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgdG90YWxMZW5ndGggKz0gbGVuZ3RoW2ldOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gKGludClzdHJsZW4oc3RyaW5n
W2ldKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1Tb3VyY2UgPSBuZXcgY2hhclt0b3RhbExl
bmd0aCArIDFdOwotICAgIGNoYXIgKmNvZGUgPSBtU291cmNlOwotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgaW50IHN0cmluZ0xlbmd0aDsKLQot
ICAgICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzdHJpbmdMZW5ndGggPSBsZW5ndGhbaV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSAoaW50KXN0cmxlbihzdHJpbmdb
aV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RybmNweShjb2RlLCBzdHJpbmdbaV0sIHN0cmlu
Z0xlbmd0aCk7Ci0gICAgICAgIGNvZGUgKz0gc3RyaW5nTGVuZ3RoOwotICAgIH0KLQotICAgIG1T
b3VyY2VbdG90YWxMZW5ndGhdID0gJ1wwJzsKLX0KLQotaW50IFNoYWRlcjo6Z2V0SW5mb0xvZ0xl
bmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUluZm9M
b2cpICsgMTsKLSAgICB9Ci19Ci0KLXZvaWQgU2hhZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQotewotICAgIGludCBpbmRleCA9
IDA7Ci0KLSAgICBpZiAobUluZm9Mb2cpCi0gICAgewotICAgICAgICB3aGlsZSAoaW5kZXggPCBi
dWZTaXplIC0gMSAmJiBpbmRleCA8IChpbnQpc3RybGVuKG1JbmZvTG9nKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSBtSW5mb0xvZ1tpbmRleF07Ci0gICAgICAgICAg
ICBpbmRleCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAgewot
ICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCkK
LSAgICB7Ci0gICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Ci19Ci0KLWludCBTaGFkZXI6
OmdldFNvdXJjZUxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtU291cmNlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0
cmxlbihtU291cmNlKSArIDE7Ci0gICAgfQotfQotCi12b2lkIFNoYWRlcjo6Z2V0U291cmNlKEdM
c2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpzb3VyY2UpCi17Ci0gICAgaW50
IGluZGV4ID0gMDsKLQotICAgIGlmIChtU291cmNlKQotICAgIHsKLSAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgYnVmU2l6ZSAtIDEgJiYgaW5kZXggPCAoaW50KXN0cmxlbihtU291cmNlKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgc291cmNlW2luZGV4XSA9IG1Tb3VyY2VbaW5kZXhdOwotICAgICAg
ICAgICAgaW5kZXgrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChidWZTaXplKQotICAg
IHsKLSAgICAgICAgc291cmNlW2luZGV4XSA9ICdcMCc7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0
aCkKLSAgICB7Ci0gICAgICAgICpsZW5ndGggPSBpbmRleDsKLSAgICB9Ci19Ci0KLWJvb2wgU2hh
ZGVyOjppc0NvbXBpbGVkKCkKLXsKLSAgICByZXR1cm4gbUhsc2wgIT0gTlVMTDsKLX0KLQotY29u
c3QgY2hhciAqU2hhZGVyOjpnZXRITFNMKCkKLXsKLSAgICByZXR1cm4gbUhsc2w7Ci19Ci0KLXZv
aWQgU2hhZGVyOjphZGRSZWYoKQotewotICAgIG1SZWZDb3VudCsrOwotfQotCi12b2lkIFNoYWRl
cjo6cmVsZWFzZSgpCi17Ci0gICAgbVJlZkNvdW50LS07Ci0KLSAgICBpZiAobVJlZkNvdW50ID09
IDAgJiYgbURlbGV0ZVN0YXR1cykKLSAgICB7Ci0gICAgICAgIG1SZXNvdXJjZU1hbmFnZXItPmRl
bGV0ZVNoYWRlcihtSGFuZGxlKTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBTaGFkZXI6Omdl
dFJlZkNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVJlZkNvdW50OwotfQotCi1ib29sIFNo
YWRlcjo6aXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRGVsZXRl
U3RhdHVzOwotfQotCi12b2lkIFNoYWRlcjo6ZmxhZ0ZvckRlbGV0aW9uKCkKLXsKLSAgICBtRGVs
ZXRlU3RhdHVzID0gdHJ1ZTsKLX0KLQotdm9pZCBTaGFkZXI6OnJlbGVhc2VDb21waWxlcigpCi17
Ci0gICAgU2hEZXN0cnVjdChtRnJhZ21lbnRDb21waWxlcik7Ci0gICAgU2hEZXN0cnVjdChtVmVy
dGV4Q29tcGlsZXIpOwotCi0gICAgbUZyYWdtZW50Q29tcGlsZXIgPSBOVUxMOwotICAgIG1WZXJ0
ZXhDb21waWxlciA9IE5VTEw7Ci0KLSAgICBTaEZpbmFsaXplKCk7Ci19Ci0KLXZvaWQgU2hhZGVy
OjpwYXJzZVZhcnlpbmdzKCkKLXsKLSAgICBpZiAobUhsc2wpCi0gICAgewotICAgICAgICBjb25z
dCBjaGFyICppbnB1dCA9IHN0cnN0cihtSGxzbCwgIi8vIFZhcnlpbmdzIikgKyAxMjsKLQotICAg
ICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIHZhcnlpbmdUeXBl
WzI1Nl07Ci0gICAgICAgICAgICBjaGFyIHZhcnlpbmdOYW1lWzI1Nl07Ci0KLSAgICAgICAgICAg
IGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3RhdGljICVzICVzIiwgdmFyeWluZ1R5cGUs
IHZhcnlpbmdOYW1lKTsKLQotICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgY2hhciAqYXJyYXkgPSBzdHJzdHIodmFyeWluZ05hbWUsICJbIik7Ci0gICAgICAgICAgICBp
bnQgc2l6ZSA9IDE7Ci0KLSAgICAgICAgICAgIGlmIChhcnJheSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBzaXplID0gYXRvaShhcnJheSArIDEpOwotICAgICAgICAgICAgICAgICph
cnJheSA9ICdcMCc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhcnlpbmdzLnB1c2hf
YmFjayhWYXJ5aW5nKHBhcnNlVHlwZSh2YXJ5aW5nVHlwZSksIHZhcnlpbmdOYW1lLCBzaXplLCBh
cnJheSAhPSBOVUxMKSk7Ci0KLSAgICAgICAgICAgIGlucHV0ID0gc3Ryc3RyKGlucHV0LCAiOyIp
ICsgMjsKLSAgICAgICAgfQotCi0gICAgICAgIG1Vc2VzRnJhZ0Nvb3JkID0gc3Ryc3RyKG1IbHNs
LCAiR0xfVVNFU19GUkFHX0NPT1JEIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcm9udEZhY2lu
ZyA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJPTlRfRkFDSU5HIikgIT0gTlVMTDsKLSAgICAg
ICAgbVVzZXNQb2ludFNpemUgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX1BPSU5UX1NJWkUiKSAh
PSBOVUxMOwotICAgICAgICBtVXNlc1BvaW50Q29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VT
X1BPSU5UX0NPT1JEIikgIT0gTlVMTDsKLSAgICB9Ci19Ci0KLXZvaWQgU2hhZGVyOjpjb21waWxl
VG9ITFNMKHZvaWQgKmNvbXBpbGVyKQotewotICAgIGlmIChpc0NvbXBpbGVkKCkgfHwgIW1Tb3Vy
Y2UpCi0gICAgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVFJBQ0UoIlxuJXMiLCBt
U291cmNlKTsKLQotICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwotICAgIG1JbmZvTG9nID0gTlVMTDsK
LQotICAgIGludCByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsICZtU291cmNlLCAxLCBFU2hP
cHROb25lLCBFRGVidWdPcE5vbmUpOwotICAgIGNvbnN0IGNoYXIgKm9iaiA9IFNoR2V0T2JqZWN0
Q29kZShjb21waWxlcik7Ci0gICAgY29uc3QgY2hhciAqaW5mbyA9IFNoR2V0SW5mb0xvZyhjb21w
aWxlcik7Ci0KLSAgICBpZiAocmVzdWx0KQotICAgIHsKLSAgICAgICAgbUhsc2wgPSBuZXcgY2hh
cltzdHJsZW4ob2JqKSArIDFdOwotICAgICAgICBzdHJjcHkobUhsc2wsIG9iaik7Ci0KLSAgICAg
ICAgVFJBQ0UoIlxuJXMiLCBtSGxzbCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IG1JbmZvTG9nID0gbmV3IGNoYXJbc3RybGVuKGluZm8pICsgMV07Ci0gICAgICAgIHN0cmNweSht
SW5mb0xvZywgaW5mbyk7Ci0KLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZyk7Ci0gICAg
fQotfQotCi1HTGVudW0gU2hhZGVyOjpwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUp
Ci17Ci0gICAgaWYgKHR5cGUgPT0gImZsb2F0IikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9G
TE9BVDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQyIikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBHTF9GTE9BVF9WRUMyOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJm
bG9hdDMiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZFQzM7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0NCIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxP
QVRfVkVDNDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQyeDIiKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX01BVDI7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUg
PT0gImZsb2F0M3gzIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQzOwotICAg
IH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDR4NCIpCi0gICAgewotICAgICAgICByZXR1
cm4gR0xfRkxPQVRfTUFUNDsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAg
cmV0dXJuIEdMX05PTkU7Ci19Ci0KLS8vIHRydWUgaWYgdmFyeWluZyB4IGhhcyBhIGhpZ2hlciBw
cmlvcml0eSBpbiBwYWNraW5nIHRoYW4geQotYm9vbCBTaGFkZXI6OmNvbXBhcmVWYXJ5aW5nKGNv
bnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpCi17Ci0gICAgaWYoeC50eXBlID09IHku
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB4LnNpemUgPiB5LnNpemU7Ci0gICAgfQotCi0g
ICAgc3dpdGNoICh4LnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1
cm4gdHJ1ZTsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgc3dpdGNoKHkudHlw
ZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNl
OwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJl
dHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAg
c3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDog
cmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNl
OwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVy
biB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgICAgc3dpdGNoKHkudHlwZSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzog
cmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzI6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBm
YWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiBmYWxzZTsKLSAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1WZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIs
IEdMdWludCBoYW5kbGUpIDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkKLXsKLX0KLQotVmVydGV4
U2hhZGVyOjp+VmVydGV4U2hhZGVyKCkKLXsKLX0KLQotR0xlbnVtIFZlcnRleFNoYWRlcjo6Z2V0
VHlwZSgpCi17Ci0gICAgcmV0dXJuIEdMX1ZFUlRFWF9TSEFERVI7Ci19Ci0KLXZvaWQgVmVydGV4
U2hhZGVyOjpjb21waWxlKCkKLXsKLSAgICBjb21waWxlVG9ITFNMKG1WZXJ0ZXhDb21waWxlcik7
Ci0gICAgcGFyc2VBdHRyaWJ1dGVzKCk7Ci0gICAgcGFyc2VWYXJ5aW5ncygpOwotfQotCi1pbnQg
VmVydGV4U2hhZGVyOjpnZXRTZW1hbnRpY0luZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1
dGVOYW1lKQotewotICAgIGlmICghYXR0cmlidXRlTmFtZS5lbXB0eSgpKQotICAgIHsKLSAgICAg
ICAgaW50IHNlbWFudGljSW5kZXggPSAwOwotICAgICAgICBmb3IgKEF0dHJpYnV0ZUFycmF5Ojpp
dGVyYXRvciBhdHRyaWJ1dGUgPSBtQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gbUF0
dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
YXR0cmlidXRlLT5uYW1lID09IGF0dHJpYnV0ZU5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHNlbWFudGljSW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi12b2lkIFZlcnRleFNoYWRl
cjo6cGFyc2VBdHRyaWJ1dGVzKCkKLXsKLSAgICBpZiAobUhsc2wpCi0gICAgewotICAgICAgICBj
b25zdCBjaGFyICppbnB1dCA9IHN0cnN0cihtSGxzbCwgIi8vIEF0dHJpYnV0ZXMiKSArIDE0Owot
Ci0gICAgICAgIHdoaWxlKHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgYXR0cmli
dXRlVHlwZVsyNTZdOwotICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVOYW1lWzI1Nl07Ci0KLSAg
ICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3RhdGljICVzIF8lcyIsIGF0
dHJpYnV0ZVR5cGUsIGF0dHJpYnV0ZU5hbWUpOwotCi0gICAgICAgICAgICBpZiAobWF0Y2hlcyAh
PSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBtQXR0cmlidXRlcy5wdXNoX2JhY2soQXR0cmlidXRlKHBhcnNlVHlw
ZShhdHRyaWJ1dGVUeXBlKSwgYXR0cmlidXRlTmFtZSkpOwotCi0gICAgICAgICAgICBpbnB1dCA9
IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUZyYWdtZW50
U2hhZGVyOjpGcmFnbWVudFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBo
YW5kbGUpIDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkKLXsKLX0KLQotRnJhZ21lbnRTaGFkZXI6
On5GcmFnbWVudFNoYWRlcigpCi17Ci19Ci0KLUdMZW51bSBGcmFnbWVudFNoYWRlcjo6Z2V0VHlw
ZSgpCi17Ci0gICAgcmV0dXJuIEdMX0ZSQUdNRU5UX1NIQURFUjsKLX0KLQotdm9pZCBGcmFnbWVu
dFNoYWRlcjo6Y29tcGlsZSgpCi17Ci0gICAgY29tcGlsZVRvSExTTChtRnJhZ21lbnRDb21waWxl
cik7Ci0gICAgcGFyc2VWYXJ5aW5ncygpOwotICAgIHZhcnlpbmdzLnNvcnQoY29tcGFyZVZhcnlp
bmcpOwotfQotfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCShyZXZpc2lvbiA3NDY1OCkKKysrIEFO
R0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU3ICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFNoYWRlci5oOiBEZWZpbmVzIHRoZSBhYnN0cmFj
dCBnbDo6U2hhZGVyIGNsYXNzIGFuZCBpdHMgY29uY3JldGUgZGVyaXZlZAotLy8gY2xhc3NlcyBW
ZXJ0ZXhTaGFkZXIgYW5kIEZyYWdtZW50U2hhZGVyLiBJbXBsZW1lbnRzIEdMIHNoYWRlciBvYmpl
Y3RzIGFuZAotLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2Vj
dGlvbiAyLjEwIHBhZ2UgMjQgYW5kIHNlY3Rpb24KLS8vIDMuOCBwYWdlIDg0LgotCi0jaWZuZGVm
IExJQkdMRVNWMl9TSEFERVJfSF8KLSNkZWZpbmUgTElCR0xFU1YyX1NIQURFUl9IXwotCi0jZGVm
aW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxkM2R4OS5o
PgotI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAibGliR0xF
U3YyL1Jlc291cmNlTWFuYWdlci5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLXN0cnVjdCBWYXJ5aW5n
Ci17Ci0gICAgVmFyeWluZyhHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIGlu
dCBzaXplLCBib29sIGFycmF5KQotICAgICAgICA6IHR5cGUodHlwZSksIG5hbWUobmFtZSksIHNp
emUoc2l6ZSksIGFycmF5KGFycmF5KSwgcmVnKC0xKSwgY29sKC0xKQotICAgIHsKLSAgICB9Ci0K
LSAgICBHTGVudW0gdHlwZTsKLSAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgIGludCBzaXplOyAg
IC8vIE51bWJlciBvZiAndHlwZScgZWxlbWVudHMKLSAgICBib29sIGFycmF5OwotCi0gICAgaW50
IHJlZzsgICAgLy8gRmlyc3QgdmFyeWluZyByZWdpc3RlciwgYXNzaWduZWQgZHVyaW5nIGxpbmsK
LSAgICBpbnQgY29sOyAgICAvLyBGaXJzdCByZWdpc3RlciBlbGVtZW50LCBhc3NpZ25lZCBkdXJp
bmcgbGluawotfTsKLQotdHlwZWRlZiBzdGQ6Omxpc3Q8VmFyeWluZz4gVmFyeWluZ0xpc3Q7Ci0K
LWNsYXNzIFNoYWRlcgotewotICAgIGZyaWVuZCBQcm9ncmFtOwotCi0gIHB1YmxpYzoKLSAgICBT
aGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKLQotICAgIHZp
cnR1YWwgflNoYWRlcigpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpID0gMDsKLSAg
ICBHTHVpbnQgZ2V0SGFuZGxlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGRlbGV0ZVNvdXJjZSgpOwot
ICAgIHZvaWQgc2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0IGNoYXIgKipzdHJpbmcsIGNv
bnN0IEdMaW50ICpsZW5ndGgpOwotICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7Ci0g
ICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFy
ICppbmZvTG9nKTsKLSAgICBpbnQgZ2V0U291cmNlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBn
ZXRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKnNvdXJjZSk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZSgpID0gMDsKLSAgICBib29sIGlzQ29tcGlsZWQo
KTsKLSAgICBjb25zdCBjaGFyICpnZXRITFNMKCk7Ci0KLSAgICB2b2lkIGFkZFJlZigpOwotICAg
IHZvaWQgcmVsZWFzZSgpOwotICAgIHVuc2lnbmVkIGludCBnZXRSZWZDb3VudCgpIGNvbnN0Owot
ICAgIGJvb2wgaXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKLSAgICB2b2lkIGZsYWdGb3JE
ZWxldGlvbigpOwotCi0gICAgc3RhdGljIHZvaWQgcmVsZWFzZUNvbXBpbGVyKCk7Ci0KLSAgcHJv
dGVjdGVkOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXIpOwotCi0gICAgdm9p
ZCBwYXJzZVZhcnlpbmdzKCk7Ci0KLSAgICB2b2lkIGNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGls
ZXIpOwotCi0gICAgc3RhdGljIEdMZW51bSBwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5
cGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNv
bnN0IFZhcnlpbmcgJnkpOwotCi0gICAgY29uc3QgR0x1aW50IG1IYW5kbGU7Ci0gICAgdW5zaWdu
ZWQgaW50IG1SZWZDb3VudDsgICAgIC8vIE51bWJlciBvZiBwcm9ncmFtIG9iamVjdHMgdGhpcyBz
aGFkZXIgaXMgYXR0YWNoZWQgdG8KLSAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgICAgICAgLy8g
RmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzaGFkZXIgY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBs
b25nZXIgaW4gdXNlCi0KLSAgICBjaGFyICptU291cmNlOwotICAgIGNoYXIgKm1IbHNsOwotICAg
IGNoYXIgKm1JbmZvTG9nOwotCi0gICAgVmFyeWluZ0xpc3QgdmFyeWluZ3M7Ci0KLSAgICBib29s
IG1Vc2VzRnJhZ0Nvb3JkOwotICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKLSAgICBib29sIG1V
c2VzUG9pbnRTaXplOwotICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwotCi0gICAgUmVzb3VyY2VN
YW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwotCi0gICAgc3RhdGljIHZvaWQgKm1GcmFnbWVudENv
bXBpbGVyOwotICAgIHN0YXRpYyB2b2lkICptVmVydGV4Q29tcGlsZXI7Ci19OwotCi1zdHJ1Y3Qg
QXR0cmlidXRlCi17Ci0gICAgQXR0cmlidXRlKCkgOiB0eXBlKEdMX05PTkUpLCBuYW1lKCIiKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBBdHRyaWJ1dGUoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lKSA6IHR5cGUodHlwZSksIG5hbWUobmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
R0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLX07Ci0KLXR5cGVkZWYgc3RkOjp2
ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKLQotY2xhc3MgVmVydGV4U2hhZGVyIDog
cHVibGljIFNoYWRlcgotewotICAgIGZyaWVuZCBQcm9ncmFtOwotCi0gIHB1YmxpYzoKLSAgICBW
ZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKLQot
ICAgIH5WZXJ0ZXhTaGFkZXIoKTsKLQotICAgIEdMZW51bSBnZXRUeXBlKCk7Ci0gICAgdm9pZCBj
b21waWxlKCk7Ci0gICAgaW50IGdldFNlbWFudGljSW5kZXgoY29uc3Qgc3RkOjpzdHJpbmcgJmF0
dHJpYnV0ZU5hbWUpOwotCi0gIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFZlcnRleFNoYWRlcik7Ci0KLSAgICB2b2lkIHBhcnNlQXR0cmlidXRlcygpOwotCi0gICAgQXR0
cmlidXRlQXJyYXkgbUF0dHJpYnV0ZXM7Ci19OwotCi1jbGFzcyBGcmFnbWVudFNoYWRlciA6IHB1
YmxpYyBTaGFkZXIKLXsKLSAgcHVibGljOgotICAgIEZyYWdtZW50U2hhZGVyKFJlc291cmNlTWFu
YWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7Ci0KLSAgICB+RnJhZ21lbnRTaGFkZXIoKTsK
LQotICAgIEdMZW51bSBnZXRUeXBlKCk7Ci0gICAgdm9pZCBjb21waWxlKCk7Ci0KLSAgcHJpdmF0
ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhZ21lbnRTaGFkZXIpOwotfTsKLX0K
LQotI2VuZGlmICAgLy8gTElCR0xFU1YyX1NIQURFUl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdM
RVN2Mi9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1
cmUuY3BwCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTgxNyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0vLyBUZXh0dXJlLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0
cyBkZXJpdmVkIGNsYXNzZXMKLS8vIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxl
bWVudHMgR0wgdGV4dHVyZSBvYmplY3RzIGFuZCByZWxhdGVkCi0vLyBmdW5jdGlvbmFsaXR5LiBb
T3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KLQotI2luY2x1ZGUgImxpYkdM
RVN2Mi9UZXh0dXJlLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJjb21t
b24vZGVidWcuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9CbGl0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotCi1UZXh0dXJlOjpJ
bWFnZTo6SW1hZ2UoKQotICA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRpcnR5KGZhbHNlKSwgc3Vy
ZmFjZShOVUxMKSwgZm9ybWF0KEdMX05PTkUpCi17Ci19Ci0KLVRleHR1cmU6OkltYWdlOjp+SW1h
Z2UoKQotewotICBpZiAoc3VyZmFjZSkgc3VyZmFjZS0+UmVsZWFzZSgpOwotfQotCi1UZXh0dXJl
OjpUZXh0dXJlKEdMdWludCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkKLXsKLSAgICBtTWluRmls
dGVyID0gR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOwotICAgIG1NYWdGaWx0ZXIgPSBHTF9MSU5F
QVI7Ci0gICAgbVdyYXBTID0gR0xfUkVQRUFUOwotICAgIG1XcmFwVCA9IEdMX1JFUEVBVDsKLQot
ICAgIG1XaWR0aCA9IDA7Ci0gICAgbUhlaWdodCA9IDA7Ci0KLSAgICBtRGlydHlNZXRhRGF0YSA9
IHRydWU7Ci0gICAgbURpcnR5ID0gdHJ1ZTsKLSAgICBtSXNSZW5kZXJhYmxlID0gZmFsc2U7Ci0g
ICAgbUJhc2VUZXh0dXJlID0gTlVMTDsKLX0KLQotVGV4dHVyZTo6flRleHR1cmUoKQotewotfQot
Ci1CbGl0ICpUZXh0dXJlOjpnZXRCbGl0dGVyKCkKLXsKLSAgICBDb250ZXh0ICpjb250ZXh0ID0g
Z2V0Q29udGV4dCgpOwotICAgIHJldHVybiBjb250ZXh0LT5nZXRCbGl0dGVyKCk7Ci19Ci0KLS8v
IFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVu
dW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcikK
LXsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0g
ICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVT
VDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9O
RUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFS
OgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU1pbkZpbHRlciAhPSBmaWx0ZXIpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbU1pbkZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAg
ICAgICAgICBtRGlydHkgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1
cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIo
R0xlbnVtIGZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNl
IEdMX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1NYWdGaWx0ZXIgIT0gZmlsdGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1NYWdGaWx0ZXIgPSBmaWx0ZXI7Ci0gICAgICAgICAgICAgICAgbURpcnR5ID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5z
IHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0
ZXIpCi1ib29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFwKQotewotICAgIHN3aXRjaCAo
d3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2UgR0xfQ0xBTVBf
VE9fRURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobVdyYXBTICE9IHdyYXApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbVdyYXBTID0gd3JhcDsKLSAgICAgICAgICAgICAgICBtRGlydHkgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBv
biBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJv
b2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCi17Ci0gICAgc3dpdGNoICh3cmFwKQot
ICAgIHsKLSAgICAgIGNhc2UgR0xfUkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdF
OgotICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtV3JhcFQgIT0gd3JhcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtV3Jh
cFQgPSB3cmFwOwotICAgICAgICAgICAgICAgIG1EaXJ0eSA9IHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmU6OmdldE1pbkZp
bHRlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1NaW5GaWx0ZXI7Ci19Ci0KLUdMZW51bSBUZXh0
dXJlOjpnZXRNYWdGaWx0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtTWFnRmlsdGVyOwotfQot
Ci1HTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFMoKSBjb25zdAotewotICAgIHJldHVybiBtV3JhcFM7
Ci19Ci0KLUdMZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1X
cmFwVDsKLX0KLQotR0x1aW50IFRleHR1cmU6OmdldFdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbVdpZHRoOwotfQotCi1HTHVpbnQgVGV4dHVyZTo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbUhlaWdodDsKLX0KLQotLy8gU2VsZWN0cyBhbiBpbnRlcm5hbCBEaXJlY3QzRCA5
IGZvcm1hdCBmb3Igc3RvcmluZyBhbiBJbWFnZQotRDNERk9STUFUIFRleHR1cmU6OnNlbGVjdEZv
cm1hdChHTGVudW0gZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVCB8fAotICAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQpCi0gICAgewotICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7Ci0gICAg
fQotfQotCi1pbnQgVGV4dHVyZTo6aW1hZ2VQaXRjaChjb25zdCBJbWFnZSAmaW1nKSBjb25zdAot
ewotICAgIHJldHVybiBpbWcud2lkdGggKiA0OwotfQotCi0vLyBTdG9yZSB0aGUgcGl4ZWwgcmVj
dGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBp
eGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQKLS8vIGludG8gdGhlIEJHUkE4IHBp
eGVsIHJlY3RhbmdsZSBhdCBvdXRwdXQgd2l0aCBvdXRwdXRQaXRjaCBieXRlcyBpbiBiZXR3ZWVu
IGVhY2ggbGluZS4KLXZvaWQgVGV4dHVyZTo6bG9hZEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0gQ29tcHV0ZVBpdGNoKHdp
ZHRoLCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7Ci0KLSAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICBsb2FkQWxwaGFJbWFnZURh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwot
ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAg
IGxvYWRMdW1pbmFuY2VBbHBoYUltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgbG9hZFJH
QlVCeXRlSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgIGxvYWRS
R0I1NjVJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGxvYWRSR0JB
VUJ5dGVJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgICBsb2Fk
UkdCQTQ0NDRJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgICAgICBs
b2FkUkdCQTU1NTFJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgc3dpdGNoICh0eXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAg
bG9hZEJHUkFJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4
dHVyZTo6bG9hZEFscGhhSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotICAgIAotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
ICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IHNvdXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlOjpsb2FkTHVt
aW5hbmNlSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNl
ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAg
ICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9m
ZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVy
ZTo6bG9hZEx1bWluYW5jZUFscGhhSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0g
PSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIq
eCsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlOjpsb2FkUkdCVUJ5dGVJ
bWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3Vy
Y2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICog
MyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIFRleHR1cmU6OmxvYWRSR0I1NjVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0g
TlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAg
ICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsK
LSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgo
cmdiYSAmIDB4MDAxRikgPDwgMykgfCAoKHJnYmEgJiAweDAwMUYpID4+IDIpOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAmIDB4
MDdFMCkgPj4gOSk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4
MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgM10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmU6Omxv
YWRSR0JBVUJ5dGVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsK
LSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Ci0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gc291cmNlW3ggKiA0ICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0g
PSBzb3VyY2VbeCAqIDQgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJj
ZVt4ICogNCArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3ggKiA0
ICsgM107Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZTo6bG9hZFJHQkE0NDQ0
SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsg
eG9mZnNldCAqIDQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAoKHJn
YmEgJiAweDAwRjApID4+IDQpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2Jh
ICYgMHgwRjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAw
KSA+PiAxMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAwMEYp
IDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
dm9pZCBUZXh0dXJlOjpsb2FkUkdCQTU1NTFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChy
Z2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3QzApID4+IDMpIHwgKChyZ2JhICYgMHgw
N0MwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4Rjgw
MCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIFRleHR1cmU6OmxvYWRCR1JBSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAotewotICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKLSAgICAg
ICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1
cmU6OmNyZWF0ZVN1cmZhY2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEltYWdlICppbWcpCi17Ci0gICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1RleHR1cmUg
PSBOVUxMOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsKLQotICAg
IGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwKQotICAgIHsKLSAgICAgICAgaW50IGxldmVs
VG9GZXRjaCA9IDA7Ci0gICAgICAgIEdMc2l6ZWkgcmVxdWVzdFdpZHRoID0gd2lkdGg7Ci0gICAg
ICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgaWYgKElzQ29tcHJl
c3NlZChmb3JtYXQpICYmICh3aWR0aCAlIDQgIT0gMCB8fCBoZWlnaHQgJSA0ICE9IDApKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBib29sIGlzTXVsdDQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlu
dCB1cHNhbXBsZUNvdW50ID0gMDsKLSAgICAgICAgICAgIHdoaWxlICghaXNNdWx0NCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0V2lkdGggPDw9IDE7Ci0gICAgICAgICAg
ICAgICAgcmVxdWVzdEhlaWdodCA8PD0gMTsKLSAgICAgICAgICAgICAgICB1cHNhbXBsZUNvdW50
Kys7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RXaWR0aCAlIDQgPT0gMCAmJiByZXF1ZXN0
SGVpZ2h0ICUgNCA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
aXNNdWx0NCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbGV2ZWxUb0ZldGNoID0gdXBzYW1wbGVDb3VudDsKLSAgICAgICAgfQotCi0gICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRo
LCByZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBzZWxlY3RGb3JtYXQoZm9y
bWF0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEM0RQT09MX1NZU1RFTU1FTSwgJm5ld1RleHR1cmUsIE5VTEwpOwotCi0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFj
ZSk7Ci0gICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoaW1n
LT5zdXJmYWNlKSBpbWctPnN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICBpbWctPnN1cmZhY2UgPSBu
ZXdTdXJmYWNlOwotCi0gICAgaW1nLT53aWR0aCA9IHdpZHRoOwotICAgIGltZy0+aGVpZ2h0ID0g
aGVpZ2h0OwotICAgIGltZy0+Zm9ybWF0ID0gZm9ybWF0OwotfQotCi12b2lkIFRleHR1cmU6OnNl
dEltYWdlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdl
ICppbWcpCi17Ci0gICAgY3JlYXRlU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltZyk7
Ci0KLSAgICBpZiAocGl4ZWxzICE9IE5VTEwgJiYgaW1nLT5zdXJmYWNlICE9IE5VTEwpCi0gICAg
ewotICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gaW1nLT5zdXJmYWNlLT5Mb2NrUmVjdCgmbG9ja2VkLCBOVUxMLCAwKTsKLQotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7Ci0gICAgICAgICAgICBpbWctPnN1cmZhY2UtPlVubG9ja1JlY3QoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGltZy0+ZGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIG1E
aXJ0eU1ldGFEYXRhID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1h
Z2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpCi17Ci0gICAgY3JlYXRl
U3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltZyk7Ci0KLSAgICBpZiAocGl4ZWxzICE9
IE5VTEwgJiYgaW1nLT5zdXJmYWNlICE9IE5VTEwpCi0gICAgewotICAgICAgICBEM0RMT0NLRURf
UkVDVCBsb2NrZWQ7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJmYWNlLT5Mb2Nr
UmVjdCgmbG9ja2VkLCBOVUxMLCAwKTsKLQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbWVtY3B5KGxvY2tlZC5wQml0cywgcGl4ZWxzLCBpbWFnZVNpemUpOwotICAgICAgICAg
ICAgaW1nLT5zdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbWct
PmRpcnR5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBtRGlydHlNZXRhRGF0YSA9IHRydWU7Ci19Ci0K
LWJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZykKLXsK
LSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1nLT53aWR0aCB8fCBoZWlnaHQgKyB5b2Zmc2V0
ID4gaW1nLT5oZWlnaHQpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tl
ZDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+TG9ja1JlY3QoJmxvY2tlZCwg
TlVMTCwgMCk7Ci0KLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgaWYgKFNV
Q0NFRURFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgbG9hZEltYWdlRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4
ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGltZy0+c3VyZmFjZS0+
VW5sb2NrUmVjdCgpOwotICAgIH0KLQotICAgIGltZy0+ZGlydHkgPSB0cnVlOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmlt
ZykKLXsKLSAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1nLT53aWR0aCB8fCBoZWlnaHQgKyB5
b2Zmc2V0ID4gaW1nLT5oZWlnaHQpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0g
Z2V0Rm9ybWF0KCkpCi0gICAgewotICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBSRUNUIHVwZGF0ZVJlZ2lvbjsK
LSAgICB1cGRhdGVSZWdpb24ubGVmdCA9IHhvZmZzZXQ7Ci0gICAgdXBkYXRlUmVnaW9uLnJpZ2h0
ID0geG9mZnNldCArIHdpZHRoOwotICAgIHVwZGF0ZVJlZ2lvbi5ib3R0b20gPSB5b2Zmc2V0ICsg
aGVpZ2h0OwotICAgIHVwZGF0ZVJlZ2lvbi50b3AgPSB5b2Zmc2V0OwotCi0gICAgRDNETE9DS0VE
X1JFQ1QgbG9ja2VkOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJmYWNlLT5Mb2NrUmVj
dCgmbG9ja2VkLCAmdXBkYXRlUmVnaW9uLCAwKTsKLQotICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7Ci0KLSAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBHTHNp
emVpIGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwot
ICAgICAgICBpbnQgcm93cyA9IGltYWdlU2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgcm93czsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHko
KHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRzICsgaSAqIGxvY2tlZC5QaXRjaCksICh2b2lkKiko
KEJZVEUqKXBpeGVscyArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7Ci0gICAgICAgIH0K
LSAgICAgICAgaW1nLT5zdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgfQotCi0gICAgaW1nLT5k
aXJ0eSA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZTo6Z2V0VGV4dHVyZSgpCi17Ci0gICAgaWYgKCFpc0NvbXBsZXRlKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURpcnR5TWV0YURhdGEp
Ci0gICAgewotICAgICAgICBtQmFzZVRleHR1cmUgPSBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAg
IG1Jc1JlbmRlcmFibGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobURpcnR5TWV0YURhdGEg
fHwgZGlydHlJbWFnZURhdGEoKSkKLSAgICB7Ci0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLSAg
ICB9Ci0KLSAgICBtRGlydHlNZXRhRGF0YSA9IGZhbHNlOwotICAgIEFTU0VSVCghZGlydHlJbWFn
ZURhdGEoKSk7Ci0KLSAgICByZXR1cm4gbUJhc2VUZXh0dXJlOwotfQotCi1ib29sIFRleHR1cmU6
OmlzRGlydHkoKSBjb25zdAotewotICAgIHJldHVybiAobURpcnR5IHx8IG1EaXJ0eU1ldGFEYXRh
IHx8IGRpcnR5SW1hZ2VEYXRhKCkpOwotfQotCi0vLyBSZXR1cm5zIHRoZSB0b3AtbGV2ZWwgdGV4
dHVyZSBzdXJmYWNlIGFzIGEgcmVuZGVyIHRhcmdldAotdm9pZCBUZXh0dXJlOjpuZWVkUmVuZGVy
VGFyZ2V0KCkKLXsKLSAgICBpZiAoIW1Jc1JlbmRlcmFibGUpCi0gICAgewotICAgICAgICBtQmFz
ZVRleHR1cmUgPSBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgbUlzUmVuZGVyYWJs
ZSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGRpcnR5SW1hZ2VEYXRhKCkpCi0gICAgewotICAg
ICAgICB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgfQotCi0gICAgbURpcnR5TWV0YURhdGEgPSBmYWxz
ZTsKLX0KLQotdm9pZCBUZXh0dXJlOjpkcm9wVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1CYXNlVGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIG1CYXNlVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAg
bUlzUmVuZGVyYWJsZSA9IGZhbHNlOwotfQotCi12b2lkIFRleHR1cmU6OnB1c2hUZXh0dXJlKElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqbmV3VGV4dHVyZSwgYm9vbCByZW5kZXJhYmxlKQotewotICAg
IG1CYXNlVGV4dHVyZSA9IG5ld1RleHR1cmU7Ci0gICAgbURpcnR5TWV0YURhdGEgPSBmYWxzZTsK
LSAgICBtSXNSZW5kZXJhYmxlID0gcmVuZGVyYWJsZTsKLSAgICBtRGlydHkgPSB0cnVlOwotfQot
Ci0KLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGludCBtYXhsZXZlbCkgY29uc3QKLXsKLSAgICBpZiAoaXNQb3cyKHdpZHRoKSAm
JiBpc1BvdzIoaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtYXhsZXZlbDsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLy8gT3BlbkdMIEVTIDIuMCB3aXRob3V0IEdMX09F
U190ZXh0dXJlX25wb3QgZG9lcyBub3QgcGVybWl0IE5QT1QgbWlwbWFwcy4KLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgfQotfQotCi1HTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVp
IHNpemUsIEdMaW50IG1heGxldmVsKSBjb25zdAotewotICAgIHJldHVybiBjcmVhdGlvbkxldmVs
cyhzaXplLCBzaXplLCBtYXhsZXZlbCk7Ci19Ci0KLWludCBUZXh0dXJlOjpsZXZlbENvdW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbUJhc2VUZXh0dXJlID8gbUJhc2VUZXh0dXJlLT5HZXRMZXZl
bENvdW50KCkgOiAwOwotfQotCi1UZXh0dXJlMkQ6OlRleHR1cmUyRChHTHVpbnQgaWQpIDogVGV4
dHVyZShpZCkKLXsKLSAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgbUNvbG9yYnVmZmVyUHJveHkg
PSBOVUxMOwotfQotCi1UZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQotewotICAgIGRlbGV0ZSBtQ29s
b3JidWZmZXJQcm94eTsKLQotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci19Ci0KLUdM
ZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRV
UkVfMkQ7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1JbWFnZUFycmF5WzBdLmZvcm1hdDsKLX0KLQotLy8gV2hpbGUgT3BlbkdMIGRvZXNu
J3QgY2hlY2sgdGV4dHVyZSBjb25zaXN0ZW5jeSB1bnRpbCBkcmF3LXRpbWUsIEQzRDkgcmVxdWly
ZXMgYSBjb21wbGV0ZSB0ZXh0dXJlCi0vLyBmb3IgcmVuZGVyLXRvLXRleHR1cmUgKHN1Y2ggYXMg
Q29weVRleEltYWdlKS4gV2UgaGF2ZSBubyB3YXkgb2Yga2VlcGluZyBpbmRpdmlkdWFsIGluY29u
c2lzdGVudCBsZXZlbHMuCi0vLyBDYWxsIHRoaXMgd2hlbiBhIHBhcnRpY3VsYXIgbGV2ZWwgb2Yg
dGhlIHRleHR1cmUgbXVzdCBiZSBkZWZpbmVkIHdpdGggYSBzcGVjaWZpYyBmb3JtYXQsIHdpZHRo
IGFuZCBoZWlnaHQuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBleGlzdGluZyB0ZXh0dXJl
IHdhcyB1bnN1aXRhYmxlIGhhZCB0byBiZSBkZXN0cm95ZWQuIElmIHNvLCBpdCB3aWxsIGFsc28g
c2V0Ci0vLyBhIG5ldyBoZWlnaHQgYW5kIHdpZHRoIGZvciB0aGUgdGV4dHVyZSBieSB3b3JraW5n
IGJhY2t3YXJkcyBmcm9tIHRoZSBnaXZlbiB3aWR0aCBhbmQgaGVpZ2h0LgotYm9vbCBUZXh0dXJl
MkQ6OnJlZGVmaW5lVGV4dHVyZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBib29sIHdpZHRoT2theSA9ICht
V2lkdGggPj4gbGV2ZWwgPT0gd2lkdGgpOwotICAgIGJvb2wgaGVpZ2h0T2theSA9IChtSGVpZ2h0
ID4+IGxldmVsID09IGhlaWdodCk7Ci0KLSAgICBib29sIHNpemVPa2F5ID0gKCh3aWR0aE9rYXkg
JiYgaGVpZ2h0T2theSkKLSAgICAgICAgICAgICAgICAgICAgIHx8ICh3aWR0aE9rYXkgJiYgbUhl
aWdodCA+PiBsZXZlbCA9PSAwICYmIGhlaWdodCA9PSAxKQotICAgICAgICAgICAgICAgICAgICAg
fHwgKGhlaWdodE9rYXkgJiYgbVdpZHRoID4+IGxldmVsID09IDAgJiYgd2lkdGggPT0gMSkpOwot
Ci0gICAgYm9vbCB0ZXh0dXJlT2theSA9IChzaXplT2theSAmJiBpbnRlcm5hbEZvcm1hdCA9PSBt
SW1hZ2VBcnJheVswXS5mb3JtYXQpOwotCi0gICAgaWYgKCF0ZXh0dXJlT2theSkKLSAgICB7Ci0g
ICAgICAgIFRSQUNFKCJSZWRlZmluaW5nIDJEIHRleHR1cmUgKCVkLCAweCUwNFgsICVkLCAlZCA9
PiAweCUwNFgsICVkLCAlZCkuIiwgbGV2ZWwsCi0gICAgICAgICAgICAgIG1JbWFnZUFycmF5WzBd
LmZvcm1hdCwgbVdpZHRoLCBtSGVpZ2h0LAotICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgICAgLy8gUHVyZ2UgYWxsIHRoZSBsZXZlbHMgYW5kIHRo
ZSB0ZXh0dXJlLgotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1RFWFRVUkVfTEVW
RUxTOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5zdXJm
YWNlICE9IE5VTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlb
aV0uZGlydHkgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLnN1cmZh
Y2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5zdXJmYWNlID0g
TlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVGV4dHVyZSAh
PSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgICAgICAgICAgZHJvcFRleHR1cmUoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1XaWR0aCA9IHdpZHRoIDw8IGxldmVsOwotICAgICAgICBtSGVp
Z2h0ID0gaGVpZ2h0IDw8IGxldmVsOwotICAgICAgICBtSW1hZ2VBcnJheVswXS5mb3JtYXQgPSBp
bnRlcm5hbEZvcm1hdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gIXRleHR1cmVPa2F5OwotfQotCi12
b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKLXsKLSAgICBy
ZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLQot
ICAgIFRleHR1cmU6OnNldEltYWdlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOwotfQotCi12b2lkIFRleHR1
cmUyRDo6c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdl
KHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFn
ZUFycmF5W2xldmVsXSk7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpjb21taXRSZWN0KEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkKLXsKLSAgICBBU1NFUlQobUltYWdlQXJyYXlbbGV2ZWxdLnN1cmZhY2UgIT0gTlVM
TCk7Ci0KLSAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgewotICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZGVzdExldmVsID0gTlVMTDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsLCAmZGVzdExldmVsKTsKLQotICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgSW1hZ2UgKmltZyA9ICZtSW1hZ2VBcnJheVts
ZXZlbF07Ci0KLSAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICAgICAgICAgIHNvdXJj
ZVJlY3QubGVmdCA9IHhvZmZzZXQ7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHlvZmZz
ZXQ7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAg
ICAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OwotCi0gICAgICAg
ICAgICBQT0lOVCBkZXN0UG9pbnQ7Ci0gICAgICAgICAgICBkZXN0UG9pbnQueCA9IHhvZmZzZXQ7
Ci0gICAgICAgICAgICBkZXN0UG9pbnQueSA9IHlvZmZzZXQ7Ci0KLSAgICAgICAgICAgIHJlc3Vs
dCA9IGdldERldmljZSgpLT5VcGRhdGVTdXJmYWNlKGltZy0+c3VyZmFjZSwgJnNvdXJjZVJlY3Qs
IGRlc3RMZXZlbCwgJmRlc3RQb2ludCk7Ci0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotCi0gICAgICAgICAgICBkZXN0TGV2ZWwtPlJlbGVhc2UoKTsKLQotICAgICAgICAg
ICAgaW1nLT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1
cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgaWYg
KFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pKQot
ICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2VDb21wcmVzc2Vk
KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQgKnBpeGVscykKLXsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMs
ICZtSW1hZ2VBcnJheVtsZXZlbF0pKQotICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1
cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJT
dG9yYWdlICpzb3VyY2UpCi17Ci0gICAgaWYgKHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJu
YWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpKQotICAgIHsKLSAgICAgICAgY29udmVydFRvUmVuZGVy
VGFyZ2V0KCk7Ci0gICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0dXJlLCB0cnVlKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgbmVlZFJlbmRlclRhcmdldCgpOwotICAgIH0KLQotICAg
IGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQot
ICAgIHsKLSAgICAgICAgUkVDVCBzb3VyY2VSZWN0OwotICAgICAgICBzb3VyY2VSZWN0LmxlZnQg
PSB4OwotICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOwotICAgICAgICBzb3Vy
Y2VSZWN0LnRvcCA9IHk7Ci0gICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsK
LQotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdDsKLSAgICAgICAgSFJFU1VMVCBociA9
IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZkZXN0KTsKLQotICAgICAgICBnZXRC
bGl0dGVyKCktPmZvcm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKSwgc291cmNl
UmVjdCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIGRlc3QpOwotICAgICAgICBkZXN0LT5SZWxlYXNl
KCk7Ci0gICAgfQotCi0gICAgbUltYWdlQXJyYXlbbGV2ZWxdLndpZHRoID0gd2lkdGg7Ci0gICAg
bUltYWdlQXJyYXlbbGV2ZWxdLmhlaWdodCA9IGhlaWdodDsKLSAgICBtSW1hZ2VBcnJheVtsZXZl
bF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpjb3B5U3Vi
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9y
YWdlICpzb3VyY2UpCi17Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xl
dmVsXS53aWR0aCB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLmhlaWdo
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICB9
Ci0KLSAgICBpZiAocmVkZWZpbmVUZXh0dXJlKDAsIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwgbUlt
YWdlQXJyYXlbMF0ud2lkdGgsIG1JbWFnZUFycmF5WzBdLmhlaWdodCkpCi0gICAgewotICAgICAg
ICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUs
IHRydWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0
KCk7Ci0gICAgfQotCi0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgIHsKLSAgICAg
ICAgUkVDVCBzb3VyY2VSZWN0OwotICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OwotICAgICAg
ICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRoOwotICAgICAgICBzb3VyY2VSZWN0LnRvcCA9
IHk7Ci0gICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKLQotICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdDsKLSAgICAgICAgSFJFU1VMVCBociA9IG1UZXh0dXJlLT5H
ZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZkZXN0KTsKLQotICAgICAgICBnZXRCbGl0dGVyKCktPmZv
cm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKSwgc291cmNlUmVjdCwgbUltYWdl
QXJyYXlbMF0uZm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKLSAgICAgICAgZGVzdC0+
UmVsZWFzZSgpOwotICAgIH0KLX0KLQotLy8gVGVzdHMgZm9yIEdMIHRleHR1cmUgb2JqZWN0IGNv
bXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCi1i
b29sIFRleHR1cmUyRDo6aXNDb21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgR0xzaXplaSB3aWR0aCA9
IG1JbWFnZUFycmF5WzBdLndpZHRoOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlb
MF0uaGVpZ2h0OwotCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBtaXBtYXBwaW5nID0gZmFs
c2U7Ci0KLSAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9ORUFS
RVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1pcG1hcHBpbmcgPSBmYWxzZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0g
ICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVT
VF9NSVBNQVBfTElORUFSOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAg
ICAgICAgbWlwbWFwcGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmICgoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9U
T19FREdFICYmICFpc1BvdzIod2lkdGgpKQotICAgICAgICB8fCAoZ2V0V3JhcFQoKSAhPSBHTF9D
TEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1pcG1hcHBpbmcpCi0gICAgewotICAgICAgICBpZiAo
IWlzUG93Mih3aWR0aCkgfHwgIWlzUG93MihoZWlnaHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgcSA9IGxvZzIoc3RkOjpt
YXgod2lkdGgsIGhlaWdodCkpOwotCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwg
PD0gcTsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xl
dmVsXS5mb3JtYXQgIT0gbUltYWdlQXJyYXlbMF0uZm9ybWF0KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2xldmVsXS53aWR0aCAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZl
bCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLmhlaWdodCAhPSBz
dGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2VkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEZvcm1hdCgpKTsKLX0KLQotLy8gQ29uc3Ry
dWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdl
cywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4
dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVy
ZTsKLQotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgIEQz
REZPUk1BVCBmb3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF0uZm9ybWF0KTsKLQot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKG1XaWR0aCwgbUhlaWdo
dCwgY3JlYXRpb25MZXZlbHMobVdpZHRoLCBtSGVpZ2h0LCAwKSwgMCwgZm9ybWF0LCBEM0RQT09M
X0RFRkFVTFQsICZ0ZXh0dXJlLCBOVUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwg
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAgaWYg
KG1UZXh0dXJlKSBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIG1UZXh0dXJlID0gdGV4dHVyZTsK
LSAgICByZXR1cm4gdGV4dHVyZTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OnVwZGF0ZVRleHR1cmUo
KQotewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotCi0gICAg
aW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgewotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2
ZWxdLmRpcnR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbGV2
ZWxTdXJmYWNlID0gTlVMTDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUt
PkdldFN1cmZhY2VMZXZlbChsZXZlbCwgJmxldmVsU3VyZmFjZSk7Ci0KLSAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlVw
ZGF0ZVN1cmZhY2UobUltYWdlQXJyYXlbbGV2ZWxdLnN1cmZhY2UsIE5VTEwsIGxldmVsU3VyZmFj
ZSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQot
ICAgICAgICAgICAgICAgIGxldmVsU3VyZmFjZS0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLmRpcnR5ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLUlEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZTJEOjpjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKQotewotICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlID0g
TlVMTDsKLQotICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCi0gICAgewotICAg
ICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7Ci0gICAgICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgICAgICBEM0RGT1JNQVQgZm9y
bWF0ID0gc2VsZWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdLmZvcm1hdCk7Ci0KLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUobVdpZHRoLCBtSGVpZ2h0LCBjcmVh
dGlvbkxldmVscyhtV2lkdGgsIG1IZWlnaHQsIDApLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIGZv
cm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLSAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1
cmU5KilOVUxMKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtVGV4dHVyZSAhPSBOVUxMKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7IGkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlOwotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoaSwgJnNvdXJjZSk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8
IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0OwotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChpLCAmZGVzdCk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOwot
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURp
cmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRl
dmljZS0+U3RyZXRjaFJlY3Qoc291cmNlLCBOVUxMLCBkZXN0LCBOVUxMLCBEM0RURVhGX05PTkUp
OwotCi0gICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPlJlbGVh
c2UoKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOwotCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRl
eHR1cmU5KilOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzb3Vy
Y2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVRleHR1cmUgIT0gTlVMTCkKLSAg
ICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgbVRleHR1cmUg
PSB0ZXh0dXJlOwotICAgIHJldHVybiBtVGV4dHVyZTsKLX0KLQotYm9vbCBUZXh0dXJlMkQ6OmRp
cnR5SW1hZ2VEYXRhKCkgY29uc3QKLXsKLSAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgobVdpZHRo
LCBtSGVpZ2h0KSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8PSBxOyBpKyspCi0gICAgewot
ICAgICAgICBpZiAobUltYWdlQXJyYXlbaV0uZGlydHkpIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBUZXh0dXJlMkQ6OmdlbmVyYXRlTWlwbWFwcygp
Ci17Ci0gICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF0ud2lkdGgpIHx8ICFpc1BvdzIobUlt
YWdlQXJyYXlbMF0uaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhy
b3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBs
ZXZlbHMuCi0gICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KG1XaWR0aCwgbUhlaWdo
dCkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGlmIChtSW1hZ2VBcnJheVtpXS5zdXJmYWNlICE9IE5VTEwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1JbWFnZUFycmF5W2ldLnN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAg
IG1JbWFnZUFycmF5W2ldLnN1cmZhY2UgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgbUlt
YWdlQXJyYXlbaV0uZGlydHkgPSBmYWxzZTsKLQotICAgICAgICBtSW1hZ2VBcnJheVtpXS5mb3Jt
YXQgPSBtSW1hZ2VBcnJheVswXS5mb3JtYXQ7Ci0gICAgICAgIG1JbWFnZUFycmF5W2ldLndpZHRo
ID0gc3RkOjptYXgobUltYWdlQXJyYXlbMF0ud2lkdGggPj4gaSwgMSk7Ci0gICAgICAgIG1JbWFn
ZUFycmF5W2ldLmhlaWdodCA9IHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmhlaWdodCA+PiBpLCAx
KTsKLSAgICB9Ci0KLSAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMTsgaSA8PSBxOyBpKyspCi0gICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqdXBwZXIgPSBOVUxMOwotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBOVUxM
OwotCi0gICAgICAgIG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoaS0xLCAmdXBwZXIpOwotICAg
ICAgICBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGksICZsb3dlcik7Ci0KLSAgICAgICAgaWYg
KHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAg
Z2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAgICAgICBpZiAobG93
ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLVJlbmRlcmJ1ZmZlciAq
VGV4dHVyZTJEOjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQotewotICAgIGlmICh0YXJn
ZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KLQotICAgIGlmICht
Q29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJv
eHkgPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSh0
aGlzLCB0YXJnZXQpKTsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHktPmFkZFJlZigpOwotICAg
IH0KLQotICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKLX0KLQotSURpcmVjdDNEU3VyZmFj
ZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgQVNT
RVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKLQotICAgIG5lZWRSZW5kZXJUYXJnZXQoKTsK
LQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIG1UZXh0
dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnJlbmRlclRhcmdldCk7Ci0KLSAgICByZXR1cm4gcmVu
ZGVyVGFyZ2V0OwotfQotCi1UZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAoR0x1aW50IGlk
KSA6IFRleHR1cmUoaWQpCi17Ci0gICAgbVRleHR1cmUgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxM
OwotICAgIH0KLX0KLQotVGV4dHVyZUN1YmVNYXA6On5UZXh0dXJlQ3ViZU1hcCgpCi17Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBkZWxldGUgbUZhY2VQ
cm94aWVzW2ldOwotICAgIH0KLQotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1U
ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci19Ci0K
LUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
R0xfVEVYVFVSRV9DVUJFX01BUDsKLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRGb3Jt
YXQoKSBjb25zdAotewotICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQ7Ci19Ci0K
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KQotewotICAgIHNldEltYWdlKDAsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4
dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAg
IHNldEltYWdlKDEsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHNldEltYWdl
KDIsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1
bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldElt
YWdlTmVnWShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHNldEltYWdlKDMsIGxldmVs
LCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGln
bm1lbnQsIHBpeGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIHNldEltYWdlKDQsIGxldmVsLCBpbnRlcm5h
bEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBp
eGVscyk7Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQotewotICAgIHNldEltYWdlKDUsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci19
Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZShHTGVudW0gZmFjZSwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAg
cmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgpOwotCi0gICAgVGV4
dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBp
bWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsK
LX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChHTGVudW0gZmFjZVRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQotewotICAgIGludCBmYWNlID0gZmFjZUluZGV4KGZhY2VUYXJnZXQp
OwotCi0gICAgQVNTRVJUKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5zdXJmYWNlICE9IE5VTEwp
OwotCi0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQotICAgIHsKLSAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRlc3RMZXZlbCA9IGdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsKTsK
LSAgICAgICAgQVNTRVJUKGRlc3RMZXZlbCAhPSBOVUxMKTsKLQotICAgICAgICBpZiAoZGVzdExl
dmVsICE9IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEltYWdlICppbWcgPSAmbUltYWdl
QXJyYXlbZmFjZV1bbGV2ZWxdOwotCi0gICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAg
ICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4b2Zmc2V0OwotICAgICAgICAgICAgc291cmNlUmVj
dC50b3AgPSB5b2Zmc2V0OwotICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHhvZmZzZXQg
KyB3aWR0aDsKLSAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geW9mZnNldCArIGhlaWdo
dDsKLQotICAgICAgICAgICAgUE9JTlQgZGVzdFBvaW50OwotICAgICAgICAgICAgZGVzdFBvaW50
LnggPSB4b2Zmc2V0OwotICAgICAgICAgICAgZGVzdFBvaW50LnkgPSB5b2Zmc2V0OwotCi0gICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5VcGRhdGVTdXJmYWNlKGltZy0+
c3VyZmFjZSwgJnNvdXJjZVJlY3QsIGRlc3RMZXZlbCwgJmRlc3RQb2ludCk7Ci0gICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBkZXN0TGV2ZWwtPlJl
bGVhc2UoKTsKLQotICAgICAgICAgICAgaW1nLT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gZmFjZSwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCi17Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdl
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSkpCi0g
ICAgewotICAgICAgICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdl
Q29tcHJlc3NlZChHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQotewotICAgIGlmIChUZXh0dXJl
OjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2
ZWxdKSkKLSAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotLy8gVGVzdHMgZm9yIEdMIHRleHR1
cmUgb2JqZWN0IGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEw
IHBhZ2UgODEuCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXBsZXRlKCkgY29uc3QKLXsKLSAg
ICBpbnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLndpZHRoOwotCi0gICAgaWYgKHNpemUgPD0g
MCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIG1pcG1h
cHBpbmc7Ci0KLSAgICBzd2l0Y2ggKG1NaW5GaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBHTF9O
RUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1pcG1hcHBpbmcgPSBmYWxz
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6
Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVB
UkVTVF9NSVBNQVBfTElORUFSOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoK
LSAgICAgICAgbWlwbWFwcGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8
IDY7IGZhY2UrKykKLSAgICB7Ci0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVswXS53aWR0
aCAhPSBzaXplIHx8IG1JbWFnZUFycmF5W2ZhY2VdWzBdLmhlaWdodCAhPSBzaXplKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAobWlwbWFwcGluZykKLSAgICB7Ci0gICAgICAgIGlmICghaXNQb3cyKHNpemUpICYmIChnZXRX
cmFwUygpICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgZ2V0V3JhcFQoKSAhPSBHTF9DTEFNUF9UT19F
REdFKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaW50IHEgPSBsb2cyKHNpemUpOwotCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAw
OyBmYWNlIDwgNjsgZmFjZSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBsZXZl
bCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS5mb3JtYXQgIT0gbUltYWdlQXJyYXlbMF1b
MF0uZm9ybWF0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChtSW1hZ2VB
cnJheVtmYWNlXVtsZXZlbF0ud2lkdGggIT0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZlbCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1JbWFnZUFycmF5W2ZhY2Vd
W2xldmVsXS5oZWlnaHQgPT0gbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLndpZHRoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFRleHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQoKSBjb25zdAotewotICAgIHJldHVybiBJc0Nv
bXByZXNzZWQoZ2V0Rm9ybWF0KCkpOwotfQotCi0vLyBDb25zdHJ1Y3RzIGEgRGlyZWN0M0QgOSB0
ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzLCBvciByZXR1cm5zIGFuIGV4
aXN0aW5nIG9uZQotSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Y3JlYXRl
VGV4dHVyZSgpCi17Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IHNlbGVjdEZvcm1hdChtSW1hZ2VBcnJheVswXVswXS5m
b3JtYXQpOwotCi0gICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICp0ZXh0dXJlOwotCi0gICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKG1XaWR0aCwgY3JlYXRpb25M
ZXZlbHMobVdpZHRoLCAwKSwgMCwgZm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZ0ZXh0dXJlLCBO
VUxMKTsKLQotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpOwotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJh
c2VUZXh0dXJlOSopTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKG1UZXh0dXJlKSBtVGV4dHVyZS0+
UmVsZWFzZSgpOwotCi0gICAgbVRleHR1cmUgPSB0ZXh0dXJlOwotICAgIHJldHVybiBtVGV4dHVy
ZTsKLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6dXBkYXRlVGV4dHVyZSgpCi17Ci0gICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0KLSAgICBmb3IgKGludCBmYWNl
ID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZl
bENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxl
dmVsKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEltYWdlICppbWcgPSAmbUltYWdlQXJyYXlb
ZmFjZV1bbGV2ZWxdOwotCi0gICAgICAgICAgICBpZiAoaW1nLT5kaXJ0eSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbGV2ZWxTdXJmYWNlID0gZ2V0
Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwpOwotICAgICAgICAgICAgICAgIEFTU0VSVChsZXZl
bFN1cmZhY2UgIT0gTlVMTCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobGV2ZWxTdXJmYWNlICE9
IE5VTEwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShpbWctPnN1cmZhY2UsIE5VTEwsIGxldmVsU3Vy
ZmFjZSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbGV2ZWxTdXJmYWNlLT5SZWxlYXNlKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaW1nLT5kaXJ0eSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotSURpcmVjdDNEQmFzZVRleHR1
cmU5ICpUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKLXsKLSAgICBJRGly
ZWN0M0RDdWJlVGV4dHVyZTkgKnRleHR1cmUgPSBOVUxMOwotCi0gICAgaWYgKG1XaWR0aCAhPSAw
KQotICAgIHsKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOwot
ICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLSAgICAgICAg
RDNERk9STUFUIGZvcm1hdCA9IHNlbGVjdEZvcm1hdChtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQp
OwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZSht
V2lkdGgsIGNyZWF0aW9uTGV2ZWxzKG1XaWR0aCwgMCksIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwg
Zm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZ0ZXh0dXJlLCBOVUxMKTsKLQotICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJRGlyZWN0M0RCYXNlVGV4
dHVyZTkqKU5VTEwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1UZXh0dXJlICE9IE5VTEwp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0gICAg
ICAgICAgICBmb3IgKGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZTsKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbVRleHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKHN0
YXRpY19jYXN0PEQzRENVQkVNQVBfRkFDRVM+KGYpLCBpLCAmc291cmNlKTsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEQmFzZVRleHR1cmU5KilOVUxMKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpkZXN0OwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXh0dXJlLT5HZXRD
dWJlTWFwU3VyZmFjZShzdGF0aWNfY2FzdDxEM0RDVUJFTUFQX0ZBQ0VTPihmKSwgaSwgJmRlc3Qp
OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZS0+UmVsZWFzZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzREJhc2VUZXh0dXJlOSopTlVMTCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkaXNwbGF5LT5l
bmRTY2VuZSgpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hS
ZWN0KHNvdXJjZSwgTlVMTCwgZGVzdCwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Ut
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChJ
RGlyZWN0M0RCYXNlVGV4dHVyZTkqKU5VTEwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KG1UZXh0dXJlICE9IE5VTEwpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwot
ICAgIH0KLQotICAgIG1UZXh0dXJlID0gdGV4dHVyZTsKLSAgICByZXR1cm4gbVRleHR1cmU7Ci19
Ci0KLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKGludCBmYWNlLCBHTGludCBsZXZlbCwg
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKQotewotICAgIHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQs
IHdpZHRoKTsKLQotICAgIFRleHR1cmU6OnNldEltYWdlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0p
OwotfQotCi11bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChHTGVudW0gZmFj
ZSkKLXsKLSAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggLSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMSk7Ci0gICAgTUVUQV9BU1NFUlQoR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YID09IDIpOwotICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WSAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAzKTsKLSAgICBNRVRBX0FTU0VS
VChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggPT0gNCk7Ci0gICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDUpOwotCi0gICAgcmV0
dXJuIGZhY2UgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7Ci19Ci0KLWJvb2wgVGV4
dHVyZUN1YmVNYXA6OmRpcnR5SW1hZ2VEYXRhKCkgY29uc3QKLXsKLSAgICBpbnQgcSA9IGxvZzIo
bVdpZHRoKTsKLQotICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQotICAgIHsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gcTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobUltYWdlQXJyYXlbZl1baV0uZGlydHkpIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBXaGlsZSBPcGVuR0wgZG9lc24ndCBjaGVj
ayB0ZXh0dXJlIGNvbnNpc3RlbmN5IHVudGlsIGRyYXctdGltZSwgRDNEOSByZXF1aXJlcyBhIGNv
bXBsZXRlIHRleHR1cmUKLS8vIGZvciByZW5kZXItdG8tdGV4dHVyZSAoc3VjaCBhcyBDb3B5VGV4
SW1hZ2UpLiBXZSBoYXZlIG5vIHdheSBvZiBrZWVwaW5nIGluZGl2aWR1YWwgaW5jb25zaXN0ZW50
IGxldmVscyAmIGZhY2VzLgotLy8gQ2FsbCB0aGlzIHdoZW4gYSBwYXJ0aWN1bGFyIGxldmVsIG9m
IHRoZSB0ZXh0dXJlIG11c3QgYmUgZGVmaW5lZCB3aXRoIGEgc3BlY2lmaWMgZm9ybWF0LCB3aWR0
aCBhbmQgaGVpZ2h0LgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXhpc3RpbmcgdGV4dHVy
ZSB3YXMgdW5zdWl0YWJsZSBoYWQgdG8gYmUgZGVzdHJveWVkLiBJZiBzbywgaXQgd2lsbCBhbHNv
IHNldAotLy8gYSBuZXcgc2l6ZSBmb3IgdGhlIHRleHR1cmUgYnkgd29ya2luZyBiYWNrd2FyZHMg
ZnJvbSB0aGUgZ2l2ZW4gc2l6ZS4KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lVGV4dHVy
ZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoKQotewot
ICAgIC8vIEFyZSB0aGVzZSBzZXR0aW5ncyBjb21wYXRpYmxlIHdpdGggbGV2ZWwgMD8KLSAgICBi
b29sIHNpemVPa2F5ID0gKG1JbWFnZUFycmF5WzBdWzBdLndpZHRoID4+IGxldmVsID09IHdpZHRo
KTsKLQotICAgIGJvb2wgdGV4dHVyZU9rYXkgPSAoc2l6ZU9rYXkgJiYgaW50ZXJuYWxGb3JtYXQg
PT0gbUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0KTsKLQotICAgIGlmICghdGV4dHVyZU9rYXkpCi0g
ICAgewotICAgICAgICBUUkFDRSgiUmVkZWZpbmluZyBjdWJlIHRleHR1cmUgKCVkLCAweCUwNFgs
ICVkID0+IDB4JTA0WCwgJWQpLiIsIGxldmVsLAotICAgICAgICAgICAgICBtSW1hZ2VBcnJheVsw
XVswXS5mb3JtYXQsIG1JbWFnZUFycmF5WzBdWzBdLndpZHRoLAotICAgICAgICAgICAgICBpbnRl
cm5hbEZvcm1hdCwgd2lkdGgpOwotCi0gICAgICAgIC8vIFB1cmdlIGFsbCB0aGUgbGV2ZWxzIGFu
ZCB0aGUgdGV4dHVyZS4KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVEVYVFVSRV9M
RVZFTFM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2
OyBmKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2Zd
W2ldLnN1cmZhY2UgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2ZdW2ldLmRpcnR5ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgbUltYWdlQXJyYXlbZl1baV0uc3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAg
ICAgICBtSW1hZ2VBcnJheVtmXVtpXS5zdXJmYWNlID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVRleHR1cmUgIT0gTlVM
TCkKLSAgICAgICAgewotICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAg
ICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICAgICAgICAgIGRyb3BUZXh0dXJlKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtV2lkdGggPSB3aWR0aCA8PCBsZXZlbDsKLSAgICAgICAgbUltYWdlQXJy
YXlbMF1bMF0ud2lkdGggPSB3aWR0aCA8PCBsZXZlbDsKLSAgICAgICAgbUhlaWdodCA9IHdpZHRo
IDw8IGxldmVsOwotICAgICAgICBtSW1hZ2VBcnJheVswXVswXS5oZWlnaHQgPSB3aWR0aCA8PCBs
ZXZlbDsKLQotICAgICAgICBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQgPSBpbnRlcm5hbEZvcm1h
dDsKLSAgICB9Ci0KLSAgICByZXR1cm4gIXRleHR1cmVPa2F5OwotfQotCi12b2lkIFRleHR1cmVD
dWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpCi17Ci0gICAgdW5zaWduZWQgaW50IGZhY2Vp
bmRleCA9IGZhY2VJbmRleChmYWNlKTsKLQotICAgIGlmIChyZWRlZmluZVRleHR1cmUobGV2ZWws
IGludGVybmFsRm9ybWF0LCB3aWR0aCkpCi0gICAgewotICAgICAgICBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsKLSAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOwotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7Ci0gICAgfQotCi0gICAg
QVNTRVJUKHdpZHRoID09IGhlaWdodCk7Ci0KLSAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwg
bGV2ZWxDb3VudCgpKQotICAgIHsKLSAgICAgICAgUkVDVCBzb3VyY2VSZWN0OwotICAgICAgICBz
b3VyY2VSZWN0LmxlZnQgPSB4OwotICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdpZHRo
OwotICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7Ci0gICAgICAgIHNvdXJjZVJlY3QuYm90dG9t
ID0geSArIGhlaWdodDsKLQotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IGdldEN1
YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsKTsKLQotICAgICAgICBnZXRCbGl0dGVyKCktPmZvcm1h
dENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKSwgc291cmNlUmVjdCwgaW50ZXJuYWxG
b3JtYXQsIDAsIDAsIGRlc3QpOwotICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Ci0gICAgfQotCi0g
ICAgbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0ud2lkdGggPSB3aWR0aDsKLSAgICBtSW1h
Z2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgbUltYWdlQXJy
YXlbZmFjZWluZGV4XVtsZXZlbF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7Ci19Ci0KLUlEaXJl
Y3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0Q3ViZU1hcFN1cmZhY2UodW5zaWduZWQg
aW50IGZhY2VJZGVudGlmaWVyLCB1bnNpZ25lZCBpbnQgbGV2ZWwpCi17Ci0gICAgdW5zaWduZWQg
aW50IGZhY2VJbmRleDsKLQotICAgIGlmIChmYWNlSWRlbnRpZmllciA8IDYpCi0gICAgewotICAg
ICAgICBmYWNlSW5kZXggPSBmYWNlSWRlbnRpZmllcjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZmFj
ZUlkZW50aWZpZXIgPj0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYmIGZhY2VJZGVu
dGlmaWVyIDw9IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWikKLSAgICB7Ci0gICAgICAg
IGZhY2VJbmRleCA9IGZhY2VJZGVudGlmaWVyIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICBmYWNlSW5kZXggPSAwOwotICAgIH0KLQotICAgIGlmIChtVGV4dHVyZSA9PSBOVUxMKQot
ICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAg
fQotCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwotCi0gICAgSFJFU1VM
VCBociA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShzdGF0aWNfY2FzdDxEM0RDVUJFTUFQ
X0ZBQ0VTPihmYWNlSW5kZXgpLCBsZXZlbCwgJnN1cmZhY2UpOwotCi0gICAgcmV0dXJuIChTVUND
RUVERUQoaHIpKSA/IHN1cmZhY2UgOiBOVUxMOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpj
b3B5U3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNlKQotewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1J
bWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdLndpZHRoOwotCi0gICAgaWYgKHhvZmZz
ZXQgKyB3aWR0aCA+IHNpemUgfHwgeW9mZnNldCArIGhlaWdodCA+IHNpemUpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgfQotCi0gICAgaWYgKHJl
ZGVmaW5lVGV4dHVyZSgwLCBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQsIG1JbWFnZUFycmF5WzBd
WzBdLndpZHRoKSkKLSAgICB7Ci0gICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAg
ICAgICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIG5lZWRSZW5kZXJUYXJnZXQoKTsKLSAgICB9Ci0KLSAgICBpZiAobGV2ZWwgPCBs
ZXZlbENvdW50KCkpCi0gICAgewotICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAgICAgIHNv
dXJjZVJlY3QubGVmdCA9IHg7Ci0gICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7
Ci0gICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKLSAgICAgICAgc291cmNlUmVjdC5ib3R0b20g
PSB5ICsgaGVpZ2h0OwotCi0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gZ2V0Q3Vi
ZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwpOwotCi0gICAgICAgIGdldEJsaXR0ZXIoKS0+Zm9ybWF0
Q29udmVydChzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpLCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJh
eVswXVswXS5mb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwotICAgICAgICBkZXN0LT5S
ZWxlYXNlKCk7Ci0gICAgfQotfQotCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc0N1YmVDb21wbGV0
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLndpZHRoID09IDApCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
ZiA9IDE7IGYgPCA2OyBmKyspCi0gICAgewotICAgICAgICBpZiAobUltYWdlQXJyYXlbZl1bMF0u
d2lkdGggIT0gbUltYWdlQXJyYXlbMF1bMF0ud2lkdGgKLSAgICAgICAgICAgIHx8IG1JbWFnZUFy
cmF5W2ZdWzBdLmZvcm1hdCAhPSBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQotewot
ICAgIGlmICghaXNQb3cyKG1JbWFnZUFycmF5WzBdWzBdLndpZHRoKSB8fCAhaXNDdWJlQ29tcGxl
dGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgfQotCi0gICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNl
dCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCi0gICAgdW5z
aWduZWQgaW50IHEgPSBsb2cyKG1JbWFnZUFycmF5WzBdWzBdLndpZHRoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1J
bWFnZUFycmF5W2ZdW2ldLnN1cmZhY2UgIT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5zdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAg
ICAgICAgbUltYWdlQXJyYXlbZl1baV0uc3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLmRpcnR5ID0gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2ZdW2ldLmZvcm1hdCA9IG1JbWFnZUFycmF5W2ZdWzBdLmZvcm1hdDsK
LSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLndpZHRoID0gc3RkOjptYXgobUltYWdlQXJy
YXlbZl1bMF0ud2lkdGggPj4gaSwgMSk7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS5o
ZWlnaHQgPSBtSW1hZ2VBcnJheVtmXVtpXS53aWR0aDsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IG5lZWRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwg
NjsgZisrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBn
ZXRDdWJlTWFwU3VyZmFjZShmLCBpLTEpOwotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkg
Kmxvd2VyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoZiwgaSk7Ci0KLSAgICAgICAgICAgIGlmICh1cHBl
ciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAg
ICAgICAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotUmVuZGVyYnVmZmVyICpUZXh0dXJlQ3ViZU1hcDo6Z2V0Q29sb3JidWZmZXIo
R0xlbnVtIHRhcmdldCkKLXsKLSAgICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJl
bmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBmYWNlID0gZmFj
ZUluZGV4KHRhcmdldCk7Ci0KLSAgICBpZiAobUZhY2VQcm94aWVzW2ZhY2VdID09IE5VTEwpCi0g
ICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCks
IG5ldyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSh0aGlzLCB0YXJnZXQpKTsKLSAgICAgICAgbUZh
Y2VQcm94aWVzW2ZhY2VdLT5hZGRSZWYoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbUZhY2VQcm94
aWVzW2ZhY2VdOwotfQotCi1JRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZUN1YmVNYXA6OmdldFJl
bmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQotewotICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KHRhcmdldCkpOwotCi0gICAgbmVlZFJlbmRlclRhcmdldCgpOwotCi0gICAgSURpcmVj
dDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgbVRleHR1cmUtPkdldEN1YmVN
YXBTdXJmYWNlKHN0YXRpY19jYXN0PEQzRENVQkVNQVBfRkFDRVM+KGZhY2VJbmRleCh0YXJnZXQp
KSwgMCwgJnJlbmRlclRhcmdldCk7Ci0KLSAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwotfQotCi1U
ZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHko
VGV4dHVyZSAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkKLSAgOiBDb2xvcmJ1ZmZlcihOVUxMKSwg
bVRleHR1cmUodGV4dHVyZSksIG1UYXJnZXQodGFyZ2V0KQotewotICAgIEFTU0VSVCh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCB8fCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwotfQot
Ci12b2lkIFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjphZGRSZWYoKSBjb25zdAot
ewotICAgIG1UZXh0dXJlLT5hZGRSZWYoKTsKLX0KLQotdm9pZCBUZXh0dXJlOjpUZXh0dXJlQ29s
b3JidWZmZXJQcm94eTo6cmVsZWFzZSgpIGNvbnN0Ci17Ci0gICAgbVRleHR1cmUtPnJlbGVhc2Uo
KTsKLX0KLQotSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclBy
b3h5OjpnZXRSZW5kZXJUYXJnZXQoKQotewotICAgIGlmIChtUmVuZGVyVGFyZ2V0KSBtUmVuZGVy
VGFyZ2V0LT5SZWxlYXNlKCk7Ci0KLSAgICBtUmVuZGVyVGFyZ2V0ID0gbVRleHR1cmUtPmdldFJl
bmRlclRhcmdldChtVGFyZ2V0KTsKLQotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotfQotCi1p
bnQgVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldFdpZHRoKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbVRleHR1cmUtPmdldFdpZHRoKCk7Ci19Ci0KLWludCBUZXh0dXJlOjpUZXh0
dXJlQ29sb3JidWZmZXJQcm94eTo6Z2V0SGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbVRl
eHR1cmUtPmdldEhlaWdodCgpOwotfQotCi1HTGVudW0gVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVm
ZmVyUHJveHk6OmdldEZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRG
b3JtYXQoKTsKLX0KLQotfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHJldmlzaW9uIDc0NjU4
KQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjgzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIFRleHR1cmUuaDogRGVmaW5lcyB0
aGUgYWJzdHJhY3QgZ2w6OlRleHR1cmUgY2xhc3MgYW5kIGl0cyBjb25jcmV0ZSBkZXJpdmVkCi0v
LyBjbGFzc2VzIFRleHR1cmUyRCBhbmQgVGV4dHVyZUN1YmVNYXAuIEltcGxlbWVudHMgR0wgdGV4
dHVyZSBvYmplY3RzIGFuZAotLy8gcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIu
MC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA2My4KLQotI2lmbmRlZiBMSUJHTEVTVjJfVEVYVFVSRV9I
XwotI2RlZmluZSBMSUJHTEVTVjJfVEVYVFVSRV9IXwotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0j
ZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxkM2Q5
Lmg+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi1uYW1lc3Bh
Y2UgZ2wKLXsKLWNsYXNzIEJsaXQ7Ci0KLWVudW0KLXsKLSAgICBNQVhfVEVYVFVSRV9TSVpFID0g
MjA0OCwKLSAgICBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID0gMjA0OCwKLQotICAgIE1BWF9U
RVhUVVJFX0xFVkVMUyA9IDEyICAgLy8gMStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKLX07Ci0K
LWNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKLXsKLSAgcHVibGljOgotICAg
IGV4cGxpY2l0IFRleHR1cmUoR0x1aW50IGlkKTsKLQotICAgIHZpcnR1YWwgflRleHR1cmUoKTsK
LQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0ID0gMDsKLQotICAgIGJvb2wg
c2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0TWFnRmlsdGVyKEdMZW51
bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0V3JhcFMoR0xlbnVtIHdyYXApOwotICAgIGJvb2wgc2V0
V3JhcFQoR0xlbnVtIHdyYXApOwotCi0gICAgR0xlbnVtIGdldE1pbkZpbHRlcigpIGNvbnN0Owot
ICAgIEdMZW51bSBnZXRNYWdGaWx0ZXIoKSBjb25zdDsKLSAgICBHTGVudW0gZ2V0V3JhcFMoKSBj
b25zdDsKLSAgICBHTGVudW0gZ2V0V3JhcFQoKSBjb25zdDsKLQotICAgIEdMdWludCBnZXRXaWR0
aCgpIGNvbnN0OwotICAgIEdMdWludCBnZXRIZWlnaHQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
R0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wbGV0
ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3QgPSAw
OwotCi0gICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7Ci0gICAgdmlydHVh
bCBSZW5kZXJidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7Ci0KLSAgICBib29sIGlzRGlydHko
KSBjb25zdDsKLQotICAgIHN0YXRpYyBjb25zdCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lE
ID0gc3RhdGljX2Nhc3Q8R0x1aW50PigtMSk7IC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQg
YXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5l
dmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4KLQotICBwcm90ZWN0ZWQ6
Ci0gICAgY2xhc3MgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHk7Ci0gICAgZnJpZW5kIGNsYXNzIFRl
eHR1cmVDb2xvcmJ1ZmZlclByb3h5OwotICAgIGNsYXNzIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5
IDogcHVibGljIENvbG9yYnVmZmVyCi0gICAgewotICAgICAgcHVibGljOgotICAgICAgICBUZXh0
dXJlQ29sb3JidWZmZXJQcm94eShUZXh0dXJlICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKLSAg
ICAgICAgICAgIC8vIHRhcmdldCBpcyBhIDJELWxpa2UgdGV4dHVyZSB0YXJnZXQgKEdMX1RFWFRV
UkVfMkQgb3Igb25lIG9mIHRoZSBjdWJlIGZhY2UgdGFyZ2V0cykKLQotICAgICAgICB2aXJ0dWFs
IHZvaWQgYWRkUmVmKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlKCkgY29u
c3Q7Ci0KLSAgICAgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0
KCk7Ci0KLSAgICAgICAgdmlydHVhbCBpbnQgZ2V0V2lkdGgoKSBjb25zdDsKLSAgICAgICAgdmly
dHVhbCBpbnQgZ2V0SGVpZ2h0KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgR0xlbnVtIGdldEZv
cm1hdCgpIGNvbnN0OwotCi0gICAgICBwcml2YXRlOgotICAgICAgICBUZXh0dXJlICptVGV4dHVy
ZTsKLSAgICAgICAgR0xlbnVtIG1UYXJnZXQ7Ci0gICAgfTsKLQotICAgIC8vIEhlbHBlciBzdHJ1
Y3R1cmUgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGltYWdlIGxheWVyCi0gICAgc3RydWN0IEltYWdl
Ci0gICAgewotICAgICAgICBJbWFnZSgpOwotICAgICAgICB+SW1hZ2UoKTsKLQotICAgICAgICBH
THNpemVpIHdpZHRoOwotICAgICAgICBHTHNpemVpIGhlaWdodDsKLSAgICAgICAgR0xlbnVtIGZv
cm1hdDsKLQotICAgICAgICBib29sIGRpcnR5OwotCi0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpzdXJmYWNlOwotICAgIH07Ci0KLSAgICBzdGF0aWMgRDNERk9STUFUIHNlbGVjdEZvcm1hdChH
TGVudW0gZm9ybWF0KTsKLSAgICBpbnQgaW1hZ2VQaXRjaChjb25zdCBJbWFnZSYgaW1nKSBjb25z
dDsKLQotICAgIHZvaWQgc2V0SW1hZ2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscywgSW1hZ2UgKmltZyk7Ci0gICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzLCBJbWFnZSAqaW1nKTsKLSAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7Ci0gICAgYm9vbCBzdWJJbWFnZUNvbXByZXNz
ZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhl
bHMsIEltYWdlICppbWcpOwotCi0gICAgdm9pZCBuZWVkUmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBH
TGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQg
bWF4bGV2ZWwpIGNvbnN0OwotICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6ZSwg
R0xpbnQgbWF4bGV2ZWwpIGNvbnN0OwotCi0gICAgLy8gVGhlIHBvaW50ZXIgcmV0dXJuZWQgaXMg
d2VhayBhbmQgaXQgaXMgYXNzdW1lZCB0aGUgZGVyaXZlZCBjbGFzcyB3aWxsIGtlZXAgYSBzdHJv
bmcgcG9pbnRlciB1bnRpbCB0aGUgbmV4dCBjcmVhdGVUZXh0dXJlKCkgY2FsbC4KLSAgICB2aXJ0
dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY3JlYXRlVGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VU
ZXh0dXJlOSAqY29udmVydFRvUmVuZGVyVGFyZ2V0KCkgPSAwOwotICAgIHZpcnR1YWwgSURpcmVj
dDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgZGlydHlJbWFnZURhdGEoKSBjb25zdCA9IDA7Ci0KLSAgICB2b2lkIGRyb3BU
ZXh0dXJlKCk7Ci0gICAgdm9pZCBwdXNoVGV4dHVyZShJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKm5l
d1RleHR1cmUsIGJvb2wgcmVuZGVyYWJsZSk7Ci0KLSAgICBCbGl0ICpnZXRCbGl0dGVyKCk7Ci0K
LSAgICBpbnQgbGV2ZWxDb3VudCgpIGNvbnN0OwotCi0gICAgdW5zaWduZWQgaW50IG1XaWR0aDsK
LSAgICB1bnNpZ25lZCBpbnQgbUhlaWdodDsKLSAgICBHTGVudW0gbU1pbkZpbHRlcjsKLSAgICBH
TGVudW0gbU1hZ0ZpbHRlcjsKLSAgICBHTGVudW0gbVdyYXBTOwotICAgIEdMZW51bSBtV3JhcFQ7
Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7Ci0K
LSAgICB2b2lkIGxvYWRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KmlucHV0LCBzdGQ6OnNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLQot
ICAgIHZvaWQgbG9hZEFscGhhSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEx1bWluYW5jZUltYWdlRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7Ci0gICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9p
ZCBsb2FkUkdCVUJ5dGVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Ci0gICAgdm9pZCBsb2FkUkdCNTY1SW1hZ2VEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKLSAg
ICB2b2lkIGxvYWRSR0JBVUJ5dGVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkE0NDQ0SW1h
Z2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0OwotICAgIHZvaWQgbG9hZFJHQkE1NTUxSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZvaWQgbG9hZEJH
UkFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKLQotICAgIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqbUJhc2VUZXh0dXJlOyAvLyBU
aGlzIGlzIGEgd2VhayBwb2ludGVyLiBUaGUgZGVyaXZlZCBjbGFzcyBpcyBhc3N1bWVkIHRvIG93
biBhIHN0cm9uZyBwb2ludGVyLgotCi0gICAgYm9vbCBtRGlydHk7Ci0gICAgYm9vbCBtRGlydHlN
ZXRhRGF0YTsKLSAgICBib29sIG1Jc1JlbmRlcmFibGU7Ci0KLSAgICB2b2lkIGNyZWF0ZVN1cmZh
Y2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEltYWdlICpp
bWcpOwotfTsKLQotY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1cmUKLXsKLSAgcHVibGlj
OgotICAgIGV4cGxpY2l0IFRleHR1cmUyRChHTHVpbnQgaWQpOwotCi0gICAgflRleHR1cmUyRCgp
OwotCi0gICAgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotICAgIEdMZW51bSBnZXRGb3JtYXQo
KSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0g
ICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7
Ci0gICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1
ZmZlclN0b3JhZ2UgKnNvdXJjZSk7Ci0gICAgdm9pZCBjb3B5U3ViSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpOwotCi0g
ICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKLQotICAgIHZpcnR1YWwg
UmVuZGVyYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKLQotICBwcml2YXRl
OgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOwotCi0gICAgdmlydHVh
bCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNyZWF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZGlydHlJ
bWFnZURhdGEoKSBjb25zdDsKLQotICAgIGJvb2wgcmVkZWZpbmVUZXh0dXJlKEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
LSAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIEltYWdlIG1JbWFn
ZUFycmF5W01BWF9URVhUVVJFX0xFVkVMU107Ci0KLSAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbVRl
eHR1cmU7Ci0KLSAgICBSZW5kZXJidWZmZXIgKm1Db2xvcmJ1ZmZlclByb3h5OwotfTsKLQotY2xh
c3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQotewotICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgVGV4dHVyZUN1YmVNYXAoR0x1aW50IGlkKTsKLQotICAgIH5UZXh0dXJlQ3ViZU1hcCgp
OwotCi0gICAgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotICAgIEdMZW51bSBnZXRGb3JtYXQo
KSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMp
OwotICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZv
aWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1h
Z2VOZWdZKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VQb3NaKEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpOwotCi0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2Us
IEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLQotICAg
IHZvaWQgc3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIGNvcHlJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSk7Ci0gICAgdm9pZCBjb3B5U3ViSW1h
Z2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVy
YnVmZmVyU3RvcmFnZSAqc291cmNlKTsKLQotICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0Owot
ICAgIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXBzKCk7Ci0KLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIo
R0xlbnVtIHRhcmdldCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVGV4dHVyZUN1YmVNYXApOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkg
KmNyZWF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAg
IHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsK
LSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRh
cmdldCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZGlydHlJbWFnZURhdGEoKSBjb25zdDsKLQotICAg
IC8vIGZhY2VJZGVudGlmaWVyIGlzIDAtNSBvciBvbmUgb2YgdGhlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfKiBlbnVtZXJhbnRzLgotICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgY2FsbCB1bmRlcmx5
aW5nIERpcmVjdDNEIGNhbGwgZmFpbHMuCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVN
YXBTdXJmYWNlKHVuc2lnbmVkIGludCBmYWNlSWRlbnRpZmllciwgdW5zaWduZWQgaW50IGxldmVs
KTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFjZUluZGV4KEdMZW51bSBmYWNlKTsKLQot
ICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW1hZ2UoaW50
IGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29tbWl0UmVjdChHTGVu
dW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBib29sIHJlZGVmaW5lVGV4dHVy
ZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoKTsKLQot
ICAgIEltYWdlIG1JbWFnZUFycmF5WzZdW01BWF9URVhUVVJFX0xFVkVMU107Ci0KLSAgICBJRGly
ZWN0M0RDdWJlVGV4dHVyZTkgKm1UZXh0dXJlOwotCi0gICAgUmVuZGVyYnVmZmVyICptRmFjZVBy
b3hpZXNbNl07Ci19OwotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfVEVYVFVSRV9IXwpJbmRl
eDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9z
cmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQ1MSArMCww
IEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBsaWJHTEVTdjIuY3BwOiBJbXBsZW1lbnRzIHRo
ZSBleHBvcnRlZCBPcGVuR0wgRVMgMi4wIGZ1bmN0aW9ucy4KLQotI2RlZmluZSBHTF9BUElDQUxM
Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0KLSNp
bmNsdWRlIDxleGNlcHRpb24+Ci0jaW5jbHVkZSA8bGltaXRzPgotCi0jaW5jbHVkZSAiY29tbW9u
L2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
UHJvZ3JhbS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvU2hhZGVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKLQot
ZXh0ZXJuICJDIgotewotCi12b2lkIF9fc3RkY2FsbCBnbEFjdGl2ZVRleHR1cmUoR0xlbnVtIHRl
eHR1cmUpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gdGV4dHVyZSA9IDB4JVgpIiwgdGV4dHVyZSk7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh0ZXh0dXJlIDwgR0xfVEVYVFVSRTAgfHwg
dGV4dHVyZSA+IEdMX1RFWFRVUkUwICsgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIC0gMSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNldEFjdGl2ZVNhbXBsZXIodGV4dHVyZSAtIEdMX1RFWFRVUkUwKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEF0
dGFjaFNoYWRlcihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNoYWRlcikKLXsKLSAgICBUUkFDRSgi
KEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBzaGFkZXIgPSAlZCkiLCBwcm9ncmFtLCBzaGFk
ZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKLSAgICAgICAgICAgIGdsOjpTaGFkZXIgKnNoYWRlck9iamVjdCA9IGNvbnRleHQt
PmdldFNoYWRlcihzaGFkZXIpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9n
cmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRQcm9ncmFtKHNoYWRlcikpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QtPmF0dGFjaFNoYWRlcihzaGFkZXJPYmplY3QpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kQXR0cmliTG9jYXRpb24oR0x1aW50IHByb2dyYW0s
IEdMdWludCBpbmRleCwgY29uc3QgR0xjaGFyKiBuYW1lKQotewotICAgIFRSQUNFKCIoR0x1aW50
IHByb2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMY2hhciogbmFtZSA9IDB4
JTAuOHApIiwgcHJvZ3JhbSwgaW5kZXgsIG5hbWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHN0cm5jbXAobmFtZSwgImdsXyIs
IDMpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3Jh
bU9iamVjdC0+YmluZEF0dHJpYnV0ZUxvY2F0aW9uKGluZGV4LCBuYW1lKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJp
bmRCdWZmZXIoR0xlbnVtIHRhcmdldCwgR0x1aW50IGJ1ZmZlcikKLXsKLSAgICBUUkFDRSgiKEdM
ZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBidWZmZXIp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kQXJyYXlCdWZmZXIo
YnVmZmVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
RUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEVsZW1l
bnRBcnJheUJ1ZmZlcihidWZmZXIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJpbmRGcmFtZWJ1ZmZlcihHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0x1aW50IGZyYW1lYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBmcmFtZWJ1ZmZlcik7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYg
dGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURf
RlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUgfHwg
dGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRSZWFkRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX0RSQVdfRlJBTUVC
VUZGRVJfQU5HTEUgfHwgdGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVSKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmREcmF3RnJhbWVidWZmZXIoZnJhbWVidWZmZXIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmluZFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
LCBHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4
JVgsIEdMdWludCByZW5kZXJidWZmZXIgPSAlZCkiLCB0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4
dC0+YmluZFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmluZFRleHR1cmUo
R0xlbnVtIHRhcmdldCwgR0x1aW50IHRleHR1cmUpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0x1aW50IHRleHR1cmUgPSAlZCkiLCB0YXJnZXQsIHRleHR1cmUpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpUZXh0dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsK
LQotICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QgJiYgdGV4dHVyZU9iamVjdC0+Z2V0VGFy
Z2V0KCkgIT0gdGFyZ2V0ICYmIHRleHR1cmUgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRU
ZXh0dXJlMkQodGV4dHVyZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+Ymlu
ZFRleHR1cmVDdWJlTWFwKHRleHR1cmUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJsZW5kQ29sb3IoR0xjbGFtcGYgcmVk
LCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpCi17Ci0gICAg
VFJBQ0UoIihHTGNsYW1wZiByZWQgPSAlZiwgR0xjbGFtcGYgZ3JlZW4gPSAlZiwgR0xjbGFtcGYg
Ymx1ZSA9ICVmLCBHTGNsYW1wZiBhbHBoYSA9ICVmKSIsCi0gICAgICAgICAgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCogY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kQ29sb3IoZ2w6OmNsYW1wMDEocmVkKSwg
Z2w6OmNsYW1wMDEoZ3JlZW4pLCBnbDo6Y2xhbXAwMShibHVlKSwgZ2w6OmNsYW1wMDEoYWxwaGEp
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewot
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbEJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpCi17Ci0gICAgZ2xCbGVuZEVx
dWF0aW9uU2VwYXJhdGUobW9kZSwgbW9kZSk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQmxlbmRF
cXVhdGlvblNlcGFyYXRlKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKQotewotICAg
IFRSQUNFKCIoR0xlbnVtIG1vZGVSR0IgPSAweCVYLCBHTGVudW0gbW9kZUFscGhhID0gMHglWCki
LCBtb2RlUkdCLCBtb2RlQWxwaGEpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2gg
KG1vZGVSR0IpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgotICAgICAg
ICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKLSAgICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJT
RV9TVUJUUkFDVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN3aXRjaCAobW9kZUFscGhhKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GVU5D
X0FERDoKLSAgICAgICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6Ci0gICAgICAgICAgY2FzZSBH
TF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PnNldEJsZW5kRXF1YXRpb24obW9kZVJHQiwgbW9kZUFscGhhKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJsZW5kRnVu
YyhHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpCi17Ci0gICAgZ2xCbGVuZEZ1bmNTZXBh
cmF0ZShzZmFjdG9yLCBkZmFjdG9yLCBzZmFjdG9yLCBkZmFjdG9yKTsKLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBH
TGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSkKLXsKLSAgICBUUkFDRSgiKEdMZW51bSBz
cmNSR0IgPSAweCVYLCBHTGVudW0gZHN0UkdCID0gMHglWCwgR0xlbnVtIHNyY0FscGhhID0gMHgl
WCwgR0xlbnVtIGRzdEFscGhhID0gMHglWCkiLAotICAgICAgICAgIHNyY1JHQiwgZHN0UkdCLCBz
cmNBbHBoYSwgZHN0QWxwaGEpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHNy
Y1JHQikKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfWkVSTzoKLSAgICAgICAgICBjYXNl
IEdMX09ORToKLSAgICAgICAgICBjYXNlIEdMX1NSQ19DT0xPUjoKLSAgICAgICAgICBjYXNlIEdM
X09ORV9NSU5VU19TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQ09MT1I6Ci0gICAg
ICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfU1JD
X0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX1NSQ19BTFBIQToKLSAgICAgICAg
ICBjYXNlIEdMX0RTVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19EU1RfQUxQ
SEE6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdM
X09ORV9NSU5VU19DT05TVEFOVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FM
UEhBOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgotICAgICAg
ICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChkc3RSR0IpCi0gICAgICAgIHsKLSAgICAg
ICAgICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9PTkU6Ci0gICAgICAgICAgY2Fz
ZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgot
ICAgICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVT
X0RTVF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNl
IEdMX09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6Ci0g
ICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xf
Q09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09M
T1I6Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdM
X09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoc3JjQWxwaGEpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9PTkU6Ci0gICAgICAgICAgY2FzZSBH
TF9TUkNfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgotICAg
ICAgICAgIGNhc2UgR0xfRFNUX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RT
VF9DT0xPUjoKLSAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNlIEdM
X09ORV9NSU5VU19TUkNfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6Ci0gICAg
ICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfQ09O
U1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6
Ci0gICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09O
RV9NSU5VU19DT05TVEFOVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRV
UkFURToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3
aXRjaCAoZHN0QWxwaGEpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1pFUk86Ci0gICAg
ICAgICAgY2FzZSBHTF9PTkU6Ci0gICAgICAgICAgY2FzZSBHTF9TUkNfQ09MT1I6Ci0gICAgICAg
ICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOgotICAgICAgICAgIGNhc2UgR0xfRFNUX0NP
TE9SOgotICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0RTVF9DT0xPUjoKLSAgICAgICAgICBj
YXNlIEdMX1NSQ19BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19TUkNfQUxQSEE6
Ci0gICAgICAgICAgY2FzZSBHTF9EU1RfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9PTkVfTUlO
VVNfRFNUX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAg
ICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6Ci0gICAgICAgICAgY2FzZSBHTF9D
T05TVEFOVF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBI
QToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wg
Y29uc3RhbnRDb2xvclVzZWQgPSAoc3JjUkdCID09IEdMX0NPTlNUQU5UX0NPTE9SIHx8IHNyY1JH
QiA9PSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgfHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkc3RSR0IgPT0gR0xfQ09OU1RBTlRfQ09MT1IgfHwgZHN0UkdCID09IEdM
X09ORV9NSU5VU19DT05TVEFOVF9DT0xPUik7Ci0KLSAgICAgICAgYm9vbCBjb25zdGFudEFscGhh
VXNlZCA9IChzcmNSR0IgPT0gR0xfQ09OU1RBTlRfQUxQSEEgfHwgc3JjUkdCID09IEdMX09ORV9N
SU5VU19DT05TVEFOVF9BTFBIQSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRzdFJHQiA9PSBHTF9DT05TVEFOVF9BTFBIQSB8fCBkc3RSR0IgPT0gR0xfT05FX01JTlVTX0NP
TlNUQU5UX0FMUEhBKTsKLQotICAgICAgICBpZiAoY29uc3RhbnRDb2xvclVzZWQgJiYgY29uc3Rh
bnRBbHBoYVVzZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiU2ltdWx0YW5lb3VzIHVz
ZSBvZiBHTF9DT05TVEFOVF9BTFBIQS9HTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgYW5kIEdM
X0NPTlNUQU5UX0NPTE9SL0dMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiBpbnZhbGlkIHVuZGVy
IFdlYkdMIik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5zZXRCbGVuZEZhY3RvcnMoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBo
YSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xCdWZmZXJEYXRhKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWlwdHIgc2l6ZSwg
Y29uc3QgR0x2b2lkKiBkYXRhLCBHTGVudW0gdXNhZ2UpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0g
dGFyZ2V0ID0gMHglWCwgR0xzaXplaXB0ciBzaXplID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0YSA9
IDB4JTAuOHAsIEdMZW51bSB1c2FnZSA9ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0LCBzaXplLCBk
YXRhLCB1c2FnZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChzaXplIDwgMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICh1c2FnZSkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfU1RSRUFNX0RSQVc6Ci0gICAgICAgICAgY2FzZSBHTF9TVEFUSUNfRFJBVzoKLSAgICAg
ICAgICBjYXNlIEdMX0RZTkFNSUNfRFJBVzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkJ1
ZmZlciAqYnVmZmVyOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAg
YnVmZmVyID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAg
ICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgYnVmZmVyLT5idWZmZXJEYXRhKGRhdGEsIHNpemUsIHVzYWdlKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEJ1ZmZl
clN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUs
IGNvbnN0IEdMdm9pZCogZGF0YSkKLXsKLSAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTGludHB0ciBvZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBzaXplID0gJWQsIGNvbnN0IEdMdm9p
ZCogZGF0YSA9IDB4JTAuOHApIiwKLSAgICAgICAgICB0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0
YSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChzaXplIDwgMCB8fCBvZmZzZXQgPCAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGF0YSA9PSBOVUxMKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0
YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVS
OgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJB
WV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFy
cmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoc2l6ZV90KXNpemUgKyBvZmZzZXQgPiBidWZmZXIt
PnNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ1ZmZlci0+YnVm
ZmVyU3ViRGF0YShkYXRhLCBzaXplLCBvZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLUdMZW51bSBfX3N0ZGNhbGwgZ2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdMZW51bSB0YXJnZXQpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCkiLCB0YXJnZXQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9
IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYm
IHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVC
VUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIg
PSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNv
bnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICByZXR1cm4gZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xDbGVhcihHTGJpdGZpZWxkIG1hc2spCi17Ci0gICAgVFJBQ0UoIihHTGJpdGZp
ZWxkIG1hc2sgPSAlWCkiLCBtYXNrKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5jbGVhcihtYXNrKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bENsZWFyQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwg
R0xjbGFtcGYgYWxwaGEpCi17Ci0gICAgVFJBQ0UoIihHTGNsYW1wZiByZWQgPSAlZiwgR0xjbGFt
cGYgZ3JlZW4gPSAlZiwgR0xjbGFtcGYgYmx1ZSA9ICVmLCBHTGNsYW1wZiBhbHBoYSA9ICVmKSIs
Ci0gICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotCi0gICAgdHJ5Ci0gICAgewot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldENsZWFy
Q29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsQ2xlYXJEZXB0aGYoR0xj
bGFtcGYgZGVwdGgpCi17Ci0gICAgVFJBQ0UoIihHTGNsYW1wZiBkZXB0aCA9ICVmKSIsIGRlcHRo
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zZXRDbGVhckRlcHRoKGRlcHRoKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENsZWFyU3RlbmNp
bChHTGludCBzKQotewotICAgIFRSQUNFKCIoR0xpbnQgcyA9ICVkKSIsIHMpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PnNldENsZWFyU3RlbmNpbChzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbENvbG9yTWFzayhHTGJvb2xlYW4gcmVkLCBH
TGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4gYWxwaGEpCi17Ci0gICAg
VFJBQ0UoIihHTGJvb2xlYW4gcmVkID0gJWQsIEdMYm9vbGVhbiBncmVlbiA9ICVkLCBHTGJvb2xl
YW4gYmx1ZSA9ICVkLCBHTGJvb2xlYW4gYWxwaGEgPSAlZCkiLAotICAgICAgICAgIHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRDb2xvck1hc2socmVkID09IEdMX1RSVUUs
IGdyZWVuID09IEdMX1RSVUUsIGJsdWUgPT0gR0xfVFJVRSwgYWxwaGEgPT0gR0xfVFJVRSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xDb21waWxlU2hhZGVyKEdMdWludCBzaGFkZXIpCi17Ci0gICAgVFJBQ0UoIihHTHVp
bnQgc2hhZGVyID0gJWQpIiwgc2hhZGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBj
b250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmpl
Y3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dy
YW0oc2hhZGVyKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+Y29tcGlsZSgpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
Q29tcHJlc3NlZFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xz
aXplaSB3aWR0aCA9ICVkLCAiIAotICAgICAgICAgICJHTHNpemVpIGhlaWdodCA9ICVkLCBHTGlu
dCBib3JkZXIgPSAlZCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgY29uc3QgR0x2b2lkKiBkYXRh
ID0gMHglMC44cCkiLAotICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7Ci0KLSAgICB0cnkKLSAgICB7
Ci0gICAgICAgIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBnbDo6TUFYX1RFWFRVUkVfTEVWRUxT
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgKGxl
dmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1Bv
dzIoaGVpZ2h0KSkgfHwgYm9yZGVyICE9IDAgfHwgaW1hZ2VTaXplIDwgMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6Ci0gICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9URVhUVVJFX1NJWkUg
Pj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICBp
ZiAod2lkdGggIT0gaGVpZ2h0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKHdpZHRoID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID4+IGxldmVsKSB8fCBo
ZWlnaHQgPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChib3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzQ29t
cHJlc3NlZFRleHR1cmVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91Z2gg
dGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwg
aGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDb21wcmVzc2Vk
SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRh
dGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29t
cHJlc3NlZEltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBpbWFnZVNpemUsIGRhdGEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRh
dGEpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAl
ZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKLSAgICAgICAgICAi
R0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0ID0g
MHglWCwgIgotICAgICAgICAgICJHTHNpemVpIGltYWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQq
IGRhdGEgPSAweCUwLjhwKSIsCi0gICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAoIWdsOjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gZ2w6Ok1BWF9URVhUVVJFX0xF
VkVMUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAw
IHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IAotICAgICAgICAgICAgKGxldmVsID4gMCAm
JiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1BvdzIoaGVpZ2h0
KSkgfHwgaW1hZ2VTaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChmb3JtYXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9F
WFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA9
PSAwIHx8IGhlaWdodCA9PSAwIHx8IGRhdGEgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
IC8vIGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGZvcm1hdCBzd2l0Y2ggaGFzIGZh
aWxlZC4KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSAhPSBnbDo6
Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoeG9mZnNldCAlIDQgIT0gMCB8fCB5b2Zmc2V0
ICUgNCAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7IC8vIHdlIHdhaXQgdG8gY2hlY2sgdGhlIG9mZnNldHMgdW50
aWwgdGhpcyBwb2ludCwgYmVjYXVzZSB0aGUgbXVsdGlwbGUtb2YtZm91ciByZXN0cmljdGlvbgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRv
ZXMgbm90IGV4aXN0IHVubGVzcyBEWFQxIHRleHR1cmVzIGFyZSBzdXBwb3J0ZWQuCi0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0g
dGV4dHVyZS0+Z2V0V2lkdGgoKSkgfHwgCi0gICAgICAgICAgICAgICAgICAgIChoZWlnaHQgJSA0
ICE9IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCgpKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1h
Z2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
IChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghdGV4
dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4
dHVyZS0+Z2V0V2lkdGgoKSkgfHwgCi0gICAgICAgICAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9
IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCgpKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VD
b21wcmVzc2VkKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsQ29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcikKLXsKLSAgICBUUkFDRSgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAw
eCVYLCAiCi0gICAgICAgICAgIkdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMaW50IGJvcmRlciA9ICVkKSIsCi0gICAg
ICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IGJvcmRlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChsZXZlbCA8IDAgfHwgd2lk
dGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbCA+IDAg
JiYgKCFnbDo6aXNQb3cyKHdpZHRoKSB8fCAhZ2w6OmlzUG93MihoZWlnaHQpKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9URVhUVVJFX1NJ
WkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1k6Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0g
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAg
ICBpZiAod2lkdGggIT0gaGVpZ2h0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHdpZHRoID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID4+IGxldmVsKSB8
fCBoZWlnaHQgPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAg
IGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhU
MV9FWFQ6ICAvLyBDb21wcmVzc2VkIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGhlcmUsIGJ1
dCBpZiB0aGV5IGFyZSB1bnN1cHBvcnRlZCBhbHRvZ2V0aGVyLAotICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6IC8vIGEgZGlmZmVyZW50IGVycm9yIGlzIGdl
bmVyYXRlZCB0aGFuIG90aGVyd2lzZS4gVGhhdCBpcyBoYW5kbGVkIGJlbG93LgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChib3JkZXIgIT0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
aW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fCAKLSAg
ICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3Vw
cG9ydHNDb21wcmVzc2VkVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgaWYg
KGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZ2w6OkNvbG9yYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXIoKTsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRl
eHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1
cmUtPmNvcHlJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IHNvdXJjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJl
bWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFw
KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXBy
ZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0g
dGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGlu
dCB5b2Zmc2V0ID0gJWQsICIKLSAgICAgICAgICAiR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQs
IEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAotICAgICAgICAgIHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoIWdsOjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gZ2w6Ok1BWF9URVhU
VVJFX0xFVkVMUyB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8
R0xzaXplaT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8
R0xzaXplaT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1
ZmZlcigpOwotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBH
TF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxl
KCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpICE9
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkNvbG9yYnVm
ZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKLSAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4
dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1HTHVpbnQgX19zdGRjYWxsIGdsQ3JlYXRlUHJvZ3Jh
bSh2b2lkKQotewotICAgIFRSQUNFKCIoKSIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5jcmVhdGVQcm9n
cmFtKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOwotICAgIH0KLQot
ICAgIHJldHVybiAwOwotfQotCi1HTHVpbnQgX19zdGRjYWxsIGdsQ3JlYXRlU2hhZGVyKEdMZW51
bSB0eXBlKQotewotICAgIFRSQUNFKCIoR0xlbnVtIHR5cGUgPSAweCVYKSIsIHR5cGUpOwotCi0g
ICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250
ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFHTUVO
VF9TSEFERVI6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX1NIQURFUjoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlU2hhZGVyKHR5cGUpOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0s
IDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAw
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xDdWxsRmFj
ZShHTGVudW0gbW9kZSkKLXsKLSAgICBUUkFDRSgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2Rl
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtb2RlKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9GUk9OVDoKLSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAg
ICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnNldEN1bGxNb2RlKG1vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUJ1ZmZlcnMo
R0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGJ1ZmZlcnMpCi17Ci0gICAgVFJBQ0UoIihHTHNpemVp
IG4gPSAlZCwgY29uc3QgR0x1aW50KiBidWZmZXJzID0gMHglMC44cCkiLCBuLCBidWZmZXJzKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUJ1ZmZl
cihidWZmZXJzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUZyYW1lYnVmZmVy
cyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzKQotewotICAgIFRSQUNFKCIo
R0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzID0gMHglMC44cCkiLCBu
LCBmcmFtZWJ1ZmZlcnMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAobiA8IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KGZyYW1lYnVmZmVyc1tpXSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVidWZmZXJzW2ldKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKQotewotICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFt
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dy
YW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZl
cnMpCi17Ci0gICAgVFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiByZW5kZXJi
dWZmZXJzID0gMHglMC44cCkiLCBuLCByZW5kZXJidWZmZXJzKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZm
ZXJzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVNoYWRlcihHTHVpbnQgc2hh
ZGVyKQotewotICAgIFRSQUNFKCIoR0x1aW50IHNoYWRlciA9ICVkKSIsIHNoYWRlcik7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXIgPT0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFNoYWRlcihzaGFkZXIpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGNvbnRleHQtPmRlbGV0ZVNoYWRlcihzaGFkZXIpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRGVsZXRlVGV4dHVy
ZXMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHRleHR1cmVzKQotewotICAgIFRSQUNFKCIoR0xz
aXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogdGV4dHVyZXMgPSAweCUwLjhwKSIsIG4sIHRleHR1
cmVzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlc1tp
XSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsRGVwdGhGdW5jKEdMZW51bSBmdW5jKQotewotICAgIFRSQUNFKCIoR0xl
bnVtIGZ1bmMgPSAweCVYKSIsIGZ1bmMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0
Y2ggKGZ1bmMpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FVkVSOgotICAgICAgICAg
IGNhc2UgR0xfQUxXQVlTOgotICAgICAgICAgIGNhc2UgR0xfTEVTUzoKLSAgICAgICAgICBjYXNl
IEdMX0xFUVVBTDoKLSAgICAgICAgICBjYXNlIEdMX0VRVUFMOgotICAgICAgICAgIGNhc2UgR0xf
R1JFQVRFUjoKLSAgICAgICAgICBjYXNlIEdMX0dFUVVBTDoKLSAgICAgICAgICBjYXNlIEdMX05P
VEVRVUFMOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aEZ1bmMoZnVu
Yyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xEZXB0aE1hc2soR0xib29sZWFuIGZsYWcpCi17Ci0gICAgVFJBQ0UoIihH
TGJvb2xlYW4gZmxhZyA9ICVkKSIsIGZsYWcpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoTWFzayhmbGFn
ICE9IEdMX0ZBTFNFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERlcHRoUmFuZ2VmKEdMY2xhbXBmIHpOZWFyLCBHTGNs
YW1wZiB6RmFyKQotewotICAgIFRSQUNFKCIoR0xjbGFtcGYgek5lYXIgPSAlZiwgR0xjbGFtcGYg
ekZhciA9ICVmKSIsIHpOZWFyLCB6RmFyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aFJhbmdlKHpOZWFy
LCB6RmFyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0g
ICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbERldGFjaFNoYWRlcihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNo
YWRlcikKLXsKLSAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMdWludCBzaGFkZXIg
PSAlZCkiLCBwcm9ncmFtLCBzaGFkZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLQotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotICAgICAgICAgICAgZ2w6OlNoYWRlciAq
c2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJCeVByb2dyYW1IYW5kbGU7Ci0gICAgICAgICAgICAg
ICAgc2hhZGVyQnlQcm9ncmFtSGFuZGxlID0gY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pOwot
ICAgICAgICAgICAgICAgIGlmICghc2hhZGVyQnlQcm9ncmFtSGFuZGxlKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KCFzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlByb2dy
YW0gKnByb2dyYW1CeVNoYWRlckhhbmRsZSA9IGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKTsK
LSAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW1CeVNoYWRlckhhbmRsZSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdC0+ZGV0YWNoU2hhZGVyKHNoYWRlck9iamVjdCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbERpc2FibGUoR0xlbnVtIGNhcCkKLXsKLSAgICBUUkFD
RSgiKEdMZW51bSBjYXAgPSAweCVYKSIsIGNhcCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjYXApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250
ZXh0LT5zZXRDdWxsRmFjZShmYWxzZSk7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIGNvbnRleHQtPnNldFBvbHlnb25P
ZmZzZXRGaWxsKGZhbHNlKTsgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBM
RV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGZh
bHNlKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAg
ICAgICBjb250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZShmYWxzZSk7ICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFNjaXNzb3JUZXN0KGZhbHNlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFRlc3QoZmFs
c2UpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDog
ICAgICAgICAgICAgICBjb250ZXh0LT5zZXREZXB0aFRlc3QoZmFsc2UpOyAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnNldEJsZW5kKGZhbHNlKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGl0aGVy
KGZhbHNlKTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4KQotewot
ICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQpIiwgaW5kZXgpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRW
ZXJ0ZXhBdHRyaWJFbmFibGVkKGluZGV4LCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCkKLXsKLSAgICBUUkFDRSgiKEdM
ZW51bSBtb2RlID0gMHglWCwgR0xpbnQgZmlyc3QgPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkKSIs
IG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3Vu
dCA8IDAgfHwgZmlyc3QgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsK
LSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbERyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVt
IHR5cGUsIGNvbnN0IEdMdm9pZCogaW5kaWNlcykKLXsKLSAgICBUUkFDRSgiKEdMZW51bSBtb2Rl
ID0gMHglWCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdM
dm9pZCogaW5kaWNlcyA9IDB4JTAuOHApIiwKLSAgICAgICAgICBtb2RlLCBjb3VudCwgdHlwZSwg
aW5kaWNlcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGds
RW5hYmxlKEdMZW51bSBjYXApCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gY2FwID0gMHglWCkiLCBj
YXApOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoY2FwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0NVTExfRkFDRTogICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Q3VsbEZhY2UodHJ1ZSk7ICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9G
SUxMOiAgICAgIGNvbnRleHQtPnNldFBvbHlnb25PZmZzZXRGaWxsKHRydWUpOyAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0
LT5zZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UodHJ1ZSk7IGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgY29udGV4dC0+c2V0U2FtcGxlQ292ZXJh
Z2UodHJ1ZSk7ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RF
U1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFNjaXNzb3JUZXN0KHRydWUpOyAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBj
b250ZXh0LT5zZXRTdGVuY2lsVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhU
ZXN0KHRydWUpOyAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CTEVO
RDogICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5kKHRydWUpOyAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5zZXREaXRoZXIodHJ1ZSk7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoR0x1aW50IGluZGV4KQotewotICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQpIiwgaW5k
ZXgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKGluZGV4LCB0cnVlKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbEZpbmlzaCh2b2lkKQotewotICAgIFRSQUNFKCIoKSIpOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbmlz
aCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZv
aWQgX19zdGRjYWxsIGdsRmx1c2godm9pZCkKLXsKLSAgICBUUkFDRSgiKCkiKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5mbHVzaCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIEdMdWludCBy
ZW5kZXJidWZmZXIpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVt
IGF0dGFjaG1lbnQgPSAweCVYLCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0ID0gMHglWCwgIgot
ICAgICAgICAgICJHTHVpbnQgcmVuZGVyYnVmZmVyID0gJWQpIiwgdGFyZ2V0LCBhdHRhY2htZW50
LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGlmICgodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFX
X0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xF
KQotICAgICAgICAgICAgfHwgcmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgR0x1aW50IGZyYW1l
YnVmZmVySGFuZGxlID0gMDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFN
RUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGZyYW1l
YnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAg
ICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJI
YW5kbGUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVySGFu
ZGxlID09IDAgfHwgIWZyYW1lYnVmZmVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDoKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ci0+c2V0Q29sb3JidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6
Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKEdMX1JFTkRFUkJV
RkZFUiwgcmVuZGVyYnVmZmVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZm
ZXItPnNldFN0ZW5jaWxidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQs
IEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCkKLXsKLSAgICBU
UkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gYXR0YWNobWVudCA9IDB4JVgsIEdM
ZW51bSB0ZXh0YXJnZXQgPSAweCVYLCAiCi0gICAgICAgICAgIkdMdWludCB0ZXh0dXJlID0gJWQs
IEdMaW50IGxldmVsID0gJWQpIiwgdGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1
cmUsIGxldmVsKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9G
UkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJn
ZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0
Y2ggKGF0dGFjaG1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0NPTE9SX0FUVEFD
SE1FTlQwOgotICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgICBj
YXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQo
KTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHRl
eHR1cmUgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZXh0YXJnZXQgPSBH
TF9OT05FOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXggPSBjb250ZXh0LT5nZXRUZXh0dXJlKHRl
eHR1cmUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRleCA9PSBOVUxMKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4LT5pc0Nv
bXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9N
QVApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChsZXZlbCAhPSAwKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBHTHVpbnQgZnJh
bWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZS
QU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVm
ZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJh
bWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVy
SGFuZGxlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlckhh
bmRsZSA9PSAwIHx8ICFmcmFtZWJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQ09MT1JfQVRUQUNITUVOVDA6ICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZm
ZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9E
RVBUSF9BVFRBQ0hNRU5UOiAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcih0ZXh0YXJnZXQs
IHRleHR1cmUpOyAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNI
TUVOVDogZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xGcm9udEZhY2UoR0xlbnVtIG1vZGUpCi17
Ci0gICAgVFJBQ0UoIihHTGVudW0gbW9kZSA9IDB4JVgpIiwgbW9kZSk7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAobW9kZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xf
Q1c6Ci0gICAgICAgICAgY2FzZSBHTF9DQ1c6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRGcm9udEZhY2UobW9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2VuQnVmZmVycyhH
THNpemVpIG4sIEdMdWludCogYnVmZmVycykKLXsKLSAgICBUUkFDRSgiKEdMc2l6ZWkgbiA9ICVk
LCBHTHVpbnQqIGJ1ZmZlcnMgPSAweCUwLjhwKSIsIG4sIGJ1ZmZlcnMpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZUJ1ZmZl
cigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdl
dCkKLXsKLSAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7Ci0KLSAg
ICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6
OlRleHR1cmUgKnRleHR1cmU7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAg
ICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAodGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBtYXBzKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xH
ZW5GcmFtZWJ1ZmZlcnMoR0xzaXplaSBuLCBHTHVpbnQqIGZyYW1lYnVmZmVycykKLXsKLSAgICBU
UkFDRSgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGZyYW1lYnVmZmVycyA9IDB4JTAuOHApIiwg
biwgZnJhbWVidWZmZXJzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyc1tpXSA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xHZW5SZW5kZXJidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiByZW5kZXJi
dWZmZXJzKQotewotICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogcmVuZGVyYnVm
ZmVycyA9IDB4JTAuOHApIiwgbiwgcmVuZGVyYnVmZmVycyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZW5kZXJidWZmZXJzW2ldID0gY29udGV4dC0+Y3JlYXRlUmVuZGVy
YnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZW5UZXh0dXJlcyhHTHNpemVpIG4s
IEdMdWludCogdGV4dHVyZXMpCi17Ci0gICAgVFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50
KiB0ZXh0dXJlcyA9ICAweCUwLjhwKSIsIG4sIHRleHR1cmVzKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHRleHR1cmVzW2ldID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlQXR0cmliKEdMdWludCBwcm9ncmFt
LCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAq
c2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCi17Ci0gICAgVFJBQ0UoIihHTHVpbnQg
cHJvZ3JhbSA9ICVkLCBHTHVpbnQgaW5kZXggPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsIEdM
c2l6ZWkgKmxlbmd0aCA9IDB4JTAuOHAsICIKLSAgICAgICAgICAiR0xpbnQgKnNpemUgPSAweCUw
LjhwLCBHTGVudW0gKnR5cGUgPSAlMC44cCwgR0xjaGFyICpuYW1lID0gJTAuOHApIiwKLSAgICAg
ICAgICBwcm9ncmFtLCBpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsK
LQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgPCAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPj0gKEdMdWlu
dClwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRl
KGluZGV4LCBidWZzaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0
QWN0aXZlVW5pZm9ybShHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBu
YW1lKQotewotICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0x1aW50IGluZGV4ID0g
JWQsIEdMc2l6ZWkgYnVmc2l6ZSA9ICVkLCAiCi0gICAgICAgICAgIkdMc2l6ZWkqIGxlbmd0aCA9
IDB4JTAuOHAsIEdMaW50KiBzaXplID0gMHglMC44cCwgR0xlbnVtKiB0eXBlID0gMHglMC44cCwg
R0xjaGFyKiBuYW1lID0gMHglMC44cCkiLAotICAgICAgICAgIHByb2dyYW0sIGluZGV4LCBidWZz
aXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBpZiAoYnVmc2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFt
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1PYmplY3QtPmdldEFjdGl2
ZVVuaWZvcm1Db3VudCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJv
Z3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybShpbmRleCwgYnVmc2l6ZSwgbGVuZ3RoLCBzaXpl
LCB0eXBlLCBuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
fQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEF0dGFjaGVkU2hhZGVycyhHTHVpbnQgcHJvZ3Jh
bSwgR0xzaXplaSBtYXhjb3VudCwgR0xzaXplaSogY291bnQsIEdMdWludCogc2hhZGVycykKLXsK
LSAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQsIEdMc2l6ZWkgbWF4Y291bnQgPSAlZCwg
R0xzaXplaSogY291bnQgPSAweCUwLjhwLCBHTHVpbnQqIHNoYWRlcnMgPSAweCUwLjhwKSIsCi0g
ICAgICAgICAgcHJvZ3JhbSwgbWF4Y291bnQsIGNvdW50LCBzaGFkZXJzKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgaWYgKG1heGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1PYmplY3QtPmdldEF0dGFj
aGVkU2hhZGVycyhtYXhjb3VudCwgY291bnQsIHNoYWRlcnMpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLWludCBfX3N0ZGNhbGwgZ2xHZXRBdHRyaWJM
b2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQotewotICAgIFRSQUNF
KCIoR0x1aW50IHByb2dyYW0gPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gJXMpIiwgcHJvZ3Jh
bSwgbmFtZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0p
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFLCAtMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCAtMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBwcm9ncmFtT2Jq
ZWN0LT5nZXRBdHRyaWJ1dGVMb2NhdGlvbihuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgLTEpOwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xHZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiogcGFyYW1zKQotewot
ICAgIFRSQUNFKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xib29sZWFuKiBwYXJhbXMgPSAweCUw
LjhwKSIsICBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRCb29sZWFudihwbmFt
ZSwgcGFyYW1zKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0xlbnVtIG5hdGl2
ZVR5cGU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZu
YXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDAp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5h
bWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KLQotICAg
ICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOwotICAg
ICAgICAgICAgICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107Ci0K
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFt
cyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBu
dW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGZsb2F0UGFyYW1zW2ldID09IDAuMGYpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBh
cmFtczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZl
VHlwZSA9PSBHTF9JTlQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBH
TGludCAqaW50UGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaW50UGFyYW1zID0g
bmV3IEdMaW50W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0
SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludFBhcmFtc1tpXSA9PSAwKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgW10gaW50UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9f
c3RkY2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
TGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBu
YW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVG
RkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9B
UlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVu
dEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAv
LyBBIG51bGwgYnVmZmVyIG1lYW5zIHRoYXQgIjAiIGlzIGJvdW5kIHRvIHRoZSByZXF1ZXN0ZWQg
YnVmZmVyIHRhcmdldAotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1NJWkU6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGJ1ZmZlci0+c2l6ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi1H
TGVudW0gX19zdGRjYWxsIGdsR2V0RXJyb3Iodm9pZCkKLXsKLSAgICBUUkFDRSgiKCkiKTsKLQot
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgIGlmIChj
b250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldEVycm9yKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEZs
b2F0dihHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKLXsKLSAgICBUUkFDRSgiKEdMZW51
bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcG5hbWUsIHBhcmFt
cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKCEoY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQot
ICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQg
dGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuLgotCi0gICAgICAgICAgICAgICAgaWYg
KG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAg
IGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29s
UGFyYW1zW2ldID09IEdMX0ZBTFNFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBO
VUxMOwotICAgICAgICAgICAgICAgICAgICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1z
XTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50
UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xlbnVtIGF0dGFjaG1lbnQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBH
TGludCogcGFyYW1zID0gMHglMC44cCkiLAotICAgICAgICAgIHRhcmdldCwgYXR0YWNobWVudCwg
cG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQg
IT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJV
RkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdM
X1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aWYoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIg
PSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0
RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEdMZW51bSBh
dHRhY2htZW50VHlwZTsKLSAgICAgICAgICAgIEdMdWludCBhdHRhY2htZW50SGFuZGxlOwotICAg
ICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOiAgICAKLSAgICAgICAgICAgICAgICBhdHRhY2ht
ZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKTsKLSAgICAgICAgICAg
ICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVySGFuZGxl
KCk7IAotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0FUVEFDSE1FTlQ6ICAgICAKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKTsKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50
SGFuZGxlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiAg
IAotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXJUeXBlKCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHTGVudW0gYXR0YWNobWVudE9iamVjdFR5cGU7
ICAgLy8gVHlwZSBjYXRlZ29yeQotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRUeXBlID09IEdM
X05PTkUgfHwgYXR0YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gYXR0YWNobWVudFR5cGU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNUZXh0dXJlVGFyZ2V0
KGF0dGFjaG1lbnRUeXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhdHRhY2ht
ZW50T2JqZWN0VHlwZSA9IEdMX1RFWFRVUkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudE9iamVjdFR5cGU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dE9iamVjdFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFjaG1lbnRPYmplY3RUeXBlID09
IEdMX1RFWFRVUkUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gYXR0YWNobWVudEhhbmRsZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVY
VFVSRV9MRVZFTDoKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0g
R0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUyRCB3aWxsIG5vdCBhbGxvdyBsZXZlbCB0byBi
ZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBFUyAyLjAKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgotICAgICAgICAgICAgICAgIGlmIChhdHRh
Y2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRU
eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGF0dGFjaG1lbnRUeXBlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsR2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAg
IFRSQUNFKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwg
cG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHBhcmFt
cykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOwotICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlw
ZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotCi0gICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFsaWQs
IGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KLQotICAgICAgICAgICAgICAg
IGlmIChuYXRpdmVUeXBlID09IEdMX0JPT0wpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAg
ICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOwotCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKLQotICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Ym9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gYm9vbFBhcmFtczsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1z
ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtu
dW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFt
ZSwgZmxvYXRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9ERVBUSF9SQU5HRSB8fCBwbmFtZSA9
PSBHTF9DT0xPUl9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9ERVBUSF9DTEVBUl9WQUxVRSB8
fCBwbmFtZSA9PSBHTF9CTEVORF9DT0xPUikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKCgoR0xmbG9hdCko
MHhGRkZGRkZGRikgKiBmbG9hdFBhcmFtc1tpXSAtIDEuMGYpIC8gMi4wZik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShmbG9hdFBhcmFtc1tpXSA+IDAu
MGYgPyBmbG9vcihmbG9hdFBhcmFtc1tpXSArIDAuNSkgOiBjZWlsKGZsb2F0UGFyYW1zW2ldIC0g
MC41KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgW10gZmxvYXRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBwcm9ncmFtLCBHTGVudW0gcG5hbWUsIEdMaW50KiBw
YXJhbXMpCi17Ci0gICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTGVudW0gcG5hbWUg
PSAlZCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgcG5hbWUsIHBhcmFtcyk7
Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHByb2dyYW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0xJTktfU1RBVFVTOgotICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WQUxJREFURV9TVEFUVVM6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmlzVmFsaWRhdGVkKCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBjYXNlIEdMX0lORk9fTE9HX0xFTkdUSDoK
LSAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0SW5mb0xvZ0xlbmd0
aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BVFRB
Q0hFRF9TSEFERVJTOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRBdHRhY2hlZFNoYWRlcnNDb3VudCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfQVRUUklCVVRFUzoKLSAgICAgICAgICAgICAgICAqcGFy
YW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlQXR0cmlidXRlQ291bnQoKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX0FUVFJJQlVURV9N
QVhfTEVOR1RIOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRB
Y3RpdmVBdHRyaWJ1dGVNYXhMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1TOgotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xF
TkdUSDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZl
VW5pZm9ybU1heExlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFByb2dyYW1JbmZvTG9nKEdMdWludCBwcm9n
cmFtLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBpbmZvbG9nKQot
ewotICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQs
IEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsIEdMY2hhciogaW5mb2xvZyA9IDB4JTAuOHApIiwK
LSAgICAgICAgICBwcm9ncmFtLCBidWZzaXplLCBsZW5ndGgsIGluZm9sb2cpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2Jq
ZWN0LT5nZXRJbmZvTG9nKGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50
KiBwYXJhbXMpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFy
YW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpID09
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyKGNvbnRleHQtPmdl
dFJlbmRlcmJ1ZmZlckhhbmRsZSgpKTsKLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfV0lEVEg6Ci0g
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfSEVJ
R0hUOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEhlaWdodCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJV
RkZFUl9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1
ZmZlci0+Z2V0Rm9ybWF0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUkVOREVSQlVGRkVSX1JFRF9TSVpFOgotICAgICAgICAgICAgICAgIGlmIChyZW5k
ZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJi
dWZmZXItPmdldFN0b3JhZ2UoKSktPmdldFJlZFNpemUoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgotICAgICAg
ICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29s
b3JidWZmZXIqPihyZW5kZXJidWZmZXItPmdldFN0b3JhZ2UoKSktPmdldEdyZWVuU2l6ZSgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVS
X0JMVUVfU0laRToKLSAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVm
ZmVyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
c3RhdGljX2Nhc3Q8Z2w6OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVmZmVyLT5nZXRTdG9yYWdlKCkp
LT5nZXRCbHVlU2l6ZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfUkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAgICAgICAgaWYgKHJlbmRl
cmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1
ZmZlci0+Z2V0U3RvcmFnZSgpKS0+Z2V0QWxwaGFTaXplKCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAgICAg
ICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0RlcHRoYnVmZmVyKCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkRl
cHRoYnVmZmVyKj4ocmVuZGVyYnVmZmVyLT5nZXRTdG9yYWdlKCkpLT5nZXREZXB0aFNpemUoKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZF
Ul9TVEVOQ0lMX1NJWkU6Ci0gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNTdGVu
Y2lsYnVmZmVyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gc3RhdGljX2Nhc3Q8Z2w6OlN0ZW5jaWxidWZmZXIqPihyZW5kZXJidWZmZXItPmdldFN0
b3JhZ2UoKSktPmdldFN0ZW5jaWxTaXplKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19BTkdMRToKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRNYXhTdXBwb3J0ZWRT
YW1wbGVzKCkgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0U3RvcmFnZSgpLT5nZXRTYW1wbGVzKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3Rk
Y2FsbCBnbEdldFNoYWRlcml2KEdMdWludCBzaGFkZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBh
cmFtcykKLXsKLSAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xlbnVtIHBuYW1lID0g
JWQsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHNoYWRlciwgcG5hbWUsIHBhcmFtcyk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAg
Z2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0K
LSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9TSEFERVJfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVyT2Jq
ZWN0LT5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICBj
YXNlIEdMX0RFTEVURV9TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9i
amVjdC0+aXNGbGFnZ2VkRm9yRGVsZXRpb24oKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHNoYWRlck9iamVjdC0+aXNDb21waWxlZCgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTkZPX0xPR19M
RU5HVEg6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IHNoYWRlck9iamVjdC0+Z2V0SW5mb0xv
Z0xlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9TSEFERVJfU09VUkNFX0xFTkdUSDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gc2hhZGVy
T2JqZWN0LT5nZXRTb3VyY2VMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFkZXJJbmZvTG9nKEdMdWlu
dCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9s
b2cpCi17Ci0gICAgVFJBQ0UoIihHTHVpbnQgc2hhZGVyID0gJWQsIEdMc2l6ZWkgYnVmc2l6ZSA9
ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGNoYXIqIGluZm9sb2cgPSAweCUwLjhw
KSIsCi0gICAgICAgICAgc2hhZGVyLCBidWZzaXplLCBsZW5ndGgsIGluZm9sb2cpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBpZiAoYnVmc2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0
ID0gY29udGV4dC0+Z2V0U2hhZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVy
T2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0
LT5nZXRJbmZvTG9nKGJ1ZnNpemUsIGxlbmd0aCwgaW5mb2xvZyk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xHZXRTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBl
LCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pCi17Ci0gICAgVFJBQ0UoIihHTGVudW0g
c2hhZGVydHlwZSA9IDB4JVgsIEdMZW51bSBwcmVjaXNpb250eXBlID0gMHglWCwgR0xpbnQqIHJh
bmdlID0gMHglMC44cCwgR0xpbnQqIHByZWNpc2lvbiA9IDB4JTAuOHApIiwKLSAgICAgICAgICBz
aGFkZXJ0eXBlLCBwcmVjaXNpb250eXBlLCByYW5nZSwgcHJlY2lzaW9uKTsKLQotICAgIHRyeQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChzaGFkZXJ0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9WRVJURVhfU0hBREVSOgotICAgICAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVS
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNo
IChwcmVjaXNpb250eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9MT1dfRkxPQVQ6
Ci0gICAgICAgICAgY2FzZSBHTF9NRURJVU1fRkxPQVQ6Ci0gICAgICAgICAgY2FzZSBHTF9ISUdI
X0ZMT0FUOgotICAgICAgICAgICAgLy8gQXNzdW1lIElFRUUgNzU0IHByZWNpc2lvbgotICAgICAg
ICAgICAgcmFuZ2VbMF0gPSAxMjc7Ci0gICAgICAgICAgICByYW5nZVsxXSA9IDEyNzsKLSAgICAg
ICAgICAgICpwcmVjaXNpb24gPSAyMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfTE9XX0lOVDoKLSAgICAgICAgICBjYXNlIEdMX01FRElVTV9JTlQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9ISUdIX0lOVDoKLSAgICAgICAgICAgIC8vIFNvbWUgKG1vc3QpIGhhcmR3YXJlIG9u
bHkgc3VwcG9ydHMgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBudW1iZXJzLAotICAg
ICAgICAgICAgLy8gd2hpY2ggY2FuIGFjY3VyYXRlbHkgcmVwcmVzZW50IGludGVnZXJzIHVwIHRv
ICsvLTE2Nzc3MjE2Ci0gICAgICAgICAgICByYW5nZVswXSA9IDI0OwotICAgICAgICAgICAgcmFu
Z2VbMV0gPSAyNDsKLSAgICAgICAgICAgICpwcmVjaXNpb24gPSAwOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0U2hhZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6
ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHNvdXJjZSkKLXsKLSAgICBUUkFD
RSgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xzaXplaSBidWZzaXplID0gJWQsIEdMc2l6ZWkqIGxl
bmd0aCA9IDB4JTAuOHAsIEdMY2hhciogc291cmNlID0gMHglMC44cCkiLAotICAgICAgICAgIHNo
YWRlciwgYnVmc2l6ZSwgbGVuZ3RoLCBzb3VyY2UpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAg
ICBpZiAoYnVmc2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyT2JqZWN0ID0gY29udGV4dC0+Z2V0U2hh
ZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgICAgIGlmICghc2hhZGVyT2JqZWN0KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNoYWRlck9iamVjdC0+Z2V0U291cmNlKGJ1
ZnNpemUsIGxlbmd0aCwgc291cmNlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7Ci0gICAgfQotfQotCi1jb25zdCBHTHVieXRlKiBfX3N0ZGNhbGwgZ2xHZXRTdHJpbmcoR0xl
bnVtIG5hbWUpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gbmFtZSA9IDB4JVgpIiwgbmFtZSk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENv
bnRleHQoKTsKLQotICAgICAgICBzd2l0Y2ggKG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1ZFTkRPUjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIlRyYW5zR2FtaW5n
IEluYy4iOwotICAgICAgICAgIGNhc2UgR0xfUkVOREVSRVI6Ci0gICAgICAgICAgICByZXR1cm4g
KEdMdWJ5dGUqKSJBTkdMRSI7Ci0gICAgICAgICAgY2FzZSBHTF9WRVJTSU9OOgotICAgICAgICAg
ICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDIuMCAoZ2l0LWRldmVsICJfX0RBVEVfXyAi
ICIgX19USU1FX18iKSI7Ci0gICAgICAgICAgY2FzZSBHTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJ
T046Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAw
IChnaXQtZGV2ZWwgIl9fREFURV9fICIgIiBfX1RJTUVfXyIpIjsKLSAgICAgICAgICBjYXNlIEdM
X0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAhPSBO
VUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZygpIDogIiIpOwotICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAoR0x1Ynl0
ZSopTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIChHTHVieXRlKilO
VUxMKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRUZXhQYXJhbWV0ZXJmdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBh
cmFtcykKLXsKLSAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUg
PSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFt
cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAg
ICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xm
bG9hdCl0ZXh0dXJlLT5nZXRNYWdGaWx0ZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwUygpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgot
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwVCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsR2V0VGV4UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGlu
dCogcGFyYW1zKQotewotICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBw
bmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBh
cmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0
ZXh0dXJlLT5nZXRNYWdGaWx0ZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHRleHR1cmUtPmdldE1pbkZpbHRlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAgICAgICAgICpwYXJh
bXMgPSB0ZXh0dXJlLT5nZXRXcmFwUygpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybWZ2KEdMdWludCBwcm9ncmFt
LCBHTGludCBsb2NhdGlvbiwgR0xmbG9hdCogcGFyYW1zKQotewotICAgIFRSQUNFKCIoR0x1aW50
IHByb2dyYW0gPSAlZCwgR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xmbG9hdCogcGFyYW1zID0gMHgl
MC44cCkiLCBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5nZXRVbmlm
b3JtZnYobG9jYXRpb24sIHBhcmFtcykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbEdldFVuaWZvcm1pdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMaW50KiBw
YXJhbXMpCi17Ci0gICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkLCBHTGludCBsb2NhdGlv
biA9ICVkLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBwcm9ncmFtLCBsb2NhdGlvbiwgcGFy
YW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHBy
b2dyYW0pOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmpl
Y3QtPmlzTGlua2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybWl2KGxvY2F0aW9uLCBwYXJhbXMpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotaW50IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1Mb2NhdGlvbihHTHVp
bnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKQotewotICAgIFRSQUNFKCIoR0x1aW50IHBy
b2dyYW0gPSAlZCwgY29uc3QgR0xjaGFyKiBuYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCBuYW1l
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChzdHJzdHIobmFtZSwgImdsXyIpID09IG5hbWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFLCAtMSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QtPmlzTGlua2VkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHJldHVybiBwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtTG9jYXRpb24obmFtZSwgZmFs
c2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAtMSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIC0xOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYmZ2KEdM
dWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpCi17Ci0gICAgVFJBQ0Uo
IihHTHVpbnQgaW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xmbG9hdCogcGFyYW1z
ID0gMHglMC44cCkiLCBpbmRleCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBj
b25zdCBnbDo6QXR0cmlidXRlU3RhdGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4
QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxF
RDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJpYlN0YXRlLm1FbmFi
bGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURF
OgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU3RyaWRl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0
cmliU3RhdGUubVR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xf
RkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZF
UlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoK
LSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGF0dHJpYlN0YXRlLm1DdXJy
ZW50VmFsdWVbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYml2KEdMdWludCBpbmRleCwgR0xl
bnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0g
JWQsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIGluZGV4
LCBwbmFtZSwgcGFyYW1zKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGVT
dGF0ZSAmYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7
Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfU0laRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVNp
emU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVY
X0FUVFJJQl9BUlJBWV9TVFJJREU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0
YXRlLm1TdHJpZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBh
dHRyaWJTdGF0ZS5tVHlwZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FU
VFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0
cmliU3RhdGUubUJvdW5kQnVmZmVyLmlkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCOgotICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgY3VycmVudFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1
ZVtpXTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJyZW50VmFs
dWUgPiAwLjBmID8gZmxvb3IoY3VycmVudFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJlbnRWYWx1
ZSAtIDAuNWYpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBvaW50ZXIpCi17Ci0gICAgVFJBQ0UoIihHTHVpbnQg
aW5kZXggPSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x2b2lkKiogcG9pbnRlciA9IDB4JTAu
OHApIiwgaW5kZXgsIHBuYW1lLCBwb2ludGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwbmFt
ZSAhPSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICpwb2ludGVyID0gY29uc3RfY2FzdDxHTHZvaWQqPihjb250ZXh0LT5n
ZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xIaW50KEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBtb2RlKQotewotICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdM
ZW51bSBtb2RlID0gMHglWCkiLCB0YXJnZXQsIG1vZGUpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfR0VORVJB
VEVfTUlQTUFQX0hJTlQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKG1vZGUpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkFTVEVTVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9O
SUNFU1Q6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRE9OVF9DQVJFOgotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOyAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOwotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVCkKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRHZW5lcmF0ZU1pcG1hcEhpbnQobW9kZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotR0xib29sZWFuIF9fc3RkY2FsbCBn
bElzQnVmZmVyKEdMdWludCBidWZmZXIpCi17Ci0gICAgVFJBQ0UoIihHTHVpbnQgYnVmZmVyID0g
JWQpIiwgYnVmZmVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0ICYmIGJ1ZmZl
cikKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyT2JqZWN0ID0gY29u
dGV4dC0+Z2V0QnVmZmVyKGJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIGlmIChidWZmZXJPYmplY3Qp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gR0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJ
c0VuYWJsZWQoR0xlbnVtIGNhcCkKLXsKLSAgICBUUkFDRSgiKEdMZW51bSBjYXAgPSAweCVYKSIs
IGNhcCk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgc3dpdGNoIChjYXApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNDdWxsRmFjZUVu
YWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAg
IHJldHVybiBjb250ZXh0LT5pc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgpOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogcmV0dXJuIGNvbnRleHQtPmlz
U2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NB
TVBMRV9DT1ZFUkFHRTogICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQ292ZXJhZ2VF
bmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAg
ICByZXR1cm4gY29udGV4dC0+aXNTY2lzc29yVGVzdEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1N0ZW5j
aWxUZXN0RW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzRGVwdGhUZXN0RW5hYmxlZCgpOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlz
QmxlbmRFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY29udGV4dC0+aXNEaXRoZXJFbmFibGVkKCk7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSwg
ZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1HTGJvb2xlYW4gX19z
dGRjYWxsIGdsSXNGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCi17Ci0gICAgVFJBQ0Uo
IihHTHVpbnQgZnJhbWVidWZmZXIgPSAlZCkiLCBmcmFtZWJ1ZmZlcik7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQot
ICAgICAgICBpZiAoY29udGV4dCAmJiBmcmFtZWJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdldEZyYW1l
YnVmZmVyKGZyYW1lYnVmZmVyKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1HTGJvb2xlYW4gX19zdGRjYWxsIGds
SXNQcm9ncmFtKEdMdWludCBwcm9ncmFtKQotewotICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0g
PSAlZCkiLCBwcm9ncmFtKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0ICYmIHBy
b2dyYW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKHByb2dy
YW1PYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZB
TFNFKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfRkFMU0U7Ci19Ci0KLUdMYm9vbGVhbiBfX3N0
ZGNhbGwgZ2xJc1JlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQotewotICAgIFRSQUNF
KCIoR0x1aW50IHJlbmRlcmJ1ZmZlciA9ICVkKSIsIHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCAmJiByZW5kZXJidWZmZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdl
dFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotCi0gICAgICAgICAgICBpZiAocmVuZGVyYnVm
ZmVyT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVF
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9G
QUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi1HTGJvb2xlYW4gX19z
dGRjYWxsIGdsSXNTaGFkZXIoR0x1aW50IHNoYWRlcikKLXsKLSAgICBUUkFDRSgiKEdMdWludCBz
aGFkZXIgPSAlZCkiLCBzaGFkZXIpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQg
JiYgc2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6U2hhZGVyICpzaGFkZXJPYmpl
Y3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsKLQotICAgICAgICAgICAgaWYgKHNoYWRl
ck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFM
U0UpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotR0xib29sZWFuIF9fc3Rk
Y2FsbCBnbElzVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKLXsKLSAgICBUUkFDRSgiKEdMdWludCB0
ZXh0dXJlID0gJWQpIiwgdGV4dHVyZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCAmJiB0ZXh0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVy
ZU9iamVjdCA9IGNvbnRleHQtPmdldFRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICAgICAgICAgIGlm
ICh0ZXh0dXJlT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBH
TF9UUlVFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBHTF9GQUxTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi12b2lkIF9f
c3RkY2FsbCBnbExpbmVXaWR0aChHTGZsb2F0IHdpZHRoKQotewotICAgIFRSQUNFKCIoR0xmbG9h
dCB3aWR0aCA9ICVmKSIsIHdpZHRoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKHdp
ZHRoIDw9IDAuMGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgY29udGV4dC0+c2V0TGluZVdpZHRoKHdpZHRoKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbExpbmtQcm9n
cmFtKEdMdWludCBwcm9ncmFtKQotewotICAgIFRSQUNFKCIoR0x1aW50IHByb2dyYW0gPSAlZCki
LCBwcm9ncmFtKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0p
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+bGluaygpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsUGl4ZWxTdG9yZWko
R0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKLXsKLSAgICBUUkFDRSgiKEdMZW51bSBwbmFtZSA9
IDB4JVgsIEdMaW50IHBhcmFtID0gJWQpIiwgcG5hbWUsIHBhcmFtKTsKLQotICAgIHRyeQotICAg
IHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1l
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6
Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtICE9IDEgJiYgcGFyYW0gIT0gMiAmJiBwYXJhbSAh
PSA0ICYmIHBhcmFtICE9IDgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0VW5wYWNrQWxpZ25tZW50KHBhcmFtKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5U
OgotICAgICAgICAgICAgICAgIGlmIChwYXJhbSAhPSAxICYmIHBhcmFtICE9IDIgJiYgcGFyYW0g
IT0gNCAmJiBwYXJhbSAhPSA4KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFBhY2tBbGlnbm1lbnQocGFyYW0pOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwg
Z2xQb2x5Z29uT2Zmc2V0KEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKQotewotICAgIFRS
QUNFKCIoR0xmbG9hdCBmYWN0b3IgPSAlZiwgR0xmbG9hdCB1bml0cyA9ICVmKSIsIGZhY3Rvciwg
dW5pdHMpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnNldFBvbHlnb25PZmZzZXRQYXJhbXMoZmFjdG9yLCB1bml0cyk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xSZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x2b2lkKiBwaXhlbHMp
Ci17Ci0gICAgVFJBQ0UoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0
aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCAiCi0gICAgICAgICAgIkdMZW51bSBmb3JtYXQg
PSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAot
ICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgIHBpeGVscyk7Ci0K
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgZ2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfRk9STUFUOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFJlbGVhc2VTaGFkZXJD
b21waWxlcih2b2lkKQotewotICAgIFRSQUNFKCIoKSIpOwotCi0gICAgdHJ5Ci0gICAgewotICAg
ICAgICBnbDo6U2hhZGVyOjpyZWxlYXNlQ29tcGlsZXIoKTsKLSAgICB9Ci0gICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVBTkdMRShHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgVFJBQ0Uo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAl
ZCkiLAotICAgICAgICAgIHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0JBNDoKLSAgICAgICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0I1NjU6Ci0gICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgICAg
ICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgIGNhc2UgR0xfUkdCOF9P
RVM6Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwg
d2lkdGggPiBnbDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFIHx8IGhlaWdodCA+IGdsOjpNQVhfUkVO
REVSQlVGRkVSX1NJWkUgfHwgc2FtcGxlcyA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNhbXBsZXMgPiBjb250ZXh0LT5nZXRNYXhT
dXBwb3J0ZWRTYW1wbGVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBH
THVpbnQgaGFuZGxlID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVySGFuZGxlKCk7Ci0gICAgICAg
ICAgICBpZiAoaGFuZGxlID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRSZW5kZXJidWZmZXJTdG9yYWdlKG5ldyBnbDo6RGVwdGhidWZmZXIod2lkdGgsIGhlaWdodCwg
c2FtcGxlcykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1JHQkE0OgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfUkdCNTY1OgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgICAg
ICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5k
ZXJidWZmZXJTdG9yYWdlKG5ldyBnbDo6Q29sb3JidWZmZXIod2lkdGgsIGhlaWdodCwgaW50ZXJu
YWxmb3JtYXQsIHNhbXBsZXMpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRS
ZW5kZXJidWZmZXJTdG9yYWdlKG5ldyBnbDo6U3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBz
YW1wbGVzKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVy
YnVmZmVyU3RvcmFnZShuZXcgZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBz
YW1wbGVzKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAg
Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSh0YXJnZXQsIDAsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVDb3Zl
cmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCkKLXsKLSAgICBUUkFDRSgiKEdM
Y2xhbXBmIHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1ZSwgaW52ZXJ0
KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQqIGNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZVBhcmFtcyhnbDo6Y2xhbXAwMSh2YWx1ZSks
IGludmVydCA9PSBHTF9UUlVFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFNjaXNzb3IoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgVFJBQ0UoIihHTGludCB4ID0g
JWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVk
KSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAo
d2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
KiBjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclBhcmFtcyh4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbFNoYWRlckJpbmFyeShHTHNpemVpIG4sIGNvbnN0IEdMdWlu
dCogc2hhZGVycywgR0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdM
c2l6ZWkgbGVuZ3RoKQotewotICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWlu
dCogc2hhZGVycyA9IDB4JTAuOHAsIEdMZW51bSBiaW5hcnlmb3JtYXQgPSAweCVYLCAiCi0gICAg
ICAgICAgImNvbnN0IEdMdm9pZCogYmluYXJ5ID0gMHglMC44cCwgR0xzaXplaSBsZW5ndGggPSAl
ZCkiLAotICAgICAgICAgIG4sIHNoYWRlcnMsIGJpbmFyeWZvcm1hdCwgYmluYXJ5LCBsZW5ndGgp
OwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICAvLyBObyBiaW5hcnkgc2hhZGVyIGZvcm1hdHMg
YXJlIHN1cHBvcnRlZC4KLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU2hh
ZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhcioqIHN0
cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCkKLXsKLSAgICBUUkFDRSgiKEdMdWludCBzaGFkZXIg
PSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGNoYXIqKiBzdHJpbmcgPSAweCUwLjhw
LCBjb25zdCBHTGludCogbGVuZ3RoID0gMHglMC44cCkiLAotICAgICAgICAgIHNoYWRlciwgY291
bnQsIHN0cmluZywgbGVuZ3RoKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBnbDo6U2hhZGVyICpzaGFkZXJPYmplY3QgPSBjb250ZXh0LT5nZXRTaGFkZXIoc2hhZGVyKTsK
LQotICAgICAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldFByb2dyYW0oc2hhZGVyKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNoYWRl
ck9iamVjdC0+c2V0U291cmNlKGNvdW50LCBzdHJpbmcsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xTdGVu
Y2lsRnVuYyhHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzaykKLXsKLSAgICBnbFN0
ZW5jaWxGdW5jU2VwYXJhdGUoR0xfRlJPTlRfQU5EX0JBQ0ssIGZ1bmMsIHJlZiwgbWFzayk7Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xl
bnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spCi17Ci0gICAgVFJBQ0UoIihHTGVudW0g
ZmFjZSA9IDB4JVgsIEdMZW51bSBmdW5jID0gMHglWCwgR0xpbnQgcmVmID0gJWQsIEdMdWludCBt
YXNrID0gJWQpIiwgZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVDoK
LSAgICAgICAgICBjYXNlIEdMX0JBQ0s6Ci0gICAgICAgICAgY2FzZSBHTF9GUk9OVF9BTkRfQkFD
SzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRj
aCAoZnVuYykKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfTkVWRVI6Ci0gICAgICAgICAg
Y2FzZSBHTF9BTFdBWVM6Ci0gICAgICAgICAgY2FzZSBHTF9MRVNTOgotICAgICAgICAgIGNhc2Ug
R0xfTEVRVUFMOgotICAgICAgICAgIGNhc2UgR0xfRVFVQUw6Ci0gICAgICAgICAgY2FzZSBHTF9H
RVFVQUw6Ci0gICAgICAgICAgY2FzZSBHTF9HUkVBVEVSOgotICAgICAgICAgIGNhc2UgR0xfTk9U
RVFVQUw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0ZST05UIHx8IGZh
Y2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0U3RlbmNpbFBhcmFtcyhmdW5jLCByZWYsIG1hc2spOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRf
QU5EX0JBQ0spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Rl
bmNpbEJhY2tQYXJhbXMoZnVuYywgcmVmLCBtYXNrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBn
bFN0ZW5jaWxNYXNrKEdMdWludCBtYXNrKQotewotICAgIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZShH
TF9GUk9OVF9BTkRfQkFDSywgbWFzayk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbE1h
c2tTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spCi17Ci0gICAgVFJBQ0UoIihHTGVu
dW0gZmFjZSA9IDB4JVgsIEdMdWludCBtYXNrID0gJWQpIiwgZmFjZSwgbWFzayk7Ci0KLSAgICB0
cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZmFjZSkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfRlJPTlQ6Ci0gICAgICAgICAgY2FzZSBHTF9CQUNLOgotICAgICAgICAgIGNhc2UgR0xf
RlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChmYWNlID09IEdMX0ZS
T05UIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFdyaXRlbWFzayhtYXNrKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKGZhY2UgPT0gR0xfQkFDSyB8fCBmYWNlID09IEdMX0ZST05U
X0FORF9CQUNLKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0
ZW5jaWxCYWNrV3JpdGVtYXNrKG1hc2spOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsU3RlbmNp
bE9wKEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcykKLXsKLSAgICBnbFN0
ZW5jaWxPcFNlcGFyYXRlKEdMX0ZST05UX0FORF9CQUNLLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwot
fQotCi12b2lkIF9fc3RkY2FsbCBnbFN0ZW5jaWxPcFNlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVu
dW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpCi17Ci0gICAgVFJBQ0UoIihHTGVu
dW0gZmFjZSA9IDB4JVgsIEdMZW51bSBmYWlsID0gMHglWCwgR0xlbnVtIHpmYWlsID0gMHglWCwg
R0xlbnVtIHpwYXMgPSAweCVYcykiLAotICAgICAgICAgIGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFz
cyk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZmFjZSkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfRlJPTlQ6Ci0gICAgICAgICAgY2FzZSBHTF9CQUNLOgotICAgICAg
ICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGZhaWwpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1pFUk86Ci0gICAgICAgICAgY2FzZSBHTF9LRUVQOgotICAgICAgICAgIGNhc2UgR0xf
UkVQTEFDRToKLSAgICAgICAgICBjYXNlIEdMX0lOQ1I6Ci0gICAgICAgICAgY2FzZSBHTF9ERUNS
OgotICAgICAgICAgIGNhc2UgR0xfSU5WRVJUOgotICAgICAgICAgIGNhc2UgR0xfSU5DUl9XUkFQ
OgotICAgICAgICAgIGNhc2UgR0xfREVDUl9XUkFQOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICh6ZmFpbCkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfWkVSTzoKLSAgICAgICAgICBjYXNlIEdMX0tFRVA6Ci0gICAgICAgICAgY2Fz
ZSBHTF9SRVBMQUNFOgotICAgICAgICAgIGNhc2UgR0xfSU5DUjoKLSAgICAgICAgICBjYXNlIEdM
X0RFQ1I6Ci0gICAgICAgICAgY2FzZSBHTF9JTlZFUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9JTkNS
X1dSQVA6Ci0gICAgICAgICAgY2FzZSBHTF9ERUNSX1dSQVA6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKHpwYXNzKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9aRVJPOgotICAgICAgICAgIGNhc2UgR0xfS0VFUDoKLSAgICAgICAg
ICBjYXNlIEdMX1JFUExBQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9JTkNSOgotICAgICAgICAgIGNh
c2UgR0xfREVDUjoKLSAgICAgICAgICBjYXNlIEdMX0lOVkVSVDoKLSAgICAgICAgICBjYXNlIEdM
X0lOQ1JfV1JBUDoKLSAgICAgICAgICBjYXNlIEdMX0RFQ1JfV1JBUDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGZhY2UgPT0gR0xfRlJPTlQgfHwgZmFjZSA9PSBHTF9GUk9OVF9BTkRfQkFD
SykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsT3Bl
cmF0aW9ucyhmYWlsLCB6ZmFpbCwgenBhc3MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoZmFjZSA9PSBHTF9CQUNLIHx8IGZhY2UgPT0gR0xfRlJPTlRfQU5EX0JBQ0spCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbEJhY2tPcGVyYXRp
b25zKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBw
aXhlbHMpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwg
PSAlZCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNp
emVpIGhlaWdodCA9ICVkLCAiCi0gICAgICAgICAgIkdMaW50IGJvcmRlciA9ICVkLCBHTGVudW0g
Zm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9
ICAweCUwLjhwKSIsCi0gICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobGV2ZWwgPiAwICYmICghZ2w6OmlzUG93Mih3aWR0aCkg
fHwgIWdsOjppc1BvdzIoaGVpZ2h0KSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAodGFy
Z2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAg
ICAgaWYgKHdpZHRoID4gKGdsOjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSB8fCBoZWlnaHQg
PiAoZ2w6Ok1BWF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YOgotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh3aWR0aCA+IChnbDo6TUFY
X0NVQkVfTUFQX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVpZ2h0ID4gKGdsOjpNQVhfQ1VC
RV9NQVBfVEVYVFVSRV9TSVpFID4+IGxldmVsKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW50ZXJuYWxm
b3JtYXQgIT0gZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChpbnRlcm5h
bGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0g
ICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
UkdCOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6
Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF80XzRfNF80OgotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81
XzE6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAg
ICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6ICAvLyBlcnJvciBjYXNlcyBmb3IgY29tcHJlc3NlZCB0
ZXh0dXJlcyBhcmUgaGFuZGxlZCBiZWxvdwotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsgCi0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChib3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAotICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0
ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4
dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJl
TWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0g
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxp
Z25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWChsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCks
IHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnNldEltYWdlUG9zWShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUt
PnNldEltYWdlTmVnWShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdl
UG9zWihsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
Y29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWihsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+
Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJmKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSkKLXsKLSAgICBnbFRleFBhcmFtZXRlcmko
dGFyZ2V0LCBwbmFtZSwgKEdMaW50KXBhcmFtKTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhQ
YXJhbWV0ZXJmdihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBh
cmFtcykKLXsKLSAgICBnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgKEdMaW50KSpwYXJh
bXMpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcmkoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKLXsKLSAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQg
PSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCBwYXJhbSA9ICVkKSIsIHRhcmdldCwg
cG5hbWUsIHBhcmFtKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKLQotICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1
YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzoKLSAgICAgICAgICAgICAgICBpZiAoIXRl
eHR1cmUtPnNldFdyYXBTKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfV1JBUF9UOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFQoKEdM
ZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOgot
ICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVyKChHTGVudW0pcGFyYW0p
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICAgICAgICAg
ICAgICBpZiAoIXRleHR1cmUtPnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBnbFRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBwbmFtZSwgKnBhcmFtcyk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVGV4
U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9p
ZCogcGl4ZWxzKQotewotICAgIFRSQUNFKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxl
dmVsID0gJWQsIEdMaW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCi0gICAg
ICAgICAgIkdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZv
cm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwgIgotICAgICAgICAgICJjb25zdCBHTHZv
aWQqIHBpeGVscyA9IDB4JTAuOHApIiwKLSAgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotCi0gICAg
dHJ5Ci0gICAgewotICAgICAgICBpZiAoIWdsOjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gZ2w6Ok1BWF9URVhUVVJF
X0xFVkVMUyB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVp
Z2h0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xz
aXplaT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xz
aXplaT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCFnbDo6Q2hlY2tUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBOVUxMKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0
VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0
LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0
IHgpCi17Ci0gICAgZ2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCAxLCAmeCk7Ci19Ci0KLXZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xmbG9hdCogdikKLXsKLSAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkg
Y291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50
LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsK
LQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbS0+c2V0VW5pZm9ybTFmdihsb2NhdGlvbiwgY291bnQs
IHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWkoR0xpbnQg
bG9jYXRpb24sIEdMaW50IHgpCi17Ci0gICAgZ2xVbmlmb3JtMWl2KGxvY2F0aW9uLCAxLCAmeCk7
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCi17Ci0gICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2Nh
dGlvbiwgY291bnQsIHYpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50
UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtMWl2KGxvY2F0
aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm0yZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpCi17Ci0gICAgR0xmbG9h
dCB4eVsyXSA9IHt4LCB5fTsKLQotICAgIGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgMSwgKEdMZmxv
YXQqKSZ4eSk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKLXsKLSAgICBUUkFDRSgiKEdMaW50
IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4
JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAg
aWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYXRpb24g
PT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0g
PSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dy
YW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFt
LT5zZXRVbmlmb3JtMmZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAg
ewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQg
eSkKLXsKLSAgICBHTGludCB4eVs0XSA9IHt4LCB5fTsKLQotICAgIGdsVW5pZm9ybTJpdihsb2Nh
dGlvbiwgMSwgKEdMaW50KikmeHkpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQotewotICAgIFRS
QUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGlu
dCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9u
ID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2YoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xm
bG9hdCB5LCBHTGZsb2F0IHopCi17Ci0gICAgR0xmbG9hdCB4eXpbM10gPSB7eCwgeSwgen07Ci0K
LSAgICBnbFVuaWZvcm0zZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHl6KTsKLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0KiB2KQotewotICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwg
Y291bnQsIHYpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3Jh
bSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBj
b3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaShH
TGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeikKLXsKLSAgICBHTGludCB4
eXpbM10gPSB7eCwgeSwgen07Ci0KLSAgICBnbFVuaWZvcm0zaXYobG9jYXRpb24sIDEsIChHTGlu
dCopJnh5eik7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCi17Ci0gICAgVFJBQ0UoIihHTGludCBs
b2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44
cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAo
Y291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3Jt
M2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm00ZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxv
YXQgeiwgR0xmbG9hdCB3KQotewotICAgIEdMZmxvYXQgeHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsK
LQotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eXp3KTsKLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQotewotICAgIFRSQUNFKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwg
R0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlv
biwgY291bnQsIHYpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJv
Z3JhbSgpOwotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9u
LCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00
aShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdykKLXsK
LSAgICBHTGludCB4eXp3WzRdID0ge3gsIHksIHosIHd9OwotCi0gICAgZ2xVbmlmb3JtNGl2KGxv
Y2F0aW9uLCAxLCAoR0xpbnQqKSZ4eXp3KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3Jt
NGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKLXsKLSAg
ICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3Qg
R0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7Ci0KLSAgICB0cnkKLSAg
ICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2Nh
dGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJv
Z3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW0tPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCi17
Ci0gICAgVFJBQ0UoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdM
Ym9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIs
Ci0gICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKLQotICAgIHRy
eQotICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0Up
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbSA9IGNvbnRleHQtPmdldEN1cnJlbnRQ
cm9ncmFtKCk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXByb2dyYW0tPnNldFVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9v
bGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQotewotICAgIFRSQUNFKCIoR0xp
bnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3Nl
ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGxvY2F0
aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAg
IGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6
OlByb2dyYW0gKnByb2dyYW0gPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwotCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtLT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwg
dmFsdWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4
NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHTGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBUUkFDRSgiKEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZs
b2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgdmFsdWUpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoY291bnQgPCAwIHx8
IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9u
ID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKLXsK
LSAgICBUUkFDRSgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7Ci0KLSAgICB0cnkK
LSAgICB7Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsK
LQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dy
YW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwotCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgJiYgcHJvZ3JhbSAhPSAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPnVzZVByb2dyYW0o
cHJvZ3JhbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0K
LQotdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCi17Ci0g
ICAgVFJBQ0UoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOwotCi0gICAgdHJ5Ci0g
ICAgewotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9ncmFtT2JqZWN0
LT52YWxpZGF0ZSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9
Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMWYoR0x1aW50IGluZGV4LCBHTGZs
b2F0IHgpCi17Ci0gICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYp
IiwgaW5kZXgsIHgpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIDAsIDAsIDEgfTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xW
ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCi17Ci0g
ICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHgl
MC44cCkiLCBpbmRleCwgdmFsdWVzKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgaWYgKGlu
ZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0s
IDAsIDAsIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwg
dmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwg
R0xmbG9hdCB5KQotewotICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9
ICVmLCBHTGZsb2F0IHkgPSAlZikiLCBpbmRleCwgeCwgeSk7Ci0KLSAgICB0cnkKLSAgICB7Ci0g
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9
IHsgeCwgeSwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGlu
ZGV4LCB2YWxzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
Ci0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQot
fQotCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJmdihHTHVpbnQgaW5kZXgsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlcykKLXsKLSAgICBUUkFDRSgiKEdMdWludCBpbmRleCA9ICVkLCBjb25z
dCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOwotCi0gICAgdHJ5
Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0
IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCAwLCAxIH07Ci0gICAgICAgICAgICBj
b250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0
cmliM2YoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KQotewot
ICAgIFRSQUNFKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkg
PSAlZiwgR0xmbG9hdCB6ID0gJWYpIiwgaW5kZXgsIHgsIHksIHopOwotCi0gICAgdHJ5Ci0gICAg
ewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNb
NF0gPSB7IHgsIHksIHosIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJp
YihpbmRleCwgdmFscyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAg
IH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZnYoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMpCi17Ci0gICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwg
Y29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKLQotICAg
IHRyeQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgR0xm
bG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCAxIH07Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxs
IGdsVmVydGV4QXR0cmliNGYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xm
bG9hdCB6LCBHTGZsb2F0IHcpCi17Ci0gICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xm
bG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBHTGZsb2F0IHogPSAlZiwgR0xmbG9hdCB3ID0g
JWYpIiwgaW5kZXgsIHgsIHksIHosIHcpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAo
aW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHos
IHcgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0KLX0KLQotdm9pZCBf
X3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2
YWx1ZXMpCi17Ci0gICAgVFJBQ0UoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCog
dmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKLQotICAgIHRyeQotICAgIHsKLSAg
ICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4
QXR0cmliKGluZGV4LCB2YWx1ZXMpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliUG9pbnRlcihHTHVp
bnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwg
R0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCogcHRyKQotewotICAgIFRSQUNFKCIoR0x1aW50
IGluZGV4ID0gJWQsIEdMaW50IHNpemUgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCAiCi0gICAg
ICAgICAgIkdMYm9vbGVhbiBub3JtYWxpemVkID0gJWQsIEdMc2l6ZWkgc3RyaWRlID0gJWQsIGNv
bnN0IEdMdm9pZCogcHRyID0gMHglMC44cCkiLAotICAgICAgICAgIGluZGV4LCBzaXplLCB0eXBl
LCBub3JtYWxpemVkLCBzdHJpZGUsIHB0cik7Ci0KLSAgICB0cnkKLSAgICB7Ci0gICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAodHlw
ZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQllURToKLSAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9TSE9SVDoKLSAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgIGNhc2UgR0xfRklYRUQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChzdHJpZGUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBj
b250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLCAobm9ybWFsaXplZCA9PSBHTF9U
UlVFKSwgc3RyaWRlLCBwdHIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
LSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgVFJBQ0UoIihHTGludCB4ID0g
JWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVk
KSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgdHJ5Ci0gICAgewotICAgICAgICBpZiAo
d2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0Vmlld3BvcnRQYXJhbXMoeCwgeSwgd2lk
dGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgIH0K
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xCbGl0RnJhbWVidWZmZXJBTkdMRShHTGludCBzcmNYMCwg
R0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50
IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikKLXsKLSAgICBU
UkFDRSgiKEdMaW50IHNyY1gwID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0g
JWQsIEdMaW50IHNyY1kxID0gJWQsICIKLSAgICAgICAgICAiR0xpbnQgZHN0WDAgPSAlZCwgR0xp
bnQgZHN0WTAgPSAlZCwgR0xpbnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgIgotICAg
ICAgICAgICJHTGJpdGZpZWxkIG1hc2sgPSAweCVYLCBHTGVudW0gZmlsdGVyID0gMHglWCkiLAot
ICAgICAgICAgIHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1gxLCBkc3RYMCwgZHN0WTAsIGRzdFgx
LCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKLQotICAgIHRyeQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChmaWx0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKG1hc2sgJiB+KEdM
X0NPTE9SX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZG
RVJfQklUKSkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNyY1gxIC0gc3JjWDAgIT0g
ZHN0WDEgLSBkc3RYMCB8fCBzcmNZMSAtIHNyY1kwICE9IGRzdFkxIC0gZHN0WTApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEVSUigiU2NhbGluZyBhbmQgZmxpcHBpbmcgaW4gQmxpdEZyYW1lYnVm
ZmVyQU5HTEUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVh
ZEZyYW1lYnVmZmVySGFuZGxlKCkgPT0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxl
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJCbGl0cyB3aXRoIHRoZSBz
YW1lIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZnJhbWVidWZmZXIgYXJlIG5vdCBzdXBwb3J0ZWQg
YnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb250
ZXh0LT5ibGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBk
c3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCi0gICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7Ci0gICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlM0RPRVMoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkKiBwaXhlbHMpCi17Ci0gICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xp
bnQgbGV2ZWwgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgIgotICAgICAgICAg
ICJHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGgg
PSAlZCwgR0xpbnQgYm9yZGVyID0gJWQsICIKLSAgICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4
JVgsIEdMZW51bSB0eXBlID0gMHgleCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIs
Ci0gICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLQotICAgIHRyeQotICAgIHsK
LSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgfQotICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLV9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5
cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUpCi17Ci0g
ICAgc3RydWN0IEV4dGVuc2lvbgotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKLSAg
ICAgICAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBhZGRyZXNzOwot
ICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGdsRXh0ZW5zaW9uc1tdID0KLSAg
ICB7Ci0gICAgICAgIHsiZ2xUZXhJbWFnZTNET0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xUZXhJbWFnZTNET0VTfSwKLSAgICAgICAgeyJnbEJsaXRGcmFt
ZWJ1ZmZlckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUp
Z2xCbGl0RnJhbWVidWZmZXJBTkdMRX0sCi0gICAgfTsKLQotICAgIGZvciAoaW50IGV4dCA9IDA7
IGV4dCA8IHNpemVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7IGV4dCsrKQot
ICAgIHsKLSAgICAgICAgaWYgKHN0cmNtcChwcm9jbmFtZSwgZ2xFeHRlbnNpb25zW2V4dF0ubmFt
ZSkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChfX2VnbE11c3RDYXN0VG9Q
cm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRXh0ZW5zaW9uc1tleHRdLmFkZHJlc3M7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotfQpJbmRleDogQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVT
djIvbGliR0xFU3YyLmRlZgkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3Yy
L2xpYkdMRVN2Mi5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU2ICswLDAgQEAKLUxJQlJBUlkg
bGliR0xFU3YyCi1FWFBPUlRTCi0gICAgZ2xBY3RpdmVUZXh0dXJlICAgICAgICAgICAgICAgICBA
MQotICAgIGdsQXR0YWNoU2hhZGVyICAgICAgICAgICAgICAgICAgQDIKLSAgICBnbEJpbmRBdHRy
aWJMb2NhdGlvbiAgICAgICAgICAgIEAzCi0gICAgZ2xCaW5kQnVmZmVyICAgICAgICAgICAgICAg
ICAgICBANAotICAgIGdsQmluZEZyYW1lYnVmZmVyICAgICAgICAgICAgICAgQDUKLSAgICBnbEJp
bmRSZW5kZXJidWZmZXIgICAgICAgICAgICAgIEA2Ci0gICAgZ2xCaW5kVGV4dHVyZSAgICAgICAg
ICAgICAgICAgICBANwotICAgIGdsQmxlbmRDb2xvciAgICAgICAgICAgICAgICAgICAgQDgKLSAg
ICBnbEJsZW5kRXF1YXRpb24gICAgICAgICAgICAgICAgIEA5Ci0gICAgZ2xCbGVuZEVxdWF0aW9u
U2VwYXJhdGUgICAgICAgICBAMTAKLSAgICBnbEJsZW5kRnVuYyAgICAgICAgICAgICAgICAgICAg
IEAxMQotICAgIGdsQmxlbmRGdW5jU2VwYXJhdGUgICAgICAgICAgICAgQDEyCi0gICAgZ2xCdWZm
ZXJEYXRhICAgICAgICAgICAgICAgICAgICBAMTMKLSAgICBnbEJ1ZmZlclN1YkRhdGEgICAgICAg
ICAgICAgICAgIEAxNAotICAgIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAgICAgICAgQDE1Ci0g
ICAgZ2xDbGVhciAgICAgICAgICAgICAgICAgICAgICAgICBAMTYKLSAgICBnbENsZWFyQ29sb3Ig
ICAgICAgICAgICAgICAgICAgIEAxNwotICAgIGdsQ2xlYXJEZXB0aGYgICAgICAgICAgICAgICAg
ICAgQDE4Ci0gICAgZ2xDbGVhclN0ZW5jaWwgICAgICAgICAgICAgICAgICBAMTkKLSAgICBnbENv
bG9yTWFzayAgICAgICAgICAgICAgICAgICAgIEAyMAotICAgIGdsQ29tcGlsZVNoYWRlciAgICAg
ICAgICAgICAgICAgQDIxCi0gICAgZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRCAgICAgICAgICBAMjIK
LSAgICBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEICAgICAgIEAyMwotICAgIGdsQ29weVRleElt
YWdlMkQgICAgICAgICAgICAgICAgQDI0Ci0gICAgZ2xDb3B5VGV4U3ViSW1hZ2UyRCAgICAgICAg
ICAgICBAMjUKLSAgICBnbENyZWF0ZVByb2dyYW0gICAgICAgICAgICAgICAgIEAyNgotICAgIGds
Q3JlYXRlU2hhZGVyICAgICAgICAgICAgICAgICAgQDI3Ci0gICAgZ2xDdWxsRmFjZSAgICAgICAg
ICAgICAgICAgICAgICBAMjgKLSAgICBnbERlbGV0ZUJ1ZmZlcnMgICAgICAgICAgICAgICAgIEAy
OQotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzICAgICAgICAgICAgQDMwCi0gICAgZ2xEZWxldGVQ
cm9ncmFtICAgICAgICAgICAgICAgICBAMzIKLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMgICAg
ICAgICAgIEAzMwotICAgIGdsRGVsZXRlU2hhZGVyICAgICAgICAgICAgICAgICAgQDM0Ci0gICAg
Z2xEZWxldGVUZXh0dXJlcyAgICAgICAgICAgICAgICBAMzEKLSAgICBnbERlcHRoRnVuYyAgICAg
ICAgICAgICAgICAgICAgIEAzNgotICAgIGdsRGVwdGhNYXNrICAgICAgICAgICAgICAgICAgICAg
QDM3Ci0gICAgZ2xEZXB0aFJhbmdlZiAgICAgICAgICAgICAgICAgICBAMzgKLSAgICBnbERldGFj
aFNoYWRlciAgICAgICAgICAgICAgICAgIEAzNQotICAgIGdsRGlzYWJsZSAgICAgICAgICAgICAg
ICAgICAgICAgQDM5Ci0gICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkgICAgICBANDAKLSAg
ICBnbERyYXdBcnJheXMgICAgICAgICAgICAgICAgICAgIEA0MQotICAgIGdsRHJhd0VsZW1lbnRz
ICAgICAgICAgICAgICAgICAgQDQyCi0gICAgZ2xFbmFibGUgICAgICAgICAgICAgICAgICAgICAg
ICBANDMKLSAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5ICAgICAgIEA0NAotICAgIGdsRmlu
aXNoICAgICAgICAgICAgICAgICAgICAgICAgQDQ1Ci0gICAgZ2xGbHVzaCAgICAgICAgICAgICAg
ICAgICAgICAgICBANDYKLSAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyICAgICAgIEA0Nwot
ICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQgICAgICAgICAgQDQ4Ci0gICAgZ2xGcm9udEZhY2Ug
ICAgICAgICAgICAgICAgICAgICBANDkKLSAgICBnbEdlbkJ1ZmZlcnMgICAgICAgICAgICAgICAg
ICAgIEA1MAotICAgIGdsR2VuRnJhbWVidWZmZXJzICAgICAgICAgICAgICAgQDUyCi0gICAgZ2xH
ZW5SZW5kZXJidWZmZXJzICAgICAgICAgICAgICBANTMKLSAgICBnbEdlblRleHR1cmVzICAgICAg
ICAgICAgICAgICAgIEA1NAotICAgIGdsR2VuZXJhdGVNaXBtYXAgICAgICAgICAgICAgICAgQDUx
Ci0gICAgZ2xHZXRBY3RpdmVBdHRyaWIgICAgICAgICAgICAgICBANTUKLSAgICBnbEdldEFjdGl2
ZVVuaWZvcm0gICAgICAgICAgICAgIEA1NgotICAgIGdsR2V0QXR0YWNoZWRTaGFkZXJzICAgICAg
ICAgICAgQDU3Ci0gICAgZ2xHZXRBdHRyaWJMb2NhdGlvbiAgICAgICAgICAgICBANTgKLSAgICBn
bEdldEJvb2xlYW52ICAgICAgICAgICAgICAgICAgIEA1OQotICAgIGdsR2V0QnVmZmVyUGFyYW1l
dGVyaXYgICAgICAgICAgQDYwCi0gICAgZ2xHZXRFcnJvciAgICAgICAgICAgICAgICAgICAgICBA
NjEKLSAgICBnbEdldEZsb2F0diAgICAgICAgICAgICAgICAgICAgIEA2MgotICAgIGdsR2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYgICBANjMKLSAgICBnbEdldEludGVnZXJ2ICAg
ICAgICAgICAgICAgICAgIEA2NAotICAgIGdsR2V0UHJvZ3JhbUluZm9Mb2cgICAgICAgICAgICAg
QDY2Ci0gICAgZ2xHZXRQcm9ncmFtaXYgICAgICAgICAgICAgICAgICBANjUKLSAgICBnbEdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2ICAgIEA2NwotICAgIGdsR2V0U2hhZGVySW5mb0xvZyAgICAg
ICAgICAgICAgQDY5Ci0gICAgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQgICAgICBANzAKLSAg
ICBnbEdldFNoYWRlclNvdXJjZSAgICAgICAgICAgICAgIEA3MQotICAgIGdsR2V0U2hhZGVyaXYg
ICAgICAgICAgICAgICAgICAgQDY4Ci0gICAgZ2xHZXRTdHJpbmcgICAgICAgICAgICAgICAgICAg
ICBANzIKLSAgICBnbEdldFRleFBhcmFtZXRlcmZ2ICAgICAgICAgICAgIEA3MwotICAgIGdsR2V0
VGV4UGFyYW1ldGVyaXYgICAgICAgICAgICAgQDc0Ci0gICAgZ2xHZXRVbmlmb3JtTG9jYXRpb24g
ICAgICAgICAgICBANzcKLSAgICBnbEdldFVuaWZvcm1mdiAgICAgICAgICAgICAgICAgIEA3NQot
ICAgIGdsR2V0VW5pZm9ybWl2ICAgICAgICAgICAgICAgICAgQDc2Ci0gICAgZ2xHZXRWZXJ0ZXhB
dHRyaWJQb2ludGVydiAgICAgICBAODAKLSAgICBnbEdldFZlcnRleEF0dHJpYmZ2ICAgICAgICAg
ICAgIEA3OAotICAgIGdsR2V0VmVydGV4QXR0cmliaXYgICAgICAgICAgICAgQDc5Ci0gICAgZ2xI
aW50ICAgICAgICAgICAgICAgICAgICAgICAgICBAODEKLSAgICBnbElzQnVmZmVyICAgICAgICAg
ICAgICAgICAgICAgIEA4MgotICAgIGdsSXNFbmFibGVkICAgICAgICAgICAgICAgICAgICAgQDgz
Ci0gICAgZ2xJc0ZyYW1lYnVmZmVyICAgICAgICAgICAgICAgICBAODQKLSAgICBnbElzUHJvZ3Jh
bSAgICAgICAgICAgICAgICAgICAgIEA4NQotICAgIGdsSXNSZW5kZXJidWZmZXIgICAgICAgICAg
ICAgICAgQDg2Ci0gICAgZ2xJc1NoYWRlciAgICAgICAgICAgICAgICAgICAgICBAODcKLSAgICBn
bElzVGV4dHVyZSAgICAgICAgICAgICAgICAgICAgIEA4OAotICAgIGdsTGluZVdpZHRoICAgICAg
ICAgICAgICAgICAgICAgQDg5Ci0gICAgZ2xMaW5rUHJvZ3JhbSAgICAgICAgICAgICAgICAgICBA
OTAKLSAgICBnbFBpeGVsU3RvcmVpICAgICAgICAgICAgICAgICAgIEA5MQotICAgIGdsUG9seWdv
bk9mZnNldCAgICAgICAgICAgICAgICAgQDkyCi0gICAgZ2xSZWFkUGl4ZWxzICAgICAgICAgICAg
ICAgICAgICBAOTMKLSAgICBnbFJlbGVhc2VTaGFkZXJDb21waWxlciAgICAgICAgIEA5NAotICAg
IGdsUmVuZGVyYnVmZmVyU3RvcmFnZSAgICAgICAgICAgQDk1Ci0gICAgZ2xTYW1wbGVDb3ZlcmFn
ZSAgICAgICAgICAgICAgICBAOTYKLSAgICBnbFNjaXNzb3IgICAgICAgICAgICAgICAgICAgICAg
IEA5NwotICAgIGdsU2hhZGVyQmluYXJ5ICAgICAgICAgICAgICAgICAgQDk4Ci0gICAgZ2xTaGFk
ZXJTb3VyY2UgICAgICAgICAgICAgICAgICBAOTkKLSAgICBnbFN0ZW5jaWxGdW5jICAgICAgICAg
ICAgICAgICAgIEAxMDAKLSAgICBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUgICAgICAgICAgIEAxMDEK
LSAgICBnbFN0ZW5jaWxNYXNrICAgICAgICAgICAgICAgICAgIEAxMDIKLSAgICBnbFN0ZW5jaWxN
YXNrU2VwYXJhdGUgICAgICAgICAgIEAxMDMKLSAgICBnbFN0ZW5jaWxPcCAgICAgICAgICAgICAg
ICAgICAgIEAxMDQKLSAgICBnbFN0ZW5jaWxPcFNlcGFyYXRlICAgICAgICAgICAgIEAxMDUKLSAg
ICBnbFRleEltYWdlMkQgICAgICAgICAgICAgICAgICAgIEAxMDYKLSAgICBnbFRleFBhcmFtZXRl
cmYgICAgICAgICAgICAgICAgIEAxMDcKLSAgICBnbFRleFBhcmFtZXRlcmZ2ICAgICAgICAgICAg
ICAgIEAxMDgKLSAgICBnbFRleFBhcmFtZXRlcmkgICAgICAgICAgICAgICAgIEAxMDkKLSAgICBn
bFRleFBhcmFtZXRlcml2ICAgICAgICAgICAgICAgIEAxMTAKLSAgICBnbFRleFN1YkltYWdlMkQg
ICAgICAgICAgICAgICAgIEAxMTEKLSAgICBnbFVuaWZvcm0xZiAgICAgICAgICAgICAgICAgICAg
IEAxMTIKLSAgICBnbFVuaWZvcm0xZnYgICAgICAgICAgICAgICAgICAgIEAxMTMKLSAgICBnbFVu
aWZvcm0xaSAgICAgICAgICAgICAgICAgICAgIEAxMTQKLSAgICBnbFVuaWZvcm0xaXYgICAgICAg
ICAgICAgICAgICAgIEAxMTUKLSAgICBnbFVuaWZvcm0yZiAgICAgICAgICAgICAgICAgICAgIEAx
MTYKLSAgICBnbFVuaWZvcm0yZnYgICAgICAgICAgICAgICAgICAgIEAxMTcKLSAgICBnbFVuaWZv
cm0yaSAgICAgICAgICAgICAgICAgICAgIEAxMTgKLSAgICBnbFVuaWZvcm0yaXYgICAgICAgICAg
ICAgICAgICAgIEAxMTkKLSAgICBnbFVuaWZvcm0zZiAgICAgICAgICAgICAgICAgICAgIEAxMjAK
LSAgICBnbFVuaWZvcm0zZnYgICAgICAgICAgICAgICAgICAgIEAxMjEKLSAgICBnbFVuaWZvcm0z
aSAgICAgICAgICAgICAgICAgICAgIEAxMjIKLSAgICBnbFVuaWZvcm0zaXYgICAgICAgICAgICAg
ICAgICAgIEAxMjMKLSAgICBnbFVuaWZvcm00ZiAgICAgICAgICAgICAgICAgICAgIEAxMjQKLSAg
ICBnbFVuaWZvcm00ZnYgICAgICAgICAgICAgICAgICAgIEAxMjUKLSAgICBnbFVuaWZvcm00aSAg
ICAgICAgICAgICAgICAgICAgIEAxMjYKLSAgICBnbFVuaWZvcm00aXYgICAgICAgICAgICAgICAg
ICAgIEAxMjcKLSAgICBnbFVuaWZvcm1NYXRyaXgyZnYgICAgICAgICAgICAgIEAxMjgKLSAgICBn
bFVuaWZvcm1NYXRyaXgzZnYgICAgICAgICAgICAgIEAxMjkKLSAgICBnbFVuaWZvcm1NYXRyaXg0
ZnYgICAgICAgICAgICAgIEAxMzAKLSAgICBnbFVzZVByb2dyYW0gICAgICAgICAgICAgICAgICAg
IEAxMzEKLSAgICBnbFZhbGlkYXRlUHJvZ3JhbSAgICAgICAgICAgICAgIEAxMzIKLSAgICBnbFZl
cnRleEF0dHJpYjFmICAgICAgICAgICAgICAgIEAxMzMKLSAgICBnbFZlcnRleEF0dHJpYjFmdiAg
ICAgICAgICAgICAgIEAxMzQKLSAgICBnbFZlcnRleEF0dHJpYjJmICAgICAgICAgICAgICAgIEAx
MzUKLSAgICBnbFZlcnRleEF0dHJpYjJmdiAgICAgICAgICAgICAgIEAxMzYKLSAgICBnbFZlcnRl
eEF0dHJpYjNmICAgICAgICAgICAgICAgIEAxMzcKLSAgICBnbFZlcnRleEF0dHJpYjNmdiAgICAg
ICAgICAgICAgIEAxMzgKLSAgICBnbFZlcnRleEF0dHJpYjRmICAgICAgICAgICAgICAgIEAxMzkK
LSAgICBnbFZlcnRleEF0dHJpYjRmdiAgICAgICAgICAgICAgIEAxNDAKLSAgICBnbFZlcnRleEF0
dHJpYlBvaW50ZXIgICAgICAgICAgIEAxNDEKLSAgICBnbFZpZXdwb3J0ICAgICAgICAgICAgICAg
ICAgICAgIEAxNDIKLQotICAgIDsgRXh0ZW5zaW9ucwotICAgIGdsVGV4SW1hZ2UzRE9FUyAgICAg
ICAgICAgICAgICAgQDE0MwotICAgIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUgICAgICAgICAgQDE0
OQotICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUgQDE1MAotICAgIAot
ICAgIDsgRUdMIGRlcGVuZGVuY2llcwotICAgIGdsQ3JlYXRlQ29udGV4dCAgICAgICAgICAgICAg
ICAgQDE0NCBOT05BTUUKLSAgICBnbERlc3Ryb3lDb250ZXh0ICAgICAgICAgICAgICAgIEAxNDUg
Tk9OQU1FCi0gICAgZ2xNYWtlQ3VycmVudCAgICAgICAgICAgICAgICAgICBAMTQ2IE5PTkFNRQot
ICAgIGdsR2V0Q3VycmVudENvbnRleHQgICAgICAgICAgICAgQDE0NyBOT05BTUUKLSAgICBnbEdl
dFByb2NBZGRyZXNzICAgICAgICAgICAgICAgIEAxNDggTk9OQU1FClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagkocmV2aXNp
b24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzY1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
IldpbmRvd3MtMTI1MiI/PgotPFZpc3VhbFN0dWRpb1Byb2plY3QKLQlQcm9qZWN0VHlwZT0iVmlz
dWFsIEMrKyIKLQlWZXJzaW9uPSI5LjAwIgotCU5hbWU9ImxpYkdMRVN2MiIKLQlQcm9qZWN0R1VJ
RD0ie0I1ODcxQTdBLTk2OEMtNDJFMy1BMzNCLTk4MUU2RjQ0OEU3OH0iCi0JUm9vdE5hbWVzcGFj
ZT0ibGliR0xFU3YyIgotCUtleXdvcmQ9IldpbjMyUHJvaiIKLQlUYXJnZXRGcmFtZXdvcmtWZXJz
aW9uPSIxMzEwNzIiCi0JPgotCTxQbGF0Zm9ybXM+Ci0JCTxQbGF0Zm9ybQotCQkJTmFtZT0iV2lu
MzIiCi0JCS8+Ci0JPC9QbGF0Zm9ybXM+Ci0JPFRvb2xGaWxlcz4KLQk8L1Rvb2xGaWxlcz4KLQk8
Q29uZmlndXJhdGlvbnM+Ci0JCTxDb25maWd1cmF0aW9uCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiIK
LQkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIK
LQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCi0JCQlDb25m
aWd1cmF0aW9uVHlwZT0iMiIKLQkJCUNoYXJhY3RlclNldD0iMSIKLQkJCT4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9
IlZDQ3VzdG9tQnVpbGRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNYTUxEYXRh
R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDV2ViU2VydmljZVBy
b3h5R2VuZXJhdG9yVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTUlETFRvb2wi
Ci0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCU9wdGlt
aXphdGlvbj0iMCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKFByb2plY3RE
aXIpLy4uOyAkKFByb2plY3REaXIpLy4uLy4uL2luY2x1ZGUiCi0JCQkJUHJlcHJvY2Vzc29yRGVm
aW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdMRVNWMl9FWFBPUlRT
O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtOT01JTk1BWCIKLQkJCQlNaW5pbWFsUmVidWlsZD0i
dHJ1ZSIKLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCi0JCQkJUnVudGltZUxpYnJhcnk9IjEi
Ci0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJV2FybmluZ0xldmVsPSIzIgotCQkJ
CURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iZmFsc2UiCi0JCQkJRGVidWdJbmZvcm1h
dGlvbkZvcm1hdD0iNCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291
cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNv
bXBpbGVyVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9v
bCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlv
bmFsRGVwZW5kZW5jaWVzPSJEM2R4OS5saWIiCi0JCQkJTGlua0luY3JlbWVudGFsPSIyIgotCQkJ
CU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJHTEVTdjIuZGVmIgotCQkJCUdlbmVyYXRlRGVidWdJ
bmZvcm1hdGlvbj0idHJ1ZSIKLQkJCQlTdWJTeXN0ZW09IjIiCi0JCQkJUmFuZG9taXplZEJhc2VB
ZGRyZXNzPSIxIgotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgotCQkJCVRhcmdldE1h
Y2hpbmU9IjEiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQnNj
TWFrZVRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKLQkJCS8+
Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCi0JCQkJQ29tbWFuZExpbmU9IkBlY2hv
IG9uJiN4MEQ7JiN4MEE7bWtkaXIgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENvbmZp
Z3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxsaWJH
TEVTdjIuZGxsJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1cmF0
aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7Y29weSAmcXVvdDskKE91dERpcilcbGliR0xFU3Yy
LmxpYiZxdW90OyAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGliXCQoQ29uZmlndXJhdGlvbk5h
bWUpXCZxdW90OyYjeDBEOyYjeDBBO0BlY2hvIG9mZiYjeDBEOyYjeDBBOyIKLQkJCS8+Ci0JCTwv
Q29uZmlndXJhdGlvbj4KLQkJPENvbmZpZ3VyYXRpb24KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIi
Ci0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSki
Ci0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgotCQkJQ29u
ZmlndXJhdGlvblR5cGU9IjIiCi0JCQlDaGFyYWN0ZXJTZXQ9IjEiCi0JCQlXaG9sZVByb2dyYW1P
cHRpbWl6YXRpb249IjEiCi0JCQk+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVu
dFRvb2wiCi0JCQkvPgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKLQkJ
CS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCi0JCQkv
PgotCQkJPFRvb2wKLQkJCQlOYW1lPSJWQ01JRExUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlPcHRpbWl6YXRpb249IjIiCi0JCQkJSW5saW5l
RnVuY3Rpb25FeHBhbnNpb249IjIiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0i
JChQcm9qZWN0RGlyKS8uLjsgJChQcm9qZWN0RGlyKS8uLi8uLi9pbmNsdWRlIgotCQkJCVByZXBy
b2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHTEVT
VjJfRVhQT1JUUztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7Tk9NSU5NQVg7X1NFQ1VSRV9TQ0w9
MCIKLQkJCQlSdW50aW1lTGlicmFyeT0iMCIKLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIK
LQkJCQlXYXJuaW5nTGV2ZWw9IjMiCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1z
PSJmYWxzZSIKLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgotCQkJLz4KLQkJCTxUb29s
Ci0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCi0JCQkvPgotCQkJPFRv
b2wKLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgotCQkJLz4KLQkJCTxUb29sCi0J
CQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0i
VkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IkQzZHg5LmxpYiIKLQkJ
CQlMaW5rSW5jcmVtZW50YWw9IjEiCi0JCQkJSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz0iZmFs
c2UiCi0JCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9ImxpYkdMRVN2Mi5kZWYiCi0JCQkJR2VuZXJh
dGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgotCQkJCVN1YlN5c3RlbT0iMiIKLQkJCQlPcHRpbWl6
ZVJlZmVyZW5jZXM9IjIiCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKLQkJCQlSYW5kb21p
emVkQmFzZUFkZHJlc3M9IjEiCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCi0JCQkJ
VGFyZ2V0TWFjaGluZT0iMSIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDQUxpbmtUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCi0JCQkvPgotCQkJ
PFRvb2wKLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFt
ZT0iVkNCc2NNYWtlVG9vbCIKLQkJCS8+Ci0JCQk8VG9vbAotCQkJCU5hbWU9IlZDRnhDb3BUb29s
IgotCQkJLz4KLQkJCTxUb29sCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCi0JCQkvPgot
CQkJPFRvb2wKLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKLQkJCQlDb21tYW5kTGlu
ZT0iQGVjaG8gb24mI3gwRDsmI3gwQTtta2RpciAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cbGli
XCQoQ29uZmlndXJhdGlvbk5hbWUpXCZxdW90OyYjeDBEOyYjeDBBO2NvcHkgJnF1b3Q7JChPdXRE
aXIpXGxpYkdMRVN2Mi5kbGwmcXVvdDsgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXGxpYlwkKENv
bmZpZ3VyYXRpb25OYW1lKVwmcXVvdDsmI3gwRDsmI3gwQTtjb3B5ICZxdW90OyQoT3V0RGlyKVxs
aWJHTEVTdjIubGliJnF1b3Q7ICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxsaWJcJChDb25maWd1
cmF0aW9uTmFtZSlcJnF1b3Q7JiN4MEQ7JiN4MEE7QGVjaG8gb2ZmJiN4MEQ7JiN4MEE7IgotCQkJ
Lz4KLQkJPC9Db25maWd1cmF0aW9uPgotCTwvQ29uZmlndXJhdGlvbnM+Ci0JPFJlZmVyZW5jZXM+
Ci0JPC9SZWZlcmVuY2VzPgotCTxGaWxlcz4KLQkJPEZpbHRlcgotCQkJTmFtZT0iU291cmNlIEZp
bGVzIgotCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNt
eCIKLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1
MkEyRkZ9IgotCQkJPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQmxpdC5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cQnVmZmVyLmNw
cCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxDb250
ZXh0LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cY29tbW9uXGRlYnVnLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLlxGcmFtZWJ1ZmZlci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbGliR0xFU3YyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWluLmNwcCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxQcm9ncmFtLmNwcCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxSZWZDb3VudE9iamVjdC5j
cHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVu
ZGVyYnVmZmVyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLlxSZXNvdXJjZU1hbmFnZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXFNoYWRlci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cVGV4dHVyZS5jcHAiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cdXRpbGl0aWVzLmNwcCIKLQkJCQk+Ci0J
CQk8L0ZpbGU+Ci0JCQk8RmlsdGVyCi0JCQkJTmFtZT0iR2VvbWV0cnkiCi0JCQkJPgotCQkJCTxG
aWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxiYWNrZW5kLmNwcCIKLQkJCQkJPgot
CQkJCTwvRmlsZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcZHg5
LmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9
Ii5cZ2VvbWV0cnlcSW5kZXhEYXRhTWFuYWdlci5jcHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0J
CQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XFZlcnRleERhdGFNYW5hZ2Vy
LmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCTwvRmlsdGVyPgotCQk8L0ZpbHRlcj4KLQkJ
PEZpbHRlcgotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgotCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07
aW5sO2luYzt4c2QiCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4
RUItNjI1RkJFNTJFQkZCfSIKLQkJCT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXEJs
aXQuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxC
dWZmZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
LlxDb250ZXh0LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii5cRnJhbWVidWZmZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caW5jbHVkZVxHTEVTMlxnbDJleHQu
aCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aW5jbHVkZVxHTEVTMlxnbDJwbGF0Zm9ybS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXG1haW4uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxtYXRodXRpbC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFByb2dyYW0uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLlxSZWZDb3VudE9iamVjdC5oIgotCQkJCT4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZlci5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuXFJlc291
cmNlTWFuYWdlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuXFNoYWRlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuXFRleHR1cmUuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLlx1dGlsaXRpZXMuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsdGVy
Ci0JCQkJTmFtZT0iR2VvbWV0cnkiCi0JCQkJPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0
aD0iLlxnZW9tZXRyeVxiYWNrZW5kLmgiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUK
LQkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XGR4OS5oIgotCQkJCQk+Ci0JCQkJPC9GaWxl
PgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxJbmRleERhdGFNYW5h
Z2VyLmgiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRo
PSIuXGdlb21ldHJ5XHZlcnRleGNvbnZlcnNpb24uaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJ
CQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcVmVydGV4RGF0YU1hbmFnZXIu
aCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCTwvRmlsdGVyPgotCQk8L0ZpbHRlcj4KLQkJPEZp
bGUKLQkJCVJlbGF0aXZlUGF0aD0iLlxsaWJHTEVTdjIuZGVmIgotCQkJPgotCQk8L0ZpbGU+Ci0J
PC9GaWxlcz4KLQk8R2xvYmFscz4KLQk8L0dsb2JhbHM+Ci08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+
CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL21haW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9saWJHTEVTdjIvbWFpbi5jcHAJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUvc3JjL2xp
YkdMRVN2Mi9tYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDMgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gbWFpbi5jcHA6IERMTCBlbnRyeSBwb2ludCBhbmQgbWFuYWdlbWVu
dCBvZiB0aHJlYWQtbG9jYWwgZGF0YS4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0K
LSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgot
Ci0jaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCi0KLXN0YXRpYyBEV09SRCBjdXJy
ZW50VExTID0gVExTX09VVF9PRl9JTkRFWEVTOwotCi1CT09MIFdJTkFQSSBEbGxNYWluKEhJTlNU
QU5DRSBpbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCi17Ci0gICAgc3dp
dGNoIChyZWFzb24pCi0gICAgewotICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGN1cnJlbnRUTFMgPSBUbHNBbGxvYygpOwotCi0gICAgICAgICAg
ICBpZiAoY3VycmVudFRMUyA9PSBUTFNfT1VUX09GX0lOREVYRVMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIC8vIEZhbGwgdGhyb3VnaHQgdG8gaW5pdGlhbGl6ZSBpbmRleAotICAgICAgY2FzZSBE
TExfVEhSRUFEX0FUVEFDSDoKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6OkN1cnJlbnQgKmN1
cnJlbnQgPSAoZ2w6OkN1cnJlbnQqKUxvY2FsQWxsb2MoTFBUUiwgc2l6ZW9mKGdsOjpDdXJyZW50
KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIFRsc1NldFZhbHVlKGN1cnJlbnRUTFMsIGN1cnJlbnQpOwotCi0gICAgICAgICAgICAg
ICAgY3VycmVudC0+Y29udGV4dCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgY3VycmVudC0+ZGlz
cGxheSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgotICAgICAgICB7Ci0gICAgICAgICAgICB2b2lk
ICpjdXJyZW50ID0gVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICAgICAgICAgIGlmIChj
dXJyZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2FsRnJlZSgoSExPQ0FM
KWN1cnJlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQg
KmN1cnJlbnQgPSBUbHNHZXRWYWx1ZShjdXJyZW50VExTKTsKLQotICAgICAgICAgICAgaWYgKGN1
cnJlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jYWxGcmVlKChITE9DQUwp
Y3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFRsc0ZyZWUoY3VycmVudFRM
Uyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotbmFtZXNwYWNlIGdsCi17Ci12
b2lkIG1ha2VDdXJyZW50KENvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwg
ZWdsOjpTdXJmYWNlICpzdXJmYWNlKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVu
dCopVGxzR2V0VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICBjdXJyZW50LT5jb250ZXh0ID0gY29u
dGV4dDsKLSAgICBjdXJyZW50LT5kaXNwbGF5ID0gZGlzcGxheTsKLQotICAgIGlmIChjb250ZXh0
ICYmIGRpc3BsYXkgJiYgc3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIGNvbnRleHQtPm1ha2VDdXJy
ZW50KGRpc3BsYXksIHN1cmZhY2UpOwotICAgIH0KLX0KLQotQ29udGV4dCAqZ2V0Q29udGV4dCgp
Ci17Ci0gICAgQ3VycmVudCAqY3VycmVudCA9IChDdXJyZW50KilUbHNHZXRWYWx1ZShjdXJyZW50
VExTKTsKLQotICAgIHJldHVybiBjdXJyZW50LT5jb250ZXh0OwotfQotCi1lZ2w6OkRpc3BsYXkg
KmdldERpc3BsYXkoKQotewotICAgIEN1cnJlbnQgKmN1cnJlbnQgPSAoQ3VycmVudCopVGxzR2V0
VmFsdWUoY3VycmVudFRMUyk7Ci0KLSAgICByZXR1cm4gY3VycmVudC0+ZGlzcGxheTsKLX0KLQot
SURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCkKLXsKLSAgICBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkgPSBnZXREaXNwbGF5KCk7Ci0KLSAgICByZXR1cm4gZGlzcGxheS0+Z2V0RGV2aWNlKCk7Ci19
Ci19Ci0KLS8vIFJlY29yZHMgYW4gZXJyb3IgY29kZQotdm9pZCBlcnJvcihHTGVudW0gZXJyb3JD
b2RlKQotewotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2xHZXRDdXJyZW50Q29udGV4dCgp
OwotCi0gICAgaWYgKGNvbnRleHQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGVycm9yQ29kZSkK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9FTlVNOgotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3JkSW52YWxpZEVudW0oKTsKLSAgICAgICAgICAgIGdsOjp0cmFjZSgiXHQh
IEVycm9yIGdlbmVyYXRlZDogaW52YWxpZCBlbnVtXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfSU5WQUxJRF9WQUxVRToKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y29yZEludmFsaWRWYWx1ZSgpOwotICAgICAgICAgICAgZ2w6OnRyYWNlKCJcdCEgRXJyb3IgZ2Vu
ZXJhdGVkOiBpbnZhbGlkIHZhbHVlXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfSU5WQUxJRF9PUEVSQVRJT046Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvcmRJ
bnZhbGlkT3BlcmF0aW9uKCk7Ci0gICAgICAgICAgICBnbDo6dHJhY2UoIlx0ISBFcnJvciBnZW5l
cmF0ZWQ6IGludmFsaWQgb3BlcmF0aW9uXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgR0xfT1VUX09GX01FTU9SWToKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY29yZE91
dE9mTWVtb3J5KCk7Ci0gICAgICAgICAgICBnbDo6dHJhY2UoIlx0ISBFcnJvciBnZW5lcmF0ZWQ6
IG91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y29yZEludmFsaWRGcmFtZWJ1ZmZlck9wZXJhdGlvbigpOwotICAgICAgICAgICAgZ2w6OnRyYWNl
KCJcdCEgRXJyb3IgZ2VuZXJhdGVkOiBpbnZhbGlkIGZyYW1lYnVmZmVyIG9wZXJhdGlvblxuIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICB9Ci0gICAgfQotfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHJldmlzaW9uIDc0NjU4KQor
KysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWFpbi5oOiBNYW5hZ2VtZW50IG9mIHRocmVh
ZC1sb2NhbCBkYXRhLgotCi0jaWZuZGVmIExJQkdMRVNWMl9NQUlOX0hfCi0jZGVmaW5lIExJQkdM
RVNWMl9NQUlOX0hfCi0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5o
PgotI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
Ci0jaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250
ZXh0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotc3RydWN0IEN1cnJlbnQKLXsKLSAgICBDb250ZXh0
ICpjb250ZXh0OwotICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheTsKLX07Ci0KLXZvaWQgbWFrZUN1
cnJlbnQoQ29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZh
Y2UgKnN1cmZhY2UpOwotCi1Db250ZXh0ICpnZXRDb250ZXh0KCk7Ci1lZ2w6OkRpc3BsYXkgKmdl
dERpc3BsYXkoKTsKLQotSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCk7Ci19Ci0KLXZvaWQg
ZXJyb3IoR0xlbnVtIGVycm9yQ29kZSk7Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1jb25zdCBUICZl
cnJvcihHTGVudW0gZXJyb3JDb2RlLCBjb25zdCBUICZyZXR1cm5WYWx1ZSkKLXsKLSAgICBlcnJv
cihlcnJvckNvZGUpOwotCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi0jZW5kaWYgICAv
LyBMSUJHTEVTVjJfTUFJTl9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYXRodXRpbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbWF0aHV0aWwuaAkocmV2aXNpb24g
NzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL21hdGh1dGlsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjYgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gbWF0aHV0aWwuaDogTWF0
aCBhbmQgYml0IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX01B
VEhVVElMX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9NQVRIVVRJTF9IXwotCi0jaW5jbHVkZSA8bWF0
aC5oPgotCi1uYW1lc3BhY2UgZ2wKLXsKLWlubGluZSBib29sIGlzUG93MihpbnQgeCkKLXsKLSAg
ICByZXR1cm4gKHggJiAoeCAtIDEpKSA9PSAwICYmICh4ICE9IDApOwotfQotCi1pbmxpbmUgaW50
IGxvZzIoaW50IHgpCi17Ci0gICAgaW50IHIgPSAwOwotICAgIHdoaWxlICgoeCA+PiByKSA+IDEp
IHIrKzsKLSAgICByZXR1cm4gcjsKLX0KLQotaW5saW5lIHVuc2lnbmVkIGludCBjZWlsUG93Mih1
bnNpZ25lZCBpbnQgeCkKLXsKLSAgICBpZiAoeCAhPSAwKSB4LS07Ci0gICAgeCB8PSB4ID4+IDE7
Ci0gICAgeCB8PSB4ID4+IDI7Ci0gICAgeCB8PSB4ID4+IDQ7Ci0gICAgeCB8PSB4ID4+IDg7Ci0g
ICAgeCB8PSB4ID4+IDE2OwotICAgIHgrKzsKLQotICAgIHJldHVybiB4OwotfQotCi1pbmxpbmUg
ZmxvYXQgY2xhbXAwMShmbG9hdCB4KQotewotICAgIHJldHVybiB4IDwgMCA/IDAgOiAoeCA+IDEg
PyAxIDogeCk7Ci19Ci0KLXRlbXBsYXRlPGNvbnN0IGludCBuPgotaW5saW5lIHVuc2lnbmVkIGlu
dCB1bm9ybShmbG9hdCB4KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXggPSAweEZGRkZG
RkZGID4+ICgzMiAtIG4pOwotCi0gICAgaWYgKHggPiAxKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1heDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoeCA8IDApCi0gICAgewotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQp
KG1heCAqIHggKyAwLjVmKTsKLSAgICB9Ci19Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9N
QVRIVVRJTF9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAkocmV2aXNpb24gNzQ2
NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjc0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIHV0aWxpdGllcy5jcHA6
IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzLgotCi0jaW5j
bHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotCi0jaW5jbHVkZSA8bGltaXRzPgotCi0jaW5j
bHVkZSAiY29tbW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotaW50
IFVuaWZvcm1Db21wb25lbnRDb3VudChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUp
Ci0gICAgewotICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAg
IGNhc2UgR0xfSU5UOgotICAgICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSBHTF9CT09MX1ZF
QzI6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0lOVF9WRUMyOgot
ICAgICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgotICAgICAgICAgIHJldHVy
biAzOwotICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6
Ci0gICAgICBjYXNlIEdMX0lOVF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAg
ICAgICAgIHJldHVybiA0OwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICAgIHJl
dHVybiA5OwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICAgIHJldHVybiAxNjsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotR0xlbnVtIFVuaWZvcm1Db21wb25lbnRUeXBlKEdMZW51bSB0eXBlKQot
ewotICAgIHN3aXRjaCh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgIGNh
c2UgR0xfQk9PTF9WRUMyOgotICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6Ci0gICAgICBjYXNlIEdM
X0JPT0xfVkVDNDoKLSAgICAgICAgICByZXR1cm4gR0xfQk9PTDsKLSAgICAgIGNhc2UgR0xfRkxP
QVQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6
Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0g
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAg
ICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICBjYXNlIEdM
X0lOVF9WRUMyOgotICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKLSAgICAgIGNhc2UgR0xfSU5UX1ZF
QzQ6Ci0gICAgICAgICAgcmV0dXJuIEdMX0lOVDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfTk9ORTsKLX0KLQotc2l6ZV90
IFVuaWZvcm1UeXBlU2l6ZShHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2godHlwZSkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX0JPT0w6ICByZXR1cm4gc2l6ZW9mKEdMYm9vbGVhbik7Ci0gICAgICBj
YXNlIEdMX0ZMT0FUOiByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOwotICAgICAgY2FzZSBHTF9JTlQ6
ICAgcmV0dXJuIHNpemVvZihHTGludCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFVuaWZvcm1UeXBl
U2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkgKiBVbmlmb3JtQ29tcG9uZW50Q291bnQo
dHlwZSk7Ci19Ci0KLWludCBWYXJpYWJsZVJvd0NvdW50KEdMZW51bSB0eXBlKQotewotICAgIHN3
aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6Ci0gICAgICAgIHJldHVybiAw
OwotICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2Ug
R0xfSU5UOgotICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzI6Ci0gICAgICBjYXNlIEdMX0lOVF9WRUMyOgotICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKLSAg
ICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgotICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Ci0gICAgICBjYXNl
IEdMX0lOVF9WRUM0OgotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjoKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAg
IHJldHVybiAzOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICByZXR1cm4gNDsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLWludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51bSB0eXBlKQotewotICAg
IHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6Ci0gICAgICAgIHJldHVy
biAwOwotICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNh
c2UgR0xfSU5UOgotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgot
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKLSAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgICBjYXNlIEdMX0lO
VF9WRUMzOgotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgY2FzZSBHTF9CT09MX1ZF
QzM6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHJldHVybiAzOwotICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzQ6Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Ci0gICAgICBjYXNl
IEdMX0lOVF9WRUM0OgotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICByZXR1cm4g
NDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIDA7Ci19Ci0KLWludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQgaW50ICpi
aXRzLCB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRzU2l6ZSkK
LXsKLSAgICBBU1NFUlQoYWxsb2NhdGlvblNpemUgPD0gYml0c1NpemUpOwotCi0gICAgdW5zaWdu
ZWQgaW50IG1hc2sgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpID4+
IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46OmRpZ2l0cyAtIGFsbG9jYXRpb25T
aXplKTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYml0c1NpemUgLSBhbGxv
Y2F0aW9uU2l6ZSArIDE7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICgoKmJpdHMgJiBtYXNrKSA9
PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICAqYml0cyB8PSBtYXNrOwotICAgICAgICAgICAg
cmV0dXJuIGk7Ci0gICAgICAgIH0KLQotICAgICAgICBtYXNrIDw8PSAxOwotICAgIH0KLQotICAg
IHJldHVybiAtMTsKLX0KLQotR0xzaXplaSBDb21wdXRlUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IGFsaWdubWVudCkKLXsKLSAgICBBU1NFUlQo
YWxpZ25tZW50ID4gMCAmJiBpc1BvdzIoYWxpZ25tZW50KSk7Ci0KLSAgICBHTHNpemVpIHJhd1Bp
dGNoID0gQ29tcHV0ZVBpeGVsU2l6ZShmb3JtYXQsIHR5cGUpICogd2lkdGg7Ci0gICAgcmV0dXJu
IChyYXdQaXRjaCArIGFsaWdubWVudCAtIDEpICYgfihhbGlnbm1lbnQgLSAxKTsKLX0KLQotR0xz
aXplaSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQp
Ci17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDoKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBBU1NFUlQod2lkdGggJSA0ID09IDApOwotCi0gICAgcmV0dXJuIDgg
KiB3aWR0aCAvIDQ7Ci19Ci0KLUdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9y
bWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoK
LSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0
dXJuIDggKiAoR0xzaXplaSljZWlsKChmbG9hdCl3aWR0aCAvIDQuMGYpICogKEdMc2l6ZWkpY2Vp
bCgoZmxvYXQpaGVpZ2h0IC8gNC4wZik7Ci19Ci0KLWJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBm
b3JtYXQpCi17Ci0gICAgaWYoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9F
WFQgfHwKLSAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQp
Ci0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0aGUgc2l6ZSwgaW4g
Ynl0ZXMsIG9mIGEgc2luZ2xlIHRleGVsIGluIGFuIEltYWdlCi1pbnQgQ29tcHV0ZVBpeGVsU2l6
ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAg
ewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6ICAgICAgICAgICByZXR1cm4gc2l6
ZW9mKHVuc2lnbmVkIGNoYXIpOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICBy
ZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
X0FMUEhBOiByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogMjsKLSAgICAgICAgICBjYXNl
IEdMX1JHQjogICAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDM7Ci0g
ICAgICAgICAgY2FzZSBHTF9SR0JBOiAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQg
Y2hhcikgKiA0OwotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6ICAgICAgICByZXR1cm4gc2l6
ZW9mKHVuc2lnbmVkIGNoYXIpICogNDsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF80XzRfNF80OgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgcmV0dXJuIHNpemVvZih1bnNp
Z25lZCBzaG9ydCk7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCi1ib29sIElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdl
dCkKLXsKLSAgICByZXR1cm4gKHRhcmdldCA+PSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1ggJiYgdGFyZ2V0IDw9IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWik7Ci19Ci0KLWJv
b2wgSXNUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCi17Ci0gICAgcmV0dXJuIHRhcmdldCA9
PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKLX0KLQot
Ly8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZy
b20gdGFibGUgMy40LgotYm9vbCBDaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAg
ICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHJl
dHVybiAoZm9ybWF0ID09IEdMX1JHQkEpOwotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNl81OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOwotCi0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi19Ci0KLW5hbWVzcGFjZSBl
czJkeAotewotCi1EM0RDTVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29u
KQotewotICAgIEQzRENNUEZVTkMgZDNkQ29tcCA9IEQzRENNUF9BTFdBWVM7Ci0gICAgc3dpdGNo
IChjb21wYXJpc29uKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVWRVI6ICAgIGQzZENvbXAgPSBE
M0RDTVBfTkVWRVI7ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxXQVlTOiAgIGQzZENv
bXAgPSBEM0RDTVBfQUxXQVlTOyAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTEVTUzogICAg
IGQzZENvbXAgPSBEM0RDTVBfTEVTUzsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTEVR
VUFMOiAgIGQzZENvbXAgPSBEM0RDTVBfTEVTU0VRVUFMOyAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfRVFVQUw6ICAgIGQzZENvbXAgPSBEM0RDTVBfRVFVQUw7ICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfR1JFQVRFUjogIGQzZENvbXAgPSBEM0RDTVBfR1JFQVRFUjsgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfR0VRVUFMOiAgIGQzZENvbXAgPSBEM0RDTVBfR1JFQVRFUkVRVUFMOyBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTk9URVFVQUw6IGQzZENvbXAgPSBEM0RDTVBfTk9URVFVQUw7
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGQzZENvbXA7Ci19Ci0KLUQzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29s
b3IpCi17Ci0gICAgcmV0dXJuIEQzRENPTE9SX1JHQkEoZ2w6OnVub3JtPDg+KGNvbG9yLnJlZCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmdyZWVuKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuYmx1ZSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmFscGhhKSk7Ci19Ci0KLUQzREJM
RU5EIENvbnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGJsZW5kKQotewotICAgIEQzREJMRU5EIGQzZEJs
ZW5kID0gRDNEQkxFTkRfWkVSTzsKLQotICAgIHN3aXRjaCAoYmxlbmQpCi0gICAgewotICAgICAg
Y2FzZSBHTF9aRVJPOiAgICAgICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfWkVS
TzsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkU6ICAgICAgICAgICAgICAgICAg
ICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfT05FOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9TUkNfQ09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQ09M
T1I7ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SOiAgICAg
IGQzZEJsZW5kID0gRDNEQkxFTkRfSU5WU1JDQ09MT1I7ICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9EU1RfQ09MT1I6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfREVTVENPTE9S
OyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SOiAgICAgIGQz
ZEJsZW5kID0gRDNEQkxFTkRfSU5WREVTVENPTE9SOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9T
UkNfQUxQSEE6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQUxQSEE7ICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBOiAgICAgIGQzZEJs
ZW5kID0gRDNEQkxFTkRfSU5WU1JDQUxQSEE7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9EU1Rf
QUxQSEE6ICAgICAgICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfREVTVEFMUEhBOyAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBOiAgICAgIGQzZEJsZW5k
ID0gRDNEQkxFTkRfSU5WREVTVEFMUEhBOyAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DT05TVEFO
VF9DT0xPUjogICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfQkxFTkRGQUNUT1I7ICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1I6IGQzZEJsZW5kID0g
RDNEQkxFTkRfSU5WQkxFTkRGQUNUT1I7IGJyZWFrOwotICAgICAgY2FzZSBHTF9DT05TVEFOVF9B
TFBIQTogICAgICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfQkxFTkRGQUNUT1I7ICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6IGQzZEJsZW5kID0gRDNE
QkxFTkRfSU5WQkxFTkRGQUNUT1I7IGJyZWFrOwotICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FU
VVJBVEU6ICAgICAgIGQzZEJsZW5kID0gRDNEQkxFTkRfU1JDQUxQSEFTQVQ7ICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkQmxl
bmQ7Ci19Ci0KLUQzREJMRU5ET1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGJsZW5kT3ApCi17Ci0g
ICAgRDNEQkxFTkRPUCBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9BREQ7Ci0KLSAgICBzd2l0Y2gg
KGJsZW5kT3ApCi0gICAgewotICAgICAgY2FzZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQz
ZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
RlVOQ19TVUJUUkFDVDogICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9TVUJUUkFDVDsg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRP
cCA9IEQzREJMRU5ET1BfUkVWU1VCVFJBQ1Q7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZDNkQmxlbmRPcDsKLX0KLQotRDNEU1RFTkNJ
TE9QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCkKLXsKLSAgICBEM0RTVEVOQ0lM
T1AgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0tFRVA7Ci0KLSAgICBzd2l0Y2ggKHN0ZW5j
aWxPcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1pFUk86ICAgICAgZDNkU3RlbmNpbE9wID0gRDNE
U1RFTkNJTE9QX1pFUk87ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9LRUVQOiAgICAgIGQzZFN0
ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9LRUVQOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVQ
TEFDRTogICBkM2RTdGVuY2lsT3AgPSBEM0RTVEVOQ0lMT1BfUkVQTEFDRTsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0lOQ1I6ICAgICAgZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOQ1JTQVQ7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9ERUNSOiAgICAgIGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5D
SUxPUF9ERUNSU0FUOyBicmVhazsKLSAgICAgIGNhc2UgR0xfSU5WRVJUOiAgICBkM2RTdGVuY2ls
T3AgPSBEM0RTVEVOQ0lMT1BfSU5WRVJUOyAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0lOQ1JfV1JB
UDogZDNkU3RlbmNpbE9wID0gRDNEU1RFTkNJTE9QX0lOQ1I7ICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9ERUNSX1dSQVA6IGQzZFN0ZW5jaWxPcCA9IEQzRFNURU5DSUxPUF9ERUNSOyAgICBicmVh
azsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGQz
ZFN0ZW5jaWxPcDsKLX0KLQotRDNEVEVYVFVSRUFERFJFU1MgQ29udmVydFRleHR1cmVXcmFwKEdM
ZW51bSB3cmFwKQotewotICAgIEQzRFRFWFRVUkVBRERSRVNTIGQzZFdyYXAgPSBEM0RUQUREUkVT
U19XUkFQOwotCi0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkVQRUFU
OiAgICAgICAgICAgIGQzZFdyYXAgPSBEM0RUQUREUkVTU19XUkFQOyAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9DTEFNUF9UT19FREdFOiAgICAgZDNkV3JhcCA9IEQzRFRBRERSRVNTX0NMQU1QOyAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDogICBkM2RXcmFwID0gRDNEVEFE
RFJFU1NfTUlSUk9SOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGQzZFdyYXA7Ci19Ci0KLUQzRENVTEwgQ29udmVydEN1bGxNb2RlKEdM
ZW51bSBjdWxsRmFjZSwgR0xlbnVtIGZyb250RmFjZSkKLXsKLSAgICBEM0RDVUxMIGN1bGwgPSBE
M0RDVUxMX0NDVzsKLSAgICBzd2l0Y2ggKGN1bGxGYWNlKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
RlJPTlQ6Ci0gICAgICAgIGN1bGwgPSAoZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRENVTExfQ1cg
OiBEM0RDVUxMX0NDVyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CQUNLOgotICAg
ICAgICBjdWxsID0gKGZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RDVUxMX0NDVyA6IEQzRENVTExf
Q1cpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlJPTlRfQU5EX0JBQ0s6Ci0gICAg
ICAgIGN1bGwgPSBEM0RDVUxMX05PTkU7IC8vIGN1bGxpbmcgd2lsbCBiZSBoYW5kbGVkIGR1cmlu
ZyBkcmF3Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gY3VsbDsKLX0KLQotRFdPUkQgQ29udmVydENvbG9yTWFzayhib29s
IHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQotewotICAgIHJldHVybiAo
cmVkICAgPyBEM0RDT0xPUldSSVRFRU5BQkxFX1JFRCAgIDogMCkgfAotICAgICAgICAgICAoZ3Jl
ZW4gPyBEM0RDT0xPUldSSVRFRU5BQkxFX0dSRUVOIDogMCkgfAotICAgICAgICAgICAoYmx1ZSAg
PyBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgIDogMCkgfAotICAgICAgICAgICAoYWxwaGEgPyBE
M0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIDogMCk7Ci19Ci0KLUQzRFRFWFRVUkVGSUxURVJUWVBF
IENvbnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlcikKLXsKLSAgICBEM0RURVhUVVJFRklM
VEVSVFlQRSBkM2RNYWdGaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgIHN3aXRjaCAobWFnRmls
dGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDogZDNkTWFnRmlsdGVyID0gRDNEVEVY
Rl9QT0lOVDsgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVI6ICBkM2RNYWdGaWx0ZXIgPSBE
M0RURVhGX0xJTkVBUjsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiBkM2RNYWdGaWx0ZXI7Ci19Ci0KLXZvaWQgQ29udmVydE1pbkZpbHRl
cihHTGVudW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWluRmlsdGVyLCBE
M0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyKQotewotICAgIHN3aXRjaCAobWluRmls
dGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgICAgKmQzZE1pbkZpbHRl
ciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX05PTkU7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgICpkM2RNaW5G
aWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgKmQzZE1pcEZpbHRlciA9IEQzRFRFWEZf
Tk9ORTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJF
U1Q6Ci0gICAgICAgICpkM2RNaW5GaWx0ZXIgPSBEM0RURVhGX1BPSU5UOwotICAgICAgICAqZDNk
TWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgICAgKmQzZE1pbkZpbHRlciA9IEQzRFRFWEZf
TElORUFSOwotICAgICAgICAqZDNkTWlwRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgKmQz
ZE1pbkZpbHRlciA9IEQzRFRFWEZfUE9JTlQ7Ci0gICAgICAgICpkM2RNaXBGaWx0ZXIgPSBEM0RU
RVhGX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSOgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9MSU5FQVI7Ci0gICAgICAg
ICpkM2RNaXBGaWx0ZXIgPSBEM0RURVhGX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICAqZDNkTWluRmlsdGVyID0gRDNEVEVYRl9QT0lOVDsKLSAgICAgICAg
KmQzZE1pcEZpbHRlciA9IEQzRFRFWEZfTk9ORTsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZv
cm1hdCkKLXsKLSAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQz
REZNVF9EMjRGUzg6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIDg7
Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OgotICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNh
c2UgRDNERk1UX0QxNVMxOgotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgRDNERk1UX0Qx
Nl9MT0NLQUJMRToKLSAgICAgIGNhc2UgRDNERk1UX0QzMjoKLSAgICAgIGNhc2UgRDNERk1UX0Qy
NFg4OgotICAgICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToKLSAgICAgIGNhc2UgRDNERk1U
X0QxNjoKLSAgICAgICAgcmV0dXJuIDA7Ci0vLyAgICAgIGNhc2UgRDNERk1UX0QzMl9MT0NLQUJM
RTogIHJldHVybiAwOyAgIC8vIERpcmVjdFggOUV4IG9ubHkKLS8vICAgICAgY2FzZSBEM0RGTVRf
UzhfTE9DS0FCTEU6ICAgcmV0dXJuIDg7ICAgLy8gRGlyZWN0WCA5RXggb25seQotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVk
IGludCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQotewotICAgIHN3aXRjaCAo
Y29sb3JGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAg
ICAgIHJldHVybiAyOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgIHJldHVy
biA4OwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgIHJldHVybiAxOwotICAg
ICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKLSAg
ICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50
IEdldFJlZFNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQotewotICAgIHN3aXRjaCAoY29sb3JG
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgIHJl
dHVybiAxMDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRf
WDhSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6
Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToK
LSAgICAgICAgcmV0dXJuIDU7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0K
LSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IEdldEdyZWVuU2l6ZShEM0RGT1JNQVQg
Y29sb3JGb3JtYXQpCi17Ci0gICAgc3dpdGNoIChjb2xvckZvcm1hdCkKLSAgICB7Ci0gICAgICBj
YXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgcmV0dXJuIDEwOwotICAgICAgY2FzZSBE
M0RGTVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgcmV0
dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgIGNhc2UgRDNERk1UX1gx
UjVHNUI1OgotICAgICAgICByZXR1cm4gNTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAg
ICAgICAgcmV0dXJuIDY7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAg
ICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQzREZPUk1BVCBjb2xv
ckZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAgICByZXR1cm4gMTA7Ci0gICAgICBjYXNlIEQzREZN
VF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICByZXR1cm4g
ODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1
OgotICAgICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6Ci0gICAgICAgIHJldHVybiA1OwotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2ln
bmVkIGludCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KQotewotICAgIHN3aXRj
aCAoZGVwdGhGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOiAg
cmV0dXJuIDE2OwotICAgICAgY2FzZSBEM0RGTVRfRDMyOiAgICAgICAgICAgcmV0dXJuIDMyOwot
ICAgICAgY2FzZSBEM0RGTVRfRDE1UzE6ICAgICAgICAgcmV0dXJuIDE1OwotICAgICAgY2FzZSBE
M0RGTVRfRDI0Uzg6ICAgICAgICAgcmV0dXJuIDI0OwotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6
ICAgICAgICAgcmV0dXJuIDI0OwotICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDogICAgICAgcmV0
dXJuIDI0OwotICAgICAgY2FzZSBEM0RGTVRfRDE2OiAgICAgICAgICAgcmV0dXJuIDE2OwotICAg
ICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NLQUJMRTogcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RG
TVRfRDI0RlM4OiAgICAgICAgcmV0dXJuIDI0OwotLy8gICAgICBjYXNlIEQzREZNVF9EMzJfTE9D
S0FCTEU6ICByZXR1cm4gMzI7ICAgLy8gRDNEOUV4IG9ubHkKLS8vICAgICAgY2FzZSBEM0RGTVRf
UzhfTE9DS0FCTEU6ICAgcmV0dXJuIDA7ICAgIC8vIEQzRDlFeCBvbmx5Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotYm9v
bCBDb252ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBwcmlt
aXRpdmVDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUFJJTUlUSVZFVFlQRSAq
ZDNkUHJpbWl0aXZlVHlwZSwgaW50ICpkM2RQcmltaXRpdmVDb3VudCkKLXsKLSAgICBzd2l0Y2gg
KHByaW1pdGl2ZVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9QT0lOVFM6Ci0gICAgICAgICpk
M2RQcmltaXRpdmVUeXBlID0gRDNEUFRfUE9JTlRMSVNUOwotICAgICAgICAqZDNkUHJpbWl0aXZl
Q291bnQgPSBwcmltaXRpdmVDb3VudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJ
TkVTOgotICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVMSVNUOwotICAgICAg
ICAqZDNkUHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudCAvIDI7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6Ci0gICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0g
RDNEUFRfTElORVNUUklQOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVD
b3VudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6Ci0gICAgICAg
ICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQOwotICAgICAgICAqZDNkUHJpbWl0
aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudCAtIDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9UUklBTkdMRVM6Ci0gICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5H
TEVMSVNUOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudCAvIDM7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKLSAgICAgICAg
KmQzZFByaW1pdGl2ZVR5cGUgPSBEM0RQVF9UUklBTkdMRVNUUklQOwotICAgICAgICAqZDNkUHJp
bWl0aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudCAtIDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9UUklBTkdMRV9GQU46Ci0gICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRf
VFJJQU5HTEVGQU47Ci0gICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IHByaW1pdGl2ZUNvdW50
IC0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUQzREZPUk1BVCBDb252ZXJ0UmVu
ZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAg
IGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7Ci0g
ICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1I1RzZCNTsK
LSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfWDhSOEc4
Qjg7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0lOREVYODogICAgICAgCi0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOiBy
ZXR1cm4gRDNERk1UX0QyNFM4OwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAg
cmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICB9Ci19Ci0KLUdMc2l6ZWkgR2V0U2FtcGxlc0Zy
b21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKQotewotICAgIGlmICh0
eXBlID09IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBlbHNlCi0gICAgICAgIHJldHVybiB0eXBlOwotfQotCi1EM0RNVUxUSVNBTVBMRV9UWVBFIEdl
dE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcykKLXsKLSAgICBpZiAo
c2FtcGxlcyA8PSAxKQotICAgICAgICByZXR1cm4gRDNETVVMVElTQU1QTEVfTk9ORTsKLSAgICBl
bHNlCi0gICAgICAgIHJldHVybiAoRDNETVVMVElTQU1QTEVfVFlQRSlzYW1wbGVzOwotfQotCi19
CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUv
c3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyB1dGlsaXRpZXMuaDogQ29udmVyc2lvbiBmdW5jdGlv
bnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX1VUSUxJ
VElFU19ICi0jZGVmaW5lIExJQkdMRVNWMl9VVElMSVRJRVNfSAotCi0jZGVmaW5lIEdMX0FQSUNB
TEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KLSNp
bmNsdWRlIDxkM2Q5Lmg+Ci0KLW5hbWVzcGFjZSBnbAotewotCi1zdHJ1Y3QgQ29sb3I7Ci0KLWlu
dCBVbmlmb3JtQ29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUpOwotR0xlbnVtIFVuaWZvcm1Db21w
b25lbnRUeXBlKEdMZW51bSB0eXBlKTsKLXNpemVfdCBVbmlmb3JtVHlwZVNpemUoR0xlbnVtIHR5
cGUpOwotaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpOwotaW50IFZhcmlhYmxlQ29s
dW1uQ291bnQoR0xlbnVtIHR5cGUpOwotCi1pbnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRzKHVuc2ln
bmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1bnNpZ25lZCBpbnQg
Yml0c1NpemUpOwotCi1pbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSk7Ci1HTHNpemVpIENvbXB1dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgYWxpZ25tZW50KTsKLUdMc2l6ZWkgQ29tcHV0ZUNvbXByZXNz
ZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KTsKLUdMc2l6ZWkgQ29tcHV0ZUNv
bXByZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
KTsKLWJvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpOwotYm9vbCBJc0N1YmVtYXBUZXh0
dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotYm9vbCBJc1RleHR1cmVUYXJnZXQoR0xlbnVtIHRh
cmdldCk7Ci1ib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUpOwotCi19Ci0KLW5hbWVzcGFjZSBlczJkeAotewotCi1EM0RDTVBGVU5DIENvbnZlcnRD
b21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKTsKLUQzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6
Q29sb3IgY29sb3IpOwotRDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpOwot
RDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCk7Ci1EM0RTVEVOQ0lMT1Ag
Q29udmVydFN0ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKTsKLUQzRFRFWFRVUkVBRERSRVNTIENv
bnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCk7Ci1EM0RDVUxMIENvbnZlcnRDdWxsTW9kZShH
TGVudW0gY3VsbEZhY2UsIEdMZW51bSBmcm9udEZhY2UpOwotRFdPUkQgQ29udmVydENvbG9yTWFz
ayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKLUQzRFRFWFRV
UkVGSUxURVJUWVBFIENvbnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlcik7Ci12b2lkIENv
bnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQz
ZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlcik7Ci11bnNpZ25l
ZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Ci11bnNpZ25lZCBpbnQg
R2V0UmVkU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwotdW5zaWduZWQgaW50IEdldEdyZWVu
U2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwotdW5zaWduZWQgaW50IEdldEJsdWVTaXplKEQz
REZPUk1BVCBjb2xvckZvcm1hdCk7Ci11bnNpZ25lZCBpbnQgR2V0RGVwdGhTaXplKEQzREZPUk1B
VCBkZXB0aEZvcm1hdCk7Ci11bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0
ZW5jaWxGb3JtYXQpOwotYm9vbCBDb252ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZl
VHlwZSwgR0xzaXplaSBwcmltaXRpdmVDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
RDNEUFJJTUlUSVZFVFlQRSAqZDNkUHJpbWl0aXZlVHlwZSwgaW50ICpkM2RQcmltaXRpdmVDb3Vu
dCk7Ci1EM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KTsK
LUQzRE1VTFRJU0FNUExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXpl
aSBzYW1wbGVzKTsKLUdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVM
VElTQU1QTEVfVFlQRSB0eXBlKTsKLQotfQotCi0jZW5kaWYgIC8vIExJQkdMRVNWMl9VVElMSVRJ
RVNfSApJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0
YU1hbmFnZXIuY3BwCShyZXZpc2lvbiA3NDY1OCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2Vv
bWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjYxICswLDAg
QEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGdlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuY3Bw
OiBEZWZpbmVzIHRoZSBJbmRleERhdGFNYW5hZ2VyLCBhIGNsYXNzIHRoYXQKLS8vIHJ1bnMgdGhl
IEJ1ZmZlciB0cmFuc2xhdGlvbiBwcm9jZXNzIGZvciBpbmRleCBidWZmZXJzLgotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaCIKLQotI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNr
ZW5kLmgiCi0KLW5hbWVzcGFjZQotewotICAgIGVudW0geyBJTklUSUFMX0lOREVYX0JVRkZFUl9T
SVpFID0gNDA5NiAqIHNpemVvZihHTHVpbnQpIH07Ci19Ci0KLW5hbWVzcGFjZSBnbAotewotCi1J
bmRleERhdGFNYW5hZ2VyOjpJbmRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRleHQsIEJ1ZmZl
ckJhY2tFbmQgKmJhY2tlbmQpCi0gIDogbUNvbnRleHQoY29udGV4dCksIG1CYWNrZW5kKGJhY2tl
bmQpLCBtSW50SW5kaWNlc1N1cHBvcnRlZChiYWNrZW5kLT5zdXBwb3J0SW50SW5kaWNlcygpKQot
ewotICAgIG1Db3VudGluZ0J1ZmZlciA9IE5VTEw7Ci0gICAgbUNvdW50aW5nQnVmZmVyU2l6ZSA9
IDA7Ci0KLSAgICBtTGluZUxvb3BCdWZmZXIgPSBOVUxMOwotCi0gICAgbVN0cmVhbUJ1ZmZlclNo
b3J0ID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJ
WkUsIEdMX1VOU0lHTkVEX1NIT1JUKTsKLQotICAgIGlmIChtSW50SW5kaWNlc1N1cHBvcnRlZCkK
LSAgICB7Ci0gICAgICAgIG1TdHJlYW1CdWZmZXJJbnQgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhC
dWZmZXIoSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgR0xfVU5TSUdORURfSU5UKTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbVN0cmVhbUJ1ZmZlckludCA9IE5VTEw7Ci0gICAg
fQotfQotCi1JbmRleERhdGFNYW5hZ2VyOjp+SW5kZXhEYXRhTWFuYWdlcigpCi17Ci0gICAgZGVs
ZXRlIG1TdHJlYW1CdWZmZXJTaG9ydDsKLSAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlckludDsKLSAg
ICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotICAgIGRlbGV0ZSBtTGluZUxvb3BCdWZmZXI7Ci19
Ci0KLW5hbWVzcGFjZQotewotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJbmRleFR5cGUsIGNsYXNz
IE91dHB1dEluZGV4VHlwZT4KLXZvaWQgY29weUluZGljZXMoY29uc3QgSW5wdXRJbmRleFR5cGUg
KmluLCBHTHNpemVpIGNvdW50LCBPdXRwdXRJbmRleFR5cGUgKm91dCwgR0x1aW50ICptaW5JbmRl
eCwgR0x1aW50ICptYXhJbmRleCkKLXsKLSAgICBJbnB1dEluZGV4VHlwZSBmaXJzdCA9ICppbjsK
LSAgICBHTHVpbnQgbWluSW5kZXhTb0ZhciA9IGZpcnN0OwotICAgIEdMdWludCBtYXhJbmRleFNv
RmFyID0gZmlyc3Q7Ci0KLSAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgIHsKLSAgICAgICAgaWYgKG1pbkluZGV4U29GYXIgPiAqaW4pIG1pbkluZGV4U29GYXIgPSAq
aW47Ci0gICAgICAgIGlmIChtYXhJbmRleFNvRmFyIDwgKmluKSBtYXhJbmRleFNvRmFyID0gKmlu
OwotCi0gICAgICAgICpvdXQrKyA9ICppbisrOwotICAgIH0KLQotICAgIC8vIEl0IG1pZ2h0IGJl
IGEgbGluZSBsb29wLCBzbyBjb3B5IHRoZSBsb29wIGluZGV4LgotICAgICpvdXQgPSBmaXJzdDsK
LQotICAgICptaW5JbmRleCA9IG1pbkluZGV4U29GYXI7Ci0gICAgKm1heEluZGV4ID0gbWF4SW5k
ZXhTb0ZhcjsKLX0KLQotfQotCi1HTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlUmVuZGVyVmFs
aWRhdGUoR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBHTHNpemVpIGNvdW50LCBCdWZmZXIgKmFy
cmF5RWxlbWVudEJ1ZmZlciwgY29uc3Qgdm9pZCAqaW5kaWNlcywgVHJhbnNsYXRlZEluZGV4RGF0
YSAqdHJhbnNsYXRlZCkKLXsKLSAgICBBU1NFUlQodHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVCB8
fCB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUgfHwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpOwot
ICAgIEFTU0VSVChjb3VudCA+IDApOwotCi0gICAgaWYgKGFycmF5RWxlbWVudEJ1ZmZlciAhPSBO
VUxMKQotICAgIHsKLSAgICAgICAgR0xzaXplaSBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PEdM
c2l6ZWk+KGluZGljZXMpOwotCi0gICAgICAgIGlmICh0eXBlU2l6ZSh0eXBlKSAqIGNvdW50ICsg
b2Zmc2V0ID4gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KGFycmF5RWxlbWVudEJ1ZmZlci0+c2l6
ZSgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9O
OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5kaWNlcyA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5
dGUqPihhcnJheUVsZW1lbnRCdWZmZXItPmRhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgfQotCi0gICAg
dHJhbnNsYXRlZC0+Y291bnQgPSBjb3VudDsKLQotICAgIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3Bh
Y2UgPSBzcGFjZVJlcXVpcmVkKHR5cGUsIGNvdW50KTsKLQotICAgIFRyYW5zbGF0ZWRJbmRleEJ1
ZmZlciAqc3RyZWFtSWIgPSBwcmVwYXJlSW5kZXhCdWZmZXIodHlwZSwgcmVxdWlyZWRTcGFjZSk7
Ci0KLSAgICBzaXplX3Qgb2Zmc2V0OwotICAgIHZvaWQgKm91dHB1dCA9IHN0cmVhbUliLT5tYXAo
cmVxdWlyZWRTcGFjZSwgJm9mZnNldCk7Ci0KLSAgICB0cmFuc2xhdGVkLT5idWZmZXIgPSBzdHJl
YW1JYjsKLSAgICB0cmFuc2xhdGVkLT5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgdHJhbnNsYXRlZC0+
aW5kZXhTaXplID0gaW5kZXhTaXplKHR5cGUpOwotCi0gICAgaWYgKHR5cGUgPT0gR0xfVU5TSUdO
RURfQllURSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IEdMdWJ5dGUgKmluID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpOwotICAgICAgICBHTHVzaG9ydCAqb3V0ID0gc3RhdGlj
X2Nhc3Q8R0x1c2hvcnQqPihvdXRwdXQpOwotCi0gICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3Vu
dCwgb3V0LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKQotICAgIHsKLSAgICAg
ICAgY29uc3QgR0x1aW50ICppbiA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMp
OwotCi0gICAgICAgIGlmIChtSW50SW5kaWNlc1N1cHBvcnRlZCkKLSAgICAgICAgewotICAgICAg
ICAgICAgR0x1aW50ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVpbnQqPihvdXRwdXQpOwotCi0gICAg
ICAgICAgICBjb3B5SW5kaWNlcyhpbiwgY291bnQsIG91dCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4
LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gV2hlbiAzMi1iaXQgaW5kaWNlcyBhcmUgdW5zdXBwb3J0ZWQs
IGZha2UgdGhlbSBieSB0cnVuY2F0aW5nIHRvIDE2LWJpdC4KLQotICAgICAgICAgICAgR0x1c2hv
cnQgKm91dCA9IHN0YXRpY19jYXN0PEdMdXNob3J0Kj4ob3V0cHV0KTsKLQotICAgICAgICAgICAg
Y29weUluZGljZXMoaW4sIGNvdW50LCBvdXQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5z
bGF0ZWQtPm1heEluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBjb25zdCBHTHVzaG9ydCAqaW4gPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGlu
ZGljZXMpOwotICAgICAgICBHTHVzaG9ydCAqb3V0ID0gc3RhdGljX2Nhc3Q8R0x1c2hvcnQqPihv
dXRwdXQpOwotCi0gICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3VudCwgb3V0LCAmdHJhbnNsYXRl
ZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7Ci0gICAgfQotCi0gICAgc3RyZWFt
SWItPnVubWFwKCk7Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLXN0ZDo6c2l6ZV90
IEluZGV4RGF0YU1hbmFnZXI6OmluZGV4U2l6ZShHTGVudW0gdHlwZSkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UICYmIG1JbnRJbmRpY2VzU3VwcG9ydGVkKSA/
IHNpemVvZihHTHVpbnQpIDogc2l6ZW9mKEdMdXNob3J0KTsKLX0KLQotc3RkOjpzaXplX3QgSW5k
ZXhEYXRhTWFuYWdlcjo6dHlwZVNpemUoR0xlbnVtIHR5cGUpIGNvbnN0Ci17Ci0gICAgc3dpdGNo
ICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiByZXR1cm4gc2l6ZW9m
KEdMdWludCk7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gc2l6ZW9mKEdM
dXNob3J0KTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6IHJldHVybiBzaXplb2YoR0x1Ynl0ZSk7Ci0gICAgfQotfQotCi1zdGQ6OnNp
emVfdCBJbmRleERhdGFNYW5hZ2VyOjpzcGFjZVJlcXVpcmVkKEdMZW51bSB0eXBlLCBHTHNpemVp
IGNvdW50KSBjb25zdAotewotICAgIHJldHVybiAoY291bnQgKyAxKSAqIGluZGV4U2l6ZSh0eXBl
KTsgLy8gKzEgYmVjYXVzZSB3ZSBhbHdheXMgbGVhdmUgYW4gZXh0cmEgZm9yIGxpbmUgbG9vcHMK
LX0KLQotVHJhbnNsYXRlZEluZGV4QnVmZmVyICpJbmRleERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5k
ZXhCdWZmZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UpCi17Ci0gICAg
Ym9vbCB1c2UzMiA9ICh0eXBlID09IEdMX1VOU0lHTkVEX0lOVCAmJiBtSW50SW5kaWNlc1N1cHBv
cnRlZCk7Ci0KLSAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKnN0cmVhbUliID0gdXNlMzIgPyBt
U3RyZWFtQnVmZmVySW50IDogbVN0cmVhbUJ1ZmZlclNob3J0OwotCi0gICAgaWYgKHJlcXVpcmVk
U3BhY2UgPiBzdHJlYW1JYi0+c2l6ZSgpKQotICAgIHsKLSAgICAgICAgc3RkOjpzaXplX3QgbmV3
U2l6ZSA9IHN0ZDo6bWF4KHJlcXVpcmVkU3BhY2UsIDIgKiBzdHJlYW1JYi0+c2l6ZSgpKTsKLQot
ICAgICAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKm5ld1N0cmVhbUJ1ZmZlciA9IG1CYWNrZW5k
LT5jcmVhdGVJbmRleEJ1ZmZlcihuZXdTaXplLCB1c2UzMiA/IEdMX1VOU0lHTkVEX0lOVCA6IEdM
X1VOU0lHTkVEX1NIT1JUKTsKLQotICAgICAgICBkZWxldGUgc3RyZWFtSWI7Ci0KLSAgICAgICAg
c3RyZWFtSWIgPSBuZXdTdHJlYW1CdWZmZXI7Ci0KLSAgICAgICAgaWYgKHVzZTMyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtU3RyZWFtQnVmZmVySW50ID0gc3RyZWFtSWI7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RyZWFtQnVmZmVyU2hvcnQg
PSBzdHJlYW1JYjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0cmVhbUliLT5yZXNlcnZlU3Bh
Y2UocmVxdWlyZWRTcGFjZSk7Ci0KLSAgICByZXR1cm4gc3RyZWFtSWI7Ci19Ci0KLUdMZW51bSBJ
bmRleERhdGFNYW5hZ2VyOjpwcmVSZW5kZXJWYWxpZGF0ZVVuaW5kZXhlZChHTGVudW0gbW9kZSwg
R0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQotewotICAgIGlm
IChjb3VudCA+PSA2NTUzNSkgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Ci0KLSAgICBpZiAobW9k
ZSA9PSBHTF9MSU5FX0xPT1ApCi0gICAgewotICAgICAgICAvLyBGb3IgbGluZSBsb29wcywgY3Jl
YXRlIGEgc2luZ2xlLXVzZSBidWZmZXIgdGhhdCBydW5zIDAgLSBjb3VudC0xLCAwLgotICAgICAg
ICBkZWxldGUgbUxpbmVMb29wQnVmZmVyOwotICAgICAgICBtTGluZUxvb3BCdWZmZXIgPSBtQmFj
a2VuZC0+Y3JlYXRlSW5kZXhCdWZmZXIoKGNvdW50KzEpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KSwgR0xfVU5TSUdORURfU0hPUlQpOwotCi0gICAgICAgIHVuc2lnbmVkIHNob3J0ICppbmRpY2Vz
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQgKj4obUxpbmVMb29wQnVmZmVyLT5tYXAoKSk7
Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpbmRpY2VzW2ldID0gaTsKLSAgICAgICAgfQotCi0gICAgICAgIGluZGljZXNb
Y291bnRdID0gMDsKLQotICAgICAgICBtTGluZUxvb3BCdWZmZXItPnVubWFwKCk7Ci0KLSAgICAg
ICAgaW5kZXhJbmZvLT5idWZmZXIgPSBtTGluZUxvb3BCdWZmZXI7Ci0gICAgICAgIGluZGV4SW5m
by0+Y291bnQgPSBjb3VudCArIDE7Ci0gICAgICAgIGluZGV4SW5mby0+bWF4SW5kZXggPSBjb3Vu
dCAtIDE7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1Db3VudGluZ0J1ZmZlclNpemUgPCBjb3VudCkK
LSAgICB7Ci0gICAgICAgIG1Db3VudGluZ0J1ZmZlclNpemUgPSBzdGQ6Om1heChzdGF0aWNfY2Fz
dDxHTHNpemVpPihjZWlsUG93Mihjb3VudCkpLCBtQ291bnRpbmdCdWZmZXJTaXplKjIpOwotCi0g
ICAgICAgIGRlbGV0ZSBtQ291bnRpbmdCdWZmZXI7Ci0gICAgICAgIG1Db3VudGluZ0J1ZmZlciA9
IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZlcihjb3VudCAqIHNpemVvZih1bnNpZ25lZCBzaG9y
dCksIEdMX1VOU0lHTkVEX1NIT1JUKTsKLQotICAgICAgICB1bnNpZ25lZCBzaG9ydCAqaW5kaWNl
cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0ICo+KG1Db3VudGluZ0J1ZmZlci0+bWFwKCkp
OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7Ci0gICAgICAgIH0KLQotICAgICAgICBtQ291bnRp
bmdCdWZmZXItPnVubWFwKCk7Ci0KLSAgICAgICAgaW5kZXhJbmZvLT5idWZmZXIgPSBtQ291bnRp
bmdCdWZmZXI7Ci0gICAgICAgIGluZGV4SW5mby0+Y291bnQgPSBjb3VudDsKLSAgICAgICAgaW5k
ZXhJbmZvLT5tYXhJbmRleCA9IGNvdW50IC0gMTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgaW5kZXhJbmZvLT5idWZmZXIgPSBtQ291bnRpbmdCdWZmZXI7Ci0gICAgICAgIGluZGV4
SW5mby0+Y291bnQgPSBjb3VudDsKLSAgICAgICAgaW5kZXhJbmZvLT5tYXhJbmRleCA9IGNvdW50
IC0gMTsKLSAgICB9Ci0KLSAgICBpbmRleEluZm8tPmluZGV4U2l6ZSA9IHNpemVvZih1bnNpZ25l
ZCBzaG9ydCk7Ci0gICAgaW5kZXhJbmZvLT5taW5JbmRleCA9IDA7Ci0gICAgaW5kZXhJbmZvLT5v
ZmZzZXQgPSAwOwotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi19CkluZGV4OiBBTkdM
RS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaAkocmV2aXNp
b24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFn
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwot
Ci0vLyBnZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmg6IERlZmluZXMgdGhlIEluZGV4RGF0YU1h
bmFnZXIsIGEgY2xhc3MgdGhhdAotLy8gcnVucyB0aGUgQnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nl
c3MgZm9yIGluZGV4IGJ1ZmZlcnMuCi0KLSNpZm5kZWYgTElCR0xFU1YyX0dFT01FVFJZX0lOREVY
REFUQU1BTkFHRVJfSF8KLSNkZWZpbmUgTElCR0xFU1YyX0dFT01FVFJZX0lOREVYREFUQU1BTkFH
RVJfSF8KLQotI2luY2x1ZGUgPGJpdHNldD4KLSNpbmNsdWRlIDxjc3RkZGVmPgotCi0jZGVmaW5l
IEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUgImxpYkdMRVN2
Mi9Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBnbAotewotCi1jbGFzcyBCdWZmZXI7Ci1jbGFzcyBC
dWZmZXJCYWNrRW5kOwotY2xhc3MgVHJhbnNsYXRlZEluZGV4QnVmZmVyOwotc3RydWN0IEZvcm1h
dENvbnZlcnRlcjsKLQotc3RydWN0IFRyYW5zbGF0ZWRJbmRleERhdGEKLXsKLSAgICBHTHVpbnQg
bWluSW5kZXg7Ci0gICAgR0x1aW50IG1heEluZGV4OwotICAgIEdMdWludCBjb3VudDsKLSAgICBH
THVpbnQgaW5kZXhTaXplOwotCi0gICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpidWZmZXI7Ci0g
ICAgR0xzaXplaSBvZmZzZXQ7Ci19OwotCi1jbGFzcyBJbmRleERhdGFNYW5hZ2VyCi17Ci0gIHB1
YmxpYzoKLSAgICBJbmRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRleHQsIEJ1ZmZlckJhY2tF
bmQgKmJhY2tlbmQpOwotICAgIH5JbmRleERhdGFNYW5hZ2VyKCk7Ci0KLSAgICBHTGVudW0gcHJl
UmVuZGVyVmFsaWRhdGUoR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBHTHNpemVpIGNvdW50LCBC
dWZmZXIgKmFycmF5RWxlbWVudEJ1ZmZlciwgY29uc3Qgdm9pZCAqaW5kaWNlcywgVHJhbnNsYXRl
ZEluZGV4RGF0YSAqdHJhbnNsYXRlZCk7Ci0gICAgR0xlbnVtIHByZVJlbmRlclZhbGlkYXRlVW5p
bmRleGVkKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkSW5kZXhEYXRhICpp
bmRleEluZm8pOwotCi0gIHByaXZhdGU6Ci0gICAgc3RkOjpzaXplX3QgSW5kZXhEYXRhTWFuYWdl
cjo6dHlwZVNpemUoR0xlbnVtIHR5cGUpIGNvbnN0OwotICAgIHN0ZDo6c2l6ZV90IEluZGV4RGF0
YU1hbmFnZXI6OmluZGV4U2l6ZShHTGVudW0gdHlwZSkgY29uc3Q7Ci0gICAgc3RkOjpzaXplX3Qg
c3BhY2VSZXF1aXJlZChHTGVudW0gdHlwZSwgR0xzaXplaSBjb3VudCkgY29uc3Q7Ci0gICAgVHJh
bnNsYXRlZEluZGV4QnVmZmVyICpwcmVwYXJlSW5kZXhCdWZmZXIoR0xlbnVtIHR5cGUsIHN0ZDo6
c2l6ZV90IHJlcXVpcmVkU3BhY2UpOwotCi0gICAgQ29udGV4dCAqbUNvbnRleHQ7Ci0gICAgQnVm
ZmVyQmFja0VuZCAqbUJhY2tlbmQ7Ci0KLSAgICBib29sIG1JbnRJbmRpY2VzU3VwcG9ydGVkOwot
Ci0gICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICptU3RyZWFtQnVmZmVyU2hvcnQ7Ci0gICAgVHJh
bnNsYXRlZEluZGV4QnVmZmVyICptU3RyZWFtQnVmZmVySW50OwotCi0gICAgVHJhbnNsYXRlZElu
ZGV4QnVmZmVyICptQ291bnRpbmdCdWZmZXI7Ci0gICAgR0xzaXplaSBtQ291bnRpbmdCdWZmZXJT
aXplOwotCi0gICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICptTGluZUxvb3BCdWZmZXI7Ci19Owot
Ci19Ci0KLSNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9NRVRSWV9JTkRFWERBVEFNQU5BR0VSX0hf
CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFN
YW5hZ2VyLmNwcAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21l
dHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNzEgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaDog
RGVmaW5lcyB0aGUgVmVydGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAotLy8gcnVucyB0aGUg
QnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3MuCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0
cnkvVmVydGV4RGF0YU1hbmFnZXIuaCIKLQotI2luY2x1ZGUgPGxpbWl0cz4KLQotI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkv
YmFja2VuZC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2Vy
LmgiCi0KLW5hbWVzcGFjZQotewotICAgIGVudW0geyBJTklUSUFMX1NUUkVBTV9CVUZGRVJfU0la
RSA9IDEwMjQqMTAyNCB9OwotfQotCi1uYW1lc3BhY2UgZ2wKLXsKLQotVmVydGV4RGF0YU1hbmFn
ZXI6OlZlcnRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRleHQsIEJ1ZmZlckJhY2tFbmQgKmJh
Y2tlbmQpCi0gICAgOiBtQ29udGV4dChjb250ZXh0KSwgbUJhY2tlbmQoYmFja2VuZCksIG1EaXJ0
eUN1cnJlbnRWYWx1ZXModHJ1ZSksIG1DdXJyZW50VmFsdWVPZmZzZXQoMCkKLXsKLSAgICBtU3Ry
ZWFtQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZVZlcnRleEJ1ZmZlcihJTklUSUFMX1NUUkVBTV9C
VUZGRVJfU0laRSk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgICBtQ3VycmVudFZhbHVlQnVmZmVy
ID0gbUJhY2tlbmQtPmNyZWF0ZVZlcnRleEJ1ZmZlckZvclN0cmlkZVplcm8oNCAqIHNpemVvZihm
bG9hdCkgKiBNQVhfVkVSVEVYX0FUVFJJQlMpOwotICAgIH0KLSAgICBjYXRjaCAoLi4uKQotICAg
IHsKLSAgICAgICAgZGVsZXRlIG1TdHJlYW1CdWZmZXI7Ci0gICAgICAgIHRocm93OwotICAgIH0K
LX0KLQotVmVydGV4RGF0YU1hbmFnZXI6On5WZXJ0ZXhEYXRhTWFuYWdlcigpCi17Ci0gICAgZGVs
ZXRlIG1TdHJlYW1CdWZmZXI7Ci0gICAgZGVsZXRlIG1DdXJyZW50VmFsdWVCdWZmZXI7Ci19Ci0K
LXN0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRUUklCUz4gVmVydGV4RGF0YU1hbmFnZXI6OmdldEFj
dGl2ZUF0dHJpYnMoKSBjb25zdAotewotICAgIHN0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRUUklC
Uz4gYWN0aXZlOwotCi0gICAgUHJvZ3JhbSAqcHJvZ3JhbSA9IG1Db250ZXh0LT5nZXRDdXJyZW50
UHJvZ3JhbSgpOwotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJ
bmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKLSAgICB7Ci0gICAg
ICAgIGFjdGl2ZVthdHRyaWJ1dGVJbmRleF0gPSAocHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChh
dHRyaWJ1dGVJbmRleCkgIT0gLTEpOwotICAgIH0KLQotICAgIHJldHVybiBhY3RpdmU7Ci19Ci0K
LUdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlUmVuZGVyVmFsaWRhdGUoR0xpbnQgc3RhcnQs
IEdMc2l6ZWkgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0ZWQpCi17Ci0gICAgY29uc3QgQXR0cmli
dXRlU3RhdGUgKmF0dHJpYnMgPSBtQ29udGV4dC0+Z2V0VmVydGV4QXR0cmliQmxvY2soKTsKLSAg
ICBjb25zdCBzdGQ6OmJpdHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+IGFjdGl2ZUF0dHJpYnMgPSBn
ZXRBY3RpdmVBdHRyaWJzKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhf
QVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKCFhY3RpdmVBdHRyaWJzW2ldICYmIGF0
dHJpYnNbaV0ubUVuYWJsZWQgJiYgYXR0cmlic1tpXS5tQm91bmRCdWZmZXIgIT0gMCAmJiAhbUNv
bnRleHQtPmdldEJ1ZmZlcihhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zbGF0ZWRb
aV0uZW5hYmxlZCA9IGFjdGl2ZUF0dHJpYnNbaV07Ci0gICAgfQotCi0gICAgYm9vbCB1c2VzQ3Vy
cmVudFZhbHVlcyA9IGZhbHNlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChhY3RpdmVBdHRyaWJzW2ldICYmICFh
dHRyaWJzW2ldLm1FbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICB1c2VzQ3VycmVudFZh
bHVlcyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIEhhbmRsZSB0aGUgaWRlbnRpdHktbWFwcGVkIGF0dHJpYnV0ZXMuCi0gICAgLy8gUHJvY2Vz
cyBhcnJheSBhdHRyaWJ1dGVzLgotCi0gICAgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSA9IDA7
Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAg
IHsKLSAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnNbaV0gJiYgYXR0cmlic1tpXS5tRW5hYmxlZCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmVxdWlyZWRTcGFjZSArPSBzcGFjZVJlcXVpcmVkKGF0
dHJpYnNbaV0sIGNvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXF1aXJlZFNw
YWNlID4gbVN0cmVhbUJ1ZmZlci0+c2l6ZSgpKQotICAgIHsKLSAgICAgICAgc3RkOjpzaXplX3Qg
bmV3U2l6ZSA9IHN0ZDo6bWF4KHJlcXVpcmVkU3BhY2UsIDMgKiBtU3RyZWFtQnVmZmVyLT5zaXpl
KCkgLyAyKTsgLy8gMS41IHggbVN0cmVhbUJ1ZmZlci0+c2l6ZSgpIGlzIGFyYml0cmFyeSBhbmQg
c2hvdWxkIGJlIGNoZWNrZWQgdG8gc2VlIHdlIGRvbid0IGhhdmUgdG9vIG1hbnkgcmVhbGxvY2F0
aW9ucy4KLQotICAgICAgICBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpuZXdTdHJlYW1CdWZmZXIg
PSBtQmFja2VuZC0+Y3JlYXRlVmVydGV4QnVmZmVyKG5ld1NpemUpOwotCi0gICAgICAgIGRlbGV0
ZSBtU3RyZWFtQnVmZmVyOwotICAgICAgICBtU3RyZWFtQnVmZmVyID0gbmV3U3RyZWFtQnVmZmVy
OwotICAgIH0KLQotICAgIG1TdHJlYW1CdWZmZXItPnJlc2VydmVTcGFjZShyZXF1aXJlZFNwYWNl
KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKysp
Ci0gICAgewotICAgICAgICBpZiAoYWN0aXZlQXR0cmlic1tpXSAmJiBhdHRyaWJzW2ldLm1FbmFi
bGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBGb3JtYXRDb252ZXJ0ZXIgZm9ybWF0Q29udmVy
dGVyID0gbUJhY2tlbmQtPmdldEZvcm1hdENvbnZlcnRlcihhdHRyaWJzW2ldLm1UeXBlLCBhdHRy
aWJzW2ldLm1TaXplLCBhdHRyaWJzW2ldLm1Ob3JtYWxpemVkKTsKLQotICAgICAgICAgICAgdHJh
bnNsYXRlZFtpXS5ub25BcnJheSA9IGZhbHNlOwotICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS50
eXBlID0gYXR0cmlic1tpXS5tVHlwZTsKLSAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc2l6ZSA9
IGF0dHJpYnNbaV0ubVNpemU7Ci0gICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm5vcm1hbGl6ZWQg
PSBhdHRyaWJzW2ldLm1Ob3JtYWxpemVkOwotICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zdHJp
ZGUgPSBmb3JtYXRDb252ZXJ0ZXIub3V0cHV0VmVydGV4U2l6ZTsKLSAgICAgICAgICAgIHRyYW5z
bGF0ZWRbaV0uYnVmZmVyID0gbVN0cmVhbUJ1ZmZlcjsKLQotICAgICAgICAgICAgc2l6ZV90IGlu
cHV0U3RyaWRlID0gaW50ZXJwcmV0R2xTdHJpZGUoYXR0cmlic1tpXSk7Ci0gICAgICAgICAgICBz
aXplX3QgZWxlbWVudFNpemUgPSB0eXBlU2l6ZShhdHRyaWJzW2ldLm1UeXBlKSAqIGF0dHJpYnNb
aV0ubVNpemU7Ci0KLSAgICAgICAgICAgIHZvaWQgKm91dHB1dCA9IG1TdHJlYW1CdWZmZXItPm1h
cChzcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0sIGNvdW50KSwgJnRyYW5zbGF0ZWRbaV0ub2Zmc2V0
KTsKLQotICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQ7Ci0gICAgICAgICAgICBpZiAoYXR0
cmlic1tpXS5tQm91bmRCdWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQnVm
ZmVyICpidWZmZXIgPSBtQ29udGV4dC0+Z2V0QnVmZmVyKGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVy
KTsKLQotICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PHNp
emVfdD4oYXR0cmlic1tpXS5tUG9pbnRlcik7Ci0KLSAgICAgICAgICAgICAgICAvLyBCZWZvcmUg
d2UgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBzaXplIGJlbG93LCBtYWtlIHN1cmUgaXQgY2FuIGJl
IGNvbXB1dGVkIHdpdGhvdXQgaW50ZWdlciBvdmVyZmxvdy4KLSAgICAgICAgICAgICAgICBpZiAo
c3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnNpemVfdD46Om1heCgpIC0gc3RhcnQgPCBzdGF0aWNf
Y2FzdDxzdGQ6OnNpemVfdD4oY291bnQpCi0gICAgICAgICAgICAgICAgICAgIHx8IHN0ZDo6bnVt
ZXJpY19saW1pdHM8c3RkOjpzaXplX3Q+OjptYXgoKSAvIGlucHV0U3RyaWRlIDwgc3RhdGljX2Nh
c3Q8c3RkOjpzaXplX3Q+KHN0YXJ0ICsgY291bnQgLSAxKSAvLyBpdCdzIGEgcHJlcmVxdWlzaXRl
IHRoYXQgY291bnQgPj0gMSwgc28gc3RhcnQrY291bnQtMSA+PSAwLgotICAgICAgICAgICAgICAg
ICAgICB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6ZV90Pjo6bWF4KCkgLSBvZmZzZXQg
PCBpbnB1dFN0cmlkZSAqIChzdGFydCArIGNvdW50IC0gMSkKLSAgICAgICAgICAgICAgICAgICAg
fHwgc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnNpemVfdD46Om1heCgpIC0gZWxlbWVudFNpemUg
PCBvZmZzZXQgKyBpbnB1dFN0cmlkZSAqIChzdGFydCArIGNvdW50IC0gMSkgKyBlbGVtZW50U2l6
ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TdHJlYW1CdWZmZXIt
PnVubWFwKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElP
TjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICsgaW5w
dXRTdHJpZGUgKiAoc3RhcnQgKyBjb3VudCAtIDEpICsgZWxlbWVudFNpemUgPiBidWZmZXItPnNp
emUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TdHJlYW1CdWZm
ZXItPnVubWFwKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJB
VElPTjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbnB1dCA9IHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXItPmRhdGEoKSkgKyBvZmZzZXQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5w
dXQgPSBhdHRyaWJzW2ldLm1Qb2ludGVyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
bnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBpbnB1dFN0cmlkZSAqIHN0
YXJ0OwotCi0gICAgICAgICAgICBpZiAoZm9ybWF0Q29udmVydGVyLmlkZW50aXR5ICYmIGlucHV0
U3RyaWRlID09IGVsZW1lbnRTaXplKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1l
bWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGlucHV0U3RyaWRlKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3JtYXRD
b252ZXJ0ZXIuY29udmVydEFycmF5KGlucHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG91dHB1dCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1TdHJlYW1CdWZmZXItPnVubWFwKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodXNlc0N1cnJlbnRWYWx1ZXMpCi0gICAgewotICAg
ICAgICBwcm9jZXNzTm9uQXJyYXlBdHRyaWJ1dGVzKGF0dHJpYnMsIGFjdGl2ZUF0dHJpYnMsIHRy
YW5zbGF0ZWQsIGNvdW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0K
LXN0ZDo6c2l6ZV90IFZlcnRleERhdGFNYW5hZ2VyOjp0eXBlU2l6ZShHTGVudW0gdHlwZSkgY29u
c3QKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiBzaXplb2YoR0xieXRlKTsKLSAgICAgIGNhc2UgR0xf
U0hPUlQ6IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiBzaXplb2YoR0xzaG9ydCk7Ci0g
ICAgICBjYXNlIEdMX0ZJWEVEOiByZXR1cm4gc2l6ZW9mKEdMZml4ZWQpOwotICAgICAgY2FzZSBH
TF9GTE9BVDogcmV0dXJuIHNpemVvZihHTGZsb2F0KTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7IHJldHVybiBzaXplb2YoR0xmbG9hdCk7Ci0gICAgfQotfQotCi1zdGQ6OnNpemVfdCBW
ZXJ0ZXhEYXRhTWFuYWdlcjo6aW50ZXJwcmV0R2xTdHJpZGUoY29uc3QgQXR0cmlidXRlU3RhdGUg
JmF0dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4gYXR0cmliLm1TdHJpZGUgPyBhdHRyaWIubVN0
cmlkZSA6IHR5cGVTaXplKGF0dHJpYi5tVHlwZSkgKiBhdHRyaWIubVNpemU7Ci19Ci0KLS8vIFJv
dW5kIHVwIHggKD49MCkgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgbXVsdGlwbGUgKD4wKS4KLS8v
IDAgcm91bmRzIHVwIHRvIDAuCi1zdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6cm91bmRV
cChzdGQ6OnNpemVfdCB4LCBzdGQ6OnNpemVfdCBtdWx0aXBsZSkgY29uc3QKLXsKLSAgICBBU1NF
UlQoeCA+PSAwKTsKLSAgICBBU1NFUlQobXVsdGlwbGUgPiAwKTsKLQotICAgIHN0ZDo6c2l6ZV90
IHJlbWFpbmRlciA9IHggJSBtdWx0aXBsZTsKLSAgICBpZiAocmVtYWluZGVyICE9IDApCi0gICAg
ewotICAgICAgICByZXR1cm4geCArIG11bHRpcGxlIC0gcmVtYWluZGVyOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICByZXR1cm4geDsKLSAgICB9Ci19Ci0KLXN0ZDo6c2l6ZV90IFZl
cnRleERhdGFNYW5hZ2VyOjpzcGFjZVJlcXVpcmVkKGNvbnN0IEF0dHJpYnV0ZVN0YXRlICZhdHRy
aWIsIHN0ZDo6c2l6ZV90IG1heFZlcnRleCkgY29uc3QKLXsKLSAgICBzdGQ6OnNpemVfdCBzaXpl
ID0gbUJhY2tlbmQtPmdldEZvcm1hdENvbnZlcnRlcihhdHRyaWIubVR5cGUsIGF0dHJpYi5tU2l6
ZSwgYXR0cmliLm1Ob3JtYWxpemVkKS5vdXRwdXRWZXJ0ZXhTaXplOwotICAgIHNpemUgKj0gbWF4
VmVydGV4OwotCi0gICAgcmV0dXJuIHJvdW5kVXAoc2l6ZSwgNCAqIHNpemVvZihHTGZsb2F0KSk7
Ci19Ci0KLXZvaWQgVmVydGV4RGF0YU1hbmFnZXI6OnByb2Nlc3NOb25BcnJheUF0dHJpYnV0ZXMo
Y29uc3QgQXR0cmlidXRlU3RhdGUgKmF0dHJpYnMsIGNvbnN0IHN0ZDo6Yml0c2V0PE1BWF9WRVJU
RVhfQVRUUklCUz4gJmFjdGl2ZUF0dHJpYnMsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5zbGF0
ZWQsIHN0ZDo6c2l6ZV90IGNvdW50KQotewotICAgIGlmIChtRGlydHlDdXJyZW50VmFsdWVzKQot
ICAgIHsKLSAgICAgICAgc3RkOjpzaXplX3QgdG90YWxTaXplID0gNCAqIHNpemVvZihmbG9hdCkg
KiBNQVhfVkVSVEVYX0FUVFJJQlM7Ci0KLSAgICAgICAgbUN1cnJlbnRWYWx1ZUJ1ZmZlci0+cmVz
ZXJ2ZVNwYWNlKHRvdGFsU2l6ZSk7Ci0KLSAgICAgICAgZmxvYXQqIGN1cnJlbnRWYWx1ZXMgPSBz
dGF0aWNfY2FzdDxmbG9hdCo+KG1DdXJyZW50VmFsdWVCdWZmZXItPm1hcCh0b3RhbFNpemUsICZt
Q3VycmVudFZhbHVlT2Zmc2V0KSk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVGhpcyBhc3N1
bWVzIHRoYXQgdGhlIEdMX0ZMT0FUeDQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrLWVuZC4gKEZv
ciBEM0Q5LCBpdCBpcyBhIG1hbmRhdG9yeSBmb3JtYXQuKQotICAgICAgICAgICAgY3VycmVudFZh
bHVlc1tpKjQrMF0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMF07Ci0gICAgICAgICAgICBj
dXJyZW50VmFsdWVzW2kqNCsxXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsxXTsKLSAgICAg
ICAgICAgIGN1cnJlbnRWYWx1ZXNbaSo0KzJdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzJd
OwotICAgICAgICAgICAgY3VycmVudFZhbHVlc1tpKjQrM10gPSBhdHRyaWJzW2ldLm1DdXJyZW50
VmFsdWVbM107Ci0gICAgICAgIH0KLQotICAgICAgICBtQ3VycmVudFZhbHVlQnVmZmVyLT51bm1h
cCgpOwotICAgIH0KLQotICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChhY3RpdmVBdHRyaWJzW2ldICYmICFh
dHRyaWJzW2ldLm1FbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc2xhdGVkW2ld
Lm5vbkFycmF5ID0gdHJ1ZTsKLQotICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5idWZmZXIgPSBt
Q3VycmVudFZhbHVlQnVmZmVyOwotCi0gICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnR5cGUgPSBH
TF9GTE9BVDsKLSAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc2l6ZSA9IDQ7Ci0gICAgICAgICAg
ICB0cmFuc2xhdGVkW2ldLm5vcm1hbGl6ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRyYW5zbGF0
ZWRbaV0uc3RyaWRlID0gMDsKLSAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0ub2Zmc2V0ID0gbUN1
cnJlbnRWYWx1ZU9mZnNldCArIDQgKiBzaXplb2YoZmxvYXQpICogaTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRh
TWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvVmVy
dGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24gNzQ2NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3Yy
L2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjYgKzAs
MCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIu
aDogRGVmaW5lcyB0aGUgVmVydGV4RGF0YU1hbmFnZXIsIGEgY2xhc3MgdGhhdAotLy8gcnVucyB0
aGUgQnVmZmVyIHRyYW5zbGF0aW9uIHByb2Nlc3MuCi0KLSNpZm5kZWYgTElCR0xFU1YyX0dFT01F
VFJZX1ZFUlRFWERBVEFNQU5BR0VSX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJU
RVhEQVRBTUFOQUdFUl9IXwotCi0jaW5jbHVkZSA8Yml0c2V0PgotI2luY2x1ZGUgPGNzdGRkZWY+
Ci0KLSNkZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi0jaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLWNsYXNzIEJ1ZmZl
cjsKLWNsYXNzIEJ1ZmZlckJhY2tFbmQ7Ci1jbGFzcyBUcmFuc2xhdGVkVmVydGV4QnVmZmVyOwot
c3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGU7Ci1zdHJ1Y3QgRm9ybWF0Q29udmVydGVyOwotc3Ry
dWN0IFRyYW5zbGF0ZWRJbmRleERhdGE7Ci0KLWNsYXNzIFZlcnRleERhdGFNYW5hZ2VyCi17Ci0g
IHB1YmxpYzoKLSAgICBWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBCdWZmZXJC
YWNrRW5kICpiYWNrZW5kKTsKLSAgICB+VmVydGV4RGF0YU1hbmFnZXIoKTsKLQotICAgIHZvaWQg
ZGlydHlDdXJyZW50VmFsdWVzKCkgeyBtRGlydHlDdXJyZW50VmFsdWVzID0gdHJ1ZTsgfQotCi0g
ICAgR0xlbnVtIHByZVJlbmRlclZhbGlkYXRlKEdMaW50IHN0YXJ0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmFuc2xhdGVkQXR0cmlidXRlICpvdXRBdHRyaWJzKTsKLQotICBwcml2YXRlOgotICAgIHN0
ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRUUklCUz4gZ2V0QWN0aXZlQXR0cmlicygpIGNvbnN0Owot
Ci0gICAgdm9pZCBwcm9jZXNzTm9uQXJyYXlBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZVN0YXRl
ICphdHRyaWJzLCBjb25zdCBzdGQ6OmJpdHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+ICZhY3RpdmVB
dHRyaWJzLCBUcmFuc2xhdGVkQXR0cmlidXRlICp0cmFuc2xhdGVkLCBzdGQ6OnNpemVfdCBjb3Vu
dCk7Ci0KLSAgICBzdGQ6OnNpemVfdCB0eXBlU2l6ZShHTGVudW0gdHlwZSkgY29uc3Q7Ci0gICAg
c3RkOjpzaXplX3QgaW50ZXJwcmV0R2xTdHJpZGUoY29uc3QgQXR0cmlidXRlU3RhdGUgJmF0dHJp
YikgY29uc3Q7Ci0KLSAgICBzdGQ6OnNpemVfdCByb3VuZFVwKHN0ZDo6c2l6ZV90IHgsIHN0ZDo6
c2l6ZV90IG11bHRpcGxlKSBjb25zdDsKLSAgICBzdGQ6OnNpemVfdCBzcGFjZVJlcXVpcmVkKGNv
bnN0IEF0dHJpYnV0ZVN0YXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90IG1heFZlcnRleCkgY29uc3Q7
Ci0KLSAgICBDb250ZXh0ICptQ29udGV4dDsKLSAgICBCdWZmZXJCYWNrRW5kICptQmFja2VuZDsK
LQotICAgIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKm1TdHJlYW1CdWZmZXI7Ci0KLSAgICBib29s
IG1EaXJ0eUN1cnJlbnRWYWx1ZXM7Ci0gICAgc3RkOjpzaXplX3QgbUN1cnJlbnRWYWx1ZU9mZnNl
dDsgICAgICAgICAgICAvLyBPZmZzZXQgd2l0aGluIG1DdXJyZW50VmFsdWVCdWZmZXIgdGhhdCB0
aGUgY3VycmVudCBhdHRyaWJ1dGUgdmFsdWVzIHdlcmUgbGFzdCBsb2FkZWQgYXQuCi0gICAgVHJh
bnNsYXRlZFZlcnRleEJ1ZmZlciAqbUN1cnJlbnRWYWx1ZUJ1ZmZlcjsKLX07Ci0KLX0KLQotI2Vu
ZGlmICAgLy8gTElCR0xFU1YyX0dFT01FVFJZX1ZFUlRFWERBVEFNQU5BR0VSX0hfCkluZGV4OiBB
TkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5jcHAJKHJldmlzaW9uIDc0NjU4KQor
KysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwzOCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBnZW9tZXRyeS9iYWNr
ZW5kLmg6IEFic3RyYWN0IGNsYXNzZXMgQnVmZmVyQmFja0VuZCwgVHJhbnNsYXRlZFZlcnRleEJ1
ZmZlciBhbmQgVHJhbnNsYXRlZEluZGV4QnVmZmVyCi0vLyB0aGF0IG11c3QgYmUgaW1wbGVtZW50
ZWQgYnkgYW55IEFQSS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBBTkdMRS4KLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCi0KLSNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLXZvaWQgKlRyYW5zbGF0ZWRCdWZmZXI6Om1hcChz
dGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqb2Zmc2V0KQotewotICAgIEFT
U0VSVChyZXF1aXJlZFNwYWNlIDw9IG1CdWZmZXJTaXplKTsKLQotICAgIHJlc2VydmVTcGFjZShy
ZXF1aXJlZFNwYWNlKTsKLQotICAgICpvZmZzZXQgPSBtQ3VycmVudFBvaW50OwotICAgIG1DdXJy
ZW50UG9pbnQgKz0gcmVxdWlyZWRTcGFjZTsKLQotICAgIHJldHVybiBzdHJlYW1pbmdNYXAoKm9m
ZnNldCwgcmVxdWlyZWRTcGFjZSk7Ci19Ci0KLXZvaWQgVHJhbnNsYXRlZEJ1ZmZlcjo6cmVzZXJ2
ZVNwYWNlKHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UpCi17Ci0gICAgaWYgKG1DdXJyZW50UG9p
bnQgKyByZXF1aXJlZFNwYWNlID4gbUJ1ZmZlclNpemUpCi0gICAgewotICAgICAgICByZWN5Y2xl
KCk7Ci0gICAgICAgIG1DdXJyZW50UG9pbnQgPSAwOwotICAgIH0KLX0KLQotfQpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgJKHJldmlzaW9uIDc0NjU4KQorKysgQU5H
TEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTEwICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGdlb21ldHJ5L2JhY2tlbmQuaDog
QWJzdHJhY3QgY2xhc3NlcyBCdWZmZXJCYWNrRW5kLCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyIGFu
ZCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIKLS8vIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBh
bnkgQVBJLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEFOR0xFLgotCi0jaWZuZGVmIExJQkdM
RVNWMl9HRU9NRVRSWV9CQUNLRU5EX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9CQUNL
RU5EX0hfCi0KLSNpbmNsdWRlIDxjc3RkZGVmPgotCi0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNs
dWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCi0KLW5h
bWVzcGFjZSBnbAotewotY2xhc3MgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlcjsKLWNsYXNzIFRyYW5z
bGF0ZWRJbmRleEJ1ZmZlcjsKLQotc3RydWN0IEZvcm1hdENvbnZlcnRlcgotewotICAgIGJvb2wg
aWRlbnRpdHk7Ci0gICAgc3RkOjpzaXplX3Qgb3V0cHV0VmVydGV4U2l6ZTsKLSAgICB2b2lkICgq
Y29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNp
emVfdCBuLCB2b2lkICpvdXQpOwotfTsKLQotc3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUKLXsK
LSAgICBib29sIGVuYWJsZWQ7Ci0gICAgYm9vbCBub25BcnJheTsKLQotICAgIC8vIFRoZXNlIGFy
ZSB0aGUgb3JpZ2luYWwgdW50cmFuc2xhdGVkIHZhbHVlcy4gKE9yIGp1c3QgaGF2ZSBzb21lIHNv
cnQgb2YgQnVmZmVyQmFja0VuZDo6VHJhbnNsYXRlZFR5cGVLZXkuKQotICAgIEdMZW51bSB0eXBl
OwotICAgIHN0ZDo6c2l6ZV90IHNpemU7Ci0gICAgYm9vbCBub3JtYWxpemVkOwotCi0gICAgc3Rk
OjpzaXplX3Qgb2Zmc2V0OwotCi0gICAgc3RkOjpzaXplX3Qgc3RyaWRlOyAvLyAwIG1lYW5zIG5v
dCB0byBhZHZhbmNlIHRoZSByZWFkIHBvaW50ZXIgYXQgYWxsCi0KLSAgICBzdGQ6OnNpemVfdCBz
ZW1hbnRpY0luZGV4OwotCi0gICAgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqYnVmZmVyOwotfTsK
LQotY2xhc3MgQnVmZmVyQmFja0VuZAotewotICBwdWJsaWM6Ci0gICAgdmlydHVhbCB+QnVmZmVy
QmFja0VuZCgpIHsgfQotCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRJbnRJbmRpY2VzKCkgPSAw
OwotCi0gICAgdmlydHVhbCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZm
ZXIoc3RkOjpzaXplX3Qgc2l6ZSkgPSAwOwotICAgIHZpcnR1YWwgVHJhbnNsYXRlZFZlcnRleEJ1
ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyRm9yU3RyaWRlWmVybyhzdGQ6OnNpemVfdCBzaXplKSA9
IDA7Ci0gICAgdmlydHVhbCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKmNyZWF0ZUluZGV4QnVmZmVy
KHN0ZDo6c2l6ZV90IHNpemUsIEdMZW51bSB0eXBlKSA9IDA7Ci0gICAgdmlydHVhbCBGb3JtYXRD
b252ZXJ0ZXIgZ2V0Rm9ybWF0Q29udmVydGVyKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXpl
LCBib29sIG5vcm1hbGl6ZSkgPSAwOwotCi0gICAgLy8gRm9yIGFuIGlkZW50aXR5LW1hcHBhYmxl
IHN0cmVhbSwgdmVyaWZ5IHRoYXQgdGhlIHN0cmlkZSBhbmQgb2Zmc2V0IGFyZSBva2F5LgotICAg
IHZpcnR1YWwgYm9vbCB2YWxpZGF0ZVN0cmVhbShHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6
ZSwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBvZmZzZXQpIGNvbnN0ID0gMDsKLQot
ICAgIHZpcnR1YWwgR0xlbnVtIHNldHVwSW5kaWNlc1ByZURyYXcoY29uc3QgVHJhbnNsYXRlZElu
ZGV4RGF0YSAmaW5kZXhJbmZvKSA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gc2V0dXBBdHRyaWJ1
dGVzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkQXR0cmlidXRlICphdHRyaWJ1dGVzKSA9IDA7Ci19
OwotCi1jbGFzcyBUcmFuc2xhdGVkQnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBU
cmFuc2xhdGVkQnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpIDogbUJ1ZmZlclNpemUoc2l6ZSksIG1D
dXJyZW50UG9pbnQoMCkgeyB9Ci0gICAgdmlydHVhbCB+VHJhbnNsYXRlZEJ1ZmZlcigpIHsgfQot
Ci0gICAgc3RkOjpzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgKm1hcCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKSA9
IDA7Ci0KLSAgICB2b2lkIHJlc2VydmVTcGFjZShzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlKTsK
LQotICAgIHZvaWQgKm1hcChzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAq
b2Zmc2V0KTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHJlY3ljbGUoKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkICpzdHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6
OnNpemVfdCBzaXplKSA9IDA7Ci0KLSAgcHJpdmF0ZToKLSAgICBzdGQ6OnNpemVfdCBtQnVmZmVy
U2l6ZTsKLSAgICBzdGQ6OnNpemVfdCBtQ3VycmVudFBvaW50OwotCi0gICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRyYW5zbGF0ZWRCdWZmZXIpOwotfTsKLQotY2xhc3MgVHJhbnNsYXRlZFZl
cnRleEJ1ZmZlciA6IHB1YmxpYyBUcmFuc2xhdGVkQnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpIDogVHJhbnNs
YXRlZEJ1ZmZlcihzaXplKSB7IH0KLX07Ci0KLWNsYXNzIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciA6
IHB1YmxpYyBUcmFuc2xhdGVkQnVmZmVyCi17Ci0gIHB1YmxpYzoKLSAgICBleHBsaWNpdCBUcmFu
c2xhdGVkSW5kZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkgOiBUcmFuc2xhdGVkQnVmZmVyKHNp
emUpIHsgfQotfTsKLQotfQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfR0VPTUVUUllfQkFDS0VO
RF9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmNwcAkocmV2aXNpb24gNzQ2
NTgpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNjEzICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGdlb21ldHJ5L2R4
OS5oOiBEaXJlY3QzRCA5LWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlckJhY2tFbmQsIFRy
YW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgYW5kIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlci4KLQotI2luY2x1
ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9keDkuaCIKLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLSNk
ZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi0jaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L3ZlcnRleGNv
bnZlcnNpb24uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdl
ci5oIgotCi1uYW1lc3BhY2UKLXsKLS8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0
dHJpYiB0eXBlIHRvIEQzRCBkZWNsIHR5cGU6Ci0vLwotLy8gQllURSAgICAgICAgICAgICAgICAg
U0hPUlQgKENhc3QpCi0vLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAo
Y2FuJ3QgYmUgZXhhY3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQotLy8gVU5TSUdORURf
QllURSAgICAgICAgVUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCi0vLyBVTlNJR05F
RF9CWVRFLW5vcm0gICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8v
IFNIT1JUICAgICAgICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKLS8vIFNIT1JULW5vcm0gICAg
ICAgICAgIFNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8gVU5T
SUdORURfU0hPUlQgICAgICAgRkxPQVQgKENhc3QpCi0vLyBVTlNJR05FRF9TSE9SVC1ub3JtICBV
U0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBGSVhFRCAobm90
IGluIFdlYkdMKSBGTE9BVCAoRml4ZWRUb0Zsb2F0KQotLy8gRkxPQVQgICAgICAgICAgICAgICAg
RkxPQVQgKElkZW50aXR5KQotCi0vLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdM
ZW51bSkgdG8gdGhlIEMgdHlwZWRlZi4gCi10ZW1wbGF0ZSA8R0xlbnVtIEdMVHlwZT4gc3RydWN0
IEdMVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfQllURT4g
eyB0eXBlZGVmIEdMYnl0ZSB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxH
TF9VTlNJR05FRF9CWVRFPiB7IHR5cGVkZWYgR0x1Ynl0ZSB0eXBlOyB9OwotdGVtcGxhdGUgPD4g
c3RydWN0IEdMVG9DVHlwZTxHTF9TSE9SVD4geyB0eXBlZGVmIEdMc2hvcnQgdHlwZTsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlwZWRlZiBH
THVzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GSVhFRD4g
eyB0eXBlZGVmIEdMdWludCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxH
TF9GTE9BVD4geyB0eXBlZGVmIEdMZmxvYXQgdHlwZTsgfTsKLQotLy8gVGhpcyBkaWZmZXJzIGZy
b20gRDNEREVDTFRZUEUgaW4gdGhhdCBpdCBpcyB1bnNpemVkLiAoU2l6ZSBleHBhbnNpb24gaXMg
YXBwbGllZCBsYXN0LikKLWVudW0gRDNEVmVydGV4VHlwZQotewotICAgIEQzRFZUX0ZMT0FULAot
ICAgIEQzRFZUX1NIT1JULAotICAgIEQzRFZUX1NIT1JUX05PUk0sCi0gICAgRDNEVlRfVUJZVEUs
Ci0gICAgRDNEVlRfVUJZVEVfTk9STSwKLSAgICBEM0RWVF9VU0hPUlRfTk9STQotfTsKLQotLy8g
RDNEVG9DVHlwZSBtYXBzIGZyb20gRDNEIHZlcnRleCB0eXBlIChhcyBlbnVtIEQzRFZlcnRleFR5
cGUpIHRvIHRoZSBjb3JyZXNwb25kaW5nIEMgdHlwZS4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQg
RDNEVHlwZT4gc3RydWN0IEQzRFRvQ1R5cGUgeyB9OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNE
VG9DVHlwZTxEM0RWVF9GTE9BVD4geyB0eXBlZGVmIGZsb2F0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVD4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVF9OT1JNPiB7IHR5cGVk
ZWYgc2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VC
WVRFPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0
IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEVfTk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlw
ZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VTSE9SVF9OT1JNPiB7
IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdHlwZTsgfTsKLQotLy8gRW5jb2RlIHRoZSB0eXBlL3Np
emUgY29tYmluYXRpb25zIHRoYXQgRDNEIHBlcm1pdHMuIEZvciBlYWNoIHR5cGUvc2l6ZSBpdCBl
eHBhbmRzIHRvIGEgd2lkZW5lciB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZmlu
YWwgc2l6ZS4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgdHlwZSwgaW50IHNpemU+Ci1zdHJ1Y3Qg
V2lkZW5SdWxlCi17Ci19OwotCi10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8
RDNEVlRfRkxPQVQsIHNpemU+ICAgICAgICAgIDogZ2w6Ok5vV2lkZW48c2l6ZT4geyB9OwotdGVt
cGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JULCBzaXplPiAgICAg
ICAgICA6IGdsOjpXaWRlblRvRXZlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0
cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogZ2w6OldpZGVuVG9F
dmVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RW
VF9VQllURSwgc2l6ZT4gICAgICAgICAgOiBnbDo6V2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwotdGVt
cGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFX05PUk0sIHNpemU+
ICAgICA6IGdsOjpXaWRlblRvRm91cjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0
cnVjdCBXaWRlblJ1bGU8RDNEVlRfVVNIT1JUX05PUk0sIHNpemU+ICAgIDogZ2w6OldpZGVuVG9F
dmVuPHNpemU+IHsgfTsKLQotLy8gVmVydGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQzRENBUFM5
OjpEZWNsVHlwZSBmbGFnIGFuZCB2ZXJ0ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFjaCBEM0Qg
dmVydGV4IHR5cGUgJiBzaXplIGNvbWJpbmF0aW9uLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBk
M2R0eXBlLCBpbnQgc2l6ZT4KLXN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3MKLXsKLX07Ci0KLXRlbXBs
YXRlIDx1bnNpZ25lZCBpbnQgY2FwZmxhZywgdW5zaWduZWQgaW50IGRlY2xmbGFnPgotc3RydWN0
IFZlcnRleFR5cGVGbGFnc0hlbHBlcgotewotICAgIGVudW0geyBjYXBmbGFnID0gY2FwZmxhZyB9
OwotICAgIGVudW0geyBkZWNsZmxhZyA9IGRlY2xmbGFnIH07Ci19OwotCi10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAxPiA6IFZlcnRleFR5cGVGbGFnc0hl
bHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDE+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQz
RERFQ0xUWVBFX0ZMT0FUMj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFn
czxEM0RWVF9GTE9BVCwgMz4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVf
RkxPQVQzPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZM
T0FULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDog
VmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUMj4geyB9OwotdGVtcGxh
dGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBl
RmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQ0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPEQzRERUQ0FQU19TSE9SVDJOLCBEM0RERUNMVFlQRV9TSE9SVDJOPiB7IH07Ci10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDQ+IDogVmVy
dGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDROLCBEM0RERUNMVFlQRV9TSE9SVDRO
PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0
PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0LCBEM0RERUNMVFlQRV9V
QllURTQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZ
VEVfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQz
RERFQ0xUWVBFX1VCWVRFNE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxh
Z3M8RDNEVlRfVVNIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQ
U19VU0hPUlQyTiwgRDNEREVDTFRZUEVfVVNIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPEQzRERUQ0FQU19VU0hPUlQ0TiwgRDNEREVDTFRZUEVfVVNIT1JUNE4+IHsgfTsKLQot
Ci0vLyBWZXJ0ZXhUeXBlTWFwcGluZyBtYXBzIEdMIHR5cGUgJiBub3JtYWxpemVkIGZsYWcgdG8g
cHJlZmVycmVkIGFuZCBmYWxsYmFjayBEM0QgdmVydGV4IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBl
IGVudW1zKS4KLXRlbXBsYXRlIDxHTGVudW0gR0x0eXBlLCBib29sIG5vcm1hbGl6ZWQ+Ci1zdHJ1
Y3QgVmVydGV4VHlwZU1hcHBpbmcKLXsKLX07Ci0KLXRlbXBsYXRlIDxEM0RWZXJ0ZXhUeXBlIFBy
ZWZlcnJlZCwgRDNEVmVydGV4VHlwZSBGYWxsYmFjayA9IFByZWZlcnJlZD4KLXN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZ0Jhc2UKLXsKLSAgICBlbnVtIHsgcHJlZmVycmVkID0gUHJlZmVycmVkIH07
Ci0gICAgZW51bSB7IGZhbGxiYWNrID0gRmFsbGJhY2sgfTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICAgICAg
ICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5n
PEdMX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBp
bmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxp
emUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRF
LCBmYWxzZT4gICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllU
RSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgLy8gSWRlbnRpdHksIENhc3QKLXRlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCB0cnVlPiAgICAg
ICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURV9OT1JNLCBEM0RW
VF9GTE9BVD4geyB9OyAgICAgLy8gSWRlbnRpdHksIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgICAgICAg
ICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZGVudGl0eQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBw
aW5nPEdMX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1h
cHBpbmdCYXNlPEQzRFZUX1NIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBDYXN0
LCBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJ
R05FRF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxE
M0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAotdGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCB0cnVlPiAgICAg
ICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VTSE9SVF9OT1JNLCBEM0RW
VF9GTE9BVD4geyB9OyAgICAvLyBDYXN0LCBOb3JtYWxpemUKLXRlbXBsYXRlIDxib29sIG5vcm1h
bGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GSVhFRCwgbm9ybWFsaXplZD4gICA6
IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRml4ZWRUb0Zsb2F0Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmc8R0xfRkxPQVQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFw
cGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50
aXR5Ci0KLQotLy8gR2l2ZW4gYSBHTCB0eXBlICYgbm9ybSBmbGFnIGFuZCBhIEQzRCB0eXBlLCBD
b252ZXJzaW9uUnVsZSBwcm92aWRlcyB0aGUgdHlwZSBjb252ZXJzaW9uIHJ1bGUgKENhc3QsIE5v
cm1hbGl6ZSwgSWRlbnRpdHksIEZpeGVkVG9GbG9hdCkuCi0vLyBUaGUgY29udmVyc2lvbiBydWxl
cyB0aGVtc2VsdmVzIGFyZSBkZWZpbmVkIGluIHZlcnRleGNvbnZlcnNpb24uaC4KLQotLy8gQWxt
b3N0IGFsbCBjYXNlcyBhcmUgY292ZXJlZCBieSBDYXN0IChpbmNsdWRpbmcgdGhvc2UgdGhhdCBh
cmUgYWN0dWFsbHkgSWRlbnRpdHkgc2luY2UgQ2FzdDxULFQ+IGtub3dzIGl0J3MgYW4gaWRlbnRp
dHkgbWFwcGluZykuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQs
IHVuc2lnbmVkIGludCB0b1R5cGU+Ci1zdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0
eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEM0RUb0NUeXBlPHRv
VHlwZT46OnR5cGU+Ci17Ci19OwotCi0vLyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3JtYWxpemVk
IHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUgTm9ybWFsaXplIG9wZXJhdG9yLgotdGVtcGxhdGUgPEdM
ZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RW
VF9GTE9BVD4gOiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5
cGU+IHsgfTsKLQotLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0
IGl0IHByZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXpl
LXRvLWZsb2F0IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJ
WEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQz
RFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OwotCi0vLyBBIDIt
c3RhZ2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVz
ZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKLS8vIHdoZXRo
ZXIgaXQgaXMgbm9ybWFsaXplZCBvciBub3QuCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3Jt
YWxpemVkPgotc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTIKLXsKLX07Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCB0cnVlPiAg
OiBnbDo6Tm9ybWFsaXplZERlZmF1bHRWYWx1ZXM8VD4geyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+
IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIGZhbHNlPiA6IGdsOjpTaW1wbGVE
ZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgcnVs
ZSBmb3IgYSBEM0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZCAKLXRlbXBsYXRl
IDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+Ci1zdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlcyA6
IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgbm9ybWFsaXplZD4KLXsKLX07Ci0KLXRlbXBs
YXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0LCBu
b3JtYWxpemVkPiA6IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7IH07Ci0KLS8vIFBv
bGljeSBydWxlcyBmb3IgdXNlIHdpdGggQ29udmVydGVyLCB0byBjaG9vc2Ugd2hldGhlciB0byB1
c2UgdGhlIHByZWZlcnJlZCBvciBmYWxsYmFjayBjb252ZXJzaW9uLgotLy8gVGhlIGZhbGxiYWNr
IGNvbnZlcnNpb24gcHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkgZGV2aWNlcyBtdXN0
IHN1cHBvcnQuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZlcnJlZCB7IGVudW0g
eyB0eXBlID0gVDo6cHJlZmVycmVkIH07IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVz
ZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFjayB9OyB9OwotCi0vLyBDb252ZXJ0
ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBlL25vcm0vc2l6ZSBh
bmQgY2hvaWNlIG9mIHByZWZlcnJlZC9mYWxsYmFjayBjb252ZXJzaW9uLAotLy8gaXQgcHJvdmlk
ZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhEYXRhQ29udmVydGVy
LCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlcyBmbGFnIGluIGNhcCBmbGFnCi0vLyBhbmQgdGhlIEQz
RERFQ0xUWVBFIG1lbWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24gaW4gZGVj
bGZsYWcuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIGludCBz
aXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+Ci1zdHJ1Y3QgQ29u
dmVydGVyCi0gICAgOiBnbDo6VmVydGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFtZSBHTFRvQ1R5cGU8
ZnJvbVR5cGU+Ojp0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxl
PFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4g
Pjo6dHlwZSwgc2l6ZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9u
UnVsZTxmcm9tVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6
ZWQ+ID46OnR5cGU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZlcnRl
eFZhbHVlczx0eXBlbmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFw
cGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6ZWQgPiA+
Ci17Ci1wcml2YXRlOgotICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8IFZlcnRl
eFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07Ci0gICAgZW51bSB7
IGQzZHNpemUgPSBXaWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsKLQotcHVi
bGljOgotICAgIGVudW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNp
emU+OjpjYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQz
ZHR5cGUsIGQzZHNpemU+OjpkZWNsZmxhZyB9OwotfTsKLQotfQotCi1uYW1lc3BhY2UgZ2wKLXsK
LUR4OUJhY2tFbmQ6OkR4OUJhY2tFbmQoQ29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNl
OSAqZDNkZGV2aWNlKQotICAgIDogbURldmljZShkM2RkZXZpY2UpCi17Ci0gICAgbURldmljZS0+
QWRkUmVmKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsg
KytpKQotICAgIHsKLSAgICAgICAgbUFwcGxpZWRBdHRyaWJFbmFibGVkW2ldID0gdHJ1ZTsKLSAg
ICAgICAgbVN0cmVhbUZyZXF1ZW5jeVtpXSA9IFNUUkVBTV9GUkVRVUVOQ1lfVU5JTlNUQU5DRUQ7
Ci0gICAgfQotCi0gICAgbVN0cmVhbUZyZXF1ZW5jeVtNQVhfVkVSVEVYX0FUVFJJQlNdID0gU1RS
RUFNX0ZSRVFVRU5DWV9VTklOU1RBTkNFRDsKLQotICAgIEQzRENBUFM5IGNhcHMgPSBjb250ZXh0
LT5nZXREZXZpY2VDYXBzKCk7Ci0KLSAgICBJRGlyZWN0M0Q5ICpkM2RPYmplY3Q7Ci0gICAgbURl
dmljZS0+R2V0RGlyZWN0M0QoJmQzZE9iamVjdCk7Ci0KLSAgICBEM0RBREFQVEVSX0lERU5USUZJ
RVI5IGlkZW50OwotICAgIGQzZE9iamVjdC0+R2V0QWRhcHRlcklkZW50aWZpZXIoY2Fwcy5BZGFw
dGVyT3JkaW5hbCwgMCwgJmlkZW50KTsKLSAgICBkM2RPYmplY3QtPlJlbGVhc2UoKTsKLQotICAg
IC8vIEluc3RhbmNpbmcgaXMgbWFuZGF0b3J5IGZvciBhbGwgSFcgd2l0aCBTTTMgdmVydGV4IHNo
YWRlcnMsIGJ1dCBhdm9pZCBoYXJkd2FyZSB3aGVyZSBpdCBkb2VzIG5vdCB3b3JrLgotICAgIG1V
c2VJbnN0YW5jaW5nRm9yU3RyaWRlWmVybyA9IChjYXBzLlZlcnRleFNoYWRlclZlcnNpb24gPj0g
RDNEVlNfVkVSU0lPTigzLCAwKSAmJiBpZGVudC5WZW5kb3JJZCAhPSAweDgwODYpOwotICAgIG1T
dXBwb3J0SW50SW5kaWNlcyA9IChjYXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KSk7Ci0K
LSAgICBjaGVja1ZlcnRleENhcHMoY2Fwcy5EZWNsVHlwZXMpOwotfQotCi1EeDlCYWNrRW5kOjp+
RHg5QmFja0VuZCgpCi17Ci0gICAgbURldmljZS0+UmVsZWFzZSgpOwotfQotCi1ib29sIER4OUJh
Y2tFbmQ6OnN1cHBvcnRJbnRJbmRpY2VzKCkKLXsKLSAgICByZXR1cm4gbVN1cHBvcnRJbnRJbmRp
Y2VzOwotfQotCi0vLyBJbml0aWFsaXNlIGEgVHJhbnNsYXRpb25JbmZvCi0jZGVmaW5lIFRSQU5T
TEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6
ZSwgcHJlZmVycmVkPjo6aWRlbnRpdHksICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwg
c2l6ZSwgcHJlZmVycmVkPjo6Y29udmVydEFycmF5LCAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBF
PihDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCi0g
ICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3Jt
LCBzaXplKSAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBV
c2VQcmVmZXJyZWQ+OjpjYXBmbGFnLCBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0s
IHNpemUsIFVzZVByZWZlcnJlZCksICAgICAgICBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUs
IG5vcm0sIHNpemUsIFVzZUZhbGxiYWNrKSAgICAgICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRS
QU5TTEFUSU9OU19GT1JfVFlQRSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNl
LCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJB
TlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05f
Rk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1Jf
VFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCB0cnVlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IHRydWUsIDQpIH0sICAgICBcCi0gICAgfQotCi1jb25zdCBEeDlCYWNrRW5kOjpUcmFuc2xhdGlv
bkRlc2NyaXB0aW9uIER4OUJhY2tFbmQ6Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVS
VEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPSAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0
eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZS0xXQotewotICAgIFRSQU5TTEFUSU9OU19GT1Jf
VFlQRShHTF9CWVRFKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllU
RSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1NIT1JUKSwKLSAgICBUUkFOU0xBVElP
TlNfRk9SX1RZUEUoR0xfVU5TSUdORURfU0hPUlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQ
RShHTF9GSVhFRCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0ZMT0FUKQotfTsKLQot
dm9pZCBEeDlCYWNrRW5kOjpjaGVja1ZlcnRleENhcHMoRFdPUkQgZGVjbFR5cGVzKQotewotICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVM7
IGkrKykKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgMjsgaisr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBrID0gMDsgayA8IDQ7
IGsrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobVBvc3NpYmxlVHJhbnNs
YXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnID09IDAgfHwgKGRlY2xUeXBlcyAmIG1Qb3NzaWJsZVRy
YW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBzRmxhZykgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1BdHRyaWJ1dGVUeXBlc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRy
YW5zbGF0aW9uc1tpXVtqXVtrXS5wcmVmZXJyZWRDb252ZXJzaW9uOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBtQXR0cmlidXRlVHlwZXNbaV1bal1ba10gPSBtUG9zc2libGVUcmFuc2xhdGlvbnNb
aV1bal1ba10uZmFsbGJhY2tDb252ZXJzaW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqRHg5
QmFja0VuZDo6Y3JlYXRlVmVydGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpCi17Ci0gICAgcmV0
dXJuIG5ldyBEeDlWZXJ0ZXhCdWZmZXIobURldmljZSwgc2l6ZSk7Ci19Ci0KLVRyYW5zbGF0ZWRW
ZXJ0ZXhCdWZmZXIgKkR4OUJhY2tFbmQ6OmNyZWF0ZVZlcnRleEJ1ZmZlckZvclN0cmlkZVplcm8o
c3RkOjpzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAobVVzZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJv
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEeDlWZXJ0ZXhCdWZmZXIobURldmljZSwgc2l6
ZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRHg5VmVydGV4
QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQobURldmljZSwgc2l6ZSk7Ci0gICAgfQotfQotCi1U
cmFuc2xhdGVkSW5kZXhCdWZmZXIgKkR4OUJhY2tFbmQ6OmNyZWF0ZUluZGV4QnVmZmVyKHN0ZDo6
c2l6ZV90IHNpemUsIEdMZW51bSB0eXBlKQotewotICAgIHJldHVybiBuZXcgRHg5SW5kZXhCdWZm
ZXIobURldmljZSwgc2l6ZSwgdHlwZSk7Ci19Ci0KLS8vIFRoaXMgaXMgdXNlZCB0byBpbmRleCBt
QXR0cmlidXRlVHlwZXMgYW5kIG1Qb3NzaWJsZVRyYW5zbGF0aW9ucy4KLXVuc2lnbmVkIGludCBE
eDlCYWNrRW5kOjp0eXBlSW5kZXgoR0xlbnVtIHR5cGUpIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0
eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQllURTogcmV0dXJuIDA7Ci0gICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6IHJldHVybiAxOwotICAgICAgY2FzZSBHTF9TSE9SVDogcmV0dXJuIDI7
Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gMzsKLSAgICAgIGNhc2UgR0xf
RklYRUQ6IHJldHVybiA0OwotICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIDU7Ci0KLSAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiA1OwotICAgIH0KLX0KLQotRm9ybWF0Q29u
dmVydGVyIER4OUJhY2tFbmQ6OmdldEZvcm1hdENvbnZlcnRlcihHTGVudW0gdHlwZSwgc3RkOjpz
aXplX3Qgc2l6ZSwgYm9vbCBub3JtYWxpemUpCi17Ci0gICAgcmV0dXJuIG1BdHRyaWJ1dGVUeXBl
c1t0eXBlSW5kZXgodHlwZSldW25vcm1hbGl6ZV1bc2l6ZS0xXS5mb3JtYXRDb252ZXJ0ZXI7Ci19
Ci0KLUQzRERFQ0xUWVBFIER4OUJhY2tFbmQ6Om1hcEF0dHJpYnV0ZVR5cGUoR0xlbnVtIHR5cGUs
IHN0ZDo6c2l6ZV90IHNpemUsIGJvb2wgbm9ybWFsaXplKSBjb25zdAotewotICAgIHJldHVybiBt
QXR0cmlidXRlVHlwZXNbdHlwZUluZGV4KHR5cGUpXVtub3JtYWxpemVdW3NpemUtMV0uZDNkRGVj
bFR5cGU7Ci19Ci0KLWJvb2wgRHg5QmFja0VuZDo6dmFsaWRhdGVTdHJlYW0oR0xlbnVtIHR5cGUs
IHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgb2Zmc2V0
KSBjb25zdAotewotICAgIC8vIEQzRDkgcmVxdWlyZXMgdGhlIHN0cmVhbSBvZmZzZXQgYW5kIHN0
cmlkZSB0byBiZSBhIG11bHRpcGxlIG9mIERXT1JELgotICAgIHJldHVybiAoc3RyaWRlICUgc2l6
ZW9mKERXT1JEKSA9PSAwICYmIG9mZnNldCAlIHNpemVvZihEV09SRCkgPT0gMCk7Ci19Ci0KLUlE
aXJlY3QzRFZlcnRleEJ1ZmZlcjkgKkR4OUJhY2tFbmQ6OmdldER4QnVmZmVyKFRyYW5zbGF0ZWRW
ZXJ0ZXhCdWZmZXIgKnZiKSBjb25zdAotewotICAgIHJldHVybiB2YiA/IHN0YXRpY19jYXN0PER4
OVZlcnRleEJ1ZmZlcio+KHZiKS0+Z2V0QnVmZmVyKCkgOiBOVUxMOwotfQotCi1JRGlyZWN0M0RJ
bmRleEJ1ZmZlcjkgKkR4OUJhY2tFbmQ6OmdldER4QnVmZmVyKFRyYW5zbGF0ZWRJbmRleEJ1ZmZl
ciAqaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGliID8gc3RhdGljX2Nhc3Q8RHg5SW5kZXhCdWZm
ZXIqPihpYiktPmdldEJ1ZmZlcigpIDogTlVMTDsKLX0KLQotR0xlbnVtIER4OUJhY2tFbmQ6OnNl
dHVwSW5kaWNlc1ByZURyYXcoY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvKQot
ewotICAgIG1EZXZpY2UtPlNldEluZGljZXMoZ2V0RHhCdWZmZXIoaW5kZXhJbmZvLmJ1ZmZlcikp
OwotICAgIHJldHVybiBHTF9OT19FUlJPUjsKLX0KLQotR0xlbnVtIER4OUJhY2tFbmQ6OnNldHVw
QXR0cmlidXRlc1ByZURyYXcoY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0cmlidXRlcykK
LXsKLSAgICBIUkVTVUxUIGhyOwotCi0gICAgRDNEVkVSVEVYRUxFTUVOVDkgZWxlbWVudHNbTUFY
X1ZFUlRFWF9BVFRSSUJTKzFdOwotCi0gICAgRDNEVkVSVEVYRUxFTUVOVDkgKm5leHRFbGVtZW50
ID0gJmVsZW1lbnRzWzBdOwotCi0gICAgZm9yIChCWVRFIGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5lbmFibGVkKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBuZXh0RWxlbWVudC0+U3RyZWFtID0gaSArIDE7ICAgIC8v
IFN0cmVhbSAwIGlzIHNraXBwZWQgYmVjYXVzZSBEM0QgZG9lcyBub3QgcGVybWl0IGl0IHRvIGJl
IGFuIGluc3RhbmNlZCBzdHJlYW0uCi0gICAgICAgICAgICBuZXh0RWxlbWVudC0+T2Zmc2V0ID0g
MDsKLSAgICAgICAgICAgIG5leHRFbGVtZW50LT5UeXBlID0gc3RhdGljX2Nhc3Q8QllURT4obWFw
QXR0cmlidXRlVHlwZShhdHRyaWJ1dGVzW2ldLnR5cGUsIGF0dHJpYnV0ZXNbaV0uc2l6ZSwgYXR0
cmlidXRlc1tpXS5ub3JtYWxpemVkKSk7Ci0gICAgICAgICAgICBuZXh0RWxlbWVudC0+TWV0aG9k
ID0gRDNEREVDTE1FVEhPRF9ERUZBVUxUOwotICAgICAgICAgICAgbmV4dEVsZW1lbnQtPlVzYWdl
ID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwotICAgICAgICAgICAgbmV4dEVsZW1lbnQtPlVzYWdl
SW5kZXggPSBhdHRyaWJ1dGVzW2ldLnNlbWFudGljSW5kZXg7Ci0gICAgICAgICAgICBuZXh0RWxl
bWVudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IEQzRFZFUlRFWEVM
RU1FTlQ5IGVuZCA9IEQzRERFQ0xfRU5EKCk7Ci0gICAgKm5leHRFbGVtZW50ID0gZW5kOwotCi0g
ICAgSURpcmVjdDNEVmVydGV4RGVjbGFyYXRpb245KiB2ZXJ0ZXhEZWNsYXJhdGlvbjsKLSAgICBo
ciA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleERlY2xhcmF0aW9uKGVsZW1lbnRzLCAmdmVydGV4RGVj
bGFyYXRpb24pOwotICAgIG1EZXZpY2UtPlNldFZlcnRleERlY2xhcmF0aW9uKHZlcnRleERlY2xh
cmF0aW9uKTsKLSAgICB2ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotCi0gICAgbURldmlj
ZS0+U2V0U3RyZWFtU291cmNlKDAsIE5VTEwsIDAsIDApOwotCi0gICAgYm9vbCBub25BcnJheUF0
dHJpYnV0ZXMgPSBmYWxzZTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTUFYX1ZFUlRF
WF9BVFRSSUJTOyBpKyspCi0gICAgewotICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5lbmFibGVk
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5ub25BcnJheSkgbm9u
QXJyYXlBdHRyaWJ1dGVzID0gdHJ1ZTsKLQotICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFt
U291cmNlKGkgKyAxLCBnZXREeEJ1ZmZlcihhdHRyaWJ1dGVzW2ldLmJ1ZmZlciksIGF0dHJpYnV0
ZXNbaV0ub2Zmc2V0LCBhdHRyaWJ1dGVzW2ldLnN0cmlkZSk7Ci0gICAgICAgICAgICBpZiAoIW1B
cHBsaWVkQXR0cmliRW5hYmxlZFtpXSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
QXBwbGllZEF0dHJpYkVuYWJsZWRbaV0gPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1BcHBsaWVkQXR0cmli
RW5hYmxlZFtpXSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2UoaSArIDEsIDAsIDAsIDApOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkQXR0
cmliRW5hYmxlZFtpXSA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1Vc2VJbnN0YW5jaW5nRm9yU3RyaWRlWmVybykKLSAgICB7Ci0gICAgICAgIC8v
IFdoZW4gdGhlcmUgYXJlIG5vIHN0cmlkZSB6ZXJvIGF0dHJpYnV0ZXMsIHdlIGRpc2FibGUgaW5z
dGFuY2luZyBzbyB0aGF0IERyYXdQcmltaXRpdmUgY2FuIGJlIHVzZWQuCi0KLSAgICAgICAgaWYg
KG5vbkFycmF5QXR0cmlidXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1TdHJlYW1G
cmVxdWVuY3lbMF0gIT0gU1RSRUFNX0ZSRVFVRU5DWV9JTkRFWEVEKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG1TdHJlYW1GcmVxdWVuY3lbMF0gPSBTVFJFQU1fRlJFUVVFTkNZX0lO
REVYRUQ7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCBE
M0RTVFJFQU1TT1VSQ0VfSU5ERVhFRERBVEEgfCAxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5lbmFibGVkKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0u
bm9uQXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtU3RyZWFtRnJlcXVlbmN5W2krMV0gIT0gU1RSRUFNX0ZSRVFVRU5DWV9JTlNUQU5DRUQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVN0cmVhbUZyZXF1ZW5jeVtpKzFdID0gU1RSRUFNX0ZSRVFVRU5DWV9JTlNUQU5DRUQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpICsg
MSwgRDNEU1RSRUFNU09VUkNFX0lOU1RBTkNFREFUQSB8IDEpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1TdHJl
YW1GcmVxdWVuY3lbaSsxXSAhPSBTVFJFQU1fRlJFUVVFTkNZX0lOREVYRUQpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0cmVhbUZyZXF1
ZW5jeVtpKzFdID0gU1RSRUFNX0ZSRVFVRU5DWV9JTkRFWEVEOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoaSArIDEsIEQzRFNUUkVBTVNP
VVJDRV9JTkRFWEVEREFUQSB8IDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlMgKyAxOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1TdHJlYW1GcmVxdWVuY3lbaV0gIT0gU1RSRUFNX0ZSRVFVRU5DWV9V
TklOU1RBTkNFRCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1TdHJl
YW1GcmVxdWVuY3lbaV0gPSBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFOQ0VEOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQsIGJ1dCBvdGhlcndpc2Ug
dGhlcmUgaXMgYSBidWdneSBkcml2ZXIgdGhhdCB3aWxsIGxlYXZlIGluc3RhbmNpbmcKLSAgICAg
ICAgICAgICAgICAgICAgLy8gZW5hYmxlZCBmb3IgdGhlIGZpcnN0IGRyYXcgYWZ0ZXIgaXQgaGFz
IGJlZW4gdHVybmVkIG9mZi4KLSAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFt
U291cmNlRnJlcShpLCBEM0RTVFJFQU1TT1VSQ0VfSU5ERVhFRERBVEEgfCAxKTsKLQotICAgICAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBHTF9OT19FUlJPUjsKLX0KLQotRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjpEeDlWZXJ0
ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplKQotICAg
IDogVHJhbnNsYXRlZFZlcnRleEJ1ZmZlcihzaXplKQotewotICAgIEhSRVNVTFQgaHIgPSBkZXZp
Y2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihzaXplLCBEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0Vf
V1JJVEVPTkxZLCAwLCBEM0RQT09MX0RFRkFVTFQsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKLSAg
ICBpZiAoaHIgIT0gU19PSykKLSAgICB7Ci0gICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxv
Y2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsKLSAgICAgICAgdGhy
b3cgc3RkOjpiYWRfYWxsb2MoKTsKLSAgICB9Ci19Ci0KLUR4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1
ZmZlcjo6RHg5VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXpl
X3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncykKLSAgICA6IFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIo
c2l6ZSkKLXsKLSAgICBIUkVTVUxUIGhyID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6
ZSwgdXNhZ2VGbGFncywgMCwgRDNEUE9PTF9ERUZBVUxULCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7
Ci0gICAgaWYgKGhyICE9IFNfT0spCi0gICAgewotICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkg
YWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7Ci0gICAgICAg
IHRocm93IHN0ZDo6YmFkX2FsbG9jKCk7Ci0gICAgfQotfQotCi0KLUR4OUJhY2tFbmQ6OkR4OVZl
cnRleEJ1ZmZlcjo6fkR4OVZlcnRleEJ1ZmZlcigpCi17Ci0gICAgbVZlcnRleEJ1ZmZlci0+UmVs
ZWFzZSgpOwotfQotCi1JRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpEeDlCYWNrRW5kOjpEeDlWZXJ0
ZXhCdWZmZXI6OmdldEJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1WZXJ0ZXhCdWZmZXI7
Ci19Ci0KLXZvaWQgKkR4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6bWFwKCkKLXsKLSAgICB2
b2lkICptYXBQdHI7Ci0KLSAgICBtVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZtYXBQdHIsIDAp
OwotCi0gICAgcmV0dXJuIG1hcFB0cjsKLX0KLQotdm9pZCBEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhC
dWZmZXI6OnVubWFwKCkKLXsKLSAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLX0KLQotdm9p
ZCBEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6OnJlY3ljbGUoKQotewotICAgIHZvaWQgKmR1
bW15OwotICAgIG1WZXJ0ZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJU0NB
UkQpOwotICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotfQotCi12b2lkICpEeDlCYWNrRW5k
OjpEeDlWZXJ0ZXhCdWZmZXI6OnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6
c2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCAqbWFwUHRyOwotCi0gICAgbVZlcnRleEJ1ZmZlci0+
TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIsIEQzRExPQ0tfTk9PVkVSV1JJVEUpOwotCi0gICAg
cmV0dXJuIG1hcFB0cjsKLX0KLQotLy8gTm9ybWFsbHkgVkJzIGFyZSBjcmVhdGVkIHdpdGggRDNE
VVNBR0VfV1JJVEVPTkxZIHwgRDNEVVNBR0VfRFlOQU1JQywgYnV0IHNvbWUgaGFyZHdhcmUgJiBk
cml2ZXJzIHdvbid0IHJlbmRlcgotLy8gaWYgYW55IHN0cmlkZS16ZXJvIHN0cmVhbXMgYXJlIGlu
IEQzRFVTQUdFX0RZTkFNSUMgVkJzLCBzbyB0aGlzIHByb3ZpZGVzIGEgd2F5IHRvIGNyZWF0ZSBz
dWNoIFZCcyB3aXRoIG9ubHkgRDNEVVNBR0VfV1JJVEVPTkxZIHNldC4KLS8vIEQzRExPQ0tfRElT
Q0FSRCBhbmQgRDNETE9DS19OT09WRVJXUklURSBhcmUgb25seSBhdmFpbGFibGUgb24gRDNEVVNB
R0VfRFlOQU1JQyBWQnMsIHNvIHdlIG92ZXJyaWRlIG1ldGhvZHMgdG8gYXZvaWQgdXNpbmcgdGhl
c2UgZmxhZ3MuCi1EeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3Vu
ZDo6RHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQoSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplKQotICAgIDogRHg5VmVydGV4QnVmZmVyKGRldmljZSwg
c2l6ZSwgRDNEVVNBR0VfV1JJVEVPTkxZKQotewotfQotCi12b2lkIER4OUJhY2tFbmQ6OkR4OVZl
cnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kOjpyZWN5Y2xlKCkKLXsKLX0KLQotdm9pZCAq
RHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQ6OnN0cmVhbWlu
Z01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCAq
bWFwUHRyOwotCi0gICAgZ2V0QnVmZmVyKCktPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCAw
KTsKLQotICAgIHJldHVybiBtYXBQdHI7Ci19Ci0KLUR4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVy
OjpEeDlJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNp
emUsIEdMZW51bSB0eXBlKQotICAgIDogVHJhbnNsYXRlZEluZGV4QnVmZmVyKHNpemUpCi17Ci0g
ICAgQVNTRVJUKHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQgfHwgdHlwZSA9PSBHTF9VTlNJR05F
RF9JTlQpOwotCi0gICAgRDNERk9STUFUIGZvcm1hdCA9ICh0eXBlID09IEdMX1VOU0lHTkVEX1NI
T1JUKSA/IEQzREZNVF9JTkRFWDE2IDogRDNERk1UX0lOREVYMzI7Ci0KLSAgICBIUkVTVUxUIGhy
ID0gZGV2aWNlLT5DcmVhdGVJbmRleEJ1ZmZlcihzaXplLCBEM0RVU0FHRV9EWU5BTUlDIHwgRDNE
VVNBR0VfV1JJVEVPTkxZLCBmb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1JbmRleEJ1ZmZlciwg
TlVMTCk7Ci0gICAgaWYgKGhyICE9IFNfT0spCi0gICAgewotICAgICAgICBFUlIoIk91dCBvZiBt
ZW1vcnkgYWxsb2NhdGluZyBhbiBpbmRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7Ci0g
ICAgICAgIHRocm93IHN0ZDo6YmFkX2FsbG9jKCk7Ci0gICAgfQotfQotCi1EeDlCYWNrRW5kOjpE
eDlJbmRleEJ1ZmZlcjo6fkR4OUluZGV4QnVmZmVyKCkKLXsKLSAgICBtSW5kZXhCdWZmZXItPlJl
bGVhc2UoKTsKLX0KLQotSURpcmVjdDNESW5kZXhCdWZmZXI5KkR4OUJhY2tFbmQ6OkR4OUluZGV4
QnVmZmVyOjpnZXRCdWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiBtSW5kZXhCdWZmZXI7Ci19
Ci0KLXZvaWQgKkR4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjptYXAoKQotewotICAgIHZvaWQg
Km1hcFB0cjsKLQotICAgIG1JbmRleEJ1ZmZlci0+TG9jaygwLCAwLCAmbWFwUHRyLCAwKTsKLQot
ICAgIHJldHVybiBtYXBQdHI7Ci19Ci0KLXZvaWQgRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6
OnVubWFwKCkKLXsKLSAgICBtSW5kZXhCdWZmZXItPlVubG9jaygpOwotfQotCi12b2lkIER4OUJh
Y2tFbmQ6OkR4OUluZGV4QnVmZmVyOjpyZWN5Y2xlKCkKLXsKLSAgICB2b2lkICpkdW1teTsKLSAg
ICBtSW5kZXhCdWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJU0NBUkQpOwotICAg
IG1JbmRleEJ1ZmZlci0+VW5sb2NrKCk7Ci19Ci0KLXZvaWQgKkR4OUJhY2tFbmQ6OkR4OUluZGV4
QnVmZmVyOjpzdHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXpl
KQotewotICAgIHZvaWQgKm1hcFB0cjsKLQotICAgIG1JbmRleEJ1ZmZlci0+TG9jayhvZmZzZXQs
IHNpemUsICZtYXBQdHIsIEQzRExPQ0tfTk9PVkVSV1JJVEUpOwotCi0gICAgcmV0dXJuIG1hcFB0
cjsKLX0KLQotfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oCShyZXZpc2lvbiA3
NDY1OCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTM3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGdlb21ldHJ5L2R4
OS5oOiBEaXJlY3QzRCA5LWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlckJhY2tFbmQsIFRy
YW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgYW5kIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlci4KLQotI2lmbmRl
ZiBMSUJHTEVTVjJfR0VPTUVUUllfRFg5X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9E
WDlfSF8KLQotI2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgotCi1uYW1lc3BhY2Ug
Z2wKLXsKLQotY2xhc3MgRHg5QmFja0VuZCA6IHB1YmxpYyBCdWZmZXJCYWNrRW5kCi17Ci0gIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBEeDlCYWNrRW5kKENvbnRleHQgKmNvbnRleHQsIElEaXJlY3Qz
RERldmljZTkgKmQzZGRldmljZSk7Ci0gICAgfkR4OUJhY2tFbmQoKTsKLQotICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0SW50SW5kaWNlcygpOwotCi0gICAgdmlydHVhbCBUcmFuc2xhdGVkVmVydGV4
QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSk7Ci0gICAgdmlydHVh
bCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVaZXJv
KHN0ZDo6c2l6ZV90IHNpemUpOwotICAgIHZpcnR1YWwgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpj
cmVhdGVJbmRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplLCBHTGVudW0gdHlwZSk7Ci0gICAgdmly
dHVhbCBGb3JtYXRDb252ZXJ0ZXIgZ2V0Rm9ybWF0Q29udmVydGVyKEdMZW51bSB0eXBlLCBzdGQ6
OnNpemVfdCBzaXplLCBib29sIG5vcm1hbGl6ZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsaWRh
dGVTdHJlYW0oR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6c2l6ZV90IHN0cmlk
ZSwgc3RkOjpzaXplX3Qgb2Zmc2V0KSBjb25zdDsKLQotICAgIHZpcnR1YWwgR0xlbnVtIHNldHVw
SW5kaWNlc1ByZURyYXcoY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvKTsKLSAg
ICB2aXJ0dWFsIEdMZW51bSBzZXR1cEF0dHJpYnV0ZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRB
dHRyaWJ1dGUgKmF0dHJpYnV0ZXMpOwotCi0gIHByaXZhdGU6Ci0gICAgSURpcmVjdDNERGV2aWNl
OSAqbURldmljZTsKLQotICAgIGJvb2wgbVVzZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJvOwotICAg
IGJvb2wgbVN1cHBvcnRJbnRJbmRpY2VzOwotCi0gICAgYm9vbCBtQXBwbGllZEF0dHJpYkVuYWJs
ZWRbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKLQotICAgIGVudW0gU3RyZWFtRnJlcXVlbmN5Ci0gICAg
ewotICAgICAgICBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFOQ0VEID0gMCwKLSAgICAgICAgU1RS
RUFNX0ZSRVFVRU5DWV9JTkRFWEVELAotICAgICAgICBTVFJFQU1fRlJFUVVFTkNZX0lOU1RBTkNF
RAotICAgIH07Ci0KLSAgICBTdHJlYW1GcmVxdWVuY3kgbVN0cmVhbUZyZXF1ZW5jeVtNQVhfVkVS
VEVYX0FUVFJJQlMrMV07Ci0KLSAgICBzdHJ1Y3QgVHJhbnNsYXRpb25JbmZvCi0gICAgewotICAg
ICAgICBGb3JtYXRDb252ZXJ0ZXIgZm9ybWF0Q29udmVydGVyOwotICAgICAgICBEM0RERUNMVFlQ
RSBkM2REZWNsVHlwZTsKLSAgICB9OwotCi0gICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklC
X1RZUEVTID0gNiB9OwotCi0gICAgVHJhbnNsYXRpb25JbmZvIG1BdHRyaWJ1dGVUeXBlc1tOVU1f
R0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVk
IGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplLTFdCi0KLSAgICBzdHJ1Y3QgVHJhbnNs
YXRpb25EZXNjcmlwdGlvbgotICAgIHsKLSAgICAgICAgRFdPUkQgY2Fwc0ZsYWc7Ci0gICAgICAg
IFRyYW5zbGF0aW9uSW5mbyBwcmVmZXJyZWRDb252ZXJzaW9uOwotICAgICAgICBUcmFuc2xhdGlv
bkluZm8gZmFsbGJhY2tDb252ZXJzaW9uOwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHRhYmxlIGlz
IHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgotICAgIHN0YXRpYyBjb25zdCBUcmFu
c2xhdGlvbkRlc2NyaXB0aW9uIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FU
VFJJQl9UWVBFU11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRl
eCgpXVtub3JtYWxpemVkXVtzaXplLTFdCi0KLSAgICB2b2lkIGNoZWNrVmVydGV4Q2FwcyhEV09S
RCBkZWNsVHlwZXMpOwotCi0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleChHTGVudW0gdHlwZSkg
Y29uc3Q7Ci0KLSAgICBjbGFzcyBEeDlWZXJ0ZXhCdWZmZXIgOiBwdWJsaWMgVHJhbnNsYXRlZFZl
cnRleEJ1ZmZlcgotICAgIHsKLSAgICAgIHB1YmxpYzoKLSAgICAgICAgRHg5VmVydGV4QnVmZmVy
KElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSk7Ci0gICAgICAgIHZp
cnR1YWwgfkR4OVZlcnRleEJ1ZmZlcigpOwotCi0gICAgICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZl
cjkgKmdldEJ1ZmZlcigpIGNvbnN0OwotCi0gICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIER4OVZl
cnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIERX
T1JEIHVzYWdlRmxhZ3MpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCAqbWFwKCk7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCB1bm1hcCgpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlKCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAqc3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwg
c3RkOjpzaXplX3Qgc2l6ZSk7Ci0KLSAgICAgIHByaXZhdGU6Ci0gICAgICAgIElEaXJlY3QzRFZl
cnRleEJ1ZmZlcjkgKm1WZXJ0ZXhCdWZmZXI7Ci0gICAgfTsKLQotICAgIGNsYXNzIER4OVZlcnRl
eEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kIDogcHVibGljIER4OVZlcnRleEJ1ZmZlcgotICAg
IHsKLSAgICAgIHB1YmxpYzoKLSAgICAgICAgRHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmth
cm91bmQoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplKTsKLQotICAg
ICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZSgpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgKnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90
IHNpemUpOwotICAgIH07Ci0KLSAgICBjbGFzcyBEeDlJbmRleEJ1ZmZlciA6IHB1YmxpYyBUcmFu
c2xhdGVkSW5kZXhCdWZmZXIKLSAgICB7Ci0gICAgICBwdWJsaWM6Ci0gICAgICAgIER4OUluZGV4
QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVt
IHR5cGUpOwotICAgICAgICB2aXJ0dWFsIH5EeDlJbmRleEJ1ZmZlcigpOwotCi0gICAgICAgIElE
aXJlY3QzREluZGV4QnVmZmVyOSAqZ2V0QnVmZmVyKCkgY29uc3Q7Ci0KLSAgICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgdmlydHVhbCB2b2lkICptYXAoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVu
bWFwKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJlY3ljbGUoKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkICpzdHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXpl
KTsKLQotICAgICAgcHJpdmF0ZToKLSAgICAgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICptSW5k
ZXhCdWZmZXI7Ci0gICAgfTsKLQotICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKmdldER4QnVm
ZmVyKFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKnZiKSBjb25zdDsKLSAgICBJRGlyZWN0M0RJbmRl
eEJ1ZmZlcjkgKmdldER4QnVmZmVyKFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqaWIpIGNvbnN0Owot
Ci0gICAgRDNEREVDTFRZUEUgbWFwQXR0cmlidXRlVHlwZShHTGVudW0gdHlwZSwgc3RkOjpzaXpl
X3Qgc2l6ZSwgYm9vbCBub3JtYWxpemVkKSBjb25zdDsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8g
TElCR0xFU1YyX0dFT01FVFJZX0RYOV9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9t
ZXRyeS92ZXJ0ZXhjb252ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2
Mi9nZW9tZXRyeS92ZXJ0ZXhjb252ZXJzaW9uLmgJKHJldmlzaW9uIDc0NjU4KQorKysgQU5HTEUv
c3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS92ZXJ0ZXhjb252ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMjA4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGdlb21ldHJ5L3ZlcnRl
eGNvbnZlcnNpb24uaDogQSBsaWJyYXJ5IG9mIHZlcnRleCBjb252ZXJzaW9uIGNsYXNzZXMgdGhh
dCBjYW4gYmUgdXNlZCB0byBidWlsZAotLy8gdGhlIEZvcm1hdENvbnZlcnRlciBvYmplY3RzIHVz
ZWQgYnkgdGhlIGJ1ZmZlciBjb252ZXJzaW9uIHN5c3RlbS4KLQotI2lmbmRlZiBMSUJHTEVTVjJf
R0VPTUVUUllfVkVSVEVYQ09OVkVSU0lPTl9IXwotI2RlZmluZSBMSUJHTEVTVjJfR0VPTUVUUllf
VkVSVEVYQ09OVkVSU0lPTl9IXwotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxsaW1p
dHM+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIiAvLyBEZWZpbmVzIEluZGV4Ci0K
LW5hbWVzcGFjZSBnbAotewotCi0vLyBDb252ZXJzaW9uIHR5cGVzOgotLy8gc3RhdGljIGNvbnN0
IGJvb2wgaWRlbnRpdHk6IHRydWUgaWYgdGhpcyBpcyBhbiBpZGVudGl0eSB0cmFuc2Zvcm0sIGZh
bHNlIG90aGVyd2lzZQotLy8gc3RhdGljIFUgY29udmVydChUKTogY29udmVydCBhIHNpbmdsZSBl
bGVtZW50IGZyb20gdGhlIGlucHV0IHR5cGUgdG8gdGhlIG91dHB1dCB0eXBlCi0vLyB0eXBlZGVm
IC4uLiBPdXRwdXRUeXBlOiB0aGUgdHlwZSBwcm9kdWNlZCBieSB0aGlzIGNvbnZlcnNpb24KLQot
dGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgSWRlbnRpdHkKLXsKLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpZGVudGl0eSA9IHRydWU7Ci0KLSAgICB0eXBlZGVmIFQgT3V0cHV0VHlwZTsKLQotICAg
IHN0YXRpYyBUIGNvbnZlcnQoVCB4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGUgPGNsYXNzIEZyb21ULCBjbGFzcyBUb1Q+Ci1zdHJ1Y3QgQ2FzdAotewot
ICAgIHN0YXRpYyBjb25zdCBib29sIGlkZW50aXR5ID0gZmFsc2U7Ci0KLSAgICB0eXBlZGVmIFRv
VCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIFRvVCBjb252ZXJ0KEZyb21UIHgpCi0gICAgewot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9UPih4KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4KLXN0cnVjdCBDYXN0PFQsIFQ+Ci17Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
aWRlbnRpdHkgPSB0cnVlOwotCi0gICAgdHlwZWRlZiBUIE91dHB1dFR5cGU7Ci0KLSAgICBzdGF0
aWMgVCBjb252ZXJ0KFQgeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBOb3JtYWxpemUKLXsK
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eSA9IGZhbHNlOwotCi0gICAgdHlwZWRlZiBm
bG9hdCBPdXRwdXRUeXBlOwotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoVCB4KQotICAgIHsK
LSAgICAgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5MOwotICAgICAgICBmbG9h
dCBmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpOwotCi0gICAgICAgIGlmIChOTDo6aXNfc2lnbmVk
KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBjb25zdCBmbG9hdCA9PiBWQzIwMDggY29tcHV0
ZXMgaXQgYXQgY29tcGlsZSB0aW1lCi0gICAgICAgICAgICAvLyBzdGF0aWMgY29uc3QgZmxvYXQg
PT4gVkMyMDA4IGNvbXB1dGVzIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdldCBoZXJlLCBzdG9yZXMg
aXQgdG8gbWVtb3J5IHdpdGggc3RhdGljIGd1YXJkIGFuZCBhbGwgdGhhdC4KLSAgICAgICAgICAg
IGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmLygyKnN0YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4
KCkpKzEpOwotICAgICAgICAgICAgcmV0dXJuICgyKmYrMSkqZGl2aXNvcjsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmL05MOjptYXgoKTsK
LSAgICAgICAgfQotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBGcm9tVHlwZSwgc3RkOjpz
aXplX3QgU2NhbGVCaXRzPgotc3RydWN0IEZpeGVkVG9GbG9hdAotewotICAgIHN0YXRpYyBjb25z
dCBib29sIGlkZW50aXR5ID0gZmFsc2U7Ci0KLSAgICB0eXBlZGVmIGZsb2F0IE91dHB1dFR5cGU7
Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChGcm9tVHlwZSB4KQotICAgIHsKLSAgICAgICAg
Y29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nh
c3Q8RnJvbVR5cGU+KDEpIDw8IFNjYWxlQml0cyk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4oeCkgKiBkaXZpc29yOwotICAgIH0KLX07Ci0KLS8vIFdpZGVuIHR5cGVzOgotLy8g
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbml0aWFsV2lkdGg6IG51bWJlciBvZiBjb21wb25l
bnRzIGJlZm9yZSBjb252ZXJzaW9uCi0vLyBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZpbmFs
V2lkdGg6IG51bWJlciBvZiBjb21wb25lbnRzIGFmdGVyIGNvbnZlcnNpb24KLQotLy8gRmxvYXQg
aXMgc3VwcG9ydGVkIGF0IGFueSBzaXplLgotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1
Y3QgTm9XaWRlbgotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGgg
PSBOOwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gTjsKLX07Ci0K
LS8vIFNIT1JULCBub3JtLVNIT1JULCBub3JtLVVOU0lHTkVEX1NIT1JUIGFyZSBzdXBwb3J0ZWQg
YnV0IG9ubHkgd2l0aCAyIG9yIDQgY29tcG9uZW50cwotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+
Ci1zdHJ1Y3QgV2lkZW5Ub0V2ZW4KLXsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgaW5p
dGlhbFdpZHRoID0gTjsKLSAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZmluYWxXaWR0aCA9
IE4rKE4mMSk7Ci19OwotCi10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KLXN0cnVjdCBXaWRlblRv
Rm91cgotewotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBpbml0aWFsV2lkdGggPSBOOwot
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFdpZHRoID0gNDsKLX07Ci0KLS8vIE1v
c3QgdHlwZXMgaGF2ZSAwIGFuZCAxIHRoYXQgYXJlIGp1c3QgdGhhdC4KLXRlbXBsYXRlIDxjbGFz
cyBUPgotc3RydWN0IFNpbXBsZURlZmF1bHRWYWx1ZXMKLXsKLSAgICBzdGF0aWMgVCB6ZXJvKCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7IH0KLSAgICBzdGF0aWMgVCBvbmUoKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxUPigxKTsgfQotfTsKLQotLy8gQnV0IG5vcm1hbGlzZWQgdHlwZXMgb25s
eSBzdG9yZSBbMCwxXSBvciBbLTEsMV0gc28gMS4wIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBtYXgg
dmFsdWUuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBOb3JtYWxpemVkRGVmYXVsdFZhbHVl
cwotewotICAgIHN0YXRpYyBUIHplcm8oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPigwKTsgfQot
ICAgIHN0YXRpYyBUIG9uZSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgp
OyB9Ci19OwotCi0vLyBDb252ZXJ0ZXI6Ci0vLyBzdGF0aWMgY29uc3QgYm9vbCBpZGVudGl0eTog
dHJ1ZSBpZiB0aGlzIGlzIGFuIGlkZW50aXR5IHRyYW5zZm9ybSAod2l0aCBubyB3aWRlbmluZykK
LS8vIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNpemU6IG51bWJlciBvZiBieXRlcyBw
ZXIgb3V0cHV0IHZlcnRleAotLy8gc3RhdGljIHZvaWQgY29udmVydEFycmF5KGNvbnN0IHZvaWQg
KmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk6IGNvbnZl
cnQgYW4gYXJyYXkgb2YgdmVydGljZXMuIElucHV0IG1heSBiZSBzdHJpZGVkLCBidXQgb3V0cHV0
IHdpbGwgYmUgdW5zdHJpZGVkLgotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5ULCBjbGFzcyBXaWRlblJ1
bGUsIGNsYXNzIENvbnZlcnRlciwgY2xhc3MgRGVmYXVsdFZhbHVlUnVsZSA9IFNpbXBsZURlZmF1
bHRWYWx1ZXM8SW5UPiA+Ci1zdHJ1Y3QgVmVydGV4RGF0YUNvbnZlcnRlcgotewotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQ29udmVydGVyOjpPdXRwdXRUeXBlIE91dHB1dFR5cGU7Ci0gICAgdHlwZWRl
ZiBJblQgSW5wdXRUeXBlOwotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgaWRlbnRpdHkgPSAoV2lk
ZW5SdWxlOjppbml0aWFsV2lkdGggPT0gV2lkZW5SdWxlOjpmaW5hbFdpZHRoKSAmJiBDb252ZXJ0
ZXI6OmlkZW50aXR5OwotICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBmaW5hbFNpemUgPSBX
aWRlblJ1bGU6OmZpbmFsV2lkdGggKiBzaXplb2YoT3V0cHV0VHlwZSk7Ci0KLSAgICBzdGF0aWMg
dm9pZCBjb252ZXJ0QXJyYXkoY29uc3QgSW5wdXRUeXBlICppbiwgc3RkOjpzaXplX3Qgc3RyaWRl
LCBzdGQ6OnNpemVfdCBuLCBPdXRwdXRUeXBlICpvdXQpCi0gICAgewotICAgICAgICBmb3IgKHN0
ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25z
dCBJbnB1dFR5cGUgKmVpbiA9IHBvaW50ZXJBZGRCeXRlcyhpbiwgaSAqIHN0cmlkZSk7Ci0KLSAg
ICAgICAgICAgIGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDAsIHN0YXRpY19jYXN0PE91dHB1dFR5
cGU+KERlZmF1bHRWYWx1ZVJ1bGU6Onplcm8oKSkpOwotICAgICAgICAgICAgY29weUNvbXBvbmVu
dChvdXQsIGVpbiwgMSwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZT4oRGVmYXVsdFZhbHVlUnVsZTo6
emVybygpKSk7Ci0gICAgICAgICAgICBjb3B5Q29tcG9uZW50KG91dCwgZWluLCAyLCBzdGF0aWNf
Y2FzdDxPdXRwdXRUeXBlPihEZWZhdWx0VmFsdWVSdWxlOjp6ZXJvKCkpKTsKLSAgICAgICAgICAg
IGNvcHlDb21wb25lbnQob3V0LCBlaW4sIDMsIHN0YXRpY19jYXN0PE91dHB1dFR5cGU+KERlZmF1
bHRWYWx1ZVJ1bGU6Om9uZSgpKSk7Ci0KLSAgICAgICAgICAgIG91dCArPSBXaWRlblJ1bGU6OmZp
bmFsV2lkdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0QXJy
YXkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9p
ZCAqb3V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRBcnJheShzdGF0aWNfY2FzdDxj
b25zdCBJbnB1dFR5cGUqPihpbiksIHN0cmlkZSwgbiwgc3RhdGljX2Nhc3Q8T3V0cHV0VHlwZSo+
KG91dCkpOwotICAgIH0KLQotICBwcml2YXRlOgotICAgIC8vIEFkdmFuY2UgdGhlIGdpdmVuIHBv
aW50ZXIgYnkgYSBudW1iZXIgb2YgYnl0ZXMgKG5vdCBwb2ludGVkLXRvIGVsZW1lbnRzKS4KLSAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBzdGF0aWMgVCAqcG9pbnRlckFkZEJ5dGVzKFQgKmJh
c2VQdHIsIHN0ZDo6c2l6ZV90IG51bUJ5dGVzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZVB0cikgKyBu
dW1CeXRlcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY29weUNvbXBvbmVudChPdXRwdXRU
eXBlICpvdXQsIGNvbnN0IElucHV0VHlwZSAqaW4sIHN0ZDo6c2l6ZV90IGVsZW1lbnRpbmRleCwg
T3V0cHV0VHlwZSBkZWZhdWx0dmFsdWUpCi0gICAgewotICAgICAgICBpZiAoV2lkZW5SdWxlOjpm
aW5hbFdpZHRoID4gZWxlbWVudGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoV2lk
ZW5SdWxlOjppbml0aWFsV2lkdGggPiBlbGVtZW50aW5kZXgpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBDb252ZXJ0ZXI6OmNvbnZlcnQoaW5bZWxl
bWVudGluZGV4XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0W2VsZW1lbnRpbmRleF0gPSBkZWZhdWx0dmFsdWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJ
QkdMRVNWMl9HRU9NRVRSWV9WRVJURVhDT05WRVJTSU9OX0hfCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NDY1OCkKKysrIFRv
b2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTEyLTI1
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBBTkdMRSB0byBTb3VyY2VzL1RoaXJkUGFy
dHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNjA1
CisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDoKKyAgICAgICAgICAtIFBvaW50IHRv
IHRoZSBuZXcgQU5HTEUgbG9jYXRpb24uCisKIDIwMTAtMTItMjQgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHI3NDYzMi4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CShyZXZpc2lvbiA3NDY1OCkKKysrIFRvb2xz
L1NjcmlwdHMvYnVpbGQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyArNDAyLDcgQEAg
aWYgKGlzR3RrKCkpIHsKICAgICBzcGxpY2UgQHByb2plY3RzLCAxLCAwLCAiU291cmNlcy9KYXZh
U2NyaXB0R2x1ZSI7CiAKICAgICAjIEFOR0xFIG11c3QgY29tZSBiZWZvcmUgV2ViQ29yZQotICAg
IHNwbGljZSBAcHJvamVjdHMsIDAsIDAsICJBTkdMRSI7CisgICAgc3BsaWNlIEBwcm9qZWN0cywg
MCwgMCwgIlNvdXJjZXMvVGhpcmRQYXJ0eS9BTkdMRSI7CiAKICAgICAjIFdlYktpdDIgaXMgb25s
eSBzdXBwb3J0ZWQgaW4gU25vd0xlb3BhcmQgYW5kIGxhdGVyIGF0IHByZXNlbnQuCiAgICAgcHVz
aCBAcHJvamVjdHMsICgiV2ViS2l0MiIsICJUb29scy9NaW5pQnJvd3NlciIpIGlmIG9zWFZlcnNp
b24oKS0+eyJtaW5vciJ9ID49IDYgYW5kICEkbm9XZWJLaXQyOwo=
</data>
<flag name="review"
          id="68570"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="68571"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>