<?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>172080</bug_id>
          
          <creation_ts>2017-05-13 18:13:02 -0700</creation_ts>
          <short_desc>[CoordinatedGraphics] Remove unused files and lines</short_desc>
          <delta_ts>2017-05-14 17:46:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daewoong Jang">daewoong.jang</reporter>
          <assigned_to name="Daewoong Jang">daewoong.jang</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1308368</commentid>
    <comment_count>0</comment_count>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-05-13 18:13:02 -0700</bug_when>
    <thetext>This patch removes files and lines related to USE_COORDINATED_GRAPHICS_MULTIPROCESS flag, which was dropped along with EFL port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308369</commentid>
    <comment_count>1</comment_count>
      <attachid>310044</attachid>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-05-13 18:14:44 -0700</bug_when>
    <thetext>Created attachment 310044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308382</commentid>
    <comment_count>2</comment_count>
      <attachid>310051</attachid>
    <who name="Daewoong Jang">daewoong.jang</who>
    <bug_when>2017-05-13 19:19:54 -0700</bug_when>
    <thetext>Created attachment 310051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308545</commentid>
    <comment_count>3</comment_count>
      <attachid>310051</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-14 17:46:54 -0700</bug_when>
    <thetext>Comment on attachment 310051
Patch

Clearing flags on attachment: 310051

Committed r216850: &lt;http://trac.webkit.org/changeset/216850&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308546</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-14 17:46:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310044</attachid>
            <date>2017-05-13 18:14:44 -0700</date>
            <delta_ts>2017-05-13 19:19:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug172080.diff</filename>
            <type>text/plain</type>
            <size>55117</size>
            <attacher name="Daewoong Jang">daewoong.jang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjgzMCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE3LTA1LTEzICBEYWV3b29u
ZyBKYW5nICA8ZGFld29vbmcuamFuZ0BuYXZlcmNvcnAuY29tPgorCisgICAgICAgIFtDb29yZGlu
YXRlZEdyYXBoaWNzXSBSZW1vdmUgdW51c2VkIGZpbGVzIGFuZCBsaW5lcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMDgwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NB
cmd1bWVudENvZGVycy5oOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmg6IFJlbW92ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3M6IFJlbW92ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tDb29yZGluYXRlZFNjZW5lQVBJ
Q2FzdC5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbjogUmVtb3Zl
ZC4KKwogMjAxNy0wNS0xMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIERyb3AgcmVtYWluaW5nIHVzZXMgb2YgUGFzc1JlZlB0ciBpbiBXZWJLaXQyL1dlYlByb2Nl
c3MKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3Vt
ZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjE2ODIyKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw5MzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgi
Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9BbmltYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0ZpbHRlck9wZXJhdGlvbnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQzRC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9MZW5ndGguaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bl
cnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Sb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGltaW5nRnVuY3Rp
b24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgSVBDIHsK
LQotdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVy
cykKLXsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihmaWx0ZXJzLnNpemUo
KSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyID0gKmZpbHRlcnMuYXQoaSk7Ci0g
ICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gZmlsdGVyLnR5cGUo
KTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0FUVVJBVEU6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgot
ICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcikuYW1vdW50KCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZ
OgotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KGRvd25jYXN0PEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcikuYW1vdW50KCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgot
ICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2RlciwgZG93bmNh
c3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyKS5zdGREZXZpYXRpb24oKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7
Ci0gICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBzaGFkb3cgPSBk
b3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXIpOwotICAgICAgICAgICAg
QXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmVuY29kZShlbmNvZGVyLCBzaGFkb3cubG9jYXRpb24o
KSk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGludDMyX3Q+KHNoYWRvdy5z
dGREZXZpYXRpb24oKSk7Ci0gICAgICAgICAgICBBcmd1bWVudENvZGVyPENvbG9yPjo6ZW5jb2Rl
KGVuY29kZXIsIHNoYWRvdy5jb2xvcigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpQQVNTVEhST1VHSDoKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkRFRkFVTFQ6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpOT05FOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgdWludDMyX3Qgc2l6ZTsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgb3BlcmF0aW9ucyA9IGZpbHRlcnMu
b3BlcmF0aW9ucygpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGU7Ci0gICAgICAgIFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlcjsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUVudW0odHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNBVFVSQVRFOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFU
RTogewotICAgICAgICAgICAgZG91YmxlIHZhbHVlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgZmlsdGVyID0gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKHZhbHVl
LCB0eXBlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklH
SFRORVNTOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBkb3VibGUgdmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmaWx0ZXIgPSBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUodmFsdWUsIHR5cGUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsK
LSAgICAgICAgICAgIExlbmd0aCBsZW5ndGg7Ci0gICAgICAgICAgICBpZiAoIUFyZ3VtZW50Q29k
ZXI8TGVuZ3RoPjo6ZGVjb2RlKGRlY29kZXIsIGxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgZmlsdGVyID0gQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3Jl
YXRlKGxlbmd0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIEludFBvaW50IGxv
Y2F0aW9uOwotICAgICAgICAgICAgaW50MzJfdCBzdGREZXZpYXRpb247Ci0gICAgICAgICAgICBD
b2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmRl
Y29kZShkZWNvZGVyLCBsb2NhdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGREZXZpYXRpb24pKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxDb2xv
cj46OmRlY29kZShkZWNvZGVyLCBjb2xvcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgZmlsdGVyID0gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KGxvY2F0aW9uLCBzdGREZXZpYXRpb24sIGNvbG9yKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpQQVNTVEhST1VHSDoKLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkRFRkFVTFQ6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpOT05FOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZmlsdGVyKQotICAg
ICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoZmlsdGVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybU9wZXJhdGlvbnM+OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnNmb3Jt
T3BlcmF0aW9ucykKLXsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90Pih0cmFu
c2Zvcm1PcGVyYXRpb25zLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBvcGVyYXRpb24g
OiB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBlbmNvZGVyLmVu
Y29kZUVudW0ob3BlcmF0aW9uLT50eXBlKCkpOwotCi0gICAgICAgIHN3aXRjaCAob3BlcmF0aW9u
LT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6Ci0g
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOgotICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpTQ0FMRV9aOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6IHsK
LSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNjYWxlT3BlcmF0aW9uID0gZG93bmNhc3Q8U2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb24+KCpvcGVyYXRpb24pOwotICAgICAgICAgICAgZW5jb2RlciA8PCBz
Y2FsZU9wZXJhdGlvbi54KCk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHNjYWxlT3BlcmF0aW9u
LnkoKTsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgc2NhbGVPcGVyYXRpb24ueigpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9YOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6Ci0gICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWjoKLSAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDogewotICAgICAgICAgICAgY29uc3QgYXV0byYg
dHJhbnNsYXRlT3BlcmF0aW9uID0gZG93bmNhc3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKTsKLSAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2Rl
KGVuY29kZXIsIHRyYW5zbGF0ZU9wZXJhdGlvbi54KCkpOwotICAgICAgICAgICAgQXJndW1lbnRD
b2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2RlciwgdHJhbnNsYXRlT3BlcmF0aW9uLnkoKSk7Ci0g
ICAgICAgICAgICBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCB0cmFuc2xh
dGVPcGVyYXRpb24ueigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpST1RBVEVfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJP
VEFURV9ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOiB7Ci0g
ICAgICAgICAgICBjb25zdCBhdXRvJiByb3RhdGVPcGVyYXRpb24gPSBkb3duY2FzdDxSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24+KCpvcGVyYXRpb24pOwotICAgICAgICAgICAgZW5jb2RlciA8PCBy
b3RhdGVPcGVyYXRpb24ueCgpOwotICAgICAgICAgICAgZW5jb2RlciA8PCByb3RhdGVPcGVyYXRp
b24ueSgpOwotICAgICAgICAgICAgZW5jb2RlciA8PCByb3RhdGVPcGVyYXRpb24ueigpOwotICAg
ICAgICAgICAgZW5jb2RlciA8PCByb3RhdGVPcGVyYXRpb24uYW5nbGUoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VX
X1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOiB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBz
a2V3T3BlcmF0aW9uID0gZG93bmNhc3Q8U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4oKm9wZXJhdGlv
bik7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHNrZXdPcGVyYXRpb24uYW5nbGVYKCk7Ci0gICAg
ICAgICAgICBlbmNvZGVyIDw8IHNrZXdPcGVyYXRpb24uYW5nbGVZKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklY
OgotICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmVuY29k
ZShlbmNvZGVyLCBkb3duY2FzdDxNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+KCpvcGVyYXRpb24p
Lm1hdHJpeCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6TUFUUklYXzNEOgotICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1h
dGlvbk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCBkb3duY2FzdDxNYXRyaXgzRFRyYW5zZm9ybU9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikubWF0cml4KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRToKLSAgICAgICAgICAgIEFy
Z3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIGRvd25jYXN0PFBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5wZXJzcGVjdGl2ZSgpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJVFk6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtT3BlcmF0
aW9ucz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFu
c2Zvcm1PcGVyYXRpb25zKQotewotICAgIHVpbnQzMl90IG9wZXJhdGlvbnNTaXplOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUob3BlcmF0aW9uc1NpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnNTaXplOyArK2kpIHsKLSAg
ICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGU7Ci0g
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKG9wZXJhdGlvblR5cGUpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgewotICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDoKLSAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpTQ0FMRToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6Ci0gICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDogewotICAgICAgICAgICAgZG91
YmxlIHgsIHksIHo7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
eSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh6KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNM
QVRFX1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKLSAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURToKLSAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFXzNEOiB7Ci0gICAgICAgICAgICBMZW5ndGggeCwgeSwgejsKLSAg
ICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgeCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFBcmd1bWVu
dENvZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCB5KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIUFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZGVjb2Rl
KGRlY29kZXIsIHopKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9U
QVRFOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6Ci0gICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKLSAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlJPVEFURV8zRDogewotICAgICAgICAgICAgZG91YmxlIHgsIHksIHosIGFu
Z2xlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh4KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHkpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoeikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShhbmdsZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCBvcGVyYXRpb25UeXBlKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0tFV19YOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19Z
OgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzogewotICAgICAgICAgICAg
ZG91YmxlIGFuZ2xlWCwgYW5nbGVZOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShh
bmdsZVgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoYW5nbGVZKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1Ry
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZLCBvcGVyYXRpb25UeXBlKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6TUFUUklYOiB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRy
aXg7Ci0gICAgICAgICAgICBpZiAoIUFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+
OjpkZWNvZGUoZGVjb2RlciwgbWF0cml4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4KSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNE
OiB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0gICAgICAgICAg
ICBpZiAoIUFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpkZWNvZGUoZGVjb2Rl
ciwgbWF0cml4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB0
cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShtYXRyaXgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRTogewotICAgICAg
ICAgICAgTGVuZ3RoIHBlcnNwZWN0aXZlOwotICAgICAgICAgICAgaWYgKCFBcmd1bWVudENvZGVy
PExlbmd0aD46OmRlY29kZShkZWNvZGVyLCBwZXJzcGVjdGl2ZSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25z
KCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUocGVyc3BlY3Rp
dmUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpJREVOVElUWToKLSAgICAgICAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpLmFwcGVuZChJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpO
T05FOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQg
ZW5jb2RlVGltaW5nRnVuY3Rpb24oRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVGltaW5nRnVuY3Rp
b24qIHRpbWluZ0Z1bmN0aW9uKQotewotICAgIGlmICghdGltaW5nRnVuY3Rpb24pIHsKLSAgICAg
ICAgZW5jb2Rlci5lbmNvZGVFbnVtKFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlvblR5cGUo
LTEpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFRpbWluZ0Z1bmN0aW9uOjpUaW1p
bmdGdW5jdGlvblR5cGUgdHlwZSA9IHRpbWluZ0Z1bmN0aW9uID8gdGltaW5nRnVuY3Rpb24tPnR5
cGUoKSA6IFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjsKLSAgICBlbmNvZGVyLmVuY29k
ZUVudW0odHlwZSk7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlv
bjo6TGluZWFyRnVuY3Rpb246Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGltaW5nRnVuY3Rp
b246OkN1YmljQmV6aWVyRnVuY3Rpb246IHsKLSAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbiogY3ViaWMgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAgICBDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uOjpUaW1pbmdGdW5jdGlvblByZXNldCBiZXppZXJQcmVzZXQgPSBjdWJpYy0+dGltaW5nRnVu
Y3Rpb25QcmVzZXQoKTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGJlemllclByZXNldCk7
Ci0gICAgICAgIGlmIChiZXppZXJQcmVzZXQgPT0gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6
Q3VzdG9tKSB7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IGN1YmljLT54MSgpOwotICAgICAgICAg
ICAgZW5jb2RlciA8PCBjdWJpYy0+eTEoKTsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgY3ViaWMt
PngyKCk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IGN1YmljLT55MigpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1bmN0
aW9uOiB7Ci0gICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZXBzID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAgICAg
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RlcHMtPm51bWJlck9mU3RlcHMo
KSk7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RlcHMtPnN0ZXBBdFN0YXJ0KCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTcHJpbmdGdW5jdGlvbjogewot
ICAgICAgICBjb25zdCBTcHJpbmdUaW1pbmdGdW5jdGlvbiogc3ByaW5nID0gc3RhdGljX2Nhc3Q8
Y29uc3QgU3ByaW5nVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Ci0gICAgICAgIGVu
Y29kZXIgPDwgc3ByaW5nLT5tYXNzKCk7Ci0gICAgICAgIGVuY29kZXIgPDwgc3ByaW5nLT5zdGlm
Zm5lc3MoKTsKLSAgICAgICAgZW5jb2RlciA8PCBzcHJpbmctPmRhbXBpbmcoKTsKLSAgICAgICAg
ZW5jb2RlciA8PCBzcHJpbmctPmluaXRpYWxWZWxvY2l0eSgpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgfQotfQotCi1ib29sIGRlY29kZVRpbWluZ0Z1bmN0aW9uKERlY29kZXImIGRlY29k
ZXIsIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4mIHRpbWluZ0Z1bmN0aW9uKQotewotICAgIFRpbWlu
Z0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlvblR5cGUgdHlwZTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRW51bSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHR5cGUgPT0g
VGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSgtMSkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6TGlu
ZWFyRnVuY3Rpb246Ci0gICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gTGluZWFyVGltaW5nRnVuY3Rp
b246OmNyZWF0ZSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFRpbWluZ0Z1bmN0
aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOiB7Ci0gICAgICAgIGRvdWJsZSB4MSwgeTEsIHgyLCB5
MjsKLSAgICAgICAgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25QcmVz
ZXQgYmV6aWVyUHJlc2V0OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShiZXppZXJQ
cmVzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYmV6aWVyUHJl
c2V0ICE9IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkN1c3RvbSkgewotICAgICAgICAgICAg
dGltaW5nRnVuY3Rpb24gPSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoYmV6aWVy
UHJlc2V0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoeDEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHkxKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh4MikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeTIpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246IHsKLSAgICAgICAgdWludDMy
X3QgbnVtYmVyT2ZTdGVwczsKLSAgICAgICAgYm9vbCBzdGVwQXRTdGFydDsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShudW1iZXJPZlN0ZXBzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGVwQXRTdGFydCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBTdGVwc1RpbWluZ0Z1
bmN0aW9uOjpjcmVhdGUobnVtYmVyT2ZTdGVwcywgc3RlcEF0U3RhcnQpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3ByaW5nRnVuY3Rpb246
IHsKLSAgICAgICAgZG91YmxlIG1hc3M7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWFz
cykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJsZSBzdGlmZm5lc3M7
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RpZmZuZXNzKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgZG91YmxlIGRhbXBpbmc7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoZGFtcGluZykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRv
dWJsZSBpbml0aWFsVmVsb2NpdHk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5pdGlh
bFZlbG9jaXR5KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB0aW1pbmdG
dW5jdGlvbiA9IFNwcmluZ1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUobWFzcywgc3RpZmZuZXNzLCBk
YW1waW5nLCBpbml0aWFsVmVsb2NpdHkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8VGV4dHVy
ZU1hcHBlckFuaW1hdGlvbj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pCi17Ci0gICAgZW5jb2RlciA8PCBhbmltYXRpb24u
bmFtZSgpOwotICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLmJveFNpemUoKTsKLSAgICBlbmNvZGVy
LmVuY29kZUVudW0oYW5pbWF0aW9uLnN0YXRlKCkpOwotICAgIGVuY29kZXIgPDwgYW5pbWF0aW9u
LnN0YXJ0VGltZSgpOwotICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLnBhdXNlVGltZSgpOwotICAg
IGVuY29kZXIgPDwgYW5pbWF0aW9uLmxpc3RzTWF0Y2goKTsKLQotICAgIFJlZlB0cjxBbmltYXRp
b24+IGFuaW1hdGlvbk9iamVjdCA9IGFuaW1hdGlvbi5hbmltYXRpb24oKTsKLSAgICBlbmNvZGVy
LmVuY29kZUVudW0oYW5pbWF0aW9uT2JqZWN0LT5kaXJlY3Rpb24oKSk7Ci0gICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYW5pbWF0aW9uT2JqZWN0LT5maWxsTW9kZSgpKTsKLSAg
ICBlbmNvZGVyIDw8IGFuaW1hdGlvbk9iamVjdC0+ZHVyYXRpb24oKTsKLSAgICBlbmNvZGVyIDw8
IGFuaW1hdGlvbk9iamVjdC0+aXRlcmF0aW9uQ291bnQoKTsKLSAgICBlbmNvZGVUaW1pbmdGdW5j
dGlvbihlbmNvZGVyLCBhbmltYXRpb25PYmplY3QtPnRpbWluZ0Z1bmN0aW9uKCkpOwotCi0gICAg
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbi5rZXlmcmFtZXMo
KTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0oa2V5ZnJhbWVzLnByb3BlcnR5KCkpOwotICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtleWZyYW1lcy5zaXplKCkpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IEFuaW1hdGlvblZhbHVlJiB2YWx1ZSA9IGtleWZyYW1lcy5hdChpKTsKLSAgICAgICAgZW5j
b2RlciA8PCB2YWx1ZS5rZXlUaW1lKCk7Ci0gICAgICAgIGVuY29kZVRpbWluZ0Z1bmN0aW9uKGVu
Y29kZXIsIHZhbHVlLnRpbWluZ0Z1bmN0aW9uKCkpOwotICAgICAgICBzd2l0Y2ggKGtleWZyYW1l
cy5wcm9wZXJ0eSgpKSB7Ci0gICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6Ci0g
ICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFs
dWUmPih2YWx1ZSkudmFsdWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFu
aW1hdGVkUHJvcGVydHlUcmFuc2Zvcm06Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlJj4odmFsdWUpLnZhbHVlKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5RmlsdGVyOgotICAg
ICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1
ZSY+KHZhbHVlKS52YWx1ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBBcmd1bWVu
dENvZGVyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKQotewotICAgIFN0cmluZyBuYW1lOwot
ICAgIEZsb2F0U2l6ZSBib3hTaXplOwotICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb246OkFuaW1h
dGlvblN0YXRlIHN0YXRlOwotICAgIGRvdWJsZSBzdGFydFRpbWU7Ci0gICAgZG91YmxlIHBhdXNl
VGltZTsKLSAgICBib29sIGxpc3RzTWF0Y2g7Ci0KLSAgICBBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgdW5zaWduZWQgZmlsbE1vZGU7Ci0gICAgZG91YmxlIGR1
cmF0aW9uOwotICAgIGRvdWJsZSBpdGVyYXRpb25Db3VudDsKLSAgICBSZWZQdHI8VGltaW5nRnVu
Y3Rpb24+IHRpbWluZ0Z1bmN0aW9uOwotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbk9i
amVjdDsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJveFNpemUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oc3RhdGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGFydFRpbWUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXVzZVRpbWUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsaXN0c01hdGNoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKGRpcmVjdGlv
bikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZpbGxN
b2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZHVy
YXRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShp
dGVyYXRpb25Db3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZVRp
bWluZ0Z1bmN0aW9uKGRlY29kZXIsIHRpbWluZ0Z1bmN0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYW5pbWF0aW9uT2JqZWN0ID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBh
bmltYXRpb25PYmplY3QtPnNldERpcmVjdGlvbihkaXJlY3Rpb24pOwotICAgIGFuaW1hdGlvbk9i
amVjdC0+c2V0RmlsbE1vZGUoZmlsbE1vZGUpOwotICAgIGFuaW1hdGlvbk9iamVjdC0+c2V0RHVy
YXRpb24oZHVyYXRpb24pOwotICAgIGFuaW1hdGlvbk9iamVjdC0+c2V0SXRlcmF0aW9uQ291bnQo
aXRlcmF0aW9uQ291bnQpOwotICAgIGlmICh0aW1pbmdGdW5jdGlvbikKLSAgICAgICAgYW5pbWF0
aW9uT2JqZWN0LT5zZXRUaW1pbmdGdW5jdGlvbihXVEZNb3ZlKHRpbWluZ0Z1bmN0aW9uKSk7Ci0K
LSAgICBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUVudW0ocHJvcGVydHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgS2V5ZnJhbWVWYWx1
ZUxpc3Qga2V5ZnJhbWVzKHByb3BlcnR5KTsKLSAgICB1bnNpZ25lZCBrZXlmcmFtZXNTaXplOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2V5ZnJhbWVzU2l6ZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzU2l6ZTsgKytpKSB7
Ci0gICAgICAgIGRvdWJsZSBrZXlUaW1lOwotICAgICAgICBSZWZQdHI8VGltaW5nRnVuY3Rpb24+
IHRpbWluZ0Z1bmN0aW9uOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleVRpbWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZVRpbWluZ0Z1bmN0
aW9uKGRlY29kZXIsIHRpbWluZ0Z1bmN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7Ci0gICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHk6IHsKLSAgICAgICAgICAgIGZsb2F0IHZhbHVlOwotICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAga2V5ZnJhbWVzLmluc2VydChzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0QW5pbWF0
aW9uVmFsdWU+KGtleVRpbWUsIHZhbHVlLCB0aW1pbmdGdW5jdGlvbi5nZXQoKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5VHJh
bnNmb3JtOiB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5zZm9ybTsKLSAg
ICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodHJhbnNmb3JtKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBrZXlmcmFtZXMuaW5zZXJ0KHN0ZDo6bWFrZV91
bmlxdWU8VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWU+KGtleVRpbWUsIHRyYW5zZm9ybSwgdGltaW5n
RnVuY3Rpb24uZ2V0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eUZpbHRlcjogewotICAgICAgICAgICAgRmlsdGVyT3BlcmF0
aW9ucyBmaWx0ZXI7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZpbHRlcikpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAga2V5ZnJhbWVzLmluc2Vy
dChzdGQ6Om1ha2VfdW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVlPihrZXlUaW1lLCBmaWx0ZXIs
IHRpbWluZ0Z1bmN0aW9uLmdldCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBhbmltYXRpb24gPSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKG5hbWUsIGtleWZyYW1lcywg
Ym94U2l6ZSwgKmFuaW1hdGlvbk9iamVjdCwgbGlzdHNNYXRjaCwgc3RhcnRUaW1lLCBwYXVzZVRp
bWUsIHN0YXRlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFRl
eHR1cmVNYXBwZXJBbmltYXRpb25zPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRl
eHR1cmVNYXBwZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIGVuY29kZXIgPDwgYW5p
bWF0aW9ucy5hbmltYXRpb25zKCk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxUZXh0dXJlTWFw
cGVyQW5pbWF0aW9ucz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGUoYW5pbWF0
aW9ucy5hbmltYXRpb25zKCkpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlVG9rZW4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQotewotI2lmIE9TKERBUldJTikKLSAgICBBdHRhY2ht
ZW50IGZyb250QXR0YWNobWVudCwgYmFja0F0dGFjaG1lbnQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShmcm9udEF0dGFjaG1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShiYWNrQXR0YWNobWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHRva2VuID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4oZnJvbnRBdHRhY2htZW50LnBvcnQoKSwg
YmFja0F0dGFjaG1lbnQucG9ydCgpKTsKLSNlbGlmIE9TKExJTlVYKQotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0jZW5kaWYKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIEFyZ3VtZW50Q29k
ZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvKQotewotICAgIFNpbXBsZUFyZ3VtZW50
Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwgc3VyZmFjZVVwZGF0ZUlu
Zm8pOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvKQot
ewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVj
b2RlKGRlY29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVy
PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKLXsKLSAgICBlbmNv
ZGVyIDw8IHN0YXRlLmNoYW5nZU1hc2s7Ci0KLSAgICBpZiAoc3RhdGUuZmxhZ3NDaGFuZ2VkKQot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmZsYWdzOwotCi0gICAgaWYgKHN0YXRlLnBvc2l0aW9u
Q2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5wb3M7Ci0KLSAgICBpZiAoc3RhdGUu
YW5jaG9yUG9pbnRDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmFuY2hvclBvaW50
OwotCi0gICAgaWYgKHN0YXRlLnNpemVDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRl
LnNpemU7Ci0KLSAgICBpZiAoc3RhdGUudHJhbnNmb3JtQ2hhbmdlZCkKLSAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0ZS50cmFuc2Zvcm07Ci0KLSAgICBpZiAoc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm1D
aGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtOwotCi0g
ICAgaWYgKHN0YXRlLmNvbnRlbnRzUmVjdENoYW5nZWQpCi0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuY29udGVudHNSZWN0OwotCi0gICAgaWYgKHN0YXRlLmNvbnRlbnRzVGlsaW5nQ2hhbmdlZCkg
ewotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNvbnRlbnRzVGlsZVNpemU7Ci0gICAgICAgIGVu
Y29kZXIgPDwgc3RhdGUuY29udGVudHNUaWxlUGhhc2U7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRl
Lm9wYWNpdHlDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLm9wYWNpdHk7Ci0KLSAg
ICBpZiAoc3RhdGUuc29saWRDb2xvckNoYW5nZWQpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
c29saWRDb2xvcjsKLQotICAgIGlmIChzdGF0ZS5kZWJ1Z1Zpc3VhbHNDaGFuZ2VkKQotICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRlLmRlYnVnVmlzdWFsczsKLQotICAgIGlmIChzdGF0ZS5maWx0ZXJz
Q2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWx0ZXJzOwotCi0gICAgaWYgKHN0
YXRlLmFuaW1hdGlvbnNDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmFuaW1hdGlv
bnM7Ci0KLSAgICBpZiAoc3RhdGUuY2hpbGRyZW5DaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLmNoaWxkcmVuOwotCi0gICAgZW5jb2RlciA8PCBzdGF0ZS50aWxlc1RvQ3JlYXRlOwot
ICAgIGVuY29kZXIgPDwgc3RhdGUudGlsZXNUb1JlbW92ZTsKLQotICAgIGlmIChzdGF0ZS5yZXBs
aWNhQ2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5yZXBsaWNhOwotCi0gICAgaWYg
KHN0YXRlLm1hc2tDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLm1hc2s7Ci0KLSAg
ICBpZiAoc3RhdGUuaW1hZ2VDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmltYWdl
SUQ7Ci0KLSAgICBpZiAoc3RhdGUucmVwYWludENvdW50Q2hhbmdlZCkKLSAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0ZS5yZXBhaW50Q291bnQ7Ci0KLSAgICBlbmNvZGVyIDw8IHN0YXRlLnRpbGVzVG9V
cGRhdGU7Ci0KLSAgICBpZiAoc3RhdGUuY29tbWl0dGVkU2Nyb2xsT2Zmc2V0Q2hhbmdlZCkKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jb21taXR0ZWRTY3JvbGxPZmZzZXQ7Ci19Ci0KLWJvb2wg
QXJndW1lbnRDb2RlcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZT46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5jaGFuZ2VNYXNrKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKHN0YXRlLmZsYWdzQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUo
c3RhdGUuZmxhZ3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUucG9z
aXRpb25DaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5wb3MpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUuYW5jaG9yUG9pbnRDaGFuZ2VkICYmICFkZWNvZGVy
LmRlY29kZShzdGF0ZS5hbmNob3JQb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChzdGF0ZS5zaXplQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuc2l6ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdGF0ZS50cmFuc2Zvcm1DaGFuZ2VkICYm
ICFkZWNvZGVyLmRlY29kZShzdGF0ZS50cmFuc2Zvcm0pKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2VkICYmICFkZWNvZGVyLmRl
Y29kZShzdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmIChzdGF0ZS5jb250ZW50c1JlY3RDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0
ZS5jb250ZW50c1JlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUu
Y29udGVudHNUaWxpbmdDaGFuZ2VkKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3Rh
dGUuY29udGVudHNUaWxlU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuY29udGVudHNUaWxlUGhhc2UpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZS5vcGFjaXR5Q2hhbmdlZCAm
JiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUub3BhY2l0eSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChzdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3Rh
dGUuc29saWRDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdGF0ZS5k
ZWJ1Z1Zpc3VhbHNDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5kZWJ1Z1Zpc3VhbHMp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUuZmlsdGVyc0NoYW5nZWQg
JiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmZpbHRlcnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoc3RhdGUuYW5pbWF0aW9uc0NoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0
YXRlLmFuaW1hdGlvbnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUu
Y2hpbGRyZW5DaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5jaGlsZHJlbikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUudGlsZXNU
b0NyZWF0ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc3RhdGUudGlsZXNUb1JlbW92ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChzdGF0ZS5yZXBsaWNhQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUucmVwbGljYSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdGF0ZS5tYXNrQ2hhbmdlZCAmJiAh
ZGVjb2Rlci5kZWNvZGUoc3RhdGUubWFzaykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChzdGF0ZS5pbWFnZUNoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmltYWdlSUQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUucmVwYWludENvdW50Q2hh
bmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUucmVwYWludENvdW50KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS50aWxlc1RvVXBkYXRl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0YXRlLmNvbW1pdHRlZFNjcm9s
bE9mZnNldENoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNvbW1pdHRlZFNjcm9sbE9m
ZnNldCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIEFyZ3VtZW50Q29kZXI8VGlsZVVwZGF0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgVGlsZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgU2ltcGxlQXJndW1l
bnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmVuY29kZShlbmNvZGVyLCB1cGRhdGVJbmZvKTsKLX0K
LQotYm9vbCBBcmd1bWVudENvZGVyPFRpbGVVcGRhdGVJbmZvPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIFRpbGVVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIHJldHVybiBTaW1wbGVB
cmd1bWVudENvZGVyPFRpbGVVcGRhdGVJbmZvPjo6ZGVjb2RlKGRlY29kZXIsIHVwZGF0ZUluZm8p
OwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8VGlsZUNyZWF0aW9uSW5mbz46OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBUaWxlQ3JlYXRpb25JbmZvJiB1cGRhdGVJbmZvKQotewotICAg
IFNpbXBsZUFyZ3VtZW50Q29kZXI8VGlsZUNyZWF0aW9uSW5mbz46OmVuY29kZShlbmNvZGVyLCB1
cGRhdGVJbmZvKTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFRpbGVDcmVhdGlvbkluZm8+Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVGlsZUNyZWF0aW9uSW5mbyYgdXBkYXRlSW5mbykKLXsK
LSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxUaWxlQ3JlYXRpb25JbmZvPjo6ZGVjb2Rl
KGRlY29kZXIsIHVwZGF0ZUluZm8pOwotfQotCi1zdGF0aWMgdm9pZCBlbmNvZGVDb29yZGluYXRl
ZFN1cmZhY2UoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFj
ZT4mIHN1cmZhY2UpCi17Ci0gICAgYm9vbCBpc1ZhbGlkU3VyZmFjZSA9IGZhbHNlOwotICAgIGlm
ICghc3VyZmFjZSkgewotICAgICAgICBlbmNvZGVyIDw8IGlzVmFsaWRTdXJmYWNlOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGlu
YXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihzdXJmYWNl
LmdldCgpKTsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7Ci0gICAg
aWYgKHdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0gICAgICAg
IGlzVmFsaWRTdXJmYWNlID0gdHJ1ZTsKLQotICAgIGVuY29kZXIgPDwgaXNWYWxpZFN1cmZhY2U7
Ci0KLSAgICBpZiAoaXNWYWxpZFN1cmZhY2UpCi0gICAgICAgIGVuY29kZXIgPDwgaGFuZGxlOwot
fQotCi1zdGF0aWMgYm9vbCBkZWNvZGVDb29yZGluYXRlZFN1cmZhY2UoRGVjb2RlciYgZGVjb2Rl
ciwgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4mIHN1cmZhY2UpCi17Ci0gICAgYm9vbCBpc1Zh
bGlkU3VyZmFjZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWRTdXJmYWNlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpc1ZhbGlkU3VyZmFjZSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBzdXJmYWNlID0gV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzU3RhdGUmIHN0YXRlKQotewotICAgIGVuY29kZXIgPDwgc3RhdGUucm9vdENvbXBvc2l0
aW5nTGF5ZXI7Ci0gICAgZW5jb2RlciA8PCBzdGF0ZS5zY3JvbGxQb3NpdGlvbjsKLSAgICBlbmNv
ZGVyIDw8IHN0YXRlLmNvbnRlbnRzU2l6ZTsKLSAgICBlbmNvZGVyIDw8IHN0YXRlLmNvdmVyZWRS
ZWN0OwotCi0gICAgZW5jb2RlciA8PCBzdGF0ZS5sYXllcnNUb0NyZWF0ZTsKLSAgICBlbmNvZGVy
IDw8IHN0YXRlLmxheWVyc1RvVXBkYXRlOwotICAgIGVuY29kZXIgPDwgc3RhdGUubGF5ZXJzVG9S
ZW1vdmU7Ci0KLSAgICBlbmNvZGVyIDw8IHN0YXRlLmltYWdlc1RvQ3JlYXRlOwotICAgIGVuY29k
ZXIgPDwgc3RhdGUuaW1hZ2VzVG9SZW1vdmU7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGVuY29kZSBX
ZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSByaWdodCBhZnRlciBpdCdzIGNyZWF0aW9uLgot
ICAgIC8vIFRoYXQncyB3aHkgd2UgY2Fubm90IHVzZSBzaW1wbGUgc3RkOjpwYWlyIGVuY29kZXIu
Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGUuaW1hZ2VzVG9VcGRh
dGUuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLmltYWdlc1RvVXBk
YXRlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuaW1hZ2VzVG9VcGRh
dGVbaV0uZmlyc3Q7Ci0gICAgICAgIGVuY29kZUNvb3JkaW5hdGVkU3VyZmFjZShlbmNvZGVyLCBz
dGF0ZS5pbWFnZXNUb1VwZGF0ZVtpXS5zZWNvbmQpOwotICAgIH0KLSAgICBlbmNvZGVyIDw8IHN0
YXRlLmltYWdlc1RvQ2xlYXI7Ci0KLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihzdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHN0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZS5zaXplKCk7ICsraSkgewotICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZVtpXS5maXJzdDsKLSAg
ICAgICAgZW5jb2RlQ29vcmRpbmF0ZWRTdXJmYWNlKGVuY29kZXIsIHN0YXRlLnVwZGF0ZUF0bGFz
ZXNUb0NyZWF0ZVtpXS5zZWNvbmQpOwotICAgIH0KLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPENv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDb29yZGlu
YXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQotewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3Rh
dGUucm9vdENvbXBvc2l0aW5nTGF5ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLnNjcm9sbFBvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5jb250ZW50c1NpemUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNv
dmVyZWRSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShzdGF0ZS5sYXllcnNUb0NyZWF0ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUubGF5ZXJzVG9VcGRhdGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLmxheWVyc1RvUmVtb3Zl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0
ZS5pbWFnZXNUb0NyZWF0ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoc3RhdGUuaW1hZ2VzVG9SZW1vdmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICB1aW50NjRfdCBzaXplT2ZJbWFnZXNUb1VwZGF0ZTsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHNpemVPZkltYWdlc1RvVXBkYXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IHNpemVPZkltYWdlc1RvVXBkYXRlOyArK2kpIHsK
LSAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGltYWdlSUQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2U7Ci0gICAgICAgIGlmICgh
ZGVjb2RlQ29vcmRpbmF0ZWRTdXJmYWNlKGRlY29kZXIsIHN1cmZhY2UpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihpbWFnZUlELCBzdXJmYWNlLnJlbGVhc2UoKSkpOwotICAgIH0KLQotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuaW1hZ2VzVG9DbGVhcikpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHVpbnQ2NF90IHNpemVPZlVwZGF0ZUF0bGFzZXNUb0NyZWF0ZTsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHNpemVPZlVwZGF0ZUF0bGFzZXNUb0NyZWF0ZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBzaXplT2ZVcGRh
dGVBdGxhc2VzVG9DcmVhdGU7ICsraSkgewotICAgICAgICB1aW50MzJfdCBhdGxhc0lEOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGF0bGFzSUQpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2U7Ci0gICAg
ICAgIGlmICghZGVjb2RlQ29vcmRpbmF0ZWRTdXJmYWNlKGRlY29kZXIsIHN1cmZhY2UpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0YXRlLnVwZGF0ZUF0bGFzZXNUb0Ny
ZWF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXRsYXNJRCwgc3VyZmFjZS5yZWxlYXNlKCkpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPERlYnVn
VmlzdWFscz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEZWJ1Z1Zpc3VhbHMmIGRl
YnVnVmlzdWFscykKLXsKLSAgICBlbmNvZGVyIDw8IGRlYnVnVmlzdWFscy5kZWJ1Z0JvcmRlckNv
bG9yOwotICAgIGVuY29kZXIgPDwgZGVidWdWaXN1YWxzLmRlYnVnQm9yZGVyV2lkdGg7Ci0gICAg
ZW5jb2RlciA8PCBkZWJ1Z1Zpc3VhbHMuZmxhZ3M7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxE
ZWJ1Z1Zpc3VhbHM+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgRGVidWdWaXN1YWxzJiBkZWJ1
Z1Zpc3VhbHMpCi17Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShkZWJ1Z1Zpc3VhbHMuZGVidWdC
b3JkZXJDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoZGVidWdWaXN1YWxzLmRlYnVnQm9yZGVyV2lkdGgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRlYnVnVmlzdWFscy5mbGFncykpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBJUEMKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NB
cmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCShyZXZp
c2lvbiAyMTY4MjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
Q29tcGFueSAxMDAsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhp
Y3NBcmd1bWVudENvZGVyc19oCi0jZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENv
ZGVyc19oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiQXJndW1l
bnRDb2RlcnMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotc3RydWN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllclN0YXRlOwotc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZTsKLWNsYXNz
IEZsb2F0UG9pbnQzRDsKLWNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb247Ci1jbGFzcyBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uczsKLWNsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOwotc3RydWN0IFRp
bGVDcmVhdGlvbkluZm87Ci1zdHJ1Y3QgVGlsZVVwZGF0ZUluZm87Ci1jbGFzcyBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDsKLWNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7Ci1zdHJ1Y3QgTGVuZ3RoOwot
c3RydWN0IERlYnVnVmlzdWFsczsKLQotY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLX0KLQotbmFt
ZXNwYWNlIElQQyB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
RmlsdGVyT3BlcmF0aW9ucz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29u
c3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zPiB7Ci0gICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVy
YXRpb25zJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpUcmFu
c2Zvcm1PcGVyYXRpb25zJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyYpOwot
ICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbnMmKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiwgY29uc3QgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbiYpOwotICAgIHN0YXRp
YyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbiYp
OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpTdXJmYWNl
VXBkYXRlSW5mbz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2Vi
Q29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2Rl
ciYsIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlPiB7
Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VGlsZVVwZGF0ZUluZm8+IHsKLSAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlRpbGVVcGRhdGVJ
bmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpUaWxlVXBk
YXRlSW5mbyYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpUaWxlQ3JlYXRpb25JbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpUaWxlQ3JlYXRpb25JbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImLCBXZWJDb3JlOjpUaWxlQ3JlYXRpb25JbmZvJik7Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZT4g
ewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RGVidWdWaXN1YWxzPiB7Ci0gICAgc3RhdGljIHZv
aWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpEZWJ1Z1Zpc3VhbHMmKTsKLSAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkRlYnVnVmlzdWFscyYpOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSVBDCi0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnNfaApJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuY3BwCShyZXZpc2lvbiAyMTY4MjIp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGlu
YXRlZFN1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyOSArMCwwIEBACi0vKgotIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLSBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLQotIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvb3JkaW5h
dGVkU3VyZmFjZS5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUg
IkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaD4KLQotI2lmIFVTRShURVhUVVJFX01BUFBF
UikKLSNpbmNsdWRlICJCaXRtYXBUZXh0dXJlR0wuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
R0wuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLVdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlOjpIYW5kbGUoKQotewotfQot
Ci12b2lkIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlOjplbmNvZGUoSVBDOjpFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9zaXplIDw8IG1fZmxhZ3M7Ci0g
ICAgZW5jb2RlciA8PCBtX2JpdG1hcEhhbmRsZTsKLX0KLQotYm9vbCBXZWJDb29yZGluYXRlZFN1
cmZhY2U6OkhhbmRsZTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgSGFuZGxlJiBoYW5k
bGUpCi17Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUubV9zaXplKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlLm1fZmxhZ3MpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUubV9i
aXRtYXBIYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotUmVmUHRyPFdlYkNvb3JkaW5hdGVkU3VyZmFjZT4gV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBm
bGFncykKLXsKLSAgICBpZiAoYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNo
YXJlYWJsZShzaXplLCAoZmxhZ3MgJiBTdXBwb3J0c0FscGhhKSA/IFNoYXJlYWJsZUJpdG1hcDo6
U3VwcG9ydHNBbHBoYSA6IFNoYXJlYWJsZUJpdG1hcDo6Tm9GbGFncykpCi0gICAgICAgIHJldHVy
biBjcmVhdGUoc2l6ZSwgZmxhZ3MsIFdURk1vdmUoYml0bWFwKSk7Ci0KLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBBU1NFUlQobV9iaXRtYXApOwotICAgIGF1dG8gZ3JhcGhpY3NDb250ZXh0ID0gbV9iaXRt
YXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcChy
ZWN0KTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55KCkp
OwotICAgIHJldHVybiBncmFwaGljc0NvbnRleHQ7Ci19Ci0KLVJlZjxXZWJDb29yZGluYXRlZFN1
cmZhY2U+IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUs
IENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3MsIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IGJpdG1hcCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29yZGluYXRlZFN1cmZh
Y2Uoc2l6ZSwgZmxhZ3MsIGJpdG1hcCkpOwotfQotCi1XZWJDb29yZGluYXRlZFN1cmZhY2U6Oldl
YkNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZh
Y2U6OkZsYWdzIGZsYWdzLCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXApCi0gICAgOiBD
b29yZGluYXRlZFN1cmZhY2Uoc2l6ZSwgZmxhZ3MpCi0gICAgLCBtX2JpdG1hcChiaXRtYXApCi17
Ci19Ci0KLVdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6fldlYkNvb3JkaW5hdGVkU3VyZmFjZSgpCi17
Ci19Ci0KLVJlZlB0cjxXZWJDb29yZGluYXRlZFN1cmZhY2U+IFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlKQotewotICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZS5tX2JpdG1hcEhh
bmRsZSk7Ci0gICAgaWYgKCFiaXRtYXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
cmV0dXJuIGNyZWF0ZShoYW5kbGUubV9zaXplLCBoYW5kbGUubV9mbGFncywgV1RGTW92ZShiaXRt
YXApKTsKLX0KLQotYm9vbCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZUhhbmRsZShIYW5k
bGUmIGhhbmRsZSkKLXsKLSAgICBoYW5kbGUubV9zaXplID0gbV9zaXplOwotICAgIGhhbmRsZS5t
X2ZsYWdzID0gbV9mbGFnczsKLQotICAgIGlmICghbV9iaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5k
bGUubV9iaXRtYXBIYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OnBhaW50VG9TdXJmYWNlKGNv
bnN0IEludFJlY3QmIHJlY3QsIENvb3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50JiBjbGllbnQpCi17
Ci0gICAgYXV0byBjb250ZXh0ID0gY3JlYXRlR3JhcGhpY3NDb250ZXh0KHJlY3QpOwotICAgIGNs
aWVudC5wYWludFRvU3VyZmFjZUNvbnRleHQoKmNvbnRleHQpOwotfQotCi0jaWYgVVNFKFRFWFRV
UkVfTUFQUEVSKQotdm9pZCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNvcHlUb1RleHR1cmUoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBjb25z
dCBJbnRQb2ludCYgc291cmNlT2Zmc2V0KQotewotICAgIEFTU0VSVChtX2JpdG1hcCk7Ci0gICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IG1fYml0bWFwLT5jcmVhdGVJbWFnZSgpOwotICAgIHRleHR1
cmUudXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0KCksIHRhcmdldCwgc291cmNlT2Zmc2V0LCBCaXRt
YXBUZXh0dXJlOjpVcGRhdGVDYW5Nb2RpZnlPcmlnaW5hbEltYWdlRGF0YSk7Ci19Ci0jZW5kaWYg
Ly8gVVNFKFRFWFRVUkVfTUFQUEVSKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLSNlbmRpZiAv
LyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRl
ZFN1cmZhY2UuaAkocmV2aXNpb24gMjE2ODIyKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsODMgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChDKSAyMDEyIENvbXBh
bnkgMTAwLCBJbmMuCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViQ29vcmRp
bmF0ZWRTdXJmYWNlX2gKLSNkZWZpbmUgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlX2gKLQotI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkU3VyZmFjZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1jbGFzcyBCaXRtYXBUZXh0dXJlOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotfQotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlIDogcHVibGlj
IFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgSGFuZGxl
IHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSGFuZGxlKTsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIEhhbmRsZSgpOwotCi0gICAgICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNv
bnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpEZWNvZGVyJiwgSGFuZGxlJik7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgV2ViQ29vcmRpbmF0ZWRTdXJm
YWNlOwotICAgICAgICBtdXRhYmxlIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIG1fYml0bWFwSGFu
ZGxlOwotICAgICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKLSAgICAgICAgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBtX2ZsYWdzOwotICAgIH07Ci0KLSAgICAvLyBDcmVh
dGUgYSBuZXcgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLCBhbmQgYWxsb2NhdGUgZWl0aGVyIGEgR3Jh
cGhpY3NTdXJmYWNlIG9yIGEgU2hhcmVhYmxlQml0bWFwIGFzIGJhY2tpbmcuCi0gICAgc3RhdGlj
IFJlZlB0cjxXZWJDb29yZGluYXRlZFN1cmZhY2U+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgRmxhZ3MpOwotCi0gICAgLy8gQ3JlYXRlIGEgc2hhcmVhYmxlIHN1cmZhY2UgZnJvbSBh
IGhhbmRsZS4KLSAgICBzdGF0aWMgUmVmUHRyPFdlYkNvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRl
KGNvbnN0IEhhbmRsZSYpOwotCi0gICAgLy8gQ3JlYXRlIGEgaGFuZGxlLgotICAgIGJvb2wgY3Jl
YXRlSGFuZGxlKEhhbmRsZSYpOwotCi0gICAgdmlydHVhbCB+V2ViQ29vcmRpbmF0ZWRTdXJmYWNl
KCk7Ci0KLSAgICB2b2lkIHBhaW50VG9TdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBX
ZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkNsaWVudCYpIG92ZXJyaWRlOwotCi0jaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKQotICAgIHZvaWQgY29weVRvVGV4dHVyZShXZWJDb3JlOjpCaXRtYXBU
ZXh0dXJlJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgc291cmNlT2Zmc2V0KSBvdmVycmlkZTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAg
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgRmxhZ3MsIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKLQotICAgIC8vIENyZWF0ZSBhIFdlYkNvb3JkaW5hdGVk
U3VyZmFjZSByZWZlcmVuY2luZyBhbiBleGlzdGluZyBTaGFyZWFibGVCaXRtYXAuCi0gICAgc3Rh
dGljIFJlZjxXZWJDb29yZGluYXRlZFN1cmZhY2U+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgRmxhZ3MsIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKLQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUdyYXBoaWNzQ29udGV4dChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0KLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2Jp
dG1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotI2VuZGlmIC8vIFdlYkNvb3JkaW5hdGVkU3VyZmFjZV9oCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XS0Nvb3JkaW5h
dGVkU2NlbmVBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tDb29yZGluYXRlZFNjZW5lQVBJQ2FzdC5oCShyZXZpc2lv
biAyMTY4MjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9XS0Nvb3JkaW5hdGVkU2NlbmVBUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdLQ29vcmRpbmF0
ZWRTY2VuZUFQSUNhc3RfaAotI2RlZmluZSBXS0Nvb3JkaW5hdGVkU2NlbmVBUElDYXN0X2gKLQot
I2luY2x1ZGUgPFdlYktpdC9XS0Nvb3JkaW5hdGVkU2NlbmUuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOwotCi1pbmxpbmUgV2ViS2l0OjpDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUqIHRvSW1wbChXS0Nvb3JkaW5hdGVkU2NlbmUgc2NlbmUpCi17
Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUqPihzY2VuZSk7Ci19Ci0KLWlubGluZSBXS0Nvb3JkaW5hdGVkU2NlbmUgdG9BUEkoV2Vi
S2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQotewotICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFdLQ29vcmRpbmF0ZWRTY2VuZT4oc2NlbmUpOwotfQotCi1pbmxpbmUgV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiB0b0ltcGwoV0tDb29yZGluYXRlZFNjZW5lTGF5ZXIg
bGF5ZXIpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGV4dHVyZU1h
cHBlckxheWVyKj4obGF5ZXIpOwotfQotCi1pbmxpbmUgV0tDb29yZGluYXRlZFNjZW5lTGF5ZXIg
dG9BUEkoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxXS0Nvb3JkaW5hdGVkU2NlbmVMYXllcj4obGF5ZXIpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdLQ29vcmRpbmF0ZWRTY2VuZUFQSUNh
c3RfaApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNp
b24gMjE2ODIyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NjYsMTEgKzU2Niw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdXBk
YXRlTGF5b3V0Vmlld3BvcnRQYXJhbWV0ZXJzKGNvbnN0IFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb24mKTsKIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19NVUxUSVBST0NF
U1MpCi0gICAgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250
ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsKLSAgICB2b2lk
IGNvbW1pdFBhZ2VUcmFuc2l0aW9uVmlld3BvcnQoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0o
R1RLKQogICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8
V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVj
dGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFu
Z2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCk7CiAgICAgdm9pZCBjb25maXJt
Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiBjb21wb3NpdGlvblN0cmluZywgaW50NjRfdCBzZWxl
Y3Rpb25TdGFydCwgaW50NjRfdCBzZWxlY3Rpb25MZW5ndGgpOwpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tDb29yZGluYXRlZFNjZW5lQVBJQ2Fz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL1dLQ29vcmRpbmF0ZWRTY2VuZUFQSUNhc3QuaAkocmV2aXNpb24gMjE2ODIyKQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tDb29yZGluYXRl
ZFNjZW5lQVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXS0Nvb3JkaW5hdGVkU2NlbmVBUElDYXN0
X2gKLSNkZWZpbmUgV0tDb29yZGluYXRlZFNjZW5lQVBJQ2FzdF9oCi0KLSNpbmNsdWRlIDxXZWJL
aXQvV0tDb29yZGluYXRlZFNjZW5lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFRl
eHR1cmVNYXBwZXJMYXllcjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTsKLQotaW5saW5lIFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lKiB0b0ltcGwoV0tDb29yZGluYXRlZFNjZW5lIHNjZW5lKQotewotICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKj4oc2NlbmUp
OwotfQotCi1pbmxpbmUgV0tDb29yZGluYXRlZFNjZW5lIHRvQVBJKFdlYktpdDo6Q29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxX
S0Nvb3JkaW5hdGVkU2NlbmU+KHNjZW5lKTsKLX0KLQotaW5saW5lIFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJMYXllciogdG9JbXBsKFdLQ29vcmRpbmF0ZWRTY2VuZUxheWVyIGxheWVyKQotewotICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcio+KGxh
eWVyKTsKLX0KLQotaW5saW5lIFdLQ29vcmRpbmF0ZWRTY2VuZUxheWVyIHRvQVBJKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8V0tDb29yZGluYXRlZFNjZW5lTGF5ZXI+KGxheWVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBXS0Nvb3JkaW5hdGVkU2NlbmVBUElDYXN0X2gKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmNwcAkocmV2aXNpb24gMjE2ODIyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5oIgogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKLSNpbmNsdWRlICJXZWJD
b29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjE2ODIyKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4ICswLDAg
QEAKLSMKLSMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotIyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSMgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0jICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0jICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotIwotIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0jICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLQotCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
IExlZ2FjeVJlY2VpdmVyIHsKLSAgICBTZXRWaXNpYmxlQ29udGVudHNSZWN0KFdlYkNvcmU6OkZs
b2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0LCBXZWJDb3JlOjpGbG9hdFBvaW50IHRyYWplY3Rv
cnlWZWN0b3J5KQotICAgIFJlbmRlck5leHRGcmFtZSgpCi0gICAgQ29tbWl0U2Nyb2xsT2Zmc2V0
KHVpbnQzMl90IGxheWVySUQsIFdlYkNvcmU6OkludFNpemUgb2Zmc2V0KQotfQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310051</attachid>
            <date>2017-05-13 19:19:54 -0700</date>
            <delta_ts>2017-05-14 17:46:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug172080.diff</filename>
            <type>text/plain</type>
            <size>52434</size>
            <attacher name="Daewoong Jang">daewoong.jang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjgzMCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3LTA1LTEzICBEYWV3b29u
ZyBKYW5nICA8ZGFld29vbmcuamFuZ0BuYXZlcmNvcnAuY29tPgorCisgICAgICAgIFtDb29yZGlu
YXRlZEdyYXBoaWNzXSBSZW1vdmUgdW51c2VkIGZpbGVzIGFuZCBsaW5lcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMDgwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NB
cmd1bWVudENvZGVycy5oOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmg6IFJlbW92ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV0tDb29yZGluYXRlZFNj
ZW5lQVBJQ2FzdC5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbjog
UmVtb3ZlZC4KKwogMjAxNy0wNS0xMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIERyb3AgcmVtYWluaW5nIHVzZXMgb2YgUGFzc1JlZlB0ciBpbiBXZWJLaXQyL1dl
YlByb2Nlc3MKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0FyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjE2ODIyKQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29k
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqIENvcHlyaWdodCAoQykg
MjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29k
ZXJzLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0ZpbHRlck9wZXJhdGlvbnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9p
bnQzRC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9MZW5ndGgu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9S
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9u
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5mby5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGltaW5n
RnVuY3Rpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2Ug
SVBDIHsKLQotdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycykKLXsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihmaWx0ZXJz
LnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyID0gKmZpbHRlcnMuYXQo
aSk7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gZmlsdGVy
LnR5cGUoKTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHR5cGUpOwotICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9U
QVRFOgotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcikuYW1vdW50KCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0g
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpP
UEFDSVRZOgotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KGRvd25j
YXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlcikuYW1vdW50
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
TFVSOgotICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rlciwg
ZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyKS5zdGREZXZpYXRpb24oKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hB
RE9XOiB7Ci0gICAgICAgICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBzaGFk
b3cgPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXIpOwotICAgICAg
ICAgICAgQXJndW1lbnRDb2RlcjxJbnRQb2ludD46OmVuY29kZShlbmNvZGVyLCBzaGFkb3cubG9j
YXRpb24oKSk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGludDMyX3Q+KHNo
YWRvdy5zdGREZXZpYXRpb24oKSk7Ci0gICAgICAgICAgICBBcmd1bWVudENvZGVyPENvbG9yPjo6
ZW5jb2RlKGVuY29kZXIsIHNoYWRvdy5jb2xvcigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpQQVNTVEhST1VHSDoKLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkRFRkFVTFQ6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpOT05FOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgdWludDMyX3Qgc2l6
ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgb3BlcmF0aW9ucyA9IGZp
bHRlcnMub3BlcmF0aW9ucygpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGU7Ci0gICAg
ICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlcjsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUVudW0odHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVF
X1JPVEFURTogewotICAgICAgICAgICAgZG91YmxlIHZhbHVlOwotICAgICAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgZmlsdGVyID0gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KHZhbHVlLCB0eXBlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCUklHSFRORVNTOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0g
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBkb3Vi
bGUgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmaWx0ZXIgPSBCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUodmFsdWUsIHR5cGUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJM
VVI6IHsKLSAgICAgICAgICAgIExlbmd0aCBsZW5ndGg7Ci0gICAgICAgICAgICBpZiAoIUFyZ3Vt
ZW50Q29kZXI8TGVuZ3RoPjo6ZGVjb2RlKGRlY29kZXIsIGxlbmd0aCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZmlsdGVyID0gQmx1ckZpbHRlck9wZXJhdGlv
bjo6Y3JlYXRlKGxlbmd0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIEludFBv
aW50IGxvY2F0aW9uOwotICAgICAgICAgICAgaW50MzJfdCBzdGREZXZpYXRpb247Ci0gICAgICAg
ICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxJbnRQb2lu
dD46OmRlY29kZShkZWNvZGVyLCBsb2NhdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGREZXZpYXRpb24pKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2Rl
cjxDb2xvcj46OmRlY29kZShkZWNvZGVyLCBjb2xvcikpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgZmlsdGVyID0gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKGxvY2F0aW9uLCBzdGREZXZpYXRpb24sIGNvbG9yKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6Ci0g
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpQQVNTVEhST1VHSDoKLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkRFRkFVTFQ6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpO
T05FOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZmlsdGVy
KQotICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoZmlsdGVyKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybU9wZXJhdGlvbnM+
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJh
bnNmb3JtT3BlcmF0aW9ucykKLXsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
Pih0cmFuc2Zvcm1PcGVyYXRpb25zLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBvcGVy
YXRpb24gOiB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBlbmNv
ZGVyLmVuY29kZUVudW0ob3BlcmF0aW9uLT50eXBlKCkpOwotCi0gICAgICAgIHN3aXRjaCAob3Bl
cmF0aW9uLT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxF
X1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOgotICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpTQ0FMRV9aOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVf
M0Q6IHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNjYWxlT3BlcmF0aW9uID0gZG93bmNhc3Q8
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+KCpvcGVyYXRpb24pOwotICAgICAgICAgICAgZW5jb2Rl
ciA8PCBzY2FsZU9wZXJhdGlvbi54KCk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHNjYWxlT3Bl
cmF0aW9uLnkoKTsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgc2NhbGVPcGVyYXRpb24ueigpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246OlRSQU5TTEFURV9YOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6Ci0g
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWjoKLSAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDogewotICAgICAgICAgICAgY29uc3Qg
YXV0byYgdHJhbnNsYXRlT3BlcmF0aW9uID0gZG93bmNhc3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKTsKLSAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6
ZW5jb2RlKGVuY29kZXIsIHRyYW5zbGF0ZU9wZXJhdGlvbi54KCkpOwotICAgICAgICAgICAgQXJn
dW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2RlciwgdHJhbnNsYXRlT3BlcmF0aW9uLnko
KSk7Ci0gICAgICAgICAgICBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCB0
cmFuc2xhdGVPcGVyYXRpb24ueigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU6Ci0gICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlJPVEFURV9ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNE
OiB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiByb3RhdGVPcGVyYXRpb24gPSBkb3duY2FzdDxS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KCpvcGVyYXRpb24pOwotICAgICAgICAgICAgZW5jb2Rl
ciA8PCByb3RhdGVPcGVyYXRpb24ueCgpOwotICAgICAgICAgICAgZW5jb2RlciA8PCByb3RhdGVP
cGVyYXRpb24ueSgpOwotICAgICAgICAgICAgZW5jb2RlciA8PCByb3RhdGVPcGVyYXRpb24ueigp
OwotICAgICAgICAgICAgZW5jb2RlciA8PCByb3RhdGVPcGVyYXRpb24uYW5nbGUoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpTS0VXX1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOiB7Ci0gICAgICAgICAgICBjb25zdCBh
dXRvJiBza2V3T3BlcmF0aW9uID0gZG93bmNhc3Q8U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4oKm9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHNrZXdPcGVyYXRpb24uYW5nbGVYKCk7
Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHNrZXdPcGVyYXRpb24uYW5nbGVZKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
TUFUUklYOgotICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46
OmVuY29kZShlbmNvZGVyLCBkb3duY2FzdDxNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+KCpvcGVy
YXRpb24pLm1hdHJpeCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOgotICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxUcmFu
c2Zvcm1hdGlvbk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCBkb3duY2FzdDxNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbj4oKm9wZXJhdGlvbikubWF0cml4KCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRToKLSAgICAgICAg
ICAgIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIGRvd25jYXN0PFBlcnNw
ZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uPigqb3BlcmF0aW9uKS5wZXJzcGVjdGl2ZSgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJ
VFk6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
Ok5PTkU6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3Jt
T3BlcmF0aW9ucz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiB0cmFuc2Zvcm1PcGVyYXRpb25zKQotewotICAgIHVpbnQzMl90IG9wZXJhdGlvbnNTaXplOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3BlcmF0aW9uc1NpemUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnNTaXplOyArK2kp
IHsKLSAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5
cGU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKG9wZXJhdGlvblR5cGUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkg
ewotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDoKLSAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpTQ0FMRToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6
Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDogewotICAgICAgICAg
ICAgZG91YmxlIHgsIHksIHo7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoeSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh6KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
WToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURToKLSAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOiB7Ci0gICAgICAgICAgICBMZW5ndGggeCwgeSwg
ejsKLSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2Rl
ciwgeCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFB
cmd1bWVudENvZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCB5KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIUFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6
ZGVjb2RlKGRlY29kZXIsIHopKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBvcGVyYXRpb25UeXBlKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6Uk9UQVRFOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6Ci0g
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKLSAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDogewotICAgICAgICAgICAgZG91YmxlIHgsIHks
IHosIGFuZ2xlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh4KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHkp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoeikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShhbmdsZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCBvcGVyYXRpb25U
eXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0tFV19YOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
U0tFV19ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzogewotICAgICAg
ICAgICAgZG91YmxlIGFuZ2xlWCwgYW5nbGVZOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShhbmdsZVgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoYW5nbGVZKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZLCBvcGVyYXRpb25U
eXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6TUFUUklYOiB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtYXRyaXg7Ci0gICAgICAgICAgICBpZiAoIUFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25N
YXRyaXg+OjpkZWNvZGUoZGVjb2RlciwgbWF0cml4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4KSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFU
UklYXzNEOiB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0gICAg
ICAgICAgICBpZiAoIUFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpkZWNvZGUo
ZGVjb2RlciwgbWF0cml4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtYXRyaXgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRTogewot
ICAgICAgICAgICAgTGVuZ3RoIHBlcnNwZWN0aXZlOwotICAgICAgICAgICAgaWYgKCFBcmd1bWVu
dENvZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCBwZXJzcGVjdGl2ZSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUocGVy
c3BlY3RpdmUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWToKLSAgICAgICAgICAgIHRyYW5zZm9ybU9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpOT05FOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IHZvaWQgZW5jb2RlVGltaW5nRnVuY3Rpb24oRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVGltaW5n
RnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uKQotewotICAgIGlmICghdGltaW5nRnVuY3Rpb24pIHsK
LSAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlv
blR5cGUoLTEpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFRpbWluZ0Z1bmN0aW9u
OjpUaW1pbmdGdW5jdGlvblR5cGUgdHlwZSA9IHRpbWluZ0Z1bmN0aW9uID8gdGltaW5nRnVuY3Rp
b24tPnR5cGUoKSA6IFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjsKLSAgICBlbmNvZGVy
LmVuY29kZUVudW0odHlwZSk7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUaW1pbmdG
dW5jdGlvbjo6TGluZWFyRnVuY3Rpb246Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGltaW5n
RnVuY3Rpb246OkN1YmljQmV6aWVyRnVuY3Rpb246IHsKLSAgICAgICAgY29uc3QgQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbiogY3ViaWMgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAgICBDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlvblByZXNldCBiZXppZXJQcmVzZXQgPSBjdWJpYy0+dGlt
aW5nRnVuY3Rpb25QcmVzZXQoKTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGJlemllclBy
ZXNldCk7Ci0gICAgICAgIGlmIChiZXppZXJQcmVzZXQgPT0gQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbjo6Q3VzdG9tKSB7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IGN1YmljLT54MSgpOwotICAg
ICAgICAgICAgZW5jb2RlciA8PCBjdWJpYy0+eTEoKTsKLSAgICAgICAgICAgIGVuY29kZXIgPDwg
Y3ViaWMtPngyKCk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IGN1YmljLT55MigpOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVw
c0Z1bmN0aW9uOiB7Ci0gICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZXBzID0g
c3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsK
LSAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RlcHMtPm51bWJlck9m
U3RlcHMoKSk7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RlcHMtPnN0ZXBBdFN0YXJ0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTcHJpbmdGdW5jdGlv
bjogewotICAgICAgICBjb25zdCBTcHJpbmdUaW1pbmdGdW5jdGlvbiogc3ByaW5nID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgU3ByaW5nVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3ByaW5nLT5tYXNzKCk7Ci0gICAgICAgIGVuY29kZXIgPDwgc3ByaW5n
LT5zdGlmZm5lc3MoKTsKLSAgICAgICAgZW5jb2RlciA8PCBzcHJpbmctPmRhbXBpbmcoKTsKLSAg
ICAgICAgZW5jb2RlciA8PCBzcHJpbmctPmluaXRpYWxWZWxvY2l0eSgpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgfQotfQotCi1ib29sIGRlY29kZVRpbWluZ0Z1bmN0aW9uKERlY29kZXIm
IGRlY29kZXIsIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4mIHRpbWluZ0Z1bmN0aW9uKQotewotICAg
IFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlvblR5cGUgdHlwZTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRW51bSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHR5
cGUgPT0gVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSgtMSkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlv
bjo6TGluZWFyRnVuY3Rpb246Ci0gICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gTGluZWFyVGltaW5n
RnVuY3Rpb246OmNyZWF0ZSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFRpbWlu
Z0Z1bmN0aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOiB7Ci0gICAgICAgIGRvdWJsZSB4MSwgeTEs
IHgyLCB5MjsKLSAgICAgICAgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rp
b25QcmVzZXQgYmV6aWVyUHJlc2V0OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShi
ZXppZXJQcmVzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYmV6
aWVyUHJlc2V0ICE9IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OkN1c3RvbSkgewotICAgICAg
ICAgICAgdGltaW5nRnVuY3Rpb24gPSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
YmV6aWVyUHJlc2V0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeDEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHkxKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh4MikpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeTIpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246IHsKLSAgICAgICAg
dWludDMyX3QgbnVtYmVyT2ZTdGVwczsKLSAgICAgICAgYm9vbCBzdGVwQXRTdGFydDsKLSAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShudW1iZXJPZlN0ZXBzKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGVwQXRTdGFydCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBTdGVwc1Rp
bWluZ0Z1bmN0aW9uOjpjcmVhdGUobnVtYmVyT2ZTdGVwcywgc3RlcEF0U3RhcnQpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3ByaW5nRnVu
Y3Rpb246IHsKLSAgICAgICAgZG91YmxlIG1hc3M7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUobWFzcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJsZSBzdGlm
Zm5lc3M7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RpZmZuZXNzKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG91YmxlIGRhbXBpbmc7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoZGFtcGluZykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGRvdWJsZSBpbml0aWFsVmVsb2NpdHk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
aW5pdGlhbFZlbG9jaXR5KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB0
aW1pbmdGdW5jdGlvbiA9IFNwcmluZ1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUobWFzcywgc3RpZmZu
ZXNzLCBkYW1waW5nLCBpbml0aWFsVmVsb2NpdHkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8
VGV4dHVyZU1hcHBlckFuaW1hdGlvbj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pCi17Ci0gICAgZW5jb2RlciA8PCBhbmlt
YXRpb24ubmFtZSgpOwotICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLmJveFNpemUoKTsKLSAgICBl
bmNvZGVyLmVuY29kZUVudW0oYW5pbWF0aW9uLnN0YXRlKCkpOwotICAgIGVuY29kZXIgPDwgYW5p
bWF0aW9uLnN0YXJ0VGltZSgpOwotICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLnBhdXNlVGltZSgp
OwotICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLmxpc3RzTWF0Y2goKTsKLQotICAgIFJlZlB0cjxB
bmltYXRpb24+IGFuaW1hdGlvbk9iamVjdCA9IGFuaW1hdGlvbi5hbmltYXRpb24oKTsKLSAgICBl
bmNvZGVyLmVuY29kZUVudW0oYW5pbWF0aW9uT2JqZWN0LT5kaXJlY3Rpb24oKSk7Ci0gICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYW5pbWF0aW9uT2JqZWN0LT5maWxsTW9kZSgp
KTsKLSAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbk9iamVjdC0+ZHVyYXRpb24oKTsKLSAgICBlbmNv
ZGVyIDw8IGFuaW1hdGlvbk9iamVjdC0+aXRlcmF0aW9uQ291bnQoKTsKLSAgICBlbmNvZGVUaW1p
bmdGdW5jdGlvbihlbmNvZGVyLCBhbmltYXRpb25PYmplY3QtPnRpbWluZ0Z1bmN0aW9uKCkpOwot
Ci0gICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbi5rZXlm
cmFtZXMoKTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0oa2V5ZnJhbWVzLnByb3BlcnR5KCkpOwot
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtleWZyYW1lcy5zaXplKCkpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlJiB2YWx1ZSA9IGtleWZyYW1lcy5hdChpKTsKLSAgICAg
ICAgZW5jb2RlciA8PCB2YWx1ZS5rZXlUaW1lKCk7Ci0gICAgICAgIGVuY29kZVRpbWluZ0Z1bmN0
aW9uKGVuY29kZXIsIHZhbHVlLnRpbWluZ0Z1bmN0aW9uKCkpOwotICAgICAgICBzd2l0Y2ggKGtl
eWZyYW1lcy5wcm9wZXJ0eSgpKSB7Ci0gICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNp
dHk6Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0
aW9uVmFsdWUmPih2YWx1ZSkudmFsdWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFuaW1hdGVkUHJvcGVydHlUcmFuc2Zvcm06Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlJj4odmFsdWUpLnZhbHVlKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5RmlsdGVy
OgotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRp
b25WYWx1ZSY+KHZhbHVlKS52YWx1ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBB
cmd1bWVudENvZGVyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKQotewotICAgIFN0cmluZyBu
YW1lOwotICAgIEZsb2F0U2l6ZSBib3hTaXplOwotICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb246
OkFuaW1hdGlvblN0YXRlIHN0YXRlOwotICAgIGRvdWJsZSBzdGFydFRpbWU7Ci0gICAgZG91Ymxl
IHBhdXNlVGltZTsKLSAgICBib29sIGxpc3RzTWF0Y2g7Ci0KLSAgICBBbmltYXRpb246OkFuaW1h
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgdW5zaWduZWQgZmlsbE1vZGU7Ci0gICAgZG91
YmxlIGR1cmF0aW9uOwotICAgIGRvdWJsZSBpdGVyYXRpb25Db3VudDsKLSAgICBSZWZQdHI8VGlt
aW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uOwotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1h
dGlvbk9iamVjdDsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJveFNpemUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oc3RhdGUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGFydFRpbWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXVzZVRpbWUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsaXN0c01hdGNo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKGRp
cmVjdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGZpbGxNb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoZHVyYXRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShpdGVyYXRpb25Db3VudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRl
Y29kZVRpbWluZ0Z1bmN0aW9uKGRlY29kZXIsIHRpbWluZ0Z1bmN0aW9uKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYW5pbWF0aW9uT2JqZWN0ID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsK
LSAgICBhbmltYXRpb25PYmplY3QtPnNldERpcmVjdGlvbihkaXJlY3Rpb24pOwotICAgIGFuaW1h
dGlvbk9iamVjdC0+c2V0RmlsbE1vZGUoZmlsbE1vZGUpOwotICAgIGFuaW1hdGlvbk9iamVjdC0+
c2V0RHVyYXRpb24oZHVyYXRpb24pOwotICAgIGFuaW1hdGlvbk9iamVjdC0+c2V0SXRlcmF0aW9u
Q291bnQoaXRlcmF0aW9uQ291bnQpOwotICAgIGlmICh0aW1pbmdGdW5jdGlvbikKLSAgICAgICAg
YW5pbWF0aW9uT2JqZWN0LT5zZXRUaW1pbmdGdW5jdGlvbihXVEZNb3ZlKHRpbWluZ0Z1bmN0aW9u
KSk7Ci0KLSAgICBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHk7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUVudW0ocHJvcGVydHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgS2V5ZnJh
bWVWYWx1ZUxpc3Qga2V5ZnJhbWVzKHByb3BlcnR5KTsKLSAgICB1bnNpZ25lZCBrZXlmcmFtZXNT
aXplOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2V5ZnJhbWVzU2l6ZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzU2l6ZTsg
KytpKSB7Ci0gICAgICAgIGRvdWJsZSBrZXlUaW1lOwotICAgICAgICBSZWZQdHI8VGltaW5nRnVu
Y3Rpb24+IHRpbWluZ0Z1bmN0aW9uOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleVRp
bWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZVRpbWlu
Z0Z1bmN0aW9uKGRlY29kZXIsIHRpbWluZ0Z1bmN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7Ci0gICAgICAgIGNhc2UgQW5pbWF0
ZWRQcm9wZXJ0eU9wYWNpdHk6IHsKLSAgICAgICAgICAgIGZsb2F0IHZhbHVlOwotICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAga2V5ZnJhbWVzLmluc2VydChzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0
QW5pbWF0aW9uVmFsdWU+KGtleVRpbWUsIHZhbHVlLCB0aW1pbmdGdW5jdGlvbi5nZXQoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBbmltYXRlZFByb3Bl
cnR5VHJhbnNmb3JtOiB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5zZm9y
bTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodHJhbnNmb3JtKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBrZXlmcmFtZXMuaW5zZXJ0KHN0ZDo6
bWFrZV91bmlxdWU8VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWU+KGtleVRpbWUsIHRyYW5zZm9ybSwg
dGltaW5nRnVuY3Rpb24uZ2V0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eUZpbHRlcjogewotICAgICAgICAgICAgRmlsdGVy
T3BlcmF0aW9ucyBmaWx0ZXI7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZpbHRl
cikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAga2V5ZnJhbWVz
Lmluc2VydChzdGQ6Om1ha2VfdW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVlPihrZXlUaW1lLCBm
aWx0ZXIsIHRpbWluZ0Z1bmN0aW9uLmdldCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBhbmltYXRpb24gPSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKG5hbWUsIGtleWZy
YW1lcywgYm94U2l6ZSwgKmFuaW1hdGlvbk9iamVjdCwgbGlzdHNNYXRjaCwgc3RhcnRUaW1lLCBw
YXVzZVRpbWUsIHN0YXRlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENv
ZGVyPFRleHR1cmVNYXBwZXJBbmltYXRpb25zPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIGVuY29kZXIg
PDwgYW5pbWF0aW9ucy5hbmltYXRpb25zKCk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxUZXh0
dXJlTWFwcGVyQW5pbWF0aW9ucz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGUo
YW5pbWF0aW9ucy5hbmltYXRpb25zKCkpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29y
ZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQotewotI2lmIE9TKERBUldJTikKLSAgICBB
dHRhY2htZW50IGZyb250QXR0YWNobWVudCwgYmFja0F0dGFjaG1lbnQ7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShmcm9udEF0dGFjaG1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShiYWNrQXR0YWNobWVudCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHRva2VuID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4oZnJvbnRBdHRhY2htZW50LnBv
cnQoKSwgYmFja0F0dGFjaG1lbnQucG9ydCgpKTsKLSNlbGlmIE9TKExJTlVYKQotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUodG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvKQotewotICAgIFNpbXBsZUFy
Z3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwgc3VyZmFjZVVw
ZGF0ZUluZm8pOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJ
bmZvKQotewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZv
Pjo6ZGVjb2RlKGRlY29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsKLX0KLQotdm9pZCBBcmd1bWVu
dENvZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlPjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKLXsKLSAg
ICBlbmNvZGVyIDw8IHN0YXRlLmNoYW5nZU1hc2s7Ci0KLSAgICBpZiAoc3RhdGUuZmxhZ3NDaGFu
Z2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmZsYWdzOwotCi0gICAgaWYgKHN0YXRlLnBv
c2l0aW9uQ2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5wb3M7Ci0KLSAgICBpZiAo
c3RhdGUuYW5jaG9yUG9pbnRDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmFuY2hv
clBvaW50OwotCi0gICAgaWYgKHN0YXRlLnNpemVDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLnNpemU7Ci0KLSAgICBpZiAoc3RhdGUudHJhbnNmb3JtQ2hhbmdlZCkKLSAgICAgICAg
ZW5jb2RlciA8PCBzdGF0ZS50cmFuc2Zvcm07Ci0KLSAgICBpZiAoc3RhdGUuY2hpbGRyZW5UcmFu
c2Zvcm1DaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNoaWxkcmVuVHJhbnNmb3Jt
OwotCi0gICAgaWYgKHN0YXRlLmNvbnRlbnRzUmVjdENoYW5nZWQpCi0gICAgICAgIGVuY29kZXIg
PDwgc3RhdGUuY29udGVudHNSZWN0OwotCi0gICAgaWYgKHN0YXRlLmNvbnRlbnRzVGlsaW5nQ2hh
bmdlZCkgewotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNvbnRlbnRzVGlsZVNpemU7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuY29udGVudHNUaWxlUGhhc2U7Ci0gICAgfQotCi0gICAgaWYg
KHN0YXRlLm9wYWNpdHlDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLm9wYWNpdHk7
Ci0KLSAgICBpZiAoc3RhdGUuc29saWRDb2xvckNoYW5nZWQpCi0gICAgICAgIGVuY29kZXIgPDwg
c3RhdGUuc29saWRDb2xvcjsKLQotICAgIGlmIChzdGF0ZS5kZWJ1Z1Zpc3VhbHNDaGFuZ2VkKQot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmRlYnVnVmlzdWFsczsKLQotICAgIGlmIChzdGF0ZS5m
aWx0ZXJzQ2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWx0ZXJzOwotCi0gICAg
aWYgKHN0YXRlLmFuaW1hdGlvbnNDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmFu
aW1hdGlvbnM7Ci0KLSAgICBpZiAoc3RhdGUuY2hpbGRyZW5DaGFuZ2VkKQotICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRlLmNoaWxkcmVuOwotCi0gICAgZW5jb2RlciA8PCBzdGF0ZS50aWxlc1RvQ3Jl
YXRlOwotICAgIGVuY29kZXIgPDwgc3RhdGUudGlsZXNUb1JlbW92ZTsKLQotICAgIGlmIChzdGF0
ZS5yZXBsaWNhQ2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5yZXBsaWNhOwotCi0g
ICAgaWYgKHN0YXRlLm1hc2tDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLm1hc2s7
Ci0KLSAgICBpZiAoc3RhdGUuaW1hZ2VDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRl
LmltYWdlSUQ7Ci0KLSAgICBpZiAoc3RhdGUucmVwYWludENvdW50Q2hhbmdlZCkKLSAgICAgICAg
ZW5jb2RlciA8PCBzdGF0ZS5yZXBhaW50Q291bnQ7Ci0KLSAgICBlbmNvZGVyIDw8IHN0YXRlLnRp
bGVzVG9VcGRhdGU7Ci0KLSAgICBpZiAoc3RhdGUuY29tbWl0dGVkU2Nyb2xsT2Zmc2V0Q2hhbmdl
ZCkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jb21taXR0ZWRTY3JvbGxPZmZzZXQ7Ci19Ci0K
LWJvb2wgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZT46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUp
Ci17Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5jaGFuZ2VNYXNrKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0YXRlLmZsYWdzQ2hhbmdlZCAmJiAhZGVjb2Rlci5k
ZWNvZGUoc3RhdGUuZmxhZ3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3Rh
dGUucG9zaXRpb25DaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5wb3MpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUuYW5jaG9yUG9pbnRDaGFuZ2VkICYmICFk
ZWNvZGVyLmRlY29kZShzdGF0ZS5hbmNob3JQb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChzdGF0ZS5zaXplQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuc2l6
ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdGF0ZS50cmFuc2Zvcm1DaGFu
Z2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS50cmFuc2Zvcm0pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2VkICYmICFkZWNv
ZGVyLmRlY29kZShzdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChzdGF0ZS5jb250ZW50c1JlY3RDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29k
ZShzdGF0ZS5jb250ZW50c1JlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
c3RhdGUuY29udGVudHNUaWxpbmdDaGFuZ2VkKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc3RhdGUuY29udGVudHNUaWxlU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuY29udGVudHNUaWxlUGhhc2UpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZS5vcGFjaXR5Q2hh
bmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUub3BhY2l0eSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChzdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNv
ZGUoc3RhdGUuc29saWRDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChz
dGF0ZS5kZWJ1Z1Zpc3VhbHNDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5kZWJ1Z1Zp
c3VhbHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUuZmlsdGVyc0No
YW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmZpbHRlcnMpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUuYW5pbWF0aW9uc0NoYW5nZWQgJiYgIWRlY29kZXIuZGVj
b2RlKHN0YXRlLmFuaW1hdGlvbnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
c3RhdGUuY2hpbGRyZW5DaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5jaGlsZHJlbikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUu
dGlsZXNUb0NyZWF0ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoc3RhdGUudGlsZXNUb1JlbW92ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmIChzdGF0ZS5yZXBsaWNhQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUucmVw
bGljYSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdGF0ZS5tYXNrQ2hhbmdl
ZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUubWFzaykpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChzdGF0ZS5pbWFnZUNoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmlt
YWdlSUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUucmVwYWludENv
dW50Q2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUucmVwYWludENvdW50KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS50aWxlc1Rv
VXBkYXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0YXRlLmNvbW1pdHRl
ZFNjcm9sbE9mZnNldENoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNvbW1pdHRlZFNj
cm9sbE9mZnNldCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIEFyZ3VtZW50Q29kZXI8VGlsZVVwZGF0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgVGlsZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgU2ltcGxl
QXJndW1lbnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmVuY29kZShlbmNvZGVyLCB1cGRhdGVJbmZv
KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFRpbGVVcGRhdGVJbmZvPjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFRpbGVVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIHJldHVybiBT
aW1wbGVBcmd1bWVudENvZGVyPFRpbGVVcGRhdGVJbmZvPjo6ZGVjb2RlKGRlY29kZXIsIHVwZGF0
ZUluZm8pOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8VGlsZUNyZWF0aW9uSW5mbz46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUaWxlQ3JlYXRpb25JbmZvJiB1cGRhdGVJbmZvKQot
ewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8VGlsZUNyZWF0aW9uSW5mbz46OmVuY29kZShlbmNv
ZGVyLCB1cGRhdGVJbmZvKTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFRpbGVDcmVhdGlvbklu
Zm8+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVGlsZUNyZWF0aW9uSW5mbyYgdXBkYXRlSW5m
bykKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxUaWxlQ3JlYXRpb25JbmZvPjo6
ZGVjb2RlKGRlY29kZXIsIHVwZGF0ZUluZm8pOwotfQotCi1zdGF0aWMgdm9pZCBlbmNvZGVDb29y
ZGluYXRlZFN1cmZhY2UoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVmUHRyPENvb3JkaW5hdGVk
U3VyZmFjZT4mIHN1cmZhY2UpCi17Ci0gICAgYm9vbCBpc1ZhbGlkU3VyZmFjZSA9IGZhbHNlOwot
ICAgIGlmICghc3VyZmFjZSkgewotICAgICAgICBlbmNvZGVyIDw8IGlzVmFsaWRTdXJmYWNlOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJD
b29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihz
dXJmYWNlLmdldCgpKTsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7
Ci0gICAgaWYgKHdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0g
ICAgICAgIGlzVmFsaWRTdXJmYWNlID0gdHJ1ZTsKLQotICAgIGVuY29kZXIgPDwgaXNWYWxpZFN1
cmZhY2U7Ci0KLSAgICBpZiAoaXNWYWxpZFN1cmZhY2UpCi0gICAgICAgIGVuY29kZXIgPDwgaGFu
ZGxlOwotfQotCi1zdGF0aWMgYm9vbCBkZWNvZGVDb29yZGluYXRlZFN1cmZhY2UoRGVjb2RlciYg
ZGVjb2RlciwgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4mIHN1cmZhY2UpCi17Ci0gICAgYm9v
bCBpc1ZhbGlkU3VyZmFjZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWRTdXJmYWNl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpc1ZhbGlkU3VyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBo
YW5kbGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBzdXJmYWNlID0gV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFu
ZGxlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQotewotICAgIGVuY29kZXIgPDwgc3RhdGUucm9vdENv
bXBvc2l0aW5nTGF5ZXI7Ci0gICAgZW5jb2RlciA8PCBzdGF0ZS5zY3JvbGxQb3NpdGlvbjsKLSAg
ICBlbmNvZGVyIDw8IHN0YXRlLmNvbnRlbnRzU2l6ZTsKLSAgICBlbmNvZGVyIDw8IHN0YXRlLmNv
dmVyZWRSZWN0OwotCi0gICAgZW5jb2RlciA8PCBzdGF0ZS5sYXllcnNUb0NyZWF0ZTsKLSAgICBl
bmNvZGVyIDw8IHN0YXRlLmxheWVyc1RvVXBkYXRlOwotICAgIGVuY29kZXIgPDwgc3RhdGUubGF5
ZXJzVG9SZW1vdmU7Ci0KLSAgICBlbmNvZGVyIDw8IHN0YXRlLmltYWdlc1RvQ3JlYXRlOwotICAg
IGVuY29kZXIgPDwgc3RhdGUuaW1hZ2VzVG9SZW1vdmU7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGVu
Y29kZSBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSByaWdodCBhZnRlciBpdCdzIGNyZWF0
aW9uLgotICAgIC8vIFRoYXQncyB3aHkgd2UgY2Fubm90IHVzZSBzaW1wbGUgc3RkOjpwYWlyIGVu
Y29kZXIuCi0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGUuaW1hZ2Vz
VG9VcGRhdGUuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLmltYWdl
c1RvVXBkYXRlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuaW1hZ2Vz
VG9VcGRhdGVbaV0uZmlyc3Q7Ci0gICAgICAgIGVuY29kZUNvb3JkaW5hdGVkU3VyZmFjZShlbmNv
ZGVyLCBzdGF0ZS5pbWFnZXNUb1VwZGF0ZVtpXS5zZWNvbmQpOwotICAgIH0KLSAgICBlbmNvZGVy
IDw8IHN0YXRlLmltYWdlc1RvQ2xlYXI7Ci0KLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihzdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuc2l6ZSgpKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHN0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZS5zaXplKCk7ICsraSkg
ewotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnVwZGF0ZUF0bGFzZXNUb0NyZWF0ZVtpXS5maXJz
dDsKLSAgICAgICAgZW5jb2RlQ29vcmRpbmF0ZWRTdXJmYWNlKGVuY29kZXIsIHN0YXRlLnVwZGF0
ZUF0bGFzZXNUb0NyZWF0ZVtpXS5zZWNvbmQpOwotICAgIH0KLX0KLQotYm9vbCBBcmd1bWVudENv
ZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBD
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQotewotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc3RhdGUucm9vdENvbXBvc2l0aW5nTGF5ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLnNjcm9sbFBvc2l0aW9uKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5jb250ZW50c1Np
emUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0
YXRlLmNvdmVyZWRSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShzdGF0ZS5sYXllcnNUb0NyZWF0ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUubGF5ZXJzVG9VcGRhdGUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLmxheWVyc1Rv
UmVtb3ZlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdGF0ZS5pbWFnZXNUb0NyZWF0ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuaW1hZ2VzVG9SZW1vdmUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICB1aW50NjRfdCBzaXplT2ZJbWFnZXNUb1VwZGF0ZTsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHNpemVPZkltYWdlc1RvVXBkYXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IHNpemVPZkltYWdlc1RvVXBkYXRlOyAr
K2kpIHsKLSAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGltYWdlSUQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2U7Ci0gICAgICAg
IGlmICghZGVjb2RlQ29vcmRpbmF0ZWRTdXJmYWNlKGRlY29kZXIsIHN1cmZhY2UpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBzdXJmYWNlLnJlbGVhc2UoKSkpOwotICAgIH0KLQot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuaW1hZ2VzVG9DbGVhcikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHVpbnQ2NF90IHNpemVPZlVwZGF0ZUF0bGFzZXNUb0NyZWF0ZTsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemVPZlVwZGF0ZUF0bGFzZXNUb0NyZWF0ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBzaXpl
T2ZVcGRhdGVBdGxhc2VzVG9DcmVhdGU7ICsraSkgewotICAgICAgICB1aW50MzJfdCBhdGxhc0lE
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGF0bGFzSUQpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2U7
Ci0gICAgICAgIGlmICghZGVjb2RlQ29vcmRpbmF0ZWRTdXJmYWNlKGRlY29kZXIsIHN1cmZhY2Up
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0YXRlLnVwZGF0ZUF0bGFz
ZXNUb0NyZWF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXRsYXNJRCwgc3VyZmFjZS5yZWxlYXNl
KCkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVy
PERlYnVnVmlzdWFscz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEZWJ1Z1Zpc3Vh
bHMmIGRlYnVnVmlzdWFscykKLXsKLSAgICBlbmNvZGVyIDw8IGRlYnVnVmlzdWFscy5kZWJ1Z0Jv
cmRlckNvbG9yOwotICAgIGVuY29kZXIgPDwgZGVidWdWaXN1YWxzLmRlYnVnQm9yZGVyV2lkdGg7
Ci0gICAgZW5jb2RlciA8PCBkZWJ1Z1Zpc3VhbHMuZmxhZ3M7Ci19Ci0KLWJvb2wgQXJndW1lbnRD
b2RlcjxEZWJ1Z1Zpc3VhbHM+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgRGVidWdWaXN1YWxz
JiBkZWJ1Z1Zpc3VhbHMpCi17Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShkZWJ1Z1Zpc3VhbHMu
ZGVidWdCb3JkZXJDb2xvcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoZGVidWdWaXN1YWxzLmRlYnVnQm9yZGVyV2lkdGgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRlYnVnVmlzdWFscy5mbGFncykp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5h
bWVzcGFjZSBJUEMKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5o
CShyZXZpc2lvbiAyMTY4MjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVyc19oCi0jZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NBcmd1
bWVudENvZGVyc19oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAi
QXJndW1lbnRDb2RlcnMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotc3RydWN0IENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllclN0YXRlOwotc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZTsK
LWNsYXNzIEZsb2F0UG9pbnQzRDsKLWNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb247Ci1jbGFz
cyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczsKLWNsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOwotc3Ry
dWN0IFRpbGVDcmVhdGlvbkluZm87Ci1zdHJ1Y3QgVGlsZVVwZGF0ZUluZm87Ci1jbGFzcyBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDsKLWNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7Ci1zdHJ1Y3QgTGVu
Z3RoOwotc3RydWN0IERlYnVnVmlzdWFsczsKLQotY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLX0K
LQotbmFtZXNwYWNlIElQQyB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6RmlsdGVyT3BlcmF0aW9ucz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zPiB7
Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zv
cm1PcGVyYXRpb25zJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3Jl
OjpUcmFuc2Zvcm1PcGVyYXRpb25zJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zPiB7Ci0gICAgc3RhdGljIHZv
aWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
cyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbnMmKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbiYpOwotICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1h
dGlvbiYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpT
dXJmYWNlVXBkYXRlSW5mbz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29u
c3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
RGVjb2RlciYsIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VGlsZVVwZGF0ZUluZm8+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlRpbGVV
cGRhdGVJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpU
aWxlVXBkYXRlSW5mbyYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpUaWxlQ3JlYXRpb25JbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29k
ZXImLCBjb25zdCBXZWJDb3JlOjpUaWxlQ3JlYXRpb25JbmZvJik7Ci0gICAgc3RhdGljIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpUaWxlQ3JlYXRpb25JbmZvJik7Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RGVidWdWaXN1YWxzPiB7Ci0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpEZWJ1Z1Zpc3VhbHMmKTsK
LSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkRlYnVnVmlzdWFscyYp
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSVBDCi0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnNf
aApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuY3BwCShyZXZpc2lvbiAy
MTY4MjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJD
b29yZGluYXRlZFN1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyOSArMCwwIEBACi0v
KgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLQotIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNv
b3JkaW5hdGVkU3VyZmFjZS5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaD4KLQotI2lmIFVTRShURVhUVVJF
X01BUFBFUikKLSNpbmNsdWRlICJCaXRtYXBUZXh0dXJlR0wuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyR0wuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLVdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlOjpIYW5kbGUoKQot
ewotfQotCi12b2lkIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlOjplbmNvZGUoSVBDOjpF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9zaXplIDw8IG1fZmxh
Z3M7Ci0gICAgZW5jb2RlciA8PCBtX2JpdG1hcEhhbmRsZTsKLX0KLQotYm9vbCBXZWJDb29yZGlu
YXRlZFN1cmZhY2U6OkhhbmRsZTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgSGFuZGxl
JiBoYW5kbGUpCi17Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUubV9zaXplKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlLm1fZmxh
Z3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5k
bGUubV9iaXRtYXBIYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotUmVmUHRyPFdlYkNvb3JkaW5hdGVkU3VyZmFjZT4gV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpG
bGFncyBmbGFncykKLXsKLSAgICBpZiAoYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZVNoYXJlYWJsZShzaXplLCAoZmxhZ3MgJiBTdXBwb3J0c0FscGhhKSA/IFNoYXJlYWJsZUJp
dG1hcDo6U3VwcG9ydHNBbHBoYSA6IFNoYXJlYWJsZUJpdG1hcDo6Tm9GbGFncykpCi0gICAgICAg
IHJldHVybiBjcmVhdGUoc2l6ZSwgZmxhZ3MsIFdURk1vdmUoYml0bWFwKSk7Ci0KLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICBBU1NFUlQobV9iaXRtYXApOwotICAgIGF1dG8gZ3JhcGhpY3NDb250ZXh0ID0g
bV9iaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+
Y2xpcChyZWN0KTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZShyZWN0LngoKSwgcmVj
dC55KCkpOwotICAgIHJldHVybiBncmFwaGljc0NvbnRleHQ7Ci19Ci0KLVJlZjxXZWJDb29yZGlu
YXRlZFN1cmZhY2U+IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUm
IHNpemUsIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3MsIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGJpdG1hcCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29yZGluYXRl
ZFN1cmZhY2Uoc2l6ZSwgZmxhZ3MsIGJpdG1hcCkpOwotfQotCi1XZWJDb29yZGluYXRlZFN1cmZh
Y2U6OldlYkNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRl
ZFN1cmZhY2U6OkZsYWdzIGZsYWdzLCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXApCi0g
ICAgOiBDb29yZGluYXRlZFN1cmZhY2Uoc2l6ZSwgZmxhZ3MpCi0gICAgLCBtX2JpdG1hcChiaXRt
YXApCi17Ci19Ci0KLVdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6fldlYkNvb3JkaW5hdGVkU3VyZmFj
ZSgpCi17Ci19Ci0KLVJlZlB0cjxXZWJDb29yZGluYXRlZFN1cmZhY2U+IFdlYkNvb3JkaW5hdGVk
U3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlKQotewotICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZS5tX2Jp
dG1hcEhhbmRsZSk7Ci0gICAgaWYgKCFiaXRtYXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgcmV0dXJuIGNyZWF0ZShoYW5kbGUubV9zaXplLCBoYW5kbGUubV9mbGFncywgV1RGTW92
ZShiaXRtYXApKTsKLX0KLQotYm9vbCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZUhhbmRs
ZShIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBoYW5kbGUubV9zaXplID0gbV9zaXplOwotICAgIGhh
bmRsZS5tX2ZsYWdzID0gbV9mbGFnczsKLQotICAgIGlmICghbV9iaXRtYXAtPmNyZWF0ZUhhbmRs
ZShoYW5kbGUubV9iaXRtYXBIYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OnBhaW50VG9TdXJm
YWNlKGNvbnN0IEludFJlY3QmIHJlY3QsIENvb3JkaW5hdGVkU3VyZmFjZTo6Q2xpZW50JiBjbGll
bnQpCi17Ci0gICAgYXV0byBjb250ZXh0ID0gY3JlYXRlR3JhcGhpY3NDb250ZXh0KHJlY3QpOwot
ICAgIGNsaWVudC5wYWludFRvU3VyZmFjZUNvbnRleHQoKmNvbnRleHQpOwotfQotCi0jaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKQotdm9pZCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNvcHlUb1RleHR1
cmUoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0
LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0KQotewotICAgIEFTU0VSVChtX2JpdG1hcCk7
Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IG1fYml0bWFwLT5jcmVhdGVJbWFnZSgpOwotICAg
IHRleHR1cmUudXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0KCksIHRhcmdldCwgc291cmNlT2Zmc2V0
LCBCaXRtYXBUZXh0dXJlOjpVcGRhdGVDYW5Nb2RpZnlPcmlnaW5hbEltYWdlRGF0YSk7Ci19Ci0j
ZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVSKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLSNl
bmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29y
ZGluYXRlZFN1cmZhY2UuaAkocmV2aXNpb24gMjE2ODIyKQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChDKSAyMDEy
IENvbXBhbnkgMTAwLCBJbmMuCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlX2gKLSNkZWZpbmUgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlX2gKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkU3VyZmFjZS5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBCaXRtYXBUZXh0dXJlOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0Owot
fQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlIDog
cHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgY2xhc3Mg
SGFuZGxlIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSGFuZGxlKTsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIEhhbmRsZSgpOwotCi0gICAgICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2Rl
ciYpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpEZWNvZGVyJiwgSGFu
ZGxlJik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOwotICAgICAgICBtdXRhYmxlIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIG1fYml0
bWFwSGFuZGxlOwotICAgICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKLSAgICAgICAgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBtX2ZsYWdzOwotICAgIH07Ci0KLSAgICAv
LyBDcmVhdGUgYSBuZXcgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLCBhbmQgYWxsb2NhdGUgZWl0aGVy
IGEgR3JhcGhpY3NTdXJmYWNlIG9yIGEgU2hhcmVhYmxlQml0bWFwIGFzIGJhY2tpbmcuCi0gICAg
c3RhdGljIFJlZlB0cjxXZWJDb29yZGluYXRlZFN1cmZhY2U+IGNyZWF0ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiwgRmxhZ3MpOwotCi0gICAgLy8gQ3JlYXRlIGEgc2hhcmVhYmxlIHN1cmZhY2Ug
ZnJvbSBhIGhhbmRsZS4KLSAgICBzdGF0aWMgUmVmUHRyPFdlYkNvb3JkaW5hdGVkU3VyZmFjZT4g
Y3JlYXRlKGNvbnN0IEhhbmRsZSYpOwotCi0gICAgLy8gQ3JlYXRlIGEgaGFuZGxlLgotICAgIGJv
b2wgY3JlYXRlSGFuZGxlKEhhbmRsZSYpOwotCi0gICAgdmlydHVhbCB+V2ViQ29vcmRpbmF0ZWRT
dXJmYWNlKCk7Ci0KLSAgICB2b2lkIHBhaW50VG9TdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkNsaWVudCYpIG92ZXJyaWRlOwotCi0j
aWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIHZvaWQgY29weVRvVGV4dHVyZShXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0LCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgc291cmNlT2Zmc2V0KSBvdmVycmlkZTsKLSNlbmRpZgotCi1wcml2YXRl
OgotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgRmxh
Z3MsIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKLQotICAgIC8vIENyZWF0ZSBhIFdlYkNvb3Jk
aW5hdGVkU3VyZmFjZSByZWZlcmVuY2luZyBhbiBleGlzdGluZyBTaGFyZWFibGVCaXRtYXAuCi0g
ICAgc3RhdGljIFJlZjxXZWJDb29yZGluYXRlZFN1cmZhY2U+IGNyZWF0ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiwgRmxhZ3MsIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUdyYXBoaWNzQ29udGV4
dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0KLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBtX2JpdG1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotI2VuZGlmIC8vIFdlYkNvb3JkaW5hdGVkU3VyZmFjZV9o
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAy
MTY4MjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2NiwxMSArNTY2LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCB1cGRhdGVM
YXlvdXRWaWV3cG9ydFBhcmFtZXRlcnMoY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbiYpOwogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykK
LSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRz
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpOwotICAgIHZvaWQgY29t
bWl0UGFnZVRyYW5zaXRpb25WaWV3cG9ydCgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShHVEsp
CiAgICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJD
b3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9u
U3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0
YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKTsKICAgICB2b2lkIGNvbmZpcm1Db21w
b3NpdGlvbihjb25zdCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nLCBpbnQ2NF90IHNlbGVjdGlv
blN0YXJ0LCBpbnQ2NF90IHNlbGVjdGlvbkxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XS0Nvb3JkaW5hdGVkU2NlbmVBUElDYXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvV0tDb29yZGluYXRlZFNjZW5lQVBJQ2FzdC5oCShyZXZpc2lvbiAyMTY4MjIpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XS0Nvb3JkaW5hdGVkU2Nl
bmVBUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdLQ29vcmRpbmF0ZWRTY2VuZUFQSUNhc3RfaAot
I2RlZmluZSBXS0Nvb3JkaW5hdGVkU2NlbmVBUElDYXN0X2gKLQotI2luY2x1ZGUgPFdlYktpdC9X
S0Nvb3JkaW5hdGVkU2NlbmUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgVGV4dHVy
ZU1hcHBlckxheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOwotCi1pbmxpbmUgV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUqIHRvSW1wbChXS0Nvb3JkaW5hdGVkU2NlbmUgc2NlbmUpCi17Ci0gICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqPihzY2VuZSk7Ci19
Ci0KLWlubGluZSBXS0Nvb3JkaW5hdGVkU2NlbmUgdG9BUEkoV2ViS2l0OjpDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqIHNjZW5lKQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdLQ29v
cmRpbmF0ZWRTY2VuZT4oc2NlbmUpOwotfQotCi1pbmxpbmUgV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckxheWVyKiB0b0ltcGwoV0tDb29yZGluYXRlZFNjZW5lTGF5ZXIgbGF5ZXIpCi17Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKj4obGF5ZXIp
OwotfQotCi1pbmxpbmUgV0tDb29yZGluYXRlZFNjZW5lTGF5ZXIgdG9BUEkoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckxheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxX
S0Nvb3JkaW5hdGVkU2NlbmVMYXllcj4obGF5ZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIFdLQ29vcmRpbmF0ZWRTY2VuZUFQSUNhc3RfaApJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
Y3BwCShyZXZpc2lvbiAyMTY4MjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmgiCiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIldlYkNvb3Jk
aW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdl
UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMTY4MjIpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEsMjggKzAsMCBAQAot
IwotIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCi0jICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotIwotIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0j
Ci0jICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSMgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotIwotCi0KLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi1tZXNzYWdlcyAtPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgTGVn
YWN5UmVjZWl2ZXIgewotICAgIFNldFZpc2libGVDb250ZW50c1JlY3QoV2ViQ29yZTo6RmxvYXRS
ZWN0IHZpc2libGVDb250ZW50c1JlY3QsIFdlYkNvcmU6OkZsb2F0UG9pbnQgdHJhamVjdG9yeVZl
Y3RvcnkpCi0gICAgUmVuZGVyTmV4dEZyYW1lKCkKLSAgICBDb21taXRTY3JvbGxPZmZzZXQodWlu
dDMyX3QgbGF5ZXJJRCwgV2ViQ29yZTo6SW50U2l6ZSBvZmZzZXQpCi19Ci0jZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>