<?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>5711</bug_id>
          
          <creation_ts>2005-11-11 11:35:09 -0800</creation_ts>
          <short_desc>Remove APPLE_CHANGES blocks and unused code from khtml</short_desc>
          <delta_ts>2005-11-20 17:17:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>23926</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-11 11:35:09 -0800</bug_when>
    <thetext>We&apos;ve forked from khtml... let&apos;s admit that to ourselves.

I think it&apos;s time to clean up the code and remove all the APPLE_CHANGES defines and blocks from khtml.

I&apos;ve attached a patch which does just that, as well as the scripts I used to make this happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23927</commentid>
    <comment_count>1</comment_count>
      <attachid>4667</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-11 11:36:10 -0800</bug_when>
    <thetext>Created attachment 4667
patch removing APPLE_CHANGES</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23928</commentid>
    <comment_count>2</comment_count>
      <attachid>4668</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-11 11:36:48 -0800</bug_when>
    <thetext>Created attachment 4668
cleanup script</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23929</commentid>
    <comment_count>3</comment_count>
      <attachid>4669</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-11 11:37:14 -0800</bug_when>
    <thetext>Created attachment 4669
A hacked version of the partial preprocessor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23930</commentid>
    <comment_count>4</comment_count>
      <attachid>4667</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-11 11:37:58 -0800</bug_when>
    <thetext>Comment on attachment 4667
patch removing APPLE_CHANGES

This patch removes all mention of APPLE_CHANGES from khtml, as well as removes
unused #if 0 blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23940</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-11-11 18:42:54 -0800</bug_when>
    <thetext>r=me assuming the results build and pass tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24311</commentid>
    <comment_count>6</comment_count>
      <attachid>4751</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-20 17:17:33 -0800</bug_when>
    <thetext>Created attachment 4751
A better hacked version of partpp.pl</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4667</attachid>
            <date>2005-11-11 11:36:10 -0800</date>
            <delta_ts>2005-11-11 18:43:08 -0800</delta_ts>
            <desc>patch removing APPLE_CHANGES</desc>
            <filename>cleanup.patch</filename>
            <type>text/plain</type>
            <size>422975</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sX3BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2todG1sX3BhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM1NwpkaWZm
IC1wIC11IC1yMS4zNTcga2h0bWxfcGFydC5jcHAKLS0tIGtodG1sX3BhcnQuY3BwCTcgTm92IDIw
MDUgMTk6NTk6MjEgLTAwMDAJMS4zNTcKKysrIGtodG1sX3BhcnQuY3BwCTExIE5vdiAyMDA1IDE5
OjM0OjAwIC0wMDAwCkBAIC0yNywxMSArMjcsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgImtodG1sX3BhcnQuaCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNkZWZpbmUgRElSRUNU
X0xJTktBR0VfVE9fRUNNQQogI2RlZmluZSBRVF9OT19DTElQQk9BUkQKICNkZWZpbmUgUVRfTk9f
RFJBR0FORERST1AKLSNlbmRpZgogCiAjaW5jbHVkZSAia2h0bWxfcGFnZWNhY2hlLmgiCiAKQEAg
LTEwOSw5ICsxMDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogI2luY2x1ZGUgImRv
bS9odG1sX2RvY3VtZW50LmgiCiAjZW5kaWYKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRl
IDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+Ci0jZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNl
IERPTTo6RXZlbnROYW1lczsKIApAQCAtMTkwLDI0ICsxODYsOCBAQCBLSFRNTFBhcnQ6OktIVE1M
UGFydCggUVdpZGdldCAqcGFyZW50V2lkCiAgICAgZCA9IDA7CiAgICAgS0hUTUxGYWN0b3J5Ojpy
ZWdpc3RlclBhcnQoIHRoaXMgKTsKICAgICBzZXRJbnN0YW5jZSggS0hUTUxGYWN0b3J5OjppbnN0
YW5jZSgpLCBwcm9mID09IEJyb3dzZXJWaWV3R1VJICYmICFwYXJlbnRQYXJ0KCkgKTsKLSNpZiAh
QVBQTEVfQ0hBTkdFUwotICAgIGluaXQoIG5ldyBLSFRNTFZpZXcoIHRoaXMsIHBhcmVudFdpZGdl
dCwgd2lkZ2V0bmFtZSApLCBwcm9mICk7Ci0jZW5kaWYKLX0KLQotI2lmICFBUFBMRV9DSEFOR0VT
Ci0KLUtIVE1MUGFydDo6S0hUTUxQYXJ0KCBLSFRNTFZpZXcgKnZpZXcsIFFPYmplY3QgKnBhcmVu
dCwgY29uc3QgY2hhciAqbmFtZSwgR1VJUHJvZmlsZSBwcm9mICkKLTogS1BhcnRzOjpSZWFkT25s
eVBhcnQoIHBhcmVudCwgbmFtZSApCi17Ci0gICAgZCA9IDA7Ci0gICAgS0hUTUxGYWN0b3J5Ojpy
ZWdpc3RlclBhcnQoIHRoaXMgKTsKLSAgICBzZXRJbnN0YW5jZSggS0hUTUxGYWN0b3J5OjppbnN0
YW5jZSgpLCBwcm9mID09IEJyb3dzZXJWaWV3R1VJICYmICFwYXJlbnRQYXJ0KCkgKTsKLSAgICBh
c3NlcnQoIHZpZXcgKTsKLSAgICBpbml0KCB2aWV3LCBwcm9mICk7CiB9CiAKLSNlbmRpZiAvLyBB
UFBMRV9DSEFOR0VTCiAKIHZvaWQgS0hUTUxQYXJ0Ojppbml0KCBLSFRNTFZpZXcgKnZpZXcsIEdV
SVByb2ZpbGUgcHJvZiApCiB7CkBAIC0yMjcsNzggKzIwNywxOSBAQCB2b2lkIEtIVE1MUGFydDo6
aW5pdCggS0hUTUxWaWV3ICp2aWV3LCBHCiAgIGQtPm1fdmlldyA9IHZpZXc7CiAgIHNldFdpZGdl
dCggZC0+bV92aWV3ICk7CiAgIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gIGQtPm1fZ3VpUHJvZmls
ZSA9IHByb2Y7Ci0jZW5kaWYKICAgZC0+bV9leHRlbnNpb24gPSBuZXcgS0hUTUxQYXJ0QnJvd3Nl
ckV4dGVuc2lvbiggdGhpcyApOwogICBkLT5tX2hvc3RFeHRlbnNpb24gPSBuZXcgS0hUTUxQYXJ0
QnJvd3Nlckhvc3RFeHRlbnNpb24oIHRoaXMgKTsKIAogICBkLT5tX2JTZWN1cml0eUluUXVlc3Rp
b24gPSBmYWxzZTsKICAgZC0+bV9iTW91c2VQcmVzc2VkID0gZmFsc2U7Ci0jaWYgIUFQUExFX0NI
QU5HRVMKLSAgZC0+bV9wYUxvYWRJbWFnZXMgPSAwOwotICBkLT5tX3BhVmlld0RvY3VtZW50ID0g
bmV3IEtBY3Rpb24oIGkxOG4oICJWaWV3IERvY3VtZW50IFNvdXJjZSIgKSwgMCwgdGhpcywgU0xP
VCggc2xvdFZpZXdEb2N1bWVudFNvdXJjZSgpICksIGFjdGlvbkNvbGxlY3Rpb24oKSwgInZpZXdE
b2N1bWVudFNvdXJjZSIgKTsKLSAgZC0+bV9wYVZpZXdGcmFtZSA9IG5ldyBLQWN0aW9uKCBpMThu
KCAiVmlldyBGcmFtZSBTb3VyY2UiICksIDAsIHRoaXMsIFNMT1QoIHNsb3RWaWV3RnJhbWVTb3Vy
Y2UoKSApLCBhY3Rpb25Db2xsZWN0aW9uKCksICJ2aWV3RnJhbWVTb3VyY2UiICk7Ci0gIGQtPm1f
cGFTYXZlQmFja2dyb3VuZCA9IG5ldyBLQWN0aW9uKCBpMThuKCAiU2F2ZSAmQmFja2dyb3VuZCBJ
bWFnZSBBcy4uLiIgKSwgMCwgdGhpcywgU0xPVCggc2xvdFNhdmVCYWNrZ3JvdW5kKCkgKSwgYWN0
aW9uQ29sbGVjdGlvbigpLCAic2F2ZUJhY2tncm91bmQiICk7Ci0gIGQtPm1fcGFTYXZlRG9jdW1l
bnQgPSBuZXcgS0FjdGlvbiggaTE4biggIiZTYXZlIEFzLi4uIiApLCBDVFJMK0tleV9TLCB0aGlz
LCBTTE9UKCBzbG90U2F2ZURvY3VtZW50KCkgKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAic2F2ZURv
Y3VtZW50IiApOwotICBpZiAoIHBhcmVudFBhcnQoKSApCi0gICAgICBkLT5tX3BhU2F2ZURvY3Vt
ZW50LT5zZXRTaG9ydGN1dCggS1Nob3J0Y3V0KCkgKTsgLy8gYXZvaWQgY2xhc2hlcwotICBkLT5t
X3BhU2F2ZUZyYW1lID0gbmV3IEtBY3Rpb24oIGkxOG4oICJTYXZlICZGcmFtZSBBcy4uLiIgKSwg
MCwgdGhpcywgU0xPVCggc2xvdFNhdmVGcmFtZSgpICksIGFjdGlvbkNvbGxlY3Rpb24oKSwgInNh
dmVGcmFtZSIgKTsKLSAgZC0+bV9wYVNlY3VyaXR5ID0gbmV3IEtBY3Rpb24oIGkxOG4oICJTZWN1
cml0eS4uLiIgKSwgImRlY3J5cHRlZCIsIDAsIHRoaXMsIFNMT1QoIHNsb3RTZWN1cml0eSgpICks
IGFjdGlvbkNvbGxlY3Rpb24oKSwgInNlY3VyaXR5IiApOwotICBkLT5tX3BhRGVidWdSZW5kZXJU
cmVlID0gbmV3IEtBY3Rpb24oICJwcmludCByZW5kZXJpbmcgdHJlZSB0byBzdGRvdXQiLCAwLCB0
aGlzLCBTTE9UKCBzbG90RGVidWdSZW5kZXJUcmVlKCkgKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAi
ZGVidWdSZW5kZXJUcmVlIiApOwotICBkLT5tX3BhRGVidWdET01UcmVlID0gbmV3IEtBY3Rpb24o
ICJwcmludCBET00gdHJlZSB0byBzdGRvdXQiLCAwLCB0aGlzLCBTTE9UKCBzbG90RGVidWdET01U
cmVlKCkgKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAiZGVidWdET01UcmVlIiApOwotCi0gIFFTdHJp
bmcgZm9vMSA9IGkxOG4oIlNob3cgSW1hZ2VzIik7Ci0gIFFTdHJpbmcgZm9vMiA9IGkxOG4oIlNo
b3cgQW5pbWF0ZWQgSW1hZ2VzIik7Ci0gIFFTdHJpbmcgZm9vMyA9IGkxOG4oIlN0b3AgQW5pbWF0
ZWQgSW1hZ2VzIik7Ci0KLSAgZC0+bV9wYVNldEVuY29kaW5nID0gbmV3IEtTZWxlY3RBY3Rpb24o
IGkxOG4oICJTZXQgJkVuY29kaW5nIiApLCAwLCB0aGlzLCBTTE9UKCBzbG90U2V0RW5jb2Rpbmco
KSApLCBhY3Rpb25Db2xsZWN0aW9uKCksICJzZXRFbmNvZGluZyIgKTsKLSAgUVN0cmluZ0xpc3Qg
ZW5jb2RpbmdzID0gS0dsb2JhbDo6Y2hhcnNldHMoKS0+ZGVzY3JpcHRpdmVFbmNvZGluZ05hbWVz
KCk7Ci0gIGVuY29kaW5ncy5wcmVwZW5kKCBpMThuKCAiQXV0byIgKSApOwotICBkLT5tX3BhU2V0
RW5jb2RpbmctPnNldEl0ZW1zKCBlbmNvZGluZ3MgKTsKLSAgZC0+bV9wYVNldEVuY29kaW5nLT5z
ZXRDdXJyZW50SXRlbSgwKTsKLQotICBkLT5tX3BhVXNlU3R5bGVzaGVldCA9IG5ldyBLU2VsZWN0
QWN0aW9uKCBpMThuKCAiJlVzZSBTdHlsZXNoZWV0IiksIDAsIHRoaXMsIFNMT1QoIHNsb3RVc2VT
dHlsZXNoZWV0KCkgKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAidXNlU3R5bGVzaGVldCIgKTsKLQot
ICBkLT5tX3BhSW5jWm9vbUZhY3RvciA9IG5ldyBLSFRNTFpvb21GYWN0b3JBY3Rpb24oIHRoaXMs
IHRydWUsIGkxOG4oICJJbmNyZWFzZSBGb250IFNpemVzIiApLCAidmlld21hZysiLCB0aGlzLCBT
TE9UKCBzbG90SW5jWm9vbSgpICksIGFjdGlvbkNvbGxlY3Rpb24oKSwgImluY0ZvbnRTaXplcyIg
KTsKLSAgZC0+bV9wYURlY1pvb21GYWN0b3IgPSBuZXcgS0hUTUxab29tRmFjdG9yQWN0aW9uKCB0
aGlzLCBmYWxzZSwgaTE4biggIkRlY3JlYXNlIEZvbnQgU2l6ZXMiICksICJ2aWV3bWFnLSIsIHRo
aXMsIFNMT1QoIHNsb3REZWNab29tKCkgKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAiZGVjRm9udFNp
emVzIiApOwotCi0gIGQtPm1fcGFGaW5kID0gS1N0ZEFjdGlvbjo6ZmluZCggdGhpcywgU0xPVCgg
c2xvdEZpbmQoKSApLCBhY3Rpb25Db2xsZWN0aW9uKCksICJmaW5kIiApOwotICBpZiAoIHBhcmVu
dFBhcnQoKSApCi0gICAgICBkLT5tX3BhRmluZC0+c2V0U2hvcnRjdXQoIEtTaG9ydGN1dCgpICk7
IC8vIGF2b2lkIGNsYXNoZXMKLQotICBkLT5tX3BhUHJpbnRGcmFtZSA9IG5ldyBLQWN0aW9uKCBp
MThuKCAiUHJpbnQgRnJhbWUiICksICJmcmFtZXByaW50IiwgMCwgdGhpcywgU0xPVCggc2xvdFBy
aW50RnJhbWUoKSApLCBhY3Rpb25Db2xsZWN0aW9uKCksICJwcmludEZyYW1lIiApOwotCi0gIGQt
Pm1fcGFTZWxlY3RBbGwgPSBLU3RkQWN0aW9uOjpzZWxlY3RBbGwoIHRoaXMsIFNMT1QoIHNsb3RT
ZWxlY3RBbGwoKSApLCBhY3Rpb25Db2xsZWN0aW9uKCksICJzZWxlY3RBbGwiICk7Ci0gIGlmICgg
cGFyZW50UGFydCgpICkKLSAgICAgIGQtPm1fcGFTZWxlY3RBbGwtPnNldFNob3J0Y3V0KCBLU2hv
cnRjdXQoKSApOyAvLyBhdm9pZCBjbGFzaGVzCi0jZW5kaWYKIAotI2lmICFBUFBMRV9DSEFOR0VT
Ci0gIC8vIHNldCB0aGUgZGVmYXVsdCBqYXZhKHNjcmlwdCkgZmxhZ3MgYWNjb3JkaW5nIHRvIHRo
ZSBjdXJyZW50IGhvc3QuCi0gIGQtPm1fYkpTY3JpcHRFbmFibGVkID0gS0hUTUxGYWN0b3J5Ojpk
ZWZhdWx0SFRNTFNldHRpbmdzKCktPmlzSmF2YVNjcmlwdEVuYWJsZWQoKTsKLSAgZC0+bV9iSlNj
cmlwdERlYnVnRW5hYmxlZCA9IEtIVE1MRmFjdG9yeTo6ZGVmYXVsdEhUTUxTZXR0aW5ncygpLT5p
c0phdmFTY3JpcHREZWJ1Z0VuYWJsZWQoKTsKLSAgZC0+bV9iSmF2YUVuYWJsZWQgPSBLSFRNTEZh
Y3Rvcnk6OmRlZmF1bHRIVE1MU2V0dGluZ3MoKS0+aXNKYXZhRW5hYmxlZCgpOwotICBkLT5tX2JQ
bHVnaW5zRW5hYmxlZCA9IEtIVE1MRmFjdG9yeTo6ZGVmYXVsdEhUTUxTZXR0aW5ncygpLT5pc1Bs
dWdpbnNFbmFibGVkKCk7Ci0jZWxzZQogICAvLyBUaGUgamF2YSwgamF2YXNjcmlwdCwgYW5kIHBs
dWdpbiBzZXR0aW5ncyB3aWxsIGJlIHNldCBhZnRlciB0aGUgc2V0dGluZ3MKICAgLy8gaGF2ZSBi
ZWVuIGluaXRpYWxpemVkLgogICBkLT5tX2JKU2NyaXB0RW5hYmxlZCA9IHRydWU7CiAgIGQtPm1f
YkpTY3JpcHREZWJ1Z0VuYWJsZWQgPSB0cnVlOwogICBkLT5tX2JKYXZhRW5hYmxlZCA9IHRydWU7
CiAgIGQtPm1fYlBsdWdpbnNFbmFibGVkID0gdHJ1ZTsKLSNlbmRpZgotCi0jaWYgIUFQUExFX0NI
QU5HRVMKLSAgY29ubmVjdCggdGhpcywgU0lHTkFMKCBjb21wbGV0ZWQoKSApLAotICAgICAgICAg
ICB0aGlzLCBTTE9UKCB1cGRhdGVBY3Rpb25zKCkgKSApOwotICBjb25uZWN0KCB0aGlzLCBTSUdO
QUwoIGNvbXBsZXRlZCggYm9vbCApICksCi0gICAgICAgICAgIHRoaXMsIFNMT1QoIHVwZGF0ZUFj
dGlvbnMoKSApICk7Ci0gIGNvbm5lY3QoIHRoaXMsIFNJR05BTCggc3RhcnRlZCggS0lPOjpKb2Ig
KiApICksCi0gICAgICAgICAgIHRoaXMsIFNMT1QoIHVwZGF0ZUFjdGlvbnMoKSApICk7CiAKLSAg
ZC0+bV9wb3B1cE1lbnVYTUwgPSBLWE1MR1VJRmFjdG9yeTo6cmVhZENvbmZpZ0ZpbGUoIGxvY2F0
ZSggImRhdGEiLCAia2h0bWwva2h0bWxfcG9wdXBtZW51LnJjIiwgS0hUTUxGYWN0b3J5OjppbnN0
YW5jZSgpICkgKTsKLSNlbmRpZgogCiAgIGNvbm5lY3QoIGtodG1sOjpDYWNoZTo6bG9hZGVyKCks
IFNJR05BTCggcmVxdWVzdFN0YXJ0ZWQoIGtodG1sOjpEb2NMb2FkZXIqLCBraHRtbDo6Q2FjaGVk
T2JqZWN0KiApICksCiAgICAgICAgICAgIHRoaXMsIFNMT1QoIHNsb3RMb2FkZXJSZXF1ZXN0U3Rh
cnRlZCgga2h0bWw6OkRvY0xvYWRlciosIGtodG1sOjpDYWNoZWRPYmplY3QqICkgKSApOwpAQCAt
MzA3LDM2ICsyMjgsMTcgQEAgdm9pZCBLSFRNTFBhcnQ6OmluaXQoIEtIVE1MVmlldyAqdmlldywg
RwogICBjb25uZWN0KCBraHRtbDo6Q2FjaGU6OmxvYWRlcigpLCBTSUdOQUwoIHJlcXVlc3RGYWls
ZWQoIGtodG1sOjpEb2NMb2FkZXIqLCBraHRtbDo6Q2FjaGVkT2JqZWN0ICopICksCiAgICAgICAg
ICAgIHRoaXMsIFNMT1QoIHNsb3RMb2FkZXJSZXF1ZXN0RG9uZSgga2h0bWw6OkRvY0xvYWRlcios
IGtodG1sOjpDYWNoZWRPYmplY3QgKikgKSApOwogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgZmlu
ZFRleHRCZWdpbigpOyAvL3Jlc2V0IGZpbmQgdmFyaWFibGVzCi0jZW5kaWYKIAogICBjb25uZWN0
KCAmZC0+bV9yZWRpcmVjdGlvblRpbWVyLCBTSUdOQUwoIHRpbWVvdXQoKSApLAogICAgICAgICAg
ICB0aGlzLCBTTE9UKCBzbG90UmVkaXJlY3QoKSApICk7CiAKICAgY29ubmVjdCgmZC0+bV9saWZl
U3VwcG9ydFRpbWVyLCBTSUdOQUwodGltZW91dCgpKSwgdGhpcywgU0xPVChzbG90RW5kTGlmZVN1
cHBvcnQoKSkpOwogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgZC0+bV9kY29wb2JqZWN0ID0gbmV3
IEtIVE1MUGFydElmYWNlKHRoaXMpOwotI2VuZGlmCiB9CiAKIEtIVE1MUGFydDo6fktIVE1MUGFy
dCgpCiB7CiAgIC8va2REZWJ1Zyg2MDUwKSA8PCAiS0hUTUxQYXJ0Ojp+S0hUTUxQYXJ0ICIgPDwg
dGhpcyA8PCBlbmRsOwotI2lmICFBUFBMRV9DSEFOR0VTCi0gIGlmICggZC0+bV9maW5kRGlhbG9n
ICkKLSAgICAgIGRpc2Nvbm5lY3QoIGQtPm1fZmluZERpYWxvZywgU0lHTkFMKCBkZXN0cm95ZWQo
KSApLAotICAgICAgICAgICAgICAgICAgdGhpcywgU0xPVCggc2xvdEZpbmREaWFsb2dEZXN0cm95
ZWQoKSApICk7Ci0KLSAgaWYgKCBkLT5tX21hbmFnZXIgKQotICB7Ci0gICAgZC0+bV9tYW5hZ2Vy
LT5zZXRBY3RpdmVQYXJ0KCAwICk7Ci0gICAgLy8gU2hvdWxkbid0IHdlIGRlbGV0ZSBkLT5tX21h
bmFnZXIgaGVyZSA/IChEYXZpZCkKLSAgICAvLyBObyBuZWVkIHRvLCBJIHdvdWxkIHNheS4gV2Ug
c3BlY2lmeSAidGhpcyIgYXMgcGFyZW50IHFvYmplY3QKLSAgICAvLyBpbiA6OnBhcnRNYW5hZ2Vy
KCkgKFNpbW9uKQotICB9Ci0jZW5kaWYKIAogICBzdG9wQXV0b1Njcm9sbCgpOwogICBjYW5jZWxS
ZWRpcmVjdGlvbigpOwpAQCAtMzYwLDkgKzI2Miw3IEBAIEtIVE1MUGFydDo6fktIVE1MUGFydCgp
CiAgICAgZC0+bV92aWV3LT5tX3BhcnQgPSAwOwogICB9CiAgIAotI2lmIEFQUExFX0NIQU5HRVMK
ICAgZGVsZXRlIGQtPm1faG9zdEV4dGVuc2lvbjsKLSNlbmRpZgogCiAgIGRlbGV0ZSBkOyBkID0g
MDsKICAgS0hUTUxGYWN0b3J5OjpkZXJlZ2lzdGVyUGFydCggdGhpcyApOwpAQCAtMzg5LDIzICsy
ODksMTMgQEAgYm9vbCBLSFRNTFBhcnQ6OnJlc3RvcmVVUkwoIGNvbnN0IEtVUkwgJgogICBkLT5t
X3dvcmtpbmdVUkwgPSB1cmw7CiAKICAgLy8gc2V0IHRoZSBqYXZhKHNjcmlwdCkgZmxhZ3MgYWNj
b3JkaW5nIHRvIHRoZSBjdXJyZW50IGhvc3QuCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgZC0+bV9i
SlNjcmlwdEVuYWJsZWQgPSBLSFRNTEZhY3Rvcnk6OmRlZmF1bHRIVE1MU2V0dGluZ3MoKS0+aXNK
YXZhU2NyaXB0RW5hYmxlZCh1cmwuaG9zdCgpKTsKLSAgZC0+bV9iSlNjcmlwdERlYnVnRW5hYmxl
ZCA9IEtIVE1MRmFjdG9yeTo6ZGVmYXVsdEhUTUxTZXR0aW5ncygpLT5pc0phdmFTY3JpcHREZWJ1
Z0VuYWJsZWQoKTsKLSAgZC0+bV9iSmF2YUVuYWJsZWQgPSBLSFRNTEZhY3Rvcnk6OmRlZmF1bHRI
VE1MU2V0dGluZ3MoKS0+aXNKYXZhRW5hYmxlZCh1cmwuaG9zdCgpKTsKLSAgZC0+bV9iUGx1Z2lu
c0VuYWJsZWQgPSBLSFRNTEZhY3Rvcnk6OmRlZmF1bHRIVE1MU2V0dGluZ3MoKS0+aXNQbHVnaW5z
RW5hYmxlZCh1cmwuaG9zdCgpKTsKLSNlbHNlCiAgIGQtPm1fYkpTY3JpcHRFbmFibGVkID0gZC0+
bV9zZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCh1cmwuaG9zdCgpKTsKICAgZC0+bV9iSlNj
cmlwdERlYnVnRW5hYmxlZCA9IGQtPm1fc2V0dGluZ3MtPmlzSmF2YVNjcmlwdERlYnVnRW5hYmxl
ZCgpOwogICBkLT5tX2JKYXZhRW5hYmxlZCA9IGQtPm1fc2V0dGluZ3MtPmlzSmF2YUVuYWJsZWQo
dXJsLmhvc3QoKSk7CiAgIGQtPm1fYlBsdWdpbnNFbmFibGVkID0gZC0+bV9zZXR0aW5ncy0+aXNQ
bHVnaW5zRW5hYmxlZCh1cmwuaG9zdCgpKTsKLSNlbmRpZgogCiAgIG1fdXJsID0gdXJsOwogCi0j
aWYgIUFQUExFX0NIQU5HRVMKLSAgS0hUTUxQYWdlQ2FjaGU6OnNlbGYoKS0+ZmV0Y2hEYXRhKCBk
LT5tX2NhY2hlSWQsIHRoaXMsIFNMT1Qoc2xvdFJlc3RvcmVEYXRhKGNvbnN0IFFCeXRlQXJyYXkg
JikpKTsKLSNlbmRpZgogCiAgIGVtaXQgc3RhcnRlZCggMEwgKTsKIApAQCAtNDEzLDExICszMDMs
NyBAQCBib29sIEtIVE1MUGFydDo6cmVzdG9yZVVSTCggY29uc3QgS1VSTCAmCiB9CiAKIAotI2lm
IEFQUExFX0NIQU5HRVMKIGJvb2wgS0hUTUxQYXJ0OjpkaWRPcGVuVVJMKGNvbnN0IEtVUkwgJnVy
bCkKLSNlbHNlCi1ib29sIEtIVE1MUGFydDo6b3BlblVSTCggY29uc3QgS1VSTCAmdXJsICkKLSNl
bmRpZgogewogICBrZERlYnVnKCA2MDUwICkgPDwgIktIVE1MUGFydCgiIDw8IHRoaXMgPDwgIik6
Om9wZW5VUkwgIiA8PCB1cmwudXJsKCkgPDwgZW5kbDsKIApAQCAtNDMyLDc0ICszMTgsMTEgQEAg
Ym9vbCBLSFRNTFBhcnQ6Om9wZW5VUkwoIGNvbnN0IEtVUkwgJnVybAogICAKICAgLy8gY2xlYXIg
bGFzdCBlZGl0IGNvbW1hbmQKICAgZC0+bV9sYXN0RWRpdENvbW1hbmQgPSBFZGl0Q29tbWFuZFB0
cigpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgS1dRKHRoaXMpLT5jbGVhclVuZG9SZWRvT3BlcmF0
aW9ucygpOwotI2VuZGlmCiAgIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gIC8vIGNoZWNrIHRvIHNl
ZSBpZiB0aGlzIGlzIGFuICJlcnJvcjovLyIgVVJMLiBUaGlzIGlzIGNhdXNlZCB3aGVuIGFuIGVy
cm9yCi0gIC8vIG9jY3VycyBiZWZvcmUgdGhpcyBwYXJ0IHdhcyBsb2FkZWQgKGUuZy4gS29ucVJ1
biksIGFuZCBpcyBwYXNzZWQgdG8KLSAgLy8ga2h0bWxwYXJ0IHNvIHRoYXQgaXQgY2FuIGRpc3Bs
YXkgdGhlIGVycm9yLgotICBpZiAoIHVybC5wcm90b2NvbCgpID09ICJlcnJvciIgJiYgdXJsLmhh
c1N1YlVSTCgpICkgewotICAgIGNsb3NlVVJMKCk7Ci0gICAgLyoqCi0gICAgICogVGhlIGZvcm1h
dCBvZiB0aGUgZXJyb3IgdXJsIGlzIHRoYXQgdHdvIHZhcmlhYmxlcyBhcmUgcGFzc2VkIGluIHRo
ZSBxdWVyeToKLSAgICAgKiBlcnJvciA9IGludCBraW8gZXJyb3IgY29kZSwgZXJyVGV4dCA9IFFT
dHJpbmcgZXJyb3IgdGV4dCBmcm9tIGtpbwotICAgICAqIGFuZCB0aGUgVVJMIHdoZXJlIHRoZSBl
cnJvciBoYXBwZW5lZCBpcyBwYXNzZWQgYXMgYSBzdWIgVVJMLgotICAgICAqLwotICAgIEtVUkw6
Okxpc3QgdXJscyA9IEtVUkw6OnNwbGl0KCB1cmwgKTsKLSAgICAvL2tkRGVidWcoKSA8PCAiSGFu
ZGxpbmcgZXJyb3IgVVJMLiBVUkwgY291bnQ6IiA8PCB1cmxzLmNvdW50KCkgPDwgZW5kbDsKLQot
ICAgIGlmICggdXJscy5jb3VudCgpID4gMSApIHsKLSAgICAgIEtVUkwgbWFpblVSTCA9IHVybHMu
Zmlyc3QoKTsKLSAgICAgIGludCBlcnJvciA9IG1haW5VUkwucXVlcnlJdGVtKCAiZXJyb3IiICku
dG9JbnQoKTsKLSAgICAgIC8vIGVycm9yPTAgaXNuJ3QgYSB2YWxpZCBlcnJvciBjb2RlLCBzbyAw
IG1lYW5zIGl0J3MgbWlzc2luZyBmcm9tIHRoZSBVUkwKLSAgICAgIGlmICggZXJyb3IgPT0gMCAp
IGVycm9yID0gS0lPOjpFUlJfVU5LTk9XTjsKLSAgICAgIFFTdHJpbmcgZXJyb3JUZXh0ID0gbWFp
blVSTC5xdWVyeUl0ZW0oICJlcnJUZXh0IiApOwotICAgICAgdXJscy5wb3BfZnJvbnQoKTsKLSAg
ICAgIGQtPm1fd29ya2luZ1VSTCA9IEtVUkw6OmpvaW4oIHVybHMgKTsKLSAgICAgIC8va2REZWJ1
ZygpIDw8ICJFbWl0dGluZyBmaXhlZCBVUkwgIiA8PCBkLT5tX3dvcmtpbmdVUkwucHJldHR5VVJM
KCkgPDwgZW5kbDsKLSAgICAgIGVtaXQgZC0+bV9leHRlbnNpb24tPnNldExvY2F0aW9uQmFyVVJM
KCBkLT5tX3dvcmtpbmdVUkwucHJldHR5VVJMKCkgKTsKLSAgICAgIGh0bWxFcnJvciggZXJyb3Is
IGVycm9yVGV4dCwgZC0+bV93b3JraW5nVVJMICk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gIH0KLSNlbmRpZiAvLyBBUFBMRV9DSEFOR0VTCiAKICAgS1BhcnRzOjpVUkxBcmdzIGFyZ3Mo
IGQtPm1fZXh0ZW5zaW9uLT51cmxBcmdzKCkgKTsKIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gIC8v
IGluIGNhc2Ugd2UgaGF2ZSBhKSBubyBmcmFtZXNldCAoZG9uJ3QgdGVzdCBtX2ZyYW1lcy5jb3Vu
dCgpLCBpZnJhbWVzIGdldCBpbiB0aGVyZSkKLSAgLy8gYikgdGhlIHVybCBpcyBpZGVudGljYWwg
d2l0aCB0aGUgY3VycmVudGx5Ci0gIC8vIGRpc3BsYXllZCBvbmUgKGV4Y2VwdCBmb3IgdGhlIGh0
bWxyZWYhKSAsIGMpIHRoZSB1cmwgcmVxdWVzdCBpcyBub3QgYSBQT1NUCi0gIC8vIG9wZXJhdGlv
biBhbmQgZCkgdGhlIGNhbGxlciBkaWQgbm90IHJlcXVlc3QgdG8gcmVsb2FkIHRoZSBwYWdlIHdl
IHRyeSB0bwotICAvLyBiZSBzbWFydCBhbmQgaW5zdGVhZCBvZiByZWxvYWRpbmcgdGhlIHdob2xl
IGRvY3VtZW50IHdlIGp1c3QganVtcCB0byB0aGUKLSAgLy8gcmVxdWVzdCBodG1sIGFuY2hvcgot
ICBpZiAoZC0+bV9kb2MpIHsKLSAgICAgIGJvb2wgaXNGcmFtZVNldCA9IGZhbHNlOwotICAgICAg
aWYgKCBkLT5tX2RvYy0+aXNIVE1MRG9jdW1lbnQoKSApIHsKLSAgICAgICAgICBIVE1MRG9jdW1l
bnRJbXBsKiBodG1sRG9jID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCo+KGQtPm1fZG9j
KTsKLSAgICAgICAgICBpc0ZyYW1lU2V0ID0gaHRtbERvYy0+Ym9keSgpICYmIChodG1sRG9jLT5i
b2R5KCktPmlkKCkgPT0gSURfRlJBTUVTRVQpOwotICAgICAgfQotICAgICAgaWYgKCAhaXNGcmFt
ZVNldCAmJgotICAgICAgICAgICB1cmxjbXAoIHVybC51cmwoKSwgbV91cmwudXJsKCksIHRydWUs
IHRydWUgKSAmJgotICAgICAgICAgICB1cmwuaGFzUmVmKCkgJiYgIWFyZ3MuZG9Qb3N0KCkgJiYg
IWFyZ3MucmVsb2FkICkKLSAgICAgIHsKLSAgICAgICAga2REZWJ1ZyggNjA1MCApIDw8ICJLSFRN
TFBhcnQ6Om9wZW5VUkwsIGp1bXBpbmcgdG8gYW5jaG9yLiBtX3VybCA9ICIgPDwgdXJsLnVybCgp
IDw8IGVuZGw7Ci0gICAgICAgIG1fdXJsID0gdXJsOwotICAgICAgICBlbWl0IHN0YXJ0ZWQoIDBM
ICk7Ci0KLSAgICAgICAgZ290b0FuY2hvcigpOwotCi0gICAgICAgIGQtPm1fYkNvbXBsZXRlID0g
dHJ1ZTsKLSAgICAgICAgZC0+bV9kb2MtPnNldFBhcnNpbmcoZmFsc2UpOwotCi0gICAgICAgIGtk
RGVidWcoIDYwNTAgKSA8PCAiY29tcGxldGVkLi4uIiA8PCBlbmRsOwotICAgICAgICBlbWl0IGNv
bXBsZXRlZCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgfQotI2VuZGlmIC8v
IEFQUExFX0NIQU5HRVMKIAogICBpZiAoIWQtPm1fcmVzdG9yZWQpCiAgIHsKQEAgLTUwNywxMSAr
MzMwLDYgQEAgYm9vbCBLSFRNTFBhcnQ6Om9wZW5VUkwoIGNvbnN0IEtVUkwgJnVybAogICAgIGNs
b3NlVVJMKCk7CiAgIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gIGFyZ3MubWV0YURhdGEoKS5p
bnNlcnQoIm1haW5fZnJhbWVfcmVxdWVzdCIsIHBhcmVudFBhcnQoKSA9PSAwID8gIlRSVUUiIDog
IkZBTFNFIiApOwotICBhcmdzLm1ldGFEYXRhKCkuaW5zZXJ0KCJzc2xfd2FzX2luX3VzZSIsIGQt
Pm1fc3NsX2luX3VzZSA/ICJUUlVFIiA6ICJGQUxTRSIgKTsKLSAgYXJncy5tZXRhRGF0YSgpLmlu
c2VydCgic3NsX2FjdGl2YXRlX3dhcm5pbmdzIiwgIlRSVUUiICk7Ci0jZW5kaWYKIAogICBpZiAo
ZC0+bV9yZXN0b3JlZCkKICAgICAgZC0+bV9jYWNoZVBvbGljeSA9IEtJTzo6Q0NfQ2FjaGU7CkBA
IC01MzUsMTAgKzM1Myw2IEBAIGJvb2wgS0hUTUxQYXJ0OjpvcGVuVVJMKCBjb25zdCBLVVJMICZ1
cmwKIAogICBjb25uZWN0KCBkLT5tX2pvYiwgU0lHTkFMKCByZXN1bHQoIEtJTzo6Sm9iICogKSAp
LAogICAgICAgICAgICBTTE9UKCBzbG90RmluaXNoZWQoIEtJTzo6Sm9iICogKSApICk7Ci0jaWYg
IUFQUExFX0NIQU5HRVMKLSAgY29ubmVjdCggZC0+bV9qb2IsIFNJR05BTCggZGF0YSggS0lPOjpK
b2IqLCBjb25zdCBRQnl0ZUFycmF5ICYpKSwKLSAgICAgICAgICAgU0xPVCggc2xvdERhdGEoIEtJ
Tzo6Sm9iKiwgY29uc3QgUUJ5dGVBcnJheSAmKSkpOwotI2VuZGlmCiAKICAgY29ubmVjdCggZC0+
bV9qb2IsIFNJR05BTChyZWRpcmVjdGlvbihLSU86OkpvYiosIGNvbnN0IEtVUkwmKSApLAogICAg
ICAgICAgICBTTE9UKCBzbG90UmVkaXJlY3Rpb24oS0lPOjpKb2IqLGNvbnN0IEtVUkwmKSApICk7
CkBAIC01NTUsMTUgKzM2OSw5IEBAIGJvb2wgS0hUTUxQYXJ0OjpvcGVuVVJMKCBjb25zdCBLVVJM
ICZ1cmwKICAgfQogCiAgIC8vIHNldCB0aGUgamF2YXNjcmlwdCBmbGFncyBhY2NvcmRpbmcgdG8g
dGhlIGN1cnJlbnQgdXJsCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgZC0+bV9iSlNjcmlwdERlYnVn
RW5hYmxlZCA9IEtIVE1MRmFjdG9yeTo6ZGVmYXVsdEhUTUxTZXR0aW5ncygpLT5pc0phdmFTY3Jp
cHREZWJ1Z0VuYWJsZWQoKTsKLSAgZC0+bV9iSmF2YUVuYWJsZWQgPSBLSFRNTEZhY3Rvcnk6OmRl
ZmF1bHRIVE1MU2V0dGluZ3MoKS0+aXNKYXZhRW5hYmxlZCh1cmwuaG9zdCgpKTsKLSAgZC0+bV9i
UGx1Z2luc0VuYWJsZWQgPSBLSFRNTEZhY3Rvcnk6OmRlZmF1bHRIVE1MU2V0dGluZ3MoKS0+aXNQ
bHVnaW5zRW5hYmxlZCh1cmwuaG9zdCgpKTsKLSNlbHNlCiAgIGQtPm1fYkpTY3JpcHREZWJ1Z0Vu
YWJsZWQgPSBkLT5tX3NldHRpbmdzLT5pc0phdmFTY3JpcHREZWJ1Z0VuYWJsZWQoKTsKICAgZC0+
bV9iSmF2YUVuYWJsZWQgPSBkLT5tX3NldHRpbmdzLT5pc0phdmFFbmFibGVkKHVybC5ob3N0KCkp
OwogICBkLT5tX2JQbHVnaW5zRW5hYmxlZCA9IGQtPm1fc2V0dGluZ3MtPmlzUGx1Z2luc0VuYWJs
ZWQodXJsLmhvc3QoKSk7Ci0jZW5kaWYKIAogICAvLyBpbml0aWFsaXppbmcgbV91cmwgdG8gdGhl
IG5ldyB1cmwgYnJlYWtzIHJlbGF0aXZlIGxpbmtzIHdoZW4gb3BlbmluZyBzdWNoIGEgbGluayBh
ZnRlciB0aGlzIGNhbGwgYW5kIF9iZWZvcmVfIGJlZ2luKCkgaXMgY2FsbGVkICh3aGVuIHRoZSBm
aXJzdAogICAvLyBkYXRhIGFycml2ZXMpIChTaW1vbikKQEAgLTYwOCw5ICs0MTYsNiBAQCB2b2lk
IEtIVE1MUGFydDo6c3RvcExvYWRpbmcoYm9vbCBzZW5kVW5sCiAgICAgCiAgIGlmICggZC0+bV9q
b2IgKQogICB7Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBLSFRNTFBhZ2VDYWNoZTo6c2VsZigp
LT5jYW5jZWxFbnRyeShkLT5tX2NhY2hlSWQpOwotI2VuZGlmCiAgICAgZC0+bV9qb2ItPmtpbGwo
KTsKICAgICBkLT5tX2pvYiA9IDA7CiAgIH0KQEAgLTYzNiw5ICs0NDEsNiBAQCB2b2lkIEtIVE1M
UGFydDo6c3RvcExvYWRpbmcoYm9vbCBzZW5kVW5sCiAgIGQtPm1fYkxvYWRFdmVudEVtaXR0ZWQg
PSB0cnVlOyAvLyBkb24ndCB3YW50IHRoYXQgb25lIGVpdGhlcgogICBkLT5tX2NhY2hlUG9saWN5
ID0gS0lPOjpDQ19WZXJpZnk7IC8vIFdoeSBoZXJlPwogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAg
S0hUTUxQYWdlQ2FjaGU6OnNlbGYoKS0+Y2FuY2VsRmV0Y2godGhpcyk7Ci0jZW5kaWYKICAgaWYg
KCBkLT5tX2RvYyAmJiBkLT5tX2RvYy0+cGFyc2luZygpICkKICAgewogICAgIGtkRGVidWcoIDYw
NTAgKSA8PCAiIHdhcyBzdGlsbCBwYXJzaW5nLi4uIGNhbGxpbmcgZW5kICIgPDwgZW5kbDsKQEAg
LTg4NCwxNSArNjg2LDcgQEAgS0phdmFBcHBsZXRDb250ZXh0ICpLSFRNTFBhcnQ6OmNyZWF0ZUph
dgogewogI2lmbmRlZiBRX1dTX1FXUwogICBpZiAoICFkLT5tX2phdmFDb250ZXh0ICkgewotI2lm
IEFQUExFX0NIQU5HRVMKICAgICAgIGQtPm1famF2YUNvbnRleHQgPSBuZXcgS0phdmFBcHBsZXRD
b250ZXh0KGQtPm1fZGNvcG9iamVjdCwgdGhpcyk7Ci0jZWxzZQotICAgICAgZC0+bV9qYXZhQ29u
dGV4dCA9IG5ldyBLSmF2YUFwcGxldENvbnRleHQoZC0+bV9kY29wb2JqZWN0KTsKLSAgICAgIGNv
bm5lY3QoIGQtPm1famF2YUNvbnRleHQsIFNJR05BTChzaG93U3RhdHVzKGNvbnN0IFFTdHJpbmcm
KSksCi0gICAgICAgICAgICAgICB0aGlzLCBTSUdOQUwoc2V0U3RhdHVzQmFyVGV4dChjb25zdCBR
U3RyaW5nJikpICk7Ci0gICAgICBjb25uZWN0KCBkLT5tX2phdmFDb250ZXh0LCBTSUdOQUwoc2hv
d0RvY3VtZW50KGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJikpLAotICAgICAgICAgICAg
ICAgdGhpcywgU0xPVChzbG90U2hvd0RvY3VtZW50KGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3Ry
aW5nJikpICk7Ci0jZW5kaWYKICAgfQogCiAgIHJldHVybiBkLT5tX2phdmFDb250ZXh0OwpAQCAt
OTE0LDY4ICs3MDgsNiBAQCBib29sIEtIVE1MUGFydDo6cGx1Z2luc0VuYWJsZWQoKSBjb25zdAog
ICByZXR1cm4gZC0+bV9iUGx1Z2luc0VuYWJsZWQ7CiB9CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwot
Ci12b2lkIEtIVE1MUGFydDo6c2xvdFNob3dEb2N1bWVudCggY29uc3QgUVN0cmluZyAmdXJsLCBj
b25zdCBRU3RyaW5nICZ0YXJnZXQgKQotewotICAvLyB0aGlzIGlzIG1vc3RseSBjb3BpZWQgZnJv
bSBLSFRNTFBhcnQ6OnNsb3RDaGlsZFVSTFJlcXVlc3QuIFRoZSBiZXR0ZXIgYXBwcm9hY2gKLSAg
Ly8gd291bGQgYmUgdG8gcHV0IHRob3NlIGZ1bmN0aW9ucyBpbnRvIGEgc2luZ2xlIG9uZS4KLSAg
a2h0bWw6OkNoaWxkRnJhbWUgKmNoaWxkID0gMDsKLSAgS1BhcnRzOjpVUkxBcmdzIGFyZ3M7Ci0g
IGFyZ3MuZnJhbWVOYW1lID0gdGFyZ2V0OwotCi0gIFFTdHJpbmcgZnJhbWVOYW1lID0gYXJncy5m
cmFtZU5hbWUubG93ZXIoKTsKLSAgaWYgKCAhZnJhbWVOYW1lLmlzRW1wdHkoKSApCi0gIHsKLSAg
ICBpZiAoIGZyYW1lTmFtZSA9PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiX3RvcCIgKSApCi0gICAg
ewotICAgICAgZW1pdCBkLT5tX2V4dGVuc2lvbi0+b3BlblVSTFJlcXVlc3QoIHVybCwgYXJncyAp
OwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBlbHNlIGlmICggZnJhbWVOYW1lID09IFFTdHJp
bmc6OmZyb21MYXRpbjEoICJfYmxhbmsiICkgKQotICAgIHsKLSAgICAgIGVtaXQgZC0+bV9leHRl
bnNpb24tPmNyZWF0ZU5ld1dpbmRvdyggdXJsLCBhcmdzICk7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotICAgIGVsc2UgaWYgKCBmcmFtZU5hbWUgPT0gUVN0cmluZzo6ZnJvbUxhdGluMSggIl9wYXJl
bnQiICkgKQotICAgIHsKLSAgICAgIEtQYXJ0czo6VVJMQXJncyBuZXdBcmdzKCBhcmdzICk7Ci0g
ICAgICBuZXdBcmdzLmZyYW1lTmFtZSA9IFFTdHJpbmc6Om51bGw7Ci0KLSAgICAgIGVtaXQgZC0+
bV9leHRlbnNpb24tPm9wZW5VUkxSZXF1ZXN0KCB1cmwsIG5ld0FyZ3MgKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoIGZyYW1lTmFtZSAhPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCAiX3NlbGYiICkgKQotICAgIHsKLSAgICAgIGtodG1sOjpDaGlsZEZyYW1lICpfZnJhbWUgPSBy
ZWN1cnNpdmVGcmFtZVJlcXVlc3QoIHVybCwgYXJncyApOwotCi0gICAgICBpZiAoICFfZnJhbWUg
KQotICAgICAgewotICAgICAgICBlbWl0IGQtPm1fZXh0ZW5zaW9uLT5vcGVuVVJMUmVxdWVzdCgg
dXJsLCBhcmdzICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgY2hpbGQgPSBf
ZnJhbWU7Ci0gICAgfQotICB9Ci0KLSAgLy8gVE9ETzogaGFuZGxlIGNoaWxkIHRhcmdldCBjb3Jy
ZWN0bHkhIGN1cnJlbnRseSB0aGUgc2NyaXB0IGFyZSBhbHdheXMgZXhlY3V0ZWQgZnVyIHRoZSBw
YXJlbnQKLSAgaWYgKCB1cmwuZmluZCggUVN0cmluZzo6ZnJvbUxhdGluMSggImphdmFzY3JpcHQ6
IiApLCAwLCBmYWxzZSApID09IDAgKSB7Ci0gICAgICBleGVjdXRlU2NyaXB0KCBLVVJMOjpkZWNv
ZGVfc3RyaW5nKCB1cmwucmlnaHQoIHVybC5sZW5ndGgoKSAtIDExKSApICk7Ci0gICAgICByZXR1
cm47Ci0gIH0KLQotICBpZiAoIGNoaWxkICkgewotICAgICAgcmVxdWVzdE9iamVjdCggY2hpbGQs
IEtVUkwodXJsKSwgYXJncyApOwotICB9ICBlbHNlIGlmICggZnJhbWVOYW1lPT1RU3RyaW5nOjpm
cm9tTGF0aW4xKCJfc2VsZiIpICkgLy8gdGhpcyBpcyBmb3IgZW1iZWRkZWQgb2JqZWN0cyAodmlh
IDxvYmplY3Q+KSB3aGljaCB3YW50IHRvIHJlcGxhY2UgdGhlIGN1cnJlbnQgZG9jdW1lbnQKLSAg
ewotICAgICAgS1BhcnRzOjpVUkxBcmdzIG5ld0FyZ3MoIGFyZ3MgKTsKLSAgICAgIG5ld0FyZ3Mu
ZnJhbWVOYW1lID0gUVN0cmluZzo6bnVsbDsKLSAgICAgIGVtaXQgZC0+bV9leHRlbnNpb24tPm9w
ZW5VUkxSZXF1ZXN0KCBLVVJMKHVybCksIG5ld0FyZ3MgKTsKLSAgfQotfQotCi0jZW5kaWYgLy8g
QVBQTEVfQ0hBTkdFUwogCiB2b2lkIEtIVE1MUGFydDo6c2xvdERlYnVnRE9NVHJlZSgpCiB7CkBA
IC05OTksMjIgKzczMSw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpzZXRBdXRvbG9hZEltYWdlcyggYm9v
bCAKICAgaWYgKCBkLT5tX2RvYyApCiAgICAgZC0+bV9kb2MtPmRvY0xvYWRlcigpLT5zZXRBdXRv
bG9hZEltYWdlcyggZW5hYmxlICk7CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICB1bnBsdWdBY3Rp
b25MaXN0KCAibG9hZEltYWdlcyIgKTsKLQotICBpZiAoIGVuYWJsZSApIHsKLSAgICBkZWxldGUg
ZC0+bV9wYUxvYWRJbWFnZXM7Ci0gICAgZC0+bV9wYUxvYWRJbWFnZXMgPSAwOwotICB9Ci0gIGVs
c2UgaWYgKCAhZC0+bV9wYUxvYWRJbWFnZXMgKQotICAgIGQtPm1fcGFMb2FkSW1hZ2VzID0gbmV3
IEtBY3Rpb24oIGkxOG4oICJEaXNwbGF5IEltYWdlcyBvbiBQYWdlIiApLCAiaW1hZ2VzX2Rpc3Bs
YXkiLCAwLCB0aGlzLCBTTE9UKCBzbG90TG9hZEltYWdlcygpICksIGFjdGlvbkNvbGxlY3Rpb24o
KSwgImxvYWRJbWFnZXMiICk7Ci0KLSAgaWYgKCBkLT5tX3BhTG9hZEltYWdlcyApIHsKLSAgICBR
UHRyTGlzdDxLQWN0aW9uPiBsc3Q7Ci0gICAgbHN0LmFwcGVuZCggZC0+bV9wYUxvYWRJbWFnZXMg
KTsKLSAgICBwbHVnQWN0aW9uTGlzdCggImxvYWRJbWFnZXMiLCBsc3QgKTsKLSAgfQotI2VuZGlm
CiB9CiAKIGJvb2wgS0hUTUxQYXJ0OjphdXRvbG9hZEltYWdlcygpIGNvbnN0CkBAIC0xMDMzLDMy
ICs3NDksNiBAQCB2b2lkIEtIVE1MUGFydDo6Y2xlYXIoKQogCiAgIGQtPm1fYkNsZWFyaW5nID0g
dHJ1ZTsKIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gIHsKLSAgICBDb25zdEZyYW1lSXQgaXQgPSBk
LT5tX2ZyYW1lcy5iZWdpbigpOwotICAgIENvbnN0RnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1lcy5l
bmQoKTsKLSAgICBmb3IoOyBpdCAhPSBlbmQ7ICsraXQgKQotICAgIHsKLSAgICAgIC8vIFN0b3Ag
SFRNTFJ1biBqb2JzIGZvciBmcmFtZXMKLSAgICAgIGlmICggKCppdCkubV9ydW4gKQotICAgICAg
ICAoKml0KS5tX3J1bi0+YWJvcnQoKTsKLSAgICB9Ci0gIH0KLQotICB7Ci0gICAgUVZhbHVlTGlz
dDxraHRtbDo6Q2hpbGRGcmFtZT46OkNvbnN0SXRlcmF0b3IgaXQgPSBkLT5tX29iamVjdHMuYmVn
aW4oKTsKLSAgICBRVmFsdWVMaXN0PGtodG1sOjpDaGlsZEZyYW1lPjo6Q29uc3RJdGVyYXRvciBl
bmQgPSBkLT5tX29iamVjdHMuZW5kKCk7Ci0gICAgZm9yKDsgaXQgIT0gZW5kOyArK2l0ICkKLSAg
ICB7Ci0gICAgICAvLyBTdG9wIEhUTUxSdW4gam9icyBmb3Igb2JqZWN0cwotICAgICAgaWYgKCAo
Kml0KS5tX3J1biApCi0gICAgICAgICgqaXQpLm1fcnVuLT5hYm9ydCgpOwotICAgIH0KLSAgfQot
Ci0KLSAgZmluZFRleHRCZWdpbigpOyAvLyByZXNldHMgZC0+bV9maW5kTm9kZSBhbmQgZC0+bV9m
aW5kUG9zCi0jZW5kaWYKIAogICBkLT5tX21vdXNlUHJlc3NOb2RlLnJlc2V0KCk7CiAKQEAgLTEw
OTEsOSArNzgxLDYgQEAgdm9pZCBLSFRNTFBhcnQ6OmNsZWFyKCkKICAgICAgIGlmICggKCppdCku
bV9wYXJ0ICkKICAgICAgIHsKICAgICAgICAgZGlzY29ubmVjdENoaWxkKCYqaXQpOwotI2lmICFB
UFBMRV9DSEFOR0VTCi0gICAgICAgIHBhcnRNYW5hZ2VyKCktPnJlbW92ZVBhcnQoICgqaXQpLm1f
cGFydCApOwotI2VuZGlmCiAgICAgICAgICgqaXQpLm1fcGFydC0+ZGVyZWYoKTsKICAgICAgIH0K
ICAgICB9CkBAIC0xMTA3LDkgKzc5NCw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpjbGVhcigpCiAgICAg
ewogICAgICAgaWYgKCAoKml0KS5tX3BhcnQgKQogICAgICAgewotI2lmICFBUFBMRV9DSEFOR0VT
Ci0gICAgICAgIHBhcnRNYW5hZ2VyKCktPnJlbW92ZVBhcnQoICgqaXQpLm1fcGFydCApOwotI2Vu
ZGlmCiAgICAgICAgICgqaXQpLm1fcGFydC0+ZGVyZWYoKTsKICAgICAgIH0KICAgICB9CkBAIC0x
MTM4LDExICs4MjIsNiBAQCB2b2lkIEtIVE1MUGFydDo6Y2xlYXIoKQogICBjb25uZWN0KCBrYXBw
LT5jbGlwYm9hcmQoKSwgU0lHTkFMKCBzZWxlY3Rpb25DaGFuZ2VkKCkpLCBTTE9UKCBzbG90Q2xl
YXJTZWxlY3Rpb24oKSkpOwogI2VuZGlmCiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICBkLT5tX3Rv
dGFsT2JqZWN0Q291bnQgPSAwOwotICBkLT5tX2xvYWRlZE9iamVjdHMgPSAwOwotICBkLT5tX2pv
YlBlcmNlbnQgPSAwOwotI2VuZGlmCiAKICAgaWYgKCAhZC0+bV9oYXZlRW5jb2RpbmcgKQogICAg
IGQtPm1fZW5jb2RpbmcgPSBRU3RyaW5nOjpudWxsOwpAQCAtMTE5NSw0OSArODc0LDkgQEAgdm9p
ZCBLSFRNTFBhcnQ6OnJlY2VpdmVkRmlyc3REYXRhKCkKICAgICBkLT5tX2RvYy0+ZG9jTG9hZGVy
KCktPnNldENhY2hlUG9saWN5KGQtPm1fY2FjaGVQb2xpY3kpOwogICAgIGQtPm1fd29ya2luZ1VS
TCA9IEtVUkwoKTsKIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgZC0+bV9jYWNoZUlkID0gS0hU
TUxQYWdlQ2FjaGU6OnNlbGYoKS0+Y3JlYXRlQ2FjaGVFbnRyeSgpOwotI2VuZGlmCiAKICAgICAv
LyBXaGVuIHRoZSBmaXJzdCBkYXRhIGFycml2ZXMsIHRoZSBtZXRhZGF0YSBoYXMganVzdCBiZWVu
IG1hZGUgYXZhaWxhYmxlCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIFFTdHJpbmcgcURhdGE7Ci0j
ZWxzZQotICAgIGQtPm1fYlNlY3VyaXR5SW5RdWVzdGlvbiA9IGZhbHNlOwotICAgIGQtPm1fc3Ns
X2luX3VzZSA9IChkLT5tX2pvYi0+cXVlcnlNZXRhRGF0YSgic3NsX2luX3VzZSIpID09ICJUUlVF
Iik7Ci0gICAga2REZWJ1Zyg2MDUwKSA8PCAiU1NMIGluIHVzZT8gIiA8PCBkLT5tX2pvYi0+cXVl
cnlNZXRhRGF0YSgic3NsX2luX3VzZSIpIDw8IGVuZGw7Ci0KLSAgICB7Ci0gICAgS0hUTUxQYXJ0
ICpwID0gcGFyZW50UGFydCgpOwotICAgIGlmIChwICYmIHAtPmQtPm1fc3NsX2luX3VzZSAhPSBk
LT5tX3NzbF9pbl91c2UpIHsKLQl3aGlsZSAocC0+cGFyZW50UGFydCgpKSBwID0gcC0+cGFyZW50
UGFydCgpOwotCi0JcC0+ZC0+bV9wYVNlY3VyaXR5LT5zZXRJY29uKCAiaGFsZmVuY3J5cHRlZCIg
KTsKLSAgICAgICAgcC0+ZC0+bV9iU2VjdXJpdHlJblF1ZXN0aW9uID0gdHJ1ZTsKLQlrZERlYnVn
KDYwNTApIDw8ICJwYXJlbnQgc2V0SWNvbiBoYWxmIGRvbmUuIiA8PCBlbmRsOwotICAgIH0KLSAg
ICB9Ci0KLSAgICBkLT5tX3BhU2VjdXJpdHktPnNldEljb24oIGQtPm1fc3NsX2luX3VzZSA/ICJl
bmNyeXB0ZWQiIDogImRlY3J5cHRlZCIgKTsKLSAgICBrZERlYnVnKDYwNTApIDw8ICJzZXRJY29u
ICIgPDwgKCBkLT5tX3NzbF9pbl91c2UgPyAiZW5jcnlwdGVkIiA6ICJkZWNyeXB0ZWQiICkgPDwg
IiBkb25lLiIgPDwgZW5kbDsKLQotICAgIC8vIFNob3VsZG4ndCBhbGwgb2YgdGhpcyBiZSBkb25l
IG9ubHkgaWYgc3NsX2luX3VzZSA9PSB0cnVlID8gKERGKQotCi0gICAgZC0+bV9zc2xfcGVlcl9j
ZXJ0aWZpY2F0ZSA9IGQtPm1fam9iLT5xdWVyeU1ldGFEYXRhKCJzc2xfcGVlcl9jZXJ0aWZpY2F0
ZSIpOwotICAgIGQtPm1fc3NsX3BlZXJfY2hhaW4gPSBkLT5tX2pvYi0+cXVlcnlNZXRhRGF0YSgi
c3NsX3BlZXJfY2hhaW4iKTsKLSAgICBkLT5tX3NzbF9wZWVyX2lwID0gZC0+bV9qb2ItPnF1ZXJ5
TWV0YURhdGEoInNzbF9wZWVyX2lwIik7Ci0gICAgZC0+bV9zc2xfY2lwaGVyID0gZC0+bV9qb2It
PnF1ZXJ5TWV0YURhdGEoInNzbF9jaXBoZXIiKTsKLSAgICBkLT5tX3NzbF9jaXBoZXJfZGVzYyA9
IGQtPm1fam9iLT5xdWVyeU1ldGFEYXRhKCJzc2xfY2lwaGVyX2Rlc2MiKTsKLSAgICBkLT5tX3Nz
bF9jaXBoZXJfdmVyc2lvbiA9IGQtPm1fam9iLT5xdWVyeU1ldGFEYXRhKCJzc2xfY2lwaGVyX3Zl
cnNpb24iKTsKLSAgICBkLT5tX3NzbF9jaXBoZXJfdXNlZF9iaXRzID0gZC0+bV9qb2ItPnF1ZXJ5
TWV0YURhdGEoInNzbF9jaXBoZXJfdXNlZF9iaXRzIik7Ci0gICAgZC0+bV9zc2xfY2lwaGVyX2Jp
dHMgPSBkLT5tX2pvYi0+cXVlcnlNZXRhRGF0YSgic3NsX2NpcGhlcl9iaXRzIik7Ci0gICAgZC0+
bV9zc2xfY2VydF9zdGF0ZSA9IGQtPm1fam9iLT5xdWVyeU1ldGFEYXRhKCJzc2xfY2VydF9zdGF0
ZSIpOwotCi0gICAgLy8gQ2hlY2sgZm9yIGNoYXJzZXQgbWV0YS1kYXRhCi0gICAgUVN0cmluZyBx
RGF0YSA9IGQtPm1fam9iLT5xdWVyeU1ldGFEYXRhKCJjaGFyc2V0Iik7Ci0gICAgaWYgKCAhcURh
dGEuaXNFbXB0eSgpICYmICFkLT5tX2hhdmVFbmNvZGluZyApIC8vIG9ubHkgdXNlIGluZm9ybWF0
aW9uIGlmIHRoZSB1c2VyIGRpZG4ndCBvdmVycmlkZSB0aGUgc2V0dGluZ3MKLSAgICAgICBkLT5t
X2VuY29kaW5nID0gcURhdGE7Ci0jZW5kaWYgLy8gQVBQTEVfQ0hBTkdFUwogCiAgICAgLy8gU3Vw
cG9ydCBmb3IgaHR0cC1yZWZyZXNoCiAgICAgcURhdGEgPSBkLT5tX2pvYi0+cXVlcnlNZXRhRGF0
YSgiaHR0cC1yZWZyZXNoIik7CkBAIC0xMjUyLDEyICs4OTEsOCBAQCB2b2lkIEtIVE1MUGFydDo6
cmVjZWl2ZWRGaXJzdERhdGEoKQogICAgICAgaWYoIHBvcyA9PSAtMSApCiAgICAgICB7CiAgICAg
ICAgIGRlbGF5ID0gcURhdGEuc3RyaXBXaGl0ZVNwYWNlKCkudG9Eb3VibGUoKTsKLSNpZiBBUFBM
RV9DSEFOR0VTCiAgICAgICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoZSBy
ZWZyZXNoIHRpbWVvdXQgPiAxIHNlY29uZAogICAgICAgICBzY2hlZHVsZVJlZGlyZWN0aW9uKCBk
ZWxheSwgbV91cmwudXJsKCksIGRlbGF5IDw9IDEpOwotI2Vsc2UKLSAgICAgICAgc2NoZWR1bGVS
ZWRpcmVjdGlvbiggZGVsYXksIG1fdXJsLnVybCgpKTsKLSNlbmRpZgogICAgICAgfQogICAgICAg
ZWxzZQogICAgICAgewpAQCAtMTI4MywxMiArOTE4LDggQEAgdm9pZCBLSFRNTFBhcnQ6OnJlY2Vp
dmVkRmlyc3REYXRhKCkKICAgICAgICAgICAgICAgICBlbmRfcG9zID0gaW5kZXg7CiAgICAgICAg
ICAgfQogICAgICAgICB9Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAvLyBXZSB3YW50IGEg
bmV3IGhpc3RvcnkgaXRlbSBpZiB0aGUgcmVmcmVzaCB0aW1lb3V0ID4gMSBzZWNvbmQKICAgICAg
ICAgc2NoZWR1bGVSZWRpcmVjdGlvbiggZGVsYXksIGQtPm1fZG9jLT5jb21wbGV0ZVVSTCggcURh
dGEubWlkKCBwb3MsIGVuZF9wb3MgKSApLCBkZWxheSA8PSAxKTsKLSNlbHNlCi0gICAgICAgIHNj
aGVkdWxlUmVkaXJlY3Rpb24oIGRlbGF5LCBkLT5tX2RvYy0+Y29tcGxldGVVUkwoIHFEYXRhLm1p
ZCggcG9zLCBlbmRfcG9zICkgKSk7Ci0jZW5kaWYKICAgICAgIH0KICAgICAgIGQtPm1fYkhUVFBS
ZWZyZXNoID0gdHJ1ZTsKICAgICB9CkBAIC0xMjk4LDE5MyArOTI5LDE4IEBAIHZvaWQgS0hUTUxQ
YXJ0OjpyZWNlaXZlZEZpcnN0RGF0YSgpCiAgICAgLy9rZERlYnVnKCkgPDwgIktIVE1MUGFydDo6
c2xvdERhdGEgbWV0YWRhdGEgbW9kaWZpZWQ6ICIgPDwgZC0+bV9sYXN0TW9kaWZpZWQgPDwgZW5k
bDsKIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0KLXZvaWQgS0hUTUxQYXJ0OjpzbG90RGF0YSgg
S0lPOjpKb2IqIGtpb19qb2IsIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEgKQotewotICBhc3NlcnQg
KCBkLT5tX2pvYiA9PSBraW9fam9iICk7Ci0KLSAgLy9rZERlYnVnKCA2MDUwICkgPDwgInNsb3RE
YXRhOiAiIDw8IGRhdGEuc2l6ZSgpIDw8IGVuZGw7Ci0gIC8vIFRoZSBmaXJzdCBkYXRhID8KLSAg
aWYgKCAhZC0+bV93b3JraW5nVVJMLmlzRW1wdHkoKSApCi0gICAgcmVjZWl2ZWRGaXJzdERhdGEo
ICk7Ci0KLSAgS0hUTUxQYWdlQ2FjaGU6OnNlbGYoKS0+YWRkRGF0YShkLT5tX2NhY2hlSWQsIGRh
dGEpOwotICB3cml0ZSggZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpICk7Ci19Ci0KLXZvaWQgS0hU
TUxQYXJ0OjpzbG90UmVzdG9yZURhdGEoY29uc3QgUUJ5dGVBcnJheSAmZGF0YSApCi17Ci0gIC8v
IFRoZSBmaXJzdCBkYXRhID8KLSAgaWYgKCAhZC0+bV93b3JraW5nVVJMLmlzRW1wdHkoKSApCi0g
IHsKLSAgICAgbG9uZyBzYXZlQ2FjaGVJZCA9IGQtPm1fY2FjaGVJZDsKLSAgICAgYmVnaW4oIGQt
Pm1fd29ya2luZ1VSTCwgZC0+bV9leHRlbnNpb24tPnVybEFyZ3MoKS54T2Zmc2V0LCBkLT5tX2V4
dGVuc2lvbi0+dXJsQXJncygpLnlPZmZzZXQgKTsKLSAgICAgZC0+bV9jYWNoZUlkID0gc2F2ZUNh
Y2hlSWQ7Ci0gICAgIGQtPm1fd29ya2luZ1VSTCA9IEtVUkwoKTsKLSAgfQotCi0gIC8va2REZWJ1
ZyggNjA1MCApIDw8ICJzbG90UmVzdG9yZURhdGE6ICIgPDwgZGF0YS5zaXplKCkgPDwgZW5kbDsK
LSAgd3JpdGUoIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSApOwotCi0gIGlmIChkYXRhLnNpemUo
KSA9PSAwKQotICB7Ci0gICAgICAvL2tkRGVidWcoIDYwNTAgKSA8PCAic2xvdFJlc3RvcmVEYXRh
OiA8PGVuZCBvZiBkYXRhPj4iIDw8IGVuZGw7Ci0gICAgIC8vIEVuZCBvZiBkYXRhLgotICAgIGlm
IChkLT5tX2RvYyAmJiBkLT5tX2RvYy0+cGFyc2luZygpKQotICAgICAgICBlbmQoKTsgLy93aWxs
IGVtaXQgY29tcGxldGVkKCkKLSAgfQotfQotCi12b2lkIEtIVE1MUGFydDo6c2hvd0Vycm9yKCBL
SU86OkpvYiogam9iICkKLXsKLSAga2REZWJ1ZygpIDw8ICJLSFRNTFBhcnQ6OnNob3dFcnJvciBk
LT5tX2JQYXJzaW5nPSIgPDwgKGQtPm1fZG9jICYmIGQtPm1fZG9jLT5wYXJzaW5nKCkpIDw8ICIg
ZC0+bV9iQ29tcGxldGU9IiA8PCBkLT5tX2JDb21wbGV0ZQotICAgICAgICAgICAgPDwgIiBkLT5t
X2JDbGVhcmVkPSIgPDwgZC0+bV9iQ2xlYXJlZCA8PCBlbmRsOwotCi0gIGlmIChqb2ItPmVycm9y
KCkgPT0gS0lPOjpFUlJfTk9fQ09OVEVOVCkKLQlyZXR1cm47Ci0KLSAgaWYgKCAoZC0+bV9kb2Mg
JiYgZC0+bV9kb2MtPnBhcnNpbmcoKSkgfHwgZC0+bV93b3JraW5nVVJMLmlzRW1wdHkoKSApIC8v
IGlmIHdlIGdvdCBhbnkgZGF0YSBhbHJlYWR5Ci0gICAgam9iLT5zaG93RXJyb3JEaWFsb2coIC8q
ZC0+bV92aWV3Ki8gKTsKLSAgZWxzZQotICB7Ci0gICAgaHRtbEVycm9yKCBqb2ItPmVycm9yKCks
IGpvYi0+ZXJyb3JUZXh0KCksIGQtPm1fd29ya2luZ1VSTCApOwotICB9Ci19Ci0KLS8vIFRoaXMg
aXMgYSBwcm90ZWN0ZWQgbWV0aG9kLCBwbGFjZWQgaGVyZSBiZWNhdXNlIG9mIGl0J3MgcmVsZXZh
bmNlIHRvIHNob3dFcnJvcgotdm9pZCBLSFRNTFBhcnQ6Omh0bWxFcnJvciggaW50IGVycm9yQ29k
ZSwgY29uc3QgUVN0cmluZyYgdGV4dCwgY29uc3QgS1VSTCYgcmVxVXJsICkKLXsKLSAga2REZWJ1
Zyg2MDUwKSA8PCAiS0hUTUxQYXJ0OjpodG1sRXJyb3IgZXJyb3JDb2RlPSIgPDwgZXJyb3JDb2Rl
IDw8ICIgdGV4dD0iIDw8IHRleHQgPDwgZW5kbDsKLSAgLy8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBl
eGVjdXRpbmcgYW55IGVtYmVkZGVkIEpTCi0gIGJvb2wgYkpTRk8gPSBkLT5tX2JKU2NyaXB0Rm9y
Y2U7Ci0gIGJvb2wgYkpTT08gPSBkLT5tX2JKU2NyaXB0T3ZlcnJpZGU7Ci0gIGQtPm1fYkpTY3Jp
cHRGb3JjZSA9IGZhbHNlOwotICBkLT5tX2JKU2NyaXB0T3ZlcnJpZGUgPSB0cnVlOwotICBiZWdp
bigpOwotICBRU3RyaW5nIGVyclRleHQgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiPEhUTUw+PEhF
QUQ+PFRJVExFPiIgKTsKLSAgZXJyVGV4dCArPSBpMThuKCAiRXJyb3Igd2hpbGUgbG9hZGluZyAl
MSIgKS5hcmcoIHJlcVVybC5odG1sVVJMKCkgKTsKLSAgZXJyVGV4dCArPSBRU3RyaW5nOjpmcm9t
TGF0aW4xKCAiPC9USVRMRT48L0hFQUQ+PEJPRFk+PFA+IiApOwotICBlcnJUZXh0ICs9IGkxOG4o
ICJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGxvYWRpbmcgPEI+JTE8L0I+OiIgKS5hcmcoIHJlcVVy
bC5odG1sVVJMKCkgKTsKLSAgZXJyVGV4dCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiPC9QPjxQ
PiIgKTsKLSAgUVN0cmluZyBraW9FcnJTdHJpbmcgPSBLSU86OmJ1aWxkRXJyb3JTdHJpbmcoIGVy
cm9yQ29kZSwgdGV4dCApOwotCi0gIGtpb0VyclN0cmluZy5yZXBsYWNlKFFSZWdFeHAoIiYiKSwg
UVN0cmluZygiJmFtcDsiKSk7Ci0gIGtpb0VyclN0cmluZy5yZXBsYWNlKFFSZWdFeHAoIjwiKSwg
UVN0cmluZygiJmx0OyIpKTsKLSAga2lvRXJyU3RyaW5nLnJlcGxhY2UoUVJlZ0V4cCgiPiIpLCBR
U3RyaW5nKCImZ3Q7IikpOwotCi0gIC8vIEluIGNhc2UgdGhlIGVycm9yIHN0cmluZyBoYXMgJ1xu
JyBpbiBpdCwgcmVwbGFjZSB3aXRoIDxCUi8+Ci0gIGtpb0VyclN0cmluZy5yZXBsYWNlKCBRUmVn
RXhwKCJcbiIpLCAiPEJSLz4iICk7Ci0KLSAgZXJyVGV4dCArPSBraW9FcnJTdHJpbmc7Ci0gIGVy
clRleHQgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSggIjwvUD48L0JPRFk+PC9IVE1MPiIgKTsKLSAg
d3JpdGUoZXJyVGV4dCk7Ci0gIGVuZCgpOwotCi0gIGQtPm1fYkpTY3JpcHRGb3JjZSA9IGJKU0ZP
OwotICBkLT5tX2JKU2NyaXB0T3ZlcnJpZGUgPSBiSlNPTzsKLQotICAvLyBtYWtlIHRoZSB3b3Jr
aW5nIHVybCB0aGUgY3VycmVudCB1cmwsIHNvIHRoYXQgcmVsb2FkIHdvcmtzIGFuZAotICAvLyBl
bWl0IHRoZSBwcm9ncmVzcyBzaWduYWxzIHRvIGFkdmFuY2Ugb25lIHN0ZXAgaW4gdGhlIGhpc3Rv
cnkKLSAgLy8gKHNvIHRoYXQgJ2JhY2snIHdvcmtzKQotICBtX3VybCA9IHJlcVVybDsgLy8gc2Ft
ZSBhcyBkLT5tX3dvcmtpbmdVUkwKLSAgZC0+bV93b3JraW5nVVJMID0gS1VSTCgpOwotICBlbWl0
IHN0YXJ0ZWQoIDAgKTsKLSAgZW1pdCBjb21wbGV0ZWQoKTsKLSAgcmV0dXJuOwotICAvLyBmb2xs
b3dpbmcgZGlzYWJsZWQgdW50aWwgMy4xCi0KLSAgUVN0cmluZyBlcnJvck5hbWUsIHRlY2hOYW1l
LCBkZXNjcmlwdGlvbjsKLSAgUVN0cmluZ0xpc3QgY2F1c2VzLCBzb2x1dGlvbnM7Ci0KLSAgUUJ5
dGVBcnJheSByYXcgPSBLSU86OnJhd0Vycm9yRGV0YWlsKCBlcnJvckNvZGUsIHRleHQsICZyZXFV
cmwgKTsKLSAgUURhdGFTdHJlYW0gc3RyZWFtKHJhdywgSU9fUmVhZE9ubHkpOwotCi0gIHN0cmVh
bSA+PiBlcnJvck5hbWUgPj4gdGVjaE5hbWUgPj4gZGVzY3JpcHRpb24gPj4gY2F1c2VzID4+IHNv
bHV0aW9uczsKLQotICBRU3RyaW5nIHVybCwgcHJvdG9jb2wsIGRhdGV0aW1lOwotICB1cmwgPSBy
ZXFVcmwucHJldHR5VVJMKCk7Ci0gIHByb3RvY29sID0gcmVxVXJsLnByb3RvY29sKCk7Ci0gIGRh
dGV0aW1lID0gS0dsb2JhbDo6bG9jYWxlKCktPmZvcm1hdERhdGVUaW1lKCBRRGF0ZVRpbWU6OmN1
cnJlbnREYXRlVGltZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFsc2UgKTsKLQotICBRU3RyaW5nIGRvYyA9IFFTdHJpbmc6OmZyb21MYXRpbjEo
ICI8aHRtbD48aGVhZD48dGl0bGU+IiApOwotICBkb2MgKz0gaTE4biggIkVycm9yOiAiICk7Ci0g
IGRvYyArPSBlcnJvck5hbWU7Ci0gIGRvYyArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiIC0gJTE8
L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+IiApLmFyZyggdXJsICk7Ci0gIGRvYyArPSBpMThuKCAi
VGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gY291bGQgbm90IGJlIGNvbXBsZXRlZCIgKTsKLSAgZG9j
ICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoICI8L2gxPjxoMj4iICk7Ci0gIGRvYyArPSBlcnJvck5h
bWU7Ci0gIGRvYyArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiPC9oMj4iICk7Ci0gIGlmICggdGVj
aE5hbWUgIT0gUVN0cmluZzo6bnVsbCApIHsKLSAgICBkb2MgKz0gUVN0cmluZzo6ZnJvbUxhdGlu
MSggIjxoMj4iICk7Ci0gICAgZG9jICs9IGkxOG4oICJUZWNobmljYWwgUmVhc29uOiAiICk7Ci0g
ICAgZG9jICs9IHRlY2hOYW1lOwotICAgIGRvYyArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiPC9o
Mj4iICk7Ci0gIH0KLSAgZG9jICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoICI8aDM+IiApOwotICBk
b2MgKz0gaTE4biggIkRldGFpbHMgb2YgdGhlIFJlcXVlc3Q6IiApOwotICBkb2MgKz0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSggIjwvaDM+PHVsPjxsaT4iICk7Ci0gIGRvYyArPSBpMThuKCAiVVJMOiAl
MSIgKS5hcmcoIHVybCApOwotICBkb2MgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSggIjwvbGk+PGxp
PiIgKTsKLSAgaWYgKCBwcm90b2NvbCAhPSBRU3RyaW5nOjpudWxsICkgewotICAgIC8vIHVuY29t
bWVudCBmb3IgMy4xLi4uIGkxOG4gY2hhbmdlCi0gICAgLy8gZG9jICs9IGkxOG4oICJQcm90b2Nv
bDogJTEiICkuYXJnKCBwcm90b2NvbCApLmFyZyggcHJvdG9jb2wgKTsKLSAgICBkb2MgKz0gUVN0
cmluZzo6ZnJvbUxhdGluMSggIjwvbGk+PGxpPiIgKTsKLSAgfQotICBkb2MgKz0gaTE4biggIkRh
dGUgYW5kIFRpbWU6ICUxIiApLmFyZyggZGF0ZXRpbWUgKTsKLSAgZG9jICs9IFFTdHJpbmc6OmZy
b21MYXRpbjEoICI8L2xpPjxsaT4iICk7Ci0gIGRvYyArPSBpMThuKCAiQWRkaXRpb25hbCBJbmZv
cm1hdGlvbjogJTEiICkuYXJnKCB0ZXh0ICk7Ci0gIGRvYyArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCAiPC9saT48L3VsPjxoMz4iICk7Ci0gIGRvYyArPSBpMThuKCAiRGVzY3JpcHRpb246IiApOwot
ICBkb2MgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSggIjwvaDM+PHA+IiApOwotICBkb2MgKz0gZGVz
Y3JpcHRpb247Ci0gIGRvYyArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiPC9wPiIgKTsKLSAgaWYg
KCBjYXVzZXMuY291bnQoKSApIHsKLSAgICBkb2MgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSggIjxo
Mz4iICk7Ci0gICAgZG9jICs9IGkxOG4oICJQb3NzaWJsZSBDYXVzZXM6IiApOwotICAgIGRvYyAr
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiPC9oMz48dWw+PGxpPiIgKTsKLSAgICBkb2MgKz0gY2F1
c2VzLmpvaW4oICI8L2xpPjxsaT4iICk7Ci0gICAgZG9jICs9IFFTdHJpbmc6OmZyb21MYXRpbjEo
ICI8L2xpPjwvdWw+IiApOwotICB9Ci0gIGlmICggc29sdXRpb25zLmNvdW50KCkgKSB7Ci0gICAg
ZG9jICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoICI8aDM+IiApOwotICAgIGRvYyArPSBpMThuKCAi
UG9zc2libGUgU29sdXRpb25zOiIgKTsKLSAgICBkb2MgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgg
IjwvaDM+PHVsPjxsaT4iICk7Ci0gICAgZG9jICs9IHNvbHV0aW9ucy5qb2luKCAiPC9saT48bGk+
IiApOwotICAgIGRvYyArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiPC9saT48L3VsPiIgKTsKLSAg
fQotICBkb2MgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSggIjwvYm9keT48L2h0bWw+IiApOwotCi0g
IHdyaXRlKCBkb2MgKTsKLSAgZW5kKCk7Ci19Ci0KLSNlbmRpZgogCiB2b2lkIEtIVE1MUGFydDo6
c2xvdEZpbmlzaGVkKCBLSU86OkpvYiAqIGpvYiApCiB7CiAgIGlmIChqb2ItPmVycm9yKCkpCiAg
IHsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIEtIVE1MUGFnZUNhY2hlOjpzZWxmKCktPmNhbmNl
bEVudHJ5KGQtPm1fY2FjaGVJZCk7Ci0jZW5kaWYKICAgICBkLT5tX2pvYiA9IDBMOwotI2lmICFB
UFBMRV9DSEFOR0VTCi0gICAgZW1pdCBjYW5jZWxlZCggam9iLT5lcnJvclN0cmluZygpICk7Ci0j
ZW5kaWYKICAgICAvLyBUT0RPOiB3aGF0IGVsc2UgPwogICAgIGNoZWNrQ29tcGxldGVkKCk7Ci0j
aWYgIUFQUExFX0NIQU5HRVMKLSAgICBzaG93RXJyb3IoIGpvYiApOwotI2VuZGlmCiAgICAgcmV0
dXJuOwogICB9CiAgIC8va2REZWJ1ZyggNjA1MCApIDw8ICJzbG90RmluaXNoZWQiIDw8IGVuZGw7
CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICBLSFRNTFBhZ2VDYWNoZTo6c2VsZigpLT5lbmREYXRh
KGQtPm1fY2FjaGVJZCk7Ci0jZW5kaWYKIAogICBpZiAoIGQtPm1fZG9jICYmIGQtPm1fZG9jLT5k
b2NMb2FkZXIoKS0+ZXhwaXJlRGF0ZSgpICYmIG1fdXJsLnByb3RvY29sKCkubG93ZXIoKS5zdGFy
dHNXaXRoKCJodHRwIikpCiAgICAgICBLSU86Omh0dHBfdXBkYXRlX2NhY2hlKG1fdXJsLCBmYWxz
ZSwgZC0+bV9kb2MtPmRvY0xvYWRlcigpLT5leHBpcmVEYXRlKCkpOwpAQCAtMTQ5Niw3ICs5NTIs
NiBAQCB2b2lkIEtIVE1MUGFydDo6c2xvdEZpbmlzaGVkKCBLSU86OkpvYiAqCiAgICAgICBlbmQo
KTsgLy93aWxsIGVtaXQgY29tcGxldGVkKCkKIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKIHZvaWQg
S0hUTUxQYXJ0OjpjaGlsZEJlZ2luKCkKIHsKICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgd2hl
biB0aGUgY2hpbGQgaXMgY3JlYXRlZCBzbyBhcyB0byBhdm9pZCB0aGUgYm9ndXMgc3RhdGUgb2Yg
dGhlIHBhcmVudCdzCkBAIC0xNTA2LDUyICs5NjEsMzEgQEAgdm9pZCBLSFRNTFBhcnQ6OmNoaWxk
QmVnaW4oKQogICAgIC8vIGl0cyBjaGlsZC0+bV9iQ29tcGxldGUuCiAgICAgZC0+bV9iQ29tcGxl
dGUgPSBmYWxzZTsKIH0KLSNlbmRpZgogCiB2b2lkIEtIVE1MUGFydDo6YmVnaW4oIGNvbnN0IEtV
UkwgJnVybCwgaW50IHhPZmZzZXQsIGludCB5T2Zmc2V0ICkKIHsKLSNpZiBBUFBMRV9DSEFOR0VT
CiAgIC8vIElmIHdlIGFyZW4ndCBsb2FkaW5nIGFuIGFjdHVhbCBVUkwsIHRoZW4gd2UgbmVlZCB0
byBtYWtlIHN1cmUKICAgLy8gdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IGFuIGVtcHR5IGRvY3VtZW50
LiBjcmVhdGVFbXB0eURvY3VtZW50IHdpbGwKICAgLy8gZG8gdGhhdCBpZiB3ZSBkb24ndCBoYXZl
IGEgZG9jdW1lbnQgYWxyZWFkeS4KICAgaWYgKGQtPm1fd29ya2luZ1VSTC5pc0VtcHR5KCkpIHsK
ICAgICBLV1EodGhpcyktPmNyZWF0ZUVtcHR5RG9jdW1lbnQoKTsKICAgfQotI2VuZGlmCiAKICAg
Y2xlYXIoKTsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgS1dRKHRoaXMpLT5wYXJ0Q2xlYXJlZElu
QmVnaW4oKTsKLSNlbmRpZgogCiAgIC8vIE9ubHkgZG8gdGhpcyBhZnRlciBjbGVhcmluZyB0aGUg
cGFydCwgc28gdGhhdCBKYXZhU2NyaXB0IGNhbgogICAvLyBjbGVhbiB1cCBwcm9wZXJseSBpZiBp
dCB3YXMgb24gZm9yIHRoZSBsYXN0IGxvYWQuCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgZC0+bV9i
SlNjcmlwdEVuYWJsZWQgPSBLSFRNTEZhY3Rvcnk6OmRlZmF1bHRIVE1MU2V0dGluZ3MoKS0+aXNK
YXZhU2NyaXB0RW5hYmxlZCh1cmwuaG9zdCgpKTsKLSNlbHNlCiAgIGQtPm1fYkpTY3JpcHRFbmFi
bGVkID0gZC0+bV9zZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCh1cmwuaG9zdCgpKTsKLSNl
bmRpZgogCiAgIGQtPm1fYkNsZWFyZWQgPSBmYWxzZTsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICBk
LT5tX2NhY2hlSWQgPSAwOwotI2VuZGlmCiAgIGQtPm1fYkNvbXBsZXRlID0gZmFsc2U7CiAgIGQt
Pm1fYkxvYWRFdmVudEVtaXR0ZWQgPSBmYWxzZTsKICAgZC0+bV9iTG9hZGluZ01haW5SZXNvdXJj
ZSA9IHRydWU7CiAKICAgaWYodXJsLmlzVmFsaWQoKSkgewotI2lmIEFQUExFX0NIQU5HRVMKICAg
ICAgIEtIVE1MRmFjdG9yeTo6dkxpbmtzKCktPmluc2VydCggS1dRKHRoaXMpLT5yZXF1ZXN0ZWRV
UkxTdHJpbmcoKSApOwotI2Vsc2UKLSAgICAgIFFTdHJpbmcgdXJsU3RyaW5nID0gdXJsLnVybCgp
OwotICAgICAgS0hUTUxGYWN0b3J5Ojp2TGlua3MoKS0+aW5zZXJ0KCB1cmxTdHJpbmcgKTsKLSAg
ICAgIFFTdHJpbmcgdXJsU3RyaW5nMiA9IHVybC5wcmV0dHlVUkwoKTsKLSAgICAgIGlmICggdXJs
U3RyaW5nICE9IHVybFN0cmluZzIgKSB7Ci0gICAgICAgICAgS0hUTUxGYWN0b3J5Ojp2TGlua3Mo
KS0+aW5zZXJ0KCB1cmxTdHJpbmcyICk7Ci0gICAgICB9Ci0jZW5kaWYKICAgfQogCiAgIC8vICMj
IwpAQCAtMTU3MCwyNyArMTAwNCwxMSBAQCB2b2lkIEtIVE1MUGFydDo6YmVnaW4oIGNvbnN0IEtV
UkwgJnVybCwgCiAgIG1fdXJsID0gdXJsOwogICBLVVJMIGJhc2V1cmw7CiAKLSNpZiBBUFBMRV9D
SEFOR0VTCiAgIC8vIFdlIGRvbid0IG5lZWQgS0RFIGNoYWluZWQgVVJJIGhhbmRsaW5nIG9yIHdp
bmRvdyBjYXB0aW9uIHNldHRpbmcKICAgaWYgKCAhbV91cmwuaXNFbXB0eSgpICkKICAgewogICAg
IGJhc2V1cmwgPSBtX3VybDsKICAgfQotI2Vsc2UKLSAgaWYgKCAhbV91cmwuaXNFbXB0eSgpICkK
LSAgewotICAgIEtVUkw6Okxpc3QgbHN0ID0gS1VSTDo6c3BsaXQoIG1fdXJsICk7Ci0gICAgaWYg
KCAhbHN0LmlzRW1wdHkoKSApCi0gICAgICBiYXNldXJsID0gKmxzdC5iZWdpbigpOwotCi0gICAg
S1VSTCB0aXRsZSggYmFzZXVybCApOwotICAgIHRpdGxlLnNldFJlZiggUVN0cmluZzo6bnVsbCAp
OwotICAgIHRpdGxlLnNldFF1ZXJ5KCBRU3RyaW5nOjpudWxsICk7Ci0gICAgZW1pdCBzZXRXaW5k
b3dDYXB0aW9uKCB0aXRsZS51cmwoKSApOwotICB9Ci0gIGVsc2UKLSAgICBlbWl0IHNldFdpbmRv
d0NhcHRpb24oIGkxOG4oICJubyB0aXRsZSIsICIqIFVua25vd24gKiIgKSApOwotI2VuZGlmCiAK
ICAgaWYgKGFyZ3Muc2VydmljZVR5cGUgPT0gInRleHQveG1sIiB8fCBhcmdzLnNlcnZpY2VUeXBl
ID09ICJhcHBsaWNhdGlvbi94bWwiIHx8IGFyZ3Muc2VydmljZVR5cGUgPT0gImFwcGxpY2F0aW9u
L3hodG1sK3htbCIgfHwKICAgICAgIGFyZ3Muc2VydmljZVR5cGUgPT0gInRleHQveHNsIiB8fCBh
cmdzLnNlcnZpY2VUeXBlID09ICJhcHBsaWNhdGlvbi9yc3MreG1sIiB8fCBhcmdzLnNlcnZpY2VU
eXBlID09ICJhcHBsaWNhdGlvbi9hdG9tK3htbCIpCkBAIC0xNjA5LDQxICsxMDI3LDIwIEBAIHZv
aWQgS0hUTUxQYXJ0OjpiZWdpbiggY29uc3QgS1VSTCAmdXJsLCAKICAgLy8gV2UgcHJlZmVyIG1f
YmFzZVVSTCBvdmVyIG1fdXJsIGJlY2F1c2UgbV91cmwgY2hhbmdlcyB3aGVuIHdlIGFyZQogICAv
LyBhYm91dCB0byBsb2FkIGEgbmV3IHBhZ2UuCiAgIGQtPm1fZG9jLT5zZXRCYXNlVVJMKCBiYXNl
dXJsLnVybCgpICk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICBpZiAoZC0+bV9kZWNvZGVyKQogICAg
IGQtPm1fZG9jLT5zZXREZWNvZGVyKGQtPm1fZGVjb2Rlcik7Ci0jZW5kaWYKLSNpZiAhQVBQTEVf
Q0hBTkdFUwotICBkLT5tX2RvYy0+ZG9jTG9hZGVyKCktPnNldFNob3dBbmltYXRpb25zKCBLSFRN
TEZhY3Rvcnk6OmRlZmF1bHRIVE1MU2V0dGluZ3MoKS0+c2hvd0FuaW1hdGlvbnMoKSApOwotI2Vs
c2UKICAgZC0+bV9kb2MtPmRvY0xvYWRlcigpLT5zZXRTaG93QW5pbWF0aW9ucyggZC0+bV9zZXR0
aW5ncy0+c2hvd0FuaW1hdGlvbnMoKSApOwotI2VuZGlmCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAg
IEtXUSh0aGlzKS0+dXBkYXRlUG9saWN5QmFzZVVSTCgpOwotI2VuZGlmCiAKLSNpZiAhQVBQTEVf
Q0hBTkdFUwotICBkLT5tX3BhVXNlU3R5bGVzaGVldC0+c2V0SXRlbXMoUVN0cmluZ0xpc3QoKSk7
Ci0gIGQtPm1fcGFVc2VTdHlsZXNoZWV0LT5zZXRFbmFibGVkKCBmYWxzZSApOwotI2VuZGlmCiAK
LSNpZiAhQVBQTEVfQ0hBTkdFUwotICBzZXRBdXRvbG9hZEltYWdlcyggS0hUTUxGYWN0b3J5Ojpk
ZWZhdWx0SFRNTFNldHRpbmdzKCktPmF1dG9Mb2FkSW1hZ2VzKCkgKTsKLSAgUVN0cmluZyB1c2Vy
U3R5bGVTaGVldCA9IEtIVE1MRmFjdG9yeTo6ZGVmYXVsdEhUTUxTZXR0aW5ncygpLT51c2VyU3R5
bGVTaGVldCgpOwotI2Vsc2UKICAgc2V0QXV0b2xvYWRJbWFnZXMoIGQtPm1fc2V0dGluZ3MtPmF1
dG9Mb2FkSW1hZ2VzKCkgKTsKICAgUVN0cmluZyB1c2VyU3R5bGVTaGVldCA9IGQtPm1fc2V0dGlu
Z3MtPnVzZXJTdHlsZVNoZWV0KCk7Ci0jZW5kaWYKIAogICBpZiAoICF1c2VyU3R5bGVTaGVldC5p
c0VtcHR5KCkgKQogICAgIHNldFVzZXJTdHlsZVNoZWV0KCBLVVJMKCB1c2VyU3R5bGVTaGVldCAp
ICk7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgIEtXUSh0aGlzKS0+cmVzdG9yZURvY3VtZW50U3Rh
dGUoKTsKLSNlbHNlCi0gIGQtPm1fZG9jLT5zZXRSZXN0b3JlU3RhdGUoYXJncy5kb2NTdGF0ZSk7
Ci0jZW5kaWYKIAogICBkLT5tX2RvYy0+aW1wbGljaXRPcGVuKCk7CiAgIC8vIGNsZWFyIHdpZGdl
dApAQCAtMTY1MSw5ICsxMDQ4LDYgQEAgdm9pZCBLSFRNTFBhcnQ6OmJlZ2luKCBjb25zdCBLVVJM
ICZ1cmwsIAogICAgIGQtPm1fdmlldy0+cmVzaXplQ29udGVudHMoIDAsIDAgKTsKICAgY29ubmVj
dChkLT5tX2RvYyxTSUdOQUwoZmluaXNoZWRQYXJzaW5nKCkpLHRoaXMsU0xPVChzbG90RmluaXNo
ZWRQYXJzaW5nKCkpKTsKIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gIGVtaXQgZC0+bV9leHRlbnNp
b24tPmVuYWJsZUFjdGlvbiggInByaW50IiwgdHJ1ZSApOwotI2VuZGlmCiB9CiAKIHZvaWQgS0hU
TUxQYXJ0Ojp3cml0ZSggY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuICkKQEAgLTE2NjksMTAgKzEw
NjMsOCBAQCB2b2lkIEtIVE1MUGFydDo6d3JpdGUoIGNvbnN0IGNoYXIgKnN0ciwgCiAgICAgICAg
ICAgICAgICAgPyBwYXJlbnRQYXJ0KCktPmQtPm1fZGVjb2Rlci0+ZW5jb2RpbmcoKSA6IHNldHRp
bmdzKCktPmVuY29kaW5nKCkubGF0aW4xKCk7CiAgICAgICAgICAgICBkLT5tX2RlY29kZXItPnNl
dEVuY29kaW5nKGRlZmF1bHRFbmNvZGluZywgRGVjb2Rlcjo6RGVmYXVsdEVuY29kaW5nKTsKICAg
ICAgICAgfQotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgaWYgKGQtPm1fZG9jKQogICAgICAg
ICAgICAgZC0+bV9kb2MtPnNldERlY29kZXIoZC0+bV9kZWNvZGVyKTsKLSNlbmRpZgogICAgIH0K
ICAgaWYgKCBsZW4gPT0gMCApCiAgICAgcmV0dXJuOwpAQCAtMTc2MCwxNSArMTE1Miw2IEBAIHZv
aWQgS0hUTUxQYXJ0OjpzdG9wKCkKICAgICB9CiB9CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotCi12
b2lkIEtIVE1MUGFydDo6cGFpbnQoUVBhaW50ZXIgKnAsIGNvbnN0IFFSZWN0ICZyYywgaW50IHlP
ZmYsIGJvb2wgKm1vcmUpCi17Ci0gICAgaWYgKCFkLT5tX3ZpZXcpIHJldHVybjsKLSAgICBkLT5t
X3ZpZXctPnBhaW50KHAsIHJjLCB5T2ZmLCBtb3JlKTsKLX0KLQotI2VuZGlmCiAKIHZvaWQgS0hU
TUxQYXJ0OjpzdG9wQW5pbWF0aW9ucygpCiB7CkBAIC0xNzk2LDExICsxMTc5LDcgQEAgdm9pZCBL
SFRNTFBhcnQ6OmdvdG9BbmNob3IoKQogICAgICAgICAvLyBEZWNvZGluZyBoZXJlIGhhcyB0byBt
YXRjaCBlbmNvZGluZyBpbiBjb21wbGV0ZVVSTCwgd2hpY2ggbWVhbnMgaXQgaGFzIHRvIHVzZSB0
aGUKICAgICAgICAgLy8gcGFnZSdzIGVuY29kaW5nIHJhdGhlciB0aGFuIFVURi04LgogICAgICAg
ICBpZiAoZC0+bV9kZWNvZGVyKQotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgICAgICAgICBnb3Rv
QW5jaG9yKEtVUkw6OmRlY29kZV9zdHJpbmcocmVmLCBkLT5tX2RlY29kZXItPmNvZGVjKCktPm1p
YkVudW0oKSkpOwotI2Vsc2UKICAgICAgICAgICAgIGdvdG9BbmNob3IoS1VSTDo6ZGVjb2RlX3N0
cmluZyhyZWYsIGQtPm1fZGVjb2Rlci0+Y29kZWMoKSkpOwotI2VuZGlmCiAgICAgfQogfQogCkBA
IC0xODI1LDM0ICsxMjA0LDEwIEBAIHZvaWQgS0hUTUxQYXJ0OjpzbG90RmluaXNoZWRQYXJzaW5n
KCkKIAogdm9pZCBLSFRNTFBhcnQ6OnNsb3RMb2FkZXJSZXF1ZXN0U3RhcnRlZCgga2h0bWw6OkRv
Y0xvYWRlciogZGwsIGtodG1sOjpDYWNoZWRPYmplY3QgKm9iaiApCiB7Ci0jaWYgIUFQUExFX0NI
QU5HRVMKLSAgaWYgKCBvYmogJiYgb2JqLT50eXBlKCkgPT0ga2h0bWw6OkNhY2hlZE9iamVjdDo6
SW1hZ2UgJiYgZC0+bV9kb2MgJiYgZC0+bV9kb2MtPmRvY0xvYWRlcigpID09IGRsICkgewotICAg
IEtIVE1MUGFydCogcCA9IHRoaXM7Ci0gICAgd2hpbGUgKCBwICkgewotICAgICAgS0hUTUxQYXJ0
KiBvcCA9IHA7Ci0gICAgICBwLT5kLT5tX3RvdGFsT2JqZWN0Q291bnQrKzsKLSAgICAgIHAgPSBw
LT5wYXJlbnRQYXJ0KCk7Ci0gICAgICBpZiAoICFwICYmIGQtPm1fbG9hZGVkT2JqZWN0cyA8PSBk
LT5tX3RvdGFsT2JqZWN0Q291bnQgKQotICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QoIDIwMCwg
b3AsIFNMT1QoIHNsb3RQcm9ncmVzc1VwZGF0ZSgpICkgKTsKLSAgICB9Ci0gIH0KLSNlbmRpZgog
fQogCiB2b2lkIEtIVE1MUGFydDo6c2xvdExvYWRlclJlcXVlc3REb25lKCBraHRtbDo6RG9jTG9h
ZGVyKiBkbCwga2h0bWw6OkNhY2hlZE9iamVjdCAqb2JqICkKIHsKLSNpZiAhQVBQTEVfQ0hBTkdF
UwotICBpZiAoIG9iaiAmJiBvYmotPnR5cGUoKSA9PSBraHRtbDo6Q2FjaGVkT2JqZWN0OjpJbWFn
ZSAmJiBkLT5tX2RvYyAmJiBkLT5tX2RvYy0+ZG9jTG9hZGVyKCkgPT0gZGwgKSB7Ci0gICAgS0hU
TUxQYXJ0KiBwID0gdGhpczsKLSAgICB3aGlsZSAoIHAgKSB7Ci0gICAgICBLSFRNTFBhcnQqIG9w
ID0gcDsKLSAgICAgIHAtPmQtPm1fbG9hZGVkT2JqZWN0cysrOwotICAgICAgcCA9IHAtPnBhcmVu
dFBhcnQoKTsKLSAgICAgIGlmICggIXAgJiYgZC0+bV9sb2FkZWRPYmplY3RzIDw9IGQtPm1fdG90
YWxPYmplY3RDb3VudCAmJiBkLT5tX2pvYlBlcmNlbnQgPj0gMTAwICkKLSAgICAgICAgUVRpbWVy
OjpzaW5nbGVTaG90KCAyMDAsIG9wLCBTTE9UKCBzbG90UHJvZ3Jlc3NVcGRhdGUoKSApICk7Ci0g
ICAgfQotICB9Ci0jZW5kaWYKICAgLy8gV2UgcmVhbGx5IG9ubHkgbmVlZCB0byBjYWxsIGNoZWNr
Q29tcGxldGVkIHdoZW4gb3VyIG93biByZXNvdXJjZXMgYXJlIGRvbmUgbG9hZGluZy4KICAgLy8g
U28gd2Ugc2hvdWxkIGNoZWNrIHRoYXQgZC0+bV9kb2MtPmRvY0xvYWRlcigpID09IGRsIGhlcmUu
CiAgIC8vIFRoYXQgbWlnaHQgaGVscCB3aXRoIHBlcmZvcm1hbmNlIGJ5IHNraXBwaW5nIHNvbWUg
dW5uZWNlc3Nhcnkgd29yaywgYnV0IGl0J3MgdG9vCkBAIC0xODYzLDUzICsxMjE4LDEyIEBAIHZv
aWQgS0hUTUxQYXJ0OjpzbG90TG9hZGVyUmVxdWVzdERvbmUoIGsKICAgfQogfQogCi0jaWYgIUFQ
UExFX0NIQU5HRVMKLQotdm9pZCBLSFRNTFBhcnQ6OnNsb3RQcm9ncmVzc1VwZGF0ZSgpCi17Ci0g
IGludCBwZXJjZW50OwotICBpZiAoIGQtPm1fbG9hZGVkT2JqZWN0cyA8IGQtPm1fdG90YWxPYmpl
Y3RDb3VudCApCi0gICAgcGVyY2VudCA9IGQtPm1fam9iUGVyY2VudCAvIDQgKyAoIGQtPm1fbG9h
ZGVkT2JqZWN0cyozMDAgKSAvICggNCpkLT5tX3RvdGFsT2JqZWN0Q291bnQgKTsKLSAgZWxzZQot
ICAgIHBlcmNlbnQgPSBkLT5tX2pvYlBlcmNlbnQ7Ci0KLSAgaWYgKCBkLT5tX2xvYWRlZE9iamVj
dHMgPCBkLT5tX3RvdGFsT2JqZWN0Q291bnQgJiYgcGVyY2VudCA+PSA3NSApCi0gICAgZW1pdCBk
LT5tX2V4dGVuc2lvbi0+aW5mb01lc3NhZ2UoIGkxOG4oICIlMSBvZiAxIEltYWdlIGxvYWRlZCIs
ICIlMSBvZiAlbiBJbWFnZXMgbG9hZGVkIiwgZC0+bV90b3RhbE9iamVjdENvdW50ICkuYXJnKCBk
LT5tX2xvYWRlZE9iamVjdHMgKSApOwotCi0gIGVtaXQgZC0+bV9leHRlbnNpb24tPmxvYWRpbmdQ
cm9ncmVzcyggcGVyY2VudCApOwotfQotCi12b2lkIEtIVE1MUGFydDo6c2xvdEpvYlNwZWVkKCBL
SU86OkpvYiogLypqb2IqLywgdW5zaWduZWQgbG9uZyBzcGVlZCApCi17Ci0gIGVtaXQgZC0+bV9l
eHRlbnNpb24tPnNwZWVkUHJvZ3Jlc3MoIHNwZWVkICk7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0Ojpz
bG90Sm9iUGVyY2VudCggS0lPOjpKb2IqIC8qam9iKi8sIHVuc2lnbmVkIGxvbmcgcGVyY2VudCAp
Ci17Ci0gIGQtPm1fam9iUGVyY2VudCA9IHBlcmNlbnQ7Ci0KLSAgaWYgKCAhcGFyZW50UGFydCgp
ICkKLSAgICBRVGltZXI6OnNpbmdsZVNob3QoIDAsIHRoaXMsIFNMT1QoIHNsb3RQcm9ncmVzc1Vw
ZGF0ZSgpICkgKTsKLX0KLQotI2VuZGlmCiAKIHZvaWQgS0hUTUxQYXJ0OjpjaGVja0NvbXBsZXRl
ZCgpCiB7CiAvLyAgIGtkRGVidWcoIDYwNTAgKSA8PCAiS0hUTUxQYXJ0OjpjaGVja0NvbXBsZXRl
ZCgpIHBhcnNpbmc6ICIgPDwgZC0+bV9kb2MtPnBhcnNpbmcoKSA8PCBlbmRsOwogLy8gICBrZERl
YnVnKCA2MDUwICkgPDwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAiIDw8
IGQtPm1fYkNvbXBsZXRlIDw8IGVuZGw7CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAvLyByZXN0
b3JlIHRoZSBjdXJzb3IgcG9zaXRpb24KLSAgaWYgKGQtPm1fZG9jICYmICFkLT5tX2RvYy0+cGFy
c2luZygpICYmICFkLT5tX2ZvY3VzTm9kZVJlc3RvcmVkKQotICB7Ci0gICAgICBpZiAoZC0+bV9m
b2N1c05vZGVOdW1iZXIgPj0gMCkKLSAgICAgICAgICBkLT5tX2RvYy0+c2V0Rm9jdXNOb2RlKGQt
Pm1fZG9jLT5ub2RlV2l0aEFic0luZGV4KGQtPm1fZm9jdXNOb2RlTnVtYmVyKSk7Ci0gICAgICBl
bHNlCi0gICAgICAgICAgZC0+bV9kb2MtPnNldEZvY3VzTm9kZSgwKTsKLSAgICAgIGQtPm1fZm9j
dXNOb2RlUmVzdG9yZWQgPSB0cnVlOwotICB9Ci0jZW5kaWYKIAogICAvLyBBbnkgZnJhbWUgdGhh
dCBoYXNuJ3QgY29tcGxldGVkIHlldCA/CiAgIENvbnN0RnJhbWVJdCBpdCA9IGQtPm1fZnJhbWVz
LmJlZ2luKCk7CkBAIC0xOTQwLDEyICsxMjU0LDYgQEAgdm9pZCBLSFRNTFBhcnQ6OmNoZWNrQ29t
cGxldGVkKCkKIAogICBjaGVja0VtaXRMb2FkRXZlbnQoKTsgLy8gaWYgd2UgZGlkbid0IGRvIGl0
IGJlZm9yZQogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgLy8gY2hlY2sgdGhhdCB0aGUgdmlldyBo
YXMgbm90IGJlZW4gbW92ZWQgYnkgdGhlIHVzZXIgIAotICBpZiAoICFtX3VybC5oYXNSZWYoKSAm
JiBkLT5tX3ZpZXctPmNvbnRlbnRzWSgpID09IDAgKQotICAgICAgZC0+bV92aWV3LT5zZXRDb250
ZW50c1BvcyggZC0+bV9leHRlbnNpb24tPnVybEFyZ3MoKS54T2Zmc2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZC0+bV9leHRlbnNpb24tPnVybEFyZ3MoKS55T2Zmc2V0ICk7
Ci0jZW5kaWYKIAogICBpZiAoIGQtPm1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gIT0gbm9SZWRpcmVj
dGlvblNjaGVkdWxlZCApCiAgIHsKQEAgLTE5NjQsMjIgKzEyNzIsNiBAQCB2b2lkIEtIVE1MUGFy
dDo6Y2hlY2tDb21wbGV0ZWQoKQogICAgICAgZW1pdCBjb21wbGV0ZWQoKTsKICAgfQogCi0jaWYg
IUFQUExFX0NIQU5HRVMKLSAgLy8gZmluZCB0aGUgYWx0ZXJuYXRlIHN0eWxlc2hlZXRzCi0gIFFT
dHJpbmdMaXN0IHNoZWV0czsKLSAgaWYgKGQtPm1fZG9jKQotICAgICBzaGVldHMgPSBkLT5tX2Rv
Yy0+YXZhaWxhYmxlU3R5bGVTaGVldHMoKTsKLSAgZC0+bV9wYVVzZVN0eWxlc2hlZXQtPnNldEl0
ZW1zKCBzaGVldHMgKTsKLSAgZC0+bV9wYVVzZVN0eWxlc2hlZXQtPnNldEVuYWJsZWQoICFzaGVl
dHMuaXNFbXB0eSgpICk7Ci0gIGlmICghc2hlZXRzLmlzRW1wdHkoKSkKLSAgewotICAgIGQtPm1f
cGFVc2VTdHlsZXNoZWV0LT5zZXRDdXJyZW50SXRlbShrTWF4KHNoZWV0cy5maW5kSW5kZXgoZC0+
bV9zaGVldFVzZWQpLCAwKSk7Ci0gICAgc2xvdFVzZVN0eWxlc2hlZXQoKTsKLSAgfQotCi0gIGlm
ICghcGFyZW50UGFydCgpKQotICAgICAgZW1pdCBzZXRTdGF0dXNCYXJUZXh0KGkxOG4oIkRvbmUu
IikpOwotI2VuZGlmCiAKICNpZmRlZiBTUEVFRF9ERUJVRwogICBrZERlYnVnKDYwNTApIDw8ICJE
T05FOiAiIDw8ZC0+bV9wYXJzZXRpbWUuZWxhcHNlZCgpIDw8IGVuZGw7CkBAIC0yMDUxLDEwICsx
MzQzLDYgQEAgS1VSTCBLSFRNTFBhcnQ6OmNvbXBsZXRlVVJMKCBjb25zdCBRU3RyaQogewogICBp
ZiAoICFkLT5tX2RvYyApIHJldHVybiB1cmw7CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICBpZiAo
ZC0+bV9kZWNvZGVyKQotICAgIHJldHVybiBLVVJMKGQtPm1fZG9jLT5jb21wbGV0ZVVSTCh1cmwp
LCBkLT5tX2RlY29kZXItPmNvZGVjKCktPm1pYkVudW0oKSk7Ci0jZW5kaWYKIAogICByZXR1cm4g
S1VSTCggZC0+bV9kb2MtPmNvbXBsZXRlVVJMKCB1cmwgKSApOwogfQpAQCAtMjExOCwxNCArMTQw
NiwxMiBAQCBib29sIEtIVE1MUGFydDo6aXNTY2hlZHVsZWRMb2NhdGlvbkNoYW5nCiAKIHZvaWQg
S0hUTUxQYXJ0OjpzY2hlZHVsZUhpc3RvcnlOYXZpZ2F0aW9uKCBpbnQgc3RlcHMgKQogewotI2lm
IEFQUExFX0NIQU5HRVMKICAgICAvLyBuYXZpZ2F0aW9uIHdpbGwgYWx3YXlzIGJlIGFsbG93ZWQg
aW4gdGhlIDAgc3RlcHMgY2FzZSwgd2hpY2ggaXMgT0sgYmVjYXVzZQogICAgIC8vIHRoYXQncyBz
dXBwb3NlZCB0byBmb3JjZSBhIHJlbG9hZC4KICAgICBpZiAoIUtXUSh0aGlzKS0+Y2FuR29CYWNr
T3JGb3J3YXJkKHN0ZXBzKSkgewogICAgICAgICBjYW5jZWxSZWRpcmVjdGlvbigpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotI2VuZGlmCiAKICAgICBkLT5tX3NjaGVkdWxlZFJlZGlyZWN0aW9u
ID0gaGlzdG9yeU5hdmlnYXRpb25TY2hlZHVsZWQ7CiAgICAgZC0+bV9kZWxheVJlZGlyZWN0ID0g
MDsKQEAgLTIyMTAsMjcgKzE0OTYsNiBAQCB2b2lkIEtIVE1MUGFydDo6c2xvdFJlZGlyZWN0aW9u
KEtJTzo6Sm9iCiAgIGQtPm1fd29ya2luZ1VSTCA9IHVybDsKIH0KIAotI2lmICFBUFBMRV9DSEFO
R0VTCi0KLWJvb2wgS0hUTUxQYXJ0OjpzZXRFbmNvZGluZyggY29uc3QgUVN0cmluZyAmbmFtZSwg
Ym9vbCBvdmVycmlkZSApCi17Ci0gICAgZC0+bV9lbmNvZGluZyA9IG5hbWU7Ci0gICAgZC0+bV9o
YXZlRW5jb2RpbmcgPSBvdmVycmlkZTsKLQotICAgIGlmKCAhbV91cmwuaXNFbXB0eSgpICkgewot
ICAgICAgICAvLyByZWxvYWQgZG9jdW1lbnQKLSAgICAgICAgY2xvc2VVUkwoKTsKLSAgICAgICAg
S1VSTCB1cmwgPSBtX3VybDsKLSAgICAgICAgbV91cmwgPSAwOwotICAgICAgICBkLT5tX3Jlc3Rv
cmVkID0gdHJ1ZTsKLSAgICAgICAgb3BlblVSTCh1cmwpOwotICAgICAgICBkLT5tX3Jlc3RvcmVk
ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNlbmRpZgogCiBRU3Ry
aW5nIEtIVE1MUGFydDo6ZW5jb2RpbmcoKSBjb25zdAogewpAQCAtMjI4NywxNSArMTU1MiwxMSBA
QCBib29sIEtIVE1MUGFydDo6Z290b0FuY2hvciggY29uc3QgUVN0cmluCiAgICAgfQogICB9CiAg
IAotI2lmIEFQUExFX0NIQU5HRVMKICAgICAvLyBTY3JvbGwgbmVzdGVkIGxheWVycyBhbmQgZnJh
bWVzIHRvIHJldmVhbCB0aGUgYW5jaG9yLgogICAgIGlmIChuICYmIG4tPnJlbmRlcmVyKCkpIHsK
ICAgICAgICAgLy8gQWxpZ24gdG8gdGhlIHRvcCBhbmQgdG8gdGhlIGNsb3Nlc3Qgc2lkZSAodGhp
cyBtYXRjaGVzIG90aGVyIGJyb3dzZXJzKS4KICAgICAgICAgbi0+cmVuZGVyZXIoKS0+ZW5jbG9z
aW5nTGF5ZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShuLT5nZXRSZWN0KCksIFJlbmRlckxheWVy
OjpnQWxpZ25Ub0VkZ2VJZk5lZWRlZCwgUmVuZGVyTGF5ZXI6OmdBbGlnblRvcEFsd2F5cyk7CiAg
ICAgfQotI2Vsc2UKLSAgZC0+bV92aWV3LT5zZXRDb250ZW50c1Bvcyh4LCB5KTsKLSNlbmRpZgog
CiAgIHJldHVybiB0cnVlOwogfQpAQCAtMjMxMCwyNSArMTU3MSwxMyBAQCB2b2lkIEtIVE1MUGFy
dDo6c2V0Rml4ZWRGb250KCBjb25zdCBRU3RyCiAgICAgZC0+bV9zZXR0aW5ncy0+c2V0Rml4ZWRG
b250TmFtZShuYW1lKTsKIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0KLXZvaWQgS0hUTUxQYXJ0
OjpzZXRVUkxDdXJzb3IoIGNvbnN0IFFDdXJzb3IgJmMgKQotewotICBkLT5tX2xpbmtDdXJzb3Ig
PSBjOwotfQotCi0jZW5kaWYKIAogUUN1cnNvciBLSFRNTFBhcnQ6OnVybEN1cnNvcigpIGNvbnN0
CiB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAvLyBEb24ndCBsb2FkIHRoZSBsaW5rIGN1cnNvciB1
bnRpbCBpdCdzIGFjdHVhbGx5IHVzZWQuCiAgIC8vIEFsc28sIHdlIGRvbid0IG5lZWQgc2V0VVJM
Q3Vyc29yLgogICAvLyBUaGlzIHNwZWVkcyB1cCBzdGFydHVwIHRpbWUuCiAgIHJldHVybiBLQ3Vy
c29yOjpoYW5kQ3Vyc29yKCk7Ci0jZWxzZQotICByZXR1cm4gZC0+bV9saW5rQ3Vyc29yOwotI2Vu
ZGlmCiB9CiAKIGJvb2wgS0hUTUxQYXJ0Ojpvbmx5TG9jYWxSZWZlcmVuY2VzKCkgY29uc3QKQEAg
LTIzNDEsMTI5ICsxNTkwLDI1IEBAIHZvaWQgS0hUTUxQYXJ0OjpzZXRPbmx5TG9jYWxSZWZlcmVu
Y2VzKGIKICAgZC0+bV9vbmx5TG9jYWxSZWZlcmVuY2VzID0gZW5hYmxlOwogfQogCi0jaWYgIUFQ
UExFX0NIQU5HRVMKIAotdm9pZCBLSFRNTFBhcnQ6OmZpbmRUZXh0QmVnaW4oTm9kZUltcGwgKnN0
YXJ0Tm9kZSwgaW50IHN0YXJ0UG9zKQorI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCisKK1FT
dHJpbmcgS0hUTUxQYXJ0Ojp0ZXh0KGNvbnN0IERPTTo6UmFuZ2UgJnIpIGNvbnN0CiB7Ci0gICAg
ZC0+bV9maW5kUG9zID0gc3RhcnRQb3M7Ci0gICAgZC0+bV9maW5kTm9kZSA9IHN0YXJ0Tm9kZTsK
KyAgICByZXR1cm4gcGxhaW5UZXh0KHIuaGFuZGxlKCkpOwogfQogCi1ib29sIEtIVE1MUGFydDo6
ZmluZFRleHROZXh0KCBjb25zdCBRU3RyaW5nICZzdHIsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNl
U2Vuc2l0aXZlLCBib29sIGlzUmVnRXhwICkKLXsKLSAgICBpZiAoICFkLT5tX2RvYyApCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogCi0gICAgaWYoIWQtPm1fZmluZE5vZGUpIHsKLSAg
ICAgICAgaWYgKGQtPm1fZG9jLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICAgICAgZC0+bV9m
aW5kTm9kZSA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwqPihkLT5tX2RvYyktPmJvZHko
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZC0+bV9maW5kTm9kZSA9IGQtPm1fZG9jOwot
ICAgIH0KK1FTdHJpbmcgS0hUTUxQYXJ0OjpzZWxlY3RlZFRleHQoKSBjb25zdAoreworICAgIHJl
dHVybiBwbGFpblRleHQoc2VsZWN0aW9uKCkudG9SYW5nZSgpLmdldCgpKTsKK30KIAotICAgIGlm
ICggIWQtPm1fZmluZE5vZGUgKQotICAgIHsKLSAgICAgIGtkRGVidWcoKSA8PCAiS0hUTUxQYXJ0
OjpmaW5kVGV4dE5leHQgbm8gZmluZE5vZGUgLT4gcmV0dXJuIGZhbHNlIiA8PCBlbmRsOwotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIGQtPm1fZmluZE5vZGUtPmlkKCkgPT0g
SURfRlJBTUVTRVQgKQotICAgIHsKLSAgICAgIGtkRGVidWcoKSA8PCAiS0hUTUxQYXJ0OjpmaW5k
VGV4dE5leHQgRlJBTUVTRVQgLT4gcmV0dXJuIGZhbHNlIiA8PCBlbmRsOwotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHdoaWxlKDEpCi0gICAgewotICAgICAgICBpZiggKGQtPm1f
ZmluZE5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8IGQtPm1fZmluZE5vZGUt
Pm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKSAmJiBkLT5tX2ZpbmROb2Rl
LT5yZW5kZXJlcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgRE9NU3RyaW5nIG5vZGVUZXh0
ID0gZC0+bV9maW5kTm9kZS0+bm9kZVZhbHVlKCk7Ci0gICAgICAgICAgICBET01TdHJpbmdJbXBs
ICp0ID0gbm9kZVRleHQuaW1wbCgpOwotICAgICAgICAgICAgUUNvbnN0U3RyaW5nIHModC0+cywg
dC0+bCk7Ci0KLSAgICAgICAgICAgIGludCBtYXRjaExlbiA9IDA7Ci0gICAgICAgICAgICBpZiAo
IGlzUmVnRXhwICkgewotICAgICAgICAgICAgICBRUmVnRXhwIG1hdGNoZXIoIHN0ciApOwotICAg
ICAgICAgICAgICBtYXRjaGVyLnNldENhc2VTZW5zaXRpdmUoIGNhc2VTZW5zaXRpdmUgKTsKLSAg
ICAgICAgICAgICAgZC0+bV9maW5kUG9zID0gbWF0Y2hlci5zZWFyY2gocy5xc3RyaW5nKCksIGQt
Pm1fZmluZFBvcysxKTsKLSAgICAgICAgICAgICAgaWYgKCBkLT5tX2ZpbmRQb3MgIT0gLTEgKQot
ICAgICAgICAgICAgICAgIG1hdGNoTGVuID0gbWF0Y2hlci5tYXRjaGVkTGVuZ3RoKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgZC0+bV9maW5kUG9z
ID0gcy5xc3RyaW5nKCkuZmluZChzdHIsIGQtPm1fZmluZFBvcysxLCBjYXNlU2Vuc2l0aXZlKTsK
LSAgICAgICAgICAgICAgbWF0Y2hMZW4gPSBzdHIubGVuZ3RoKCk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmKGQtPm1fZmluZFBvcyAhPSAtMSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpbnQgeCA9IDAsIHkgPSAwOwotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PGtodG1sOjpSZW5kZXJUZXh0ICo+KGQtPm1fZmluZE5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAg
ICAgICAgICAgICAtPnBvc09mQ2hhcihkLT5tX2ZpbmRQb3MsIHgsIHkpOwotICAgICAgICAgICAg
ICAgIGQtPm1fdmlldy0+c2V0Q29udGVudHNQb3MoeC01MCwgeS01MCk7Ci0gICAgICAgICAgICAg
ICAgUG9zaXRpb24gcDEoZC0+bV9maW5kTm9kZSwgZC0+bV9maW5kUG9zKTsKLSAgICAgICAgICAg
ICAgICBQb3NpdGlvbiBwMihkLT5tX2ZpbmROb2RlLCBkLT5tX2ZpbmRQb3MgKyBtYXRjaExlbik7
Ci0gICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWwgPSBTZWxlY3Rpb25Db250
cm9sbGVyKHAxLCBraHRtbDo6RE9XTlNUUkVBTSwgcDIsIGtodG1sOjpWUF9VUFNUUkVBTV9JRl9Q
T1NTSUJMRSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvbihzZWwpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBkLT5tX2ZpbmRQb3MgPSAtMTsKLQotICAgICAgICBOb2RlSW1wbCAqbmV4
dDsKLQotICAgICAgICBpZiAoIGZvcndhcmQgKQotICAgICAgICB7Ci0gICAgICAgICAgbmV4dCA9
IGQtPm1fZmluZE5vZGUtPmZpcnN0Q2hpbGQoKTsKLQotICAgICAgICAgIGlmKCFuZXh0KSBuZXh0
ID0gZC0+bV9maW5kTm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICB3aGlsZShkLT5tX2Zp
bmROb2RlICYmICFuZXh0KSB7Ci0gICAgICAgICAgICAgIGQtPm1fZmluZE5vZGUgPSBkLT5tX2Zp
bmROb2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgIGlmKCBkLT5tX2ZpbmROb2RlICkg
ewotICAgICAgICAgICAgICAgICAgbmV4dCA9IGQtPm1fZmluZE5vZGUtPm5leHRTaWJsaW5nKCk7
Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgbmV4dCA9IGQtPm1fZmluZE5vZGUtPmxhc3RDaGlsZCgpOwot
Ci0gICAgICAgICAgaWYgKCFuZXh0ICkgbmV4dCA9IGQtPm1fZmluZE5vZGUtPnByZXZpb3VzU2li
bGluZygpOwotICAgICAgICAgIHdoaWxlICggZC0+bV9maW5kTm9kZSAmJiAhbmV4dCApCi0gICAg
ICAgICAgewotICAgICAgICAgICAgZC0+bV9maW5kTm9kZSA9IGQtPm1fZmluZE5vZGUtPnBhcmVu
dE5vZGUoKTsKLSAgICAgICAgICAgIGlmKCBkLT5tX2ZpbmROb2RlICkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgbmV4dCA9IGQtPm1fZmluZE5vZGUtPnByZXZpb3VzU2libGluZygpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGQtPm1fZmlu
ZE5vZGUgPSBuZXh0OwotICAgICAgICBpZighZC0+bV9maW5kTm9kZSkgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotI2VuZGlmIC8vIEFQUExFX0NIQU5HRVMKLQotI2lmICFLSFRNTF9OT19DUExV
U1BMVVNfRE9NCi0KLVFTdHJpbmcgS0hUTUxQYXJ0Ojp0ZXh0KGNvbnN0IERPTTo6UmFuZ2UgJnIp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsYWluVGV4dChyLmhhbmRsZSgpKTsKLX0KLQotI2VuZGlm
Ci0KLVFTdHJpbmcgS0hUTUxQYXJ0OjpzZWxlY3RlZFRleHQoKSBjb25zdAotewotICAgIHJldHVy
biBwbGFpblRleHQoc2VsZWN0aW9uKCkudG9SYW5nZSgpLmdldCgpKTsKLX0KLQotYm9vbCBLSFRN
TFBhcnQ6Omhhc1NlbGVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPm1fc2VsZWN0aW9u
LmlzQ2FyZXRPclJhbmdlKCk7Ci19Citib29sIEtIVE1MUGFydDo6aGFzU2VsZWN0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZC0+bV9zZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKTsKK30KIAog
Y29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmS0hUTUxQYXJ0OjpzZWxlY3Rpb24oKSBjb25zdAog
ewpAQCAtMjUwMyw5ICsxNjQ4LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OnNldFNlbGVjdGlvbihjb25z
dCBTZWxlYwogICAgIAogICAgIGNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQoKTsKIAotI2lmIEFQUExF
X0NIQU5HRVMKICAgICBTZWxlY3Rpb25Db250cm9sbGVyIG9sZFNlbGVjdGlvbiA9IGQtPm1fc2Vs
ZWN0aW9uOwotI2VuZGlmCiAKICAgICBkLT5tX3NlbGVjdGlvbiA9IHM7CiAgICAgaWYgKCFzLmlz
Tm9uZSgpKQpAQCAtMjUyMyw5ICsxNjY2LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OnNldFNlbGVjdGlv
bihjb25zdCBTZWxlYwogICAgIGlmICgha2VlcFR5cGluZ1N0eWxlKQogICAgICAgICBjbGVhclR5
cGluZ1N0eWxlKCk7CiAgICAgCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIEtXUSh0aGlzKS0+cmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIGNsb3NlVHlwaW5nKTsKLSNlbmRp
ZgogCiAgICAgZW1pdFNlbGVjdGlvbkNoYW5nZWQoKTsKIH0KQEAgLTI1NjIsMTIgKzE3MDMsNiBA
QCB2b2lkIEtIVE1MUGFydDo6c2V0Q2FyZXRWaXNpYmxlKGJvb2wgZmxhCiAgICAgc2VsZWN0aW9u
TGF5b3V0Q2hhbmdlZCgpOwogfQogCi0jaWYgIUFQUExFX0NIQU5HRVMKLXZvaWQgS0hUTUxQYXJ0
OjpzbG90Q2xlYXJTZWxlY3Rpb24oKQotewotICAgIGNsZWFyU2VsZWN0aW9uKCk7Ci19Ci0jZW5k
aWYKIAogdm9pZCBLSFRNTFBhcnQ6OmNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQoKQogewpAQCAtMjY3
MiwxNzMgKzE4MDcsNiBAQCB2b2lkIEtIVE1MUGFydDo6cGFpbnREcmFnQ2FyZXQoUVBhaW50ZXIg
CiAgICAgZC0+bV9kcmFnQ2FyZXQucGFpbnRDYXJldChwLCByZWN0KTsKIH0KIAotI2lmICFBUFBM
RV9DSEFOR0VTCi0KLXZvaWQgS0hUTUxQYXJ0OjpvdmVyVVJMKCBjb25zdCBRU3RyaW5nICZ1cmws
IGNvbnN0IFFTdHJpbmcgJnRhcmdldCwgYm9vbCBzaGlmdFByZXNzZWQgKQotewotICBpZiAoICFk
LT5tX2tqc1N0YXR1c0JhclRleHQuaXNFbXB0eSgpICYmICFzaGlmdFByZXNzZWQgKSB7Ci0gICAg
ZW1pdCBvblVSTCggdXJsICk7Ci0gICAgZW1pdCBzZXRTdGF0dXNCYXJUZXh0KCBkLT5tX2tqc1N0
YXR1c0JhclRleHQgKTsKLSAgICBkLT5tX2tqc1N0YXR1c0JhclRleHQgPSBRU3RyaW5nOjpudWxs
OwotICAgIHJldHVybjsKLSAgfQotCi0gIGVtaXQgb25VUkwoIHVybCApOwotCi0gIGlmICggdXJs
LmlzRW1wdHkoKSApCi0gIHsKLSAgICBlbWl0IHNldFN0YXR1c0JhclRleHQoY29tcGxldGVVUkwo
dXJsKS5odG1sVVJMKCkpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmICh1cmwuZmluZCggUVN0
cmluZzo6ZnJvbUxhdGluMSggImphdmFzY3JpcHQ6IiApLDAsIGZhbHNlICkgIT0gLTEgKQotICB7
Ci0gICAgZW1pdCBzZXRTdGF0dXNCYXJUZXh0KCBLVVJMOjpkZWNvZGVfc3RyaW5nKCB1cmwubWlk
KCB1cmwuZmluZCggImphdmFzY3JpcHQ6IiwgMCwgZmFsc2UgKSApICkgKTsKLSAgICByZXR1cm47
Ci0gIH0KLQotICBLVVJMIHUgPSBjb21wbGV0ZVVSTCh1cmwpOwotCi0gIC8vIHNwZWNpYWwgY2Fz
ZSBmb3IgPGEgaHJlZj0iIj4KLSAgaWYgKCB1cmwuaXNFbXB0eSgpICkKLSAgICB1LnNldEZpbGVO
YW1lKCB1cmwgKTsKLQotICBRU3RyaW5nIGNvbTsKLQotICBLTWltZVR5cGU6OlB0ciB0eXAgPSBL
TWltZVR5cGU6OmZpbmRCeVVSTCggdSApOwotCi0gIGlmICggdHlwICkKLSAgICBjb20gPSB0eXAt
PmNvbW1lbnQoIHUsIGZhbHNlICk7Ci0KLSAgaWYgKCB1LmlzTWFsZm9ybWVkKCkgKQotICB7Ci0g
ICAgZW1pdCBzZXRTdGF0dXNCYXJUZXh0KHUuaHRtbFVSTCgpKTsKLSAgICByZXR1cm47Ci0gIH0K
LQotICBpZiAoIHUuaXNMb2NhbEZpbGUoKSApCi0gIHsKLSAgICAvLyBUT0RPIDogdXNlIEtJTzo6
c3RhdCgpIGFuZCBjcmVhdGUgYSBLRmlsZUl0ZW0gb3V0IG9mIGl0cyByZXN1bHQsCi0gICAgLy8g
dG8gdXNlIEtGaWxlSXRlbTo6c3RhdHVzQmFyVGV4dCgpCi0gICAgUUNTdHJpbmcgcGF0aCA9IFFG
aWxlOjplbmNvZGVOYW1lKCB1LnBhdGgoKSApOwotCi0gICAgc3RydWN0IHN0YXQgYnVmZjsKLSAg
ICBib29sIG9rID0gIXN0YXQoIHBhdGguZGF0YSgpLCAmYnVmZiApOwotCi0gICAgc3RydWN0IHN0
YXQgbGJ1ZmY7Ci0gICAgaWYgKG9rKSBvayA9ICFsc3RhdCggcGF0aC5kYXRhKCksICZsYnVmZiAp
OwotCi0gICAgUVN0cmluZyB0ZXh0ID0gdS5odG1sVVJMKCk7Ci0gICAgUVN0cmluZyB0ZXh0MiA9
IHRleHQ7Ci0KLSAgICBpZiAob2sgJiYgU19JU0xOSyggbGJ1ZmYuc3RfbW9kZSApICkKLSAgICB7
Ci0gICAgICBRU3RyaW5nIHRtcDsKLSAgICAgIGlmICggY29tLmlzTnVsbCgpICkKLSAgICAgICAg
dG1wID0gaTE4biggIlN5bWJvbGljIExpbmsiKTsKLSAgICAgIGVsc2UKLSAgICAgICAgdG1wID0g
aTE4bigiJTEgKExpbmspIikuYXJnKGNvbSk7Ci0gICAgICBjaGFyIGJ1ZmZfdHdvWzEwMjRdOwot
ICAgICAgdGV4dCArPSAiIC0+ICI7Ci0gICAgICBpbnQgbiA9IHJlYWRsaW5rICggcGF0aC5kYXRh
KCksIGJ1ZmZfdHdvLCAxMDIyKTsKLSAgICAgIGlmIChuID09IC0xKQotICAgICAgewotICAgICAg
ICB0ZXh0MiArPSAiICAiOwotICAgICAgICB0ZXh0MiArPSB0bXA7Ci0gICAgICAgIGVtaXQgc2V0
U3RhdHVzQmFyVGV4dCh0ZXh0Mik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGJ1
ZmZfdHdvW25dID0gMDsKLQotICAgICAgdGV4dCArPSBidWZmX3R3bzsKLSAgICAgIHRleHQgKz0g
IiAgIjsKLSAgICAgIHRleHQgKz0gdG1wOwotICAgIH0KLSAgICBlbHNlIGlmICggb2sgJiYgU19J
U1JFRyggYnVmZi5zdF9tb2RlICkgKQotICAgIHsKLSAgICAgIGlmIChidWZmLnN0X3NpemUgPCAx
MDI0KQotICAgICAgICB0ZXh0ID0gaTE4bigiJTIgKCUxIGJ5dGVzKSIpLmFyZygobG9uZykgYnVm
Zi5zdF9zaXplKS5hcmcodGV4dDIpOyAvLyBhbHdheXMgcHV0IHRoZSBVUkwgbGFzdCwgaW4gY2Fz
ZSBpdCBjb250YWlucyAnJScKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZmxvYXQgZCA9
IChmbG9hdCkgYnVmZi5zdF9zaXplLzEwMjQuMDsKLSAgICAgICAgdGV4dCA9IGkxOG4oIiUxICgl
MiBLKSIpLmFyZyh0ZXh0MikuYXJnKEtHbG9iYWw6OmxvY2FsZSgpLT5mb3JtYXROdW1iZXIoZCwg
MikpOyAvLyB3YXMgJS4yZgotICAgICAgfQotICAgICAgdGV4dCArPSAiICAiOwotICAgICAgdGV4
dCArPSBjb207Ci0gICAgfQotICAgIGVsc2UgaWYgKCBvayAmJiBTX0lTRElSKCBidWZmLnN0X21v
ZGUgKSApCi0gICAgewotICAgICAgdGV4dCArPSAiICAiOwotICAgICAgdGV4dCArPSBjb207Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICB0ZXh0ICs9ICIgICI7Ci0gICAgICB0ZXh0ICs9
IGNvbTsKLSAgICB9Ci0gICAgZW1pdCBzZXRTdGF0dXNCYXJUZXh0KHRleHQpOwotICB9Ci0gIGVs
c2UKLSAgewotICAgIFFTdHJpbmcgZXh0cmE7Ci0gICAgaWYgKHRhcmdldCA9PSBRU3RyaW5nOjpm
cm9tTGF0aW4xKCJfYmxhbmsiKSkKLSAgICB7Ci0gICAgICBleHRyYSA9IGkxOG4oIiAoSW4gbmV3
IHdpbmRvdykiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoIXRhcmdldC5pc0VtcHR5KCkgJiYKLSAg
ICAgICAgICAgICAodGFyZ2V0ICE9IFFTdHJpbmc6OmZyb21MYXRpbjEoIl90b3AiKSkgJiYKLSAg
ICAgICAgICAgICAodGFyZ2V0ICE9IFFTdHJpbmc6OmZyb21MYXRpbjEoIl9zZWxmIikpICYmCi0g
ICAgICAgICAgICAgKHRhcmdldCAhPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJfcGFyZW50IikpKQot
ICAgIHsKLSAgICAgIGV4dHJhID0gaTE4bigiIChJbiBvdGhlciBmcmFtZSkiKTsKLSAgICB9Ci0K
LSAgICBpZiAodS5wcm90b2NvbCgpID09IFFTdHJpbmc6OmZyb21MYXRpbjEoIm1haWx0byIpKSB7
Ci0gICAgICBRU3RyaW5nIG1haWx0b01zZy8qID0gUVN0cmluZzo6ZnJvbUxhdGluMSgiPGltZyBz
cmM9JTE+IikuYXJnKGxvY2F0ZSgiaWNvbiIsIFFTdHJpbmc6OmZyb21MYXRpbjEoImxvY29sb3Iv
MTZ4MTYvYWN0aW9ucy9tYWlsX3NlbmQucG5nIikpKSovOwotICAgICAgbWFpbHRvTXNnICs9IGkx
OG4oIkVtYWlsIHRvOiAiKSArIEtVUkw6OmRlY29kZV9zdHJpbmcodS5wYXRoKCkpOwotICAgICAg
UVN0cmluZ0xpc3QgcXVlcmllcyA9IFFTdHJpbmdMaXN0OjpzcGxpdCgnJicsIHUucXVlcnkoKS5t
aWQoMSkpOwotICAgICAgZm9yIChRU3RyaW5nTGlzdDo6SXRlcmF0b3IgaXQgPSBxdWVyaWVzLmJl
Z2luKCk7IGl0ICE9IHF1ZXJpZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGlmICgoKml0KS5zdGFy
dHNXaXRoKFFTdHJpbmc6OmZyb21MYXRpbjEoInN1YmplY3Q9IikpKQotICAgICAgICAgIG1haWx0
b01zZyArPSBpMThuKCIgLSBTdWJqZWN0OiAiKSArIEtVUkw6OmRlY29kZV9zdHJpbmcoKCppdCku
bWlkKDgpKTsKLSAgICAgICAgZWxzZSBpZiAoKCppdCkuc3RhcnRzV2l0aChRU3RyaW5nOjpmcm9t
TGF0aW4xKCJjYz0iKSkpCi0gICAgICAgICAgbWFpbHRvTXNnICs9IGkxOG4oIiAtIENDOiAiKSAr
IEtVUkw6OmRlY29kZV9zdHJpbmcoKCppdCkubWlkKDMpKTsKLSAgICAgICAgZWxzZSBpZiAoKCpp
dCkuc3RhcnRzV2l0aChRU3RyaW5nOjpmcm9tTGF0aW4xKCJiY2M9IikpKQotICAgICAgICAgIG1h
aWx0b01zZyArPSBpMThuKCIgLSBCQ0M6ICIpICsgS1VSTDo6ZGVjb2RlX3N0cmluZygoKml0KS5t
aWQoNCkpOwotICAgICAgbWFpbHRvTXNnLnJlcGxhY2UoUVJlZ0V4cCgiJiIpLCBRU3RyaW5nKCIm
YW1wOyIpKTsKLSAgICAgIG1haWx0b01zZy5yZXBsYWNlKFFSZWdFeHAoIjwiKSwgUVN0cmluZygi
Jmx0OyIpKTsKLSAgICAgIG1haWx0b01zZy5yZXBsYWNlKFFSZWdFeHAoIj4iKSwgUVN0cmluZygi
Jmd0OyIpKTsKLSAgICAgIG1haWx0b01zZy5yZXBsYWNlKFFSZWdFeHAoIihbXG5cclx0XXxbIF17
MTB9KSIpLCAiIik7Ci0gICAgICBlbWl0IHNldFN0YXR1c0JhclRleHQobWFpbHRvTXNnKTsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAvLyBJcyB0aGlzIGNoZWNrIG5lY2Nlc3NhcnkgYXQgYWxs
PyAoRnJlcmljaCkKLSNpZiAwCi0gICAgZWxzZSBpZiAodS5wcm90b2NvbCgpID09IFFTdHJpbmc6
OmZyb21MYXRpbjEoImh0dHAiKSkgewotICAgICAgICBET006Ok5vZGUgaHJlZk5vZGUgPSBub2Rl
VW5kZXJNb3VzZSgpLnBhcmVudE5vZGUoKTsKLSAgICAgICAgd2hpbGUgKGhyZWZOb2RlLm5vZGVO
YW1lKCkucXN0cmluZygpICE9IFFTdHJpbmc6OmZyb21MYXRpbjEoIkEiKSAmJiAhaHJlZk5vZGUu
aXNOdWxsKCkpCi0gICAgICAgICAgaHJlZk5vZGUgPSBocmVmTm9kZS5wYXJlbnROb2RlKCk7Ci0K
LSAgICAgICAgaWYgKCFocmVmTm9kZS5pc051bGwoKSkgewotICAgICAgICAgIERPTTo6Tm9kZSBo
cmVmbGFuZ05vZGUgPSBocmVmTm9kZS5hdHRyaWJ1dGVzKCkuZ2V0TmFtZWRJdGVtKCJIUkVGTEFO
RyIpOwotICAgICAgICAgIGlmICghaHJlZmxhbmdOb2RlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICBRU3RyaW5nIGNvdW50cnlDb2RlID0gaHJlZmxhbmdOb2RlLm5vZGVWYWx1ZSgpLnFzdHJpbmco
KS5sb3dlcigpOwotICAgICAgICAgICAgLy8gTWFwIHRoZSBsYW5ndWFnZSBjb2RlIHRvIGFuIGFw
cHJvcHJpYXRlIGNvdW50cnkgY29kZS4KLSAgICAgICAgICAgIGlmIChjb3VudHJ5Q29kZSA9PSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJlbiIpKQotICAgICAgICAgICAgICBjb3VudHJ5Q29kZSA9IFFT
dHJpbmc6OmZyb21MYXRpbjEoImdiIik7Ci0gICAgICAgICAgICBRU3RyaW5nIGZsYWdJbWcgPSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCI8aW1nIHNyYz0lMT4iKS5hcmcoCi0gICAgICAgICAgICAgICAg
bG9jYXRlKCJsb2NhbGUiLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJsMTBuLyIpCi0gICAgICAgICAg
ICAgICAgKyBjb3VudHJ5Q29kZQotICAgICAgICAgICAgICAgICsgUVN0cmluZzo6ZnJvbUxhdGlu
MSgiL2ZsYWcucG5nIikpKTsKLSAgICAgICAgICAgIGVtaXQgc2V0U3RhdHVzQmFyVGV4dChmbGFn
SW1nICsgdS5wcmV0dHlVUkwoKSArIGV4dHJhKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSNlbmRpZgotICAgIGVtaXQgc2V0U3RhdHVzQmFyVGV4dCh1Lmh0bWxVUkwoKSArIGV4
dHJhKTsKLSAgfQotfQotCi0jZW5kaWYgLy8gQVBQTEVfQ0hBTkdFUwogCiB2b2lkIEtIVE1MUGFy
dDo6dXJsU2VsZWN0ZWQoIGNvbnN0IFFTdHJpbmcgJnVybCwgaW50IGJ1dHRvbiwgaW50IHN0YXRl
LCBjb25zdCBRU3RyaW5nICZfdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBL
UGFydHM6OlVSTEFyZ3MgYXJncyApCkBAIC0yODU4LDExICsxODI2LDYgQEAgdm9pZCBLSFRNTFBh
cnQ6OnVybFNlbGVjdGVkKCBjb25zdCBRU3RyaQogICB9CiAKICAgS1VSTCBjVVJMID0gY29tcGxl
dGVVUkwodXJsKTsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAvLyBzcGVjaWFsIGNhc2UgZm9yIDxh
IGhyZWY9IiI+Ci0gIGlmICggdXJsLmlzRW1wdHkoKSApCi0gICAgY1VSTC5zZXRGaWxlTmFtZSgg
dXJsICk7Ci0jZW5kaWYKIAogICBpZiAoICFjVVJMLmlzVmFsaWQoKSApCiAgICAgLy8gIyMjIEVS
Uk9SIEhBTkRMSU5HCkBAIC0yODcwLDIwICsxODMzLDYgQEAgdm9pZCBLSFRNTFBhcnQ6OnVybFNl
bGVjdGVkKCBjb25zdCBRU3RyaQogCiAgIC8va2REZWJ1ZyggNjAwMCApIDw8ICJ1cmxTZWxlY3Rl
ZDogY29tcGxldGUgVVJMOiIgPDwgY1VSTC51cmwoKSA8PCAiIHRhcmdldCA9ICIgPDwgdGFyZ2V0
IDw8IGVuZGw7CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICBpZiAoIGJ1dHRvbiA9PSBMZWZ0QnV0
dG9uICYmICggc3RhdGUgJiBTaGlmdEJ1dHRvbiApICkKLSAgewotICAgIEtJTzo6TWV0YURhdGEg
bWV0YURhdGE7Ci0gICAgbWV0YURhdGFbInJlZmVycmVyIl0gPSBkLT5tX3JlZmVycmVyOwotICAg
IEtIVE1MUG9wdXBHVUlDbGllbnQ6OnNhdmVVUkwoIGQtPm1fdmlldywgaTE4biggIlNhdmUgQXMu
Li4iICksIGNVUkwsIG1ldGFEYXRhICk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKCFjaGVj
a0xpbmtTZWN1cml0eShjVVJMLAotCQkJIGkxOG4oICI8cXQ+VGhlIGxpbmsgPEI+JTE8L0I+PEJS
PmxlYWRzIGZyb20gdGhpcyB1bnRydXN0ZWQgcGFnZSB0byB5b3VyIGxvY2FsIGZpbGVzeXN0ZW0u
PEJSPkRvIHlvdSB3YW50IHRvIGZvbGxvdyB0aGUgbGluaz8iICksCi0JCQkgaTE4biggIkZvbGxv
dyIgKSkpCi0gICAgcmV0dXJuOwotI2VuZGlmCiAKICAgYXJncy5mcmFtZU5hbWUgPSB0YXJnZXQ7
CiAKQEAgLTI4OTMsMjcxICsxODQyLDEyIEBAIHZvaWQgS0hUTUxQYXJ0Ojp1cmxTZWxlY3RlZCgg
Y29uc3QgUVN0cmkKICAgICBhcmdzLm1ldGFEYXRhKClbImNhY2hlIl0gPSAicmVmcmVzaCI7CiAg
IH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gIGFyZ3MubWV0YURhdGEoKS5pbnNlcnQoIm1haW5f
ZnJhbWVfcmVxdWVzdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UGFydCgpID09
IDAgPyAiVFJVRSI6IkZBTFNFIik7Ci0gIGFyZ3MubWV0YURhdGEoKS5pbnNlcnQoInNzbF93YXNf
aW5fdXNlIiwgZC0+bV9zc2xfaW5fdXNlID8gIlRSVUUiOiJGQUxTRSIpOwotICBhcmdzLm1ldGFE
YXRhKCkuaW5zZXJ0KCJzc2xfYWN0aXZhdGVfd2FybmluZ3MiLCAiVFJVRSIpOwotI2VuZGlmCiAK
LSNpZiBBUFBMRV9DSEFOR0VTCiAgIGlmICghZC0+bV9yZWZlcnJlci5pc0VtcHR5KCkpCiAgICAg
YXJncy5tZXRhRGF0YSgpWyJyZWZlcnJlciJdID0gZC0+bV9yZWZlcnJlcjsKICAgS1dRKHRoaXMp
LT51cmxTZWxlY3RlZChjVVJMLCBidXR0b24sIHN0YXRlLCBhcmdzKTsKLSNlbHNlCi0gIGlmICgg
aGFzVGFyZ2V0ICkKLSAgewotICAgIC8vIHVua25vd24gZnJhbWUgbmFtZXMgc2hvdWxkIG9wZW4g
aW4gYSBuZXcgd2luZG93LgotICAgIGtodG1sOjpDaGlsZEZyYW1lICpmcmFtZSA9IHJlY3Vyc2l2
ZUZyYW1lUmVxdWVzdCggY1VSTCwgYXJncywgZmFsc2UgKTsKLSAgICBpZiAoIGZyYW1lICkKLSAg
ICB7Ci0gICAgICBhcmdzLm1ldGFEYXRhKClbInJlZmVycmVyIl0gPSBkLT5tX3JlZmVycmVyOwot
ICAgICAgcmVxdWVzdE9iamVjdCggZnJhbWUsIGNVUkwsIGFyZ3MgKTsKLSAgICAgIHJldHVybjsK
LSAgICB9Ci0gIH0KLQotICBpZiAoICFkLT5tX2JDb21wbGV0ZSAmJiAhaGFzVGFyZ2V0ICkKLSAg
ICBjbG9zZVVSTCgpOwotCi0gIGlmICghZC0+bV9yZWZlcnJlci5pc0VtcHR5KCkpCi0gICAgYXJn
cy5tZXRhRGF0YSgpWyJyZWZlcnJlciJdID0gZC0+bV9yZWZlcnJlcjsKLQotICBpZiAoIGJ1dHRv
biA9PSBNaWRCdXR0b24gJiYgKHN0YXRlICYgU2hpZnRCdXR0b24pICkKLSAgewotICAgIEtQYXJ0
czo6V2luZG93QXJncyB3aW5BcmdzOwotICAgIHdpbkFyZ3MubG93ZXJXaW5kb3cgPSB0cnVlOwot
ICAgIEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICpuZXdQYXJ0ID0gMDsKLSAgICBlbWl0IGQtPm1fZXh0
ZW5zaW9uLT5jcmVhdGVOZXdXaW5kb3coIGNVUkwsIGFyZ3MsIHdpbkFyZ3MsIG5ld1BhcnQgKTsK
LSAgICByZXR1cm47Ci0gIH0KLSAgZW1pdCBkLT5tX2V4dGVuc2lvbi0+b3BlblVSTFJlcXVlc3Qo
IGNVUkwsIGFyZ3MgKTsKLSNlbmRpZiAvLyBBUFBMRV9DSEFOR0VTCiB9CiAKLSNpZiAhQVBQTEVf
Q0hBTkdFUwotCi12b2lkIEtIVE1MUGFydDo6c2xvdFZpZXdEb2N1bWVudFNvdXJjZSgpCi17Ci0g
IEtVUkwgdXJsKG1fdXJsKTsKLSAgaWYgKCEodXJsLmlzTG9jYWxGaWxlKCkpICYmIEtIVE1MUGFn
ZUNhY2hlOjpzZWxmKCktPmlzVmFsaWQoZC0+bV9jYWNoZUlkKSkKLSAgewotICAgICBLVGVtcEZp
bGUgc291cmNlRmlsZShRU3RyaW5nOjpudWxsLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIuaHRtbCIp
KTsKLSAgICAgaWYgKHNvdXJjZUZpbGUuc3RhdHVzKCkgPT0gMCkKLSAgICAgewotICAgICAgICBL
SFRNTFBhZ2VDYWNoZTo6c2VsZigpLT5zYXZlRGF0YShkLT5tX2NhY2hlSWQsIHNvdXJjZUZpbGUu
ZGF0YVN0cmVhbSgpKTsKLSAgICAgICAgdXJsID0gS1VSTCgpOwotICAgICAgICB1cmwuc2V0UGF0
aChzb3VyY2VGaWxlLm5hbWUoKSk7Ci0gICAgIH0KLSAgfQotCi0gIC8vICBlbWl0IGQtPm1fZXh0
ZW5zaW9uLT5vcGVuVVJMUmVxdWVzdCggbV91cmwsIEtQYXJ0czo6VVJMQXJncyggZmFsc2UsIDAs
IDAsIFFTdHJpbmc6OmZyb21MYXRpbjEoICJ0ZXh0L3BsYWluIiApICkgKTsKLSAgKHZvaWQpIEtS
dW46OnJ1blVSTCggdXJsLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJ0ZXh0L3BsYWluIikgKTsKLX0K
LQotdm9pZCBLSFRNTFBhcnQ6OnNsb3RWaWV3RnJhbWVTb3VyY2UoKQotewotICBLUGFydHM6OlJl
YWRPbmx5UGFydCAqZnJhbWUgPSBjdXJyZW50RnJhbWUoKTsKLSAgaWYgKCAhZnJhbWUgKQotICAg
IHJldHVybjsKLQotICBLVVJMIHVybCA9IGZyYW1lLT51cmwoKTsKLSAgaWYgKCEodXJsLmlzTG9j
YWxGaWxlKCkpICYmIGZyYW1lLT5pbmhlcml0cygiS0hUTUxQYXJ0IikpCi0gIHsKLSAgICAgICBp
bnQgY2FjaGVJZCA9IHN0YXRpY19jYXN0PEtIVE1MUGFydCAqPihmcmFtZSktPmQtPm1fY2FjaGVJ
ZDsKLQotICAgICAgIGlmIChLSFRNTFBhZ2VDYWNoZTo6c2VsZigpLT5pc1ZhbGlkKGNhY2hlSWQp
KQotICAgICAgIHsKLSAgICAgICAgICAgS1RlbXBGaWxlIHNvdXJjZUZpbGUoUVN0cmluZzo6bnVs
bCwgUVN0cmluZzo6ZnJvbUxhdGluMSgiLmh0bWwiKSk7Ci0gICAgICAgICAgIGlmIChzb3VyY2VG
aWxlLnN0YXR1cygpID09IDApCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIEtIVE1MUGFn
ZUNhY2hlOjpzZWxmKCktPnNhdmVEYXRhKGNhY2hlSWQsIHNvdXJjZUZpbGUuZGF0YVN0cmVhbSgp
KTsKLSAgICAgICAgICAgICAgIHVybCA9IEtVUkwoKTsKLSAgICAgICAgICAgICAgIHVybC5zZXRQ
YXRoKHNvdXJjZUZpbGUubmFtZSgpKTsKLSAgICAgICAgICAgfQotICAgICB9Ci0gIH0KLQotICAo
dm9pZCkgS1J1bjo6cnVuVVJMKCB1cmwsIFFTdHJpbmc6OmZyb21MYXRpbjEoInRleHQvcGxhaW4i
KSApOwotfQotCi1LVVJMIEtIVE1MUGFydDo6YmFja2dyb3VuZFVSTCgpIGNvbnN0Ci17Ci0gIC8v
ICMjIyB3aGF0IGFib3V0IFhNTCBkb2N1bWVudHM/IGdldCBmcm9tIENTUz8KLSAgaWYgKCFkLT5t
X2RvYyB8fCAhZC0+bV9kb2MtPmlzSFRNTERvY3VtZW50KCkpCi0gICAgcmV0dXJuIEtVUkwoKTsK
LQotICBRU3RyaW5nIHJlbFVSTCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwqPihkLT5t
X2RvYyktPmJvZHkoKS0+Z2V0QXR0cmlidXRlKCBiYWNrZ3JvdW5kQXR0ciApLnFzdHJpbmcoKTsK
LQotICByZXR1cm4gS1VSTCggbV91cmwsIHJlbFVSTCApOwotfQotCi12b2lkIEtIVE1MUGFydDo6
c2xvdFNhdmVCYWNrZ3JvdW5kKCkKLXsKLSAgS0lPOjpNZXRhRGF0YSBtZXRhRGF0YTsKLSAgbWV0
YURhdGFbInJlZmVycmVyIl0gPSBkLT5tX3JlZmVycmVyOwotICBLSFRNTFBvcHVwR1VJQ2xpZW50
OjpzYXZlVVJMKCBkLT5tX3ZpZXcsIGkxOG4oIlNhdmUgYmFja2dyb3VuZCBpbWFnZSBhcyIpLCBi
YWNrZ3JvdW5kVVJMKCksIG1ldGFEYXRhICk7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzbG90U2F2
ZURvY3VtZW50KCkKLXsKLSAgS1VSTCBzcmNVUkwoIG1fdXJsICk7Ci0KLSAgaWYgKCBzcmNVUkwu
ZmlsZU5hbWUoZmFsc2UpLmlzRW1wdHkoKSApCi0gICAgc3JjVVJMLnNldEZpbGVOYW1lKCAiaW5k
ZXguaHRtbCIgKTsKLQotICBLSU86Ok1ldGFEYXRhIG1ldGFEYXRhOwotICAvLyBSZWZlcnJlIHVu
a25vd24/Ci0gIEtIVE1MUG9wdXBHVUlDbGllbnQ6OnNhdmVVUkwoIGQtPm1fdmlldywgaTE4bigg
IlNhdmUgQXMiICksIHNyY1VSTCwgbWV0YURhdGEsIGkxOG4oIiouaHRtbCAqLmh0bXxIVE1MIGZp
bGVzIiksIGQtPm1fY2FjaGVJZCApOwotfQotCi12b2lkIEtIVE1MUGFydDo6c2xvdFNlY3VyaXR5
KCkKLXsKLS8vICAga2REZWJ1ZyggNjA1MCApIDw8ICJNZXRhIERhdGE6IiA8PCBlbmRsCi0vLyAg
ICAgICAgICAgICAgICAgICA8PCBkLT5tX3NzbF9wZWVyX2NlcnRfc3ViamVjdAotLy8gICAgICAg
ICAgICAgICAgICAgPDwgZW5kbAotLy8gICAgICAgICAgICAgICAgICAgPDwgZC0+bV9zc2xfcGVl
cl9jZXJ0X2lzc3VlcgotLy8gICAgICAgICAgICAgICAgICAgPDwgZW5kbAotLy8gICAgICAgICAg
ICAgICAgICAgPDwgZC0+bV9zc2xfY2lwaGVyCi0vLyAgICAgICAgICAgICAgICAgICA8PCBlbmRs
Ci0vLyAgICAgICAgICAgICAgICAgICA8PCBkLT5tX3NzbF9jaXBoZXJfZGVzYwotLy8gICAgICAg
ICAgICAgICAgICAgPDwgZW5kbAotLy8gICAgICAgICAgICAgICAgICAgPDwgZC0+bV9zc2xfY2lw
aGVyX3ZlcnNpb24KLS8vICAgICAgICAgICAgICAgICAgIDw8IGVuZGwKLS8vICAgICAgICAgICAg
ICAgICAgIDw8IGQtPm1fc3NsX2dvb2RfZnJvbQotLy8gICAgICAgICAgICAgICAgICAgPDwgZW5k
bAotLy8gICAgICAgICAgICAgICAgICAgPDwgZC0+bV9zc2xfZ29vZF91bnRpbAotLy8gICAgICAg
ICAgICAgICAgICAgPDwgZW5kbAotLy8gICAgICAgICAgICAgICAgICAgPDwgZC0+bV9zc2xfY2Vy
dF9zdGF0ZQotLy8gICAgICAgICAgICAgICAgICAgPDwgZW5kbDsKLQotICBLU1NMSW5mb0RsZyAq
a2lkID0gbmV3IEtTU0xJbmZvRGxnKGQtPm1fc3NsX2luX3VzZSwgd2lkZ2V0KCksICJrc3NsX2lu
Zm9fZGxnIiwgdHJ1ZSApOwotCi0gIGlmIChkLT5tX2JTZWN1cml0eUluUXVlc3Rpb24pCi0JICBr
aWQtPnNldFNlY3VyaXR5SW5RdWVzdGlvbih0cnVlKTsKLQotICBpZiAoZC0+bV9zc2xfaW5fdXNl
KSB7Ci0gICAgS1NTTENlcnRpZmljYXRlICp4ID0gS1NTTENlcnRpZmljYXRlOjpmcm9tU3RyaW5n
KGQtPm1fc3NsX3BlZXJfY2VydGlmaWNhdGUubG9jYWw4Qml0KCkpOwotICAgIGlmICh4KSB7Ci0g
ICAgICAgLy8gU2V0IHRoZSBjaGFpbiBiYWNrIG9udG8gdGhlIGNlcnRpZmljYXRlCi0gICAgICAg
UVN0cmluZ0xpc3QgY2wgPSBRU3RyaW5nTGlzdDo6c3BsaXQoUVN0cmluZygiXG4iKSwgZC0+bV9z
c2xfcGVlcl9jaGFpbik7Ci0gICAgICAgUVB0ckxpc3Q8S1NTTENlcnRpZmljYXRlPiBuY2w7Ci0K
LSAgICAgICBuY2wuc2V0QXV0b0RlbGV0ZSh0cnVlKTsKLSAgICAgICBmb3IgKFFTdHJpbmdMaXN0
OjpJdGVyYXRvciBpdCA9IGNsLmJlZ2luKCk7IGl0ICE9IGNsLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgICAgS1NTTENlcnRpZmljYXRlICp5ID0gS1NTTENlcnRpZmljYXRlOjpmcm9tU3RyaW5nKCgq
aXQpLmxvY2FsOEJpdCgpKTsKLSAgICAgICAgICBpZiAoeSkgbmNsLmFwcGVuZCh5KTsKLSAgICAg
ICB9Ci0KLSAgICAgICBpZiAobmNsLmNvdW50KCkgPiAwKQotICAgICAgICAgIHgtPmNoYWluKCku
c2V0Q2hhaW4obmNsKTsKLQotICAgICAgIGtpZC0+c2V0dXAoeCwKLSAgICAgICAgICAgICAgICAg
IGQtPm1fc3NsX3BlZXJfaXAsCi0gICAgICAgICAgICAgICAgICBtX3VybC51cmwoKSwKLSAgICAg
ICAgICAgICAgICAgIGQtPm1fc3NsX2NpcGhlciwKLSAgICAgICAgICAgICAgICAgIGQtPm1fc3Ns
X2NpcGhlcl9kZXNjLAotICAgICAgICAgICAgICAgICAgZC0+bV9zc2xfY2lwaGVyX3ZlcnNpb24s
Ci0gICAgICAgICAgICAgICAgICBkLT5tX3NzbF9jaXBoZXJfdXNlZF9iaXRzLnRvSW50KCksCi0g
ICAgICAgICAgICAgICAgICBkLT5tX3NzbF9jaXBoZXJfYml0cy50b0ludCgpLAotICAgICAgICAg
ICAgICAgICAgKEtTU0xDZXJ0aWZpY2F0ZTo6S1NTTFZhbGlkYXRpb24pIGQtPm1fc3NsX2NlcnRf
c3RhdGUudG9JbnQoKQotICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAga2lkLT5leGVjKCk7
Ci0gICAgICAgIGRlbGV0ZSB4OwotICAgICB9IGVsc2Uga2lkLT5leGVjKCk7Ci0gIH0gZWxzZSBr
aWQtPmV4ZWMoKTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNsb3RTYXZlRnJhbWUoKQotewotICAg
IGlmICggIWQtPm1fYWN0aXZlRnJhbWUgKQotICAgICAgICByZXR1cm47IC8vIHNob3VsZCBuZXZl
ciBiZSB0aGUgY2FzZSwgYnV0IG9uZSBuZXZlciBrbm93cyA6LSkKLQotICAgIEtVUkwgc3JjVVJM
KCBzdGF0aWNfY2FzdDxLUGFydHM6OlJlYWRPbmx5UGFydCAqPiggZC0+bV9hY3RpdmVGcmFtZSAp
LT51cmwoKSApOwotCi0gICAgaWYgKCBzcmNVUkwuZmlsZU5hbWUoZmFsc2UpLmlzRW1wdHkoKSAp
Ci0gICAgICAgIHNyY1VSTC5zZXRGaWxlTmFtZSggImluZGV4Lmh0bWwiICk7Ci0KLSAgICBLSU86
Ok1ldGFEYXRhIG1ldGFEYXRhOwotICAgIC8vIFJlZmVycmVyIHVua25vd24/Ci0gICAgS0hUTUxQ
b3B1cEdVSUNsaWVudDo6c2F2ZVVSTCggZC0+bV92aWV3LCBpMThuKCAiU2F2ZSBBcyIgKSwgc3Jj
VVJMLCBtZXRhRGF0YSwgaTE4bigiKi5odG1sICouaHRtfEhUTUwgZmlsZXMiKSApOwotfQotCi12
b2lkIEtIVE1MUGFydDo6c2xvdFNldEVuY29kaW5nKCkKLXsKLSAgICAvLyBmaXJzdCBJdGVtIGlz
IGFsd2F5cyBhdXRvCi0gICAgaWYoZC0+bV9wYVNldEVuY29kaW5nLT5jdXJyZW50SXRlbSgpID09
IDApCi0gICAgICAgIHNldEVuY29kaW5nKFFTdHJpbmc6Om51bGwsIGZhbHNlKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgLy8gc3RyaXAgb2YgdGhlIGxhbmd1YWdlIHRvIGdldCB0aGUgcmF3IGVuY29k
aW5nIGFnYWluLgotICAgICAgICBRU3RyaW5nIGVuYyA9IEtHbG9iYWw6OmNoYXJzZXRzKCktPmVu
Y29kaW5nRm9yTmFtZShkLT5tX3BhU2V0RW5jb2RpbmctPmN1cnJlbnRUZXh0KCkpOwotICAgICAg
ICBzZXRFbmNvZGluZyhlbmMsIHRydWUpOwotICAgIH0KLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNs
b3RVc2VTdHlsZXNoZWV0KCkKLXsKLSAgaWYgKGQtPm1fZG9jICYmIGQtPm1fcGFVc2VTdHlsZXNo
ZWV0LT5jdXJyZW50VGV4dCgpICE9IGQtPm1fc2hlZXRVc2VkKSB7Ci0gICAgZC0+bV9zaGVldFVz
ZWQgPSBkLT5tX3BhVXNlU3R5bGVzaGVldC0+Y3VycmVudFRleHQoKTsKLSAgICBkLT5tX2RvYy0+
dXBkYXRlU3R5bGVTZWxlY3RvcigpOwotICB9Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0Ojp1cGRhdGVB
Y3Rpb25zKCkKLXsKLSAgYm9vbCBmcmFtZXMgPSBmYWxzZTsKLQotICBRVmFsdWVMaXN0PGtodG1s
OjpDaGlsZEZyYW1lPjo6Q29uc3RJdGVyYXRvciBpdCA9IGQtPm1fZnJhbWVzLmJlZ2luKCk7Ci0g
IFFWYWx1ZUxpc3Q8a2h0bWw6OkNoaWxkRnJhbWU+OjpDb25zdEl0ZXJhdG9yIGVuZCA9IGQtPm1f
ZnJhbWVzLmVuZCgpOwotICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0ICkKLSAgICAgIGlmICggKCpp
dCkubV90eXBlID09IGtodG1sOjpDaGlsZEZyYW1lOjpGcmFtZSApCi0gICAgICB7Ci0gICAgICAg
ICAgZnJhbWVzID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICBkLT5tX3Bh
Vmlld0ZyYW1lLT5zZXRFbmFibGVkKCBmcmFtZXMgKTsKLSAgZC0+bV9wYVNhdmVGcmFtZS0+c2V0
RW5hYmxlZCggZnJhbWVzICk7Ci0KLSAgaWYgKCBmcmFtZXMgKQotICAgIGQtPm1fcGFGaW5kLT5z
ZXRUZXh0KCBpMThuKCAiJkZpbmQgaW4gRnJhbWUuLi4iICkgKTsKLSAgZWxzZQotICAgIGQtPm1f
cGFGaW5kLT5zZXRUZXh0KCBpMThuKCAiJkZpbmQuLi4iICkgKTsKLQotICBLUGFydHM6OlBhcnQg
KmZyYW1lID0gMDsKLQotICBpZiAoIGZyYW1lcyApCi0gICAgZnJhbWUgPSBjdXJyZW50RnJhbWUo
KTsKLQotICBib29sIGVuYWJsZUZpbmRBbmRTZWxlY3RBbGwgPSB0cnVlOwotCi0gIGlmICggZnJh
bWUgKQotICAgIGVuYWJsZUZpbmRBbmRTZWxlY3RBbGwgPSBmcmFtZS0+aW5oZXJpdHMoICJLSFRN
TFBhcnQiICk7Ci0KLSAgZC0+bV9wYUZpbmQtPnNldEVuYWJsZWQoIGVuYWJsZUZpbmRBbmRTZWxl
Y3RBbGwgKTsKLSAgZC0+bV9wYVNlbGVjdEFsbC0+c2V0RW5hYmxlZCggZW5hYmxlRmluZEFuZFNl
bGVjdEFsbCApOwotCi0gIGJvb2wgZW5hYmxlUHJpbnRGcmFtZSA9IGZhbHNlOwotCi0gIGlmICgg
ZnJhbWUgKQotICB7Ci0gICAgUU9iamVjdCAqZXh0ID0gS1BhcnRzOjpCcm93c2VyRXh0ZW5zaW9u
OjpjaGlsZE9iamVjdCggZnJhbWUgKTsKLSAgICBpZiAoIGV4dCApCi0gICAgICBlbmFibGVQcmlu
dEZyYW1lID0gZXh0LT5tZXRhT2JqZWN0KCktPnNsb3ROYW1lcygpLmNvbnRhaW5zKCAicHJpbnQo
KSIgKTsKLSAgfQotCi0gIGQtPm1fcGFQcmludEZyYW1lLT5zZXRFbmFibGVkKCBlbmFibGVQcmlu
dEZyYW1lICk7Ci0KLSAgUVN0cmluZyBiZ1VSTDsKLQotICAvLyAjIyMgZnJhbWVzCi0gIGlmICgg
ZC0+bV9kb2MgJiYgZC0+bV9kb2MtPmlzSFRNTERvY3VtZW50KCkgJiYgc3RhdGljX2Nhc3Q8SFRN
TERvY3VtZW50SW1wbCo+KGQtPm1fZG9jKS0+Ym9keSgpICYmICFkLT5tX2JDbGVhcmluZyApCi0g
ICAgYmdVUkwgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsKj4oZC0+bV9kb2MpLT5ib2R5
KCktPmdldEF0dHJpYnV0ZSggYmFja2dyb3VuZEF0dHIgKS5xc3RyaW5nKCk7Ci0KLSAgZC0+bV9w
YVNhdmVCYWNrZ3JvdW5kLT5zZXRFbmFibGVkKCAhYmdVUkwuaXNFbXB0eSgpICk7Ci19Ci0KLSNl
bmRpZgogCiBib29sIEtIVE1MUGFydDo6cmVxdWVzdEZyYW1lKCBraHRtbDo6UmVuZGVyUGFydCAq
ZnJhbWUsIGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyAmZnJhbWVOYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFtTmFtZXMs
IGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJhbVZhbHVlcywgYm9vbCBpc0lGcmFtZSApCkBAIC0zMTk0
LDExICsxODg0LDcgQEAgYm9vbCBLSFRNTFBhcnQ6OnJlcXVlc3RGcmFtZSgga2h0bWw6OlJlbgog
CiBRU3RyaW5nIEtIVE1MUGFydDo6cmVxdWVzdEZyYW1lTmFtZSgpCiB7Ci0jaWYgQVBQTEVfQ0hB
TkdFUwogICAgIHJldHVybiBLV1EodGhpcyktPmdlbmVyYXRlRnJhbWVOYW1lKCk7Ci0jZWxzZQot
ICAgIHJldHVybiBRU3RyaW5nOjpmcm9tTGF0aW4xKCI8IS0tZnJhbWUgJTEtLT4iKS5hcmcoZC0+
bV9mcmFtZU5hbWVJZCsrKTsKLSNlbmRpZgogfQogCiBib29sIEtIVE1MUGFydDo6cmVxdWVzdE9i
amVjdCgga2h0bWw6OlJlbmRlclBhcnQgKmZyYW1lLCBjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0
IFFTdHJpbmcgJnNlcnZpY2VUeXBlLApAQCAtMzIyMywxMCArMTkwOSw2IEBAIGJvb2wgS0hUTUxQ
YXJ0OjpyZXF1ZXN0T2JqZWN0KCBraHRtbDo6UmUKIAogYm9vbCBLSFRNTFBhcnQ6OnJlcXVlc3RP
YmplY3QoIGtodG1sOjpDaGlsZEZyYW1lICpjaGlsZCwgY29uc3QgS1VSTCAmdXJsLCBjb25zdCBL
UGFydHM6OlVSTEFyZ3MgJl9hcmdzICkKIHsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICBpZiAoIWNo
ZWNrTGlua1NlY3VyaXR5KHVybCkpCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCiAgIGlmICgg
Y2hpbGQtPm1fYlByZWxvYWRlZCApCiAgIHsKICAgICAvLyBrZERlYnVnKDYwMDUpIDw8ICJLSFRN
TFBhcnQ6OnJlcXVlc3RPYmplY3QgcHJlbG9hZCIgPDwgZW5kbDsKQEAgLTMyMzksMTAgKzE5MjEs
NiBAQCBib29sIEtIVE1MUGFydDo6cmVxdWVzdE9iamVjdCgga2h0bWw6OkNoCiAKICAgS1BhcnRz
OjpVUkxBcmdzIGFyZ3MoIF9hcmdzICk7CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICBpZiAoIGNo
aWxkLT5tX3J1biApCi0gICAgY2hpbGQtPm1fcnVuLT5hYm9ydCgpOwotI2VuZGlmCiAKICAgaWYg
KCBjaGlsZC0+bV9wYXJ0ICYmICFhcmdzLnJlbG9hZCAmJiB1cmxjbXAoIGNoaWxkLT5tX3BhcnQt
PnVybCgpLnVybCgpLCB1cmwudXJsKCksIHRydWUsIHRydWUgKSApCiAgICAgYXJncy5zZXJ2aWNl
VHlwZSA9IGNoaWxkLT5tX3NlcnZpY2VUeXBlOwpAQCAtMzI1MywyOSArMTkzMSwxMiBAQCBib29s
IEtIVE1MUGFydDo6cmVxdWVzdE9iamVjdCgga2h0bWw6OkNoCiAgIGlmICghZC0+bV9yZWZlcnJl
ci5pc0VtcHR5KCkgJiYgIWNoaWxkLT5tX2FyZ3MubWV0YURhdGEoKS5jb250YWlucyggInJlZmVy
cmVyIiApKQogICAgIGNoaWxkLT5tX2FyZ3MubWV0YURhdGEoKVsicmVmZXJyZXIiXSA9IGQtPm1f
cmVmZXJyZXI7CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICBjaGlsZC0+bV9hcmdzLm1ldGFEYXRh
KCkuaW5zZXJ0KCJtYWluX2ZyYW1lX3JlcXVlc3QiLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudFBhcnQoKSA9PSAwID8gIlRSVUUiOiJGQUxTRSIpOwotICBjaGlsZC0+
bV9hcmdzLm1ldGFEYXRhKCkuaW5zZXJ0KCJzc2xfd2FzX2luX3VzZSIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZC0+bV9zc2xfaW5fdXNlID8gIlRSVUUiOiJGQUxTRSIpOwot
ICBjaGlsZC0+bV9hcmdzLm1ldGFEYXRhKCkuaW5zZXJ0KCJzc2xfYWN0aXZhdGVfd2FybmluZ3Mi
LCAiVFJVRSIpOwotI2VuZGlmCiAKICAgLy8gV2Ugd2FudCBhIEtIVE1MUGFydCBpZiB0aGUgSFRN
TCBzYXlzIDxmcmFtZSBzcmM9IiI+IG9yIDxmcmFtZSBzcmM9ImFib3V0OmJsYW5rIj4KICAgaWYg
KCh1cmwuaXNFbXB0eSgpIHx8IHVybC51cmwoKSA9PSAiYWJvdXQ6YmxhbmsiKSAmJiBhcmdzLnNl
cnZpY2VUeXBlLmlzRW1wdHkoKSkKICAgICBhcmdzLnNlcnZpY2VUeXBlID0gUVN0cmluZzo6ZnJv
bUxhdGluMSggInRleHQvaHRtbCIgKTsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgcmV0dXJuIHBy
b2Nlc3NPYmplY3RSZXF1ZXN0KCBjaGlsZCwgdXJsLCBhcmdzLnNlcnZpY2VUeXBlICk7Ci0jZWxz
ZQotICBpZiAoIGFyZ3Muc2VydmljZVR5cGUuaXNFbXB0eSgpICkgewotICAgIGNoaWxkLT5tX3J1
biA9IG5ldyBLSFRNTFJ1biggdGhpcywgY2hpbGQsIHVybCwgY2hpbGQtPm1fYXJncywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5tX3R5cGUgIT0ga2h0bWw6OkNoaWxk
RnJhbWU6OkZyYW1lICk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVsc2UgewotICAgIHJldHVy
biBwcm9jZXNzT2JqZWN0UmVxdWVzdCggY2hpbGQsIHVybCwgYXJncy5zZXJ2aWNlVHlwZSApOwot
ICB9Ci0jZW5kaWYKIH0KIAogYm9vbCBLSFRNTFBhcnQ6OnByb2Nlc3NPYmplY3RSZXF1ZXN0KCBr
aHRtbDo6Q2hpbGRGcmFtZSAqY2hpbGQsIGNvbnN0IEtVUkwgJl91cmwsIGNvbnN0IFFTdHJpbmcg
Jm1pbWV0eXBlICkKQEAgLTMzMDIsNyArMTk2Myw2IEBAIGJvb2wgS0hUTUxQYXJ0Ojpwcm9jZXNz
T2JqZWN0UmVxdWVzdCgga2gKICAgICAgICAgICBlbWl0IGQtPm1fZXh0ZW5zaW9uLT5vcGVuVVJM
Tm90aWZ5KCk7CiAgIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKICAgaWYgKCBjaGlsZC0+bV9wYXJ0
ICkKICAgewogICAgIEtIVE1MUGFydCAqcGFydCA9IHN0YXRpY19jYXN0PEtIVE1MUGFydCAqPigm
KmNoaWxkLT5tX3BhcnQpOwpAQCAtMzMxOSwxMSArMTk3OSw2IEBAIGJvb2wgS0hUTUxQYXJ0Ojpw
cm9jZXNzT2JqZWN0UmVxdWVzdCgga2gKICAgICBLSFRNTFBhcnQgKmtodG1sX3BhcnQgPSBzdGF0
aWNfY2FzdDxLSFRNTFBhcnQgKj4ocGFydCk7CiAgICAgaWYgKGtodG1sX3BhcnQgJiYga2h0bWxf
cGFydC0+aW5oZXJpdHMoIktIVE1MUGFydCIpKQogICAgICAga2h0bWxfcGFydC0+Y2hpbGRCZWdp
bigpOwotI2Vsc2UKLSAgaWYgKCAhY2hpbGQtPm1fc2VydmljZXMuY29udGFpbnMoIG1pbWV0eXBl
ICkgKQotICB7Ci0gICAgS1BhcnRzOjpSZWFkT25seVBhcnQgKnBhcnQgPSBjcmVhdGVQYXJ0KCBk
LT5tX3ZpZXctPnZpZXdwb3J0KCksIGNoaWxkLT5tX25hbWUuYXNjaWkoKSwgdGhpcywgY2hpbGQt
Pm1fbmFtZS5hc2NpaSgpLCBtaW1ldHlwZSwgY2hpbGQtPm1fc2VydmljZU5hbWUsIGNoaWxkLT5t
X3NlcnZpY2VzLCBjaGlsZC0+bV9wYXJhbXMgKTsKLSNlbmRpZgogCiAgICAgaWYgKCFwYXJ0KSB7
CiAgICAgICAgIGNoZWNrRW1pdExvYWRFdmVudCgpOwpAQCAtMzMzNCw5ICsxOTg5LDYgQEAgYm9v
bCBLSFRNTFBhcnQ6OnByb2Nlc3NPYmplY3RSZXF1ZXN0KCBraAogICAgIGlmICggY2hpbGQtPm1f
cGFydCApCiAgICAgewogICAgICAgZGlzY29ubmVjdENoaWxkKGNoaWxkKTsKLSNpZiAhQVBQTEVf
Q0hBTkdFUwotICAgICAgcGFydE1hbmFnZXIoKS0+cmVtb3ZlUGFydCggKEtQYXJ0czo6UmVhZE9u
bHlQYXJ0ICopY2hpbGQtPm1fcGFydCApOwotI2VuZGlmCiAgICAgICBjaGlsZC0+bV9wYXJ0LT5k
ZXJlZigpOwogICAgIH0KIApAQCAtMzM0NCw1MiArMTk5NiwxMyBAQCBib29sIEtIVE1MUGFydDo6
cHJvY2Vzc09iamVjdFJlcXVlc3QoIGtoCiAgICAgaWYgKCBjaGlsZC0+bV9mcmFtZSAmJiBwYXJ0
LT53aWRnZXQoKSApCiAgICAgICBjaGlsZC0+bV9mcmFtZS0+c2V0V2lkZ2V0KCBwYXJ0LT53aWRn
ZXQoKSApOwogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBpZiAoIGNoaWxkLT5tX3R5cGUgIT0g
a2h0bWw6OkNoaWxkRnJhbWU6Ok9iamVjdCApCi0gICAgICBwYXJ0TWFuYWdlcigpLT5hZGRQYXJ0
KCBwYXJ0LCBmYWxzZSApOwotLy8gIGVsc2UKLS8vICAgICAga2REZWJ1Zyg2MDA1KSA8PCAiQUgh
IE5PIEZSQU1FISEhISEiIDw8IGVuZGw7Ci0jZW5kaWYKIAogICAgIGNoaWxkLT5tX3BhcnQgPSBw
YXJ0OwogICAgIGFzc2VydCggKCh2b2lkKikgY2hpbGQtPm1fcGFydCkgIT0gMCk7CiAKICAgICBj
b25uZWN0Q2hpbGQoY2hpbGQpOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICB9Ci0jZWxzZQotICAg
IGNoaWxkLT5tX2V4dGVuc2lvbiA9IEtQYXJ0czo6QnJvd3NlckV4dGVuc2lvbjo6Y2hpbGRPYmpl
Y3QoIHBhcnQgKTsKLQotICAgIGlmICggY2hpbGQtPm1fZXh0ZW5zaW9uICkKLSAgICB7Ci0gICAg
ICBjb25uZWN0KCBjaGlsZC0+bV9leHRlbnNpb24sIFNJR05BTCggb3BlblVSTE5vdGlmeSgpICks
Ci0gICAgICAgICAgICAgICBkLT5tX2V4dGVuc2lvbiwgU0lHTkFMKCBvcGVuVVJMTm90aWZ5KCkg
KSApOwotCi0gICAgICBjb25uZWN0KCBjaGlsZC0+bV9leHRlbnNpb24sIFNJR05BTCggb3BlblVS
TFJlcXVlc3REZWxheWVkKCBjb25zdCBLVVJMICYsIGNvbnN0IEtQYXJ0czo6VVJMQXJncyAmICkg
KSwKLSAgICAgICAgICAgICAgIHRoaXMsIFNMT1QoIHNsb3RDaGlsZFVSTFJlcXVlc3QoIGNvbnN0
IEtVUkwgJiwgY29uc3QgS1BhcnRzOjpVUkxBcmdzICYgKSApICk7Ci0KLSAgICAgIGNvbm5lY3Qo
IGNoaWxkLT5tX2V4dGVuc2lvbiwgU0lHTkFMKCBjcmVhdGVOZXdXaW5kb3coIGNvbnN0IEtVUkwg
JiwgY29uc3QgS1BhcnRzOjpVUkxBcmdzICYgKSApLAotICAgICAgICAgICAgICAgZC0+bV9leHRl
bnNpb24sIFNJR05BTCggY3JlYXRlTmV3V2luZG93KCBjb25zdCBLVVJMICYsIGNvbnN0IEtQYXJ0
czo6VVJMQXJncyAmICkgKSApOwotICAgICAgY29ubmVjdCggY2hpbGQtPm1fZXh0ZW5zaW9uLCBT
SUdOQUwoIGNyZWF0ZU5ld1dpbmRvdyggY29uc3QgS1VSTCAmLCBjb25zdCBLUGFydHM6OlVSTEFy
Z3MgJiwgY29uc3QgS1BhcnRzOjpXaW5kb3dBcmdzICYsIEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICom
ICkgKSwKLSAgICAgICAgICAgICAgIGQtPm1fZXh0ZW5zaW9uLCBTSUdOQUwoIGNyZWF0ZU5ld1dp
bmRvdyggY29uc3QgS1VSTCAmLCBjb25zdCBLUGFydHM6OlVSTEFyZ3MgJiAsIGNvbnN0IEtQYXJ0
czo6V2luZG93QXJncyAmLCBLUGFydHM6OlJlYWRPbmx5UGFydCAqJikgKSApOwotCi0gICAgICBj
b25uZWN0KCBjaGlsZC0+bV9leHRlbnNpb24sIFNJR05BTCggcG9wdXBNZW51KCBjb25zdCBRUG9p
bnQgJiwgY29uc3QgS0ZpbGVJdGVtTGlzdCAmICkgKSwKLSAgICAgICAgICAgICAgIGQtPm1fZXh0
ZW5zaW9uLCBTSUdOQUwoIHBvcHVwTWVudSggY29uc3QgUVBvaW50ICYsIGNvbnN0IEtGaWxlSXRl
bUxpc3QgJiApICkgKTsKLSAgICAgIGNvbm5lY3QoIGNoaWxkLT5tX2V4dGVuc2lvbiwgU0lHTkFM
KCBwb3B1cE1lbnUoIEtYTUxHVUlDbGllbnQgKiwgY29uc3QgUVBvaW50ICYsIGNvbnN0IEtGaWxl
SXRlbUxpc3QgJiApICksCi0gICAgICAgICAgICAgICBkLT5tX2V4dGVuc2lvbiwgU0lHTkFMKCBw
b3B1cE1lbnUoIEtYTUxHVUlDbGllbnQgKiwgY29uc3QgUVBvaW50ICYsIGNvbnN0IEtGaWxlSXRl
bUxpc3QgJiApICkgKTsKLSAgICAgIGNvbm5lY3QoIGNoaWxkLT5tX2V4dGVuc2lvbiwgU0lHTkFM
KCBwb3B1cE1lbnUoIGNvbnN0IFFQb2ludCAmLCBjb25zdCBLVVJMICYsIGNvbnN0IFFTdHJpbmcg
JiwgbW9kZV90ICkgKSwKLSAgICAgICAgICAgICAgIGQtPm1fZXh0ZW5zaW9uLCBTSUdOQUwoIHBv
cHVwTWVudSggY29uc3QgUVBvaW50ICYsIGNvbnN0IEtVUkwgJiwgY29uc3QgUVN0cmluZyAmLCBt
b2RlX3QgKSApICk7Ci0gICAgICBjb25uZWN0KCBjaGlsZC0+bV9leHRlbnNpb24sIFNJR05BTCgg
cG9wdXBNZW51KCBLWE1MR1VJQ2xpZW50ICosIGNvbnN0IFFQb2ludCAmLCBjb25zdCBLVVJMICYs
IGNvbnN0IFFTdHJpbmcgJiwgbW9kZV90ICkgKSwKLSAgICAgICAgICAgICAgIGQtPm1fZXh0ZW5z
aW9uLCBTSUdOQUwoIHBvcHVwTWVudSggS1hNTEdVSUNsaWVudCAqLCBjb25zdCBRUG9pbnQgJiwg
Y29uc3QgS1VSTCAmLCBjb25zdCBRU3RyaW5nICYsIG1vZGVfdCApICkgKTsKLQotICAgICAgY29u
bmVjdCggY2hpbGQtPm1fZXh0ZW5zaW9uLCBTSUdOQUwoIGluZm9NZXNzYWdlKCBjb25zdCBRU3Ry
aW5nICYgKSApLAotICAgICAgICAgICAgICAgZC0+bV9leHRlbnNpb24sIFNJR05BTCggaW5mb01l
c3NhZ2UoIGNvbnN0IFFTdHJpbmcgJiApICkgKTsKLQotICAgICAgY2hpbGQtPm1fZXh0ZW5zaW9u
LT5zZXRCcm93c2VySW50ZXJmYWNlKCBkLT5tX2V4dGVuc2lvbi0+YnJvd3NlckludGVyZmFjZSgp
ICk7Ci0gICAgfQotICB9Ci0jZW5kaWYKIAogICBjaGVja0VtaXRMb2FkRXZlbnQoKTsKICAgLy8g
U29tZSBKUyBjb2RlIGluIHRoZSBsb2FkIGV2ZW50IG1heSBoYXZlIGRlc3Ryb3llZCB0aGUgcGFy
dApAQCAtMzQxOCw3ICsyMDMxLDYgQEAgYm9vbCBLSFRNTFBhcnQ6OnByb2Nlc3NPYmplY3RSZXF1
ZXN0KCBraAogICBpZiAoIGNoaWxkLT5tX2V4dGVuc2lvbiApCiAgICAgY2hpbGQtPm1fZXh0ZW5z
aW9uLT5zZXRVUkxBcmdzKCBjaGlsZC0+bV9hcmdzICk7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAg
IC8vIEluIHRoZXNlIGNhc2VzLCB0aGUgc3luY2hyb25vdXMgbG9hZCB3b3VsZCBoYXZlIGZpbmlz
aGVkCiAgIC8vIGJlZm9yZSB3ZSBjb3VsZCBjb25uZWN0IHRoZSBzaWduYWxzLCBzbyBtYWtlIHN1
cmUgdG8gc2VuZCB0aGUgCiAgIC8vIGNvbXBsZXRlZCgpIHNpZ25hbCBmb3IgdGhlIGNoaWxkIGJ5
IGhhbmQKQEAgLTM0MzMsOTMgKzIwNDUsOSBAQCBib29sIEtIVE1MUGFydDo6cHJvY2Vzc09iamVj
dFJlcXVlc3QoIGtoCiAgICAgICAgICAgcGFydC0+Y2hlY2tDb21wbGV0ZWQoKTsKICAgICAgIH0K
ICAgfQotI2Vsc2UKLSAgaWYodXJsLnByb3RvY29sKCkgPT0gImphdmFzY3JpcHQiIHx8IHVybC51
cmwoKSA9PSAiYWJvdXQ6YmxhbmsiKSB7Ci0gICAgICBpZiAoIWNoaWxkLT5tX3BhcnQtPmluaGVy
aXRzKCJLSFRNTFBhcnQiKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIEtIVE1M
UGFydCogcCA9IHN0YXRpY19jYXN0PEtIVE1MUGFydCo+KHN0YXRpY19jYXN0PEtQYXJ0czo6UmVh
ZE9ubHlQYXJ0ICo+KGNoaWxkLT5tX3BhcnQpKTsKLQotICAgICAgcC0+YmVnaW4oKTsKLSAgICAg
IGlmIChkLT5tX2RvYyAmJiBwLT5kLT5tX2RvYykKLSAgICAgICAgcC0+ZC0+bV9kb2MtPnNldEJh
c2VVUkwoZC0+bV9kb2MtPmJhc2VVUkwoKSk7Ci0gICAgICBpZiAoIXVybC51cmwoKS5zdGFydHNX
aXRoKCJhYm91dDoiKSkgewotICAgICAgICBwLT53cml0ZSh1cmwucGF0aCgpKTsKLSAgICAgIH0g
ZWxzZSB7Ci0JcC0+bV91cmwgPSB1cmw7Ci0gICAgICB9Ci0gICAgICBwLT5lbmQoKTsKLSAgICAg
IHJldHVybiB0cnVlOwotICB9Ci0gIGVsc2UgaWYgKCAhdXJsLmlzRW1wdHkoKSApCi0gIHsKLSAg
ICAgIC8va2REZWJ1ZyggNjA1MCApIDw8ICJvcGVuaW5nICIgPDwgdXJsLnVybCgpIDw8ICIgaW4g
ZnJhbWUgIiA8PCBjaGlsZC0+bV9wYXJ0IDw8IGVuZGw7Ci0gICAgICByZXR1cm4gY2hpbGQtPm1f
cGFydC0+b3BlblVSTCggdXJsICk7Ci0gIH0KLSAgZWxzZQotI2VuZGlmCiAgICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0KLUtQYXJ0czo6UmVhZE9ubHlQYXJ0ICpL
SFRNTFBhcnQ6OmNyZWF0ZVBhcnQoIFFXaWRnZXQgKnBhcmVudFdpZGdldCwgY29uc3QgY2hhciAq
d2lkZ2V0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFFPYmplY3QgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgUVN0cmluZyAmbWltZXR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5n
ICZzZXJ2aWNlTmFtZSwgUVN0cmluZ0xpc3QgJnNlcnZpY2VUeXBlcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJhbXMg
KQotewotICBRU3RyaW5nIGNvbnN0cjsKLSAgaWYgKCAhc2VydmljZU5hbWUuaXNFbXB0eSgpICkK
LSAgICBjb25zdHIuYXBwZW5kKCBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiTmFtZSA9PSAnJTEnIiAp
LmFyZyggc2VydmljZU5hbWUgKSApOwotCi0gIEtUcmFkZXI6Ok9mZmVyTGlzdCBvZmZlcnMgPSBL
VHJhZGVyOjpzZWxmKCktPnF1ZXJ5KCBtaW1ldHlwZSwgIktQYXJ0cy9SZWFkT25seVBhcnQiLCBj
b25zdHIsIFFTdHJpbmc6Om51bGwgKTsKLQotICBpZiAoIG9mZmVycy5pc0VtcHR5KCkgKQotICAg
IHJldHVybiAwTDsKLQotICBLU2VydmljZTo6UHRyIHNlcnZpY2UgPSAqb2ZmZXJzLmJlZ2luKCk7
Ci0KLSAgS0xpYkZhY3RvcnkgKmZhY3RvcnkgPSBLTGliTG9hZGVyOjpzZWxmKCktPmZhY3Rvcnko
IFFGaWxlOjplbmNvZGVOYW1lKHNlcnZpY2UtPmxpYnJhcnkoKSkgKTsKLQotICBpZiAoICFmYWN0
b3J5ICkKLSAgICByZXR1cm4gMEw7Ci0KLSAgS1BhcnRzOjpSZWFkT25seVBhcnQgKnJlcyA9IDBM
OwotCi0gIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSA9ICJLUGFydHM6OlJlYWRPbmx5UGFydCI7Ci0g
IGlmICggc2VydmljZS0+c2VydmljZVR5cGVzKCkuY29udGFpbnMoICJCcm93c2VyL1ZpZXciICkg
KQotICAgIGNsYXNzTmFtZSA9ICJCcm93c2VyL1ZpZXciOwotCi0gIGlmICggZmFjdG9yeS0+aW5o
ZXJpdHMoICJLUGFydHM6OkZhY3RvcnkiICkgKQotICAgIHJlcyA9IHN0YXRpY19jYXN0PEtQYXJ0
czo6UmVhZE9ubHlQYXJ0ICo+KHN0YXRpY19jYXN0PEtQYXJ0czo6RmFjdG9yeSAqPiggZmFjdG9y
eSApLT5jcmVhdGVQYXJ0KCBwYXJlbnRXaWRnZXQsIHdpZGdldE5hbWUsIHBhcmVudCwgbmFtZSwg
Y2xhc3NOYW1lLCBwYXJhbXMgKSk7Ci0gIGVsc2UKLSAgcmVzID0gc3RhdGljX2Nhc3Q8S1BhcnRz
OjpSZWFkT25seVBhcnQgKj4oZmFjdG9yeS0+Y3JlYXRlKCBwYXJlbnRXaWRnZXQsIHdpZGdldE5h
bWUsIGNsYXNzTmFtZSApKTsKLQotICBpZiAoICFyZXMgKQotICAgIHJldHVybiByZXM7Ci0KLSAg
c2VydmljZVR5cGVzID0gc2VydmljZS0+c2VydmljZVR5cGVzKCk7Ci0gIHNlcnZpY2VOYW1lID0g
c2VydmljZS0+bmFtZSgpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLUtQYXJ0czo6UGFydE1hbmFn
ZXIgKktIVE1MUGFydDo6cGFydE1hbmFnZXIoKQotewotICBpZiAoICFkLT5tX21hbmFnZXIgKQot
ICB7Ci0gICAgZC0+bV9tYW5hZ2VyID0gbmV3IEtQYXJ0czo6UGFydE1hbmFnZXIoIGQtPm1fdmll
dy0+dG9wTGV2ZWxXaWRnZXQoKSwgdGhpcywgImtodG1sIHBhcnQgbWFuYWdlciIgKTsKLSAgICBk
LT5tX21hbmFnZXItPnNldEFsbG93TmVzdGVkUGFydHMoIHRydWUgKTsKLSAgICBjb25uZWN0KCBk
LT5tX21hbmFnZXIsIFNJR05BTCggYWN0aXZlUGFydENoYW5nZWQoIEtQYXJ0czo6UGFydCAqICkg
KSwKLSAgICAgICAgICAgICB0aGlzLCBTTE9UKCBzbG90QWN0aXZlRnJhbWVDaGFuZ2VkKCBLUGFy
dHM6OlBhcnQgKiApICkgKTsKLSAgICBjb25uZWN0KCBkLT5tX21hbmFnZXIsIFNJR05BTCggcGFy
dFJlbW92ZWQoIEtQYXJ0czo6UGFydCAqICkgKSwKLSAgICAgICAgICAgICB0aGlzLCBTTE9UKCBz
bG90UGFydFJlbW92ZWQoIEtQYXJ0czo6UGFydCAqICkgKSApOwotICB9Ci0KLSAgcmV0dXJuIGQt
Pm1fbWFuYWdlcjsKLX0KLQotI2VuZGlmCiAKIHZvaWQgS0hUTUxQYXJ0OjpzdWJtaXRGb3JtQWdh
aW4oKQogewpAQCAtMzU0Miw2NSArMjA3MCw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpzdWJtaXRGb3Jt
KCBjb25zdCBjaGFyICoKICAgICByZXR1cm47CiAgIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0g
IC8vIEZvcm0gc2VjdXJpdHkgY2hlY2tzCi0gIC8vCi0KLSAgLyogVGhpcyBpcyBzZXBhcmF0ZSBm
b3IgYSByZWFzb24uICBJdCBoYXMgdG8gYmUgX2JlZm9yZV8gYWxsIHNjcmlwdCwgZXRjLAotICAg
KiBBTkQgSSBkb24ndCB3YW50IHRvIGJyZWFrIGFueXRoaW5nIHRoYXQgdXNlcyBjaGVja0xpbmtT
ZWN1cml0eSgpIGluCi0gICAqIG90aGVyIHBsYWNlcy4KLSAgICovCi0KLSAgLy8gVGhpcyBjYXVz
ZXMgY3Jhc2hlcy4uLiBuZWVkcyB0byBiZSBmaXhlZC4KLSAgaWYgKCFkLT5tX3N1Ym1pdEZvcm0g
JiYgdS5wcm90b2NvbCgpICE9ICJodHRwcyIgJiYgdS5wcm90b2NvbCgpICE9ICJtYWlsdG8iKSB7
Ci0JaWYgKGQtPm1fc3NsX2luX3VzZSkgeyAgICAvLyBHb2luZyBmcm9tIFNTTCAtPiBub25TU0wK
LQkJaW50IHJjID0gS01lc3NhZ2VCb3g6Ondhcm5pbmdDb250aW51ZUNhbmNlbChOVUxMLCBpMThu
KCJXYXJuaW5nOiAgVGhpcyBpcyBhIHNlY3VyZSBmb3JtIGJ1dCBpdCBpcyBhdHRlbXB0aW5nIHRv
IHNlbmQgeW91ciBkYXRhIGJhY2sgdW5lbmNyeXB0ZWQuIgotCQkJCQkiXG5BIHRoaXJkIHBhcnR5
IG1heSBiZSBhYmxlIHRvIGludGVyY2VwdCBhbmQgdmlldyB0aGlzIGluZm9ybWF0aW9uLiIKLQkJ
CQkJIlxuQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGNvbnRpbnVlPyIpLAotCQkJCWkxOG4oIlNT
TCIpKTsKLQkJaWYgKHJjID09IEtNZXNzYWdlQm94OjpDYW5jZWwpCi0JCQlyZXR1cm47Ci0JfSBl
bHNlIHsgICAgICAgICAgICAgICAgICAvLyBHb2luZyBmcm9tIG5vblNTTCAtPiBub25TU0wKLQkJ
S1NTTFNldHRpbmdzIGtzcyh0cnVlKTsKLQkJaWYgKGtzcy53YXJuT25VbmVuY3J5cHRlZCgpKSB7
Ci0JCQlpbnQgcmMgPSBLTWVzc2FnZUJveDo6d2FybmluZ0NvbnRpbnVlQ2FuY2VsKE5VTEwsCi0J
CQkJCWkxOG4oIldhcm5pbmc6IFlvdXIgZGF0YSBpcyBhYm91dCB0byBiZSB0cmFuc21pdHRlZCBh
Y3Jvc3MgdGhlIG5ldHdvcmsgdW5lbmNyeXB0ZWQuIgotCQkJCQkiXG5BcmUgeW91IHN1cmUgeW91
IHdpc2ggdG8gY29udGludWU/IiksCi0JCQkJCWkxOG4oIktERSIpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3Ry
aW5nOjpudWxsLAotCQkJCQkiV2Fybk9uVW5lbmNyeXB0ZWRGb3JtIik7Ci0JCQkvLyBNb3ZlIHRo
aXMgc2V0dGluZyBpbnRvIEtTU0wgaW5zdGVhZAotCQkJS0NvbmZpZyAqY29uZmlnID0ga2FwcC0+
Y29uZmlnKCk7Ci0JCQlRU3RyaW5nIGdycE5vdGlmTXNncyA9IFFTdHJpbmc6OmZyb21MYXRpbjEo
Ik5vdGlmaWNhdGlvbiBNZXNzYWdlcyIpOwotCQkJS0NvbmZpZ0dyb3VwU2F2ZXIgc2F2ZXIoIGNv
bmZpZywgZ3JwTm90aWZNc2dzICk7Ci0KLQkJCWlmICghY29uZmlnLT5yZWFkQm9vbEVudHJ5KCJX
YXJuT25VbmVuY3J5cHRlZEZvcm0iLCB0cnVlKSkgewotCQkJCWNvbmZpZy0+ZGVsZXRlRW50cnko
Ildhcm5PblVuZW5jcnlwdGVkRm9ybSIpOwotCQkJCWNvbmZpZy0+c3luYygpOwotCQkJCWtzcy5z
ZXRXYXJuT25VbmVuY3J5cHRlZChmYWxzZSk7Ci0JCQkJa3NzLnNhdmUoKTsKLSAgICAgICAgCQl9
Ci0JCSAgICAgICAgaWYgKHJjID09IEtNZXNzYWdlQm94OjpDYW5jZWwpCi0JCSAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAJfQotICAgIH0KLSAgfQotCi0gIGlmICghZC0+bV9zdWJtaXRGb3JtICYm
IHUucHJvdG9jb2woKSA9PSAibWFpbHRvIikgewotICAgICBpbnQgcmMgPSBLTWVzc2FnZUJveDo6
d2FybmluZ0NvbnRpbnVlQ2FuY2VsKE5VTEwsIAotICAgICAgICAgICAgICAgICBpMThuKCJUaGlz
IHNpdGUgaXMgYXR0ZW1wdGluZyB0byBzdWJtaXQgZm9ybSBkYXRhIHZpYSBlbWFpbC4iKSwKLSAg
ICAgICAgICAgICAgICAgaTE4bigiS0RFIiksIAotICAgICAgICAgICAgICAgICBRU3RyaW5nOjpu
dWxsLCAKLSAgICAgICAgICAgICAgICAgIldhcm5UcmllZEVtYWlsU3VibWl0Iik7Ci0KLSAgICAg
aWYgKHJjID09IEtNZXNzYWdlQm94OjpDYW5jZWwpIHsKLSAgICAgICAgIHJldHVybjsKLSAgICAg
fQotICB9Ci0KLSAgLy8gRW5kIGZvcm0gc2VjdXJpdHkgY2hlY2tzCi0gIC8vCi0jZW5kaWYgLy8g
QVBQTEVfQ0hBTkdFUwogCiAgIFFTdHJpbmcgdXJsc3RyaW5nID0gdS51cmwoKTsKIApAQCAtMzYx
MiwyNCArMjA4MSwxMiBAQCB2b2lkIEtIVE1MUGFydDo6c3VibWl0Rm9ybSggY29uc3QgY2hhciAq
CiAgICAgcmV0dXJuOwogICB9CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICBpZiAoIWNoZWNrTGlu
a1NlY3VyaXR5KHUsCi0JCQkgaTE4biggIjxxdD5UaGUgZm9ybSB3aWxsIGJlIHN1Ym1pdHRlZCB0
byA8QlI+PEI+JTE8L0I+PEJSPm9uIHlvdXIgbG9jYWwgZmlsZXN5c3RlbS48QlI+RG8geW91IHdh
bnQgdG8gc3VibWl0IHRoZSBmb3JtPyIgKSwKLQkJCSBpMThuKCAiU3VibWl0IiApKSkKLSAgICBy
ZXR1cm47Ci0jZW5kaWYKIAogICBLUGFydHM6OlVSTEFyZ3MgYXJnczsKIAogICBpZiAoIWQtPm1f
cmVmZXJyZXIuaXNFbXB0eSgpKQogICAgICBhcmdzLm1ldGFEYXRhKClbInJlZmVycmVyIl0gPSBk
LT5tX3JlZmVycmVyOwogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgYXJncy5tZXRhRGF0YSgpLmlu
c2VydCgibWFpbl9mcmFtZV9yZXF1ZXN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnRQYXJ0KCkgPT0gMCA/ICJUUlVFIjoiRkFMU0UiKTsKLSAgYXJncy5tZXRhRGF0YSgpLmluc2Vy
dCgic3NsX3dhc19pbl91c2UiLCBkLT5tX3NzbF9pbl91c2UgPyAiVFJVRSI6IkZBTFNFIik7Ci0g
IGFyZ3MubWV0YURhdGEoKS5pbnNlcnQoInNzbF9hY3RpdmF0ZV93YXJuaW5ncyIsICJUUlVFIik7
Ci0jZW5kaWYKICAgYXJncy5mcmFtZU5hbWUgPSBfdGFyZ2V0LmlzRW1wdHkoKSA/IGQtPm1fZG9j
LT5iYXNlVGFyZ2V0KCkgOiBfdGFyZ2V0IDsKIAogICAvLyBIYW5kbGUgbWFpbHRvOiBmb3JtcwpA
QCAtMzY0OSwxMCArMjEwNiw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpzdWJtaXRGb3JtKCBjb25zdCBj
aGFyICoKICAgICAgICAgIH0KICAgICAgIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgICBp
ZiAodHJpZWRUb0F0dGFjaCkKLSAgICAgICAgIEtNZXNzYWdlQm94OjppbmZvcm1hdGlvbihOVUxM
LCBpMThuKCJUaGlzIHNpdGUgYXR0ZW1wdGVkIHRvIGF0dGFjaCBhIGZpbGUgZnJvbSB5b3VyIGNv
bXB1dGVyIGluIHRoZSBmb3JtIHN1Ym1pc3Npb24uIFRoZSBhdHRhY2htZW50IHdhcyByZW1vdmVk
IGZvciB5b3VyIHByb3RlY3Rpb24uIiksIGkxOG4oIktERSIpLCAiV2FyblRyaWVkQXR0YWNoIik7
Ci0jZW5kaWYKIAogICAgICAgLy8gMikgIEFwcGVuZCBib2R5PQogICAgICAgUVN0cmluZyBib2R5
RW5jOwpAQCAtMzY4MSwxMSArMjEzNCw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpzdWJtaXRGb3JtKCBj
b25zdCBjaGFyICoKICAgICBhcmdzLnNldERvUG9zdCggZmFsc2UgKTsKICAgfQogICBlbHNlIHsK
LSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgYXJncy5wb3N0RGF0YSA9IGZvcm1EYXRhOwotI2Vsc2UK
LSAgICBhcmdzLnBvc3REYXRhID0gZm9ybURhdGEuZmxhdHRlbigpOwotI2VuZGlmCiAgICAgYXJn
cy5zZXREb1Bvc3QoIHRydWUgKTsKIAogICAgIC8vIGNvbnN0cnVjdCBzb21lIHVzZXIgaGVhZGVy
cyBpZiBuZWNlc3NhcnkKQEAgLTM3MTEsMzggKzIxNjAsMTAgQEAgdm9pZCBLSFRNTFBhcnQ6OnN1
Ym1pdEZvcm0oIGNvbnN0IGNoYXIgKgogICB9CiAgIGVsc2UKICAgewotI2lmIEFQUExFX0NIQU5H
RVMKICAgICBLV1EodGhpcyktPnN1Ym1pdEZvcm0oIHUsIGFyZ3MpOwotI2Vsc2UKLSAgICBlbWl0
IGQtPm1fZXh0ZW5zaW9uLT5vcGVuVVJMUmVxdWVzdCggdSwgYXJncyApOwotI2VuZGlmCi0gIH0K
LX0KLQotI2lmICFBUFBMRV9DSEFOR0VTCi0KLXZvaWQgS0hUTUxQYXJ0Ojpwb3B1cE1lbnUoIGNv
bnN0IFFTdHJpbmcgJmxpbmtVcmwgKQotewotICBLVVJMIHBvcHVwVVJMOwotICBLVVJMIGxpbmtL
VVJMOwotICBpZiAoIGxpbmtVcmwuaXNFbXB0eSgpICkgLy8gY2xpY2sgb24gYmFja2dyb3VuZAot
ICAgIHBvcHVwVVJMID0gdGhpcy0+dXJsKCk7Ci0gIGVsc2UgeyAgICAgICAgICAgICAgIC8vIGNs
aWNrIG9uIGxpbmsKLSAgICBwb3B1cFVSTCA9IGNvbXBsZXRlVVJMKCBsaW5rVXJsICk7Ci0gICAg
bGlua0tVUkwgPSBwb3B1cFVSTDsKICAgfQotCi0gIEtYTUxHVUlDbGllbnQgKmNsaWVudCA9IG5l
dyBLSFRNTFBvcHVwR1VJQ2xpZW50KCB0aGlzLCBkLT5tX3BvcHVwTWVudVhNTCwgbGlua0tVUkwg
KTsKLQotICBlbWl0IGQtPm1fZXh0ZW5zaW9uLT5wb3B1cE1lbnUoIGNsaWVudCwgUUN1cnNvcjo6
cG9zKCksIHBvcHVwVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJp
bmc6OmZyb21MYXRpbjEoICJ0ZXh0L2h0bWwiICksIFNfSUZSRUcgLyphbHdheXMgYSBmaWxlKi8g
KTsKLQotICBkZWxldGUgY2xpZW50OwotCi0gIGVtaXQgcG9wdXBNZW51KGxpbmtVcmwsIFFDdXJz
b3I6OnBvcygpKTsKIH0KIAotI2VuZGlmCiAKIHZvaWQgS0hUTUxQYXJ0OjpzbG90UGFyZW50Q29t
cGxldGVkKCkKIHsKQEAgLTM3NjMsMTMgKzIxODQsNiBAQCB2b2lkIEtIVE1MUGFydDo6c2xvdENo
aWxkU3RhcnRlZCggS0lPOjpKCiAKICAgaWYgKCBkLT5tX2JDb21wbGV0ZSApCiAgIHsKLSNpZiAw
Ci0gICAgLy8gV0FCQTogTG9va3MgbGlrZSB0aGlzIGJlbG9uZ3Mgc29tZXdoZXJlIGVsc2UKLSAg
ICBpZiAoICFwYXJlbnRQYXJ0KCkgKSAvLyAidG9wbGV2ZWwiIGh0bWwgZG9jdW1lbnQ/IGlmIHll
cywgdGhlbiBub3RpZnkgdGhlIGhvc3RpbmcgYnJvd3NlciBhYm91dCB0aGUgZG9jdW1lbnQgKHVy
bCkgY2hhbmdlcwotICAgIHsKLSAgICAgIGVtaXQgZC0+bV9leHRlbnNpb24tPm9wZW5VUkxOb3Rp
ZnkoKTsKLSAgICB9Ci0jZW5kaWYKICAgICBkLT5tX2JDb21wbGV0ZSA9IGZhbHNlOwogICAgIGVt
aXQgc3RhcnRlZCggam9iICk7CiAgIH0KQEAgLTM3ODYsNDc1ICsyMjAwLDgxIEBAIHZvaWQgS0hU
TUxQYXJ0OjpzbG90Q2hpbGRDb21wbGV0ZWQoIGJvb2wKIAogICBhc3NlcnQoIGNoaWxkICk7CiAK
LSAgY2hpbGQtPm1fYkNvbXBsZXRlZCA9IHRydWU7Ci0gIGNoaWxkLT5tX2FyZ3MgPSBLUGFydHM6
OlVSTEFyZ3MoKTsKLQotICBpZiAoIGNvbXBsZXRlICYmIHBhcmVudFBhcnQoKSA9PSAwICkKLSAg
ICBkLT5tX2JQZW5kaW5nQ2hpbGRSZWRpcmVjdGlvbiA9IHRydWU7Ci0KLSAgY2hlY2tDb21wbGV0
ZWQoKTsKLX0KLQotI2lmICFBUFBMRV9DSEFOR0VTCi0KLXZvaWQgS0hUTUxQYXJ0OjpzbG90Q2hp
bGRVUkxSZXF1ZXN0KCBjb25zdCBLVVJMICZ1cmwsIGNvbnN0IEtQYXJ0czo6VVJMQXJncyAmYXJn
cyApCi17Ci0gIGtodG1sOjpDaGlsZEZyYW1lICpjaGlsZCA9IGNoaWxkRnJhbWUoIHNlbmRlcigp
LT5wYXJlbnQoKSApOwotCi0gIFFTdHJpbmcgZnJhbWVOYW1lID0gYXJncy5mcmFtZU5hbWUubG93
ZXIoKTsKLSAgaWYgKCAhZnJhbWVOYW1lLmlzRW1wdHkoKSApCi0gIHsKLSAgICBpZiAoIGZyYW1l
TmFtZSA9PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiX3RvcCIgKSApCi0gICAgewotICAgICAgZW1p
dCBkLT5tX2V4dGVuc2lvbi0+b3BlblVSTFJlcXVlc3QoIHVybCwgYXJncyApOwotICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBlbHNlIGlmICggZnJhbWVOYW1lID09IFFTdHJpbmc6OmZyb21MYXRp
bjEoICJfYmxhbmsiICkgKQotICAgIHsKLSAgICAgIGVtaXQgZC0+bV9leHRlbnNpb24tPmNyZWF0
ZU5ld1dpbmRvdyggdXJsLCBhcmdzICk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGVsc2Ug
aWYgKCBmcmFtZU5hbWUgPT0gUVN0cmluZzo6ZnJvbUxhdGluMSggIl9wYXJlbnQiICkgKQotICAg
IHsKLSAgICAgIEtQYXJ0czo6VVJMQXJncyBuZXdBcmdzKCBhcmdzICk7Ci0gICAgICBuZXdBcmdz
LmZyYW1lTmFtZSA9IFFTdHJpbmc6Om51bGw7Ci0KLSAgICAgIGVtaXQgZC0+bV9leHRlbnNpb24t
Pm9wZW5VUkxSZXF1ZXN0KCB1cmwsIG5ld0FyZ3MgKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAoIGZyYW1lTmFtZSAhPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiX3NlbGYiICkg
KQotICAgIHsKLSAgICAgIGtodG1sOjpDaGlsZEZyYW1lICpfZnJhbWUgPSByZWN1cnNpdmVGcmFt
ZVJlcXVlc3QoIHVybCwgYXJncyApOwotCi0gICAgICBpZiAoICFfZnJhbWUgKQotICAgICAgewot
ICAgICAgICBlbWl0IGQtPm1fZXh0ZW5zaW9uLT5vcGVuVVJMUmVxdWVzdCggdXJsLCBhcmdzICk7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgY2hpbGQgPSBfZnJhbWU7Ci0gICAg
fQotICB9Ci0KLSAgLy8gVE9ETzogaGFuZGxlIGNoaWxkIHRhcmdldCBjb3JyZWN0bHkhIGN1cnJl
bnRseSB0aGUgc2NyaXB0IGFyZSBhbHdheXMgZXhlY3V0ZWQgZnVyIHRoZSBwYXJlbnQKLSAgUVN0
cmluZyB1cmxTdHIgPSB1cmwudXJsKCk7Ci0gIGlmICggdXJsU3RyLmZpbmQoIFFTdHJpbmc6OmZy
b21MYXRpbjEoICJqYXZhc2NyaXB0OiIgKSwgMCwgZmFsc2UgKSA9PSAwICkgewotICAgICAgZXhl
Y3V0ZVNjcmlwdCggS1VSTDo6ZGVjb2RlX3N0cmluZyggdXJsU3RyLnJpZ2h0KCB1cmxTdHIubGVu
Z3RoKCkgLSAxMSkgKSApOwotICAgICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKCBjaGlsZCApIHsK
LSAgICAgIC8vIEluZm9ybSBzb21lb25lIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNob3cgc29tZXRo
aW5nIGVsc2UuCi0gICAgICBjaGlsZC0+bV9iTm90aWZ5ID0gdHJ1ZTsKLSAgICAgIHJlcXVlc3RP
YmplY3QoIGNoaWxkLCB1cmwsIGFyZ3MgKTsKLSAgfSAgZWxzZSBpZiAoIGZyYW1lTmFtZT09UVN0
cmluZzo6ZnJvbUxhdGluMSgiX3NlbGYiKSApIC8vIHRoaXMgaXMgZm9yIGVtYmVkZGVkIG9iamVj
dHMgKHZpYSA8b2JqZWN0Pikgd2hpY2ggd2FudCB0byByZXBsYWNlIHRoZSBjdXJyZW50IGRvY3Vt
ZW50Ci0gIHsKLSAgICAgIEtQYXJ0czo6VVJMQXJncyBuZXdBcmdzKCBhcmdzICk7Ci0gICAgICBu
ZXdBcmdzLmZyYW1lTmFtZSA9IFFTdHJpbmc6Om51bGw7Ci0gICAgICBlbWl0IGQtPm1fZXh0ZW5z
aW9uLT5vcGVuVVJMUmVxdWVzdCggdXJsLCBuZXdBcmdzICk7Ci0gIH0KLX0KLQotI2VuZGlmIC8v
IEFQUExFX0NIQU5HRVMKLQota2h0bWw6OkNoaWxkRnJhbWUgKktIVE1MUGFydDo6Y2hpbGRGcmFt
ZSggY29uc3QgUU9iamVjdCAqb2JqICkKLXsKLSAgICBhc3NlcnQoIG9iai0+aW5oZXJpdHMoICJL
UGFydHM6OlJlYWRPbmx5UGFydCIgKSApOwotICAgIGNvbnN0IFJlYWRPbmx5UGFydCAqcGFydCA9
IHN0YXRpY19jYXN0PGNvbnN0IFJlYWRPbmx5UGFydCAqPiggb2JqICk7Ci0KLSAgICBGcmFtZUl0
IGl0ID0gZC0+bV9mcmFtZXMuYmVnaW4oKTsKLSAgICBGcmFtZUl0IGVuZCA9IGQtPm1fZnJhbWVz
LmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQgKQotICAgICAgaWYgKCBzdGF0aWNf
Y2FzdDxSZWFkT25seVBhcnQgKj4oKCppdCkubV9wYXJ0KSA9PSBwYXJ0ICkKLSAgICAgICAgcmV0
dXJuICYoKml0KTsKLQotICAgIGl0ID0gZC0+bV9vYmplY3RzLmJlZ2luKCk7Ci0gICAgZW5kID0g
ZC0+bV9vYmplY3RzLmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQgKQotICAgICAg
aWYgKCBzdGF0aWNfY2FzdDxSZWFkT25seVBhcnQgKj4oKCppdCkubV9wYXJ0KSA9PSBwYXJ0ICkK
LSAgICAgICAgcmV0dXJuICYoKml0KTsKLQotICAgIHJldHVybiAwTDsKLX0KLQotS0hUTUxQYXJ0
ICpLSFRNTFBhcnQ6OmZpbmRGcmFtZSggY29uc3QgUVN0cmluZyAmZiApCi17Ci0jaWYgMAotICBr
ZERlYnVnKCkgPDwgIktIVE1MUGFydDo6ZmluZEZyYW1lICciIDw8IGYgPDwgIiciIDw8IGVuZGw7
Ci0gIEZyYW1lSXQgaXQyID0gZC0+bV9mcmFtZXMuYmVnaW4oKTsKLSAgRnJhbWVJdCBlbmQgPSBk
LT5tX2ZyYW1lcy5lbmQoKTsKLSAgZm9yICg7IGl0MiAhPSBlbmQ7ICsraXQyICkKLSAgICAgIGtk
RGVidWcoKSA8PCAiICAtIGhhdmluZyBmcmFtZSAnIiA8PCAoKml0MikubV9uYW1lIDw8ICInIiA8
PCBlbmRsOwotI2VuZGlmCi0KLSAgLy8gIyMjIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2Fw
cGVuZGl4L25vdGVzLmh0bWwjbm90ZXMtZnJhbWVzCi0gIENvbnN0RnJhbWVJdCBpdCA9IGQtPm1f
ZnJhbWVzLmZpbmQoIGYgKTsKLSAgaWYgKCBpdCA9PSBkLT5tX2ZyYW1lcy5lbmQoKSApCi0gIHsK
LSAgICAvL2tkRGVidWcoKSA8PCAiS0hUTUxQYXJ0OjpmaW5kRnJhbWUgZnJhbWUgIiA8PCBmIDw8
ICIgbm90IGZvdW5kIiA8PCBlbmRsOwotICAgIHJldHVybiAwTDsKLSAgfQotICBlbHNlIHsKLSAg
ICBLUGFydHM6OlJlYWRPbmx5UGFydCAqcCA9ICgqaXQpLm1fcGFydDsKLSAgICBpZiAoIHAgJiYg
cC0+aW5oZXJpdHMoICJLSFRNTFBhcnQiICkpCi0gICAgewotICAgICAgLy9rZERlYnVnKCkgPDwg
IktIVE1MUGFydDo6ZmluZEZyYW1lIGZyYW1lICIgPDwgZiA8PCAiIGlzIGEgS0hUTUxQYXJ0LCBv
ayIgPDwgZW5kbDsKLSAgICAgIHJldHVybiAoS0hUTUxQYXJ0KilwOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotI2lmIDAKLSAgICAgIGlmIChwKQotICAgICAgICBrZFdhcm5pbmcoKSA8PCAiS0hU
TUxQYXJ0OjpmaW5kRnJhbWUgZnJhbWUgIiA8PCBmIDw8ICIgZm91bmQgYnV0IGlzbid0IGEgS0hU
TUxQYXJ0ICEgIiA8PCBwLT5jbGFzc05hbWUoKSA8PCBlbmRsOwotICAgICAgZWxzZQotICAgICAg
ICBrZFdhcm5pbmcoKSA8PCAiS0hUTUxQYXJ0OjpmaW5kRnJhbWUgZnJhbWUgIiA8PCBmIDw8ICIg
Zm91bmQgYnV0IG1fcGFydD0wTCIgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgcmV0dXJuIDBMOwot
ICAgIH0KLSAgfQotfQotCi0jaWYgIUFQUExFX0NIQU5HRVMKLQotS1BhcnRzOjpSZWFkT25seVBh
cnQgKktIVE1MUGFydDo6Y3VycmVudEZyYW1lKCkgY29uc3QKLXsKLSAgS1BhcnRzOjpSZWFkT25s
eVBhcnQqIHBhcnQgPSAoS1BhcnRzOjpSZWFkT25seVBhcnQqKSh0aGlzKTsKLSAgLy8gRmluZCBh
Y3RpdmUgcGFydCBpbiBvdXIgZnJhbWUgbWFuYWdlciwgaW4gY2FzZSB3ZSBhcmUgYSBmcmFtZXNl
dAotICAvLyBhbmQga2VlcCBkb2luZyB0aGF0IChpbiBjYXNlIG9mIG5lc3RlZCBmcmFtZXNldHMp
LgotICAvLyBKdXN0IHJlYWxpemVkIHdlIGNvdWxkIGFsc28gZG8gdGhpcyByZWN1cnNpdmVseSwg
Y2FsbGluZyBwYXJ0LT5jdXJyZW50RnJhbWUoKS4uLgotICB3aGlsZSAoIHBhcnQgJiYgcGFydC0+
aW5oZXJpdHMoIktIVE1MUGFydCIpICYmCi0gICAgICAgICAgc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0
ICo+KHBhcnQpLT5kLT5tX2ZyYW1lcy5jb3VudCgpID4gMCApIHsKLSAgICBLSFRNTFBhcnQqIGZy
YW1lc2V0ID0gc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0ICo+KHBhcnQpOwotICAgIHBhcnQgPSBzdGF0
aWNfY2FzdDxLUGFydHM6OlJlYWRPbmx5UGFydCAqPihmcmFtZXNldC0+cGFydE1hbmFnZXIoKS0+
YWN0aXZlUGFydCgpKTsKLSAgICBpZiAoICFwYXJ0ICkgcmV0dXJuIGZyYW1lc2V0OwotICB9Ci0g
IHJldHVybiBwYXJ0OwotfQotCi0jZW5kaWYgLy8gQVBQTEVfQ0hBTkdFUwotCi1ib29sIEtIVE1M
UGFydDo6ZnJhbWVFeGlzdHMoIGNvbnN0IFFTdHJpbmcgJmZyYW1lTmFtZSApCi17Ci0gIENvbnN0
RnJhbWVJdCBpdCA9IGQtPm1fZnJhbWVzLmZpbmQoIGZyYW1lTmFtZSApOwotICBpZiAoIGl0ID09
IGQtPm1fZnJhbWVzLmVuZCgpICkKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gV0FCQTogV2Ug
b25seSByZXR1cm4gdHJ1ZSBpZiB0aGUgY2hpbGQgYWN0dWFsbHkgaGFzIGEgZnJhbWUKLSAgLy8g
c2V0LiBPdGhlcndpc2Ugd2UgbWlnaHQgZmluZCBvdXIgcHJlbG9hZGVkLXNlbHZlLgotICAvLyBU
aGlzIGhhcHBlbnMgd2hlbiB3ZSByZXN0b3JlIHRoZSBmcmFtZXNldC4KLSAgcmV0dXJuICghKCpp
dCkubV9mcmFtZS5pc051bGwoKSk7Ci19Ci0KLUtIVE1MUGFydCAqS0hUTUxQYXJ0OjpwYXJlbnRQ
YXJ0KCkgY29uc3QKLXsKLSAgaWYgKCAhcGFyZW50KCkgfHwgIXBhcmVudCgpLT5pbmhlcml0cygg
IktIVE1MUGFydCIgKSApCi0gICAgcmV0dXJuIDBMOwotCi0gIHJldHVybiAoS0hUTUxQYXJ0ICop
cGFyZW50KCk7Ci19Ci0KLSNpZiAhQVBQTEVfQ0hBTkdFUwotCi1raHRtbDo6Q2hpbGRGcmFtZSAq
S0hUTUxQYXJ0OjpyZWN1cnNpdmVGcmFtZVJlcXVlc3QoIGNvbnN0IEtVUkwgJnVybCwgY29uc3Qg
S1BhcnRzOjpVUkxBcmdzICZhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGNhbGxQYXJlbnQgKQotewotICBGcmFtZUl0IGl0ID0g
ZC0+bV9mcmFtZXMuZmluZCggYXJncy5mcmFtZU5hbWUgKTsKLQotICBpZiAoIGl0ICE9IGQtPm1f
ZnJhbWVzLmVuZCgpICkKLSAgICByZXR1cm4gJigqaXQpOwotCi0gIGl0ID0gZC0+bV9mcmFtZXMu
YmVnaW4oKTsKLSAgRnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1lcy5lbmQoKTsKLSAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCApCi0gICAgaWYgKCAoKml0KS5tX3BhcnQgJiYgKCppdCkubV9wYXJ0LT5p
bmhlcml0cyggIktIVE1MUGFydCIgKSApCi0gICAgewotICAgICAgS0hUTUxQYXJ0ICpjaGlsZFBh
cnQgPSAoS0hUTUxQYXJ0ICopKEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICopKCppdCkubV9wYXJ0Owot
Ci0gICAgICBraHRtbDo6Q2hpbGRGcmFtZSAqcmVzID0gY2hpbGRQYXJ0LT5yZWN1cnNpdmVGcmFt
ZVJlcXVlc3QoIHVybCwgYXJncywgZmFsc2UgKTsKLSAgICAgIGlmICggIXJlcyApCi0gICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICBjaGlsZFBhcnQtPnJlcXVlc3RPYmplY3QoIHJlcywgdXJsLCBh
cmdzICk7Ci0gICAgICByZXR1cm4gMEw7Ci0gICAgfQotCi0gIGlmICggcGFyZW50UGFydCgpICYm
IGNhbGxQYXJlbnQgKQotICB7Ci0gICAga2h0bWw6OkNoaWxkRnJhbWUgKnJlcyA9IHBhcmVudFBh
cnQoKS0+cmVjdXJzaXZlRnJhbWVSZXF1ZXN0KCB1cmwsIGFyZ3MgKTsKLQotICAgIGlmICggcmVz
ICkKLSAgICAgIHBhcmVudFBhcnQoKS0+cmVxdWVzdE9iamVjdCggcmVzLCB1cmwsIGFyZ3MgKTsK
LQotICAgIHJldHVybiAwTDsKLSAgfQotCi0gIHJldHVybiAwTDsKLX0KLQotdm9pZCBLSFRNTFBh
cnQ6OnNhdmVTdGF0ZSggUURhdGFTdHJlYW0gJnN0cmVhbSApCi17Ci0gIGtkRGVidWcoIDYwNTAg
KSA8PCAiS0hUTUxQYXJ0OjpzYXZlU3RhdGUgc2F2aW5nIFVSTCAiIDw8IG1fdXJsLnVybCgpIDw8
IGVuZGw7Ci0KLSAgc3RyZWFtIDw8IG1fdXJsIDw8IChRX0lOVDMyKWQtPm1fdmlldy0+Y29udGVu
dHNYKCkgPDwgKFFfSU5UMzIpZC0+bV92aWV3LT5jb250ZW50c1koKQotICAgICAgICAgPDwgKFFf
SU5UMzIpIGQtPm1fdmlldy0+Y29udGVudHNXaWR0aCgpIDw8IChRX0lOVDMyKSBkLT5tX3ZpZXct
PmNvbnRlbnRzSGVpZ2h0KCkgPDwgKFFfSU5UMzIpIGQtPm1fdmlldy0+bWFyZ2luV2lkdGgoKSA8
PCAoUV9JTlQzMikgZC0+bV92aWV3LT5tYXJnaW5IZWlnaHQoKTsKLQotICAvLyBzYXZlIGxpbmsg
Y3Vyc29yIHBvc2l0aW9uCi0gIGludCBmb2N1c05vZGVOdW1iZXI7Ci0gIGlmICghZC0+bV9mb2N1
c05vZGVSZXN0b3JlZCkKLSAgICAgIGZvY3VzTm9kZU51bWJlciA9IGQtPm1fZm9jdXNOb2RlTnVt
YmVyOwotICBlbHNlIGlmIChkLT5tX2RvYy0+Zm9jdXNOb2RlKCkpCi0gICAgICBmb2N1c05vZGVO
dW1iZXIgPSBkLT5tX2RvYy0+bm9kZUFic0luZGV4KGQtPm1fZG9jLT5mb2N1c05vZGUoKSk7Ci0g
IGVsc2UKLSAgICAgIGZvY3VzTm9kZU51bWJlciA9IC0xOwotICBzdHJlYW0gPDwgZm9jdXNOb2Rl
TnVtYmVyOwotCi0gIC8vIFNhdmUgdGhlIGRvYydzIGNhY2hlIGlkLgotICBzdHJlYW0gPDwgZC0+
bV9jYWNoZUlkOwotCi0gIC8vIFNhdmUgdGhlIHN0YXRlIG9mIHRoZSBkb2N1bWVudCAoTW9zdCBu
b3RhYmx5IHRoZSBzdGF0ZSBvZiBhbnkgZm9ybXMpCi0gIFFTdHJpbmdMaXN0IGRvY1N0YXRlOwot
ICBpZiAoZC0+bV9kb2MpCi0gIHsKLSAgICAgZG9jU3RhdGUgPSBkLT5tX2RvYy0+ZG9jU3RhdGUo
KTsKLSAgfQotICBzdHJlYW0gPDwgZC0+bV9lbmNvZGluZyA8PCBkLT5tX3NoZWV0VXNlZCA8PCBk
b2NTdGF0ZTsKLQotICBzdHJlYW0gPDwgZC0+bV96b29tRmFjdG9yOwotCi0gIC8vIFNhdmUgc3Ns
IGRhdGEKLSAgc3RyZWFtIDw8IGQtPm1fc3NsX2luX3VzZQotICAgICAgICAgPDwgZC0+bV9zc2xf
cGVlcl9jZXJ0aWZpY2F0ZQotICAgICAgICAgPDwgZC0+bV9zc2xfcGVlcl9jaGFpbgotICAgICAg
ICAgPDwgZC0+bV9zc2xfcGVlcl9pcAotICAgICAgICAgPDwgZC0+bV9zc2xfY2lwaGVyCi0gICAg
ICAgICA8PCBkLT5tX3NzbF9jaXBoZXJfZGVzYwotICAgICAgICAgPDwgZC0+bV9zc2xfY2lwaGVy
X3ZlcnNpb24KLSAgICAgICAgIDw8IGQtPm1fc3NsX2NpcGhlcl91c2VkX2JpdHMKLSAgICAgICAg
IDw8IGQtPm1fc3NsX2NpcGhlcl9iaXRzCi0gICAgICAgICA8PCBkLT5tX3NzbF9jZXJ0X3N0YXRl
OwotCi0KLSAgUVN0cmluZ0xpc3QgZnJhbWVOYW1lTHN0LCBmcmFtZVNlcnZpY2VUeXBlTHN0LCBm
cmFtZVNlcnZpY2VOYW1lTHN0OwotICBLVVJMOjpMaXN0IGZyYW1lVVJMTHN0OwotICBRVmFsdWVM
aXN0PFFCeXRlQXJyYXk+IGZyYW1lU3RhdGVCdWZmZXJMc3Q7Ci0KLSAgQ29uc3RGcmFtZUl0IGl0
ID0gZC0+bV9mcmFtZXMuYmVnaW4oKTsKLSAgQ29uc3RGcmFtZUl0IGVuZCA9IGQtPm1fZnJhbWVz
LmVuZCgpOwotICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0ICkKLSAgewotICAgIGlmICggISgqaXQp
Lm1fcGFydCApCi0gICAgICAgY29udGludWU7Ci0KLSAgICBmcmFtZU5hbWVMc3QgPDwgKCppdCku
bV9uYW1lOwotICAgIGZyYW1lU2VydmljZVR5cGVMc3QgPDwgKCppdCkubV9zZXJ2aWNlVHlwZTsK
LSAgICBmcmFtZVNlcnZpY2VOYW1lTHN0IDw8ICgqaXQpLm1fc2VydmljZU5hbWU7Ci0gICAgZnJh
bWVVUkxMc3QgPDwgKCppdCkubV9wYXJ0LT51cmwoKTsKLQotICAgIFFCeXRlQXJyYXkgc3RhdGU7
Ci0gICAgUURhdGFTdHJlYW0gZnJhbWVTdHJlYW0oIHN0YXRlLCBJT19Xcml0ZU9ubHkgKTsKLQot
ICAgIGlmICggKCppdCkubV9leHRlbnNpb24gKQotICAgICAgKCppdCkubV9leHRlbnNpb24tPnNh
dmVTdGF0ZSggZnJhbWVTdHJlYW0gKTsKLQotICAgIGZyYW1lU3RhdGVCdWZmZXJMc3QgPDwgc3Rh
dGU7Ci0gIH0KLQotICAvLyBTYXZlIGZyYW1lIGRhdGEKLSAgc3RyZWFtIDw8IChRX1VJTlQzMikg
ZnJhbWVOYW1lTHN0LmNvdW50KCk7Ci0gIHN0cmVhbSA8PCBmcmFtZU5hbWVMc3QgPDwgZnJhbWVT
ZXJ2aWNlVHlwZUxzdCA8PCBmcmFtZVNlcnZpY2VOYW1lTHN0IDw8IGZyYW1lVVJMTHN0IDw8IGZy
YW1lU3RhdGVCdWZmZXJMc3Q7Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpyZXN0b3JlU3RhdGUoIFFE
YXRhU3RyZWFtICZzdHJlYW0gKQotewotICBLVVJMIHU7Ci0gIFFfSU5UMzIgeE9mZnNldCwgeU9m
ZnNldCwgd0NvbnRlbnRzLCBoQ29udGVudHMsIG1XaWR0aCwgbUhlaWdodDsKLSAgUV9VSU5UMzIg
ZnJhbWVDb3VudDsKLSAgUVN0cmluZ0xpc3QgZnJhbWVOYW1lcywgZnJhbWVTZXJ2aWNlVHlwZXMs
IGRvY1N0YXRlLCBmcmFtZVNlcnZpY2VOYW1lczsKLSAgS1VSTDo6TGlzdCBmcmFtZVVSTHM7Ci0g
IFFWYWx1ZUxpc3Q8UUJ5dGVBcnJheT4gZnJhbWVTdGF0ZUJ1ZmZlcnM7Ci0gIFFWYWx1ZUxpc3Q8
aW50PiBmU2l6ZXM7Ci0gIFFTdHJpbmcgZW5jb2RpbmcsIHNoZWV0VXNlZDsKLSAgbG9uZyBvbGRf
Y2FjaGVJZCA9IGQtPm1fY2FjaGVJZDsKLQotICBzdHJlYW0gPj4gdSA+PiB4T2Zmc2V0ID4+IHlP
ZmZzZXQgPj4gd0NvbnRlbnRzID4+IGhDb250ZW50cyA+PiBtV2lkdGggPj4gbUhlaWdodDsKLQot
ICBkLT5tX3ZpZXctPnNldE1hcmdpbldpZHRoKCBtV2lkdGggKTsKLSAgZC0+bV92aWV3LT5zZXRN
YXJnaW5IZWlnaHQoIG1IZWlnaHQgKTsKLQotICAvLyByZXN0b3JlIGxpbmsgY3Vyc29yIHBvc2l0
aW9uCi0gIC8vIG50aCBub2RlIGlzIGFjdGl2ZS4gdmFsdWUgaXMgc2V0IGluIGNoZWNrQ29tcGxl
dGVkKCkKLSAgc3RyZWFtID4+IGQtPm1fZm9jdXNOb2RlTnVtYmVyOwotICBkLT5tX2ZvY3VzTm9k
ZVJlc3RvcmVkID0gZmFsc2U7Ci0gIGtkRGVidWcoNjA1MCk8PCJuZXcgZm9jdXMgTm9kZSBudW1i
ZXIgaXM6Ijw8ZC0+bV9mb2N1c05vZGVOdW1iZXI8PGVuZGw7Ci0KLSAgc3RyZWFtID4+IGQtPm1f
Y2FjaGVJZDsKLQotICBzdHJlYW0gPj4gZW5jb2RpbmcgPj4gc2hlZXRVc2VkID4+IGRvY1N0YXRl
OwotICBkLT5tX2VuY29kaW5nID0gZW5jb2Rpbmc7Ci0gIGQtPm1fc2hlZXRVc2VkID0gc2hlZXRV
c2VkOwotCi0gIGludCB6b29tRmFjdG9yOwotICBzdHJlYW0gPj4gem9vbUZhY3RvcjsKLSAgc2V0
Wm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKLQotICAvLyBSZXN0b3JlIHNzbCBkYXRhCi0gIHN0cmVh
bSA+PiBkLT5tX3NzbF9pbl91c2UKLSAgICAgICAgID4+IGQtPm1fc3NsX3BlZXJfY2VydGlmaWNh
dGUKLSAgICAgICAgID4+IGQtPm1fc3NsX3BlZXJfY2hhaW4KLSAgICAgICAgID4+IGQtPm1fc3Ns
X3BlZXJfaXAKLSAgICAgICAgID4+IGQtPm1fc3NsX2NpcGhlcgotICAgICAgICAgPj4gZC0+bV9z
c2xfY2lwaGVyX2Rlc2MKLSAgICAgICAgID4+IGQtPm1fc3NsX2NpcGhlcl92ZXJzaW9uCi0gICAg
ICAgICA+PiBkLT5tX3NzbF9jaXBoZXJfdXNlZF9iaXRzCi0gICAgICAgICA+PiBkLT5tX3NzbF9j
aXBoZXJfYml0cwotICAgICAgICAgPj4gZC0+bV9zc2xfY2VydF9zdGF0ZTsKLQotICBkLT5tX3Bh
U2VjdXJpdHktPnNldEljb24oIGQtPm1fc3NsX2luX3VzZSA/ICJlbmNyeXB0ZWQiIDogImRlY3J5
cHRlZCIgKTsKLQotICBzdHJlYW0gPj4gZnJhbWVDb3VudCA+PiBmcmFtZU5hbWVzID4+IGZyYW1l
U2VydmljZVR5cGVzID4+IGZyYW1lU2VydmljZU5hbWVzCi0gICAgICAgICA+PiBmcmFtZVVSTHMg
Pj4gZnJhbWVTdGF0ZUJ1ZmZlcnM7Ci0KLSAgZC0+bV9iQ29tcGxldGUgPSBmYWxzZTsKLSAgZC0+
bV9iTG9hZEV2ZW50RW1pdHRlZCA9IGZhbHNlOwotCi0vLyAgIGtkRGVidWcoIDYwNTAgKSA8PCAi
cmVzdG9yZVN0YWt0ZSgpIGRvY1N0YXRlLmNvdW50KCkgPSAiIDw8IGRvY1N0YXRlLmNvdW50KCkg
PDwgZW5kbDsKLS8vICAga2REZWJ1ZyggNjA1MCApIDw8ICJtX3VybCAiIDw8IG1fdXJsLnVybCgp
IDw8ICIgPC0+ICIgPDwgdS51cmwoKSA8PCBlbmRsOwotLy8gICBrZERlYnVnKCA2MDUwICkgPDwg
Im1fZnJhbWVzLmNvdW50KCkgIiA8PCBkLT5tX2ZyYW1lcy5jb3VudCgpIDw8ICIgPC0+ICIgPDwg
ZnJhbWVDb3VudCA8PCBlbmRsOwotCi0gIGlmIChkLT5tX2NhY2hlSWQgPT0gb2xkX2NhY2hlSWQp
Ci0gIHsKLSAgICAvLyBQYXJ0aWFsIHJlc3RvcmUKLSAgICBjYW5jZWxSZWRpcmVjdGlvbigpOwot
Ci0gICAgRnJhbWVJdCBmSXQgPSBkLT5tX2ZyYW1lcy5iZWdpbigpOwotICAgIEZyYW1lSXQgZkVu
ZCA9IGQtPm1fZnJhbWVzLmVuZCgpOwotCi0gICAgZm9yICg7IGZJdCAhPSBmRW5kOyArK2ZJdCAp
Ci0gICAgICAgICgqZkl0KS5tX2JDb21wbGV0ZWQgPSBmYWxzZTsKLQotICAgIGZJdCA9IGQtPm1f
ZnJhbWVzLmJlZ2luKCk7Ci0KLSAgICBRU3RyaW5nTGlzdDo6Q29uc3RJdGVyYXRvciBmTmFtZUl0
ID0gZnJhbWVOYW1lcy5iZWdpbigpOwotICAgIFFTdHJpbmdMaXN0OjpDb25zdEl0ZXJhdG9yIGZT
ZXJ2aWNlVHlwZUl0ID0gZnJhbWVTZXJ2aWNlVHlwZXMuYmVnaW4oKTsKLSAgICBRU3RyaW5nTGlz
dDo6Q29uc3RJdGVyYXRvciBmU2VydmljZU5hbWVJdCA9IGZyYW1lU2VydmljZU5hbWVzLmJlZ2lu
KCk7Ci0gICAgS1VSTDo6TGlzdDo6Q29uc3RJdGVyYXRvciBmVVJMSXQgPSBmcmFtZVVSTHMuYmVn
aW4oKTsKLSAgICBRVmFsdWVMaXN0PFFCeXRlQXJyYXk+OjpDb25zdEl0ZXJhdG9yIGZCdWZmZXJJ
dCA9IGZyYW1lU3RhdGVCdWZmZXJzLmJlZ2luKCk7Ci0KLSAgICBmb3IgKDsgZkl0ICE9IGZFbmQ7
ICsrZkl0LCArK2ZOYW1lSXQsICsrZlNlcnZpY2VUeXBlSXQsICsrZlNlcnZpY2VOYW1lSXQsICsr
ZlVSTEl0LCArK2ZCdWZmZXJJdCApCi0gICAgewotICAgICAga2h0bWw6OkNoaWxkRnJhbWUgKmNo
aWxkID0gJigqZkl0KTsKLQotLy8gICAgICBrZERlYnVnKCA2MDUwICkgPDwgICpmTmFtZUl0ICA8
PCAiIC0tLS0gIiA8PCAgKmZTZXJ2aWNlVHlwZUl0IDw8IGVuZGw7Ci0KLSAgICAgIGlmICggY2hp
bGQtPm1fbmFtZSAhPSAqZk5hbWVJdCB8fCBjaGlsZC0+bV9zZXJ2aWNlVHlwZSAhPSAqZlNlcnZp
Y2VUeXBlSXQgKQotICAgICAgewotICAgICAgICBjaGlsZC0+bV9iUHJlbG9hZGVkID0gdHJ1ZTsK
LSAgICAgICAgY2hpbGQtPm1fbmFtZSA9ICpmTmFtZUl0OwotICAgICAgICBjaGlsZC0+bV9zZXJ2
aWNlTmFtZSA9ICpmU2VydmljZU5hbWVJdDsKLSAgICAgICAgcHJvY2Vzc09iamVjdFJlcXVlc3Qo
IGNoaWxkLCAqZlVSTEl0LCAqZlNlcnZpY2VUeXBlSXQgKTsKLSAgICAgIH0KLQotICAgICAgaWYg
KCBjaGlsZC0+bV9wYXJ0ICkKLSAgICAgIHsKLSAgICAgICAgY2hpbGQtPm1fYkNvbXBsZXRlZCA9
IGZhbHNlOwotICAgICAgICBpZiAoIGNoaWxkLT5tX2V4dGVuc2lvbiAmJiAhKCpmQnVmZmVySXQp
LmlzRW1wdHkoKSApCi0gICAgICAgIHsKLSAgICAgICAgICBRRGF0YVN0cmVhbSBmcmFtZVN0cmVh
bSggKmZCdWZmZXJJdCwgSU9fUmVhZE9ubHkgKTsKLSAgICAgICAgICBjaGlsZC0+bV9leHRlbnNp
b24tPnJlc3RvcmVTdGF0ZSggZnJhbWVTdHJlYW0gKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgICAgY2hpbGQtPm1fcGFydC0+b3BlblVSTCggKmZVUkxJdCApOwotICAgICAgfQot
ICAgIH0KKyAgY2hpbGQtPm1fYkNvbXBsZXRlZCA9IHRydWU7CisgIGNoaWxkLT5tX2FyZ3MgPSBL
UGFydHM6OlVSTEFyZ3MoKTsKIAotICAgIEtQYXJ0czo6VVJMQXJncyBhcmdzKCBkLT5tX2V4dGVu
c2lvbi0+dXJsQXJncygpICk7Ci0gICAgYXJncy54T2Zmc2V0ID0geE9mZnNldDsKLSAgICBhcmdz
LnlPZmZzZXQgPSB5T2Zmc2V0OwotICAgIGFyZ3MuZG9jU3RhdGUgPSBkb2NTdGF0ZTsgLy8gV0FC
QTogSG93IGFyZSB3ZSBnb2luZyB0byByZXN0b3JlIHRoaXM/PwotICAgIGQtPm1fZXh0ZW5zaW9u
LT5zZXRVUkxBcmdzKCBhcmdzICk7CisgIGlmICggY29tcGxldGUgJiYgcGFyZW50UGFydCgpID09
IDAgKQorICAgIGQtPm1fYlBlbmRpbmdDaGlsZFJlZGlyZWN0aW9uID0gdHJ1ZTsKIAotICAgIGQt
Pm1fdmlldy0+cmVzaXplQ29udGVudHMoIHdDb250ZW50cywgIGhDb250ZW50cyk7Ci0gICAgZC0+
bV92aWV3LT5zZXRDb250ZW50c1BvcyggeE9mZnNldCwgeU9mZnNldCApOwotICB9Ci0gIGVsc2UK
LSAgewotICAgIC8vIEZ1bGwgcmVzdG9yZS4KLSAgICBjbG9zZVVSTCgpOwotICAgIC8vIFdlIG11
c3QgZm9yY2UgYSBjbGVhciBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgc3VyZSB0byBkZWxldGUgYWxs
Ci0gICAgLy8gZnJhbWVzLgotICAgIGQtPm1fYkNsZWFyZWQgPSBmYWxzZTsKLSAgICBjbGVhcigp
OwotICAgIGQtPm1fZW5jb2RpbmcgPSBlbmNvZGluZzsKLSAgICBkLT5tX3NoZWV0VXNlZCA9IHNo
ZWV0VXNlZDsKLQotICAgIFFTdHJpbmdMaXN0OjpDb25zdEl0ZXJhdG9yIGZOYW1lSXQgPSBmcmFt
ZU5hbWVzLmJlZ2luKCk7Ci0gICAgUVN0cmluZ0xpc3Q6OkNvbnN0SXRlcmF0b3IgZk5hbWVFbmQg
PSBmcmFtZU5hbWVzLmVuZCgpOwotCi0gICAgUVN0cmluZ0xpc3Q6OkNvbnN0SXRlcmF0b3IgZlNl
cnZpY2VUeXBlSXQgPSBmcmFtZVNlcnZpY2VUeXBlcy5iZWdpbigpOwotICAgIFFTdHJpbmdMaXN0
OjpDb25zdEl0ZXJhdG9yIGZTZXJ2aWNlTmFtZUl0ID0gZnJhbWVTZXJ2aWNlTmFtZXMuYmVnaW4o
KTsKLSAgICBLVVJMOjpMaXN0OjpDb25zdEl0ZXJhdG9yIGZVUkxJdCA9IGZyYW1lVVJMcy5iZWdp
bigpOwotICAgIFFWYWx1ZUxpc3Q8UUJ5dGVBcnJheT46OkNvbnN0SXRlcmF0b3IgZkJ1ZmZlckl0
ID0gZnJhbWVTdGF0ZUJ1ZmZlcnMuYmVnaW4oKTsKKyAgY2hlY2tDb21wbGV0ZWQoKTsKK30KIAot
ICAgIGZvciAoOyBmTmFtZUl0ICE9IGZOYW1lRW5kOyArK2ZOYW1lSXQsICsrZlNlcnZpY2VUeXBl
SXQsICsrZlNlcnZpY2VOYW1lSXQsICsrZlVSTEl0LCArK2ZCdWZmZXJJdCApCi0gICAgewotICAg
ICAga2h0bWw6OkNoaWxkRnJhbWUgbmV3Q2hpbGQ7Ci0gICAgICBuZXdDaGlsZC5tX2JQcmVsb2Fk
ZWQgPSB0cnVlOwotICAgICAgbmV3Q2hpbGQubV9uYW1lID0gKmZOYW1lSXQ7Ci0gICAgICBuZXdD
aGlsZC5tX3NlcnZpY2VOYW1lID0gKmZTZXJ2aWNlTmFtZUl0OwogCi0vLyAgICAgIGtkRGVidWco
IDYwNTAgKSA8PCAqZk5hbWVJdCA8PCAiIC0tLS0gIiA8PCAqZlNlcnZpY2VUeXBlSXQgPDwgZW5k
bDsKK2todG1sOjpDaGlsZEZyYW1lICpLSFRNTFBhcnQ6OmNoaWxkRnJhbWUoIGNvbnN0IFFPYmpl
Y3QgKm9iaiApCit7CisgICAgYXNzZXJ0KCBvYmotPmluaGVyaXRzKCAiS1BhcnRzOjpSZWFkT25s
eVBhcnQiICkgKTsKKyAgICBjb25zdCBSZWFkT25seVBhcnQgKnBhcnQgPSBzdGF0aWNfY2FzdDxj
b25zdCBSZWFkT25seVBhcnQgKj4oIG9iaiApOwogCi0gICAgICBGcmFtZUl0IGNoaWxkRnJhbWUg
PSBkLT5tX2ZyYW1lcy5hcHBlbmQoIG5ld0NoaWxkICk7CisgICAgRnJhbWVJdCBpdCA9IGQtPm1f
ZnJhbWVzLmJlZ2luKCk7CisgICAgRnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1lcy5lbmQoKTsKKyAg
ICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0ICkKKyAgICAgIGlmICggc3RhdGljX2Nhc3Q8UmVhZE9u
bHlQYXJ0ICo+KCgqaXQpLm1fcGFydCkgPT0gcGFydCApCisgICAgICAgIHJldHVybiAmKCppdCk7
CiAKLSAgICAgIHByb2Nlc3NPYmplY3RSZXF1ZXN0KCAmKCpjaGlsZEZyYW1lKSwgKmZVUkxJdCwg
KmZTZXJ2aWNlVHlwZUl0ICk7CisgICAgaXQgPSBkLT5tX29iamVjdHMuYmVnaW4oKTsKKyAgICBl
bmQgPSBkLT5tX29iamVjdHMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCApCisg
ICAgICBpZiAoIHN0YXRpY19jYXN0PFJlYWRPbmx5UGFydCAqPigoKml0KS5tX3BhcnQpID09IHBh
cnQgKQorICAgICAgICByZXR1cm4gJigqaXQpOwogCi0gICAgICAoKmNoaWxkRnJhbWUpLm1fYlBy
ZWxvYWRlZCA9IHRydWU7CisgICAgcmV0dXJuIDBMOworfQogCi0gICAgICBpZiAoICgqY2hpbGRG
cmFtZSkubV9wYXJ0ICkKLSAgICAgIHsKLSAgICAgICAgaWYgKCAoKmNoaWxkRnJhbWUpLm1fZXh0
ZW5zaW9uICkKLSAgICAgICAgaWYgKCAoKmNoaWxkRnJhbWUpLm1fZXh0ZW5zaW9uICYmICEoKmZC
dWZmZXJJdCkuaXNFbXB0eSgpICkKLSAgICAgICAgewotICAgICAgICAgIFFEYXRhU3RyZWFtIGZy
YW1lU3RyZWFtKCAqZkJ1ZmZlckl0LCBJT19SZWFkT25seSApOwotICAgICAgICAgICgqY2hpbGRG
cmFtZSkubV9leHRlbnNpb24tPnJlc3RvcmVTdGF0ZSggZnJhbWVTdHJlYW0gKTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgICAgKCpjaGlsZEZyYW1lKS5tX3BhcnQtPm9wZW5VUkwo
ICpmVVJMSXQgKTsKLSAgICAgIH0KLSAgICB9CitLSFRNTFBhcnQgKktIVE1MUGFydDo6ZmluZEZy
YW1lKCBjb25zdCBRU3RyaW5nICZmICkKK3sKIAotICAgIEtQYXJ0czo6VVJMQXJncyBhcmdzKCBk
LT5tX2V4dGVuc2lvbi0+dXJsQXJncygpICk7Ci0gICAgYXJncy54T2Zmc2V0ID0geE9mZnNldDsK
LSAgICBhcmdzLnlPZmZzZXQgPSB5T2Zmc2V0OwotICAgIGFyZ3MuZG9jU3RhdGUgPSBkb2NTdGF0
ZTsKLSAgICBkLT5tX2V4dGVuc2lvbi0+c2V0VVJMQXJncyggYXJncyApOwotICAgIGlmICghS0hU
TUxQYWdlQ2FjaGU6OnNlbGYoKS0+aXNWYWxpZChkLT5tX2NhY2hlSWQpKQorICAvLyAjIyMgaHR0
cDovL3d3dy53My5vcmcvVFIvaHRtbDQvYXBwZW5kaXgvbm90ZXMuaHRtbCNub3Rlcy1mcmFtZXMK
KyAgQ29uc3RGcmFtZUl0IGl0ID0gZC0+bV9mcmFtZXMuZmluZCggZiApOworICBpZiAoIGl0ID09
IGQtPm1fZnJhbWVzLmVuZCgpICkKKyAgeworICAgIC8va2REZWJ1ZygpIDw8ICJLSFRNTFBhcnQ6
OmZpbmRGcmFtZSBmcmFtZSAiIDw8IGYgPDwgIiBub3QgZm91bmQiIDw8IGVuZGw7CisgICAgcmV0
dXJuIDBMOworICB9CisgIGVsc2UgeworICAgIEtQYXJ0czo6UmVhZE9ubHlQYXJ0ICpwID0gKCpp
dCkubV9wYXJ0OworICAgIGlmICggcCAmJiBwLT5pbmhlcml0cyggIktIVE1MUGFydCIgKSkKICAg
ICB7Ci0gICAgICAgZC0+bV9yZXN0b3JlZCA9IHRydWU7Ci0gICAgICAgb3BlblVSTCggdSApOwot
ICAgICAgIGQtPm1fcmVzdG9yZWQgPSBmYWxzZTsKKyAgICAgIC8va2REZWJ1ZygpIDw8ICJLSFRN
TFBhcnQ6OmZpbmRGcmFtZSBmcmFtZSAiIDw8IGYgPDwgIiBpcyBhIEtIVE1MUGFydCwgb2siIDw8
IGVuZGw7CisgICAgICByZXR1cm4gKEtIVE1MUGFydCopcDsKICAgICB9CiAgICAgZWxzZQogICAg
IHsKLSAgICAgICByZXN0b3JlVVJMKCB1ICk7CisgICAgICByZXR1cm4gMEw7CiAgICAgfQogICB9
Ci0KIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNob3coKQorCitib29sIEtIVE1MUGFydDo6ZnJhbWVF
eGlzdHMoIGNvbnN0IFFTdHJpbmcgJmZyYW1lTmFtZSApCiB7Ci0gIGlmICggZC0+bV92aWV3ICkK
LSAgICBkLT5tX3ZpZXctPnNob3coKTsKKyAgQ29uc3RGcmFtZUl0IGl0ID0gZC0+bV9mcmFtZXMu
ZmluZCggZnJhbWVOYW1lICk7CisgIGlmICggaXQgPT0gZC0+bV9mcmFtZXMuZW5kKCkgKQorICAg
IHJldHVybiBmYWxzZTsKKworICAvLyBXQUJBOiBXZSBvbmx5IHJldHVybiB0cnVlIGlmIHRoZSBj
aGlsZCBhY3R1YWxseSBoYXMgYSBmcmFtZQorICAvLyBzZXQuIE90aGVyd2lzZSB3ZSBtaWdodCBm
aW5kIG91ciBwcmVsb2FkZWQtc2VsdmUuCisgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHdlIHJlc3Rv
cmUgdGhlIGZyYW1lc2V0LgorICByZXR1cm4gKCEoKml0KS5tX2ZyYW1lLmlzTnVsbCgpKTsKIH0K
IAotdm9pZCBLSFRNTFBhcnQ6OmhpZGUoKQorS0hUTUxQYXJ0ICpLSFRNTFBhcnQ6OnBhcmVudFBh
cnQoKSBjb25zdAogewotICBpZiAoIGQtPm1fdmlldyApCi0gICAgZC0+bV92aWV3LT5oaWRlKCk7
CisgIGlmICggIXBhcmVudCgpIHx8ICFwYXJlbnQoKS0+aW5oZXJpdHMoICJLSFRNTFBhcnQiICkg
KQorICAgIHJldHVybiAwTDsKKworICByZXR1cm4gKEtIVE1MUGFydCAqKXBhcmVudCgpOwogfQog
Ci0jZW5kaWYgLy8gQVBQTEVfQ0hBTkdFUwogCiAjaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00K
IApAQCAtNDI2NywxMSArMjI4Nyw2IEBAIERPTTo6Tm9kZSBLSFRNTFBhcnQ6Om5vZGVVbmRlck1v
dXNlKCkgY28KIAogdm9pZCBLSFRNTFBhcnQ6OmVtaXRTZWxlY3Rpb25DaGFuZ2VkKCkKIHsKLSNp
ZiAhQVBQTEVfQ0hBTkdFUwotICBlbWl0IGQtPm1fZXh0ZW5zaW9uLT5lbmFibGVBY3Rpb24oICJj
b3B5IiwgaGFzU2VsZWN0aW9uKCkgKTsKLSAgZW1pdCBkLT5tX2V4dGVuc2lvbi0+c2VsZWN0aW9u
SW5mbyggc2VsZWN0ZWRUZXh0KCkgKTsKLSAgZW1pdCBzZWxlY3Rpb25DaGFuZ2VkKCk7Ci0jZW5k
aWYKIH0KIAogaW50IEtIVE1MUGFydDo6em9vbUZhY3RvcigpIGNvbnN0CkBAIC00MzE2LDIyICsy
MzMxLDEyIEBAIHZvaWQgS0hUTUxQYXJ0OjpzbG90RGVjWm9vbSgpCiAKIHZvaWQgS0hUTUxQYXJ0
OjpzZXRab29tRmFjdG9yIChpbnQgcGVyY2VudCkKIHsKLSNpZiAhQVBQTEVfQ0hBTkdFUyAvLyBs
aW1pdHMgYXJlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5Ci0gIGlmIChwZXJjZW50IDwgbWluWm9v
bSkgcGVyY2VudCA9IG1pblpvb207Ci0gIGlmIChwZXJjZW50ID4gbWF4Wm9vbSkgcGVyY2VudCA9
IG1heFpvb207Ci0jZW5kaWYKICAgCiAgIGlmIChkLT5tX3pvb21GYWN0b3IgPT0gcGVyY2VudCkg
cmV0dXJuOwogICBkLT5tX3pvb21GYWN0b3IgPSBwZXJjZW50OwogCiAgIGlmKGQtPm1fZG9jKSB7
Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICAgIFFBcHBsaWNhdGlvbjo6c2V0T3ZlcnJpZGVDdXJz
b3IoIHdhaXRDdXJzb3IgKTsKLSNlbmRpZgogICAgIGQtPm1fZG9jLT5yZWNhbGNTdHlsZSggTm9k
ZUltcGw6OkZvcmNlICk7Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBRQXBwbGljYXRpb246OnJl
c3RvcmVPdmVycmlkZUN1cnNvcigpOwotI2VuZGlmCiAgIH0KIAogICBDb25zdEZyYW1lSXQgaXQg
PSBkLT5tX2ZyYW1lcy5iZWdpbigpOwpAQCAtNDM0MiwxMCArMjM0Nyw2IEBAIHZvaWQgS0hUTUxQ
YXJ0OjpzZXRab29tRmFjdG9yIChpbnQgcGVyY2UKICAgICAgIHN0YXRpY19jYXN0PEtIVE1MUGFy
dCo+KCBwICktPnNldFpvb21GYWN0b3IoZC0+bV96b29tRmFjdG9yKTsKICAgICB9CiAKLSNpZiAh
QVBQTEVfQ0hBTkdFUwotICBkLT5tX3BhRGVjWm9vbUZhY3Rvci0+c2V0RW5hYmxlZCggZC0+bV96
b29tRmFjdG9yID4gbWluWm9vbSApOwotICBkLT5tX3BhSW5jWm9vbUZhY3Rvci0+c2V0RW5hYmxl
ZCggZC0+bV96b29tRmFjdG9yIDwgbWF4Wm9vbSApOwotI2VuZGlmCiAKICAgaWYgKGQtPm1fZG9j
ICYmIGQtPm1fZG9jLT5yZW5kZXJlcigpICYmIGQtPm1fZG9jLT5yZW5kZXJlcigpLT5uZWVkc0xh
eW91dCgpKQogICAgIHZpZXcoKS0+bGF5b3V0KCk7CkBAIC00MzgzLDQwICsyMzg0LDkgQEAgUVN0
cmluZyBLSFRNTFBhcnQ6Omxhc3RNb2RpZmllZCgpIGNvbnN0CiAgIHJldHVybiBkLT5tX2xhc3RN
b2RpZmllZDsKIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0KLXZvaWQgS0hUTUxQYXJ0OjpzbG90
TG9hZEltYWdlcygpCi17Ci0gIGlmIChkLT5tX2RvYyApCi0gICAgZC0+bV9kb2MtPmRvY0xvYWRl
cigpLT5zZXRBdXRvbG9hZEltYWdlcyggIWQtPm1fZG9jLT5kb2NMb2FkZXIoKS0+YXV0b2xvYWRJ
bWFnZXMoKSApOwotCi0gIENvbnN0RnJhbWVJdCBpdCA9IGQtPm1fZnJhbWVzLmJlZ2luKCk7Ci0g
IENvbnN0RnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1lcy5lbmQoKTsKLSAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCApCi0gICAgaWYgKCAhKCAqaXQgKS5tX3BhcnQuaXNOdWxsKCkgJiYgKCAqaXQgKS5t
X3BhcnQtPmluaGVyaXRzKCAiS0hUTUxQYXJ0IiApICkgewotICAgICAgS1BhcnRzOjpSZWFkT25s
eVBhcnQqIHAgPSAoICppdCApLm1fcGFydDsKLSAgICAgIHN0YXRpY19jYXN0PEtIVE1MUGFydCo+
KCBwICktPnNsb3RMb2FkSW1hZ2VzKCk7Ci0gICAgfQotfQotCi0jZW5kaWYKIAogdm9pZCBLSFRN
TFBhcnQ6OnJlcGFyc2VDb25maWd1cmF0aW9uKCkKIHsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICBz
ZXRBdXRvbG9hZEltYWdlcyggc2V0dGluZ3MtPmF1dG9Mb2FkSW1hZ2VzKCkgKTsKLSAgaWYgKGQt
Pm1fZG9jKQotICAgICBkLT5tX2RvYy0+ZG9jTG9hZGVyKCktPnNldFNob3dBbmltYXRpb25zKCBz
ZXR0aW5ncy0+c2hvd0FuaW1hdGlvbnMoKSApOwotCi0gIGQtPm1fYkpTY3JpcHRFbmFibGVkID0g
c2V0dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQobV91cmwuaG9zdCgpKTsKLSAgZC0+bV9iSlNj
cmlwdERlYnVnRW5hYmxlZCA9IHNldHRpbmdzLT5pc0phdmFTY3JpcHREZWJ1Z0VuYWJsZWQoKTsK
LSAgZC0+bV9iSmF2YUVuYWJsZWQgPSBzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZChtX3VybC5ob3N0
KCkpOwotICBkLT5tX2JQbHVnaW5zRW5hYmxlZCA9IHNldHRpbmdzLT5pc1BsdWdpbnNFbmFibGVk
KG1fdXJsLmhvc3QoKSk7Ci0gIGRlbGV0ZSBkLT5tX3NldHRpbmdzOwotICBkLT5tX3NldHRpbmdz
ID0gbmV3IEtIVE1MU2V0dGluZ3MoKktIVE1MRmFjdG9yeTo6ZGVmYXVsdEhUTUxTZXR0aW5ncygp
KTsKLQotICBRU3RyaW5nIHVzZXJTdHlsZVNoZWV0ID0gS0hUTUxGYWN0b3J5OjpkZWZhdWx0SFRN
TFNldHRpbmdzKCktPnVzZXJTdHlsZVNoZWV0KCk7Ci0jZWxzZQogICBzZXRBdXRvbG9hZEltYWdl
cyggZC0+bV9zZXR0aW5ncy0+YXV0b0xvYWRJbWFnZXMoKSApOwogICBpZiAoZC0+bV9kb2MpCiAg
ICAgIGQtPm1fZG9jLT5kb2NMb2FkZXIoKS0+c2V0U2hvd0FuaW1hdGlvbnMoIGQtPm1fc2V0dGlu
Z3MtPnNob3dBbmltYXRpb25zKCkgKTsKQEAgLTQ0MjcsMTkgKzIzOTcsMTIgQEAgdm9pZCBLSFRN
TFBhcnQ6OnJlcGFyc2VDb25maWd1cmF0aW9uKCkKICAgZC0+bV9iUGx1Z2luc0VuYWJsZWQgPSBk
LT5tX3NldHRpbmdzLT5pc1BsdWdpbnNFbmFibGVkKG1fdXJsLmhvc3QoKSk7CiAKICAgUVN0cmlu
ZyB1c2VyU3R5bGVTaGVldCA9IGQtPm1fc2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0KCk7Ci0jZW5k
aWYKICAgaWYgKCAhdXNlclN0eWxlU2hlZXQuaXNFbXB0eSgpICkKICAgICBzZXRVc2VyU3R5bGVT
aGVldCggS1VSTCggdXNlclN0eWxlU2hlZXQgKSApOwogICBlbHNlCiAgICAgc2V0VXNlclN0eWxl
U2hlZXQoIFFTdHJpbmcoKSApOwogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgUUFwcGxpY2F0aW9u
OjpzZXRPdmVycmlkZUN1cnNvciggd2FpdEN1cnNvciApOwotI2VuZGlmCiAgIGlmKGQtPm1fZG9j
KSBkLT5tX2RvYy0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwotI2lmICFBUFBMRV9DSEFOR0VTCi0g
IFFBcHBsaWNhdGlvbjo6cmVzdG9yZU92ZXJyaWRlQ3Vyc29yKCk7Ci0jZW5kaWYKIH0KIAogUVN0
cmluZ0xpc3QgS0hUTUxQYXJ0OjpmcmFtZU5hbWVzKCkgY29uc3QKQEAgLTQ0NzcsMjUgKzI0NDAs
NiBAQCBLSFRNTFBhcnQgKktIVE1MUGFydDo6Y2hpbGRGcmFtZU5hbWVkKGNvCiB9CiAKIAotI2lm
ICFBUFBMRV9DSEFOR0VTCi0KLWJvb2wgS0hUTUxQYXJ0OjpvcGVuVVJMSW5GcmFtZSggY29uc3Qg
S1VSTCAmdXJsLCBjb25zdCBLUGFydHM6OlVSTEFyZ3MgJnVybEFyZ3MgKQotewotICBGcmFtZUl0
IGl0ID0gZC0+bV9mcmFtZXMuZmluZCggdXJsQXJncy5mcmFtZU5hbWUgKTsKLQotICBpZiAoIGl0
ID09IGQtPm1fZnJhbWVzLmVuZCgpICkKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gSW5mb3Jt
IHNvbWVvbmUgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc2hvdyBzb21ldGhpbmcgZWxzZS4KLSAgaWYg
KCAhdXJsQXJncy5sb2NrSGlzdG9yeSgpICkKLSAgICAgIGVtaXQgZC0+bV9leHRlbnNpb24tPm9w
ZW5VUkxOb3RpZnkoKTsKLQotICByZXF1ZXN0T2JqZWN0KCAmKCppdCksIHVybCwgdXJsQXJncyAp
OwotCi0gIHJldHVybiB0cnVlOwotfQotCi0jZW5kaWYKIAogdm9pZCBLSFRNTFBhcnQ6OnNldERO
REVuYWJsZWQoIGJvb2wgYiApCiB7CkBAIC00NzE5LDEyICsyNjYzLDYgQEAgdm9pZCBLSFRNTFBh
cnQ6OmtodG1sTW91c2VQcmVzc0V2ZW50KGtodAogICAgICAgICBkLT5tX3N0clNlbGVjdGVkVVJM
VGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpLnFzdHJpbmcoKTsKICAgICB9CiAKLSNpZiAhQVBQTEVf
Q0hBTkdFUwotICAgIGlmIChtb3VzZS0+YnV0dG9uKCkgPT0gUmlnaHRCdXR0b24pIHsKLSAgICAg
ICAgcG9wdXBNZW51KGQtPm1fc3RyU2VsZWN0ZWRVUkwpOwotICAgICAgICBkLT5tX3N0clNlbGVj
dGVkVVJMID0gZC0+bV9zdHJTZWxlY3RlZFVSTFRhcmdldCA9IFFTdHJpbmc6Om51bGw7Ci0gICAg
fQotI2VuZGlmCiAKICAgICBpZiAobW91c2UtPmJ1dHRvbigpID09IExlZnRCdXR0b24gfHwgbW91
c2UtPmJ1dHRvbigpID09IE1pZEJ1dHRvbikgewogICAgICAgICBkLT5tX2JNb3VzZVByZXNzZWQg
PSB0cnVlOwpAQCAtNDc1MywxMTQgKzI2OTEsNiBAQCB2b2lkIEtIVE1MUGFydDo6a2h0bWxNb3Vz
ZURvdWJsZUNsaWNrRXZlCiB7CiB9CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotCi1ib29sIEtIVE1M
UGFydDo6aGFuZGxlTW91c2VNb3ZlRXZlbnREcmFnKGtodG1sOjpNb3VzZU1vdmVFdmVudCAqZXZl
bnQpCi17Ci0jaWZkZWYgUVRfTk9fRFJBR0FORERST1AKLQlyZXR1cm4gZmFsc2U7Ci0jZWxzZQot
Ci0JUU1vdXNlRXZlbnQgKm1vdXNlID0gZXZlbnQtPnFtb3VzZUV2ZW50KCk7Ci0JTm9kZUltcGwg
KmlubmVyTm9kZSA9IGV2ZW50LT5pbm5lck5vZGUoKTsKLQotCWlmIChkLT5tX2JNb3VzZVByZXNz
ZWQgJiYgKCFkLT5tX3N0clNlbGVjdGVkVVJMLmlzRW1wdHkoKSB8fCAoaW5uZXJOb2RlICYmIGlu
bmVyTm9kZS0+aWQoKSA9PSBJRF9JTUcpKSAmJgotCSAgIChkLT5tX2RyYWdTdGFydFBvcyAtIG1v
dXNlLT5wb3MoKSkubWFuaGF0dGFuTGVuZ3RoKCkgPiBLR2xvYmFsU2V0dGluZ3M6OmRuZEV2ZW50
RGVsYXkoKSAmJgotCSAgICBkLT5tX2JEbmQgJiYgZC0+bV9tb3VzZVByZXNzTm9kZSA9PSBpbm5l
ck5vZGUpIHsKLQotCQlRUGl4bWFwIHA7Ci0JCVFEcmFnT2JqZWN0ICpkcmFnID0gMDsKLQkJaWYg
KCFkLT5tX3N0clNlbGVjdGVkVVJMLmlzRW1wdHkoKSkgewotCQkJS1VSTCB1KCBjb21wbGV0ZVVS
TCggZC0+bV9zdHJTZWxlY3RlZFVSTCkgKTsKLQkJCUtVUkxEcmFnKiB1cmxEcmFnID0gS1VSTERy
YWc6Om5ld0RyYWcoIHUsIGQtPm1fdmlldy0+dmlld3BvcnQoKSApOwotCQkJaWYgKCAhZC0+bV9y
ZWZlcnJlci5pc0VtcHR5KCkgKQotCQkJdXJsRHJhZy0+bWV0YURhdGEoKVsicmVmZXJyZXIiXSA9
IGQtPm1fcmVmZXJyZXI7Ci0JCQlkcmFnID0gdXJsRHJhZzsKLQkJCXAgPSBLTWltZVR5cGU6OnBp
eG1hcEZvclVSTCh1LCAwLCBLSWNvbjo6RGVza3RvcCwgS0ljb246OlNpemVNZWRpdW0pOwotCQl9
IAotCQllbHNlIHsKLQkJCUhUTUxJbWFnZUVsZW1lbnRJbXBsICppID0gc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudEltcGwgKj4oaW5uZXJOb2RlKTsKLQkJCWlmIChpKSB7Ci0JCQkJS011bHRp
cGxlRHJhZyAqbWRyYWcgPSBuZXcgS011bHRpcGxlRHJhZyggZC0+bV92aWV3LT52aWV3cG9ydCgp
KTsKLQkJCQltZHJhZy0+YWRkRHJhZ09iamVjdChuZXcgUUltYWdlRHJhZyhpLT5jdXJyZW50SW1h
Z2UoKSwgMEwpKTsKLQkJCQlLVVJMIHUoIGNvbXBsZXRlVVJMKCBraHRtbDo6cGFyc2VVUkwoaS0+
Z2V0QXR0cmlidXRlKHNyY0F0dHIpKS5xc3RyaW5nKCkpKTsKLQkJCQlLVVJMRHJhZyogdXJsRHJh
ZyA9IEtVUkxEcmFnOjpuZXdEcmFnKHUsIDBMKTsKLQkJCQlpZiAoIWQtPm1fcmVmZXJyZXIuaXNF
bXB0eSgpKQotCQkJCQl1cmxEcmFnLT5tZXRhRGF0YSgpWyJyZWZlcnJlciJdID0gZC0+bV9yZWZl
cnJlcjsKLQkJCQltZHJhZy0+YWRkRHJhZ09iamVjdCggdXJsRHJhZyApOwotCQkJCWRyYWcgPSBt
ZHJhZzsKLQkJCQlwID0gS01pbWVUeXBlOjptaW1lVHlwZSgiaW1hZ2UvcG5nIiktPnBpeG1hcChL
SWNvbjo6RGVza3RvcCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmICggIXAuaXNOdWxsKCkgKQotCQkJ
ZHJhZy0+c2V0UGl4bWFwKHApOwotCQkKLQkJc3RvcEF1dG9TY3JvbGwoKTsKLQkJaWYoZHJhZykK
LQkJCWRyYWctPmRyYWcoKTsKLQkJCi0JCS8vIHdoZW4gd2UgZmluaXNoIG91ciBkcmFnLCB3ZSBu
ZWVkIHRvIHVuZG8gb3VyIG1vdXNlIHByZXNzCi0JCWQtPm1fYk1vdXNlUHJlc3NlZCA9IGZhbHNl
OwotCQlkLT5tX3N0clNlbGVjdGVkVVJMID0gZC0+bV9zdHJTZWxlY3RlZFVSTFRhcmdldCA9IFFT
dHJpbmc6Om51bGw7Ci0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlyZXR1cm4gZmFsc2U7Ci0jZW5k
aWYgLy8gUVRfTk9fRFJBR0FORERST1AKLX0KLQotYm9vbCBLSFRNTFBhcnQ6OmhhbmRsZU1vdXNl
TW92ZUV2ZW50T3ZlcihraHRtbDo6TW91c2VNb3ZlRXZlbnQgKmV2ZW50KQotewotCS8vIE1vdXNl
IGNsaWNrZWQuIERvIG5vdGhpbmcuCi0JaWYgKGQtPm1fYk1vdXNlUHJlc3NlZCkgewotCQlyZXR1
cm4gZmFsc2U7Ci0JfQotCi0JLy8gVGhlIG1vdXNlIGlzIG92ZXIgc29tZXRoaW5nCi0JaWYgKHVy
bC5sZW5ndGgoKSkgewotCQlib29sIHNoaWZ0UHJlc3NlZCA9IChtb3VzZS0+c3RhdGUoKSAmIFNo
aWZ0QnV0dG9uKTsKLQotCQkvLyBJbWFnZSBtYXAKLQkJaWYgKGlubmVyTm9kZSAmJiBpbm5lck5v
ZGUtPmlkKCkgPT0gSURfSU1HKSB7Ci0JCQlIVE1MSW1hZ2VFbGVtZW50SW1wbCAqaSA9IHN0YXRp
Y19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsICo+KGlubmVyTm9kZSk7Ci0JCQlpZiAoaSAmJiBp
LT5pc1NlcnZlck1hcCgpKSB7Ci0JCQkJa2h0bWw6OlJlbmRlck9iamVjdCAqciA9IGktPnJlbmRl
cmVyKCk7Ci0JCQkJaWYocikgewotCQkJCQlpbnQgYWJzeCwgYWJzeSwgdngsIHZ5OwotCQkJCQly
LT5hYnNvbHV0ZVBvc2l0aW9uKGFic3gsIGFic3kpOwotCQkJCQl2aWV3KCktPmNvbnRlbnRzVG9W
aWV3cG9ydCggYWJzeCwgYWJzeSwgdngsIHZ5ICk7Ci0JCQkJCi0JCQkJCWludCB4KG1vdXNlLT54
KCkgLSB2eCk7Ci0JCQkJCWludCB5KG1vdXNlLT55KCkgLSB2eSk7Ci0JCQkJCi0JCQkJCWQtPm1f
b3ZlclVSTCA9IHVybC5xc3RyaW5nKCkgKyBRU3RyaW5nKCI/JTEsJTIiKS5hcmcoeCkuYXJnKHkp
OwotCQkJCQlkLT5tX292ZXJVUkxUYXJnZXQgPSB0YXJnZXQucXN0cmluZygpOwotCQkJCQlvdmVy
VVJMKGQtPm1fb3ZlclVSTCwgdGFyZ2V0LnFzdHJpbmcoKSwgc2hpZnRQcmVzc2VkKTsKLQkJCQkJ
cmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCS8vIG5vcm1hbCBsaW5rCi0JCWlmIChk
LT5tX292ZXJVUkwuaXNFbXB0eSgpIHx8IGQtPm1fb3ZlclVSTCAhPSB1cmwgfHwgZC0+bV9vdmVy
VVJMVGFyZ2V0ICE9IHRhcmdldCkgewotCQkJZC0+bV9vdmVyVVJMID0gdXJsLnFzdHJpbmcoKTsK
LQkJCWQtPm1fb3ZlclVSTFRhcmdldCA9IHRhcmdldC5xc3RyaW5nKCk7Ci0JCQlvdmVyVVJMKGQt
Pm1fb3ZlclVSTCwgdGFyZ2V0LnFzdHJpbmcoKSwgc2hpZnRQcmVzc2VkKTsKLQkJfQotCX0KLQll
bHNlIHsgLy8gTm90IG92ZXIgYSBsaW5rLi4uCi0JCWlmICghZC0+bV9vdmVyVVJMLmlzRW1wdHko
KSkgeyAvLyBhbmQgd2Ugd2VyZSBvdmVyIGEgbGluayAgLT4gcmVzZXQgdG8gImRlZmF1bHQgc3Rh
dHVzYmFyIHRleHQiCi0JCQlkLT5tX292ZXJVUkwgPSBkLT5tX292ZXJVUkxUYXJnZXQgPSBRU3Ry
aW5nOjpudWxsOwotCQkJZW1pdCBvblVSTChRU3RyaW5nOjpudWxsKTsKLQkJCS8vIERlZmF1bHQg
c3RhdHVzYmFyIHRleHQgY2FuIGJlIHNldCBmcm9tIGphdmFzY3JpcHQuIE90aGVyd2lzZSBpdCdz
IGVtcHR5LgotCQkJZW1pdCBzZXRTdGF0dXNCYXJUZXh0KGQtPm1fa2pzRGVmYXVsdFN0YXR1c0Jh
clRleHQpOwotCQl9Ci0JfQotCQotCXJldHVybiB0cnVlOwotfQotCi0jZW5kaWYgLy8gQVBQTEVf
Q0hBTkdFUwogCiB2b2lkIEtIVE1MUGFydDo6aGFuZGxlTW91c2VNb3ZlRXZlbnRTZWxlY3Rpb24o
a2h0bWw6Ok1vdXNlTW92ZUV2ZW50ICpldmVudCkKIHsKQEAgLTQ5MTcsMTMgKzI3NDcsNiBAQCB2
b2lkIEtIVE1MUGFydDo6aGFuZGxlTW91c2VNb3ZlRXZlbnRTZWxlCiAKIHZvaWQgS0hUTUxQYXJ0
OjpraHRtbE1vdXNlTW92ZUV2ZW50KGtodG1sOjpNb3VzZU1vdmVFdmVudCAqZXZlbnQpCiB7Ci0j
aWYgIUFQUExFX0NIQU5HRVMKLSAgICBpZiAoaGFuZGxlTW91c2VNb3ZlRXZlbnREcmFnKGV2ZW50
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhbmRsZU1vdXNlTW92ZUV2ZW50T3Zlcihl
dmVudCkpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgogCiAgICAgaGFuZGxlTW91c2VNb3ZlRXZl
bnRTZWxlY3Rpb24oZXZlbnQpOwkJCiB9CkBAIC01MDA3LDE0MSArMjgzMCwxNSBAQCB2b2lkIEtI
VE1MUGFydDo6a2h0bWxEcmF3Q29udGVudHNFdmVudCggCiB7CiB9CiAKLSNpZiAhQVBQTEVfQ0hB
TkdFUwotCi12b2lkIEtIVE1MUGFydDo6Z3VpQWN0aXZhdGVFdmVudCggS1BhcnRzOjpHVUlBY3Rp
dmF0ZUV2ZW50ICpldmVudCApCi17Ci0gIGlmICggZXZlbnQtPmFjdGl2YXRlZCgpICkKLSAgewot
ICAgIGVtaXRTZWxlY3Rpb25DaGFuZ2VkKCk7Ci0gICAgZW1pdCBkLT5tX2V4dGVuc2lvbi0+ZW5h
YmxlQWN0aW9uKCAicHJpbnQiLCBkLT5tX2RvYyAhPSAwICk7Ci0KLSAgICBpZiAoICFkLT5tX3Nl
dHRpbmdzLT5hdXRvTG9hZEltYWdlcygpICYmIGQtPm1fcGFMb2FkSW1hZ2VzICkKLSAgICB7Ci0g
ICAgICAgIFFQdHJMaXN0PEtBY3Rpb24+IGxzdDsKLSAgICAgICAgbHN0LmFwcGVuZCggZC0+bV9w
YUxvYWRJbWFnZXMgKTsKLSAgICAgICAgcGx1Z0FjdGlvbkxpc3QoICJsb2FkSW1hZ2VzIiwgbHN0
ICk7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzbG90RmluZCgpCi17Ci0gIEtI
VE1MUGFydCAqcGFydCA9IHN0YXRpY19jYXN0PEtIVE1MUGFydCAqPiggY3VycmVudEZyYW1lKCkg
KTsKLSAgaWYgKCFwYXJ0KQotICAgIHJldHVybjsKLQotICBpZiAoIXBhcnQtPmluaGVyaXRzKCJL
SFRNTFBhcnQiKSApCi0gIHsKLSAgICAgIGtkRXJyb3IoNjAwMCkgPDwgInNsb3RGaW5kOiBwYXJ0
IGlzIGEgIiA8PCBwYXJ0LT5jbGFzc05hbWUoKSA8PCAiLCBjYW4ndCBkbyBhIHNlYXJjaCBpbnRv
IGl0IiA8PCBlbmRsOwotICAgICAgcmV0dXJuOwotICB9Ci0KLSAgLy8gdXNlIHRoZSBwYXJ0J3Mg
KHBvc3NpYmx5IGZyYW1lKSB3aWRnZXQgYXMgcGFyZW50IHdpZGdldCwgc28gdGhhdCBpdCBnZXRz
Ci0gIC8vIHByb3Blcmx5IGRlc3Ryb3llZCB3aGVuIHRoZSAocG9zc2libGUpIGZyYW1lIGRpZXMK
LSAgaWYgKCAhZC0+bV9maW5kRGlhbG9nICkgewotICAgICAgZC0+bV9maW5kRGlhbG9nID0gbmV3
IEtIVE1MRmluZCggcGFydCwgcGFydC0+d2lkZ2V0KCksICJraHRtbGZpbmQiICk7Ci0gICAgICBj
b25uZWN0KCBkLT5tX2ZpbmREaWFsb2csIFNJR05BTCggZG9uZSgpICksCi0gICAgICAgICAgICAg
ICB0aGlzLCBTTE9UKCBzbG90RmluZERvbmUoKSApICk7Ci0gICAgICBjb25uZWN0KCBkLT5tX2Zp
bmREaWFsb2csIFNJR05BTCggZGVzdHJveWVkKCkgKSwKLSAgICAgICAgICAgICAgIHRoaXMsIFNM
T1QoIHNsb3RGaW5kRGlhbG9nRGVzdHJveWVkKCkgKSApOwotICB9Ci0KLSAgZC0+bV9maW5kRGlh
bG9nLT5zZXRQYXJ0KCBwYXJ0ICk7Ci0gIGQtPm1fZmluZERpYWxvZy0+c2V0VGV4dCggcGFydC0+
ZC0+bV9sYXN0RmluZFN0YXRlLnRleHQgKTsKLSAgZC0+bV9maW5kRGlhbG9nLT5zZXRDYXNlU2Vu
c2l0aXZlKCBwYXJ0LT5kLT5tX2xhc3RGaW5kU3RhdGUuY2FzZVNlbnNpdGl2ZSApOwotICBkLT5t
X2ZpbmREaWFsb2ctPnNldERpcmVjdGlvbiggcGFydC0+ZC0+bV9sYXN0RmluZFN0YXRlLmRpcmVj
dGlvbiApOwotCi0gIGQtPm1fZmluZERpYWxvZy0+c2hvdygpOwotCi0gIGQtPm1fcGFGaW5kLT5z
ZXRFbmFibGVkKCBmYWxzZSApOwotfQotCi12b2lkIEtIVE1MUGFydDo6c2xvdEZpbmREb25lKCkK
LXsKLSAgICBhc3NlcnQoIGQtPm1fZmluZERpYWxvZyApOwotCi0gICAgS0hUTUxQYXJ0ICpwYXJ0
ID0gZC0+bV9maW5kRGlhbG9nLT5wYXJ0KCk7Ci0KLSAgICAvLyB0aGlzIGNvZGUgYWN0dWFsbHkg
YmVsb25ncyBpbnRvIHNvbWUgc2F2ZVN0YXRlKCkgbWV0aG9kIGluCi0gICAgLy8gS0hUTUxGaW5k
LCBidXQgYXMgd2UncmUgc2F2aW5nIGludG8gdGhlIHByaXZhdGUgZGF0YSBzZWN0aW9uIG9mCi0g
ICAgLy8gdGhlIHBhcnQgd2UgaGF2ZSB0byBkbyBpdCBoZXJlIChubyB3YXkgdG8gYWNjZXNzIGl0
IGZyb20gdGhlIG91dHNpZGUKLSAgICAvLyBhcyBpdCBpcyBkZWZpbmVkIG9ubHkgaW4ga2h0bWxf
cGFydC5jcHApIChTaW1vbikKLSAgICBwYXJ0LT5kLT5tX2xhc3RGaW5kU3RhdGUudGV4dCA9IGQt
Pm1fZmluZERpYWxvZy0+Z2V0VGV4dCgpOwotICAgIHBhcnQtPmQtPm1fbGFzdEZpbmRTdGF0ZS5j
YXNlU2Vuc2l0aXZlID0gZC0+bV9maW5kRGlhbG9nLT5jYXNlX3NlbnNpdGl2ZSgpOwotICAgIHBh
cnQtPmQtPm1fbGFzdEZpbmRTdGF0ZS5kaXJlY3Rpb24gPSBkLT5tX2ZpbmREaWFsb2ctPmdldF9k
aXJlY3Rpb24oKTsKLQotICAgIGQtPm1fcGFGaW5kLT5zZXRFbmFibGVkKCB0cnVlICk7Ci19Ci0K
LXZvaWQgS0hUTUxQYXJ0OjpzbG90RmluZERpYWxvZ0Rlc3Ryb3llZCgpCi17Ci0gIGFzc2VydCgg
c2VuZGVyKCkgPT0gZC0+bV9maW5kRGlhbG9nICk7Ci0KLSAgZC0+bV9maW5kRGlhbG9nID0gMDsK
LSAgZC0+bV9wYUZpbmQtPnNldEVuYWJsZWQoIHRydWUgKTsKLX0KLQotdm9pZCBLSFRNTFBhcnQ6
OnNsb3RQcmludEZyYW1lKCkKLXsKLSAgaWYgKCBkLT5tX2ZyYW1lcy5jb3VudCgpID09IDAgKQot
ICAgIHJldHVybjsKLQotICBLUGFydHM6OlJlYWRPbmx5UGFydCAqZnJhbWUgPSBjdXJyZW50RnJh
bWUoKTsKLSAgaWYgKCFmcmFtZSkKLSAgICByZXR1cm47Ci0KLSAgS1BhcnRzOjpCcm93c2VyRXh0
ZW5zaW9uICpleHQgPSBLUGFydHM6OkJyb3dzZXJFeHRlbnNpb246OmNoaWxkT2JqZWN0KCBmcmFt
ZSApOwotCi0gIGlmICggIWV4dCApCi0gICAgcmV0dXJuOwotCi0gIFFNZXRhT2JqZWN0ICptbyA9
IGV4dC0+bWV0YU9iamVjdCgpOwotCi0gIGludCBpZHggPSBtby0+ZmluZFNsb3QoICJwcmludCgp
IiwgVFJVRSApOwotICBpZiAoIGlkeCA+PSAwICkgewotICAgIFFVT2JqZWN0IG9bIDEgXTsKLSAg
ICBleHQtPnF0X2ludm9rZSggaWR4LCBvICk7Ci0gIH0KLX0KLQotdm9pZCBLSFRNTFBhcnQ6OnNs
b3RTZWxlY3RBbGwoKQotewotICBLUGFydHM6OlJlYWRPbmx5UGFydCAqcGFydCA9IGN1cnJlbnRG
cmFtZSgpOwotICBpZiAocGFydCAmJiBwYXJ0LT5pbmhlcml0cygiS0hUTUxQYXJ0IikpCi0gICAg
c3RhdGljX2Nhc3Q8S0hUTUxQYXJ0ICo+KHBhcnQpLT5zZWxlY3RBbGwoKTsKLX0KLQotI2VuZGlm
IC8vICFBUFBMRV9DSEFOR0VTCiAKIHZvaWQgS0hUTUxQYXJ0OjpzdGFydEF1dG9TY3JvbGwoKQog
ewotI2lmICFBUFBMRV9DSEFOR0VTCi0gICBjb25uZWN0KCZkLT5tX3Njcm9sbFRpbWVyLCBTSUdO
QUwoIHRpbWVvdXQoKSApLCB0aGlzLCBTTE9UKCBzbG90QXV0b1Njcm9sbCgpICkpOwotICAgZC0+
bV9zY3JvbGxUaW1lci5zdGFydCgxMDAsIGZhbHNlKTsKLSNlbmRpZgogfQogCiB2b2lkIEtIVE1M
UGFydDo6c3RvcEF1dG9TY3JvbGwoKQogewotI2lmICFBUFBMRV9DSEFOR0VTCi0gICBkaXNjb25u
ZWN0KCZkLT5tX3Njcm9sbFRpbWVyLCBTSUdOQUwoIHRpbWVvdXQoKSApLCB0aGlzLCBTTE9UKCBz
bG90QXV0b1Njcm9sbCgpICkpOwotICAgaWYgKGQtPm1fc2Nyb2xsVGltZXIuaXNBY3RpdmUoKSkK
LSAgICAgICBkLT5tX3Njcm9sbFRpbWVyLnN0b3AoKTsKLSNlbmRpZgotfQotCi0jaWYgIUFQUExF
X0NIQU5HRVMKLQotdm9pZCBLSFRNTFBhcnQ6OnNsb3RBdXRvU2Nyb2xsKCkKLXsKLSAgICBpZiAo
ZC0+bV92aWV3KQotICAgICAgZC0+bV92aWV3LT5kb0F1dG9TY3JvbGwoKTsKLSAgICBlbHNlCi0g
ICAgICBzdG9wQXV0b1Njcm9sbCgpOyAvLyBTYWZldHkKIH0KIAotI2VuZGlmCiAKIHZvaWQgS0hU
TUxQYXJ0OjpzZWxlY3RBbGwoKQogewpAQCAtNTE2MSwxMSArMjg1OCw3IEBAIHZvaWQgS0hUTUxQ
YXJ0OjpzZWxlY3RBbGwoKQogCiBib29sIEtIVE1MUGFydDo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm5ld3NlbGVjdGlvbikgY29uc3QKIHsKLSNpZiBB
UFBMRV9DSEFOR0VTCiAgICAgcmV0dXJuIEtXUSh0aGlzKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KGQtPm1fc2VsZWN0aW9uLCBuZXdzZWxlY3Rpb24sIG5ld3NlbGVjdGlvbi5zdGFydEFmZmluaXR5
KCksIGZhbHNlKTsKLSNlbHNlCi0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKIH0KIAogYm9vbCBL
SFRNTFBhcnQ6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBSYW5nZUltcGwgKnJhbmdlKSBjb25z
dApAQCAtNTIxMiwxNiArMjkwNSwxMiBAQCB2b2lkIEtIVE1MUGFydDo6YXBwbGllZEVkaXRpbmco
RWRpdENvbW1hCiAgICAgICAgIGFzc2VydChjbWQuaXNUeXBpbmdDb21tYW5kKCkpOwogICAgIH0K
ICAgICBlbHNlIHsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIC8vIE9ubHkgcmVnaXN0ZXIg
YSBuZXcgdW5kbyBjb21tYW5kIGlmIHRoZSBjb21tYW5kIHBhc3NlZCBpbiBpcwogICAgICAgICAv
LyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCBjb21tYW5kCiAgICAgICAgIEtXUSh0aGlzKS0+cmVn
aXN0ZXJDb21tYW5kRm9yVW5kbyhjbWQpOwotI2VuZGlmCiAgICAgICAgIGQtPm1fbGFzdEVkaXRD
b21tYW5kID0gY21kOwogICAgIH0KLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgS1dRKHRoaXMpLT5y
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKLSNlbmRpZgogfQogCiB2b2lkIEtIVE1MUGFydDo6
dW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciAmY21kKQpAQCAtNTIyOSwxMCArMjkxOCw4
IEBAIHZvaWQgS0hUTUxQYXJ0Ojp1bmFwcGxpZWRFZGl0aW5nKEVkaXRDb20KICAgICBpZiAoc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKGNtZC5zdGFydGluZ1NlbGVjdGlvbigpKSkgewogICAgICAgICBz
ZXRTZWxlY3Rpb24oY21kLnN0YXJ0aW5nU2VsZWN0aW9uKCksIHRydWUpOwogICAgIH0KLSNpZiBB
UFBMRV9DSEFOR0VTCiAgICAgS1dRKHRoaXMpLT5yZWdpc3RlckNvbW1hbmRGb3JSZWRvKGNtZCk7
CiAgICAgS1dRKHRoaXMpLT5yZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKLSNlbmRpZgogICAg
IGQtPm1fbGFzdEVkaXRDb21tYW5kID0gRWRpdENvbW1hbmRQdHI6OmVtcHR5Q29tbWFuZCgpOwog
fQogCkBAIC01MjQxLDEwICsyOTI4LDggQEAgdm9pZCBLSFRNTFBhcnQ6OnJlYXBwbGllZEVkaXRp
bmcoRWRpdENvbQogICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY21kLmVuZGluZ1NlbGVj
dGlvbigpKSkgewogICAgICAgICBzZXRTZWxlY3Rpb24oY21kLmVuZGluZ1NlbGVjdGlvbigpLCB0
cnVlKTsKICAgICB9Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIEtXUSh0aGlzKS0+cmVnaXN0ZXJD
b21tYW5kRm9yVW5kbyhjbWQpOwogICAgIEtXUSh0aGlzKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRl
bnRzKCk7Ci0jZW5kaWYKICAgICBkLT5tX2xhc3RFZGl0Q29tbWFuZCA9IEVkaXRDb21tYW5kUHRy
OjplbXB0eUNvbW1hbmQoKTsKIH0KIApAQCAtNTI3MSw0NiArMjk1Niw2IEBAIHZvaWQgS0hUTUxQ
YXJ0OjpjbGVhclR5cGluZ1N0eWxlKCkKICAgICBzZXRUeXBpbmdTdHlsZSgwKTsKIH0KIAotI2lm
ICFBUFBMRV9DSEFOR0VTCi0KLWJvb2wgS0hUTUxQYXJ0OjpjaGVja0xpbmtTZWN1cml0eShjb25z
dCBLVVJMICZsaW5rVVJMLGNvbnN0IFFTdHJpbmcgJm1lc3NhZ2UsIGNvbnN0IFFTdHJpbmcgJmJ1
dHRvbikKLXsKLSAgLy8gU2VjdXJpdHkgY2hlY2sgb24gdGhlIGxpbmsuCi0gIC8vIEtVUkwgdSgg
dXJsICk7IFdyb25nISEgUmVsYXRpdmUgVVJMIGNvdWxkIGJlIG1pcy1pbnRlcnByZXRlZCEhISAo
REEpCi0gIFFTdHJpbmcgbGlua1Byb3RvID0gbGlua1VSTC5wcm90b2NvbCgpLmxvd2VyKCk7Ci0g
IFFTdHJpbmcgcHJvdG8gPSBtX3VybC5wcm90b2NvbCgpLmxvd2VyKCk7Ci0KLSAgaWYgKCAhbGlu
a1Byb3RvLmlzRW1wdHkoKSAmJiAhcHJvdG8uaXNFbXB0eSgpICYmCi0gICAgICAgKCBsaW5rUHJv
dG8gPT0gImNnaSIgfHwgbGlua1Byb3RvID09ICJmaWxlIiApICYmCi0gICAgICAgcHJvdG8gIT0g
ImZpbGUiICYmIHByb3RvICE9ICJjZ2kiICYmIHByb3RvICE9ICJtYW4iICYmIHByb3RvICE9ICJh
Ym91dCIpCi0gIHsKLSAgICBUb2tlbml6ZXIgKnRva2VuaXplciA9IGQtPm1fZG9jLT50b2tlbml6
ZXIoKTsKLSAgICBpZiAodG9rZW5pemVyKQotICAgICAgdG9rZW5pemVyLT5zZXRPbkhvbGQodHJ1
ZSk7Ci0KLSAgICBpbnQgcmVzcG9uc2UgPSBLTWVzc2FnZUJveDo6Q2FuY2VsOwotICAgIGlmICgh
bWVzc2FnZS5pc0VtcHR5KCkpCi0gICAgewotCSAgICByZXNwb25zZSA9IEtNZXNzYWdlQm94Ojp3
YXJuaW5nQ29udGludWVDYW5jZWwoIDAsCi0JCQkJCQkJICAgbWVzc2FnZS5hcmcobGlua1VSTC51
cmwoKSksCi0JCQkJCQkJICAgaTE4biggIlNlY3VyaXR5IFdhcm5pbmciICksCi0JCQkJCQkJICAg
YnV0dG9uKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQkgICAgS01lc3NhZ2VCb3g6OmVycm9y
KCAwLAotCQkJCWkxOG4oICI8cXQ+VGhpcyB1bnRydXN0ZWQgcGFnZSBjb250YWlucyBhIGxpbms8
QlI+PEI+JTE8L0I+PEJSPnRvIHlvdXIgbG9jYWwgZmlsZSBzeXN0ZW0uIikuYXJnKGxpbmtVUkwu
dXJsKCkpLAotCQkJCWkxOG4oICJTZWN1cml0eSBBbGVydCIgKSk7Ci0gICAgfQotCi0gICAgaWYg
KHRva2VuaXplcikKLSAgICAgICB0b2tlbml6ZXItPnNldE9uSG9sZChmYWxzZSk7Ci0gICAgcmV0
dXJuIChyZXNwb25zZT09S01lc3NhZ2VCb3g6OkNvbnRpbnVlKTsKLSAgfQotICByZXR1cm4gdHJ1
ZTsKLX0KLQotI2VuZGlmCiAKIFFWYXJpYW50IEtIVE1MUGFydDo6ZXhlY3V0ZVNjcmlwdChRU3Ry
aW5nIGZpbGVuYW1lLCBpbnQgYmFzZUxpbmUsIE5vZGVJbXBsICpuLCBjb25zdCBRU3RyaW5nICZz
Y3JpcHQpCiB7CkBAIC01MzMzLDQ4ICsyOTc4LDYgQEAgdm9pZCBLSFRNTFBhcnQ6OnNsb3RQYXJ0
UmVtb3ZlZCggS1BhcnRzOgogICAgICAgICBkLT5tX2FjdGl2ZUZyYW1lID0gMEw7CiB9CiAKLSNp
ZiAhQVBQTEVfQ0hBTkdFUwotCi12b2lkIEtIVE1MUGFydDo6c2xvdEFjdGl2ZUZyYW1lQ2hhbmdl
ZCggS1BhcnRzOjpQYXJ0ICpwYXJ0ICkKLXsKLS8vICAgIGtkRGVidWcoNjA1MCkgPDwgIktIVE1M
UGFydDo6c2xvdEFjdGl2ZUZyYW1lQ2hhbmdlZCBwYXJ0PSIgPDwgcGFydCA8PCBlbmRsOwotICAg
IGlmICggcGFydCA9PSB0aGlzICkKLSAgICB7Ci0gICAgICAgIGtkRXJyb3IoNjA1MCkgPDwgInN0
cmFuZ2UgZXJyb3IhIHdlIGFjdGl2YXRlZCBvdXJzZWx2ZXMiIDw8IGVuZGw7Ci0gICAgICAgIGFz
c2VydCggZmFsc2UgKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLS8vICAgIGtkRGVidWcoNjA1
MCkgPDwgIktIVE1MUGFydDo6c2xvdEFjdGl2ZUZyYW1lQ2hhbmdlZCBkLT5tX2FjdGl2ZUZyYW1l
PSIgPDwgZC0+bV9hY3RpdmVGcmFtZSA8PCBlbmRsOwotICAgIGlmICggZC0+bV9hY3RpdmVGcmFt
ZSAmJiBkLT5tX2FjdGl2ZUZyYW1lLT53aWRnZXQoKSAmJiBkLT5tX2FjdGl2ZUZyYW1lLT53aWRn
ZXQoKS0+aW5oZXJpdHMoICJRRnJhbWUiICkgKQotICAgIHsKLSAgICAgICAgUUZyYW1lICpmcmFt
ZSA9IHN0YXRpY19jYXN0PFFGcmFtZSAqPiggZC0+bV9hY3RpdmVGcmFtZS0+d2lkZ2V0KCkgKTsK
LSAgICAgICAgaWYgKGZyYW1lLT5mcmFtZVN0eWxlKCkgIT0gUUZyYW1lOjpOb0ZyYW1lKQotICAg
ICAgICB7Ci0gICAgICAgICAgIGZyYW1lLT5zZXRGcmFtZVN0eWxlKCBRRnJhbWU6OlN0eWxlZFBh
bmVsIHwgUUZyYW1lOjpTdW5rZW4pOwotICAgICAgICAgICBmcmFtZS0+cmVwYWludCgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgZC0+bV9hY3RpdmVGcmFtZSA9IHBhcnQ7Ci0KLSAgICBpZiAo
IGQtPm1fYWN0aXZlRnJhbWUgJiYgZC0+bV9hY3RpdmVGcmFtZS0+d2lkZ2V0KCktPmluaGVyaXRz
KCAiUUZyYW1lIiApICkKLSAgICB7Ci0gICAgICAgIFFGcmFtZSAqZnJhbWUgPSBzdGF0aWNfY2Fz
dDxRRnJhbWUgKj4oIGQtPm1fYWN0aXZlRnJhbWUtPndpZGdldCgpICk7Ci0gICAgICAgIGlmIChm
cmFtZS0+ZnJhbWVTdHlsZSgpICE9IFFGcmFtZTo6Tm9GcmFtZSkKLSAgICAgICAgewotICAgICAg
ICAgICBmcmFtZS0+c2V0RnJhbWVTdHlsZSggUUZyYW1lOjpTdHlsZWRQYW5lbCB8IFFGcmFtZTo6
UGxhaW4pOwotICAgICAgICAgICBmcmFtZS0+cmVwYWludCgpOwotICAgICAgICB9Ci0gICAgICAg
IGtkRGVidWcoNjA1MCkgPDwgIm5ldyBhY3RpdmUgZnJhbWUgIiA8PCBkLT5tX2FjdGl2ZUZyYW1l
IDw8IGVuZGw7Ci0gICAgfQotCi0gICAgdXBkYXRlQWN0aW9ucygpOwotCi0gICAgLy8gKG5vdGU6
IGNoaWxkT2JqZWN0IHJldHVybnMgMCBpZiB0aGUgYXJndW1lbnQgaXMgMCkKLSAgICBkLT5tX2V4
dGVuc2lvbi0+c2V0RXh0ZW5zaW9uUHJveHkoIEtQYXJ0czo6QnJvd3NlckV4dGVuc2lvbjo6Y2hp
bGRPYmplY3QoIGQtPm1fYWN0aXZlRnJhbWUgKSApOwotfQotCi0jZW5kaWYKIAogI2lmICFLSFRN
TF9OT19DUExVU1BMVVNfRE9NCiAKQEAgLTU0MzQsMjEgKzMwMzcsNiBAQCB2b2lkIEtIVE1MUGFy
dDo6cHJlbG9hZFNjcmlwdChjb25zdCBRU3RyCiAgICAga2h0bWw6OkNhY2hlOjpwcmVsb2FkU2Ny
aXB0KHVybCwgc2NyaXB0KTsKIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0KLVFDU3RyaW5nIEtI
VE1MUGFydDo6ZGNvcE9iamVjdElkKCkgY29uc3QKLXsKLSAgUUNTdHJpbmcgaWQ7Ci0gIGlkLnNw
cmludGYoImh0bWwtd2lkZ2V0JWQiLCBkLT5tX2Rjb3BfY291bnRlcik7Ci0gIHJldHVybiBpZDsK
LX0KLQotbG9uZyBLSFRNTFBhcnQ6OmNhY2hlSWQoKSBjb25zdAotewotICByZXR1cm4gZC0+bV9j
YWNoZUlkOwotfQotCi0jZW5kaWYKIAogYm9vbCBLSFRNTFBhcnQ6OnJlc3RvcmVkKCkgY29uc3QK
IHsKQEAgLTU0OTIsNzQgKzMwODAsMzkgQEAgYm9vbCBLSFRNTFBhcnQ6OnRhYnNUb0FsbENvbnRy
b2xzKCkgY29ucwogCiB2b2lkIEtIVE1MUGFydDo6Y29weVRvUGFzdGVib2FyZCgpCiB7Ci0jaWYg
QVBQTEVfQ0hBTkdFUwogICAgIEtXUSh0aGlzKS0+aXNzdWVDb3B5Q29tbWFuZCgpOwotI2VuZGlm
CiB9CiAKIHZvaWQgS0hUTUxQYXJ0OjpjdXRUb1Bhc3RlYm9hcmQoKQogewotI2lmIEFQUExFX0NI
QU5HRVMKICAgICBLV1EodGhpcyktPmlzc3VlQ3V0Q29tbWFuZCgpOwotI2VuZGlmCiB9CiAKIHZv
aWQgS0hUTUxQYXJ0OjpwYXN0ZUZyb21QYXN0ZWJvYXJkKCkKIHsKLSNpZiBBUFBMRV9DSEFOR0VT
CiAgICAgS1dRKHRoaXMpLT5pc3N1ZVBhc3RlQ29tbWFuZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQg
S0hUTUxQYXJ0OjpwYXN0ZUFuZE1hdGNoU3R5bGUoKQogewotI2lmIEFQUExFX0NIQU5HRVMKICAg
ICBLV1EodGhpcyktPmlzc3VlUGFzdGVBbmRNYXRjaFN0eWxlQ29tbWFuZCgpOwotI2VuZGlmCiB9
CiAKIHZvaWQgS0hUTUxQYXJ0Ojp0cmFuc3Bvc2UoKQogewotI2lmIEFQUExFX0NIQU5HRVMKICAg
ICBLV1EodGhpcyktPmlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQg
S0hUTUxQYXJ0OjpyZWRvKCkKIHsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgS1dRKHRoaXMpLT5p
c3N1ZVJlZG9Db21tYW5kKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBLSFRNTFBhcnQ6OnVuZG8oKQog
ewotI2lmIEFQUExFX0NIQU5HRVMKICAgICBLV1EodGhpcyktPmlzc3VlVW5kb0NvbW1hbmQoKTsK
LSNlbmRpZgotfQotCi0jaWYgIUFQUExFX0NIQU5HRVMKLQotYm9vbCBLSFRNTFBhcnQ6OmNhblBh
c3RlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEtIVE1MUGFydDo6Y2FuUmVkbygpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudC4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBLSFRNTFBhcnQ6OmNhblVu
ZG8oKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0gICAgcmV0dXJuIHRydWU7
CiB9CiAKLSNlbmRpZgogCiB2b2lkIEtIVE1MUGFydDo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxl
KENTU1N0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
KQogewpAQCAtNTg3MCwxNCArMzQyMyw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpyZW1vdmVFZGl0aW5n
U3R5bGVGcm9tRWwKICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBjdXJyZW50
U3R5bGUtPmNzc1RleHQoKSk7CiB9CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotCi12b2lkIEtIVE1M
UGFydDo6cHJpbnQoKQotewotICAgIC8vIG5lZWRzIGltcGxlbWVudGF0aW9uCi19Ci0KLSNlbmRp
ZgogCiBib29sIEtIVE1MUGFydDo6aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQoY29uc3Qg
UUNoYXIgJiwgYm9vbCkKIHsKSW5kZXg6IGtodG1sX3BhcnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTM4CmRpZmYgLXAgLXUgLXIxLjEzOCBraHRtbF9wYXJ0LmgKLS0tIGtodG1sX3BhcnQu
aAkyNCBTZXAgMjAwNSAwMToxODo1MiAtMDAwMAkxLjEzOAorKysga2h0bWxfcGFydC5oCTExIE5v
diAyMDA1IDE5OjM0OjAwIC0wMDAwCkBAIC0yMjEsMTUgKzIyMSw2IEBAIHB1YmxpYzoKICAgdm9p
ZCBzdG9wTG9hZGluZyhib29sIHNlbmRVbmxvYWQgPSBmYWxzZSk7CiAgIHZpcnR1YWwgYm9vbCBj
bG9zZVVSTCgpOwogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgLyoqCi0gICAqIGlzIGNhbGxlZCB3
aGVuIGEgY2VydGFpbiBlcnJvciBzaXR1YXRpb24gKGkuZS4gY29ubmVjdGlvbiB0aW1lZCBvdXQp
IG9jY3VyZWQuCi0gICAqIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZWl0aGVyIHNob3dzIGEgS0lP
IGVycm9yIGRpYWxvZyBvciBsb2FkcyBhIG1vcmUgdmVyYm9zZQotICAgKiBlcnJvciBkZXNjcmlw
dGlvbiBhIGFzIHBhZ2UsIGRlcGVuZGluZyBvbiB0aGUgdXNlcnMgY29uZmlndXJhdGlvbi4KLSAg
ICogQHAgam9iIGlzIHRoZSBqb2IgdGhhdCBzaWduYWxlZCB0aGUgZXJyb3Igc2l0dWF0aW9uCi0g
ICAqLwotICB2aXJ0dWFsIHZvaWQgc2hvd0Vycm9yKEtJTzo6Sm9iKiBqb2IpOwotI2VuZGlmCiAK
ICNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQogCkBAIC03NzMsMjYgKzc2NCw2IEBAIHB1Ymxp
YzoKICAgICovCiAgIEtQYXJ0czo6UGFydE1hbmFnZXIgKnBhcnRNYW5hZ2VyKCk7CiAKLSNpZiAh
QVBQTEVfQ0hBTkdFUwotICAvKioKLSAgICogU2F2ZXMgdGhlIEtIVE1MUGFydCdzIGNvbXBsZXRl
IHN0YXRlIChpbmNsdWRpbmcgY2hpbGQgZnJhbWUKLSAgICogb2JqZWN0cykgdG8gdGhlIHByb3Zp
ZGVkIEByZWYgUURhdGFTdHJlYW0uCi0gICAqCi0gICAqIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhl
IEByZWYgc2F2ZVN0YXRlKCkgbWV0aG9kIG9mIHRoZQotICAgKiAgQHJlZiBicm93c2VyRXh0ZW5z
aW9uKCkuCi0gICAqLwotICB2aXJ0dWFsIHZvaWQgc2F2ZVN0YXRlKCBRRGF0YVN0cmVhbSAmc3Ry
ZWFtICk7Ci0gIC8qKgotICAgKiBSZXN0b3JlcyB0aGUgS0hUTUxQYXJ0J3MgcHJldmlvdXNseSBz
YXZlZCBzdGF0ZSAoaW5jbHVkaW5nCi0gICAqIGNoaWxkIGZyYW1lIG9iamVjdHMpIGZyb20gdGhl
IHByb3ZpZGVkIFFEYXRhU3RyZWFtLgotICAgKgotICAgKiBAc2VlIHNhdmVTdGF0ZSgpCi0gICAq
Ci0gICAqIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIEByZWYgcmVzdG9yZVN0YXRlKCkgbWV0aG9k
IG9mIHRoZQotICAgKiBAcmVmIGJyb3dzZXJFeHRlbnNpb24oKSAuCi0gICAqKi8KLSAgdmlydHVh
bCB2b2lkIHJlc3RvcmVTdGF0ZSggUURhdGFTdHJlYW0gJnN0cmVhbSApOwotI2VuZGlmCiAKICAg
dmlydHVhbCB2b2lkIHRva2VuaXplclByb2Nlc3NlZERhdGEoKSB7fTsKIApAQCAtMTAxNywxMiAr
OTg4LDYgQEAgcHJvdGVjdGVkOgogICAKICAgdm9pZCBzZWxlY3RDbG9zZXN0V29yZEZyb21Nb3Vz
ZUV2ZW50KFFNb3VzZUV2ZW50ICptb3VzZSwgRE9NOjpOb2RlSW1wbCAqaW5uZXJOb2RlLCBpbnQg
eCwgaW50IHkpOwogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgLyoqCi0gICAqIEludGVybmFsIHJl
aW1wbGVtZW50YXRpb24gb2YgS1BhcnRzOjpQYXJ0OjpndWlBY3RpdmF0ZUV2ZW50IC4KLSAgICov
Ci0gIHZpcnR1YWwgdm9pZCBndWlBY3RpdmF0ZUV2ZW50KCBLUGFydHM6OkdVSUFjdGl2YXRlRXZl
bnQgKmV2ZW50ICk7Ci0jZW5kaWYKIAogICAvKioKICAgICogSW50ZXJuYWwgZW1wdHkgcmVpbXBs
ZW1lbnRhdGlvbiBvZiBAcmVmIEtQYXJ0czo6UmVhZE9ubHlQYXJ0OjpvcGVuRmlsZSAuCkBAIC0x
MDMyLDIwICs5OTcsNiBAQCBwcm90ZWN0ZWQ6CiAgIHZpcnR1YWwgdm9pZCB1cmxTZWxlY3RlZCgg
Y29uc3QgUVN0cmluZyAmdXJsLCBpbnQgYnV0dG9uLCBpbnQgc3RhdGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmX3RhcmdldCwgS1BhcnRzOjpVUkxBcmdzIGFy
Z3MgPSBLUGFydHM6OlVSTEFyZ3MoKSk7CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAvKioKLSAg
ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBuZXcgZW1iZWRkZWQgb2JqZWN0IChpbmNs
dWRlIGh0bWwgZnJhbWVzKSBpcyB0byBiZSBjcmVhdGVkLgotICAgKiBSZWltcGxlbWVudCBpdCBp
ZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY2VydGFpbiBlbWJlZGRhYmxlIG9iamVjdHMg
d2l0aG91dCByZWdpc3RlcmluZwotICAgKiB0aGVtIGluIHRoZSBLREUgd2lkZSByZWdpc3RyeSBz
eXN0ZW0gKEtTeUNvQ2EpIC4gQW5vdGhlciByZWFzb24gZm9yIHJlLWltcGxlbWVudGluZyB0aGlz
Ci0gICAqIG1ldGhvZCBjb3VsZCBiZSBpZiB5b3Ugd2FudCB0byBkZXJpdmUgZnJvbSBLVEhNTFBh
cnQgYW5kIGFsc28gd2FudCBhbGwgaHRtbCBmcmFtZSBvYmplY3RzCi0gICAqIHRvIGJlIGEgb2Jq
ZWN0IG9mIHlvdXIgZGVyaXZlZCB0eXBlLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgcmV0dXJu
IGEgbmV3IGluc3RhbmNlIGZvcgotICAgKiB0aGUgbWltZXR5cGUgJ3RleHQvaHRtbCcgLgotICAg
Ki8KLSAgdmlydHVhbCBLUGFydHM6OlJlYWRPbmx5UGFydCAqY3JlYXRlUGFydCggUVdpZGdldCAq
cGFyZW50V2lkZ2V0LCBjb25zdCBjaGFyICp3aWRnZXROYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBRT2JqZWN0ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5h
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFT
dHJpbmcgJm1pbWV0eXBlLCBRU3RyaW5nICZzZXJ2aWNlTmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZ0xpc3QgJnNlcnZpY2VUeXBlcywgY29u
c3QgUVN0cmluZ0xpc3QgJnBhcmFtcyk7Ci0jZW5kaWYKIAogcHVibGljIHNsb3RzOgogCkBAIC0x
MTEwLDUyICsxMDYxLDExIEBAIHByaXZhdGUgc2xvdHM6CiAgICAqIEBpbnRlcm5hbAogICAgKi8K
ICAgdm9pZCBzbG90RGVidWdSZW5kZXJUcmVlKCk7Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgLyoq
Ci0gICAqIEBpbnRlcm5hbAotICAgKi8KLSAgdmlydHVhbCB2b2lkIHNsb3RWaWV3RG9jdW1lbnRT
b3VyY2UoKTsKLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKi8KLSAgdmlydHVhbCB2b2lkIHNs
b3RWaWV3RnJhbWVTb3VyY2UoKTsKLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKi8KLSAgdmly
dHVhbCB2b2lkIHNsb3RTYXZlQmFja2dyb3VuZCgpOwotICAvKioKLSAgICogQGludGVybmFsCi0g
ICAqLwotICB2aXJ0dWFsIHZvaWQgc2xvdFNhdmVEb2N1bWVudCgpOwotICAvKioKLSAgICogQGlu
dGVybmFsCi0gICAqLwotICB2aXJ0dWFsIHZvaWQgc2xvdFNhdmVGcmFtZSgpOwotICAvKioKLSAg
ICogQGludGVybmFsCi0gICAqLwotICB2aXJ0dWFsIHZvaWQgc2xvdFNlY3VyaXR5KCk7Ci0gIC8q
KgotICAgKiBAaW50ZXJuYWwKLSAgICovCi0gIHZpcnR1YWwgdm9pZCBzbG90U2V0RW5jb2Rpbmco
KTsKLQotICAvKioKLSAgICogQGludGVybmFsCi0gICAqLwotICB2aXJ0dWFsIHZvaWQgc2xvdFVz
ZVN0eWxlc2hlZXQoKTsKLQotICB2aXJ0dWFsIHZvaWQgc2xvdEZpbmQoKTsKLSAgdmlydHVhbCB2
b2lkIHNsb3RGaW5kRG9uZSgpOwotICB2aXJ0dWFsIHZvaWQgc2xvdEZpbmREaWFsb2dEZXN0cm95
ZWQoKTsKLSNlbmRpZgogCiAgIHZvaWQgc2xvdEluY1pvb20oKTsKICAgdm9pZCBzbG90RGVjWm9v
bSgpOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICB2b2lkIGNoaWxkQmVnaW4oKTsKLSNlbmRpZgog
CiAgIHZvaWQgc2xvdExvYWRJbWFnZXMoKTsKIApAQCAtMTM1MSwxNiArMTI2MSwxMiBAQCBwcml2
YXRlOgogCiAgIEtKU1Byb3h5ICpqU2NyaXB0KCk7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgcHVi
bGljOgotI2VuZGlmCiAgIEtIVE1MUGFydCAqb3BlbmVyKCk7CiAgIHZvaWQgc2V0T3BlbmVyKEtI
VE1MUGFydCAqX29wZW5lcik7CiAgIGJvb2wgb3BlbmVkQnlKUygpOwogICB2b2lkIHNldE9wZW5l
ZEJ5SlMoYm9vbCBfb3BlbmVkQnlKUyk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogIHByaXZhdGU6Ci0j
ZW5kaWYKICAgaW50IGNhY2hlSWQoKSBjb25zdDsKIAogICB2b2lkIGNoZWNrRW1pdExvYWRFdmVu
dCgpOwpAQCAtMTM3OSwxMSArMTI4NSw5IEBAIHByaXZhdGU6CiAgICAqLwogICB2b2lkIGdvdG9B
bmNob3IoKTsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgdm9pZCBoYW5kbGVNb3VzZVByZXNzRXZl
bnRTaW5nbGVDbGljayhraHRtbDo6TW91c2VQcmVzc0V2ZW50ICpldmVudCk7CiAgIHZvaWQgaGFu
ZGxlTW91c2VQcmVzc0V2ZW50RG91YmxlQ2xpY2soa2h0bWw6Ok1vdXNlUHJlc3NFdmVudCAqZXZl
bnQpOwogICB2b2lkIGhhbmRsZU1vdXNlUHJlc3NFdmVudFRyaXBsZUNsaWNrKGtodG1sOjpNb3Vz
ZVByZXNzRXZlbnQgKmV2ZW50KTsKLSNlbmRpZgogCiAgIERPTTo6Q1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uSW1wbCAqc2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShET006Ok5vZGVJbXBsICombm9k
ZVRvUmVtb3ZlKSBjb25zdDsKIApAQCAtMTM5MSw3ICsxMjk1LDYgQEAgcHJpdmF0ZToKICAgZnJp
ZW5kIGNsYXNzIEtIVE1MUGFydFByaXZhdGU7CiAgIGZyaWVuZCBjbGFzcyBraHRtbDo6U2VsZWN0
aW9uQ29udHJvbGxlcjsKIAotI2lmIEFQUExFX0NIQU5HRVMKIHB1YmxpYzogIAogICBmcmllbmQg
Y2xhc3MgS1dRS0hUTUxQYXJ0OwogCkBAIC0xNDAyLDEzICsxMzA1LDEwIEBAIHB1YmxpYzogIAog
ICB2b2lkIHN0YXJ0ZWQoS0lPOjpKb2IgKik7CiAgIHZvaWQgZnJhbWVEZXRhY2hlZCgpOwogICB2
aXJ0dWFsIHZvaWQgZGlkRmlyc3RMYXlvdXQoKSB7fQotI2VuZGlmCiAKICAgaW50IGZyYW1lQ291
bnQ7CiB9OwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgIktXUUtIVE1MUGFydC5oIgot
I2VuZGlmCiAKICNlbmRpZgpJbmRleDoga2h0bWxwYXJ0X3AuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbHBhcnRfcC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjYwCmRpZmYgLXAgLXUgLXIxLjYwIGtodG1scGFydF9wLmgKLS0tIGtodG1scGFydF9w
LmgJMjcgU2VwIDIwMDUgMjI6Mzc6MDEgLTAwMDAJMS42MAorKysga2h0bWxwYXJ0X3AuaAkxMSBO
b3YgMjAwNSAxOTozNDowMCAtMDAwMApAQCAtNjIsOSArNjIsNiBAQCBuYW1lc3BhY2Uga2h0bWwK
IAogICAgICAgQ2hpbGRGcmFtZSgpIHsgbV9iQ29tcGxldGVkID0gZmFsc2U7IG1fYlByZWxvYWRl
ZCA9IGZhbHNlOyBtX3R5cGUgPSBGcmFtZTsgbV9iTm90aWZ5ID0gZmFsc2U7IG1faGFzRmFsbGJh
Y2tDb250ZW50ID0gZmFsc2U7IH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgICB+Q2hpbGRG
cmFtZSgpIHsgaWYgKG1fcnVuKSBtX3J1bi0+YWJvcnQoKTsgfQotI2VuZGlmCiAKICAgICBRR3Vh
cmRlZFB0cjxraHRtbDo6UmVuZGVyUGFydD4gbV9mcmFtZTsKICAgICBRR3VhcmRlZFB0cjxLUGFy
dHM6OlJlYWRPbmx5UGFydD4gbV9wYXJ0OwpAQCAtNzUsOSArNzIsNiBAQCBuYW1lc3BhY2Uga2h0
bWwKICAgICBib29sIG1fYkNvbXBsZXRlZDsKICAgICBRU3RyaW5nIG1fbmFtZTsKICAgICBLUGFy
dHM6OlVSTEFyZ3MgbV9hcmdzOwotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgUUd1YXJkZWRQdHI8
S0hUTUxSdW4+IG1fcnVuOwotI2VuZGlmCiAgICAgYm9vbCBtX2JQcmVsb2FkZWQ7CiAgICAgS1VS
TCBtX3dvcmtpbmdVUkw7CiAgICAgVHlwZSBtX3R5cGU7CkBAIC0xMjMsMzIgKzExNywxNSBAQCBw
dWJsaWM6CiAgICAgbV9iTG9hZEV2ZW50RW1pdHRlZCA9IHRydWU7CiAgICAgbV9iVW5sb2FkRXZl
bnRFbWl0dGVkID0gdHJ1ZTsKICAgICBtX2NhY2hlUG9saWN5ID0gS0lPOjpDQ19WZXJpZnk7Ci0j
aWYgIUFQUExFX0NIQU5HRVMKLSAgICBtX21hbmFnZXIgPSAwTDsKLSAgICBtX3NldHRpbmdzID0g
bmV3IEtIVE1MU2V0dGluZ3MoKktIVE1MRmFjdG9yeTo6ZGVmYXVsdEhUTUxTZXR0aW5ncygpKTsK
LSNlbmRpZgogICAgIG1fYkNsZWFyaW5nID0gZmFsc2U7CiAgICAgbV9iQ2xlYXJlZCA9IHRydWU7
CiAgICAgbV96b29tRmFjdG9yID0gMTAwOwogICAgIG1fYkRuZCA9IHRydWU7Ci0jaWYgIUFQUExF
X0NIQU5HRVMKLSAgICBtX2xpbmtDdXJzb3IgPSBLQ3Vyc29yOjpoYW5kQ3Vyc29yKCk7Ci0gICAg
bV9sb2FkZWRPYmplY3RzID0gMDsKLSAgICBtX3RvdGFsT2JqZWN0Q291bnQgPSAwOwotICAgIG1f
am9iUGVyY2VudCA9IDA7Ci0jZW5kaWYKICAgICBtX2hhdmVFbmNvZGluZyA9IGZhbHNlOwogICAg
IG1fYWN0aXZlRnJhbWUgPSAwTDsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIG1fZmluZERpYWxv
ZyA9IDA7Ci0gICAgbV9zc2xfaW5fdXNlID0gZmFsc2U7Ci0jZW5kaWYKICNpZm5kZWYgUV9XU19R
V1MKICAgICBtX2phdmFDb250ZXh0ID0gMDsKICNlbmRpZgotI2lmICFBUFBMRV9DSEFOR0VTCi0g
ICAgbV9jYWNoZUlkID0gMDsKLSNlbmRpZgogICAgIG1fZnJhbWVOYW1lSWQgPSAxOwogCiAgICAg
bV9yZXN0b3JlZCA9IGZhbHNlOwpAQCAtMTk3LDkgKzE3NCw2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fYlBsdWdpbnNGb3JjZSA9IHBhcnQtPmQtPm1fYlBsdWdpbnNGb3JjZTsKICAgICAgICAg
ICAgIG1fYlBsdWdpbnNPdmVycmlkZSA9IHBhcnQtPmQtPm1fYlBsdWdpbnNPdmVycmlkZTsKICAg
ICAgICAgICAgIC8vIFNhbWUgZm9yIFNTTCBzZXR0aW5ncwotI2lmICFBUFBMRV9DSEFOR0VTCi0g
ICAgICAgICAgICBtX3NzbF9pbl91c2UgPSBwYXJ0LT5kLT5tX3NzbF9pbl91c2U7Ci0jZW5kaWYK
ICAgICAgICAgICAgIG1fb25seUxvY2FsUmVmZXJlbmNlcyA9IHBhcnQtPmQtPm1fb25seUxvY2Fs
UmVmZXJlbmNlczsKICAgICAgICAgICAgIG1fem9vbUZhY3RvciA9IHBhcnQtPmQtPm1fem9vbUZh
Y3RvcjsKICAgICAgICAgfQpAQCAtMjE4LDkgKzE5Miw2IEBAIHB1YmxpYzoKICAgewogICAgIGRl
bGV0ZSBtX2Rjb3BvYmplY3Q7CiAgICAgZGVsZXRlIG1fZXh0ZW5zaW9uOwotI2lmICFBUFBMRV9D
SEFOR0VTCi0gICAgZGVsZXRlIG1fc2V0dGluZ3M7Ci0jZW5kaWYKICAgICBkZWxldGUgbV9qc2Ny
aXB0OwogICAgIGlmICggbV9ranNfbGliKQogICAgICAgIG1fa2pzX2xpYi0+dW5sb2FkKCk7CkBA
IC0yNzgsMjAgKzI0OSw2IEBAIHB1YmxpYzoKICAgUVN0cmluZyBtX2tqc0RlZmF1bHRTdGF0dXNC
YXJUZXh0OwogICBRU3RyaW5nIG1fbGFzdE1vZGlmaWVkOwogCi0jaWYgIUFQUExFX0NIQU5HRVMK
LSAgLy8gUVN0cmluZ3MgZm9yIFNTTCBtZXRhZGF0YQotICAvLyBOb3RlOiBXaGVuIGFkZGluZyBu
ZXcgdmFyaWFibGVzIGRvbid0IGZvcmdldCB0byB1cGRhdGUgOjpzYXZlU3RhdGUoKS86OnJlc3Rv
cmVTdGF0ZSgpIQotICBib29sIG1fc3NsX2luX3VzZTsKLSAgUVN0cmluZyBtX3NzbF9wZWVyX2Nl
cnRpZmljYXRlLAotICAgICAgICAgIG1fc3NsX3BlZXJfY2hhaW4sCi0gICAgICAgICAgbV9zc2xf
cGVlcl9pcCwKLSAgICAgICAgICBtX3NzbF9jaXBoZXIsCi0gICAgICAgICAgbV9zc2xfY2lwaGVy
X2Rlc2MsCi0gICAgICAgICAgbV9zc2xfY2lwaGVyX3ZlcnNpb24sCi0gICAgICAgICAgbV9zc2xf
Y2lwaGVyX3VzZWRfYml0cywKLSAgICAgICAgICBtX3NzbF9jaXBoZXJfYml0cywKLSAgICAgICAg
ICBtX3NzbF9jZXJ0X3N0YXRlOwotI2VuZGlmCiAKICAgYm9vbCBtX2JDb21wbGV0ZToxOwogICBi
b29sIG1fYkxvYWRpbmdNYWluUmVzb3VyY2U6MTsKQEAgLTMxNSwzNiArMjcyLDkgQEAgcHVibGlj
OgogICBRU3RyaW5nIG1fcmVkaXJlY3RSZWZlcnJlcjsKICAgaW50IG1fc2NoZWR1bGVkSGlzdG9y
eU5hdmlnYXRpb25TdGVwczsKIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gIEtBY3Rpb24gKm1fcGFW
aWV3RG9jdW1lbnQ7Ci0gIEtBY3Rpb24gKm1fcGFWaWV3RnJhbWU7Ci0gIEtBY3Rpb24gKm1fcGFT
YXZlQmFja2dyb3VuZDsKLSAgS0FjdGlvbiAqbV9wYVNhdmVEb2N1bWVudDsKLSAgS0FjdGlvbiAq
bV9wYVNhdmVGcmFtZTsKLSAgS0FjdGlvbiAqbV9wYVNlY3VyaXR5OwotICBLU2VsZWN0QWN0aW9u
ICptX3BhU2V0RW5jb2Rpbmc7Ci0gIEtTZWxlY3RBY3Rpb24gKm1fcGFVc2VTdHlsZXNoZWV0Owot
ICBLSFRNTFpvb21GYWN0b3JBY3Rpb24gKm1fcGFJbmNab29tRmFjdG9yOwotICBLSFRNTFpvb21G
YWN0b3JBY3Rpb24gKm1fcGFEZWNab29tRmFjdG9yOwotICBLQWN0aW9uICptX3BhTG9hZEltYWdl
czsKLSAgS0FjdGlvbiAqbV9wYUZpbmQ7Ci0gIEtBY3Rpb24gKm1fcGFQcmludEZyYW1lOwotICBL
QWN0aW9uICptX3BhU2VsZWN0QWxsOwotICBLQWN0aW9uICptX3BhRGVidWdET01UcmVlOwotICBL
QWN0aW9uICptX3BhRGVidWdSZW5kZXJUcmVlOwotCi0gIEtQYXJ0czo6UGFydE1hbmFnZXIgKm1f
bWFuYWdlcjsKLQotICBRU3RyaW5nIG1fcG9wdXBNZW51WE1MOwotICBLSFRNTFBhcnQ6OkdVSVBy
b2ZpbGUgbV9ndWlQcm9maWxlOwotI2VuZGlmCiAKICAgaW50IG1fem9vbUZhY3RvcjsKIAotI2lm
ICFBUFBMRV9DSEFOR0VTCi0gIGludCBtX2ZpbmRQb3M7Ci0gIERPTTo6Tm9kZUltcGwgKm1fZmlu
ZE5vZGU7Ci0jZW5kaWYKIAogICBRU3RyaW5nIG1fc3RyU2VsZWN0ZWRVUkw7CiAgIFFTdHJpbmcg
bV9zdHJTZWxlY3RlZFVSTFRhcmdldDsKQEAgLTM2NywxMCArMjk3LDYgQEAgcHVibGljOgogCiAg
IGtodG1sOjpFVGV4dEdyYW51bGFyaXR5IG1fc2VsZWN0aW9uR3JhbnVsYXJpdHk7CiAgIGJvb2wg
bV9iZWdhblNlbGVjdGluZ1RleHQ7Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgUVN0cmluZyBtX292
ZXJVUkw7Ci0gIFFTdHJpbmcgbV9vdmVyVVJMVGFyZ2V0OwotI2VuZGlmCiAKICAga2h0bWw6OlNl
bGVjdGlvbkNvbnRyb2xsZXIgbV9zZWxlY3Rpb247CiAgIGtodG1sOjpTZWxlY3Rpb25Db250cm9s
bGVyIG1fZHJhZ0NhcmV0OwpAQCAtMzk5LDI3ICszMjUsNiBAQCBwdWJsaWM6CiAgIFFQb2ludCBt
X2RyYWdMYXN0UG9zOwogI2VuZGlmCiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICBRQ3Vyc29yIG1f
bGlua0N1cnNvcjsKLSAgUVRpbWVyIG1fc2Nyb2xsVGltZXI7Ci0KLSAgdW5zaWduZWQgbV9sb2Fk
ZWRPYmplY3RzOwotICB1bnNpZ25lZCBtX3RvdGFsT2JqZWN0Q291bnQ7Ci0gIHVuc2lnbmVkIGlu
dCBtX2pvYlBlcmNlbnQ7Ci0KLSAgS0hUTUxGaW5kICptX2ZpbmREaWFsb2c7Ci0KLSAgc3RydWN0
IGZpbmRTdGF0ZQotICB7Ci0gICAgZmluZFN0YXRlKCkKLSAgICB7IGNhc2VTZW5zaXRpdmUgPSBm
YWxzZTsgZGlyZWN0aW9uID0gZmFsc2U7IH0KLSAgICBRU3RyaW5nIHRleHQ7Ci0gICAgYm9vbCBj
YXNlU2Vuc2l0aXZlOwotICAgIGJvb2wgZGlyZWN0aW9uOwotICB9OwotCi0gIGZpbmRTdGF0ZSBt
X2xhc3RGaW5kU3RhdGU7Ci0jZW5kaWYKIAogICAvL1FHdWFyZGVkUHRyPEtQYXJ0czo6UGFydD4g
bV9hY3RpdmVGcmFtZTsKICAgS1BhcnRzOjpQYXJ0ICogbV9hY3RpdmVGcmFtZTsKSW5kZXg6IGto
dG1sdmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
a2h0bWx2aWV3LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTIKZGlmZiAtcCAtdSAtcjEu
MTUyIGtodG1sdmlldy5jcHAKLS0tIGtodG1sdmlldy5jcHAJMyBOb3YgMjAwNSAxOToxMjowMyAt
MDAwMAkxLjE1MgorKysga2h0bWx2aWV3LmNwcAkxMSBOb3YgMjAwNSAxOTozNDowMCAtMDAwMApA
QCAtNjQsOSArNjQsNyBAQAogI2luY2x1ZGUgPGt1cmxkcmFnLmg+CiAjaW5jbHVkZSA8cW9iamVj
dGxpc3QuaD4KIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlICJLV1FBY2NPYmplY3RDYWNo
ZS5oIgotI2VuZGlmCiAKICNkZWZpbmUgUEFJTlRfQlVGRkVSX0hFSUdIVCAxMjgKIApAQCAtMTEw
LDExICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgICAgIHVuZGVyTW91c2UgPSAwOwogICAgICAgICBj
bGlja05vZGUgPSAwOwogICAgICAgICByZXNldCgpOwotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAg
ICAgIHRwPTA7Ci0gICAgICAgIHBhaW50QnVmZmVyPTA7Ci0gICAgICAgIGZvcm1Db21wbGV0aW9u
cz0wOwotI2VuZGlmCiAgICAgICAgIGxheW91dFRpbWVySWQgPSAwOwogICAgICAgICBkZWxheWVk
TGF5b3V0ID0gZmFsc2U7CiAgICAgICAgIG1vdXNlUHJlc3NlZCA9IGZhbHNlOwpAQCAtMTIzLDIx
ICsxMTYsMTIgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIGRvRnVsbFJlcGFpbnQgPSB0cnVl
OwogICAgICAgICBpc1RyYW5zcGFyZW50ID0gZmFsc2U7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAg
ICAgICB2bW9kZSA9IGhtb2RlID0gUVNjcm9sbFZpZXc6OkF1dG87CiAgICAgICAgIGZpcnN0TGF5
b3V0ID0gdHJ1ZTsKICAgICAgICAgbmVlZFRvSW5pdFNjcm9sbEJhcnMgPSB0cnVlOwotI2Vsc2UK
LSAgICAgICAgcHJldlNjcm9sbGJhclZpc2libGUgPSB0cnVlOwotI2VuZGlmCiAgICAgfQogICAg
IH5LSFRNTFZpZXdQcml2YXRlKCkKICAgICB7Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICAgICAg
ZGVsZXRlIGZvcm1Db21wbGV0aW9uczsKLSAgICAgICAgZGVsZXRlIHRwOyB0cCA9IDA7Ci0gICAg
ICAgIGRlbGV0ZSBwYWludEJ1ZmZlcjsgcGFpbnRCdWZmZXIgPTA7Ci0jZW5kaWYKICAgICAgICAg
CiAgICAgICAgIGlmICh1bmRlck1vdXNlKQogCSAgICB1bmRlck1vdXNlLT5kZXJlZigpOwpAQCAt
MTU3LDIzICsxNDEsMTAgQEAgcHVibGljOgogICAgICAgICB1c2VTbG93UmVwYWludHMgPSBmYWxz
ZTsKICAgICAgICAgZHJhZ1RhcmdldC5yZXNldCgpOwogCWJvcmRlclRvdWNoZWQgPSBmYWxzZTsK
LSNpZiAhQVBQTEVfQ0hBTkdFUwotI2lmbmRlZiBLSFRNTF9OT19TQ1JPTExCQVJTCi0gICAgICAg
IHZtb2RlID0gUVNjcm9sbFZpZXc6OkF1dG87Ci0gICAgICAgIGhtb2RlID0gUVNjcm9sbFZpZXc6
OkF1dG87Ci0jZWxzZQotICAgICAgICB2bW9kZSA9IFFTY3JvbGxWaWV3OjpBbHdheXNPZmY7Ci0g
ICAgICAgIGhtb2RlID0gUVNjcm9sbFZpZXc6OkFsd2F5c09mZjsKLSNlbmRpZgotI2VuZGlmCiAg
ICAgICAgIHNjcm9sbEJhck1vdmVkID0gZmFsc2U7CiAgICAgICAgIGlnbm9yZVdoZWVsRXZlbnRz
ID0gZmFsc2U7CiAJYm9yZGVyWCA9IDMwOwogCWJvcmRlclkgPSAzMDsKLSNpZiAhQVBQTEVfQ0hB
TkdFUwotCWNsaWNrWCA9IC0xOwotCWNsaWNrWSA9IC0xOwotI2VuZGlmCiAgICAgICAgIHByZXZN
b3VzZVggPSAtMTsKICAgICAgICAgcHJldk1vdXNlWSA9IC0xOwogCWNsaWNrQ291bnQgPSAwOwpA
QCAtMTg4LDE3ICsxNTksMTEgQEAgcHVibGljOgogICAgICAgICBsYXlvdXRTY2hlZHVsaW5nRW5h
YmxlZCA9IHRydWU7CiAgICAgICAgIGxheW91dFN1cHByZXNzZWQgPSBmYWxzZTsKICAgICAgICAg
bGF5b3V0Q291bnQgPSAwOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgZmlyc3RMYXlvdXQg
PSB0cnVlOwotI2VuZGlmCiAgICAgICAgIGlmIChyZXBhaW50UmVjdHMpCiAgICAgICAgICAgICBy
ZXBhaW50UmVjdHMtPmNsZWFyKCk7CiAgICAgfQogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBR
UGFpbnRlciAqdHA7Ci0gICAgUVBpeG1hcCAgKnBhaW50QnVmZmVyOwotI2VuZGlmCiAgICAgTm9k
ZUltcGwgKnVuZGVyTW91c2U7CiAKICAgICBib29sIGJvcmRlclRvdWNoZWQ6MTsKQEAgLTIwOCwx
OSArMTczLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBRU2Nyb2xsVmlldzo6U2Nyb2xsQmFyTW9k
ZSB2bW9kZTsKICAgICBRU2Nyb2xsVmlldzo6U2Nyb2xsQmFyTW9kZSBobW9kZTsKLSNpZiAhQVBQ
TEVfQ0hBTkdFUwotICAgIGJvb2wgcHJldlNjcm9sbGJhclZpc2libGU7Ci0jZW5kaWYKICAgICBi
b29sIGxpbmtQcmVzc2VkOwogICAgIGJvb2wgdXNlU2xvd1JlcGFpbnRzOwogICAgIGJvb2wgaWdu
b3JlV2hlZWxFdmVudHM7CiAKICAgICBpbnQgYm9yZGVyWCwgYm9yZGVyWTsKLSNpZiAhQVBQTEVf
Q0hBTkdFUwotICAgIEtTaW1wbGVDb25maWcgKmZvcm1Db21wbGV0aW9uczsKLQotICAgIGludCBj
bGlja1gsIGNsaWNrWTsKLSNlbmRpZgogICAgIGludCBjbGlja0NvdW50OwogICAgIE5vZGVJbXBs
ICpjbGlja05vZGU7CiAKQEAgLTIzMywxMCArMTkwLDggQEAgcHVibGljOgogICAgIGJvb2wgbGF5
b3V0U3VwcHJlc3NlZDsKICAgICBpbnQgbGF5b3V0Q291bnQ7CiAKLSNpZiBBUFBMRV9DSEFOR0VT
CiAgICAgYm9vbCBmaXJzdExheW91dDsKICAgICBib29sIG5lZWRUb0luaXRTY3JvbGxCYXJzOwot
I2VuZGlmCiAgICAgYm9vbCBtb3VzZVByZXNzZWQ7CiAgICAgYm9vbCBpc1RyYW5zcGFyZW50Owog
I2lmbmRlZiBRVF9OT19UT09MVElQCkBAIC0yNzYsMTUgKzIzMSw5IEBAIEtIVE1MVmlldzo6S0hU
TUxWaWV3KCBLSFRNTFBhcnQgKnBhcnQsIFEKICAgICBtX21lZGl1bSA9ICJzY3JlZW4iOwogCiAg
ICAgbV9wYXJ0ID0gcGFydDsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgbV9wYXJ0LT5yZWYoKTsK
LSNlbmRpZgogICAgIGQgPSBuZXcgS0hUTUxWaWV3UHJpdmF0ZTsKIAotI2lmICFBUFBMRV9DSEFO
R0VTCi0gICAgUVNjcm9sbFZpZXc6OnNldFZTY3JvbGxCYXJNb2RlKGQtPnZtb2RlKTsKLSAgICBR
U2Nyb2xsVmlldzo6c2V0SFNjcm9sbEJhck1vZGUoZC0+aG1vZGUpOwotI2VuZGlmCiAgICAgCiAg
ICAgY29ubmVjdChrYXBwLCBTSUdOQUwoa2Rpc3BsYXlQYWxldHRlQ2hhbmdlZCgpKSwgdGhpcywg
U0xPVChzbG90UGFsZXR0ZUNoYW5nZWQoKSkpOwogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGNv
bnRlbnRzTW92aW5nKGludCwgaW50KSksIHRoaXMsIFNMT1Qoc2xvdFNjcm9sbEJhck1vdmVkKCkp
KTsKQEAgLTMwNyw5ICsyNTYsNyBAQCBLSFRNTFZpZXc6OktIVE1MVmlldyggS0hUTUxQYXJ0ICpw
YXJ0LCBRCiAKIEtIVE1MVmlldzo6fktIVE1MVmlldygpCiB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwog
ICAgIHJlc2V0U2Nyb2xsQmFycygpOwotI2VuZGlmCiAKICAgICBhc3NlcnQoX3JlZkNvdW50ID09
IDApOwogCkBAIC0zMjEsOSArMjY4LDcgQEAgS0hUTUxWaWV3Ojp+S0hUTUxWaWV3KCkKICAgICAg
ICAgaWYgKGRvYykKICAgICAgICAgICAgIGRvYy0+ZGV0YWNoKCk7CiAKLSNpZiBBUFBMRV9DSEFO
R0VTCiAgICAgICAgIG1fcGFydC0+ZGVyZWYoKTsKLSNlbmRpZgogICAgIH0KIAogICAgIGRlbGV0
ZSBkOyBkID0gMDsKQEAgLTMzNyw3ICsyODIsNiBAQCB2b2lkIEtIVE1MVmlldzo6Y2xlYXJQYXJ0
KCkKICAgICB9CiB9CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiB2b2lkIEtIVE1MVmlldzo6cmVzZXRT
Y3JvbGxCYXJzKCkKIHsKICAgICAvLyBSZXNldCB0aGUgZG9jdW1lbnQncyBzY3JvbGxiYXJzIGJh
Y2sgdG8gb3VyIGRlZmF1bHRzIGJlZm9yZSB3ZSB5aWVsZCB0aGUgZmxvb3IuCkBAIC0zNDcsMTQg
KzI5MSw5IEBAIHZvaWQgS0hUTUxWaWV3OjpyZXNldFNjcm9sbEJhcnMoKQogICAgIFFTY3JvbGxW
aWV3OjpzZXRIU2Nyb2xsQmFyTW9kZShkLT5obW9kZSk7CiAgICAgc3VwcHJlc3NTY3JvbGxCYXJz
KGZhbHNlKTsKIH0KLSNlbmRpZgogCiB2b2lkIEtIVE1MVmlldzo6aW5pdCgpCiB7Ci0jaWYgIUFQ
UExFX0NIQU5HRVMKLSAgICBpZighZC0+cGFpbnRCdWZmZXIpIGQtPnBhaW50QnVmZmVyID0gbmV3
IFFQaXhtYXAoUEFJTlRfQlVGRkVSX0hFSUdIVCwgUEFJTlRfQlVGRkVSX0hFSUdIVCk7Ci0gICAg
aWYoIWQtPnRwKSBkLT50cCA9IG5ldyBRUGFpbnRlcigpOwotI2VuZGlmCiAKICAgICBzZXRGb2N1
c1BvbGljeShRV2lkZ2V0OjpTdHJvbmdGb2N1cyk7CiAgICAgdmlld3BvcnQoKS0+c2V0Rm9jdXNQ
b2xpY3koIFFXaWRnZXQ6OldoZWVsRm9jdXMgKTsKQEAgLTM2Nyw5ICszMDYsNiBAQCB2b2lkIEtI
VE1MVmlldzo6aW5pdCgpCiAKICAgICBzZXRBY2NlcHREcm9wcyh0cnVlKTsKICAgICAKLSNpZiAh
QVBQTEVfQ0hBTkdFUwotICAgIHJlc2l6ZUNvbnRlbnRzKHZpc2libGVXaWR0aCgpLCB2aXNpYmxl
SGVpZ2h0KCkpOwotI2VuZGlmCiB9CiAKIHZvaWQgS0hUTUxWaWV3OjpjbGVhcigpCkBAIC0zOTAs
MTYgKzMyNiw3IEBAIHZvaWQgS0hUTUxWaWV3OjpjbGVhcigpCiAgICAga2lsbFRpbWVycygpOwog
ICAgIGVtaXQgY2xlYXJlZCgpOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIHN1cHByZXNzU2Ny
b2xsQmFycyh0cnVlKTsKLSNlbHNlCi0gICAgUVNjcm9sbFZpZXc6OnNldEhTY3JvbGxCYXJNb2Rl
KGQtPmhtb2RlKTsKLSAgICBpZiAoZC0+dm1vZGU9PUF1dG8pCi0gICAgICAgIFFTY3JvbGxWaWV3
OjpzZXRWU2Nyb2xsQmFyTW9kZShkLT5wcmV2U2Nyb2xsYmFyVmlzaWJsZT9BbHdheXNPbjpBdXRv
KTsKLSAgICBlbHNlCi0gICAgICAgIFFTY3JvbGxWaWV3OjpzZXRWU2Nyb2xsQmFyTW9kZShkLT52
bW9kZSk7Ci0gICAgcmVzaXplQ29udGVudHModmlzaWJsZVdpZHRoKCksIHZpc2libGVIZWlnaHQo
KSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBLSFRNTFZpZXc6OmhpZGVFdmVudChRSGlkZUV2ZW50KiBl
KQpAQCAtNDE4LDI0ICszNDUsMTIgQEAgdm9pZCBLSFRNTFZpZXc6OnJlc2l6ZUV2ZW50IChRUmVz
aXplRXZlbgogewogICAgIFFTY3JvbGxWaWV3OjpyZXNpemVFdmVudChlKTsKIAotI2lmICFBUFBM
RV9DSEFOR0VTCi0gICAgaW50IHcgPSB2aXNpYmxlV2lkdGgoKTsKLSAgICBpbnQgaCA9IHZpc2li
bGVIZWlnaHQoKTsKLQotICAgIGxheW91dCgpOwotCi0gICAgLy8gIHRoaXMgaXMgdG8gbWFrZSBz
dXJlIHdlIGdldCB0aGUgcmlnaHQgd2lkdGggZXZlbiBpZiB0aGUgc2Nyb2xiYXIgaGFzIGRpc3Nh
cHBlYXJlZAotICAgIC8vIGR1ZSB0byB0aGUgc2l6ZSBjaGFuZ2UuCi0gICAgaWYodmlzaWJsZUhl
aWdodCgpICE9IGggfHwgdmlzaWJsZVdpZHRoKCkgIT0gdykKLSAgICAgICAgbGF5b3V0KCk7Ci0j
ZW5kaWYKICAgICBpZiAoIG1fcGFydCAmJiBtX3BhcnQtPnhtbERvY0ltcGwoKSApCiAgICAgICAg
IG1fcGFydC0+eG1sRG9jSW1wbCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KCBFdmVudE5hbWVzOjpy
ZXNpemVFdmVudCwgZmFsc2UsIGZhbHNlICk7CiAKICAgICBLQXBwbGljYXRpb246OnNlbmRQb3N0
ZWRFdmVudHModmlld3BvcnQoKSwgUUV2ZW50OjpQYWludCk7CiB9CiAKLSNpZiBBUFBMRV9DSEFO
R0VTCiB2b2lkIEtIVE1MVmlldzo6aW5pdFNjcm9sbEJhcnMoKQogewogICAgIGlmICghZC0+bmVl
ZFRvSW5pdFNjcm9sbEJhcnMpCkBAIC00NDMsNTMgKzM1OCw3IEBAIHZvaWQgS0hUTUxWaWV3Ojpp
bml0U2Nyb2xsQmFycygpCiAgICAgZC0+bmVlZFRvSW5pdFNjcm9sbEJhcnMgPSBmYWxzZTsKICAg
ICBzZXRTY3JvbGxCYXJzTW9kZShoU2Nyb2xsQmFyTW9kZSgpKTsKIH0KLSNlbmRpZgotCi0jaWYg
IUFQUExFX0NIQU5HRVMKLQotLy8gdGhpcyBpcyB0byBnZXQgcmlkIG9mIGEgY29tcGlsZXIgdmly
dHVhbCBvdmVybG9hZCBtaXNtYXRjaCB3YXJuaW5nLiBkbyBub3QgcmVtb3ZlCi12b2lkIEtIVE1M
Vmlldzo6ZHJhd0NvbnRlbnRzKCBRUGFpbnRlciopCi17Ci19Ci0KLXZvaWQgS0hUTUxWaWV3Ojpk
cmF3Q29udGVudHMoIFFQYWludGVyICpwLCBpbnQgZXgsIGludCBleSwgaW50IGV3LCBpbnQgZWgg
KQotewotICAgIC8va2REZWJ1ZyggNjAwMCApIDw8ICJkcmF3Q29udGVudHMgeD0iIDw8IGV4IDw8
ICIseT0iIDw8IGV5IDw8ICIsdz0iIDw8IGV3IDw8ICIsaD0iIDw8IGVoIDw8IGVuZGw7Ci0gICAg
aWYoIW1fcGFydC0+eG1sRG9jSW1wbCgpIHx8ICFtX3BhcnQtPnhtbERvY0ltcGwoKS0+cmVuZGVy
ZXIoKSkgewotICAgICAgICBwLT5maWxsUmVjdChleCwgZXksIGV3LCBlaCwgcGFsZXR0ZSgpLm5v
cm1hbCgpLmJydXNoKFFDb2xvckdyb3VwOjpCYXNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKCBkLT5wYWludEJ1ZmZlci0+d2lkdGgoKSA8IHZpc2libGVXaWR0aCgpICkKLSAg
ICAgICAgZC0+cGFpbnRCdWZmZXItPnJlc2l6ZSh2aXNpYmxlV2lkdGgoKSxQQUlOVF9CVUZGRVJf
SEVJR0hUKTsKLQotICAgIGludCBweT0wOwotICAgIHdoaWxlIChweSA8IGVoKSB7Ci0gICAgICAg
IGludCBwaCA9IGVoLXB5IDwgUEFJTlRfQlVGRkVSX0hFSUdIVCA/IGVoLXB5IDogUEFJTlRfQlVG
RkVSX0hFSUdIVDsKLSAgICAgICAgZC0+dHAtPmJlZ2luKGQtPnBhaW50QnVmZmVyKTsKLSAgICAg
ICAgZC0+dHAtPnRyYW5zbGF0ZSgtZXgsIC1leS1weSk7Ci0gICAgICAgIGQtPnRwLT5maWxsUmVj
dChleCwgZXkrcHksIGV3LCBwaCwgcGFsZXR0ZSgpLm5vcm1hbCgpLmJydXNoKFFDb2xvckdyb3Vw
OjpCYXNlKSk7Ci0gICAgICAgIG1fcGFydC0+eG1sRG9jSW1wbCgpLT5yZW5kZXJlcigpLT5wcmlu
dChkLT50cCwgZXgsIGV5K3B5LCBldywgcGgsIDAsIDApOwotI2lmZGVmIEJPWF9ERUJVRwotCWlm
IChtX3BhcnQtPnhtbERvY0ltcGwoKS0+Zm9jdXNOb2RlKCkpCi0JewotCSAgICBkLT50cC0+c2V0
QnJ1c2goUXQ6Ok5vQnJ1c2gpOwotCSAgICBkLT50cC0+ZHJhd1JlY3QobV9wYXJ0LT54bWxEb2NJ
bXBsKCktPmZvY3VzTm9kZSgpLT5nZXRSZWN0KCkpOwotCX0KLSNlbmRpZgotICAgICAgICBkLT50
cC0+ZW5kKCk7Ci0KLSAgICAgICAgcC0+ZHJhd1BpeG1hcChleCwgZXkrcHksICpkLT5wYWludEJ1
ZmZlciwgMCwgMCwgZXcsIHBoKTsKLSAgICAgICAgcHkgKz0gUEFJTlRfQlVGRkVSX0hFSUdIVDsK
LSAgICB9Ci0KLSAgICAvLyBFRElUIEZJWE1FOiBLREUgbmVlZHMgdG8gZHJhdyB0aGUgY2FyZXQg
aGVyZS4KLQotICAgIGtodG1sOjpEcmF3Q29udGVudHNFdmVudCBldmVudCggcCwgZXgsIGV5LCBl
dywgZWggKTsKLSAgICBRQXBwbGljYXRpb246OnNlbmRFdmVudCggbV9wYXJ0LCAmZXZlbnQgKTsK
LQotfQogCi0jZW5kaWYgLy8gIUFQUExFX0NIQU5HRVMKIAogdm9pZCBLSFRNTFZpZXc6OnNldE1h
cmdpbldpZHRoKGludCB3KQogewpAQCAtNjM0LDcgKzUwMyw2IEBAIHZvaWQgS0hUTUxWaWV3Ojps
YXlvdXQoKQogICAgIGlmIChkLT5yZXBhaW50UmVjdHMpCiAgICAgICAgIGQtPnJlcGFpbnRSZWN0
cy0+Y2xlYXIoKTsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICAvLyBOb3cgc2V0IG91ciBzY3Jv
bGxiYXIgc3RhdGUgZm9yIHRoZSBsYXlvdXQuCiAgICAgU2Nyb2xsQmFyTW9kZSBjdXJyZW50SE1v
ZGUgPSBoU2Nyb2xsQmFyTW9kZSgpOwogICAgIFNjcm9sbEJhck1vZGUgY3VycmVudFZNb2RlID0g
dlNjcm9sbEJhck1vZGUoKTsKQEAgLTY2MywxMCArNTMxLDYgQEAgdm9pZCBLSFRNTFZpZXc6Omxh
eW91dCgpCiAKICAgICAgICAgc3VwcHJlc3NTY3JvbGxCYXJzKGZhbHNlLCB0cnVlKTsKICAgICB9
Ci0jZWxzZQotICAgIFFTY3JvbGxWaWV3OjpzZXRIU2Nyb2xsQmFyTW9kZShoTW9kZSk7Ci0gICAg
UVNjcm9sbFZpZXc6OnNldFZTY3JvbGxCYXJNb2RlKHZNb2RlKTsKLSNlbmRpZgogCiAgICAgaW50
IG9sZEhlaWdodCA9IF9oZWlnaHQ7CiAgICAgaW50IG9sZFdpZHRoID0gX3dpZHRoOwpAQCAtNzEz
LDE0ICs1NzcsMTAgQEAgdm9pZCBLSFRNTFZpZXc6OmxheW91dCgpCiAgICAgfQogICAgIAogICAg
IGQtPmxheW91dENvdW50Kys7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIGlmIChLV1FBY2NPYmpl
Y3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcm9vdC0+ZG9jdW1lbnQo
KS0+Z2V0QWNjT2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihyb290LCAiQVhMYXlvdXRD
b21wbGV0ZSIpOwotI2VuZGlmCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgdXBkYXRlRGFzaGJv
YXJkUmVnaW9ucygpOwotI2VuZGlmCiAKICAgICBpZiAocm9vdC0+bmVlZHNMYXlvdXQoKSkgewog
ICAgICAgICAvL3FEZWJ1ZygibmVlZHMgbGF5b3V0LCBkZWxheWluZyByZXBhaW50Iik7CkBAIC03
MjksMTQgKzU4OSwxMSBAQCB2b2lkIEtIVE1MVmlldzo6bGF5b3V0KCkKICAgICB9CiAgICAgc2V0
U3RhdGljQmFja2dyb3VuZChkLT51c2VTbG93UmVwYWludHMpOwogCi0jaWYgQVBQTEVfQ0hBTkdF
UwogICAgIGlmIChkaWRGaXJzdExheW91dCkgewogICAgICAgICBtX3BhcnQtPmRpZEZpcnN0TGF5
b3V0KCk7CiAgICAgfQotI2VuZGlmCiB9CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiB2b2lkIEtIVE1M
Vmlldzo6dXBkYXRlRGFzaGJvYXJkUmVnaW9ucygpCiB7CiAgICAgRE9NOjpEb2N1bWVudEltcGwq
IGRvY3VtZW50ID0gbV9wYXJ0LT54bWxEb2NJbXBsKCk7CkBAIC03NDcsNyArNjA0LDYgQEAgdm9p
ZCBLSFRNTFZpZXc6OnVwZGF0ZURhc2hib2FyZFJlZ2lvbnMoKQogCUtXUShtX3BhcnQpLT5kYXNo
Ym9hcmRSZWdpb25zQ2hhbmdlZCgpOwogICAgIH0KIH0KLSNlbmRpZgogCiAvLwogLy8gRXZlbnQg
SGFuZGxpbmcKQEAgLTc3MCwxNiArNjI2LDYgQEAgdm9pZCBLSFRNTFZpZXc6OnZpZXdwb3J0TW91
c2VQcmVzc0V2ZW50KAogICAgIERPTTo6Tm9kZUltcGw6Ok1vdXNlRXZlbnQgbWV2KCBfbW91c2Ut
PnN0YXRlQWZ0ZXIoKSwgRE9NOjpOb2RlSW1wbDo6TW91c2VQcmVzcyApOwogICAgIG1fcGFydC0+
eG1sRG9jSW1wbCgpLT5wcmVwYXJlTW91c2VFdmVudCggZmFsc2UsIHhtLCB5bSwgJm1ldiApOwog
Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBpZiAoZC0+Y2xpY2tDb3VudCA+IDAgJiYKLSAgICAg
ICAgUVBvaW50KGQtPmNsaWNrWC14bSxkLT5jbGlja1kteW0pLm1hbmhhdHRhbkxlbmd0aCgpIDw9
IFFBcHBsaWNhdGlvbjo6c3RhcnREcmFnRGlzdGFuY2UoKSkKLQlkLT5jbGlja0NvdW50Kys7Ci0g
ICAgZWxzZSB7Ci0JZC0+Y2xpY2tDb3VudCA9IDE7Ci0JZC0+Y2xpY2tYID0geG07Ci0JZC0+Y2xp
Y2tZID0geW07Ci0gICAgfQotI2Vsc2UKICAgICBpZiAoS1dRKG1fcGFydCktPnBhc3NTdWJmcmFt
ZUV2ZW50VG9TdWJmcmFtZShtZXYpKSB7CiAgICAgICAgIGludmFsaWRhdGVDbGljaygpOwogICAg
ICAgICByZXR1cm47CkBAIC03OTEsNyArNjM3LDYgQEAgdm9pZCBLSFRNTFZpZXc6OnZpZXdwb3J0
TW91c2VQcmVzc0V2ZW50KAogICAgIGQtPmNsaWNrTm9kZSA9IG1ldi5pbm5lck5vZGUuZ2V0KCk7
CiAgICAgaWYgKGQtPmNsaWNrTm9kZSkKICAgICAgICAgZC0+Y2xpY2tOb2RlLT5yZWYoKTsKLSNl
bmRpZiAgICAKIAogICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KG1v
dXNlZG93bkV2ZW50LG1ldi5pbm5lck5vZGUuZ2V0KCksdHJ1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5jbGlja0NvdW50LF9tb3VzZSx0cnVlLERPTTo6
Tm9kZUltcGw6Ok1vdXNlUHJlc3MpOwpAQCAtNzk5LDcgKzY0NCw2IEBAIHZvaWQgS0hUTUxWaWV3
Ojp2aWV3cG9ydE1vdXNlUHJlc3NFdmVudCgKICAgICBpZiAoIXN3YWxsb3dFdmVudCkgewogCWto
dG1sOjpNb3VzZVByZXNzRXZlbnQgZXZlbnQoIF9tb3VzZSwgeG0sIHltLCBtZXYudXJsLCBtZXYu
dGFyZ2V0LCBtZXYuaW5uZXJOb2RlLmdldCgpICk7CiAJUUFwcGxpY2F0aW9uOjpzZW5kRXZlbnQo
IG1fcGFydCwgJmV2ZW50ICk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAvLyBNYW55IEFL
IHdpZGdldHMgcnVuIHRoZWlyIG93biBldmVudCBsb29wcyBhbmQgY29uc3VtZSBldmVudHMgd2hp
bGUgdGhlIG1vdXNlIGlzIGRvd24uCiAgICAgICAgIC8vIFdoZW4gdGhleSBmaW5pc2gsIGN1cnJl
bnRFdmVudCBpcyB0aGUgbW91c2VVcCB0aGF0IHRoZXkgZXhpdGVkIG9uLiAgV2UgbmVlZCB0byB1
cGRhdGUKICAgICAgICAgLy8gdGhlIGtodG1sIHN0YXRlIHdpdGggdGhpcyBtb3VzZVVwLCB3aGlj
aCBraHRtbCBuZXZlciBzYXcuCkBAIC04MDgsNyArNjUyLDYgQEAgdm9pZCBLSFRNTFZpZXc6OnZp
ZXdwb3J0TW91c2VQcmVzc0V2ZW50KAogICAgICAgICBpZiAoS1dRKG1fcGFydCktPmxhc3RFdmVu
dElzTW91c2VVcCgpKSB7CiAgICAgICAgICAgICBkLT5tb3VzZVByZXNzZWQgPSBmYWxzZTsKICAg
ICAgICAgfQotI2VuZGlmICAgICAgICAKICNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQogCWVt
aXQgbV9wYXJ0LT5ub2RlQWN0aXZhdGVkKG1ldi5pbm5lck5vZGUuZ2V0KCkpOwogI2VuZGlmCkBA
IC04MjYsMTUgKzY2OSwxMiBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZURvdWJsZUNs
aWNrCiAKICAgICAvL2tkRGVidWcoIDYwMDAgKSA8PCAibW91c2VEYmxDbGlja0V2ZW50OiB4PSIg
PDwgeG0gPDwgIiwgeT0iIDw8IHltIDw8IGVuZGw7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAg
Ly8gV2UgZ2V0IHRoaXMgaW5zdGVhZCBvZiBhIHNlY29uZCBtb3VzZS11cCAKICAgICBkLT5tb3Vz
ZVByZXNzZWQgPSBmYWxzZTsKLSNlbmRpZgogCiAgICAgRE9NOjpOb2RlSW1wbDo6TW91c2VFdmVu
dCBtZXYoIF9tb3VzZS0+c3RhdGVBZnRlcigpLCBET006Ok5vZGVJbXBsOjpNb3VzZURibENsaWNr
ICk7CiAgICAgbV9wYXJ0LT54bWxEb2NJbXBsKCktPnByZXBhcmVNb3VzZUV2ZW50KCBmYWxzZSwg
eG0sIHltLCAmbWV2ICk7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYgKEtXUShtX3BhcnQp
LT5wYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUobWV2KSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC04NTQsMjMgKzY5NCw2IEBAIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydE1vdXNlRG91YmxlQ2xp
Y2sKIAlraHRtbDo6TW91c2VEb3VibGVDbGlja0V2ZW50IGV2ZW50MiggX21vdXNlLCB4bSwgeW0s
IG1ldi51cmwsIG1ldi50YXJnZXQsIG1ldi5pbm5lck5vZGUuZ2V0KCkgKTsKIAlRQXBwbGljYXRp
b246OnNlbmRFdmVudCggbV9wYXJ0LCAmZXZlbnQyICk7CiAgICAgfQotI2Vsc2UKLSAgICAvLyBX
ZSBkbyB0aGUgc2FtZSB0aGluZyBhcyB2aWV3cG9ydE1vdXNlUHJlc3NFdmVudCgpIGhlcmUsIHNp
bmNlIHRoZSBET00gZG9lcyBub3QgdHJlYXQKLSAgICAvLyBzaW5nbGUgYW5kIGRvdWJsZS1jbGlj
ayBldmVudHMgYXMgc2VwYXJhdGUgKG9ubHkgdGhlIGRldGFpbCwgaS5lLiBudW1iZXIgb2YgY2xp
Y2tzIGRpZmZlcnMpCi0gICAgLy8gSW4gb3RoZXIgd29yZHMgYW4gZXZlbiBkZXRhaWwgdmFsdWUg
Zm9yIGEgbW91c2UgY2xpY2sgZXZlbnQgbWVhbnMgYSBkb3VibGUgY2xpY2ssIGFuZCBhbgotICAg
IC8vIG9kZCBkZXRhaWwgdmFsdWUgbWVhbnMgYSBzaW5nbGUgY2xpY2sKLSAgICBib29sIHN3YWxs
b3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChtb3VzZWRvd25FdmVudCxtZXYuaW5uZXJOb2Rl
LmdldCgpLHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZC0+Y2xpY2tDb3VudCxfbW91c2UsdHJ1ZSxET006Ok5vZGVJbXBsOjpNb3VzZURibENsaWNrKTsK
LQotICAgIGlmICghc3dhbGxvd0V2ZW50KSB7Ci0Ja2h0bWw6Ok1vdXNlRG91YmxlQ2xpY2tFdmVu
dCBldmVudCggX21vdXNlLCB4bSwgeW0sIG1ldi51cmwsIG1ldi50YXJnZXQsIG1ldi5pbm5lck5v
ZGUuZ2V0KCkgKTsKLQlRQXBwbGljYXRpb246OnNlbmRFdmVudCggbV9wYXJ0LCAmZXZlbnQgKTsK
LQotCS8vICMjIwotCS8vaWYgKCB1cmwubGVuZ3RoKCkgKQotCS8vZW1pdCBkb3VibGVDbGljaygg
dXJsLnFzdHJpbmcoKSwgX21vdXNlLT5idXR0b24oKSApOwotICAgIH0KLSNlbmRpZiAgICAKIAog
ICAgIGludmFsaWRhdGVDbGljaygpOwogfQpAQCAtODk4LDIwICs3MjEsMTIgQEAgdm9pZCBLSFRN
TFZpZXc6OnZpZXdwb3J0TW91c2VNb3ZlRXZlbnQoIAogICAgIC8vIHdhcyBwcmVzc2VkLCByYXRo
ZXIgdGhhbiB1cGRhdGluZyBmb3Igbm9kZXMgdGhlIG1vdXNlIG1vdmVzIG92ZXIgYXMgeW91IGhv
bGQgdGhlIG1vdXNlIGRvd24uCiAgICAgRE9NOjpOb2RlSW1wbDo6TW91c2VFdmVudCBtZXYoIF9t
b3VzZS0+c3RhdGVBZnRlcigpLCBET006Ok5vZGVJbXBsOjpNb3VzZU1vdmUgKTsKICAgICBtX3Bh
cnQtPnhtbERvY0ltcGwoKS0+cHJlcGFyZU1vdXNlRXZlbnQoZC0+bW91c2VQcmVzc2VkICYmIG1f
cGFydC0+bW91c2VEb3duTWF5U3RhcnRTZWxlY3QoKSwgZC0+bW91c2VQcmVzc2VkLCB4bSwgeW0s
ICZtZXYgKTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYgKEtXUShtX3BhcnQpLT5wYXNzU3Vi
ZnJhbWVFdmVudFRvU3ViZnJhbWUobWV2KSkKICAgICAgICAgcmV0dXJuOwotI2VuZGlmCiAKICAg
ICBib29sIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChtb3VzZW1vdmVFdmVudCxt
ZXYuaW5uZXJOb2RlLmdldCgpLGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsX21vdXNlLHRydWUsRE9NOjpOb2RlSW1wbDo6TW91c2VNb3ZlKTsKIAot
I2lmICFBUFBMRV9DSEFOR0VTCi0gICAgaWYgKGQtPmNsaWNrQ291bnQgPiAwICYmCi0gICAgICAg
IFFQb2ludChkLT5jbGlja1gteG0sZC0+Y2xpY2tZLXltKS5tYW5oYXR0YW5MZW5ndGgoKSA+IFFB
cHBsaWNhdGlvbjo6c3RhcnREcmFnRGlzdGFuY2UoKSkgewotCWQtPmNsaWNrQ291bnQgPSAwOyAg
Ly8gbW92aW5nIHRoZSBtb3VzZSBvdXRzaWRlIHRoZSB0aHJlc2hvbGQgaW52YWxpZGF0ZXMgdGhl
IGNsaWNrCi0gICAgfQotI2VuZGlmCiAKICAgICAvLyBleGVjdXRlIHRoZSBzY2hlZHVsZWQgc2Ny
aXB0LiBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGUgbW91c2VvdmVyIGV2ZW50cyBjb21lIGFmdGVy
IHRoZSBtb3VzZW91dCBldmVudHMKICAgICBtX3BhcnQtPmV4ZWN1dGVTY2hlZHVsZWRTY3JpcHQo
KTsKQEAgLTk1Myw1MiArNzY4LDI4IEBAIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydE1vdXNlTW92
ZUV2ZW50KCAKICAgICAgICAgYyA9IEtDdXJzb3I6OnNpemVBbGxDdXJzb3IoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDVVJTT1JfRV9SRVNJWkU6Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAg
ICAgICBjID0gS0N1cnNvcjo6ZWFzdFJlc2l6ZUN1cnNvcigpOwogICAgICAgICBicmVhazsKLSNl
bmRpZgogICAgIGNhc2UgQ1VSU09SX1dfUkVTSVpFOgotI2lmIEFQUExFX0NIQU5HRVMKICAgICAg
ICAgYyA9IEtDdXJzb3I6Ondlc3RSZXNpemVDdXJzb3IoKTsKLSNlbHNlCi0gICAgICAgIGMgPSBL
Q3Vyc29yOjpzaXplSG9yQ3Vyc29yKCk7Ci0jZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDVVJTT1JfTl9SRVNJWkU6Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICBjID0gS0N1cnNv
cjo6bm9ydGhSZXNpemVDdXJzb3IoKTsKICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICBjYXNl
IENVUlNPUl9TX1JFU0laRToKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGMgPSBLQ3Vyc29y
Ojpzb3V0aFJlc2l6ZUN1cnNvcigpOwotI2Vsc2UKLSAgICAgICAgYyA9IEtDdXJzb3I6OnNpemVW
ZXJDdXJzb3IoKTsKLSNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIENVUlNPUl9ORV9S
RVNJWkU6Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICBjID0gS0N1cnNvcjo6bm9ydGhFYXN0
UmVzaXplQ3Vyc29yKCk7CiAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgY2FzZSBDVVJTT1Jf
U1dfUkVTSVpFOgotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgYyA9IEtDdXJzb3I6OnNvdXRo
V2VzdFJlc2l6ZUN1cnNvcigpOwotI2Vsc2UKLSAgICAgICAgYyA9IEtDdXJzb3I6OnNpemVCRGlh
Z0N1cnNvcigpOwotI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1VSU09SX05XX1JF
U0laRToKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGMgPSBLQ3Vyc29yOjpub3J0aFdlc3RS
ZXNpemVDdXJzb3IoKTsKICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICBjYXNlIENVUlNPUl9T
RV9SRVNJWkU6Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICBjID0gS0N1cnNvcjo6c291dGhF
YXN0UmVzaXplQ3Vyc29yKCk7Ci0jZWxzZQotICAgICAgICBjID0gS0N1cnNvcjo6c2l6ZUZEaWFn
Q3Vyc29yKCk7Ci0jZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDVVJTT1JfVEVYVDoK
ICAgICAgICAgYyA9IEtDdXJzb3I6OmliZWFtQ3Vyc29yKCk7CkBAIC0xMDU5LDE4ICs4NTAsMTMg
QEAgdm9pZCBLSFRNTFZpZXc6OnZpZXdwb3J0TW91c2VSZWxlYXNlRXZlbgogICAgIERPTTo6Tm9k
ZUltcGw6Ok1vdXNlRXZlbnQgbWV2KCBfbW91c2UtPnN0YXRlQWZ0ZXIoKSwgRE9NOjpOb2RlSW1w
bDo6TW91c2VSZWxlYXNlICk7CiAgICAgbV9wYXJ0LT54bWxEb2NJbXBsKCktPnByZXBhcmVNb3Vz
ZUV2ZW50KCBmYWxzZSwgeG0sIHltLCAmbWV2ICk7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAg
aWYgKEtXUShtX3BhcnQpLT5wYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUobWV2KSkKICAgICAg
ICAgcmV0dXJuOwotI2VuZGlmCiAKICAgICBib29sIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91
c2VFdmVudChtb3VzZXVwRXZlbnQsbWV2LmlubmVyTm9kZS5nZXQoKSx0cnVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQtPmNsaWNrQ291bnQsX21vdXNlLGZh
bHNlLERPTTo6Tm9kZUltcGw6Ok1vdXNlUmVsZWFzZSk7CiAKICAgICBpZiAoZC0+Y2xpY2tDb3Vu
dCA+IDAgJiYgbWV2LmlubmVyTm9kZSA9PSBkLT5jbGlja05vZGUKLSNpZiAhQVBQTEVfQ0hBTkdF
UwotICAgICAgICAgICAgJiYgUVBvaW50KGQtPmNsaWNrWC14bSxkLT5jbGlja1kteW0pLm1hbmhh
dHRhbkxlbmd0aCgpIDw9IFFBcHBsaWNhdGlvbjo6c3RhcnREcmFnRGlzdGFuY2UoKQotI2VuZGlm
CiAgICAgICAgICkKIAlkaXNwYXRjaE1vdXNlRXZlbnQoY2xpY2tFdmVudCxtZXYuaW5uZXJOb2Rl
LmdldCgpLHRydWUsCiAJCQkgICBkLT5jbGlja0NvdW50LF9tb3VzZSx0cnVlLERPTTo6Tm9kZUlt
cGw6Ok1vdXNlUmVsZWFzZSk7CkBAIC0xMDkzLDkzICs4NzksNiBAQCB2b2lkIEtIVE1MVmlldzo6
a2V5UHJlc3NFdmVudCggUUtleUV2ZW50CiAgICAgICAgIH0KICAgICB9CiAKLSNpZiAhQVBQTEVf
Q0hBTkdFUwotICAgIGludCBvZmZzID0gKGNsaXBwZXIoKS0+aGVpZ2h0KCkgPCAzMCkgPyBjbGlw
cGVyKCktPmhlaWdodCgpIDogMzA7Ci0gICAgaWYgKF9rZS0+c3RhdGUoKSZTaGlmdEJ1dHRvbikK
LSAgICAgIHN3aXRjaChfa2UtPmtleSgpKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgS2V5X1Nw
YWNlOgotICAgICAgICAgICAgaWYgKCBkLT52bW9kZSA9PSBRU2Nyb2xsVmlldzo6QWx3YXlzT2Zm
ICkKLSAgICAgICAgICAgICAgICBfa2UtPmFjY2VwdCgpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHNjcm9sbEJ5KCAwLCAtY2xpcHBlcigpLT5oZWlnaHQoKSAtIG9mZnMgKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgZWxzZQotICAgICAgICBzd2l0Y2gg
KCBfa2UtPmtleSgpICkKLSAgICAgICAgewotICAgICAgICBjYXNlIEtleV9Eb3duOgotICAgICAg
ICBjYXNlIEtleV9KOgotICAgICAgICAgICAgaWYgKCBkLT52bW9kZSA9PSBRU2Nyb2xsVmlldzo6
QWx3YXlzT2ZmICkKLSAgICAgICAgICAgICAgICBfa2UtPmFjY2VwdCgpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHNjcm9sbEJ5KCAwLCAxMCApOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBLZXlfU3BhY2U6Ci0gICAgICAgIGNhc2UgS2V5X05leHQ6Ci0g
ICAgICAgICAgICBpZiAoIGQtPnZtb2RlID09IFFTY3JvbGxWaWV3OjpBbHdheXNPZmYgKQotICAg
ICAgICAgICAgICAgIF9rZS0+YWNjZXB0KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgc2Nyb2xsQnkoIDAsIGNsaXBwZXIoKS0+aGVpZ2h0KCkgLSBvZmZzICk7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEtleV9VcDoKLSAgICAgICAgY2FzZSBLZXlfSzoK
LSAgICAgICAgICAgIGlmICggZC0+dm1vZGUgPT0gUVNjcm9sbFZpZXc6OkFsd2F5c09mZiApCi0g
ICAgICAgICAgICAgICAgX2tlLT5hY2NlcHQoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzY3JvbGxCeSggMCwgLTEwICk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIEtleV9QcmlvcjoKLSAgICAgICAgICAgIGlmICggZC0+dm1vZGUgPT0gUVNjcm9sbFZp
ZXc6OkFsd2F5c09mZiApCi0gICAgICAgICAgICAgICAgX2tlLT5hY2NlcHQoKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzY3JvbGxCeSggMCwgLWNsaXBwZXIoKS0+aGVpZ2h0
KCkgKyBvZmZzICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLZXlfUmlnaHQ6
Ci0gICAgICAgIGNhc2UgS2V5X0w6Ci0gICAgICAgICAgICBpZiAoIGQtPmhtb2RlID09IFFTY3Jv
bGxWaWV3OjpBbHdheXNPZmYgKQotICAgICAgICAgICAgICAgIF9rZS0+YWNjZXB0KCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2Nyb2xsQnkoIDEwLCAwICk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLZXlfTGVmdDoKLSAgICAgICAgY2FzZSBLZXlfSDoK
LSAgICAgICAgICAgIGlmICggZC0+aG1vZGUgPT0gUVNjcm9sbFZpZXc6OkFsd2F5c09mZiApCi0g
ICAgICAgICAgICAgICAgX2tlLT5hY2NlcHQoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzY3JvbGxCeSggLTEwLCAwICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBLZXlfRW50ZXI6Ci0gICAgICAgIGNhc2UgS2V5X1JldHVybjoKLQkgICAgLy8gIyMjIEZJ
WE1FOgotCSAgICAvLyBvciBldmVuIGJldHRlciB0byBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmV2
ZW50KCkKLSAgICAgICAgICAgIGlmIChtX3BhcnQtPnhtbERvY0ltcGwoKSkgewotCQlOb2RlSW1w
bCAqbiA9IG1fcGFydC0+eG1sRG9jSW1wbCgpLT5mb2N1c05vZGUoKTsKLQkJaWYgKG4pCi0JCSAg
ICBuLT5zZXRBY3RpdmUoKTsKLQkgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgS2V5X0hvbWU6Ci0gICAgICAgICAgICBpZiAoIGQtPnZtb2RlID09IFFTY3JvbGxWaWV3OjpB
bHdheXNPZmYgKQotICAgICAgICAgICAgICAgIF9rZS0+YWNjZXB0KCk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgc2V0Q29udGVudHNQb3MoIDAsIDAgKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEtleV9FbmQ6Ci0gICAgICAgICAgICBpZiAoIGQtPnZtb2Rl
ID09IFFTY3JvbGxWaWV3OjpBbHdheXNPZmYgKQotICAgICAgICAgICAgICAgIF9rZS0+YWNjZXB0
KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0Q29udGVudHNQb3MoIDAs
IGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkgKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotCSAgICBfa2UtPmlnbm9yZSgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgX2tlLT5hY2NlcHQoKTsKLSNlbmRpZgogfQogCiB2b2lkIEtI
VE1MVmlldzo6a2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCAqX2tlKQpAQCAtMTIwMCw0MyArODk5
LDE1IEBAIHZvaWQgS0hUTUxWaWV3OjprZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW4KIHZvaWQgS0hU
TUxWaWV3Ojpjb250ZW50c0NvbnRleHRNZW51RXZlbnQgKCBRQ29udGV4dE1lbnVFdmVudCAqX2Nl
ICkKIHsKIC8vICMjIyB3aGF0IGtpbmQgb2YgYyoqKiBpcyB0aGF0ID8KLSNpZiAwCi0gICAgaWYg
KCFtX3BhcnQtPnhtbERvY0ltcGwoKSkgcmV0dXJuOwotICAgIGludCB4bSA9IF9jZS0+eCgpOwot
ICAgIGludCB5bSA9IF9jZS0+eSgpOwotCi0gICAgRE9NOjpOb2RlSW1wbDo6TW91c2VFdmVudCBt
ZXYoIF9jZS0+c3RhdGUoKSwgRE9NOjpOb2RlSW1wbDo6TW91c2VNb3ZlICk7IC8vICMjIyBub3Qg
YSBtb3VzZSBldmVudCEKLSAgICBtX3BhcnQtPnhtbERvY0ltcGwoKS0+cHJlcGFyZU1vdXNlRXZl
bnQoIHhtLCB5bSwgJm1ldiApOwotCi0gICAgTm9kZUltcGwgKnRhcmdldE5vZGUgPSBtZXYuaW5u
ZXJOb2RlLmdldCgpOwotICAgIGlmICh0YXJnZXROb2RlICYmIHRhcmdldE5vZGUtPnJlbmRlcmVy
KCkgJiYgdGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkgewotICAgICAgICBpbnQg
YWJzeCA9IDA7Ci0gICAgICAgIGludCBhYnN5ID0gMDsKLSAgICAgICAgdGFyZ2V0Tm9kZS0+cmVu
ZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbihhYnN4LGFic3kpOwotICAgICAgICBRUG9pbnQgcG9z
KHhtLWFic3gseW0tYWJzeSk7Ci0KLSAgICAgICAgUVdpZGdldCAqdyA9IHN0YXRpY19jYXN0PFJl
bmRlcldpZGdldCo+KHRhcmdldE5vZGUtPnJlbmRlcmVyKCkpLT53aWRnZXQoKTsKLSAgICAgICAg
UUNvbnRleHRNZW51RXZlbnQgY21lKF9jZS0+cmVhc29uKCkscG9zLF9jZS0+Z2xvYmFsUG9zKCks
X2NlLT5zdGF0ZSgpKTsKLSAgICAgICAgc2V0SWdub3JlRXZlbnRzKHRydWUpOwotICAgICAgICBR
QXBwbGljYXRpb246OnNlbmRFdmVudCh3LCZjbWUpOwotICAgICAgICBzZXRJZ25vcmVFdmVudHMo
ZmFsc2UpOwotICAgIH0KLSNlbmRpZgogfQogCiBib29sIEtIVE1MVmlldzo6ZGlzcGF0Y2hEcmFn
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIERPTTo6Tm9kZUltcGwgKmRyYWdU
YXJnZXQsIGNvbnN0IFFQb2ludCAmbG9jLCBET006OkNsaXBib2FyZEltcGwgKmNsaXBib2FyZCkK
IHsKICAgICBpbnQgY2xpZW50WCwgY2xpZW50WTsKICAgICB2aWV3cG9ydFRvQ29udGVudHMobG9j
LngoKSwgbG9jLnkoKSwgY2xpZW50WCwgY2xpZW50WSk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAg
IFFQb2ludCBzY3JlZW5Mb2MgPSB2aWV3cG9ydFRvR2xvYmFsKGxvYyk7CiAgICAgaW50IHNjcmVl
blggPSBzY3JlZW5Mb2MueCgpOwogICAgIGludCBzY3JlZW5ZID0gc2NyZWVuTG9jLnkoKTsKLSNl
bHNlCi0jd2FybmluZyBOZWVkIGltcGxlbWVudGF0aW9uIG9mIGNvbnZlcnRpbmcgZXZlbnQgbG9j
YXRpb24gdG8gc2NyZWVuIGxvY2F0aW9uCi0gICAgaW50IHNjcmVlblggPSBsb2MueCgpOwotICAg
IGludCBzY3JlZW5ZID0gbG9jLnkoKTsKLSNlbmRpZgogICAgIGJvb2wgY3RybEtleSA9IDA7ICAg
Ly8gRklYTUUgLSBzZXQgdXAgbW9kaWZpZXJzLCBncmFiIGZyb20gQUsgb3IgQ0cKICAgICBib29s
IGFsdEtleSA9IDA7CiAgICAgYm9vbCBzaGlmdEtleSA9IDA7CkBAIC0xMzAzLDQ1ICs5NzQsNiBA
QCBib29sIEtIVE1MVmlldzo6cGVyZm9ybURyYWdBbmREcm9wKGNvbnN0CiAgICAgcmV0dXJuIGFj
Y2VwdDsKIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0KLWJvb2wgS0hUTUxWaWV3Ojpmb2N1c05l
eHRQcmV2Q2hpbGQoIGJvb2wgbmV4dCApCi17Ci0gICAgLy8gTm93IHRyeSB0byBmaW5kIHRoZSBu
ZXh0IGNoaWxkCi0gICAgaWYgKG1fcGFydC0+eG1sRG9jSW1wbCgpKSB7Ci0gICAgICAgIGZvY3Vz
TmV4dFByZXZOb2RlKG5leHQpOwotICAgICAgICBpZiAobV9wYXJ0LT54bWxEb2NJbXBsKCktPmZv
Y3VzTm9kZSgpICE9IDApCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gZm9jdXMgbm9kZSBm
b3VuZAotICAgIH0KLQotICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGVyZSBpcyBubyBuZXh0L3By
ZXZpb3VzIGNoaWxkIHRvIGdvIHRvLCBzbyBwYXNzIHVwIHRvIHRoZSBuZXh0L3ByZXZpb3VzIGNo
aWxkIGluIG91ciBwYXJlbnQKLSAgICBpZiAobV9wYXJ0LT5wYXJlbnRQYXJ0KCkgJiYgbV9wYXJ0
LT5wYXJlbnRQYXJ0KCktPnZpZXcoKSkgewotICAgICAgICByZXR1cm4gbV9wYXJ0LT5wYXJlbnRQ
YXJ0KCktPnZpZXcoKS0+Zm9jdXNOZXh0UHJldkNoaWxkKG5leHQpOwotICAgIH0KLQotICAgIHJl
dHVybiBRV2lkZ2V0Ojpmb2N1c05leHRQcmV2Q2hpbGQobmV4dCk7Ci19Ci0KLXZvaWQgS0hUTUxW
aWV3Ojpkb0F1dG9TY3JvbGwoKQotewotICAgIFFQb2ludCBwb3MgPSBRQ3Vyc29yOjpwb3MoKTsK
LSAgICBwb3MgPSB2aWV3cG9ydCgpLT5tYXBGcm9tR2xvYmFsKCBwb3MgKTsKLQotICAgIGludCB4
bSwgeW07Ci0gICAgdmlld3BvcnRUb0NvbnRlbnRzKHBvcy54KCksIHBvcy55KCksIHhtLCB5bSk7
Ci0KLSAgICBwb3MgPSBRUG9pbnQocG9zLngoKSAtIHZpZXdwb3J0KCktPngoKSwgcG9zLnkoKSAt
IHZpZXdwb3J0KCktPnkoKSk7Ci0gICAgaWYgKCAocG9zLnkoKSA8IDApIHx8IChwb3MueSgpID4g
dmlzaWJsZUhlaWdodCgpKSB8fAotICAgICAgICAgKHBvcy54KCkgPCAwKSB8fCAocG9zLngoKSA+
IHZpc2libGVXaWR0aCgpKSApCi0gICAgewotICAgICAgICBEb2N1bWVudEltcGwgKmRvYyA9IG1f
cGFydC0+eG1sRG9jSW1wbCgpOwotICAgICAgICBpZiAoZG9jICYmIGRvYy0+cmVuZGVyZXIoKSkg
ewotICAgICAgICAgICAgZG9jLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxS
ZWN0VG9WaXNpYmxlKFFSZWN0KHhtLCB5bSwgMCwgNSkpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci0jZW5kaWYKIAogRE9NOjpOb2RlSW1wbCAqS0hUTUxWaWV3Ojpub2RlVW5kZXJNb3VzZSgpIGNv
bnN0CiB7CkBAIC0xNTA4LDI0ICsxMTQwLDYgQEAgdm9pZCBLSFRNTFZpZXc6OmZvY3VzTmV4dFBy
ZXZOb2RlKGJvb2wgbgogICAgIGVtaXQgbV9wYXJ0LT5ub2RlQWN0aXZhdGVkKG5ld0ZvY3VzTm9k
ZSk7CiAjZW5kaWYKIAotI2lmIDAKLSAgICBpZiAobmV3Rm9jdXNOb2RlKSB7Ci0KLSAgICAgICAg
Ly8gdGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZS4gaXQgc2hvdWxkIHJ1biBhIHF1ZXJ5IG9uIHRo
ZSB0cmVlIChEaXJrKQotICAgICAgICAvLyBJJ2xsIGZpeCB0aGlzIHZlcnkgcGFydGljdWxhciBw
YXJ0IG9mIHRoZSBjb2RlIHNvb24gd2hlbiBJIGNsZWFuZWQKLSAgICAgICAgLy8gdXAgdGhlIHBv
c2l0aW9uaW5nIGNvZGUKLSAgICAgICAgLy8gSWYgdGhlIG5ld2x5IGZvY3Vzc2VkIG5vZGUgaXMg
YSBsaW5rLCBub3RpZnkgdGhlIHBhcnQKLQotICAgICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwg
KmFuY2hvciA9IDA7Ci0gICAgICAgIGlmICgobmV3Rm9jdXNOb2RlLT5pZCgpID09IElEX0EgfHwg
bmV3Rm9jdXNOb2RlLT5pZCgpID09IElEX0FSRUEpKQotICAgICAgICAgICAgYW5jaG9yID0gc3Rh
dGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICo+KG5ld0ZvY3VzTm9kZSk7Ci0KLSAgICAg
ICAgaWYgKGFuY2hvciAmJiAhYW5jaG9yLT5hcmVhSHJlZigpLmlzTnVsbCgpKQotICAgICAgICAg
ICAgbV9wYXJ0LT5vdmVyVVJMKGFuY2hvci0+YXJlYUhyZWYoKS5xc3RyaW5nKCksIDApOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX3BhcnQtPm92ZXJVUkwoUVN0cmluZygpLCAwKTsKLSAg
ICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBLSFRNTFZpZXc6OnNldE1lZGlhVHlwZSggY29uc3QgUVN0
cmluZyAmbWVkaXVtICkKQEAgLTE1MzUsMTY3ICsxMTQ5LDEzIEBAIHZvaWQgS0hUTUxWaWV3Ojpz
ZXRNZWRpYVR5cGUoIGNvbnN0IFFTdHIKIAogUVN0cmluZyBLSFRNTFZpZXc6Om1lZGlhVHlwZSgp
IGNvbnN0CiB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGFuIG92
ZXJyaWRlIHR5cGUuCiAgICAgUVN0cmluZyBvdmVycmlkZVR5cGUgPSBLV1EobV9wYXJ0KS0+b3Zl
cnJpZGVNZWRpYVR5cGUoKTsKICAgICBpZiAoIW92ZXJyaWRlVHlwZS5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIG92ZXJyaWRlVHlwZTsKLSNlbmRpZgogICAgIHJldHVybiBtX21lZGl1bTsKIH0K
IAotI2lmICFBUFBMRV9DSEFOR0VTCi0KLXZvaWQgS0hUTUxWaWV3OjpwcmludCgpCi17Ci0gICAg
aWYoIW1fcGFydC0+eG1sRG9jSW1wbCgpKSByZXR1cm47Ci0gICAga2h0bWw6OlJlbmRlckNhbnZh
cyAqcm9vdCA9IHN0YXRpY19jYXN0PGtodG1sOjpSZW5kZXJDYW52YXMgKj4obV9wYXJ0LT54bWxE
b2NJbXBsKCktPnJlbmRlcmVyKCkpOwotICAgIGlmKCFyb290KSByZXR1cm47Ci0KLSAgICAvLyB0
aGlzIG9ubHkgd29ya3Mgb24gVW5peCAtIHdlIGFzc3VtZSA3MmRwaQotICAgIEtQcmludGVyICpw
cmludGVyID0gbmV3IEtQcmludGVyKFFQcmludGVyOjpQcmludGVyUmVzb2x1dGlvbik7Ci0gICAg
cHJpbnRlci0+YWRkRGlhbG9nUGFnZShuZXcgS0hUTUxQcmludFNldHRpbmdzKCkpOwotICAgIGlm
KHByaW50ZXItPnNldHVwKHRoaXMpKSB7Ci0gICAgICAgIHZpZXdwb3J0KCktPnNldEN1cnNvcigg
d2FpdEN1cnNvciApOyAvLyBvbmx5IHZpZXdwb3J0KCksIG5vIFFBcHBsaWNhdGlvbjo6LCBvdGhl
cndpc2Ugd2UgZ2V0IHRoZSBidXN5IGN1cnNvciBpbiBrZGVwcmludCdzIGRpYWxvZ3MKLSAgICAg
ICAgLy8gc2V0IHVwIEtQcmludGVyCi0gICAgICAgIHByaW50ZXItPnNldEZ1bGxQYWdlKGZhbHNl
KTsKLSAgICAgICAgcHJpbnRlci0+c2V0Q3JlYXRvcigiS0RFIDMuMCBIVE1MIExpYnJhcnkiKTsK
LSAgICAgICAgUVN0cmluZyBkb2NuYW1lID0gbV9wYXJ0LT54bWxEb2NJbXBsKCktPlVSTCgpOwot
ICAgICAgICBpZiAoICFkb2NuYW1lLmlzRW1wdHkoKSApCi0JICAgIHByaW50ZXItPnNldERvY05h
bWUoZG9jbmFtZSk7Ci0KLSAgICAgICAgUVBhaW50ZXIgKnAgPSBuZXcgUVBhaW50ZXI7Ci0gICAg
ICAgIHAtPmJlZ2luKCBwcmludGVyICk7Ci0gICAgICAgIGtodG1sOjpzZXRQcmludFBhaW50ZXIo
IHAgKTsKLQotICAgICAgICBtX3BhcnQtPnhtbERvY0ltcGwoKS0+c2V0UGFpbnREZXZpY2UoIHBy
aW50ZXIgKTsKLSAgICAgICAgUVN0cmluZyBvbGRNZWRpYVR5cGUgPSBtZWRpYVR5cGUoKTsKLSAg
ICAgICAgc2V0TWVkaWFUeXBlKCAicHJpbnQiICk7Ci0gICAgICAgIC8vIFdlIGlnbm9yZSBtYXJn
aW4gc2V0dGluZ3MgZm9yIGh0bWwgYW5kIGJvZHkgd2hlbiBwcmludGluZwotICAgICAgICAvLyBh
bmQgdXNlIHRoZSBkZWZhdWx0IG1hcmdpbnMgZnJvbSB0aGUgcHJpbnQtc3lzdGVtCi0gICAgICAg
IC8vIChJbiBRdCAzLjAueCB0aGUgZGVmYXVsdCBtYXJnaW5zIGFyZSBoYXJkY29kZWQgaW4gUXQp
Ci0gICAgICAgIG1fcGFydC0+eG1sRG9jSW1wbCgpLT5zZXRQcmludFN0eWxlU2hlZXQoIHByaW50
ZXItPm9wdGlvbigia2RlLWtodG1sLXByaW50ZnJpZW5kbHkiKSA9PSAidHJ1ZSIgPwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB7IGJhY2tncm91
bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9y
dGFudDsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7IH0iCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib2R5IHsgbWFyZ2luOiAwcHggIWltcG9ydGFu
dDsgfSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Imh0bWwgeyBtYXJnaW46IDBweCAhaW1wb3J0YW50OyB9IiA6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib2R5IHsgbWFyZ2luOiAwcHggIWltcG9y
dGFudDsgfSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImh0bWwgeyBtYXJnaW46IDBweCAhaW1wb3J0YW50OyB9IgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0KLSAgICAgICAgUVBhaW50RGV2
aWNlTWV0cmljcyBtZXRyaWNzKCBwcmludGVyICk7Ci0KLSAgICAgICAgLy8gdGhpcyBpcyBhIHNp
bXBsZSBhcHByb3hpbWF0aW9uLi4uIHdlIGxheW91dCB0aGUgZG9jdW1lbnQKLSAgICAgICAgLy8g
YWNjb3JkaW5nIHRvIHRoZSB3aWR0aCBvZiB0aGUgcGFnZSwgdGhlbiBqdXN0IGN1dAotICAgICAg
ICAvLyBwYWdlcyB3aXRob3V0IGNhcmluZyBhYm91dCB0aGUgY29udGVudC4gV2Ugc2hvdWxkIGRv
IGJldHRlcgotICAgICAgICAvLyBpbiB0aGUgZnV0dXJlLCBidXQgZm9yIHRoZSBtb21lbnQgdGhp
cyBpcyBiZXR0ZXIgdGhhbiBubwotICAgICAgICAvLyBwcmludGluZyBzdXBwb3J0Ci0gICAgICAg
IGtkRGVidWcoNjAwMCkgPDwgInByaW50aW5nOiBwaHlzaWNhbCBwYWdlIHdpZHRoID0gIiA8PCBt
ZXRyaWNzLndpZHRoKCkKLSAgICAgICAgICAgICAgICAgICAgICA8PCAiIGhlaWdodCA9ICIgPDwg
bWV0cmljcy5oZWlnaHQoKSA8PCBlbmRsOwotICAgICAgICByb290LT5zZXRQcmludGluZ01vZGUo
dHJ1ZSk7Ci0gICAgICAgIHJvb3QtPnNldFdpZHRoKG1ldHJpY3Mud2lkdGgoKSk7Ci0KLSAgICAg
ICAgbV9wYXJ0LT54bWxEb2NJbXBsKCktPnN0eWxlU2VsZWN0b3IoKS0+Y29tcHV0ZUZvbnRTaXpl
cygmbWV0cmljcyk7Ci0gICAgICAgIG1fcGFydC0+eG1sRG9jSW1wbCgpLT51cGRhdGVTdHlsZVNl
bGVjdG9yKCk7Ci0gICAgICAgIHJvb3QtPnNldFByaW50SW1hZ2VzKCBwcmludGVyLT5vcHRpb24o
ImtkZS1raHRtbC1wcmludGltYWdlcyIpID09ICJ0cnVlIik7Ci0gICAgICAgIHJvb3QtPnNldE5l
ZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7Ci0gICAgICAgIHJvb3QtPmxheW91dCgpOwotCi0g
ICAgICAgIC8vIG9rLiBub3cgcHJpbnQgdGhlIHBhZ2VzLgotICAgICAgICBrZERlYnVnKDYwMDAp
IDw8ICJwcmludGluZzogaHRtbCBwYWdlIHdpZHRoID0gIiA8PCByb290LT5kb2NXaWR0aCgpCi0g
ICAgICAgICAgICAgICAgICAgICAgPDwgIiBoZWlnaHQgPSAiIDw8IHJvb3QtPmRvY0hlaWdodCgp
IDw8IGVuZGw7Ci0gICAgICAgIGtkRGVidWcoNjAwMCkgPDwgInByaW50aW5nOiBtYXJnaW5zIGxl
ZnQgPSAiIDw8IHByaW50ZXItPm1hcmdpbnMoKS53aWR0aCgpCi0gICAgICAgICAgICAgICAgICAg
ICAgPDwgIiB0b3AgPSAiIDw8IHByaW50ZXItPm1hcmdpbnMoKS5oZWlnaHQoKSA8PCBlbmRsOwot
ICAgICAgICBrZERlYnVnKDYwMDApIDw8ICJwcmludGluZzogcGFwZXIgd2lkdGggPSAiIDw8IG1l
dHJpY3Mud2lkdGgoKQotICAgICAgICAgICAgICAgICAgICAgIDw8ICIgaGVpZ2h0ID0gIiA8PCBt
ZXRyaWNzLmhlaWdodCgpIDw8IGVuZGw7Ci0gICAgICAgIC8vIGlmIHRoZSB3aWR0aCBpcyB0b28g
bGFyZ2UgdG8gZml0IG9uIHRoZSBwYXBlciB3ZSBqdXN0IHNjYWxlCi0gICAgICAgIC8vIHRoZSB3
aG9sZSB0aGluZy4KLSAgICAgICAgaW50IHBhZ2VIZWlnaHQgPSBtZXRyaWNzLmhlaWdodCgpOwot
ICAgICAgICBpbnQgcGFnZVdpZHRoID0gbWV0cmljcy53aWR0aCgpOwotICAgICAgICBwLT5zZXRD
bGlwUmVjdCgwLDAsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7Ci0gICAgICAgIGlmKHJvb3QtPmRv
Y1dpZHRoKCkgPiBtZXRyaWNzLndpZHRoKCkpIHsKLSAgICAgICAgICAgIGRvdWJsZSBzY2FsZSA9
ICgoZG91YmxlKSBtZXRyaWNzLndpZHRoKCkpLygoZG91YmxlKSByb290LT5kb2NXaWR0aCgpKTsK
LSNpZm5kZWYgUVRfTk9fVFJBTlNGT1JNQVRJT05TCi0gICAgICAgICAgICBwLT5zY2FsZShzY2Fs
ZSwgc2NhbGUpOwotI2VuZGlmCi0gICAgICAgICAgICBwYWdlSGVpZ2h0ID0gKGludCkgKHBhZ2VI
ZWlnaHQvc2NhbGUpOwotICAgICAgICAgICAgcGFnZVdpZHRoID0gKGludCkgKHBhZ2VXaWR0aC9z
Y2FsZSk7Ci0gICAgICAgIH0KLSAgICAgICAga2REZWJ1Zyg2MDAwKSA8PCAicHJpbnRpbmc6IHNj
YWxlZCBodG1sIHdpZHRoID0gIiA8PCBwYWdlV2lkdGgKLSAgICAgICAgICAgICAgICAgICAgICA8
PCAiIGhlaWdodCA9ICIgPDwgcGFnZUhlaWdodCA8PCBlbmRsOwotICAgICAgICBpbnQgdG9wID0g
MDsKLSAgICAgICAgd2hpbGUodG9wIDwgcm9vdC0+ZG9jSGVpZ2h0KCkpIHsKLSAgICAgICAgICAg
IGlmKHRvcCA+IDApIHByaW50ZXItPm5ld1BhZ2UoKTsKLSAgICAgICAgICAgIHJvb3QtPnNldFRy
dW5jYXRlZEF0KHRvcCtwYWdlSGVpZ2h0KTsKLQotICAgICAgICAgICAgcm9vdC0+cHJpbnQocCwg
MCwgdG9wLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQsIDAsIDApOwotICAgICAgICAgICAgaWYgKHRv
cCArIHBhZ2VIZWlnaHQgPj0gcm9vdC0+ZG9jSGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7IC8vIFN0b3AgaWYgd2UgaGF2ZSBwcmludGVkIGV2ZXJ5dGhpbmcKLQotICAgICAgICAgICAg
cC0+dHJhbnNsYXRlKDAsIHRvcCAtIHJvb3QtPnRydW5jYXRlZEF0KCkpOwotICAgICAgICAgICAg
dG9wID0gcm9vdC0+dHJ1bmNhdGVkQXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHAtPmVuZCgp
OwotICAgICAgICBkZWxldGUgcDsKLQotICAgICAgICAvLyBhbmQgbm93IHJlc2V0IHRoZSBsYXlv
dXQgdG8gdGhlIHVzdWFsIG9uZS4uLgotICAgICAgICByb290LT5zZXRQcmludGluZ01vZGUoZmFs
c2UpOwotICAgICAgICBraHRtbDo6c2V0UHJpbnRQYWludGVyKCAwICk7Ci0gICAgICAgIHNldE1l
ZGlhVHlwZSggb2xkTWVkaWFUeXBlICk7Ci0gICAgICAgIG1fcGFydC0+eG1sRG9jSW1wbCgpLT5z
ZXRQYWludERldmljZSggdGhpcyApOwotICAgICAgICBtX3BhcnQtPnhtbERvY0ltcGwoKS0+c3R5
bGVTZWxlY3RvcigpLT5jb21wdXRlRm9udFNpemVzKG1fcGFydC0+eG1sRG9jSW1wbCgpLT5wYWlu
dERldmljZU1ldHJpY3MoKSk7Ci0gICAgICAgIG1fcGFydC0+eG1sRG9jSW1wbCgpLT51cGRhdGVT
dHlsZVNlbGVjdG9yKCk7Ci0gICAgICAgIHZpZXdwb3J0KCktPnVuc2V0Q3Vyc29yKCk7Ci0gICAg
fQotICAgIGRlbGV0ZSBwcmludGVyOwotfQotCi12b2lkIEtIVE1MVmlldzo6c2xvdFBhbGV0dGVD
aGFuZ2VkKCkKLXsKLSAgICBpZighbV9wYXJ0LT54bWxEb2NJbXBsKCkpIHJldHVybjsKLSAgICBE
T006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQgPSBtX3BhcnQtPnhtbERvY0ltcGwoKTsKLSAgICBp
ZiAoIWRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSByZXR1cm47Ci0gICAga2h0bWw6OlJlbmRl
ckNhbnZhcyAqcm9vdCA9IHN0YXRpY19jYXN0PGtodG1sOjpSZW5kZXJDYW52YXMgKj4oZG9jdW1l
bnQtPnJlbmRlcmVyKCkpOwotICAgIGlmKCFyb290KSByZXR1cm47Ci0gICAgcm9vdC0+c3R5bGUo
KS0+cmVzZXRQYWxldHRlKCk7Ci0gICAgTm9kZUltcGwgKmJvZHkgPSBzdGF0aWNfY2FzdDxIVE1M
RG9jdW1lbnRJbXBsKj4oZG9jdW1lbnQpLT5ib2R5KCk7Ci0gICAgaWYoIWJvZHkpIHJldHVybjsK
LSAgICBib2R5LT5zZXRDaGFuZ2VkKHRydWUpOwotICAgIGJvZHktPnJlY2FsY1N0eWxlKCBOb2Rl
SW1wbDo6Rm9yY2UgKTsKLX0KLQotdm9pZCBLSFRNTFZpZXc6OnBhaW50KFFQYWludGVyICpwLCBj
b25zdCBRUmVjdCAmcmMsIGludCB5T2ZmLCBib29sICptb3JlKQotewotICAgIGlmKCFtX3BhcnQt
PnhtbERvY0ltcGwoKSkgcmV0dXJuOwotICAgIGtodG1sOjpSZW5kZXJDYW52YXMgKnJvb3QgPSBz
dGF0aWNfY2FzdDxraHRtbDo6UmVuZGVyQ2FudmFzICo+KG1fcGFydC0+eG1sRG9jSW1wbCgpLT5y
ZW5kZXJlcigpKTsKLSAgICBpZighcm9vdCkgcmV0dXJuOwotCi0gICAgbV9wYXJ0LT54bWxEb2NJ
bXBsKCktPnNldFBhaW50RGV2aWNlKHAtPmRldmljZSgpKTsKLSAgICByb290LT5zZXRQcmludGlu
Z01vZGUodHJ1ZSk7Ci0gICAgcm9vdC0+c2V0V2lkdGgocmMud2lkdGgoKSk7Ci0KLSAgICBwLT5z
YXZlKCk7Ci0gICAgcC0+c2V0Q2xpcFJlY3QocmMpOwotICAgIHAtPnRyYW5zbGF0ZShyYy5sZWZ0
KCksIHJjLnRvcCgpKTsKLSAgICBkb3VibGUgc2NhbGUgPSAoKGRvdWJsZSkgcmMud2lkdGgoKS8o
ZG91YmxlKSByb290LT5kb2NXaWR0aCgpKTsKLSAgICBpbnQgaGVpZ2h0ID0gKGludCkgKChkb3Vi
bGUpIHJjLmhlaWdodCgpIC8gc2NhbGUpOwotI2lmbmRlZiBRVF9OT19UUkFOU0ZPUk1BVElPTlMK
LSAgICBwLT5zY2FsZShzY2FsZSwgc2NhbGUpOwotI2VuZGlmCi0KLSAgICByb290LT5wcmludChw
LCAwLCB5T2ZmLCByb290LT5kb2NXaWR0aCgpLCBoZWlnaHQsIDAsIDApOwotICAgIGlmIChtb3Jl
KQotICAgICAgICAqbW9yZSA9IHlPZmYgKyBoZWlnaHQgPCByb290LT5kb2NIZWlnaHQoKTsKLSAg
ICBwLT5yZXN0b3JlKCk7Ci0KLSAgICByb290LT5zZXRQcmludGluZ01vZGUoZmFsc2UpOwotICAg
IG1fcGFydC0+eG1sRG9jSW1wbCgpLT5zZXRQYWludERldmljZSggdGhpcyApOwotfQotCi0jZW5k
aWYgLy8gIUFQUExFX0NIQU5HRVMKIAogdm9pZCBLSFRNTFZpZXc6OnVzZVNsb3dSZXBhaW50cygp
CiB7CkBAIC0xNzEwLDEzICsxMTcwLDggQEAgdm9pZCBLSFRNTFZpZXc6OnNldFNjcm9sbEJhcnNN
b2RlICggU2NybwogICAgIGQtPnZtb2RlID0gbW9kZTsKICAgICBkLT5obW9kZSA9IG1vZGU7CiAg
ICAgCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIFFTY3JvbGxWaWV3OjpzZXRTY3JvbGxCYXJzTW9k
ZShtb2RlKTsKICNlbHNlCi0gICAgUVNjcm9sbFZpZXc6OnNldFZTY3JvbGxCYXJNb2RlKG1vZGUp
OwotICAgIFFTY3JvbGxWaWV3OjpzZXRIU2Nyb2xsQmFyTW9kZShtb2RlKTsKLSNlbmRpZgotI2Vs
c2UKICAgICBRX1VOVVNFRCggbW9kZSApOwogI2VuZGlmCiB9CkBAIC0xNzQzLDU2ICsxMTk4LDkg
QEAgdm9pZCBLSFRNTFZpZXc6OnNldEhTY3JvbGxCYXJNb2RlICggU2NybwogCiB2b2lkIEtIVE1M
Vmlldzo6cmVzdG9yZVNjcm9sbEJhciAoICkKIHsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgc3Vw
cHJlc3NTY3JvbGxCYXJzKGZhbHNlKTsKLSNlbHNlCi0gICAgaW50IG93ID0gdmlzaWJsZVdpZHRo
KCk7Ci0gICAgUVNjcm9sbFZpZXc6OnNldFZTY3JvbGxCYXJNb2RlKGQtPnZtb2RlKTsKLSAgICBp
ZiAodmlzaWJsZVdpZHRoKCkgIT0gb3cpCi0gICAgICAgIGxheW91dCgpOwotICAgIGQtPnByZXZT
Y3JvbGxiYXJWaXNpYmxlID0gdmVydGljYWxTY3JvbGxCYXIoKS0+aXNWaXNpYmxlKCk7Ci0jZW5k
aWYKIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0KLVFTdHJpbmdMaXN0IEtIVE1MVmlldzo6Zm9y
bUNvbXBsZXRpb25JdGVtcyhjb25zdCBRU3RyaW5nICZuYW1lKSBjb25zdAotewotICAgIGlmICgh
bV9wYXJ0LT5zZXR0aW5ncygpLT5pc0Zvcm1Db21wbGV0aW9uRW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm4gUVN0cmluZ0xpc3QoKTsKLSAgICBpZiAoIWQtPmZvcm1Db21wbGV0aW9ucykKLSAgICAg
ICAgZC0+Zm9ybUNvbXBsZXRpb25zID0gbmV3IEtTaW1wbGVDb25maWcobG9jYXRlTG9jYWwoImRh
dGEiLCAia2h0bWwvZm9ybWNvbXBsZXRpb25zIikpOwotICAgIHJldHVybiBkLT5mb3JtQ29tcGxl
dGlvbnMtPnJlYWRMaXN0RW50cnkobmFtZSk7Ci19Ci0KLXZvaWQgS0hUTUxWaWV3OjphZGRGb3Jt
Q29tcGxldGlvbkl0ZW0oY29uc3QgUVN0cmluZyAmbmFtZSwgY29uc3QgUVN0cmluZyAmdmFsdWUp
Ci17Ci0gICAgaWYgKCFtX3BhcnQtPnNldHRpbmdzKCktPmlzRm9ybUNvbXBsZXRpb25FbmFibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBkb24ndCBzdG9yZSB2YWx1ZXMgdGhhdCBhcmUg
YWxsIG51bWJlcnMgb3IganVzdCBudW1iZXJzIHdpdGgKLSAgICAvLyBkYXNoZXMgb3Igc3BhY2Vz
IGFzIHRob3NlIGFyZSBsaWtlbHkgY3JlZGl0IGNhcmQgbnVtYmVycyBvcgotICAgIC8vIHNvbWV0
aGluZyBzaW1pbGFyCi0gICAgYm9vbCBjY19udW1iZXIodHJ1ZSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGgoKTsgKytpKQotICAgIHsKLSAgICAgIFFDaGFy
IGModmFsdWVbaV0pOwotICAgICAgaWYgKCFjLmlzTnVtYmVyKCkgJiYgYyAhPSAnLScgJiYgIWMu
aXNTcGFjZSgpKQotICAgICAgewotICAgICAgICBjY19udW1iZXIgPSBmYWxzZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChjY19udW1iZXIpCi0gICAgICByZXR1cm47
Ci0gICAgUVN0cmluZ0xpc3QgaXRlbXMgPSBmb3JtQ29tcGxldGlvbkl0ZW1zKG5hbWUpOwotICAg
IGlmICghaXRlbXMuY29udGFpbnModmFsdWUpKQotICAgICAgICBpdGVtcy5wcmVwZW5kKHZhbHVl
KTsKLSAgICB3aGlsZSAoKGludClpdGVtcy5jb3VudCgpID4gbV9wYXJ0LT5zZXR0aW5ncygpLT5t
YXhGb3JtQ29tcGxldGlvbkl0ZW1zKCkpCi0gICAgICAgIGl0ZW1zLnJlbW92ZShpdGVtcy5mcm9t
TGFzdCgpKTsKLSAgICBkLT5mb3JtQ29tcGxldGlvbnMtPndyaXRlRW50cnkobmFtZSwgaXRlbXMp
OwotfQotCi0jZW5kaWYKIAogYm9vbCBLSFRNTFZpZXc6OmRpc3BhdGNoTW91c2VFdmVudChjb25z
dCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgRE9NOjpOb2RlSW1wbCAqdGFyZ2V0Tm9kZSwgYm9v
bCBjYW5jZWxhYmxlLAogCQkJCSAgIGludCBkZXRhaWwsUU1vdXNlRXZlbnQgKl9tb3VzZSwgYm9v
bCBzZXRVbmRlciwKQEAgLTE4OTEsNzIgKzEyOTksMTAgQEAgdm9pZCBLSFRNTFZpZXc6OnZpZXdw
b3J0V2hlZWxFdmVudChRV2hlZQogICAgICAgICB9CiAgICAgfQogCi0jaWYgIUFQUExFX0NIQU5H
RVMKLSAgICBpZiAoIGQtPmlnbm9yZVdoZWVsRXZlbnRzICYmICF2ZXJ0aWNhbFNjcm9sbEJhcigp
LT5pc1Zpc2libGUoKSAmJiBtX3BhcnQtPnBhcmVudFBhcnQoKSApIHsKLSAgICAgICAgaWYgKCBt
X3BhcnQtPnBhcmVudFBhcnQoKS0+dmlldygpICkKLSAgICAgICAgICAgIG1fcGFydC0+cGFyZW50
UGFydCgpLT52aWV3KCktPndoZWVsRXZlbnQoIGUgKTsKLSAgICAgICAgZS0+aWdub3JlKCk7Ci0g
ICAgfQotICAgIGVsc2UgaWYgKCBkLT52bW9kZSA9PSBRU2Nyb2xsVmlldzo6QWx3YXlzT2ZmICkg
ewotICAgICAgICBlLT5hY2NlcHQoKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGQtPnNj
cm9sbEJhck1vdmVkID0gdHJ1ZTsKLSAgICAgICAgUVNjcm9sbFZpZXc6OnZpZXdwb3J0V2hlZWxF
dmVudCggZSApOwotICAgIH0KLSNlbmRpZgogfQogCiAjZW5kaWYKIAotI2lmICFBUFBMRV9DSEFO
R0VTCi12b2lkIEtIVE1MVmlldzo6ZHJhZ0VudGVyRXZlbnQoIFFEcmFnRW50ZXJFdmVudCogZXYg
KQotewotICAgIC8vIEhhbmRsZSBkcm9wcyBvbnRvIGZyYW1lcyAoIzE2ODIwKQotICAgIC8vIERy
b3BzIG9uIHRoZSBtYWluIGh0bWwgcGFydCBpcyBoYW5kbGVkIGJ5IEtvbnF1ZXJvciAoYW5kIHNo
b3VsZG4ndCBkbyBhbnl0aGluZwotICAgIC8vIGluIGUuZy4ga21haWwsIHNvIG5vdCBoYW5kbGVk
IGhlcmUpLgotICAgIGlmICggbV9wYXJ0LT5wYXJlbnRQYXJ0KCkgKQotICAgIHsKLSAgICAgICAg
Ly8gRHVwbGljYXRlZCBmcm9tIEtvbnFWaWV3OjpldmVudEZpbHRlcgotICAgICAgICBpZiAoIFFV
cmlEcmFnOjpjYW5EZWNvZGUoIGV2ICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBLVVJMOjpM
aXN0IGxzdERyYWdVUkxzOwotICAgICAgICAgICAgYm9vbCBvayA9IEtVUkxEcmFnOjpkZWNvZGUo
IGV2LCBsc3REcmFnVVJMcyApOwotICAgICAgICAgICAgUU9iamVjdExpc3QgKmNoaWxkcmVuID0g
dGhpcy0+cXVlcnlMaXN0KCAiUVdpZGdldCIgKTsKLQotICAgICAgICAgICAgaWYgKCBvayAmJgot
ICAgICAgICAgICAgICAgICAhbHN0RHJhZ1VSTHMuZmlyc3QoKS51cmwoKS5jb250YWlucyggImph
dmFzY3JpcHQ6IiwgZmFsc2UgKSAmJiAvLyAjIyMgdGhpcyBsb29rcyBsaWtlIGEgaGFjayB0byBt
ZQotICAgICAgICAgICAgICAgICBldi0+c291cmNlKCkgIT0gdGhpcyAmJgotICAgICAgICAgICAg
ICAgICBjaGlsZHJlbiAmJgotICAgICAgICAgICAgICAgICBjaGlsZHJlbi0+ZmluZFJlZiggZXYt
PnNvdXJjZSgpICkgPT0gLTEgKQotICAgICAgICAgICAgICAgIGV2LT5hY2NlcHRBY3Rpb24oKTsK
LQotICAgICAgICAgICAgZGVsZXRlIGNoaWxkcmVuOwotICAgICAgICB9Ci0gICAgfQotICAgIFFT
Y3JvbGxWaWV3OjpkcmFnRW50ZXJFdmVudCggZXYgKTsKLX0KLQotdm9pZCBLSFRNTFZpZXc6OmRy
b3BFdmVudCggUURyb3BFdmVudCAqZXYgKQotewotICAgIC8vIEhhbmRsZSBkcm9wcyBvbnRvIGZy
YW1lcyAoIzE2ODIwKQotICAgIC8vIERyb3BzIG9uIHRoZSBtYWluIGh0bWwgcGFydCBpcyBoYW5k
bGVkIGJ5IEtvbnF1ZXJvciAoYW5kIHNob3VsZG4ndCBkbyBhbnl0aGluZwotICAgIC8vIGluIGUu
Zy4ga21haWwsIHNvIG5vdCBoYW5kbGVkIGhlcmUpLgotICAgIGlmICggbV9wYXJ0LT5wYXJlbnRQ
YXJ0KCkgKQotICAgIHsKLSAgICAgICAgS1VSTDo6TGlzdCBsc3REcmFnVVJMczsKLSAgICAgICAg
Ym9vbCBvayA9IEtVUkxEcmFnOjpkZWNvZGUoIGV2LCBsc3REcmFnVVJMcyApOwotCi0gICAgICAg
IEtIVE1MUGFydCogcGFydCA9IG1fcGFydC0+cGFyZW50UGFydCgpOwotICAgICAgICB3aGlsZSAo
IHBhcnQgJiYgcGFydC0+cGFyZW50UGFydCgpICkKLSAgICAgICAgICAgIHBhcnQgPSBwYXJ0LT5w
YXJlbnRQYXJ0KCk7Ci0gICAgICAgIEtQYXJ0czo6QnJvd3NlckV4dGVuc2lvbiAqZXh0ID0gcGFy
dC0+YnJvd3NlckV4dGVuc2lvbigpOwotICAgICAgICBpZiAoIG9rICYmIGV4dCAmJiBsc3REcmFn
VVJMcy5maXJzdCgpLmlzVmFsaWQoKSApCi0gICAgICAgICAgICBlbWl0IGV4dC0+b3BlblVSTFJl
cXVlc3QoIGxzdERyYWdVUkxzLmZpcnN0KCkgKTsKLSAgICB9Ci0gICAgUVNjcm9sbFZpZXc6OmRy
b3BFdmVudCggZXYgKTsKLX0KLSNlbmRpZiAvLyAhQVBQTEVfQ0hBTkdFUwogCiB2b2lkIEtIVE1M
Vmlldzo6Zm9jdXNJbkV2ZW50KCBRRm9jdXNFdmVudCAqZSApCiB7CkluZGV4OiBraHRtbHZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbHZpZXcu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40OApkaWZmIC1wIC11IC1yMS40OCBraHRtbHZpZXcu
aAotLS0ga2h0bWx2aWV3LmgJMzEgQXVnIDIwMDUgMDQ6Mzg6MzUgLTAwMDAJMS40OAorKysga2h0
bWx2aWV3LmgJMTEgTm92IDIwMDUgMTk6MzQ6MDAgLTAwMDAKQEAgLTg4LDkgKzg4LDcgQEAgY2xh
c3MgS0hUTUxWaWV3IDogcHVibGljIFFTY3JvbGxWaWV3CiAgICAgZnJpZW5kIGNsYXNzIGtodG1s
OjpSZW5kZXJXaWRnZXQ7CiAgICAgZnJpZW5kIGNsYXNzIGtodG1sOjpDU1NTdHlsZVNlbGVjdG9y
OwogICAgIGZyaWVuZCB2b2lkIGtodG1sOjphcHBseVJ1bGUoRE9NOjpDU1NQcm9wZXJ0eSAqcHJv
cCk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIGZyaWVuZCBjbGFzcyBLV1FLSFRNTFBhcnQ7Ci0j
ZW5kaWYKIAogcHVibGljOgogICAgIC8qKgpAQCAtMTYxLDkgKzE1OSw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGFkZFJlcGFpbnRJbmZvKGtodG1sOjpSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFFSZWN0JiByKTsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICB2b2lkIHJlc2V0U2Nyb2xsQmFy
cygpOwotI2VuZGlmCiAKICAgICAgdm9pZCBjbGVhcigpOwogCkBAIC0xNzEsMTggKzE2NywxMSBA
QCBzaWduYWxzOgogICAgICAgICB2b2lkIGNsZWFyZWQoKTsKICAgICAKIHByb3RlY3RlZDoKLSNp
ZiBBUFBMRV9DSEFOR0VTCiBwdWJsaWM6CiAgICAgICAgIHZvaWQgY2xlYXJQYXJ0KCk7Ci0jZW5k
aWYKICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplRXZlbnQgKCBRUmVzaXplRXZlbnQgKiBldmVudCAp
OwogICAgIHZpcnR1YWwgdm9pZCBzaG93RXZlbnQgKCBRU2hvd0V2ZW50ICogKTsKICAgICB2aXJ0
dWFsIHZvaWQgaGlkZUV2ZW50ICggUUhpZGVFdmVudCAqKTsKLSNpZiAhQVBQTEVfQ0hBTkdFUwot
ICAgIHZpcnR1YWwgYm9vbCBmb2N1c05leHRQcmV2Q2hpbGQoIGJvb2wgbmV4dCApOwotICAgIHZp
cnR1YWwgdm9pZCBkcmF3Q29udGVudHMgKCBRUGFpbnRlciAqIHAsIGludCBjbGlweCwgaW50IGNs
aXB5LCBpbnQgY2xpcHcsIGludCBjbGlwaCApOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29udGVu
dHMoIFFQYWludGVyKiApOwotI2VuZGlmCiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0
TW91c2VQcmVzc0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICAgdmlydHVhbCB2b2lkIGZvY3Vz
SW5FdmVudCggUUZvY3VzRXZlbnQgKiApOwpAQCAtMTkzLDEwICsxODIsNiBAQCBwdWJsaWM6CiAj
aWZuZGVmIFFUX05PX1dIRUVMRVZFTlQKICAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnRXaGVlbEV2
ZW50KFFXaGVlbEV2ZW50Kik7CiAjZW5kaWYKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIHZpcnR1
YWwgdm9pZCBkcmFnRW50ZXJFdmVudCggUURyYWdFbnRlckV2ZW50KiApOwotICAgIHZpcnR1YWwg
dm9pZCBkcm9wRXZlbnQoIFFEcm9wRXZlbnQqICk7Ci0jZW5kaWYKIAogICAgIHZvaWQga2V5UHJl
c3NFdmVudCggUUtleUV2ZW50ICpfa2UgKTsKICAgICB2b2lkIGtleVJlbGVhc2VFdmVudCAoIFFL
ZXlFdmVudCAqX2tlICk7CkBAIC0yMTksNyArMjA0LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGF2
ZURlbGF5ZWRMYXlvdXRTY2hlZHVsZWQoKTsKICAgICBib29sIGxheW91dFBlbmRpbmcoKTsKIAot
I2lmIEFQUExFX0NIQU5HRVMKICAgICBRV2lkZ2V0ICp0b3BMZXZlbFdpZGdldCgpIGNvbnN0Owog
ICAgIFFQb2ludCBtYXBUb0dsb2JhbChjb25zdCBRUG9pbnQgJikgY29uc3Q7CiAgICAgLy8gbWFw
cyAidmlld3BvcnQiIChhY3R1YWxseSBDb2NvYSB3aW5kb3cgY29vcmRzKSB0byBzY3JlZW4gY29v
cmRzCkBAIC0yMjgsNyArMjEyLDYgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdFNjcm9sbEJhcnMo
KTsKICAgICAKICAgICB2b2lkIHVwZGF0ZURhc2hib2FyZFJlZ2lvbnMoKTsKLSNlbmRpZgogCiAg
ICAgdm9pZCByZWYoKSB7ICsrX3JlZkNvdW50OyB9CiAgICAgdm9pZCBkZXJlZigpIHsgaWYgKCEt
LV9yZWZDb3VudCkgZGVsZXRlIHRoaXM7IH0KQEAgLTI4OSw5ICsyNzIsNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBhcHBseU92ZXJmbG93VG9WaWV3cG9ydChraHRtbDo6UmVuZGVyT2JqZWN0KiBv
LCBTY3JvbGxCYXJNb2RlJiBoTW9kZSwgU2Nyb2xsQmFyTW9kZSYgdk1vZGUpOwogCi0jaWYgQVBQ
TEVfQ0hBTkdFUwogICAgIHZpcnR1YWwgYm9vbCBpc0tIVE1MVmlldygpIGNvbnN0OwotI2VuZGlm
CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1lbWJlciB2
YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgcHJpdmF0ZToK
SW5kZXg6IGNzcy9jc3NfY29tcHV0ZWRzdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19jb21wdXRlZHN0eWxlLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zOQpkaWZmIC1wIC11IC1yMS4zOSBjc3MvY3NzX2NvbXB1dGVkc3R5bGUu
Y3BwCi0tLSBjc3MvY3NzX2NvbXB1dGVkc3R5bGUuY3BwCTIgTm92IDIwMDUgMDg6NTI6MzkgLTAw
MDAJMS4zOQorKysgY3NzL2Nzc19jb21wdXRlZHN0eWxlLmNwcAkxMSBOb3YgMjAwNSAxOTozNDow
MCAtMDAwMApAQCAtMzQsMTEgKzM0LDkgQEAKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3N0
eWxlLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKIAotI2lmIEFQUExF
X0NIQU5HRVMKICNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgIktXUUZv
bnRGYW1pbHkuaCIKICNpbXBvcnQgIktXUUxvZ2dpbmcuaCIKLSNlbmRpZgogCiB1c2luZyBraHRt
bDo6RUJhY2tncm91bmRCb3g7CiB1c2luZyBraHRtbDo6RUJvcmRlclN0eWxlOwpAQCAtMTE4OSwz
MCArMTE4Nyw2IEBAIENTU1ZhbHVlSW1wbCAqQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW8KICAg
ICBjYXNlIENTU19QUk9QX1BBRERJTkc6CiAgICAgICAgIC8vIEZJWE1FOiB1bmltcGxlbWVudGVk
CiAgICAgICAgIGJyZWFrOwotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgY2FzZSBDU1NfUFJPUF9T
Q1JPTExCQVJfRkFDRV9DT0xPUjoKLSAgICAgICAgLy8gRklYTUU6IHVuaW1wbGVtZW50ZWQKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfUFJPUF9TQ1JPTExCQVJfU0hBRE9XX0NPTE9SOgot
ICAgICAgICAvLyBGSVhNRTogdW5pbXBsZW1lbnRlZAotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU19QUk9QX1NDUk9MTEJBUl9ISUdITElHSFRfQ09MT1I6Ci0gICAgICAgIC8vIEZJWE1FOiB1
bmltcGxlbWVudGVkCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX1BST1BfU0NST0xMQkFS
XzNETElHSFRfQ09MT1I6Ci0gICAgICAgIC8vIEZJWE1FOiB1bmltcGxlbWVudGVkCi0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTX1BST1BfU0NST0xMQkFSX0RBUktTSEFET1dfQ09MT1I6Ci0g
ICAgICAgIC8vIEZJWE1FOiB1bmltcGxlbWVudGVkCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTX1BST1BfU0NST0xMQkFSX1RSQUNLX0NPTE9SOgotICAgICAgICAvLyBGSVhNRTogdW5pbXBs
ZW1lbnRlZAotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19QUk9QX1NDUk9MTEJBUl9BUlJP
V19DT0xPUjoKLSAgICAgICAgLy8gRklYTUU6IHVuaW1wbGVtZW50ZWQKLSAgICAgICAgYnJlYWs7
Ci0jZW5kaWYKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGNhc2UgQ1NTX1BST1BfX0tIVE1M
X0RBU0hCT0FSRF9SRUdJT046IHsKICAgICAgICAgICAgIFFWYWx1ZUxpc3Q8U3R5bGVEYXNoYm9h
cmRSZWdpb24+IHJlZ2lvbnMgPSBzdHlsZS0+ZGFzaGJvYXJkUmVnaW9ucygpOwogICAgICAgICAg
ICAgdWludCBpLCBjb3VudCA9IHJlZ2lvbnMuY291bnQoKTsKQEAgLTEyMzksNyArMTIxMyw2IEBA
IENTU1ZhbHVlSW1wbCAqQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW8KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsKGZpcnN0UmVnaW9u
KTsKICAgICAgICAgfQotI2VuZGlmCiAgICAgfQogCiAgICAgRVJST1IoInVuaW1wbGVtZW50ZWQg
cHJvcGVydHlJRDogJWQiLCBwcm9wZXJ0eUlEKTsKSW5kZXg6IGNzcy9jc3NfdmFsdWVpbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX3Zh
bHVlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzkKZGlmZiAtcCAtdSAtcjEuNzkg
Y3NzL2Nzc192YWx1ZWltcGwuY3BwCi0tLSBjc3MvY3NzX3ZhbHVlaW1wbC5jcHAJMjUgT2N0IDIw
MDUgMDA6MDc6NDUgLTAwMDAJMS43OQorKysgY3NzL2Nzc192YWx1ZWltcGwuY3BwCTExIE5vdiAy
MDA1IDE5OjM0OjAwIC0wMDAwCkBAIC03OSw0MiArNzksNiBAQCBzdGF0aWMgaW50IHByb3BlcnR5
SUQoY29uc3QgRE9NU3RyaW5nICZzCiAgICAgcmV0dXJuIGdldFByb3BlcnR5SUQoYnVmZmVyLCBs
ZW4pOwogfQogCi0jaWYgMAotCi0vLyBUb28gcmlza3kgdG8gcXVvdGUgYWxsIGxlZ2FsIGlkZW50
aWZpZXJzIHJpZ2h0IG5vdy4KLS8vIFBvc3QtVGlnZXIgd2Ugc2hvdWxkIHVzZSB0aGlzIGZ1bmN0
aW9uIG9yIHNvbWV0aGluZyBsaWtlIGl0LgotCi0vLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHN0cmlu
ZyBxdWFsaWZpZXMgYXMgYW4gaWRlbnRpZmllciAoZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBD
U1Mgc3ludGF4KS4KLXN0YXRpYyBib29sIGlzTGVnYWxJZGVudGlmaWVyKGNvbnN0IERPTVN0cmlu
ZyAmc3RyaW5nKQotewotICAgIGludCBsZW4gPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgaWYgKGxl
biA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgUUNoYXIgKnAgPSBz
dHJpbmcudW5pY29kZSgpOwotICAgIGludCBpID0gMDsKLSAgICBpZiAocFswXSA9PSAnLScpIHsK
LSAgICAgICAgKytpOwotICAgIH0KLSAgICBpZiAoaSA9PSBsZW4pIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICB1c2hvcnQgY29kZSA9IHBbaV0udW5pY29kZSgpOwotICAgIGlm
ICghKGNvZGUgPj0gMHg4MCB8fCBjb2RlID09ICdfJyB8fCBpc2FscGhhKGNvZGUpKSkgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgICsraTsKLSAgICB3aGlsZSAoaSAhPSBsZW4p
IHsKLSAgICAgICAgY29kZSA9IHBbaV0udW5pY29kZSgpOwotICAgICAgICBpZiAoIShjb2RlID49
IDB4ODAgfHwgY29kZSA9PSAnLScgfHwgY29kZSA9PSAnXycgfHwgaXNhbG51bShjb2RlKSkpIHsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICArK2k7Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi0jZW5kaWYKIAogLy8gUXVvdGVzIHRoZSBzdHJpbmcg
aWYgaXQgbmVlZHMgcXVvdGluZy4KIC8vIFdlIHVzZSBzaW5nbGUgcXVvdGVzIGZvciBub3cgYmVh
dXNlIG1hcmt1cC5jcHAgdXNlcyBkb3VibGUgcXVvdGVzLgpAQCAtNDQ4LDEwICs0MTIsNiBAQCBi
b29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDo6c2V0CiAgICAgQ1NTUGFyc2VyIHBh
cnNlcihzdHJpY3RQYXJzaW5nKTsKICAgICBib29sIHN1Y2Nlc3MgPSBwYXJzZXIucGFyc2VWYWx1
ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50KTsKICAgICBpZiAoIXN1Y2Nlc3Mp
IHsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgICAgICBrZERlYnVnKCA2MDgwICkgPDwgIkNTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDo6c2V0UHJvcGVydHkgaW52YWxpZCBwcm9wZXJ0eTog
WyIgPDwgZ2V0UHJvcGVydHlOYW1lKGlkKS5xc3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIDw8ICJdIHZhbHVlOiBbIiA8PCB2YWx1ZS5xc3RyaW5nKCkgPDwgIl0iPDwgZW5kbDsKLSNl
bmRpZgogICAgICAgICBleGNlcHRpb25Db2RlID0gQ1NTRXhjZXB0aW9uOjpTWU5UQVhfRVJSICsg
Q1NTRXhjZXB0aW9uOjpfRVhDRVBUSU9OX09GRlNFVDsKICAgICB9IGVsc2UgaWYgKG5vdGlmeUNo
YW5nZWQpCiAgICAgICAgIHNldENoYW5nZWQoKTsKQEAgLTgzOCwxMyArNzk4LDkgQEAgdm9pZCBD
U1NQcmltaXRpdmVWYWx1ZUltcGw6OmNsZWFudXAoKQogaW50IENTU1ByaW1pdGl2ZVZhbHVlSW1w
bDo6Y29tcHV0ZUxlbmd0aCgga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSwgUVBhaW50RGV2aWNl
TWV0cmljcyAqZGV2TWV0cmljcyApCiB7CiAgICAgZG91YmxlIHJlc3VsdCA9IGNvbXB1dGVMZW5n
dGhGbG9hdCggc3R5bGUsIGRldk1ldHJpY3MgKTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8g
VGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBv
ZiwgZS5nLiwgNDQuOTk5OTguICBXZQogICAgIC8vIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5k
IGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4dCBpbnRlZ2VyIHZhbHVlLgogICAgIGlu
dCBpbnRSZXN1bHQgPSAoaW50KShyZXN1bHQgKyAocmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDEp
KTsKLSNlbHNlCi0gICAgaW50IGludFJlc3VsdCA9IChpbnQpcmVzdWx0OwotI2VuZGlmCiAgICAg
cmV0dXJuIGludFJlc3VsdDsgICAgCiB9CiAKQEAgLTg1MiwxMyArODA4LDkgQEAgaW50IENTU1By
aW1pdGl2ZVZhbHVlSW1wbDo6Y29tcHV0ZUxlbmd0aAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgKQogewogICAgIGRvdWJsZSByZXN1
bHQgPSBtdWx0aXBsaWVyICogY29tcHV0ZUxlbmd0aEZsb2F0KCBzdHlsZSwgZGV2TWV0cmljcyAp
OwotI2lmIEFQUExFX0NIQU5HRVMKICAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNl
LCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCiAgICAg
Ly8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRo
ZSBuZXh0IGludGVnZXIgdmFsdWUuCiAgICAgaW50IGludFJlc3VsdCA9IChpbnQpKHJlc3VsdCAr
IChyZXN1bHQgPCAwID8gLTAuMDEgOiArMC4wMSkpOwotI2Vsc2UKLSAgICBpbnQgaW50UmVzdWx0
ID0gKGludClyZXN1bHQ7Ci0jZW5kaWYKICAgICByZXR1cm4gaW50UmVzdWx0OyAgICAKIH0KIApA
QCAtODg3LDEyICs4MzksNyBAQCBkb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsOjpjb21wdXRl
TGVuCiAgICAgICAgIC8vIG91ciBhY3R1YWwgY29uc3RydWN0ZWQgcmVuZGVyaW5nIGZvbnQuCiAg
ICAgICAgIHsKICAgICAgICAgUUZvbnRNZXRyaWNzIGZtID0gc3R5bGUtPmZvbnRNZXRyaWNzKCk7
Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICBmYWN0b3IgPSBmbS54SGVpZ2h0KCk7Ci0jZWxz
ZQotICAgICAgICBRUmVjdCBiID0gZm0uYm91bmRpbmdSZWN0KCd4Jyk7Ci0gICAgICAgIGZhY3Rv
ciA9IGIuaGVpZ2h0KCk7Ci0jZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6CkBAIC0xMDk2LDcgKzEwNDMsNiBAQCBET006
OkRPTVN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZUltcGw6OmNzCiAgICAgICAgICAgICB0ZXh0ICs9
IG1fdmFsdWUucGFpci0+c2Vjb25kKCktPmNzc1RleHQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
Ci0jaWYgQVBQTEVfQ0hBTkdFUyAgICAgICAgCiAgICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19EQVNIQk9BUkRfUkVHSU9OOiB7CiAgICAgICAgICAgICBEYXNoYm9hcmRSZWdpb25J
bXBsICpyZWdpb24gPSBnZXREYXNoYm9hcmRSZWdpb25WYWx1ZSgpOwogICAgICAgICAgICAgd2hp
bGUgKHJlZ2lvbikgewpAQCAtMTExOSw3ICsxMDY1LDYgQEAgRE9NOjpET01TdHJpbmcgQ1NTUHJp
bWl0aXZlVmFsdWVJbXBsOjpjcwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSNlbmRpZgogICAgIH0KICAgICByZXR1cm4gdGV4dDsKIH0KQEAgLTEyODUsNDUg
KzEyMzAsMTEgQEAgRm9udEZhbWlseVZhbHVlSW1wbDo6Rm9udEZhbWlseVZhbHVlSW1wbAogICAg
IHN0YXRpYyBjb25zdCBRUmVnRXhwIHBhcmVuUmVnKCIgXFwoLipcXCkkIik7CiAgICAgc3RhdGlj
IGNvbnN0IFFSZWdFeHAgYnJhY2VSZWcoIiBcXFsuKlxcXSQiKTsKIAotI2lmIEFQUExFX0NIQU5H
RVMKICAgICBwYXJzZWRGb250TmFtZSA9IHN0cmluZzsKICAgICAvLyBhIGxhbmd1YWdlIHRhZyBp
cyBvZnRlbiBhZGRlZCBpbiBicmFjZXMgYXQgdGhlIGVuZC4gUmVtb3ZlIGl0LgogICAgIHBhcnNl
ZEZvbnROYW1lLnJlcGxhY2UocGFyZW5SZWcsICIiKTsKICAgICAvLyByZW1vdmUgW1hmdF0gcXVh
bGlmaWVycwogICAgIHBhcnNlZEZvbnROYW1lLnJlcGxhY2UoYnJhY2VSZWcsICIiKTsKLSNlbHNl
Ci0gICAgY29uc3QgUVN0cmluZyAmYXZhaWxhYmxlID0gS0hUTUxTZXR0aW5nczo6YXZhaWxhYmxl
RmFtaWxpZXMoKTsKLQotICAgIFFTdHJpbmcgZmFjZSA9IHN0cmluZy5sb3dlcigpOwotICAgIC8v
IGEgbGFuZ3VnZSB0YWcgaXMgb2Z0ZW4gYWRkZWQgaW4gYnJhY2VzIGF0IHRoZSBlbmQuIFJlbW92
ZSBpdC4KLSAgICBmYWNlID0gZmFjZS5yZXBsYWNlKHBhcmVuUmVnLCAiIik7Ci0gICAgLy8gcmVt
b3ZlIFtYZnRdIHF1YWxpZmllcnMKLSAgICBmYWNlID0gZmFjZS5yZXBsYWNlKGJyYWNlUmVnLCAi
Iik7Ci0gICAgLy9rZERlYnVnKDApIDw8ICJzZWFyY2hpbmcgZm9yIGZhY2UgJyIgPDwgZmFjZSA8
PCAiJyIgPDwgZW5kbDsKLQotICAgIGludCBwb3MgPSBhdmFpbGFibGUuZmluZCggZmFjZSwgMCwg
ZmFsc2UgKTsKLSAgICBpZiggcG9zID09IC0xICkgewotICAgICAgICBRU3RyaW5nIHN0ciA9IGZh
Y2U7Ci0gICAgICAgIGludCBwID0gZmFjZS5maW5kKCcgJyk7Ci0gICAgICAgIC8vIEFyaWFsIEJs
ayAtLT4gQXJpYWwKLSAgICAgICAgLy8gTVMgU2FucyBTZXJpZiAtLT4gU2FucyBTZXJpZgotICAg
ICAgICBpZiAoIHAgIT0gLTEgKSB7Ci0gICAgICAgICAgICBpZihwID4gMCAmJiAoaW50KXN0ci5s
ZW5ndGgoKSAtIHAgPiBwICsgMSkKLSAgICAgICAgICAgICAgICBzdHIgPSBzdHIubWlkKCBwKzEg
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHIudHJ1bmNhdGUoIHAgKTsK
LSAgICAgICAgICAgIHBvcyA9IGF2YWlsYWJsZS5maW5kKCBzdHIsIDAsIGZhbHNlKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmICggcG9zICE9IC0xICkgewotICAgICAgICBpbnQgcG9zMSA9
IGF2YWlsYWJsZS5maW5kUmV2KCAnLCcsIHBvcyApICsgMTsKLSAgICAgICAgcG9zID0gYXZhaWxh
YmxlLmZpbmQoICcsJywgcG9zICk7Ci0gICAgICAgIGlmICggcG9zID09IC0xICkKLSAgICAgICAg
ICAgIHBvcyA9IGF2YWlsYWJsZS5sZW5ndGgoKTsKLSAgICAgICAgcGFyc2VkRm9udE5hbWUgPSBh
dmFpbGFibGUubWlkKCBwb3MxLCBwb3MgLSBwb3MxICk7Ci0gICAgfQotI2VuZGlmIC8vICFBUFBM
RV9DSEFOR0VTCiB9CiAKIERPTTo6RE9NU3RyaW5nIEZvbnRGYW1pbHlWYWx1ZUltcGw6OmNzc1Rl
eHQoKSBjb25zdApJbmRleDogY3NzL2Nzc192YWx1ZWltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX3ZhbHVlaW1wbC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjUxCmRpZmYgLXAgLXUgLXIxLjUxIGNzcy9jc3NfdmFsdWVpbXBsLmgKLS0t
IGNzcy9jc3NfdmFsdWVpbXBsLmgJMyBPY3QgMjAwNSAyMToxMjowNyAtMDAwMAkxLjUxCisrKyBj
c3MvY3NzX3ZhbHVlaW1wbC5oCTExIE5vdiAyMDA1IDE5OjM0OjAwIC0wMDAwCkBAIC0yOTAsNyAr
MjkwLDYgQEAgcHJvdGVjdGVkOgogICAgIENTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqbV9zZWNvbmQ7
CiB9OwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogCiBjbGFzcyBEYXNoYm9hcmRSZWdpb25JbXBsIDog
cHVibGljIFJlY3RJbXBsIHsKIHB1YmxpYzoKQEAgLTMxNSw3ICszMTQsNiBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgaW50IG1faXNSZWN0YW5nbGU6MTsKIH07CiAKLSNlbmRpZgogCiBjbGFzcyBD
U1NJbWFnZVZhbHVlSW1wbCA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZUltcGwsIHB1YmxpYyBr
aHRtbDo6Q2FjaGVkT2JqZWN0Q2xpZW50CiB7CkluZGV4OiBjc3MvY3NzcGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzcGFyc2VyLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMDkKZGlmZiAtcCAtdSAtcjEuMTA5IGNzcy9jc3Nw
YXJzZXIuY3BwCi0tLSBjc3MvY3NzcGFyc2VyLmNwcAkyIE5vdiAyMDA1IDA4OjUyOjM5IC0wMDAw
CTEuMTA5CisrKyBjc3MvY3NzcGFyc2VyLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowMSAtMDAwMApA
QCAtNDIsOSArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgRE9NOwogCiAjaW5jbHVkZSA8c3RkbGli
Lmg+CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiB2b2lkIHFGYXRhbCAoIGNvbnN0IGNoYXIgKiBtc2cg
KSB7fQotI2VuZGlmCiAKIFZhbHVlTGlzdDo6VmFsdWVMaXN0KCkKIHsKQEAgLTUxNCwxMiArNTEy
LDEwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKCBpbnQgcHJvcElkLCAKIAkgICAgcmV0
dXJuIHBhcnNlU2hhcGUoIHByb3BJZCwgaW1wb3J0YW50ICk7CiAJYnJlYWs7CiAKLSNpZiBBUFBM
RV9DSEFOR0VTCiAgICAgY2FzZSBDU1NfUFJPUF9fS0hUTUxfREFTSEJPQVJEX1JFR0lPTjogICAg
ICAgICAgICAgICAgIC8vIDxkYXNoYm9hcmQtcmVnaW9uPiB8IDxkYXNoYm9hcmQtcmVnaW9uPiAK
IAlpZiAoIHZhbHVlLT51bml0ID09IFZhbHVlOjpGdW5jdGlvbiB8fCBpZCA9PSBDU1NfVkFMX05P
TkUpCiAJICAgIHJldHVybiBwYXJzZURhc2hib2FyZFJlZ2lvbnMoIHByb3BJZCwgaW1wb3J0YW50
ICk7CiAJYnJlYWs7Ci0jZW5kaWYKIAogICAgIC8qIFN0YXJ0IG9mIHN1cHBvcnRlZCBDU1MgcHJv
cGVydGllcyB3aXRoIHZhbGlkYXRpb24uIFRoaXMgaXMgbmVlZGVkIGZvciBwYXJzZVNob3J0SGFu
ZCB0byB3b3JrCiAgICAgICogY29ycmVjdGx5IGFuZCBhbGxvd3Mgb3B0aW1pemF0aW9uIGluIGto
dG1sOjphcHBseVJ1bGUoLi4pCkBAIC04NzIsMzggKzg2OCw2IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKCBpbnQgcHJvcElkLCAKIAllbHNlCiAJICAgIHZhbGlkX3ByaW1pdGl2ZSA9ICgg
IWlkICYmIHZhbGlkVW5pdCggdmFsdWUsIEZOdW1iZXJ8Rkxlbmd0aHxGUGVyY2VudCwgc3RyaWN0
ICkgKTsKIAlicmVhazsKLSNpZiAwCi0JLy8gcmVtb3ZlZCBmcm9tIENTUyAyLjEKLSAgICBjYXNl
IENTU19QUk9QX0NPVU5URVJfSU5DUkVNRU5UOiAgICAvLyBbIDxpZGVudGlmaWVyPiA8aW50ZWdl
cj4/IF0rIHwgbm9uZSB8IGluaGVyaXQKLSAgICBjYXNlIENTU19QUk9QX0NPVU5URVJfUkVTRVQ6
ICAgICAgICAvLyBbIDxpZGVudGlmaWVyPiA8aW50ZWdlcj4/IF0rIHwgbm9uZSB8IGluaGVyaXQK
LQlpZiAoIGlkID09IENTU19WQUxfTk9ORSApCi0JICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7
Ci0JZWxzZSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3RJbXBsICpsaXN0ID0gbmV3IENTU1Zh
bHVlTGlzdEltcGw7Ci0gICAgICAgICAgICBpbnQgcG9zPTAsIHBvczI7Ci0gICAgICAgICAgICB3
aGlsZSggMSApCi0JICAgIHsKLSAgICAgICAgICAgICAgICBwb3MyID0gdmFsdWUuZmluZCgnLCcs
IHBvcyk7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBmYWNlID0gdmFsdWUubWlkKHBvcywgcG9z
Mi1wb3MpOwotICAgICAgICAgICAgICAgIGZhY2UgPSBmYWNlLnN0cmlwV2hpdGVTcGFjZSgpOwot
ICAgICAgICAgICAgICAgIGlmKGZhY2UubGVuZ3RoKCkgPT0gMCkgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgLy8gIyMjIHNpbmdsZSBxdW90ZWQgaXMgbWlzc2luZy4uLgotICAgICAgICAgICAgICAg
IGlmKGZhY2VbMF0gPT0gJ1wiJykgZmFjZS5yZW1vdmUoMCwgMSk7Ci0gICAgICAgICAgICAgICAg
aWYoZmFjZVtmYWNlLmxlbmd0aCgpLTFdID09ICdcIicpIGZhY2UgPSBmYWNlLmxlZnQoZmFjZS5s
ZW5ndGgoKS0xKTsKLSAgICAgICAgICAgICAgICAvL2tkRGVidWcoIDYwODAgKSA8PCAiZm91bmQg
ZmFjZSAnIiA8PCBmYWNlIDw8ICInIiA8PCBlbmRsOwotICAgICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsKERPTVN0cmluZyhmYWNlKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKLSAgICAgICAgICAgICAgICBwb3MgPSBwb3MyICsgMTsK
LSAgICAgICAgICAgICAgICBpZihwb3MyID09IC0xKSBicmVhazsKLQkgICAgfQotICAgICAgICAg
ICAgLy9rZERlYnVnKCA2MDgwICkgPDwgImdvdCAiIDw8IGxpc3QtPmxlbmd0aCgpIDw8ICIgZmFj
ZXMiIDw8IGVuZGw7Ci0gICAgICAgICAgICBpZihsaXN0LT5sZW5ndGgoKSkgewotCQlwYXJzZWRW
YWx1ZSA9IGxpc3Q7Ci0JCXZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgfSBlbHNlCi0J
CWRlbGV0ZSBsaXN0OwotICAgICAgICAgICAgYnJlYWs7Ci0JfQotI2VuZGlmCiAgICAgY2FzZSBD
U1NfUFJPUF9GT05UX0ZBTUlMWToKICAgICAJLy8gW1sgPGZhbWlseS1uYW1lPiB8IDxnZW5lcmlj
LWZhbWlseT4gXSxdKiBbPGZhbWlseS1uYW1lPiB8IDxnZW5lcmljLWZhbWlseT5dIHwgaW5oZXJp
dAogICAgIHsKQEAgLTExNzIsNyArMTEzNiw2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVl
KCBpbnQgcHJvcElkLCAKICAgICAKICAgICAvLyBFbmQgb2YgQ1NTMyBwcm9wZXJ0aWVzCiAKLSNp
ZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8gQXBwbGUgc3BlY2lmaWMgcHJvcGVydGllcy4gIFRoZXNl
IHdpbGwgbmV2ZXIgYmUgc3RhbmRhcmRpemVkIGFuZCBhcmUgcHVyZWx5IHRvCiAgICAgLy8gc3Vw
cG9ydCBjdXN0b20gV2ViS2l0LWJhc2VkIEFwcGxlIGFwcGxpY2F0aW9ucy4KICAgICBjYXNlIENT
U19QUk9QX19LSFRNTF9MSU5FX0NMQU1QOgpAQCAtMTE4Miw3ICsxMTQ1LDYgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoIGludCBwcm9wSWQsIAogICAgICAgICBpZiAoaWQgPT0gQ1NTX1ZB
TF9BVVRPIHx8IGlkID09IENTU19WQUxfTk9ORSkKICAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2
ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAKIAkvKiBzaG9ydGhhbmQgcHJvcGVy
dGllcyAqLwogICAgIGNhc2UgQ1NTX1BST1BfQkFDS0dST1VORDoKQEAgLTE4MjQsNyArMTc4Niw2
IEBAIHN0YXRpYyBWYWx1ZSAqc2tpcENvbW1hSW5EYXNoYm9hcmRSZWdpb24KICAgICByZXR1cm4g
YXJncy0+Y3VycmVudCgpOwogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyggaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQgKQogewog
ICAgIGJvb2wgdmFsaWQgPSB0cnVlOwpAQCAtMTk0OCw3ICsxOTA5LDYgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyggaQogICAgICAgICAKICAgICByZXR1cm4gdmFsaWQ7
CiB9Ci0jZW5kaWYKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hhcGUoIGludCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50ICkKIHsKSW5kZXg6IGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rv
ci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjIwCmRpZmYgLXAgLXUgLXIxLjIyMCBjc3Mv
Y3Nzc3R5bGVzZWxlY3Rvci5jcHAKLS0tIGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkyIE5vdiAy
MDA1IDA4OjUyOjQwIC0wMDAwCTEuMjIwCisrKyBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJMTEg
Tm92IDIwMDUgMTk6MzQ6MDEgLTAwMDAKQEAgLTE2OTYsMTIgKzE2OTYsOCBAQCBzdGF0aWMgY29u
c3QgY29sb3JNYXAgY21hcFtdID0gewogICAgIHsgQ1NTX1ZBTF9URUFMLCAweEZGMDA4MDgwICB9
LAogICAgIHsgQ1NTX1ZBTF9XSElURSwgMHhGRkZGRkZGRiB9LAogICAgIHsgQ1NTX1ZBTF9ZRUxM
T1csIDB4RkZGRkZGMDAgfSwKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIHsgQ1NTX1ZBTF9JTlZF
UlQsIGludmVydGVkQ29sb3IgfSwKLSNlbmRpZgogICAgIHsgQ1NTX1ZBTF9UUkFOU1BBUkVOVCwg
dHJhbnNwYXJlbnRDb2xvciB9LAogICAgIHsgQ1NTX1ZBTF9HUkVZLCAweEZGODA4MDgwIH0sCi0j
aWYgQVBQTEVfQ0hBTkdFUwogICAgIHsgQ1NTX1ZBTF9BQ1RJVkVCT1JERVIsIDB4RkZFMEUwRTAg
fSwKICAgICB7IENTU19WQUxfQUNUSVZFQ0FQVElPTiwgMHhGRjAwMDAwMCB9LAogICAgIHsgQ1NT
X1ZBTF9BUFBXT1JLU1BBQ0UsIDB4RkYwMDAwMDAgfSwKQEAgLTE3MzAsODggKzE3MjYsOSBAQCBz
dGF0aWMgY29uc3QgY29sb3JNYXAgY21hcFtdID0gewogICAgIHsgQ1NTX1ZBTF9XSU5ET1csIDB4
RkZGRkZGRkYgfSwKICAgICB7IENTU19WQUxfV0lORE9XRlJBTUUsIDB4RkZGRkZGRkYgfSwKICAg
ICB7IENTU19WQUxfV0lORE9XVEVYVCwgMHhGRjAwMDAwMCB9LAotI2VuZGlmCiAgICAgeyAwLCAw
IH0KIH07CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotCi1zdHJ1Y3QgdWlDb2xvcnMgewotICAgIGlu
dCBjc3NfdmFsdWU7Ci0gICAgY29uc3QgY2hhciAqIGNvbmZpZ0dyb3VwOwotICAgIGNvbnN0IGNo
YXIgKiBjb25maWdFbnRyeTsKLVFQYWxldHRlOjpDb2xvckdyb3VwIGdyb3VwOwotUUNvbG9yR3Jv
dXA6OkNvbG9yUm9sZSByb2xlOwotfTsKLQotY29uc3QgY2hhciAqIGNvbnN0IHdtZ3JvdXAgPSAi
V00iOwotY29uc3QgY2hhciAqIGNvbnN0IGdlbmVyYWxncm91cCA9ICJHZW5lcmFsIjsKLQotLyog
TWFwcGluZyBzeXN0ZW0gc2V0dGluZ3MgdG8gQ1NTIDIKLSogVHJpZWQgaGFyZCB0byBnZXQgYW4g
YXBwcm9wcmlhdGUgbWFwcGluZyAtIHNjaGxwYmNoCi0qLwotc3RhdGljIGNvbnN0IHVpQ29sb3Jz
IHVpbWFwW10gPSB7Ci0gICAgLy8gQWN0aXZlIHdpbmRvdyBib3JkZXIuCi0gICAgeyBDU1NfVkFM
X0FDVElWRUJPUkRFUiwgd21ncm91cCwgImJhY2tncm91bmQiLCBRUGFsZXR0ZTo6QWN0aXZlLCBR
Q29sb3JHcm91cDo6TGlnaHQgfSwKLSAgICAvLyBBY3RpdmUgd2luZG93IGNhcHRpb24uCi0gICAg
eyBDU1NfVkFMX0FDVElWRUNBUFRJT04sIHdtZ3JvdXAsICJiYWNrZ3JvdW5kIiwgUVBhbGV0dGU6
OkFjdGl2ZSwgUUNvbG9yR3JvdXA6OlRleHQgfSwKLSAgICAvLyBUZXh0IGluIGNhcHRpb24sIHNp
emUgYm94LCBhbmQgc2Nyb2xsYmFyIGFycm93IGJveC4KLSAgICB7IENTU19WQUxfQ0FQVElPTlRF
WFQsIHdtZ3JvdXAsICJhY3RpdmVGb3JlZ3JvdW5kIiwgUVBhbGV0dGU6OkFjdGl2ZSwgUUNvbG9y
R3JvdXA6OlRleHQgfSwKLSAgICAvLyBGYWNlIGNvbG9yIGZvciB0aHJlZS1kaW1lbnNpb25hbCBk
aXNwbGF5IGVsZW1lbnRzLgotICAgIHsgQ1NTX1ZBTF9CVVRUT05GQUNFLCB3bWdyb3VwLCAwLCBR
UGFsZXR0ZTo6SW5hY3RpdmUsIFFDb2xvckdyb3VwOjpCdXR0b24gfSwKLSAgICAvLyBEYXJrIHNo
YWRvdyBmb3IgdGhyZWUtZGltZW5zaW9uYWwgZGlzcGxheSBlbGVtZW50cyAoZm9yIGVkZ2VzIGZh
Y2luZyBhd2F5IGZyb20gdGhlIGxpZ2h0IHNvdXJjZSkuCi0gICAgeyBDU1NfVkFMX0JVVFRPTkhJ
R0hMSUdIVCwgd21ncm91cCwgMCwgUVBhbGV0dGU6OkluYWN0aXZlLCBRQ29sb3JHcm91cDo6TGln
aHQgfSwKLSAgICAvLyBTaGFkb3cgY29sb3IgZm9yIHRocmVlLWRpbWVuc2lvbmFsIGRpc3BsYXkg
ZWxlbWVudHMuCi0gICAgeyBDU1NfVkFMX0JVVFRPTlNIQURPVywgd21ncm91cCwgMCwgUVBhbGV0
dGU6OkluYWN0aXZlLCBRQ29sb3JHcm91cDo6U2hhZG93IH0sCi0gICAgLy8gVGV4dCBvbiBwdXNo
IGJ1dHRvbnMuCi0gICAgeyBDU1NfVkFMX0JVVFRPTlRFWFQsIHdtZ3JvdXAsICJidXR0b25Gb3Jl
Z3JvdW5kIiwgUVBhbGV0dGU6OkluYWN0aXZlLCBRQ29sb3JHcm91cDo6QnV0dG9uVGV4dCB9LAot
ICAgIC8vIERhcmsgc2hhZG93IGZvciB0aHJlZS1kaW1lbnNpb25hbCBkaXNwbGF5IGVsZW1lbnRz
LgotICAgIHsgQ1NTX1ZBTF9USFJFRUREQVJLU0hBRE9XLCB3bWdyb3VwLCAwLCBRUGFsZXR0ZTo6
SW5hY3RpdmUsIFFDb2xvckdyb3VwOjpEYXJrIH0sCi0gICAgLy8gRmFjZSBjb2xvciBmb3IgdGhy
ZWUtZGltZW5zaW9uYWwgZGlzcGxheSBlbGVtZW50cy4KLSAgICB7IENTU19WQUxfVEhSRUVERkFD
RSwgd21ncm91cCwgMCwgUVBhbGV0dGU6OkluYWN0aXZlLCBRQ29sb3JHcm91cDo6QnV0dG9uIH0s
Ci0gICAgLy8gSGlnaGxpZ2h0IGNvbG9yIGZvciB0aHJlZS1kaW1lbnNpb25hbCBkaXNwbGF5IGVs
ZW1lbnRzLgotICAgIHsgQ1NTX1ZBTF9USFJFRURISUdITElHSFQsIHdtZ3JvdXAsIDAsIFFQYWxl
dHRlOjpJbmFjdGl2ZSwgUUNvbG9yR3JvdXA6OkxpZ2h0IH0sCi0gICAgLy8gTGlnaHQgY29sb3Ig
Zm9yIHRocmVlLWRpbWVuc2lvbmFsIGRpc3BsYXkgZWxlbWVudHMgKGZvciBlZGdlcyBmYWNpbmcg
dGhlIGxpZ2h0IHNvdXJjZSkuCi0gICAgeyBDU1NfVkFMX1RIUkVFRExJR0hUU0hBRE9XLCB3bWdy
b3VwLCAwLCBRUGFsZXR0ZTo6SW5hY3RpdmUsIFFDb2xvckdyb3VwOjpNaWRsaWdodCB9LAotICAg
IC8vIERhcmsgc2hhZG93IGZvciB0aHJlZS1kaW1lbnNpb25hbCBkaXNwbGF5IGVsZW1lbnRzLgot
ICAgIHsgQ1NTX1ZBTF9USFJFRURTSEFET1csIHdtZ3JvdXAsIDAsIFFQYWxldHRlOjpJbmFjdGl2
ZSwgUUNvbG9yR3JvdXA6OlNoYWRvdyB9LAotCi0gICAgLy8gSW5hY3RpdmUgd2luZG93IGJvcmRl
ci4KLSAgICB7IENTU19WQUxfSU5BQ1RJVkVCT1JERVIsIHdtZ3JvdXAsICJiYWNrZ3JvdW5kIiwg
UVBhbGV0dGU6OkRpc2FibGVkLCBRQ29sb3JHcm91cDo6QmFja2dyb3VuZCB9LAotICAgIC8vIElu
YWN0aXZlIHdpbmRvdyBjYXB0aW9uLgotICAgIHsgQ1NTX1ZBTF9JTkFDVElWRUNBUFRJT04sIHdt
Z3JvdXAsICJpbmFjdGl2ZUJhY2tncm91bmQiLCBRUGFsZXR0ZTo6RGlzYWJsZWQsIFFDb2xvckdy
b3VwOjpCYWNrZ3JvdW5kIH0sCi0gICAgLy8gQ29sb3Igb2YgdGV4dCBpbiBhbiBpbmFjdGl2ZSBj
YXB0aW9uLgotICAgIHsgQ1NTX1ZBTF9JTkFDVElWRUNBUFRJT05URVhULCB3bWdyb3VwLCAiaW5h
Y3RpdmVGb3JlZ3JvdW5kIiwgUVBhbGV0dGU6OkRpc2FibGVkLCBRQ29sb3JHcm91cDo6VGV4dCB9
LAotICAgIHsgQ1NTX1ZBTF9HUkFZVEVYVCwgd21ncm91cCwgMCwgUVBhbGV0dGU6OkRpc2FibGVk
LCBRQ29sb3JHcm91cDo6VGV4dCB9LAotCi0gICAgLy8gTWVudSBiYWNrZ3JvdW5kCi0gICAgeyBD
U1NfVkFMX01FTlUsIGdlbmVyYWxncm91cCwgImJhY2tncm91bmQiLCBRUGFsZXR0ZTo6SW5hY3Rp
dmUsIFFDb2xvckdyb3VwOjpCYWNrZ3JvdW5kIH0sCi0gICAgLy8gVGV4dCBpbiBtZW51cwotICAg
IHsgQ1NTX1ZBTF9NRU5VVEVYVCwgZ2VuZXJhbGdyb3VwLCAiZm9yZWdyb3VuZCIsIFFQYWxldHRl
OjpJbmFjdGl2ZSwgUUNvbG9yR3JvdXA6OkJhY2tncm91bmQgfSwKLQotICAgIC8vIFRleHQgb2Yg
aXRlbShzKSBzZWxlY3RlZCBpbiBhIGNvbnRyb2wuCi0gICAgeyBDU1NfVkFMX0hJR0hMSUdIVCwg
Z2VuZXJhbGdyb3VwLCAic2VsZWN0QmFja2dyb3VuZCIsIFFQYWxldHRlOjpJbmFjdGl2ZSwgUUNv
bG9yR3JvdXA6OkJhY2tncm91bmQgfSwKLQotICAgIC8vIFRleHQgb2YgaXRlbShzKSBzZWxlY3Rl
ZCBpbiBhIGNvbnRyb2wuCi0gICAgeyBDU1NfVkFMX0hJR0hMSUdIVFRFWFQsIGdlbmVyYWxncm91
cCwgInNlbGVjdEZvcmVncm91bmQiLCBRUGFsZXR0ZTo6SW5hY3RpdmUsIFFDb2xvckdyb3VwOjpC
YWNrZ3JvdW5kIH0sCi0KLSAgICAvLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIG11bHRpcGxlIGRvY3Vt
ZW50IGludGVyZmFjZS4KLSAgICB7IENTU19WQUxfQVBQV09SS1NQQUNFLCBnZW5lcmFsZ3JvdXAs
ICJiYWNrZ3JvdW5kIiwgUVBhbGV0dGU6OkluYWN0aXZlLCBRQ29sb3JHcm91cDo6VGV4dCB9LAot
Ci0gICAgLy8gU2Nyb2xsIGJhciBncmF5IGFyZWEuCi0gICAgeyBDU1NfVkFMX1NDUk9MTEJBUiwg
Z2VuZXJhbGdyb3VwLCAiYmFja2dyb3VuZCIsIFFQYWxldHRlOjpJbmFjdGl2ZSwgUUNvbG9yR3Jv
dXA6OkJhY2tncm91bmQgfSwKLQotICAgIC8vIFdpbmRvdyBiYWNrZ3JvdW5kLgotICAgIHsgQ1NT
X1ZBTF9XSU5ET1csIGdlbmVyYWxncm91cCwgIndpbmRvd0JhY2tncm91bmQiLCBRUGFsZXR0ZTo6
SW5hY3RpdmUsIFFDb2xvckdyb3VwOjpCYWNrZ3JvdW5kIH0sCi0gICAgLy8gV2luZG93IGZyYW1l
LgotICAgIHsgQ1NTX1ZBTF9XSU5ET1dGUkFNRSwgZ2VuZXJhbGdyb3VwLCAid2luZG93QmFja2dy
b3VuZCIsIFFQYWxldHRlOjpJbmFjdGl2ZSwgUUNvbG9yR3JvdXA6OkJhY2tncm91bmQgfSwKLSAg
ICAvLyBXaW5kb3dUZXh0Ci0gICAgeyBDU1NfVkFMX1dJTkRPV1RFWFQsIGdlbmVyYWxncm91cCwg
IndpbmRvd0ZvcmVncm91bmQiLCBRUGFsZXR0ZTo6SW5hY3RpdmUsIFFDb2xvckdyb3VwOjpUZXh0
IH0sCi0gICAgeyBDU1NfVkFMX1RFWFQsIGdlbmVyYWxncm91cCwgMCwgUVBhbGV0dGU6OkluYWN0
aXZlLCBRQ29sb3JHcm91cDo6VGV4dCB9LAotICAgIHsgMCwgMCwgMCwgUVBhbGV0dGU6Ok5Db2xv
ckdyb3VwcywgUUNvbG9yR3JvdXA6Ok5Db2xvclJvbGVzIH0KLX07Ci0KLSNlbmRpZiAvLyAhQVBQ
TEVfQ0hBTkdFUwogCiBzdGF0aWMgUUNvbG9yIGNvbG9yRm9yQ1NTVmFsdWUoIGludCBjc3NfdmFs
dWUgKQogewpAQCAtMTgyMiwzNiArMTczOSw3IEBAIHN0YXRpYyBRQ29sb3IgY29sb3JGb3JDU1NW
YWx1ZSggaW50IGNzc18KICAgICBpZiAoIGNvbC0+Y3NzX3ZhbHVlICkKICAgICAgICAgcmV0dXJu
IGNvbC0+Y29sb3I7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgcmV0dXJuIFFDb2xvcigpOwot
I2Vsc2UKLSAgICBjb25zdCB1aUNvbG9ycyAqdWljb2wgPSB1aW1hcDsKLSAgICB3aGlsZSAoIHVp
Y29sLT5jc3NfdmFsdWUgJiYgdWljb2wtPmNzc192YWx1ZSAhPSBjc3NfdmFsdWUgKQotICAgICAg
ICArK3VpY29sOwotICAgIGlmICggIXVpY29sLT5jc3NfdmFsdWUgKSB7Ci0gICAgICAgIGlmICgg
Y3NzX3ZhbHVlID09IENTU19WQUxfSU5GT0JBQ0tHUk9VTkQgKQotICAgICAgICAgICAgcmV0dXJu
IFFUb29sVGlwOjpwYWxldHRlKCkuaW5hY3RpdmUoKS5iYWNrZ3JvdW5kKCk7Ci0gICAgICAgIGVs
c2UgaWYgKCBjc3NfdmFsdWUgPT0gQ1NTX1ZBTF9JTkZPVEVYVCApCi0gICAgICAgICAgICByZXR1
cm4gUVRvb2xUaXA6OnBhbGV0dGUoKS5pbmFjdGl2ZSgpLmZvcmVncm91bmQoKTsKLSAgICAgICAg
ZWxzZSBpZiAoIGNzc192YWx1ZSA9PSBDU1NfVkFMX0JBQ0tHUk9VTkQgKSB7Ci0gICAgICAgICAg
ICBLQ29uZmlnIGJja2dyQ29uZmlnKCJrZGVza3RvcHJjIiwgdHJ1ZSwgZmFsc2UpOyAvLyBObyBt
dWx0aS1zY3JlZW4gc3VwcG9ydAotICAgICAgICAgICAgYmNrZ3JDb25maWcuc2V0R3JvdXAoIkRl
c2t0b3AwIik7Ci0gICAgICAgICAgICAvLyBEZXNrdG9wIGJhY2tncm91bmQuCi0gICAgICAgICAg
ICByZXR1cm4gYmNrZ3JDb25maWcucmVhZENvbG9yRW50cnkoIkNvbG9yMSIsICZxQXBwLT5wYWxl
dHRlKCkuZGlzYWJsZWQoKS5iYWNrZ3JvdW5kKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBpbnZhbGlkQ29sb3I7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IFFQYWxldHRlICZwYWwgPSBx
QXBwLT5wYWxldHRlKCk7Ci0gICAgUUNvbG9yIGMgPSBwYWwuY29sb3IoIHVpY29sLT5ncm91cCwg
dWljb2wtPnJvbGUgKTsKLSAgICBpZiAoIHVpY29sLT5jb25maWdFbnRyeSApIHsKLSAgICAgICAg
S0NvbmZpZyAqZ2xvYmFsQ29uZmlnID0gS0dsb2JhbDo6Y29uZmlnKCk7Ci0gICAgICAgIGdsb2Jh
bENvbmZpZy0+c2V0R3JvdXAoIHVpY29sLT5jb25maWdHcm91cCApOwotICAgICAgICBjID0gZ2xv
YmFsQ29uZmlnLT5yZWFkQ29sb3JFbnRyeSggdWljb2wtPmNvbmZpZ0VudHJ5LCAmYyApOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gYzsKLSNlbmRpZgogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5RGVjbGFyYXRpb25zKGJvb2wgYXBwbHlGaXJzdCwgYm9vbCBpc0ltcG9ydGFudCwK
QEAgLTE4NzUsOSArMTc2Myw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJh
dGlvbnMKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NfUFJPUF9GT05UX1NUWUxFOgogICAg
ICAgICAgICAgICAgICAgICBjYXNlIENTU19QUk9QX0ZPTlRfRkFNSUxZOgogICAgICAgICAgICAg
ICAgICAgICBjYXNlIENTU19QUk9QX0ZPTlRfV0VJR0hUOgotI2lmIEFQUExFX0NIQU5HRVMKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NfUFJPUF9fS0hUTUxfVEVYVF9TSVpFX0FESlVTVDoK
LSNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgaGF2ZSB0byBiZSBhcHBs
aWVkIGZpcnN0LCBiZWNhdXNlIG90aGVyIHByb3BlcnRpZXMgdXNlIHRoZSBjb21wdXRlZAogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWVzIG9mIHRoZXNlIHBvcnBlcnRpZXMuCiAgICAg
ICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IHRydWU7CkBAIC0yNDYwLDE1ICsyMzQ2LDYgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KCBpbgogICAgIGNhc2UgQ1NTX1BS
T1BfQ09MT1I6CiAgICAgY2FzZSBDU1NfUFJPUF9PVVRMSU5FX0NPTE9SOgogICAgICAgICAvLyB0
aGlzIHByb3BlcnR5IGlzIGFuIGV4dGVuc2lvbiB1c2VkIHRvIGdldCBIVE1MNCA8Zm9udD4gcmln
aHQuCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBjYXNlIENTU19QUk9QX1NDUk9MTEJBUl9GQUNF
X0NPTE9SOgotICAgIGNhc2UgQ1NTX1BST1BfU0NST0xMQkFSX1NIQURPV19DT0xPUjoKLSAgICBj
YXNlIENTU19QUk9QX1NDUk9MTEJBUl9ISUdITElHSFRfQ09MT1I6Ci0gICAgY2FzZSBDU1NfUFJP
UF9TQ1JPTExCQVJfM0RMSUdIVF9DT0xPUjoKLSAgICBjYXNlIENTU19QUk9QX1NDUk9MTEJBUl9E
QVJLU0hBRE9XX0NPTE9SOgotICAgIGNhc2UgQ1NTX1BST1BfU0NST0xMQkFSX1RSQUNLX0NPTE9S
OgotICAgIGNhc2UgQ1NTX1BST1BfU0NST0xMQkFSX0FSUk9XX0NPTE9SOgotI2VuZGlmCiAgICAg
ewogICAgICAgICBRQ29sb3IgY29sOwogICAgICAgICBpZiAoaXNJbmhlcml0KSB7CkBAIC0yNTEx
LDM4ICsyMzg4LDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KCBpbgog
ICAgICAgICAgICAgc3R5bGUtPnNldENvbG9yKGNvbCk7IGJyZWFrOwogICAgICAgICBjYXNlIENT
U19QUk9QX09VVExJTkVfQ09MT1I6CiAgICAgICAgICAgICBzdHlsZS0+c2V0T3V0bGluZUNvbG9y
KGNvbCk7IGJyZWFrOwotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgICAgIGNhc2UgQ1NTX1BST1Bf
U0NST0xMQkFSX0ZBQ0VfQ09MT1I6Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UGFsZXR0ZUNvbG9y
KFFQYWxldHRlOjpBY3RpdmUsIFFDb2xvckdyb3VwOjpCdXR0b24sIGNvbCk7Ci0gICAgICAgICAg
ICBzdHlsZS0+c2V0UGFsZXR0ZUNvbG9yKFFQYWxldHRlOjpJbmFjdGl2ZSwgUUNvbG9yR3JvdXA6
OkJ1dHRvbiwgY29sKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19QUk9Q
X1NDUk9MTEJBUl9TSEFET1dfQ09MT1I6Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UGFsZXR0ZUNv
bG9yKFFQYWxldHRlOjpBY3RpdmUsIFFDb2xvckdyb3VwOjpTaGFkb3csIGNvbCk7Ci0gICAgICAg
ICAgICBzdHlsZS0+c2V0UGFsZXR0ZUNvbG9yKFFQYWxldHRlOjpJbmFjdGl2ZSwgUUNvbG9yR3Jv
dXA6OlNoYWRvdywgY29sKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19Q
Uk9QX1NDUk9MTEJBUl9ISUdITElHSFRfQ09MT1I6Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UGFs
ZXR0ZUNvbG9yKFFQYWxldHRlOjpBY3RpdmUsIFFDb2xvckdyb3VwOjpMaWdodCwgY29sKTsKLSAg
ICAgICAgICAgIHN0eWxlLT5zZXRQYWxldHRlQ29sb3IoUVBhbGV0dGU6OkluYWN0aXZlLCBRQ29s
b3JHcm91cDo6TGlnaHQsIGNvbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NfUFJPUF9TQ1JPTExCQVJfM0RMSUdIVF9DT0xPUjoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU19QUk9QX1NDUk9MTEJBUl9EQVJLU0hBRE9XX0NPTE9SOgotICAgICAgICAg
ICAgc3R5bGUtPnNldFBhbGV0dGVDb2xvcihRUGFsZXR0ZTo6QWN0aXZlLCBRQ29sb3JHcm91cDo6
RGFyaywgY29sKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQYWxldHRlQ29sb3IoUVBhbGV0dGU6
OkluYWN0aXZlLCBRQ29sb3JHcm91cDo6RGFyaywgY29sKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU19QUk9QX1NDUk9MTEJBUl9UUkFDS19DT0xPUjoKLSAgICAgICAgICAg
IHN0eWxlLT5zZXRQYWxldHRlQ29sb3IoUVBhbGV0dGU6OkFjdGl2ZSwgUUNvbG9yR3JvdXA6OkJh
c2UsIGNvbCk7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UGFsZXR0ZUNvbG9yKFFQYWxldHRlOjpJ
bmFjdGl2ZSwgUUNvbG9yR3JvdXA6OkJhc2UsIGNvbCk7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0
UGFsZXR0ZUNvbG9yKFFQYWxldHRlOjpBY3RpdmUsIFFDb2xvckdyb3VwOjpNaWQsIGNvbCk7Ci0g
ICAgICAgICAgICBzdHlsZS0+c2V0UGFsZXR0ZUNvbG9yKFFQYWxldHRlOjpJbmFjdGl2ZSwgUUNv
bG9yR3JvdXA6Ok1pZCwgY29sKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQYWxldHRlQ29sb3Io
UVBhbGV0dGU6OkFjdGl2ZSwgUUNvbG9yR3JvdXA6OkJhY2tncm91bmQsIGNvbCk7Ci0gICAgICAg
ICAgICBzdHlsZS0+c2V0UGFsZXR0ZUNvbG9yKFFQYWxldHRlOjpJbmFjdGl2ZSwgUUNvbG9yR3Jv
dXA6OkJhY2tncm91bmQsIGNvbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NfUFJPUF9TQ1JPTExCQVJfQVJST1dfQ09MT1I6Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UGFs
ZXR0ZUNvbG9yKFFQYWxldHRlOjpBY3RpdmUsIFFDb2xvckdyb3VwOjpCdXR0b25UZXh0LCBjb2wp
OwotICAgICAgICAgICAgc3R5bGUtPnNldFBhbGV0dGVDb2xvcihRUGFsZXR0ZTo6SW5hY3RpdmUs
IFFDb2xvckdyb3VwOjpCdXR0b25UZXh0LCBjb2wpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5k
aWYKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
NDA3NSw3ICszOTIwLDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KCBp
bgogICAgICAgICBicmVhazsKICAgICB9CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8gQXBw
bGUtc3BlY2lmaWMgY2hhbmdlcy4gIERvIG5vdCBtZXJnZSB0aGVzZSBwcm9wZXJ0aWVzIGludG8g
S0hUTUwuCiAgICAgY2FzZSBDU1NfUFJPUF9fS0hUTUxfTElORV9DTEFNUDogewogICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaW5lQ2xhbXAsIExpbmVDbGFtcCkKQEAgLTQxMjMs
NyArMzk2Nyw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eSggaW4KICAg
ICAgICAgCiAgICAgICAgIGJyZWFrOwogICAgIH0gICAKLSNlbmRpZgogCiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDI3NCw3ICs0MTE3LDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXBCYWNrZ3JvdW5kWVBvcwogICAgIGxheWVyLT5zZXRCYWNrZ3JvdW5kWVBvc2l0aW9u
KGwpOwogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVj
a0ZvclRleHRTaXplQWRqdXN0KCkKIHsKICAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0KCkp
CkBAIC00Mjg0LDcgKzQxMjYsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yVGV4
dFNpemVBCiAgICAgbmV3Rm9udERlZi5jb21wdXRlZFNpemUgPSBuZXdGb250RGVmLnNwZWNpZmll
ZFNpemU7CiAgICAgc3R5bGUtPnNldEZvbnREZWYobmV3Rm9udERlZik7CiB9Ci0jZW5kaWYKIAog
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVy
U3R5bGUqIGFTdHlsZSwgUmVuZGVyU3R5bGUqIGFQYXJlbnRTdHlsZSkKIHsKSW5kZXg6IGNzcy9j
c3NzdHlsZXNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40Mgpk
aWZmIC1wIC11IC1yMS40MiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCi0tLSBjc3MvY3Nzc3R5bGVz
ZWxlY3Rvci5oCTMwIE9jdCAyMDA1IDA1OjI2OjI2IC0wMDAwCTEuNDIKKysrIGNzcy9jc3NzdHls
ZXNlbGVjdG9yLmgJMTEgTm92IDIwMDUgMTk6MzQ6MDEgLTAwMDAKQEAgLTE1Myw5ICsxNTMsNyBA
QCBuYW1lc3BhY2Uga2h0bWwKIAkvKiBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0
IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlCiAJICAgY3VycmVudCBnZW5lcmljIGZv
bnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoICovCiAJdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1p
bHlDaGFuZ2UoUmVuZGVyU3R5bGUqIGFTdHlsZSwgUmVuZGVyU3R5bGUqIGFQYXJlbnRTdHlsZSk7
Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICB2b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3Qo
KTsKLSNlbmRpZgogCiAgICAgICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUq
IHN0eWxlLCBET006OkVsZW1lbnRJbXBsICplKTsKICAgICAKSW5kZXg6IGRvbS9kb21fbm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb21fbm9k
ZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1IGRvbS9kb21f
bm9kZS5oCi0tLSBkb20vZG9tX25vZGUuaAkyNSBPY3QgMjAwNSAxNjozOToyNCAtMDAwMAkxLjE1
CisrKyBkb20vZG9tX25vZGUuaAkxMSBOb3YgMjAwNSAxOTozNDowMSAtMDAwMApAQCAtOTE4LDkg
KzkxOCw3IEBAIGNsYXNzIE5vZGVMaXN0CiAgICAgZnJpZW5kIGNsYXNzIE5vZGU7CiAgICAgZnJp
ZW5kIGNsYXNzIERvY3VtZW50OwogICAgIGZyaWVuZCBjbGFzcyBIVE1MRG9jdW1lbnQ7Ci0jaWYg
QVBQTEVfQ0hBTkdFUwogICAgIGZyaWVuZCBjbGFzcyBOb2RlTGlzdEltcGw7Ci0jZW5kaWYKIAog
cHVibGljOgogICAgIE5vZGVMaXN0KCk7CkluZGV4OiBlY21hL2tqc19iaW5kaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19iaW5kaW5n
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NQpkaWZmIC1wIC11IC1yMS40NSBlY21hL2tq
c19iaW5kaW5nLmNwcAotLS0gZWNtYS9ranNfYmluZGluZy5jcHAJMyBPY3QgMjAwNSAyMToxMjox
MiAtMDAwMAkxLjQ1CisrKyBlY21hL2tqc19iaW5kaW5nLmNwcAkxMSBOb3YgMjAwNSAxOTozNDow
MiAtMDAwMApAQCAtMjE1LDcgKzIxNSw2IEBAIGJvb2wgU2NyaXB0SW50ZXJwcmV0ZXI6Ondhc1J1
bkJ5VXNlckdlc3QKICAgcmV0dXJuIGZhbHNlOwogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogCiBi
b29sIFNjcmlwdEludGVycHJldGVyOjppc0dsb2JhbE9iamVjdChWYWx1ZUltcCAqdikKIHsKQEAg
LTI0OCw3ICsyNDcsNiBAQCB2b2lkICpTY3JpcHRJbnRlcnByZXRlcjo6Y3JlYXRlTGFuZ3VhZ2VJ
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2VuZGlmCiAKIC8vLy8vLwogCkluZGV4OiBlY21h
L2tqc19iaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZWNtYS9ranNfYmluZGluZy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMzCmRpZmYgLXAg
LXUgLXIxLjMzIGVjbWEva2pzX2JpbmRpbmcuaAotLS0gZWNtYS9ranNfYmluZGluZy5oCTE3IEF1
ZyAyMDA1IDA0OjA2OjA5IC0wMDAwCTEuMzMKKysrIGVjbWEva2pzX2JpbmRpbmcuaAkxMSBOb3Yg
MjAwNSAxOTozNDowMiAtMDAwMApAQCAtMjYsOSArMjYsNyBAQAogI2luY2x1ZGUgPHF2YXJpYW50
Lmg+CiAjaW5jbHVkZSA8a2pzL2xvb2t1cC5oPgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL3J1bnRpbWUuaD4KLSNlbmRpZgogCiBjbGFzcyBLSFRNTFBhcnQ7
CiAKQEAgLTEwNSwxMyArMTAzLDExIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIAogICAgIERPTTo6
RXZlbnRJbXBsICpnZXRDdXJyZW50RXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2V2dDsgfQogCi0j
aWYgQVBQTEVfQ0hBTkdFUwogICAgIHZpcnR1YWwgYm9vbCBpc0dsb2JhbE9iamVjdChWYWx1ZUlt
cCAqdik7CiAgICAgdmlydHVhbCBJbnRlcnByZXRlciAqaW50ZXJwcmV0ZXJGb3JHbG9iYWxPYmpl
Y3QgKGNvbnN0IFZhbHVlSW1wICppbXApOwogICAgIHZpcnR1YWwgYm9vbCBpc1NhZmVTY3JpcHQg
KGNvbnN0IEludGVycHJldGVyICp0YXJnZXQpOwogICAgIHZpcnR1YWwgdm9pZCAqY3JlYXRlTGFu
Z3VhZ2VJbnN0YW5jZUZvclZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIGludCBsYW5ndWFnZSwgT2Jq
ZWN0SW1wICp2YWx1ZSwgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3Qg
QmluZGluZ3M6OlJvb3RPYmplY3QgKmN1cnJlbnQpOwogICAgIHZvaWQgKmNyZWF0ZU9iamNJbnN0
YW5jZUZvclZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdmFsdWUsIGNvbnN0IEJp
bmRpbmdzOjpSb290T2JqZWN0ICpvcmlnaW4sIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpj
dXJyZW50KTsKLSNlbmRpZgogCiAgIHByaXZhdGU6CiAgICAgS0hUTUxQYXJ0KiBtX3BhcnQ7Cklu
ZGV4OiBlY21hL2tqc19jc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VjbWEva2pzX2Nzcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzkKZGlm
ZiAtcCAtdSAtcjEuMzkgZWNtYS9ranNfY3NzLmNwcAotLS0gZWNtYS9ranNfY3NzLmNwcAkzIE9j
dCAyMDA1IDIxOjEyOjEyIC0wMDAwCTEuMzkKKysrIGVjbWEva2pzX2Nzcy5jcHAJMTEgTm92IDIw
MDUgMTk6MzQ6MDIgLTAwMDAKQEAgLTQxNCwyNyArNDE0LDYgQEAgYm9vbCBET01TdHlsZVNoZWV0
TGlzdDo6Z2V0T3duUHJvcGVydHlTbAogCiAgIC8vIElFIGFsc28gc3VwcG9ydHMgcmV0cmlldmlu
ZyBhIHN0eWxlc2hlZXQgYnkgbmFtZSwgdXNpbmcgdGhlIG5hbWUvaWQgb2YgdGhlIDxzdHlsZT4g
dGFnCiAgIC8vICh0aGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBhbGwgdGhlIG90aGVyIGNvbGxlY3Rp
b25zKQotI2lmIDAKLSAgLy8gQmFkIGltcGxlbWVudGF0aW9uIGJlY2F1c2UgRE9NOjpTdHlsZVNo
ZWV0IGRvZXNuJ3QgaW5oZXJpdCBET006Ok5vZGUKLSAgLy8gc28gd2UgY2FuJ3QgdXNlIERPTU5h
bWVkTm9kZXNDb2xsZWN0aW9uLi4uLi4KLSAgLy8gV2UgY291bGQgZHVwbGljYXRlIGl0IGZvciBz
dHlsZXNoZWV0cyB0aG91Z2ggLSB3b3J0aCBpdCA/Ci0gIC8vIE90aGVyIHByb2JsZW0gb2YgdGhp
cyBpbXBsZW1lbnRhdGlvbjogaXQgZG9lc24ndCBsb29rIGZvciB0aGUgSUQgYXR0cmlidXRlIQot
ICBET006Ok5hbWVOb2RlTGlzdEltcGwgbmFtZWRMaXN0KCBtX2RvYy5kb2N1bWVudEVsZW1lbnQo
KS5oYW5kbGUoKSwgcC5kb21TdHJpbmcoKSApOwotICBpbnQgbGVuID0gbmFtZWRMaXN0Lmxlbmd0
aCgpOwotICBpZiAoIGxlbiApIHsKLSAgICBRVmFsdWVMaXN0PERPTTo6Tm9kZT4gc3R5bGVTaGVl
dHM7Ci0gICAgZm9yICggaW50IGkgPSAwIDsgaSA8IGxlbiA7ICsraSApIHsKLSAgICAgIERPTTo6
SFRNTFN0eWxlRWxlbWVudCBlbGVtID0gRE9NOjpOb2RlKG5hbWVkTGlzdC5pdGVtKGkpKTsKLSAg
ICAgIGlmICghZWxlbS5pc051bGwoKSkKLSAgICAgICAgc3R5bGVTaGVldHMuYXBwZW5kKGVsZW0u
c2hlZXQoKSk7Ci0gICAgfQotICAgIGlmICggc3R5bGVTaGVldHMuY291bnQoKSA9PSAxICkgLy8g
c2luZ2xlIHJlc3VsdAotICAgICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3R5bGVT
aGVldHNbMF0pOwotICAgIGVsc2UgaWYgKCBzdHlsZVNoZWV0cy5jb3VudCgpID4gMSApIHsKLSAg
ICAgIHJldHVybiBuZXcgRE9NTmFtZWRJdGVtc0NvbGxlY3Rpb24oZXhlYyxzdHlsZVNoZWV0cyk7
Ci0gICAgfQotICB9Ci0jZW5kaWYKICAgLy8gIyMjIEJhZCBpbXBsZW1lbnRhdGlvbiBiZWNhdXNl
IHJldHVybnMgYSBzaW5nbGUgZWxlbWVudCAoYXJlIElEcyBhbHdheXMgdW5pcXVlPykKICAgLy8g
YW5kIGRvZXNuJ3QgbG9vayBmb3IgbmFtZSBhdHRyaWJ1dGUgKHNlZSBpbXBsZW1lbnRhdGlvbiBh
Ym92ZSkuCiAgIC8vIEJ1dCB1bmljaXR5IG9mIHN0eWxlc2hlZXQgaWRzIGlzIGdvb2QgcHJhY3Rp
Y2UgYW55d2F5IDspCkluZGV4OiBlY21hL2tqc19kb20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTA1CmRpZmYgLXAgLXUgLXIxLjEwNSBlY21hL2tqc19kb20uY3BwCi0tLSBlY21h
L2tqc19kb20uY3BwCTEgTm92IDIwMDUgMTY6NTk6NDYgLTAwMDAJMS4xMDUKKysrIGVjbWEva2pz
X2RvbS5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MDIgLTAwMDAKQEAgLTQ4LDkgKzQ4LDcgQEAKIAog
I2luY2x1ZGUgImh0bWxfb2JqZWN0aW1wbC5oIgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL3J1bnRpbWVfb2JqZWN0Lmg+Ci0jZW5kaWYKIAogdXNpbmcgbmFt
ZXNwYWNlIERPTTo6SFRNTE5hbWVzOwogCkBAIC0zODMsMTAgKzM4MSw4IEBAIFZhbHVlSW1wICpE
T01Ob2RlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWMKICAgICByZXR1cm4gZ2V0TGlzdGVuZXIocmVz
aXplRXZlbnQpOwogICBjYXNlIE9uU2Nyb2xsOgogICAgIHJldHVybiBnZXRMaXN0ZW5lcihzY3Jv
bGxFdmVudCk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICBjYXNlIE9uU2VhcmNoOgogICAgIHJldHVy
biBnZXRMaXN0ZW5lcihzZWFyY2hFdmVudCk7Ci0jZW5kaWYKICAgY2FzZSBPblNlbGVjdDoKICAg
ICByZXR1cm4gZ2V0TGlzdGVuZXIoc2VsZWN0RXZlbnQpOwogICBjYXNlIE9uU2VsZWN0U3RhcnQ6
CkBAIC0xNzc3LDM3ICsxNzczLDYgQEAgVmFsdWVJbXAgKk5vZGVDb25zdHJ1Y3Rvcjo6Z2V0VmFs
dWVQcm9wZQogewogICAvLyBXZSB1c2UgdGhlIHRva2VuIGFzIHRoZSB2YWx1ZSB0byByZXR1cm4g
ZGlyZWN0bHkKICAgcmV0dXJuIE51bWJlcigodW5zaWduZWQgaW50KXRva2VuKTsKLSNpZiAwCi0g
IHN3aXRjaCAodG9rZW4pIHsKLSAgY2FzZSBFTEVNRU5UX05PREU6Ci0gICAgcmV0dXJuIE51bWJl
cigodW5zaWduZWQgaW50KURPTTo6Tm9kZTo6RUxFTUVOVF9OT0RFKTsKLSAgY2FzZSBBVFRSSUJV
VEVfTk9ERToKLSAgICByZXR1cm4gTnVtYmVyKCh1bnNpZ25lZCBpbnQpRE9NOjpOb2RlOjpBVFRS
SUJVVEVfTk9ERSk7Ci0gIGNhc2UgVEVYVF9OT0RFOgotICAgIHJldHVybiBOdW1iZXIoKHVuc2ln
bmVkIGludClET006Ok5vZGU6OlRFWFRfTk9ERSk7Ci0gIGNhc2UgQ0RBVEFfU0VDVElPTl9OT0RF
OgotICAgIHJldHVybiBOdW1iZXIoKHVuc2lnbmVkIGludClET006Ok5vZGU6OkNEQVRBX1NFQ1RJ
T05fTk9ERSk7Ci0gIGNhc2UgRU5USVRZX1JFRkVSRU5DRV9OT0RFOgotICAgIHJldHVybiBOdW1i
ZXIoKHVuc2lnbmVkIGludClET006Ok5vZGU6OkVOVElUWV9SRUZFUkVOQ0VfTk9ERSk7Ci0gIGNh
c2UgRU5USVRZX05PREU6Ci0gICAgcmV0dXJuIE51bWJlcigodW5zaWduZWQgaW50KURPTTo6Tm9k
ZTo6RU5USVRZX05PREUpOwotICBjYXNlIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAg
ICByZXR1cm4gTnVtYmVyKCh1bnNpZ25lZCBpbnQpRE9NOjpOb2RlOjpQUk9DRVNTSU5HX0lOU1RS
VUNUSU9OX05PREUpOwotICBjYXNlIENPTU1FTlRfTk9ERToKLSAgICByZXR1cm4gTnVtYmVyKCh1
bnNpZ25lZCBpbnQpRE9NOjpOb2RlOjpDT01NRU5UX05PREUpOwotICBjYXNlIERPQ1VNRU5UX05P
REU6Ci0gICAgcmV0dXJuIE51bWJlcigodW5zaWduZWQgaW50KURPTTo6Tm9kZTo6RE9DVU1FTlRf
Tk9ERSk7Ci0gIGNhc2UgRE9DVU1FTlRfVFlQRV9OT0RFOgotICAgIHJldHVybiBOdW1iZXIoKHVu
c2lnbmVkIGludClET006Ok5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSk7Ci0gIGNhc2UgRE9DVU1F
TlRfRlJBR01FTlRfTk9ERToKLSAgICByZXR1cm4gTnVtYmVyKCh1bnNpZ25lZCBpbnQpRE9NOjpO
b2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKTsKLSAgY2FzZSBOT1RBVElPTl9OT0RFOgotICAg
IHJldHVybiBOdW1iZXIoKHVuc2lnbmVkIGludClET006Ok5vZGU6Ok5PVEFUSU9OX05PREUpOwot
ICBkZWZhdWx0OgotICAgIGtkV2FybmluZygpIDw8ICJOb2RlQ29uc3RydWN0b3I6OmdldFZhbHVl
UHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwgZW5kbDsKLSAgICByZXR1cm4g
TlVMTDsKLSAgfQotI2VuZGlmCiB9CiAKIE9iamVjdEltcCAqZ2V0Tm9kZUNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSAqZXhlYykKQEAgLTE4NDgsNDMgKzE4MTMsNiBAQCBWYWx1ZUltcCAqRE9NRXhjZXB0
aW9uQ29uc3RydWN0b3I6OmdldFZhCiB7CiAgIC8vIFdlIHVzZSB0aGUgdG9rZW4gYXMgdGhlIHZh
bHVlIHRvIHJldHVybiBkaXJlY3RseQogICByZXR1cm4gTnVtYmVyKCh1bnNpZ25lZCBpbnQpdG9r
ZW4pOwotI2lmIDAKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIElOREVYX1NJWkVfRVJSOgot
ICAgIHJldHVybiBOdW1iZXIoKHVuc2lnbmVkIGludClET006OkRPTUV4Y2VwdGlvbjo6SU5ERVhf
U0laRV9FUlIpOwotICBjYXNlIERPTVNUUklOR19TSVpFX0VSUjoKLSAgICByZXR1cm4gTnVtYmVy
KCh1bnNpZ25lZCBpbnQpRE9NOjpET01FeGNlcHRpb246OkRPTVNUUklOR19TSVpFX0VSUik7Ci0g
IGNhc2UgSElFUkFSQ0hZX1JFUVVFU1RfRVJSOgotICAgIHJldHVybiBOdW1iZXIoKHVuc2lnbmVk
IGludClET006OkRPTUV4Y2VwdGlvbjo6SElFUkFSQ0hZX1JFUVVFU1RfRVJSKTsKLSAgY2FzZSBX
Uk9OR19ET0NVTUVOVF9FUlI6Ci0gICAgcmV0dXJuIE51bWJlcigodW5zaWduZWQgaW50KURPTTo6
RE9NRXhjZXB0aW9uOjpXUk9OR19ET0NVTUVOVF9FUlIpOwotICBjYXNlIElOVkFMSURfQ0hBUkFD
VEVSX0VSUjoKLSAgICByZXR1cm4gTnVtYmVyKCh1bnNpZ25lZCBpbnQpRE9NOjpET01FeGNlcHRp
b246OklOVkFMSURfQ0hBUkFDVEVSX0VSUik7Ci0gIGNhc2UgTk9fREFUQV9BTExPV0VEX0VSUjoK
LSAgICByZXR1cm4gTnVtYmVyKCh1bnNpZ25lZCBpbnQpRE9NOjpET01FeGNlcHRpb246Ok5PX0RB
VEFfQUxMT1dFRF9FUlIpOwotICBjYXNlIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjoKLSAg
ICByZXR1cm4gTnVtYmVyKCh1bnNpZ25lZCBpbnQpRE9NOjpET01FeGNlcHRpb246Ok5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUik7Ci0gIGNhc2UgTk9UX0ZPVU5EX0VSUjoKLSAgICByZXR1cm4g
TnVtYmVyKCh1bnNpZ25lZCBpbnQpRE9NOjpET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIpOwot
ICBjYXNlIE5PVF9TVVBQT1JURURfRVJSOgotICAgIHJldHVybiBOdW1iZXIoKHVuc2lnbmVkIGlu
dClET006OkRPTUV4Y2VwdGlvbjo6Tk9UX1NVUFBPUlRFRF9FUlIpOwotICBjYXNlIElOVVNFX0FU
VFJJQlVURV9FUlI6Ci0gICAgcmV0dXJuIE51bWJlcigodW5zaWduZWQgaW50KURPTTo6RE9NRXhj
ZXB0aW9uOjpJTlVTRV9BVFRSSUJVVEVfRVJSKTsKLSAgY2FzZSBJTlZBTElEX1NUQVRFX0VSUjoK
LSAgICByZXR1cm4gTnVtYmVyKCh1bnNpZ25lZCBpbnQpRE9NOjpET01FeGNlcHRpb246OklOVkFM
SURfU1RBVEVfRVJSKTsKLSAgY2FzZSBTWU5UQVhfRVJSOgotICAgIHJldHVybiBOdW1iZXIoKHVu
c2lnbmVkIGludClET006OkRPTUV4Y2VwdGlvbjo6U1lOVEFYX0VSUik7Ci0gIGNhc2UgSU5WQUxJ
RF9NT0RJRklDQVRJT05fRVJSOgotICAgIHJldHVybiBOdW1iZXIoKHVuc2lnbmVkIGludClET006
OkRPTUV4Y2VwdGlvbjo6SU5WQUxJRF9NT0RJRklDQVRJT05fRVJSKTsKLSAgY2FzZSBOQU1FU1BB
Q0VfRVJSOgotICAgIHJldHVybiBOdW1iZXIoKHVuc2lnbmVkIGludClET006OkRPTUV4Y2VwdGlv
bjo6TkFNRVNQQUNFX0VSUik7Ci0gIGNhc2UgSU5WQUxJRF9BQ0NFU1NfRVJSOgotICAgIHJldHVy
biBOdW1iZXIoKHVuc2lnbmVkIGludClET006OkRPTUV4Y2VwdGlvbjo6SU5WQUxJRF9BQ0NFU1Nf
RVJSKTsKLSAgZGVmYXVsdDoKLSAgICBrZFdhcm5pbmcoKSA8PCAiRE9NRXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwgZW5k
bDsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotI2VuZGlmCiB9CiAKIE9iamVjdEltcCAqZ2V0RE9N
RXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVjKQpJbmRleDogZWNtYS9ranNfaHRt
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9r
anNfaHRtbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQ1CmRpZmYgLXAgLXUgLXIxLjE0
NSBlY21hL2tqc19odG1sLmNwcAotLS0gZWNtYS9ranNfaHRtbC5jcHAJMTAgTm92IDIwMDUgMjI6
NTU6MTUgLTAwMDAJMS4xNDUKKysrIGVjbWEva2pzX2h0bWwuY3BwCTExIE5vdiAyMDA1IDE5OjM0
OjAyIC0wMDAwCkBAIC02Miw5ICs2Miw3IEBACiAjaW5jbHVkZSA8cXBpeG1hcC5oPgogI2luY2x1
ZGUgPHFwYWludGVyLmg+CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSA8QXBwbGljYXRp
b25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZW5kaWYKIAogdXNpbmcgbmFtZXNw
YWNlIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIERPTTo6RXZlbnROYW1lczsKQEAg
LTIzMCw3ICsyMjgsNyBAQCBjb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRG9jdW1lbnQ6OmluZm8g
CiAjIFRoYXQgbWVhbnMgd2UgbG9zZSB0aGUgImRvY3VtZW50LmFsbCB3aGVuIHNwb29maW5nIGFz
IElFIiBmZWF0dXJlLCBidXQgd2UgZG9uJ3Qgc3Bvb2YgaW4gU2FmYXJpLgogIyBBbmQgdGhpcyBt
YWtlcyBzaXRlcyB0aGF0IHNldCBkb2N1bWVudC5hbGwgZXhwbGljaXRseSB3b3JrIHdoZW4gdGhl
eSBvdGhlcndpc2Ugd291bGRuJ3QsIAogIyBlLmcuIGh0dHBzOi8vY29ycG9yYXRlZXhjaGFuZ2Uu
YWlyYm9ybmUuY29tCi0jIChOb3QgaW4gQVBQTEVfQ0hBTkdFUyBzaW5jZSB3ZSBjYW4ndCBkbyAj
aWYgaW4gS0pTIGlkZW50aWZpZXIgbGlzdHMuKQorIyAoTm90IGluIDEgc2luY2Ugd2UgY2FuJ3Qg
ZG8gI2lmIGluIEtKUyBpZGVudGlmaWVyIGxpc3RzLikKICMgIGFsbAkJCUhUTUxEb2N1bWVudDo6
QWxsCQlEb250RGVsZXRlfFJlYWRPbmx5CiAgIGNsZWFyCQkJSFRNTERvY3VtZW50OjpDbGVhcgkJ
RG9udERlbGV0ZXxGdW5jdGlvbiAwCiAgIG9wZW4JCQlIVE1MRG9jdW1lbnQ6Ok9wZW4JCURvbnRE
ZWxldGV8RnVuY3Rpb24gMApAQCAtMTM3MCw3ICsxMzY4LDYgQEAgYm9vbCBIVE1MRWxlbWVudDo6
Z2V0T3duUHJvcGVydHlTbG90KEV4ZQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQot
I2lmIEFQUExFX0NIQU5HRVMKICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShlbWJl
ZFRhZykgfHwgZWxlbWVudC5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSB8fAogICAgICAgICAgICAg
IGVsZW1lbnQuaGFzTG9jYWxOYW1lKGFwcGxldFRhZykpIHsKICAgICAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSAiX19hcHBsZV9ydW50aW1lX29iamVjdCIpIHsKQEAgLTEzODYsNyArMTM4Myw2IEBA
IGJvb2wgSFRNTEVsZW1lbnQ6OmdldE93blByb3BlcnR5U2xvdChFeGUKICAgICAgICAgICAgIH0K
IAl9CiAgICAgfQotI2VuZGlmCiAKICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJ
bmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxlCiAgICAgY29u
c3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5h
bWUpOwpAQCAtMjUwNyw3ICsyNTAzLDYgQEAgVmFsdWVJbXAgKktKUzo6SFRNTEVsZW1lbnRGdW5j
dGlvbjo6Y2FsbAogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICB9CiAg
ICAgfQotI2lmIEFQUExFX0NIQU5HRVMKICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFt
ZShjYW52YXNUYWcpKSB7CiAgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpHZXRD
b250ZXh0KSB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMCB8fCAoYXJncy5zaXpl
KCkgPT0gMSAmJiBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKSA9PSAi
MmQiKSkgewpAQCAtMjUxNiw3ICsyNTExLDYgQEAgVmFsdWVJbXAgKktKUzo6SFRNTEVsZW1lbnRG
dW5jdGlvbjo6Y2FsbAogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICB9
CiAgICAgfQotI2VuZGlmCiAKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0yNTQzLDcg
KzI1MzcsNiBAQCB2b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1dChFeGVjU3RhdGUgKmV4CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAg
IGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50Lmhhc0xv
Y2FsTmFtZShvYmplY3RUYWcpIHx8IGVsZW1lbnQuaGFzTG9jYWxOYW1lKGFwcGxldFRhZykpIHsK
IAlpZiAoVmFsdWVJbXAgKnJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsICZl
bGVtZW50KSkgewogCSAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAq
PihydW50aW1lT2JqZWN0KTsKQEAgLTI1NTEsNyArMjU0NCw2IEBAIHZvaWQgS0pTOjpIVE1MRWxl
bWVudDo6cHV0KEV4ZWNTdGF0ZSAqZXgKIAkJcmV0dXJuIGltcC0+cHV0KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUpOwogCX0KICAgICB9Ci0jZW5kaWYKIAogICAgIGNvbnN0IEhhc2hUYWJsZSog
dGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNo
dGFibGUKICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkodGFi
bGUsIHByb3BlcnR5TmFtZSk7CkluZGV4OiBlY21hL2tqc19odG1sLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjU4CmRpZmYgLXAgLXUgLXIxLjU4IGVjbWEva2pzX2h0bWwuaAotLS0gZWNt
YS9ranNfaHRtbC5oCTIgTm92IDIwMDUgMDg6NTI6NDIgLTAwMDAJMS41OAorKysgZWNtYS9ranNf
aHRtbC5oCTExIE5vdiAyMDA1IDE5OjM0OjAyIC0wMDAwCkBAIC0yNyw5ICsyNyw3IEBACiAjaW5j
bHVkZSA8cWd1YXJkZWRwdHIuaD4KICNpbmNsdWRlICJtaXNjL2xvYWRlcl9jbGllbnQuaCIKIAot
I2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0
aW9uU2VydmljZXMuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgRE9NIHsKICAgICBjbGFzcyBIVE1M
Q29sbGVjdGlvbkltcGw7CkluZGV4OiBlY21hL2tqc19uYXZpZ2F0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRvci5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzYKZGlmZiAtcCAtdSAtcjEuMzYgZWNtYS9ranNfbmF2
aWdhdG9yLmNwcAotLS0gZWNtYS9ranNfbmF2aWdhdG9yLmNwcAkzIE9jdCAyMDA1IDIxOjEyOjEz
IC0wMDAwCTEuMzYKKysrIGVjbWEva2pzX25hdmlnYXRvci5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6
MDIgLTAwMDAKQEAgLTM0LDkgKzM0LDcgQEAKICNpbmNsdWRlICJranNfYmluZGluZy5oIgogI2lu
Y2x1ZGUgImtodG1sX3BhcnQuaCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlICJLV1FL
Q29va2llSmFyLmgiCi0jZW5kaWYKIAogbmFtZXNwYWNlIEtKUyB7CiAKQEAgLTE3MCwxMiArMTY4
LDcgQEAgYm9vbCBOYXZpZ2F0b3I6OmdldE93blByb3BlcnR5U2xvdChFeGVjUwogCiBWYWx1ZUlt
cCAqTmF2aWdhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewotI2lmIEFQUExFX0NIQU5HRVMKICAgUVN0cmluZyB1c2VyQWdlbnQgPSBLV1Eo
bV9wYXJ0KS0+dXNlckFnZW50KCk7Ci0jZWxzZQotICBLVVJMIHVybCA9IG1fcGFydC0+dXJsKCk7
Ci0gIFFTdHJpbmcgdXNlckFnZW50ID0gS1Byb3RvY29sTWFuYWdlcjo6dXNlckFnZW50Rm9ySG9z
dCh1cmwuaG9zdCgpKTsKLSNlbmRpZgogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgQXBwQ29k
ZU5hbWU6CiAgICAgcmV0dXJuIFN0cmluZygiTW96aWxsYSIpOwpAQCAtMTkzLDQ0ICsxODYsMjYg
QEAgVmFsdWVJbXAgKk5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogICAgICAgLy9rZERl
YnVnKCkgPDwgImFwcE5hbWUgLT4gSUUiIDw8IGVuZGw7CiAgICAgICByZXR1cm4gU3RyaW5nKCJN
aWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIiKTsKICAgICB9Ci0jaWYgQVBQTEVfQ0hBTkdFUwog
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgZGVmaW5lIGEgZmFsbGJhY2sgcmVzdWx0IGhlcmUgYmVz
aWRlcyAiS29ucXVlcm9yIj8KICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0jZWxzZQotICAgIC8v
a2REZWJ1ZygpIDw8ICJhcHBOYW1lIC0+IEtvbnF1ZXJvciIgPDwgZW5kbDsKLSAgICByZXR1cm4g
U3RyaW5nKCJLb25xdWVyb3IiKTsKLSNlbmRpZgogICBjYXNlIEFwcFZlcnNpb246CiAgICAgLy8g
V2UgYXNzdW1lIHRoZSBzdHJpbmcgaXMgc29tZXRoaW5nIGxpa2UgTW96aWxsYS92ZXJzaW9uIChw
cm9wZXJ0aWVzKQogICAgIHJldHVybiBTdHJpbmcodXNlckFnZW50Lm1pZCh1c2VyQWdlbnQuZmlu
ZCgnLycpICsgMSkpOwogICBjYXNlIFByb2R1Y3Q6Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIC8v
IFdoZW4gYWN0aW5nIG5vcm1hbCwgd2UgcHJldGVuZCB0byBiZSAiR2Vja28iLgogICAgIGlmICh1
c2VyQWdlbnQuZmluZCgiTW96aWxsYS81LjAiKSA+PSAwICYmIHVzZXJBZ2VudC5maW5kKCJjb21w
YXRpYmxlIikgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIFN0cmluZygiR2Vja28iKTsKICAgICB9
CiAgICAgLy8gV2hlbiBzcG9vZmluZyBhcyBJRSwgd2UgdXNlIFVuZGVmaW5lZCgpLgogICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIFN0cmluZygiS29ucXVlcm9yL2to
dG1sIik7Ci0jZW5kaWYKICAgY2FzZSBQcm9kdWN0U3ViOgogICAgIHJldHVybiBTdHJpbmcoIjIw
MDMwMTA3Iik7CiAgIGNhc2UgVmVuZG9yOgotI2lmIEFQUExFX0NIQU5HRVMKICAgICByZXR1cm4g
U3RyaW5nKCJBcHBsZSBDb21wdXRlciwgSW5jLiIpOwotI2Vsc2UKLSAgICByZXR1cm4gU3RyaW5n
KCJLREUiKTsKLSNlbmRpZgogICBjYXNlIExhbmd1YWdlOgotI2lmIEFQUExFX0NIQU5HRVMKICAg
ICAvLyBXZSBkb24ndCBoYXZlIGFuIGltcGxlbWVudGF0aW9uIG9mIEtHbG9iYWw6OmxvY2FsZSgp
LiAgV2UgZG8gaG93ZXZlcgogICAgIC8vIGhhdmUgYSBzdGF0aWMgbWV0aG9kIG9uIEtMb2NhbGUg
dG8gYWNjZXNzIHRoZSBjdXJyZW50IGxhbmd1YWdlLgogICAgIHJldHVybiBTdHJpbmcoS0xvY2Fs
ZTo6bGFuZ3VhZ2UoKSk7Ci0jZWxzZQotICAgIHJldHVybiBTdHJpbmcoS0dsb2JhbDo6bG9jYWxl
KCktPmxhbmd1YWdlKCkgPT0gIkMiID8KLSAgICAgICAgICAgICAgICAgIFFTdHJpbmc6OmZyb21M
YXRpbjEoImVuIikgOiBLR2xvYmFsOjpsb2NhbGUoKS0+bGFuZ3VhZ2UoKSk7Ci0jZW5kaWYKICAg
Y2FzZSBVc2VyQWdlbnQ6CiAgICAgcmV0dXJuIFN0cmluZyh1c2VyQWdlbnQpOwogICBjYXNlIFBs
YXRmb3JtOgpAQCAtMjQ3LDExICsyMjIsNyBAQCBWYWx1ZUltcCAqTmF2aWdhdG9yOjpnZXRWYWx1
ZVByb3BlcnR5KEV4CiAgIGNhc2UgX01pbWVUeXBlczoKICAgICByZXR1cm4gbmV3IE1pbWVUeXBl
cyhleGVjKTsKICAgY2FzZSBDb29raWVFbmFibGVkOgotI2lmIEFQUExFX0NIQU5HRVMKICAgICBy
ZXR1cm4gQm9vbGVhbihLV1FLQ29va2llSmFyOjpjb29raWVFbmFibGVkKCkpOwotI2Vsc2UKLSAg
ICByZXR1cm4gQm9vbGVhbih0cnVlKTsgLy8vICMjIyMjIEZJWE1FCi0jZW5kaWYKICAgZGVmYXVs
dDoKICAgICBrZFdhcm5pbmcoKSA8PCAiVW5oYW5kbGVkIHRva2VuIGluIERPTUV2ZW50OjpnZXRW
YWx1ZVByb3BlcnR5IDogIiA8PCB0b2tlbiA8PCBlbmRsOwogICAgIHJldHVybiBOVUxMOwpAQCAt
MzQ2LDkgKzMxNyw3IEBAIHZvaWQgUGx1Z2luQmFzZTo6cmVmcmVzaChib29sIHJlbG9hZCkKICAg
ICBkZWxldGUgbWltZXM7CiAgICAgcGx1Z2lucyA9IDA7CiAgICAgbWltZXMgPSAwOwotI2lmIEFQ
UExFX0NIQU5HRVMKICAgICBSZWZyZXNoUGx1Z2lucyhyZWxvYWQpOwotI2VuZGlmCiB9CiAKIApJ
bmRleDogZWNtYS9ranNfcHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VjbWEva2pzX3Byb3h5LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
NApkaWZmIC1wIC11IC1yMS4yNCBlY21hL2tqc19wcm94eS5jcHAKLS0tIGVjbWEva2pzX3Byb3h5
LmNwcAkzIE9jdCAyMDA1IDIxOjEyOjEzIC0wMDAwCTEuMjQKKysrIGVjbWEva2pzX3Byb3h5LmNw
cAkxMSBOb3YgMjAwNSAxOTozNDowMyAtMDAwMApAQCAtMTI5LDExICsxMjksNyBAQCBRVmFyaWFu
dCBLSlNQcm94eUltcGw6OmV2YWx1YXRlKFFTdHJpbmcgCiAgICAgaW50IGxpbmVOdW1iZXIgPSAg
Y29tcC52YWx1ZSgpLT50b09iamVjdChtX3NjcmlwdC0+Z2xvYmFsRXhlYygpKS0+Z2V0KG1fc2Ny
aXB0LT5nbG9iYWxFeGVjKCksICJsaW5lIiktPnRvSW50MzIobV9zY3JpcHQtPmdsb2JhbEV4ZWMo
KSk7CiAgICAgVVN0cmluZyBzb3VyY2VVUkwgPSBjb21wLnZhbHVlKCktPnRvT2JqZWN0KG1fc2Ny
aXB0LT5nbG9iYWxFeGVjKCkpLT5nZXQobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSwgInNvdXJjZVVS
TCIpLT50b1N0cmluZyhtX3NjcmlwdC0+Z2xvYmFsRXhlYygpKTsKIAotI2lmIEFQUExFX0NIQU5H
RVMKICAgICBLV1EobV9wYXJ0KS0+YWRkTWVzc2FnZVRvQ29uc29sZShlcnJvck1lc3NhZ2UucXN0
cmluZygpLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwucXN0cmluZygpKTsKLSNlbHNlCi0gICAga2RX
YXJuaW5nKDYwNzApIDw8ICJTY3JpcHQgdGhyZXcgZXhjZXB0aW9uOiAiIDw8IGVycm9yTWVzc2Fn
ZS5xc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgogICB9CiAgIHJldHVybiBRVmFyaWFudCgpOwog
fQpAQCAtMjcxLDExICsyNjcsNyBAQCB2b2lkIEtKU1Byb3h5SW1wbDo6aW5pdFNjcmlwdCgpCiAg
IC8vbV9zY3JpcHQtPmVuYWJsZURlYnVnKCk7CiAgIGdsb2JhbE9iamVjdC0+cHV0KG1fc2NyaXB0
LT5nbG9iYWxFeGVjKCksICJkZWJ1ZyIsIG5ldyBUZXN0RnVuY3Rpb25JbXAoKSwgSW50ZXJuYWwp
OwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICBRU3RyaW5nIHVzZXJBZ2VudCA9IEtXUShtX3BhcnQp
LT51c2VyQWdlbnQoKTsKLSNlbHNlCi0gIFFTdHJpbmcgdXNlckFnZW50ID0gS1Byb3RvY29sTWFu
YWdlcjo6dXNlckFnZW50Rm9ySG9zdChtX3BhcnQtPnVybCgpLmhvc3QoKSk7Ci0jZW5kaWYKICAg
aWYgKHVzZXJBZ2VudC5maW5kKFFTdHJpbmc6OmZyb21MYXRpbjEoIk1pY3Jvc29mdCIpKSA+PSAw
IHx8CiAgICAgICB1c2VyQWdlbnQuZmluZChRU3RyaW5nOjpmcm9tTGF0aW4xKCJNU0lFIikpID49
IDApCiAgICAgbV9zY3JpcHQtPnNldENvbXBhdE1vZGUoSW50ZXJwcmV0ZXI6OklFQ29tcGF0KTsK
SW5kZXg6IGVjbWEva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xODcKZGlmZiAtcCAtdSAtcjEuMTg3IGVjbWEva2pzX3dpbmRvdy5jcHAKLS0tIGVjbWEva2pz
X3dpbmRvdy5jcHAJOSBOb3YgMjAwNSAwMjo0NjoyNyAtMDAwMAkxLjE4NworKysgZWNtYS9ranNf
d2luZG93LmNwcAkxMSBOb3YgMjAwNSAxOTozNDowMyAtMDAwMApAQCAtMzgsMTAgKzM4LDggQEAK
ICNpbmNsdWRlIDxxc3R5bGUuaD4KICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2NhbnZhcy5o
IgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgIktXUUxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJLV1FLQ29uZmlnQmFzZS5oIgotI2VuZGlmCiAjaW5jbHVkZSA8a2pzL2NvbGxlY3Rvci5oPgog
I2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1ZGUgImtqc19uYXZpZ2F0b3IuaCIKQEAgLTUw
MSwyOCArNDk5LDkgQEAgVVN0cmluZyBXaW5kb3c6OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqKSBjbwog
CiBzdGF0aWMgYm9vbCBhbGxvd1BvcFVwKEV4ZWNTdGF0ZSAqZXhlYywgV2luZG93ICp3aW5kb3cp
CiB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIHJldHVybiB3aW5kb3ctPnBhcnQoKQogICAgICAg
ICAmJiAod2luZG93LT5wYXJ0KCktPnNldHRpbmdzKCktPkphdmFTY3JpcHRDYW5PcGVuV2luZG93
c0F1dG9tYXRpY2FsbHkoKQogICAgICAgICAgICAgfHwgc3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJw
cmV0ZXIgKj4oZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkpLT53YXNSdW5CeVVzZXJHZXN0dXJl
KCkpOwotI2Vsc2UgICAgCi0gICAgS0NvbmZpZyBjb25maWcoImtvbnF1ZXJvcnJjIik7Ci0gICAg
Y29uZmlnLnNldEdyb3VwKCJKYXZhL0phdmFTY3JpcHQgU2V0dGluZ3MiKTsKLSAgICBzd2l0Y2gg
KGNvbmZpZy5yZWFkVW5zaWduZWROdW1FbnRyeSgiV2luZG93T3BlblBvbGljeSIsIDApKSB7IC8v
IDA9YWxsb3csIDE9YXNrLCAyPWRlbnksIDM9c21hcnQKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgY2FzZSAwOiAvLyBhbGxvdwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNh
c2UgMTogLy8gYXNrCi0gICAgICAgICAgICByZXR1cm4gS01lc3NhZ2VCb3g6OnF1ZXN0aW9uWWVz
Tm8od2lkZ2V0LAotICAgICAgICAgICAgICAgIGkxOG4oIlRoaXMgc2l0ZSBpcyB0cnlpbmcgdG8g
b3BlbiB1cCBhIG5ldyBicm93c2VyIHdpbmRvdyB1c2luZyBKYXZhc2NyaXB0LlxuIgotICAgICAg
ICAgICAgICAgICAgICAgIkRvIHlvdSB3YW50IHRvIGFsbG93IHRoaXM/IiksCi0gICAgICAgICAg
ICAgICAgaTE4bigiQ29uZmlybWF0aW9uOiBKYXZhc2NyaXB0IFBvcHVwIikpID09IEtNZXNzYWdl
Qm94OjpZZXM7Ci0gICAgICAgIGNhc2UgMjogLy8gZGVueQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBjYXNlIDM6IC8vIHNtYXJ0Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8U2NyaXB0SW50ZXJwcmV0ZXIgKj4oZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkpLT53
YXNSdW5CeVVzZXJHZXN0dXJlKCk7Ci0gICAgfQotI2VuZGlmCiB9CiAKIHN0YXRpYyBRTWFwPFFT
dHJpbmcsIFFTdHJpbmc+IHBhcnNlRmVhdHVyZXMoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAq
ZmVhdHVyZXNBcmcpCkBAIC04MDMsMjkgKzc4MiwxOSBAQCBWYWx1ZUltcCAqV2luZG93OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTCiAgICAgY2FzZSBTY3JlZW5MZWZ0OgogICAgIGNhc2UgU2NyZWVu
WDogewogICAgICAgaWYgKG1fcGFydC0+dmlldygpKSB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAg
ICAgICAvLyBXZSB3YW50IHRvIHVzZSBmcmFtZUdlb21ldHJ5IGhlcmUgaW5zdGVhZCBvZiBtYXBU
b0dsb2JhbCBiZWNhdXNlIGl0IGdvZXMgdGhyb3VnaAogICAgICAgICAvLyB0aGUgd2luZG93RnJh
bWUgbWV0aG9kIG9mIHRoZSBXZWJLaXQncyBVSSBkZWxlZ2F0ZS4gQWxzbyB3ZSBkb24ndCB3YW50
IHRvIHRyeQogICAgICAgICAvLyB0byBkbyBhbnl0aGluZyByZWxhdGl2ZSB0byB0aGUgc2NyZWVu
IHRoZSB3aW5kb3cgaXMgb24sIHNvIHRoZSBjb2RlIGJlbG93IGlzIG5vCiAgICAgICAgIC8vIGdv
b2Qgb2YgdXMgYW55d2F5LgogICAgICAgICByZXR1cm4gTnVtYmVyKG1fcGFydC0+dmlldygpLT50
b3BMZXZlbFdpZGdldCgpLT5mcmFtZUdlb21ldHJ5KCkueCgpKTsKLSNlbHNlCi0gICAgICAgIFFS
ZWN0IHNnID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbkdlb21ldHJ5KFFBcHBsaWNh
dGlvbjo6ZGVza3RvcCgpLT5zY3JlZW5OdW1iZXIobV9wYXJ0LT52aWV3KCkpKTsKLSAgICAgICAg
cmV0dXJuIE51bWJlcihtX3BhcnQtPnZpZXcoKS0+bWFwVG9HbG9iYWwoUVBvaW50KDAsMCkpLngo
KSArIHNnLngoKSk7Ci0jZW5kaWYKICAgICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiAgICAgfQogICAgIGNhc2UgU2NyZWVuVG9wOgogICAgIGNhc2UgU2NyZWVuWTogewog
ICAgICAgaWYgKG1fcGFydC0+dmlldygpKSB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAv
LyBTZWUgY29tbWVudCBhYm92ZSBpbiBTY3JlZW5YLgogICAgICAgICByZXR1cm4gTnVtYmVyKG1f
cGFydC0+dmlldygpLT50b3BMZXZlbFdpZGdldCgpLT5mcmFtZUdlb21ldHJ5KCkueSgpKTsKLSNl
bHNlCi0gICAgICAgIFFSZWN0IHNnID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbkdl
b21ldHJ5KFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5zY3JlZW5OdW1iZXIobV9wYXJ0LT52aWV3
KCkpKTsKLSAgICAgICAgcmV0dXJuIE51bWJlcihtX3BhcnQtPnZpZXcoKS0+bWFwVG9HbG9iYWwo
UVBvaW50KDAsMCkpLnkoKSArIHNnLnkoKSk7Ci0jZW5kaWYKICAgICAgIH0gZWxzZSAKICAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIH0KQEAgLTg4OSw5ICs4NTgsNyBAQCBWYWx1ZUlt
cCAqV2luZG93OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAgICBzd2l0Y2ggKHRva2VuKSB7CiAg
ICBjYXNlIERvY3VtZW50OgogICAgICBpZiAoIW1fcGFydC0+eG1sRG9jSW1wbCgpKSB7Ci0jaWYg
QVBQTEVfQ0hBTkdFUwogICAgICAgIEtXUShtX3BhcnQpLT5jcmVhdGVFbXB0eURvY3VtZW50KCk7
Ci0jZW5kaWYKICAgICAgICBtX3BhcnQtPmJlZ2luKCk7CiAgICAgICAgbV9wYXJ0LT53cml0ZSgi
PEhUTUw+PEJPRFk+Iik7CiAgICAgICAgbV9wYXJ0LT5lbmQoKTsKQEAgLTk0MSwxMCArOTA4LDgg
QEAgVmFsdWVJbXAgKldpbmRvdzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjUwogICAgICByZXR1cm4g
Z2V0TGlzdGVuZXIoZXhlYyxyZXNpemVFdmVudCk7CiAgICBjYXNlIE9uc2Nyb2xsOgogICAgICBy
ZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxzY3JvbGxFdmVudCk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwog
ICAgY2FzZSBPbnNlYXJjaDoKICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsc2VhcmNoRXZl
bnQpOwotI2VuZGlmCiAgICBjYXNlIE9uc2VsZWN0OgogICAgICByZXR1cm4gZ2V0TGlzdGVuZXIo
ZXhlYyxzZWxlY3RFdmVudCk7CiAgICBjYXNlIE9uc3VibWl0OgpAQCAtMTEyNCwxMiArMTA4OSw4
IEBAIHZvaWQgV2luZG93OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKICAgICAgICAgaWYg
KCFkc3RVcmwuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkgfHwgaXNTYWZlU2NyaXB0
KGV4ZWMpKQogICAgICAgICB7CiAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHN0YXRpY19j
YXN0PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpKS0+d2Fz
UnVuQnlVc2VyR2VzdHVyZSgpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAvLyBXZSB3
YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0aGlzIEpTIHdhcyBjYWxsZWQgdmlhIGEgdXNlciBn
ZXN0dXJlCiAgICAgICAgICAgbV9wYXJ0LT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGRzdFVybCwg
cC0+cmVmZXJyZXIoKSwgIXVzZXJHZXN0dXJlLCB1c2VyR2VzdHVyZSk7Ci0jZWxzZQotICAgICAg
ICAgIG1fcGFydC0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShkc3RVcmwsIHAtPnJlZmVycmVyKCks
IGZhbHNlIC8qZG9uJ3QgbG9jayBoaXN0b3J5Ki8sIHVzZXJHZXN0dXJlKTsKLSNlbmRpZgogICAg
ICAgICB9CiAgICAgICB9CiAgICAgICByZXR1cm47CkBAIC0xMjIyLDEyICsxMTgzLDEwIEBAIHZv
aWQgV2luZG93OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKICAgICAgIGlmIChpc1NhZmVT
Y3JpcHQoZXhlYykpCiAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsc2Nyb2xsRXZlbnQsdmFsdWUp
OwogICAgICAgcmV0dXJuOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICBjYXNlIE9uc2VhcmNoOgog
ICAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQogICAgICAgICAgICAgc2V0TGlzdGVuZXIo
ZXhlYyxzZWFyY2hFdmVudCx2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSNlbmRpZgogICAgIGNh
c2UgT25zZWxlY3Q6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQogICAgICAgICBzZXRM
aXN0ZW5lcihleGVjLHNlbGVjdEV2ZW50LHZhbHVlKTsKQEAgLTEyNDIsMTEgKzEyMDEsNyBAQCB2
b2lkIFdpbmRvdzo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgCiAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBOYW1lOgogICAgICAgaWYgKGlzU2FmZVNjcmlwdChleGVjKSkKLSNpZiBBUFBMRV9D
SEFOR0VTCiAgICAgICAgIG1fcGFydC0+c2V0TmFtZSggdmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnFz
dHJpbmcoKSApOwotI2Vsc2UKLSAgICAgICAgbV9wYXJ0LT5zZXROYW1lKCB2YWx1ZS0+dG9TdHJp
bmcoZXhlYykucXN0cmluZygpLmxvY2FsOEJpdCgpLmRhdGEoKSApOwotI2VuZGlmCiAgICAgICBy
ZXR1cm47CiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFrOwpAQCAtMTI3Nyw3ICsxMjMyLDYgQEAg
dm9pZCBXaW5kb3c6OmNsZWFyVGltZW91dChpbnQgdGltZXJJZCkKICAgd2lucS0+Y2xlYXJUaW1l
b3V0KHRpbWVySWQpOwogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogYm9vbCBXaW5kb3c6Omhhc1Rp
bWVvdXRzKCkKIHsKICAgICByZXR1cm4gd2lucS0+aGFzVGltZW91dHMoKTsKQEAgLTEyOTIsMTcg
KzEyNDYsMTIgQEAgdm9pZCBXaW5kb3c6OnJlc3VtZVRpbWVvdXRzKFFNYXA8aW50LCBTYwogewog
ICAgIHJldHVybiB3aW5xLT5yZXN1bWVUaW1lb3V0cyhzYSwga2V5KTsKIH0KLSNlbmRpZgogCiB2
b2lkIFdpbmRvdzo6c2NoZWR1bGVDbG9zZSgpCiB7CiAgIGtkRGVidWcoNjA3MCkgPDwgIldpbmRv
dzo6c2NoZWR1bGVDbG9zZSB3aW5kb3cuY2xvc2UoKSAiIDw8IG1fcGFydCA8PCBlbmRsOwogICBR
X0FTU0VSVCh3aW5xKTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgIEtXUShtX3BhcnQpLT5zY2hlZHVs
ZUNsb3NlKCk7Ci0jZWxzZQotICBRVGltZXI6OnNpbmdsZVNob3QoIDAsIHdpbnEsIFNMT1QoIHRp
bWVvdXRDbG9zZSgpICkgKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRMb2FkQXNF
bXB0eURvY3VtZW50KGNvbnN0IEtVUkwgJnVybCkKQEAgLTE0MjAsNyArMTM2OSw2IEBAIGJvb2wg
V2luZG93Ojppc1NhZmVTY3JpcHQoRXhlY1N0YXRlICpleGUKICAgaWYgKCBhY3REb21haW4gPT0g
dGhpc0RvbWFpbiApCiAgICAgcmV0dXJuIHRydWU7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgIGlm
IChJbnRlcnByZXRlcjo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpIHsKICAgICAgIHByaW50Zigi
VW5zYWZlIEphdmFTY3JpcHQgYXR0ZW1wdCB0byBhY2Nlc3MgZnJhbWUgd2l0aCBVUkwgJXMgZnJv
bSBmcmFtZSB3aXRoIFVSTCAlcy4gRG9tYWlucyBtdXN0IG1hdGNoLlxuIiwgCiAgICAgICAgICAg
ICAgdGhpc0RvY3VtZW50LT5VUkwoKS5sYXRpbjEoKSwgYWN0RG9jdW1lbnQtPlVSTCgpLmxhdGlu
MSgpKTsKQEAgLTE0MjksNyArMTM3Nyw2IEBAIGJvb2wgV2luZG93Ojppc1NhZmVTY3JpcHQoRXhl
Y1N0YXRlICpleGUKICAgbWVzc2FnZS5zcHJpbnRmKCJVbnNhZmUgSmF2YVNjcmlwdCBhdHRlbXB0
IHRvIGFjY2VzcyBmcmFtZSB3aXRoIFVSTCAlcyBmcm9tIGZyYW1lIHdpdGggVVJMICVzLiBEb21h
aW5zIG11c3QgbWF0Y2guXG4iLCAKICAgICAgICAgICAgICAgICAgIHRoaXNEb2N1bWVudC0+VVJM
KCkubGF0aW4xKCksIGFjdERvY3VtZW50LT5VUkwoKS5sYXRpbjEoKSk7CiAgIEtXUShtX3BhcnQp
LT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIDEsIFFTdHJpbmcoKSk7Ci0jZW5kaWYKICAg
CiAgIGtkV2FybmluZyg2MDcwKSA8PCAiSmF2YXNjcmlwdDogYWNjZXNzIGRlbmllZCBmb3IgY3Vy
cmVudCBmcmFtZSAnIiA8PCBhY3REb21haW4ucXN0cmluZygpIDw8ICInIHRvIGZyYW1lICciIDw8
IHRoaXNEb21haW4ucXN0cmluZygpIDw8ICInIiA8PCBlbmRsOwogICByZXR1cm4gZmFsc2U7CkBA
IC0xNTQwLDM5ICsxNDg3LDE3IEBAIFZhbHVlSW1wICpXaW5kb3dGdW5jOjpjYWxsQXNGdW5jdGlv
bihFeGUKICAgY2FzZSBXaW5kb3c6OkFsZXJ0OgogICAgIGlmIChwYXJ0ICYmIHBhcnQtPnhtbERv
Y0ltcGwoKSkKICAgICAgIHBhcnQtPnhtbERvY0ltcGwoKS0+dXBkYXRlUmVuZGVyaW5nKCk7Ci0j
aWYgQVBQTEVfQ0hBTkdFUwogICAgIEtXUShwYXJ0KS0+cnVuSmF2YVNjcmlwdEFsZXJ0KHN0cik7
Ci0jZWxzZQotICAgIEtNZXNzYWdlQm94OjplcnJvcih3aWRnZXQsIFFTdHlsZVNoZWV0Ojpjb252
ZXJ0RnJvbVBsYWluVGV4dChzdHIpLCAiSmF2YVNjcmlwdCIpOwotI2VuZGlmCiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogICBjYXNlIFdpbmRvdzo6Q29uZmlybToKICAgICBpZiAocGFydCAmJiBw
YXJ0LT54bWxEb2NJbXBsKCkpCiAgICAgICBwYXJ0LT54bWxEb2NJbXBsKCktPnVwZGF0ZVJlbmRl
cmluZygpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICByZXR1cm4gQm9vbGVhbihLV1EocGFydCkt
PnJ1bkphdmFTY3JpcHRDb25maXJtKHN0cikpOwotI2Vsc2UKLSAgICByZXR1cm4gQm9vbGVhbigo
S01lc3NhZ2VCb3g6Ondhcm5pbmdZZXNObyh3aWRnZXQsIFFTdHlsZVNoZWV0Ojpjb252ZXJ0RnJv
bVBsYWluVGV4dChzdHIpLCAiSmF2YVNjcmlwdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpMThuKCJPSyIpLCBpMThuKCJDYW5jZWwiKSkgPT0gS01l
c3NhZ2VCb3g6OlllcykpOwotI2VuZGlmCiAgIGNhc2UgV2luZG93OjpQcm9tcHQ6CiAgICAgaWYg
KHBhcnQgJiYgcGFydC0+eG1sRG9jSW1wbCgpKQogICAgICAgcGFydC0+eG1sRG9jSW1wbCgpLT51
cGRhdGVSZW5kZXJpbmcoKTsKICAgICBib29sIG9rOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICBv
ayA9IEtXUShwYXJ0KS0+cnVuSmF2YVNjcmlwdFByb21wdChzdHIsIGFyZ3Muc2l6ZSgpID49IDIg
PyBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkgOiBRU3RyaW5nOjpudWxsLCBzdHIy
KTsKLSNlbHNlCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID49IDIpCi0gICAgICBzdHIyID0gUUlucHV0
RGlhbG9nOjpnZXRUZXh0KGkxOG4oIktvbnF1ZXJvcjogUHJvbXB0IiksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFFTdHlsZVNoZWV0Ojpjb252ZXJ0RnJvbVBsYWluVGV4dChz
dHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRTGluZUVkaXQ6Ok5vcm1h
bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXS0+dG9TdHJpbmco
ZXhlYykucXN0cmluZygpLCAmb2spOwotICAgIGVsc2UKLSAgICAgIHN0cjIgPSBRSW5wdXREaWFs
b2c6OmdldFRleHQoaTE4bigiS29ucXVlcm9yOiBQcm9tcHQiKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUVN0eWxlU2hlZXQ6OmNvbnZlcnRGcm9tUGxhaW5UZXh0KHN0ciks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFMaW5lRWRpdDo6Tm9ybWFsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nOjpudWxsLCAmb2spOwot
I2VuZGlmCiAgICAgaWYgKCBvayApCiAgICAgICAgIHJldHVybiBTdHJpbmcoc3RyMik7CiAgICAg
ZWxzZQpAQCAtMTU4MSwzNSArMTUwNiwyMCBAQCBWYWx1ZUltcCAqV2luZG93RnVuYzo6Y2FsbEFz
RnVuY3Rpb24oRXhlCiAgIHsKICAgICBLQ29uZmlnICpjb25maWcgPSBuZXcgS0NvbmZpZygia29u
cXVlcm9ycmMiKTsKICAgICBjb25maWctPnNldEdyb3VwKCJKYXZhL0phdmFTY3JpcHQgU2V0dGlu
Z3MiKTsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIGludCBwb2xpY3kgPSBjb25maWctPnJlYWRV
bnNpZ25lZE51bUVudHJ5KCAiV2luZG93T3BlblBvbGljeSIsIDAgKTsgLy8gMD1hbGxvdywgMT1h
c2ssIDI9ZGVueSwgMz1zbWFydAotI2Vsc2UgICAgCiAgICAgaW50IHBvbGljeSA9IGNvbmZpZy0+
cmVhZFVuc2lnbmVkTnVtRW50cnkoIHBhcnQtPnNldHRpbmdzKCksICJXaW5kb3dPcGVuUG9saWN5
IiwgMCApOyAvLyAwPWFsbG93LCAxPWFzaywgMj1kZW55LCAzPXNtYXJ0Ci0jZW5kaWYKICAgICBk
ZWxldGUgY29uZmlnOwogICAgIGlmICggcG9saWN5ID09IDEgKSB7Ci0jaWYgIUFQUExFX0NIQU5H
RVMKLSAgICAgIGlmICggS01lc3NhZ2VCb3g6OnF1ZXN0aW9uWWVzTm8od2lkZ2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuKCAiVGhpcyBzaXRlIGlzIHRyeWlu
ZyB0byBvcGVuIHVwIGEgbmV3IGJyb3dzZXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAid2luZG93IHVzaW5nIEphdmFzY3JpcHQuXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEbyB5b3Ugd2FudCB0byBhbGxvdyB0
aGlzPyIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4biggIkNv
bmZpcm1hdGlvbjogSmF2YXNjcmlwdCBQb3B1cCIgKSApID09IEtNZXNzYWdlQm94OjpZZXMgKQot
I2VuZGlmCiAgICAgICAgIHBvbGljeSA9IDA7CiAgICAgfSBlbHNlIGlmICggcG9saWN5ID09IDMg
KSAvLyBzbWFydAogICAgIHsKICAgICAgIC8vIHdpbmRvdy5vcGVuIGRpc2FibGVkIHVubGVzcyBm
cm9tIGEga2V5L21vdXNlIGV2ZW50CiAgICAgICBpZiAoc3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJw
cmV0ZXIgKj4oZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkpLT53YXNSdW5CeVVzZXJHZXN0dXJl
KCkpCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICAgICAgcG9saWN5ID0gMDsKLSNlbHNlCiAgICAg
ICB7CiAgICAgICAgIHBvbGljeSA9IDA7CiAJTE9HKFBvcHVwQmxvY2tpbmcsICJBbGxvd2VkIEph
dmFTY3JpcHQgd2luZG93IG9wZW4gb2YgJXMiLCBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3Ry
aW5nKCkuYXNjaWkoKSk7CiAgICAgICB9IGVsc2UgewogCUxPRyhQb3B1cEJsb2NraW5nLCAiQmxv
Y2tlZCBKYXZhU2NyaXB0IHdpbmRvdyBvcGVuIG9mICVzIiwgYXJnc1swXS0+dG9TdHJpbmcoZXhl
YykucXN0cmluZygpLmFzY2lpKCkpOwogICAgICAgfQotI2VuZGlmCiAgICAgfQogCiAgICAgUVN0
cmluZyBmcmFtZU5hbWUgPSBhcmdzWzFdLT5pc1VuZGVmaW5lZE9yTnVsbCgpID8gUVN0cmluZygi
X2JsYW5rIikgOiBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7CkBAIC0xNjMxLDkg
KzE1NDEsNyBAQCBWYWx1ZUltcCAqV2luZG93RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlCiAgICAg
ICAgIHdpbmFyZ3MubWVudUJhclZpc2libGUgPSBmYWxzZTsKICAgICAgICAgd2luYXJncy50b29s
QmFyc1Zpc2libGUgPSBmYWxzZTsKICAgICAgICAgd2luYXJncy5zdGF0dXNCYXJWaXNpYmxlID0g
ZmFsc2U7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogCXdpbmFyZ3Muc2Nyb2xsYmFyc1Zpc2libGUgPSB0
cnVlOwotI2VuZGlmCiAgICAgICAgIFFTdHJpbmdMaXN0IGZsaXN0ID0gUVN0cmluZ0xpc3Q6OnNw
bGl0KCcsJywgZmVhdHVyZXMpOwogICAgICAgICBRU3RyaW5nTGlzdDo6Q29uc3RJdGVyYXRvciBp
dCA9IGZsaXN0LmJlZ2luKCk7CiAgICAgICAgIHdoaWxlIChpdCAhPSBmbGlzdC5lbmQoKSkgewpA
QCAtMTY1OSw5ICsxNTY3LDcgQEAgVmFsdWVJbXAgKldpbmRvd0Z1bmM6OmNhbGxBc0Z1bmN0aW9u
KEV4ZQogICAgICAgICAgICAgICAgIGlmIChkIDwgc2NyZWVuLngoKSB8fCBkID4gc2NyZWVuLnJp
Z2h0KCkpCiAJCSAgZCA9IHNjcmVlbi54KCk7IC8vIG9ubHkgc2FmZSBjaG9pY2UgdW50aWwgc2l6
ZSBpcyBkZXRlcm1pbmVkCiAgICAgICAgICAgICAgICAgd2luYXJncy54ID0gKGludClkOwotI2lm
IEFQUExFX0NIQU5HRVMKIAkgICAgICAgIHdpbmFyZ3MueFNldCA9IHRydWU7Ci0jZW5kaWYKICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gInRvcCIgfHwga2V5
ID09ICJzY3JlZW55IikgewogICAgICAgICAgICAgICBib29sIG9rOwpAQCAtMTY3MSw0MSArMTU3
NywyOSBAQCBWYWx1ZUltcCAqV2luZG93RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlCiAgICAgICAg
ICAgICAgICAgaWYgKGQgPCBzY3JlZW4ueSgpIHx8IGQgPiBzY3JlZW4uYm90dG9tKCkpCiAJCSAg
ZCA9IHNjcmVlbi55KCk7IC8vIG9ubHkgc2FmZSBjaG9pY2UgdW50aWwgc2l6ZSBpcyBkZXRlcm1p
bmVkCiAgICAgICAgICAgICAgICAgd2luYXJncy55ID0gKGludClkOwotI2lmIEFQUExFX0NIQU5H
RVMKIAkgICAgICAgIHdpbmFyZ3MueVNldCA9IHRydWU7Ci0jZW5kaWYKICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gImhlaWdodCIpIHsKICAgICAgICAgICAg
ICAgYm9vbCBvazsKICAgICAgICAgICAgICAgZG91YmxlIGQgPSB2YWwudG9Eb3VibGUoJm9rKTsK
ICAgICAgICAgICAgICAgaWYgKChkICE9IDAgfHwgb2spICYmICFpc25hbihkKSkgewotI2lmICFB
UFBMRV9DSEFOR0VTCi0gICAgICAgICAgICAgICAgZCArPSAyKnFBcHAtPnN0eWxlKCkucGl4ZWxN
ZXRyaWMoIFFTdHlsZTo6UE1fRGVmYXVsdEZyYW1lV2lkdGggKSArIDI7Ci0jZW5kaWYKIAkgICAg
ICAgIGlmIChkID4gc2NyZWVuLmhlaWdodCgpKSAgLy8gc2hvdWxkIGFjdHVhbGx5IGNoZWNrIHdv
cmtzcGFjZQogCQkgIGQgPSBzY3JlZW4uaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGQg
PCAxMDApCiAJCSAgZCA9IDEwMDsKICAgICAgICAgICAgICAgICB3aW5hcmdzLmhlaWdodCA9IChp
bnQpZDsKLSNpZiBBUFBMRV9DSEFOR0VTCiAJICAgICAgICB3aW5hcmdzLmhlaWdodFNldCA9IHRy
dWU7Ci0jZW5kaWYKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkg
PT0gIndpZHRoIikgewogICAgICAgICAgICAgICBib29sIG9rOwogICAgICAgICAgICAgICBkb3Vi
bGUgZCA9IHZhbC50b0RvdWJsZSgmb2spOwogICAgICAgICAgICAgICBpZiAoKGQgIT0gMCB8fCBv
aykgJiYgIWlzbmFuKGQpKSB7Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICAgICAgICAgICAgICBk
ICs9IDIqcUFwcC0+c3R5bGUoKS5waXhlbE1ldHJpYyggUVN0eWxlOjpQTV9EZWZhdWx0RnJhbWVX
aWR0aCApICsgMjsKLSNlbmRpZgogCSAgICAgICAgaWYgKGQgPiBzY3JlZW4ud2lkdGgoKSkgICAg
Ly8gc2hvdWxkIGFjdHVhbGx5IGNoZWNrIHdvcmtzcGFjZQogCQkgIGQgPSBzY3JlZW4ud2lkdGgo
KTsKICAgICAgICAgICAgICAgICBpZiAoZCA8IDEwMCkKIAkJICBkID0gMTAwOwogICAgICAgICAg
ICAgICAgIHdpbmFyZ3Mud2lkdGggPSAoaW50KWQ7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogCSAgICAg
ICAgd2luYXJncy53aWR0aFNldCA9IHRydWU7Ci0jZW5kaWYKICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgZ290byBib29sYXJnczsKQEAgLTE3Mjks
MTAgKzE2MjMsOCBAQCBWYWx1ZUltcCAqV2luZG93RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlCiAg
ICAgICAgICAgICB3aW5hcmdzLnJlc2l6YWJsZSA9ICh2YWwgPT0gIjEiIHx8IHZhbCA9PSAieWVz
Iik7CiAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJmdWxsc2NyZWVuIikKICAgICAgICAgICAg
IHdpbmFyZ3MuZnVsbHNjcmVlbiA9ICh2YWwgPT0gIjEiIHx8IHZhbCA9PSAieWVzIik7Ci0jaWYg
QVBQTEVfQ0hBTkdFUwogICAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAic2Nyb2xsYmFycyIpCiAg
ICAgICAgICAgICB3aW5hcmdzLnNjcm9sbGJhcnNWaXNpYmxlID0gISh2YWwgPT0gIjAiIHx8IHZh
bCA9PSAibm8iKTsKLSNlbmRpZgogICAgICAgICB9CiAgICAgICB9CiAKQEAgLTE3OTksNyArMTY5
MSw2IEBAIFZhbHVlSW1wICpXaW5kb3dGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGUKICAgICAgICAg
ICAgICAga2h0bWxwYXJ0LT54bWxEb2NJbXBsKCktPnNldEJhc2VVUkwoIG9sZERvYy0+YmFzZVVS
TCgpICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAg
ICAgIGlmICghdXJsLmlzRW1wdHkoKSkgewogICAgICAgICAgIGNvbnN0IFdpbmRvdyogd2luZG93
ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhraHRtbHBhcnQpOwogICAgICAgICAgIGlmICghdXJs
LnVybCgpLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8ICh3aW5kb3cgJiYgd2lu
ZG93LT5pc1NhZmVTY3JpcHQoZXhlYykpKSB7CkBAIC0xODA3LDI1ICsxNjk4LDE0IEBAIFZhbHVl
SW1wICpXaW5kb3dGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGUKICAgICAgICAgICAgIGtodG1scGFy
dC0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZSh1cmwudXJsKCksIGFjdGl2ZVBhcnQtPnJlZmVycmVy
KCksIGZhbHNlLCB1c2VyR2VzdHVyZSk7CiAgICAgICAgICAgfSAKIAl9Ci0jZWxzZQotICAgICAg
ICB1YXJncy5zZXJ2aWNlVHlwZSA9IFFTdHJpbmc6Om51bGw7Ci0gICAgICAgIGlmICh1YXJncy5m
cmFtZU5hbWUgPT0gIl9ibGFuayIpCi0gICAgICAgICAgdWFyZ3MuZnJhbWVOYW1lID0gUVN0cmlu
Zzo6bnVsbDsKLSAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgdWFyZ3Mu
bWV0YURhdGEoKVsicmVmZXJyZXIiXSA9IGFjdGl2ZVBhcnQtPnJlZmVycmVyKCk7Ci0gICAgICAg
ICAgZW1pdCBraHRtbHBhcnQtPmJyb3dzZXJFeHRlbnNpb24oKS0+b3BlblVSTFJlcXVlc3QodXJs
LHVhcmdzKTsKLSAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIHJldHVybiBXaW5kb3c6OnJldHJp
ZXZlKGtodG1scGFydCk7IC8vIGdsb2JhbCBvYmplY3QKICAgICAgIH0gZWxzZQogICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgfQogICB9Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICBjYXNl
IFdpbmRvdzo6UHJpbnQ6CiAgICAgcGFydC0+cHJpbnQoKTsKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Ci0jZW5kaWYKICAgY2FzZSBXaW5kb3c6OlNjcm9sbEJ5OgogICAgIHdpbmRvdy0+dXBkYXRl
TGF5b3V0KCk7CiAgICAgaWYoYXJncy5zaXplKCkgPj0gMiAmJiB3aWRnZXQpCkBAIC0xOTU2LDEx
ICsxODM2LDcgQEAgVmFsdWVJbXAgKldpbmRvd0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZQogICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIHdpbmRvdy0+c2VsZWN0aW9uKCk7
CiAgIGNhc2UgV2luZG93OjpCbHVyOgotI2lmIEFQUExFX0NIQU5HRVMKICAgICBLV1EocGFydCkt
PnVuZm9jdXNXaW5kb3coKTsKLSNlbHNlCi0gICAgLy8gVE9ETwotI2VuZGlmCiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogICBjYXNlIFdpbmRvdzo6Q2xvc2U6CiAgICAgLyogRnJvbSBodHRwOi8v
ZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21hbnVhbHMvanMvY2xpZW50L2pzcmVmL3dpbmRv
dy5odG0gOgpAQCAtMTk3OSwxMSArMTg1NSw3IEBAIFZhbHVlSW1wICpXaW5kb3dGdW5jOjpjYWxs
QXNGdW5jdGlvbihFeGUKICAgICAgIC8vIGhhcyBtb3JlIHRoYW4gb25lIGVudHJ5IGluIHRoZSBo
aXN0b3J5IChOUyBkb2VzIHRoYXQgdG9vKS4KICAgICAgIEhpc3RvcnkgaGlzdG9yeShleGVjLHBh
cnQpOwogICAgICAgaWYgKCBoaXN0b3J5LmdldCggZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lICkt
PnRvSW50MzIoZXhlYykgPD0gMQotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgLy8gRklY
TUU6IEhvdyBhcmUgd2UgZ29pbmcgdG8gaGFuZGxlIHRoaXM/Ci0jZWxzZQotICAgICAgICAgICB8
fCBLTWVzc2FnZUJveDo6cXVlc3Rpb25ZZXNObyggd2luZG93LT5wYXJ0KCktPnZpZXcoKSwgaTE4
bigiQ2xvc2Ugd2luZG93PyIpLCBpMThuKCJDb25maXJtYXRpb24gUmVxdWlyZWQiKSApID09IEtN
ZXNzYWdlQm94OjpZZXMKLSNlbmRpZgogICAgICAgICAgICApCiAgICAgICAgIChjb25zdF9jYXN0
PFdpbmRvdyo+KHdpbmRvdykpLT5zY2hlZHVsZUNsb3NlKCk7CiAgICAgfQpAQCAtMjIxNCwxMiAr
MjA4NiwxMCBAQCB2b2lkIFdpbmRvd1FPYmplY3Q6OnRpbWVvdXRDbG9zZSgpCiAgIH0KIH0KIAot
I2lmIEFQUExFX0NIQU5HRVMKIGJvb2wgV2luZG93UU9iamVjdDo6aGFzVGltZW91dHMoKQogewog
ICAgIHJldHVybiBzY2hlZHVsZWRBY3Rpb25zLmNvdW50KCk7CiB9Ci0jZW5kaWYKIAogCiBjb25z
dCBDbGFzc0luZm8gRnJhbWVBcnJheTo6aW5mbyA9IHsgIkZyYW1lQXJyYXkiLCAwLCAmRnJhbWVB
cnJheVRhYmxlLCAwIH07CkBAIC0yNDQwLDEyICsyMzEwLDggQEAgdm9pZCBMb2NhdGlvbjo6cHV0
KEV4ZWNTdGF0ZSAqZXhlYywgY29ucwogICBLSFRNTFBhcnQqIGFjdGl2ZVBhcnQgPSBXaW5kb3c6
OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5wYXJ0KCk7CiAgIGlmICghdXJsLnVybCgpLnN0YXJ0c1dp
dGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8ICh3aW5kb3cgJiYgd2luZG93LT5pc1NhZmVTY3Jp
cHQoZXhlYykpKSB7CiAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHN0YXRpY19jYXN0PFNjcmlwdElu
dGVycHJldGVyICo+KGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpKS0+d2FzUnVuQnlVc2VyR2Vz
dHVyZSgpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3Rvcnkg
aXRlbSBpZiB0aGlzIEpTIHdhcyBjYWxsZWQgdmlhIGEgdXNlciBnZXN0dXJlCiAgICAgbV9wYXJ0
LT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKHVybC51cmwoKSwgYWN0aXZlUGFydC0+cmVmZXJyZXIo
KSwgIXVzZXJHZXN0dXJlLCB1c2VyR2VzdHVyZSk7Ci0jZWxzZQotICAgIG1fcGFydC0+c2NoZWR1
bGVMb2NhdGlvbkNoYW5nZSh1cmwudXJsKCksIGFjdGl2ZVBhcnQtPnJlZmVycmVyKCksIGZhbHNl
IC8qZG9uJ3QgbG9jayBoaXN0b3J5Ki8sIHVzZXJHZXN0dXJlKTsKLSNlbmRpZgogICB9CiB9CiAK
QEAgLTI1MDYsMTIgKzIzNzIsOCBAQCBWYWx1ZUltcCAqTG9jYXRpb25GdW5jOjpjYWxsQXNGdW5j
dGlvbihFCiAgICAgICAgICAgICBRU3RyaW5nIGRzdFVybCA9IHAtPnhtbERvY0ltcGwoKS0+Y29t
cGxldGVVUkwoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKICAgICAgICAgICAg
IGlmICghZHN0VXJsLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8ICh3aW5kb3cg
JiYgd2luZG93LT5pc1NhZmVTY3JpcHQoZXhlYykpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCB1
c2VyR2VzdHVyZSA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMtPmR5bmFt
aWNJbnRlcnByZXRlcigpKS0+d2FzUnVuQnlVc2VyR2VzdHVyZSgpOwotI2lmIEFQUExFX0NIQU5H
RVMKICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0aGlz
IEpTIHdhcyBjYWxsZWQgdmlhIGEgdXNlciBnZXN0dXJlCiAgICAgICAgICAgICAgICAgcGFydC0+
c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShkc3RVcmwsIHAtPnJlZmVycmVyKCksICF1c2VyR2VzdHVy
ZSwgdXNlckdlc3R1cmUpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBwYXJ0LT5zY2hlZHVsZUxv
Y2F0aW9uQ2hhbmdlKGRzdFVybCwgcC0+cmVmZXJyZXIoKSwgZmFsc2UgLypkb24ndCBsb2NrIGhp
c3RvcnkqLywgdXNlckdlc3R1cmUpOwotI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CkBAIC0yNzA1LDcgKzI1NjcsNiBAQCBWYWx1ZUltcCAqQmFySW5mbzo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjCiB7CiAgICAgYXNzZXJ0KHRva2VuID09IFZpc2libGUpOwog
ICAgIHN3aXRjaCAobV90eXBlKSB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIGNhc2UgTG9jYXRp
b25iYXI6CiAgICAgICAgIHJldHVybiBCb29sZWFuKEtXUShtX3BhcnQpLT5sb2NhdGlvbmJhclZp
c2libGUoKSk7CiAgICAgY2FzZSBNZW51YmFyOiAKQEAgLTI3MTgsNyArMjU3OSw2IEBAIFZhbHVl
SW1wICpCYXJJbmZvOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWMKICAgICAgICAgcmV0dXJuIEJvb2xl
YW4oS1dRKG1fcGFydCktPnN0YXR1c2JhclZpc2libGUoKSk7CiAgICAgY2FzZSBUb29sYmFyOgog
ICAgICAgICByZXR1cm4gQm9vbGVhbihLV1EobV9wYXJ0KS0+dG9vbGJhclZpc2libGUoKSk7Ci0j
ZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gQm9vbGVhbihmYWxzZSk7CiAgICAg
fQpJbmRleDogZWNtYS9ranNfd2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NTYKZGlmZiAtcCAtdSAtcjEuNTYgZWNtYS9ranNfd2luZG93LmgKLS0tIGVjbWEva2pzX3dpbmRv
dy5oCTkgTm92IDIwMDUgMDI6NDY6MjcgLTAwMDAJMS41NgorKysgZWNtYS9ranNfd2luZG93LmgJ
MTEgTm92IDIwMDUgMTk6MzQ6MDMgLTAwMDAKQEAgLTEwMSw3ICsxMDEsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoY29uc3QgVVN0cmluZyAmaGFuZGxlciwgaW50
IHQsIGJvb2wgc2luZ2xlU2hvdCk7CiAgICAgaW50IGluc3RhbGxUaW1lb3V0KFZhbHVlSW1wICpm
dW5jdGlvbiwgTGlzdCAmYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7CiAgICAgdm9pZCBj
bGVhclRpbWVvdXQoaW50IHRpbWVySWQpOwotI2lmZGVmIEFQUExFX0NIQU5HRVMKKyNpZmRlZiAx
CiAgICAgYm9vbCBoYXNUaW1lb3V0cygpOwogICAgIFFNYXA8aW50LCBTY2hlZHVsZWRBY3Rpb24q
PiAqcGF1c2VUaW1lb3V0cyhjb25zdCB2b2lkICprZXkpOwogICAgIHZvaWQgcmVzdW1lVGltZW91
dHMoUU1hcDxpbnQsIFNjaGVkdWxlZEFjdGlvbio+KnNhLCBjb25zdCB2b2lkICprZXkpOwpAQCAt
MjA3LDcgKzIwNyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGludCBpbnN0YWxsVGltZW91dChj
b25zdCBVU3RyaW5nICZoYW5kbGVyLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKICAgICBpbnQg
aW5zdGFsbFRpbWVvdXQoVmFsdWVJbXAgKmZ1bmMsIExpc3QgYXJncywgaW50IHQsIGJvb2wgc2lu
Z2xlU2hvdCk7CiAgICAgdm9pZCBjbGVhclRpbWVvdXQoaW50IHRpbWVySWQsIGJvb2wgZGVsQWN0
aW9uID0gdHJ1ZSk7Ci0jaWZkZWYgQVBQTEVfQ0hBTkdFUworI2lmZGVmIDEKICAgICBib29sIGhh
c1RpbWVvdXRzKCk7CiAgICAgUU1hcDxpbnQsIFNjaGVkdWxlZEFjdGlvbio+ICpXaW5kb3dRT2Jq
ZWN0OjpwYXVzZVRpbWVvdXRzKGNvbnN0IHZvaWQgKmtleSk7CiAgICAgdm9pZCBXaW5kb3dRT2Jq
ZWN0OjpyZXN1bWVUaW1lb3V0cyhRTWFwPGludCwgU2NoZWR1bGVkQWN0aW9uKj4gKnNhLCBjb25z
dCB2b2lkICprZXkpOwpJbmRleDogZWNtYS94bWxodHRwcmVxdWVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQKZGlmZiAtcCAtdSAtcjEuNDQgZWNtYS94bWxodHRw
cmVxdWVzdC5jcHAKLS0tIGVjbWEveG1saHR0cHJlcXVlc3QuY3BwCTI3IE9jdCAyMDA1IDIzOjE1
OjAwIC0wMDAwCTEuNDQKKysrIGVjbWEveG1saHR0cHJlcXVlc3QuY3BwCTExIE5vdiAyMDA1IDE5
OjM0OjAzIC0wMDAwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8cW9iamVjdC5oPgogI2lu
Y2x1ZGUgPHFyZWdleHAuaD4KIAotI2lmZGVmIEFQUExFX0NIQU5HRVMKKyNpZmRlZiAxCiAjaW5j
bHVkZSAiS1dRTG9hZGVyLmgiCiAjZW5kaWYKIApAQCAtNzQsMTcgKzc0LDEwIEBAIFhNTEh0dHBS
ZXF1ZXN0UU9iamVjdDo6WE1MSHR0cFJlcXVlc3RRT2IKICAganNPYmplY3QgPSBfanNPYmplY3Q7
IAogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogdm9pZCBYTUxIdHRwUmVxdWVzdFFPYmplY3Q6OnNs
b3REYXRhKCBLSU86OkpvYiogam9iLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgc2l6ZSApCiB7CiAg
IGpzT2JqZWN0LT5zbG90RGF0YShqb2IsIGRhdGEsIHNpemUpOwogfQotI2Vsc2UKLXZvaWQgWE1M
SHR0cFJlcXVlc3RRT2JqZWN0OjpzbG90RGF0YSggS0lPOjpKb2IqIGpvYiwgY29uc3QgUUJ5dGVB
cnJheSAmZGF0YSApCi17Ci0gIGpzT2JqZWN0LT5zbG90RGF0YShqb2IsIGRhdGEpOwotfQotI2Vu
ZGlmCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3RRT2JqZWN0OjpzbG90RmluaXNoZWQoIEtJTzo6Sm9i
KiBqb2IgKQogewpAQCAtMzQwLDExICszMzMsNiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5k
KGNvbnN0IFFTdHJpbmcmCiAKICAgYWJvcnRlZCA9IGZhbHNlOwogCi0jaWYgIUFQUExFX0NIQU5H
RVMKLSAgaWYgKCFhc3luYykgewotICAgIHJldHVybjsKLSAgfQotI2VuZGlmCiAKICAgaWYgKG1l
dGhvZC5sb3dlcigpID09ICJwb3N0IiAmJiAodXJsLnByb3RvY29sKCkubG93ZXIoKSA9PSAiaHR0
cCIgfHwgdXJsLnByb3RvY29sKCkubG93ZXIoKSA9PSAiaHR0cHMiKSApIHsKICAgICAgIC8vIEZJ
WE1FOiBkZXRlcm1pbmUgcG9zdCBlbmNvZGluZyBjb3JyZWN0bHkgYnkgbG9va2luZyBpbiBoZWFk
ZXJzIGZvciBjaGFyc2V0CkBAIC0zNTgsNyArMzQ2LDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
c2VuZChjb25zdCBRU3RyaW5nJgogICAgIGpvYi0+YWRkTWV0YURhdGEoImN1c3RvbUhUVFBIZWFk
ZXIiLCByZXF1ZXN0SGVhZGVycyk7CiAgIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKICAgaWYgKCFh
c3luYykgewogICAgIFFCeXRlQXJyYXkgZGF0YTsKICAgICBLVVJMIGZpbmFsVVJMOwpAQCAtMzcw
LDcgKzM1Nyw2IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29uc3QgUVN0cmluZyYKICAg
ICAKICAgICByZXR1cm47CiAgIH0KLSNlbmRpZgogCiAgIHsKICAgICBJbnRlcnByZXRlckxvY2sg
bG9jazsKQEAgLTM3OSwxOSArMzY1LDE0IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29u
c3QgUVN0cmluZyYKICAgCiAgIHFPYmplY3QtPmNvbm5lY3QoIGpvYiwgU0lHTkFMKCByZXN1bHQo
IEtJTzo6Sm9iKiApICksCiAJCSAgICBTTE9UKCBzbG90RmluaXNoZWQoIEtJTzo6Sm9iKiApICkg
KTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgIHFPYmplY3QtPmNvbm5lY3QoIGpvYiwgU0lHTkFMKCBk
YXRhKCBLSU86OkpvYiosIGNvbnN0IGNoYXIqLCBpbnQgKSApLAogCQkgICAgU0xPVCggc2xvdERh
dGEoIEtJTzo6Sm9iKiwgY29uc3QgY2hhciosIGludCApICkgKTsKLSNlbHNlCi0gIHFPYmplY3Qt
PmNvbm5lY3QoIGpvYiwgU0lHTkFMKCBkYXRhKCBLSU86OkpvYiosIGNvbnN0IFFCeXRlQXJyYXkm
ICkgKSwKLQkJICAgIFNMT1QoIHNsb3REYXRhKCBLSU86OkpvYiosIGNvbnN0IFFCeXRlQXJyYXkm
ICkgKSApOwotI2VuZGlmCiAgIHFPYmplY3QtPmNvbm5lY3QoIGpvYiwgU0lHTkFMKHJlZGlyZWN0
aW9uKEtJTzo6Sm9iKiwgY29uc3QgS1VSTCYgKSApLAogCQkgICAgU0xPVCggc2xvdFJlZGlyZWN0
aW9uKEtJTzo6Sm9iKiwgY29uc3QgS1VSTCYpICkgKTsKIAogICBhZGRUb1JlcXVlc3RzQnlEb2N1
bWVudCgpOwogCi0jaWZkZWYgQVBQTEVfQ0hBTkdFUworI2lmZGVmIDEKICAgS1dRU2VydmVSZXF1
ZXN0KGtodG1sOjpDYWNoZTo6bG9hZGVyKCksIGRvYy0+ZG9jTG9hZGVyKCksIGpvYik7CiAjZWxz
ZSAKICAgS0lPOjpTY2hlZHVsZXI6OnNjaGVkdWxlSm9iKCBqb2IgKTsKQEAgLTUxOCw3ICs0OTks
NiBAQCBWYWx1ZUltcCAqWE1MSHR0cFJlcXVlc3Q6OmdldFN0YXR1c1RleHQoCiAgIHJldHVybiBT
dHJpbmcoc3RhdHVzVGV4dCk7CiB9CiAKLSNpZiBBUFBMRV9DSEFOR0VTICAgCiB2b2lkIFhNTEh0
dHBSZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRzKGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEs
IGNvbnN0IEtVUkwgJmZpbmFsVVJMLCBjb25zdCBRU3RyaW5nICZoZWFkZXJzKQogewogICBpZiAo
IXVybE1hdGNoZXNEb2N1bWVudERvbWFpbihmaW5hbFVSTCkpIHsKQEAgLTU0Myw3ICs1MjMsNiBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1CiAKICAgc2xvdEZpbmlz
aGVkKDApOwogfQotI2VuZGlmCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNsb3RGaW5pc2hlZChL
SU86OkpvYiAqKQogewpAQCAtNTcyLDExICs1NTEsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpz
bG90UmVkaXJlY3Rpb24oS0lPCiAgIH0KIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OnNsb3REYXRhKCBLSU86OkpvYiosIGNvbnN0IGNoYXIgKmRhdGEsIGludCBs
ZW4gKQotI2Vsc2UKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNsb3REYXRhKEtJTzo6Sm9iKiwgY29u
c3QgUUJ5dGVBcnJheSAmX2RhdGEpCi0jZW5kaWYKIHsKICAgaWYgKHN0YXRlIDwgTG9hZGVkKSB7
CiAgICAgcmVzcG9uc2VIZWFkZXJzID0gam9iLT5xdWVyeU1ldGFEYXRhKCJIVFRQLUhlYWRlcnMi
KTsKQEAgLTU4NCwxMCArNTU5LDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2xvdERhdGEoS0lP
OjpKb2IqLAogICAgIGNoYW5nZVN0YXRlKExvYWRlZCk7CiAgIH0KICAgCi0jaWYgIUFQUExFX0NI
QU5HRVMKLSAgY29uc3QgY2hhciAqZGF0YSA9IChjb25zdCBjaGFyICopX2RhdGEuZGF0YSgpOwot
ICBpbnQgbGVuID0gKGludClfZGF0YS5zaXplKCk7Ci0jZW5kaWYKIAogICBpZiAoIGRlY29kZXIg
PT0gTlVMTCApIHsKICAgICBkZWNvZGVyID0gbmV3IERlY29kZXI7CkluZGV4OiBlY21hL3htbGh0
dHByZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWNtYS94bWxodHRwcmVxdWVzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXAg
LXUgLXIxLjIwIGVjbWEveG1saHR0cHJlcXVlc3QuaAotLS0gZWNtYS94bWxodHRwcmVxdWVzdC5o
CTI3IFNlcCAyMDA1IDIyOjM3OjA1IC0wMDAwCTEuMjAKKysrIGVjbWEveG1saHR0cHJlcXVlc3Qu
aAkxMSBOb3YgMjAwNSAxOTozNDowMyAtMDAwMApAQCAtOTAsMTcgKzkwLDExIEBAIG5hbWVzcGFj
ZSBLSlMgewogCiAgICAgWE1MSHR0cFJlcXVlc3RRT2JqZWN0ICpxT2JqZWN0OwogCi0jaWYgQVBQ
TEVfQ0hBTkdFUwogICAgIHZvaWQgc2xvdERhdGEoIEtJTzo6Sm9iKiBqb2IsIGNvbnN0IGNoYXIg
KmRhdGEsIGludCBzaXplICk7Ci0jZWxzZQotICAgIHZvaWQgc2xvdERhdGEoIEtJTzo6Sm9iKiBq
b2IsIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEgKTsKLSNlbmRpZgogICAgIHZvaWQgc2xvdEZpbmlz
aGVkKCBLSU86OkpvYiogKTsKICAgICB2b2lkIHNsb3RSZWRpcmVjdGlvbiggS0lPOjpKb2IqLCBj
b25zdCBLVVJMJiApOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIHZvaWQgcHJvY2Vzc1N5bmNM
b2FkUmVzdWx0cyhjb25zdCBRQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBLVVJMICZmaW5hbFVSTCwg
Y29uc3QgUVN0cmluZyAmaGVhZGVycyk7Ci0jZW5kaWYKIAogICAgIHZvaWQgb3Blbihjb25zdCBR
U3RyaW5nJiBfbWV0aG9kLCBjb25zdCBLVVJMJiBfdXJsLCBib29sIF9hc3luYyk7CiAgICAgdm9p
ZCBzZW5kKGNvbnN0IFFTdHJpbmcmIF9ib2R5KTsKQEAgLTE0OSwxMSArMTQzLDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgWE1MSHR0cFJlcXVlc3RRT2JqZWN0KFhNTEh0dHBSZXF1ZXN0ICpfanNP
YmplY3QpOwogCiAgIHB1YmxpYyBzbG90czoKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgdm9pZCBz
bG90RGF0YSggS0lPOjpKb2IqIGpvYiwgY29uc3QgY2hhciAqZGF0YSwgaW50IHNpemUgKTsKLSNl
bHNlCi0gICAgdm9pZCBzbG90RGF0YSggS0lPOjpKb2IqIGpvYiwgY29uc3QgUUJ5dGVBcnJheSAm
ZGF0YSApOwotI2VuZGlmCiAgICAgdm9pZCBzbG90RmluaXNoZWQoIEtJTzo6Sm9iKiBqb2IgKTsK
ICAgICB2b2lkIHNsb3RSZWRpcmVjdGlvbiggS0lPOjpKb2IqIGpvYiwgY29uc3QgS1VSTCYgdXJs
KTsKIApJbmRleDogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xs
ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwMQpkaWZmIC1wIC11IC1yMS4xMDEgZWRp
dGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAotLS0gZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcAk4IE5vdiAyMDA1IDA4OjEwOjU1IC0wMDAwCTEuMTAxCisrKyBlZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwCTExIE5vdiAyMDA1IDE5OjM0OjAzIC0wMDAwCkBAIC00NSwxMSAr
NDUsNyBAQAogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9t
Ml9yYW5nZWltcGwuaCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxreG1sY29yZS9B
c3NlcnRpb25zLmg+Ci0jZWxzZQotI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNz
ZXJ0aW9uKQotI2VuZGlmCiAKICNkZWZpbmUgRURJVF9ERUJVRyAwCiAKQEAgLTEwNzAsNDEgKzEw
NjYsNiBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmRlYnVnUG9zaXRpb24oCiAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIp
OwogICAgIH0KICAgICAgICAgICAKLSNpZiAwCi0gICAgaW50IGJhY2sgPSAwOwotICAgIHIgPSBt
X3N0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnRl
eHQ7IGkrKywgYmFjaysrKSB7Ci0gICAgICAgIGlmIChyLT5wcmV2aW91c1JlbmRlcmVyKCkpCi0g
ICAgICAgICAgICByID0gci0+cHJldmlvdXNSZW5kZXJlcigpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiYWNrOyBpKysp
IHsKLSAgICAgICAgZGVidWdSZW5kZXJlcihyLCBmYWxzZSk7Ci0gICAgICAgIHIgPSByLT5uZXh0
UmVuZGVyZXIoKTsKLSAgICB9Ci0KLQotICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQotICAg
IGlmIChtX3N0YXJ0Lm5vZGUoKSA9PSBtX2VuZC5ub2RlKCkpCi0gICAgICAgIGRlYnVnUmVuZGVy
ZXIobV9zdGFydC5ub2RlKCktPnJlbmRlcmVyKCksIHRydWUpOwotICAgIGVsc2UKLSAgICAgICAg
Zm9yIChyID0gbV9zdGFydC5ub2RlKCktPnJlbmRlcmVyKCk7IHIgJiYgciAhPSBtX2VuZC5ub2Rl
KCktPnJlbmRlcmVyKCk7IHIgPSByLT5uZXh0UmVuZGVyZXIoKSkKLSAgICAgICAgICAgIGRlYnVn
UmVuZGVyZXIociwgdHJ1ZSk7Ci0gICAgCi0gICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwotICAg
IAotICAgIHIgPSBtX2VuZC5ub2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb250ZXh0OyBpKyspIHsKLSAgICAgICAgaWYgKHItPm5leHRSZW5kZXJlcigpKSB7Ci0g
ICAgICAgICAgICByID0gci0+bmV4dFJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBkZWJ1Z1JlbmRl
cmVyKHIsIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBicmVh
azsKLSAgICB9Ci0jZW5kaWYKIAogICAgIGZwcmludGYoc3RkZXJyLCAiPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT1cbiIpOwogfQpJbmRleDogZWRpdGluZy9hcHBlbmRfbm9kZV9jb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0
aW5nL2FwcGVuZF9ub2RlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlm
ZiAtcCAtdSAtcjEuMyBlZGl0aW5nL2FwcGVuZF9ub2RlX2NvbW1hbmQuY3BwCi0tLSBlZGl0aW5n
L2FwcGVuZF9ub2RlX2NvbW1hbmQuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MTggLTAwMDAJMS4zCisr
KyBlZGl0aW5nL2FwcGVuZF9ub2RlX2NvbW1hbmQuY3BwCTExIE5vdiAyMDA1IDE5OjM0OjAzIC0w
MDAwCkBAIC0yOCwxMSArMjgsNyBAQAogCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgog
Ci0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KLSNl
bHNlCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCi0jZW5kaWYK
IAogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwpJbmRleDog
ZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYgLXAgLXUgLXIxLjE3IGVkaXRpbmcvYXBwbHlfc3R5
bGVfY29tbWFuZC5jcHAKLS0tIGVkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAJNyBOb3Yg
MjAwNSAxOTo1OToyMiAtMDAwMAkxLjE3CisrKyBlZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQu
Y3BwCTExIE5vdiAyMDA1IDE5OjM0OjAzIC0wMDAwCkBAIC00MSwxMSArNDEsNyBAQAogI2luY2x1
ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIK
IAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+Ci0j
ZWxzZQotI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQotI2VuZGlm
CiAKIHVzaW5nIG5hbWVzcGFjZSBET006OkhUTUxOYW1lczsKIApJbmRleDogZWRpdGluZy9icmVh
a19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC1wIC11IC1yMS4xMCBlZGl0aW5nL2JyZWFrX2Jsb2Nr
cXVvdGVfY29tbWFuZC5jcHAKLS0tIGVkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNw
cAkzIE5vdiAyMDA1IDAyOjIwOjE1IC0wMDAwCTEuMTAKKysrIGVkaXRpbmcvYnJlYWtfYmxvY2tx
dW90ZV9jb21tYW5kLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowMyAtMDAwMApAQCAtMzMsMTEgKzMz
LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV90ZXh0aW1wbC5oIgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPGt4bWxjb3JlL0Fz
c2VydGlvbnMuaD4KLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3Nl
cnRpb24pCi0jZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIERPTTo6SFRNTE5hbWVzOwogCkluZGV4
OiBlZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcKZGlmZiAtcCAtdSAtcjEuMTcgZWRpdGluZy9j
b21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAotLS0gZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21t
YW5kLmNwcAk5IE5vdiAyMDA1IDE5OjU2OjQ3IC0wMDAwCTEuMTcKKysrIGVkaXRpbmcvY29tcG9z
aXRlX2VkaXRfY29tbWFuZC5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MDMgLTAwMDAKQEAgLTUyLDEx
ICs1Miw3IEBACiAjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBsLmgiCiAjaW5jbHVkZSAieG1s
L2RvbV90ZXh0aW1wbC5oIgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPGt4bWxjb3Jl
L0Fzc2VydGlvbnMuaD4KLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChh
c3NlcnRpb24pCi0jZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIERPTTo6SFRNTE5hbWVzOwogCklu
ZGV4OiBlZGl0aW5nL2RlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9mcm9tX3Rl
eHRfbm9kZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUg
LXIxLjQgZWRpdGluZy9kZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZC5jcHAKLS0tIGVkaXRp
bmcvZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MTgg
LTAwMDAJMS40CisrKyBlZGl0aW5nL2RlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5kLmNwcAkx
MSBOb3YgMjAwNSAxOTozNDowMyAtMDAwMApAQCAtMjgsMTEgKzI4LDcgQEAKIAogI2luY2x1ZGUg
InhtbC9kb21fdGV4dGltcGwuaCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxreG1s
Y29yZS9Bc3NlcnRpb25zLmg+Ci0jZWxzZQotI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3Nl
cnQoYXNzZXJ0aW9uKQotI2VuZGlmCiAKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwogdXNpbmcg
RE9NOjpUZXh0SW1wbDsKSW5kZXg6IGVkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2Rl
bGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlm
ZiAtcCAtdSAtcjEuMjEgZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBl
ZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJNyBOb3YgMjAwNSAxOTo1OToyMiAt
MDAwMAkxLjIxCisrKyBlZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMTEgTm92
IDIwMDUgMTk6MzQ6MDQgLTAwMDAKQEAgLTM5LDEzICszOSw4IEBACiAjaW5jbHVkZSAieG1sL2Rv
bV90ZXh0aW1wbC5oIgogCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSA8a3htbGNvcmUv
QXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktXUUxvZ2dpbmcuaCIKLSNlbHNlCi0jZGVmaW5lIEFT
U0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCi0jZGVmaW5lIExPRyhjaGFubmVsLCBm
b3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKLSNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgRE9N
OjpIVE1MTmFtZXM7CiAKSW5kZXg6IGVkaXRpbmcvZWRpdF9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2VkaXRfY29tbWFuZC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC1wIC11IC1yMS45IGVkaXRpbmcvZWRp
dF9jb21tYW5kLmNwcAotLS0gZWRpdGluZy9lZGl0X2NvbW1hbmQuY3BwCTMgT2N0IDIwMDUgMjE6
MTI6MTkgLTAwMDAJMS45CisrKyBlZGl0aW5nL2VkaXRfY29tbWFuZC5jcHAJMTEgTm92IDIwMDUg
MTk6MzQ6MDQgLTAwMDAKQEAgLTM0LDExICszNCw3IEBACiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1
ZWltcGwuaCIKICNpbmNsdWRlICJjc3MvY3NzX2NvbXB1dGVkc3R5bGUuaCIKIAotI2lmIEFQUExF
X0NIQU5HRVMKICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+Ci0jZWxzZQotI2RlZmlu
ZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQotI2VuZGlmCiAKIHVzaW5nIERP
TTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKSW5kZXg6IGVkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI2MQpkaWZm
IC1wIC11IC1yMS4yNjEgZWRpdGluZy9odG1sZWRpdGluZy5jcHAKLS0tIGVkaXRpbmcvaHRtbGVk
aXRpbmcuY3BwCTkgTm92IDIwMDUgMTk6NTY6NDcgLTAwMDAJMS4yNjEKKysrIGVkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwCTExIE5vdiAyMDA1IDE5OjM0OjA0IC0wMDAwCkBAIC04NCwxOSArODQsMTAg
QEAgdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwogdXNpbmcgRE9N
OjpUcmVlV2Fsa2VySW1wbDsKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxreG1sY29y
ZS9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSAiS1dRTG9nZ2luZy5oIgogI2luY2x1ZGUgIktXUUtI
VE1MUGFydC5oIgogI2luY2x1ZGUgIktXUVJlZ0V4cC5oIgotI2Vsc2UKLSNkZWZpbmUgQVNTRVJU
KGFzc2VydGlvbikgKCh2b2lkKTApCi0jZGVmaW5lIEFTU0VSVF9XSVRIX01FU1NBR0UoYXNzZXJ0
aW9uLCBmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKLSNkZWZpbmUgQVNTRVJUX05PVF9SRUFD
SEVEKCkgKCh2b2lkKTApCi0jZGVmaW5lIExPRyhjaGFubmVsLCBmb3JtYXRBbmRBcmdzLi4uKSAo
KHZvaWQpMCkKLSNkZWZpbmUgRVJST1IoZm9ybWF0QW5kQXJncy4uLikgKCh2b2lkKTApCi0jZGVm
aW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCi0jZW5kaWYKIAogbmFtZXNw
YWNlIGtodG1sIHsKIApJbmRleDogZWRpdGluZy9pbnNlcnRfaW50b190ZXh0X25vZGVfY29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGlu
Zy9pbnNlcnRfaW50b190ZXh0X25vZGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNApkaWZmIC1wIC11IC1yMS40IGVkaXRpbmcvaW5zZXJ0X2ludG9fdGV4dF9ub2RlX2NvbW1h
bmQuY3BwCi0tLSBlZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmNwcAkzIE9j
dCAyMDA1IDIxOjEyOjE5IC0wMDAwCTEuNAorKysgZWRpdGluZy9pbnNlcnRfaW50b190ZXh0X25v
ZGVfY29tbWFuZC5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MDQgLTAwMDAKQEAgLTI4LDExICsyOCw3
IEBACiAKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAKLSNpZiBBUFBMRV9DSEFOR0VT
CiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgotI2Vsc2UKLSNkZWZpbmUgQVNTRVJU
KGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKLSNlbmRpZgogCiB1c2luZyBET006OkRvY3Vt
ZW50SW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7CkluZGV4OiBlZGl0aW5nL2luc2VydF9saW5l
X2JyZWFrX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuOQpkaWZmIC1wIC11IC1yMS45IGVkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtf
Y29tbWFuZC5jcHAKLS0tIGVkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJOSBO
b3YgMjAwNSAxOTo1Njo0OCAtMDAwMAkxLjkKKysrIGVkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtf
Y29tbWFuZC5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MDQgLTAwMDAKQEAgLTM3LDEzICszNyw4IEBA
CiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIK
IAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAj
aW5jbHVkZSAiS1dRTG9nZ2luZy5oIgotI2Vsc2UKLSNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikg
YXNzZXJ0KGFzc2VydGlvbikKLSNkZWZpbmUgTE9HKGNoYW5uZWwsIGZvcm1hdEFuZEFyZ3MuLi4p
ICgodm9pZCkwKQotI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBET006OkhUTUxOYW1lczsKIApJ
bmRleDogZWRpdGluZy9pbnNlcnRfbm9kZV9iZWZvcmVfY29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfbm9kZV9iZWZv
cmVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1wIC11IC1yMS4z
IGVkaXRpbmcvaW5zZXJ0X25vZGVfYmVmb3JlX2NvbW1hbmQuY3BwCi0tLSBlZGl0aW5nL2luc2Vy
dF9ub2RlX2JlZm9yZV9jb21tYW5kLmNwcAkzIE9jdCAyMDA1IDIxOjEyOjE5IC0wMDAwCTEuMwor
KysgZWRpdGluZy9pbnNlcnRfbm9kZV9iZWZvcmVfY29tbWFuZC5jcHAJMTEgTm92IDIwMDUgMTk6
MzQ6MDQgLTAwMDAKQEAgLTI4LDExICsyOCw3IEBACiAKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVp
bXBsLmgiCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9u
cy5oPgotI2Vsc2UKLSNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikK
LSNlbmRpZgogCiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6Tm9kZUltcGw7
CkluZGV4OiBlZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0
X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
OQpkaWZmIC1wIC11IC1yMS45IGVkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29t
bWFuZC5jcHAKLS0tIGVkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5j
cHAJMyBPY3QgMjAwNSAyMToxMjoxOSAtMDAwMAkxLjkKKysrIGVkaXRpbmcvaW5zZXJ0X3BhcmFn
cmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MDQgLTAwMDAKQEAg
LTM3LDEzICszNyw4IEBACiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgogI2luY2x1
ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxr
eG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSAiS1dRTG9nZ2luZy5oIgotI2Vsc2UKLSNk
ZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKLSNkZWZpbmUgTE9HKGNo
YW5uZWwsIGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQotI2VuZGlmCiAKIHVzaW5nIG5hbWVz
cGFjZSBET006OkhUTUxOYW1lczsKIApJbmRleDogZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5n
L2luc2VydF90ZXh0X2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzCmRpZmYg
LXAgLXUgLXIxLjEzIGVkaXRpbmcvaW5zZXJ0X3RleHRfY29tbWFuZC5jcHAKLS0tIGVkaXRpbmcv
aW5zZXJ0X3RleHRfY29tbWFuZC5jcHAJOSBOb3YgMjAwNSAxOTo1Njo0OCAtMDAwMAkxLjEzCisr
KyBlZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3BwCTExIE5vdiAyMDA1IDE5OjM0OjA0IC0w
MDAwCkBAIC0zNiwxMyArMzYsOCBAQAogI2luY2x1ZGUgInhtbC9kb21fcG9zaXRpb24uaCIKICNp
bmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVk
ZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktXUUxvZ2dpbmcuaCIKLSNlbHNl
Ci0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCi0jZGVmaW5lIExP
RyhjaGFubmVsLCBmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKLSNlbmRpZgogCiB1c2luZyBE
T006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CkluZGV4OiBlZGl0aW5nL2pv
aW5fdGV4dF9ub2Rlc19jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9lZGl0aW5nL2pvaW5fdGV4dF9ub2Rlc19jb21tYW5kLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMgZWRpdGluZy9qb2luX3RleHRfbm9k
ZXNfY29tbWFuZC5jcHAKLS0tIGVkaXRpbmcvam9pbl90ZXh0X25vZGVzX2NvbW1hbmQuY3BwCTMg
T2N0IDIwMDUgMjE6MTI6MTkgLTAwMDAJMS4zCisrKyBlZGl0aW5nL2pvaW5fdGV4dF9ub2Rlc19j
b21tYW5kLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowNCAtMDAwMApAQCAtMjksMTEgKzI5LDcgQEAK
ICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBs
LmgiCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5o
PgotI2Vsc2UKLSNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKLSNl
bmRpZgogCiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cklu
ZGV4OiBlZGl0aW5nL2pzZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWRpdGluZy9qc2VkaXRpbmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjM0CmRpZmYgLXAgLXUgLXIxLjM0IGVkaXRpbmcvanNlZGl0aW5nLmNwcAotLS0gZWRpdGlu
Zy9qc2VkaXRpbmcuY3BwCTMgTm92IDIwMDUgMDI6MjA6MTUgLTAwMDAJMS4zNAorKysgZWRpdGlu
Zy9qc2VkaXRpbmcuY3BwCTExIE5vdiAyMDA1IDE5OjM0OjA0IC0wMDAwCkBAIC0zNCw5ICszNCw3
IEBACiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgPGt4bWxjb3Jl
L0hhc2hNYXAuaD4KIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlICJLV1FLSFRNTFBhcnQu
aCIKLSNlbmRpZgogCiB1c2luZyBraHRtbDo6VHlwaW5nQ29tbWFuZDsKIApJbmRleDogZWRpdGlu
Zy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VkaXRpbmcvbWFya3VwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZmIC1wIC11
IC1yMS4zOSBlZGl0aW5nL21hcmt1cC5jcHAKLS0tIGVkaXRpbmcvbWFya3VwLmNwcAkzMSBPY3Qg
MjAwNSAxOTowNDo0MyAtMDAwMAkxLjM5CisrKyBlZGl0aW5nL21hcmt1cC5jcHAJMTEgTm92IDIw
MDUgMTk6MzQ6MDQgLTAwMDAKQEAgLTU5LDE3ICs1OSw4IEBAIHVzaW5nIERPTTo6UG9zaXRpb247
CiB1c2luZyBET006OlJhbmdlSW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7CiAKLSNpZiBBUFBM
RV9DSEFOR0VTCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktX
UUxvZ2dpbmcuaCIKLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pICgodm9pZCkwKQot
I2RlZmluZSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFzc2VydGlvbiwgZm9ybWF0QW5kQXJncy4uLikg
KCh2b2lkKTApCi0jZGVmaW5lIEFTU0VSVF9OT1RfUkVBQ0hFRCgpICgodm9pZCkwKQotI2RlZmlu
ZSBMT0coY2hhbm5lbCwgZm9ybWF0QW5kQXJncy4uLikgKCh2b2lkKTApCi0jZGVmaW5lIEVSUk9S
KGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQotI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBh
c3NlcnQoYXNzZXJ0aW9uKQotI2VuZGlmCiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKSW5kZXg6IGVk
aXRpbmcvbWVyZ2VfaWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvbWVyZ2VfaWRlbnRpY2FsX2Vs
ZW1lbnRzX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtcCAtdSAt
cjEuMyBlZGl0aW5nL21lcmdlX2lkZW50aWNhbF9lbGVtZW50c19jb21tYW5kLmNwcAotLS0gZWRp
dGluZy9tZXJnZV9pZGVudGljYWxfZWxlbWVudHNfY29tbWFuZC5jcHAJMyBPY3QgMjAwNSAyMTox
MjoyMCAtMDAwMAkxLjMKKysrIGVkaXRpbmcvbWVyZ2VfaWRlbnRpY2FsX2VsZW1lbnRzX2NvbW1h
bmQuY3BwCTExIE5vdiAyMDA1IDE5OjM0OjA0IC0wMDAwCkBAIC0yOSwxMSArMjksNyBAQAogI2lu
Y2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwu
aCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+
Ci0jZWxzZQotI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQotI2Vu
ZGlmCiAKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsK
SW5kZXg6IGVkaXRpbmcvbW92ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlvbl9jb21t
YW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUgZWRpdGlu
Zy9tb3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAotLS0gZWRpdGluZy9tb3ZlX3NlbGVjdGlvbl9j
b21tYW5kLmNwcAkzIE9jdCAyMDA1IDIxOjEyOjIwIC0wMDAwCTEuNQorKysgZWRpdGluZy9tb3Zl
X3NlbGVjdGlvbl9jb21tYW5kLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowNCAtMDAwMApAQCAtMjks
MTEgKzI5LDcgQEAKIAogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogCi0jaWYgQVBQTEVf
Q0hBTkdFUwogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KLSNlbHNlCi0jZGVmaW5l
IEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCi0jZW5kaWYKIAogdXNpbmcgRE9N
OjpEb2N1bWVudEltcGw7CiB1c2luZyBET006OkRvY3VtZW50RnJhZ21lbnRJbXBsOwpJbmRleDog
ZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlYmFsYW5jZV93aGl0ZXNwYWNl
X2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBl
ZGl0aW5nL3JlYmFsYW5jZV93aGl0ZXNwYWNlX2NvbW1hbmQuY3BwCi0tLSBlZGl0aW5nL3JlYmFs
YW5jZV93aGl0ZXNwYWNlX2NvbW1hbmQuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MjAgLTAwMDAJMS41
CisrKyBlZGl0aW5nL3JlYmFsYW5jZV93aGl0ZXNwYWNlX2NvbW1hbmQuY3BwCTExIE5vdiAyMDA1
IDE5OjM0OjA0IC0wMDAwCkBAIC0zMSwxMSArMzEsNyBAQAogI2luY2x1ZGUgInhtbC9kb21fZG9j
aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIAotI2lmIEFQUExFX0NIQU5H
RVMKICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+Ci0jZWxzZQotI2RlZmluZSBBU1NF
UlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQotI2VuZGlmCiAKIHVzaW5nIERPTTo6RE9N
U3RyaW5nOwogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7CkluZGV4OiBlZGl0aW5nL3JlbW92ZV9j
c3NfcHJvcGVydHlfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWRpdGluZy9yZW1vdmVfY3NzX3Byb3BlcnR5X2NvbW1hbmQuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtcCAtdSAtcjEuMyBlZGl0aW5nL3JlbW92ZV9jc3Nf
cHJvcGVydHlfY29tbWFuZC5jcHAKLS0tIGVkaXRpbmcvcmVtb3ZlX2Nzc19wcm9wZXJ0eV9jb21t
YW5kLmNwcAkzIE9jdCAyMDA1IDIxOjEyOjIwIC0wMDAwCTEuMworKysgZWRpdGluZy9yZW1vdmVf
Y3NzX3Byb3BlcnR5X2NvbW1hbmQuY3BwCTExIE5vdiAyMDA1IDE5OjM0OjA0IC0wMDAwCkBAIC0y
OCwxMSArMjgsNyBAQAogCiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1ZWltcGwuaCIKIAotI2lmIEFQ
UExFX0NIQU5HRVMKICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+Ci0jZWxzZQotI2Rl
ZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQotI2VuZGlmCiAKIHVzaW5n
IERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGw7CiB1c2luZyBET006OkRPTVN0cmluZzsKSW5k
ZXg6IGVkaXRpbmcvcmVtb3ZlX25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfYXR0
cmlidXRlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAt
cjEuNSBlZGl0aW5nL3JlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcAotLS0gZWRpdGlu
Zy9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5jcHAJMyBPY3QgMjAwNSAyMToxMjoyMCAt
MDAwMAkxLjUKKysrIGVkaXRpbmcvcmVtb3ZlX25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwCTEx
IE5vdiAyMDA1IDE5OjM0OjA0IC0wMDAwCkBAIC0yOCwxMSArMjgsNyBAQAogCiAjaW5jbHVkZSAi
eG1sL2RvbV9lbGVtZW50aW1wbC5oIgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPGt4
bWxjb3JlL0Fzc2VydGlvbnMuaD4KLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFz
c2VydChhc3NlcnRpb24pCi0jZW5kaWYKIAogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2lu
ZyBET006OkVsZW1lbnRJbXBsOwpJbmRleDogZWRpdGluZy9yZW1vdmVfbm9kZV9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Jl
bW92ZV9ub2RlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtcCAt
dSAtcjEuMyBlZGl0aW5nL3JlbW92ZV9ub2RlX2NvbW1hbmQuY3BwCi0tLSBlZGl0aW5nL3JlbW92
ZV9ub2RlX2NvbW1hbmQuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MjAgLTAwMDAJMS4zCisrKyBlZGl0
aW5nL3JlbW92ZV9ub2RlX2NvbW1hbmQuY3BwCTExIE5vdiAyMDA1IDE5OjM0OjA0IC0wMDAwCkBA
IC0yOCwxMSArMjgsNyBAQAogCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgogCi0jaWYg
QVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KLSNlbHNlCi0j
ZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCi0jZW5kaWYKIAogdXNp
bmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwpJbmRleDogZWRpdGlu
Zy9yZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2NvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVtb3ZlX25vZGVfcHJl
c2VydmluZ19jaGlsZHJlbl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRp
ZmYgLXAgLXUgLXIxLjMgZWRpdGluZy9yZW1vdmVfbm9kZV9wcmVzZXJ2aW5nX2NoaWxkcmVuX2Nv
bW1hbmQuY3BwCi0tLSBlZGl0aW5nL3JlbW92ZV9ub2RlX3ByZXNlcnZpbmdfY2hpbGRyZW5fY29t
bWFuZC5jcHAJMyBPY3QgMjAwNSAyMToxMjoyMCAtMDAwMAkxLjMKKysrIGVkaXRpbmcvcmVtb3Zl
X25vZGVfcHJlc2VydmluZ19jaGlsZHJlbl9jb21tYW5kLmNwcAkxMSBOb3YgMjAwNSAxOTozNDow
NCAtMDAwMApAQCAtMjgsMTEgKzI4LDcgQEAKIAogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwu
aCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+
Ci0jZWxzZQotI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQotI2Vu
ZGlmCiAKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKSW5k
ZXg6IGVkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9j
b21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOApkaWZmIC1wIC11IC1yMS4xOCBl
ZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBlZGl0aW5nL3JlcGxhY2Vf
c2VsZWN0aW9uX2NvbW1hbmQuY3BwCTkgTm92IDIwMDUgMTk6NTY6NDggLTAwMDAJMS4xOAorKysg
ZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkxMSBOb3YgMjAwNSAxOTozNDow
NCAtMDAwMApAQCAtNDIsMTEgKzQyLDcgQEAKICNpbmNsdWRlICJjc3MvY3NzX2NvbXB1dGVkc3R5
bGUuaCIKICNpbmNsdWRlICJjc3MvY3NzcHJvcGVydGllcy5oIgogCi0jaWYgQVBQTEVfQ0hBTkdF
UwogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KLSNlbHNlCi0jZGVmaW5lIEFTU0VS
VChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCi0jZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNl
IERPTTo6SFRNTE5hbWVzOwogCkluZGV4OiBlZGl0aW5nL3NldF9ub2RlX2F0dHJpYnV0ZV9jb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0
aW5nL3NldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41CmRpZmYgLXAgLXUgLXIxLjUgZWRpdGluZy9zZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5j
cHAKLS0tIGVkaXRpbmcvc2V0X25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwCTMgT2N0IDIwMDUg
MjE6MTI6MjAgLTAwMDAJMS41CisrKyBlZGl0aW5nL3NldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5k
LmNwcAkxMSBOb3YgMjAwNSAxOTozNDowNCAtMDAwMApAQCAtMjgsMTEgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNs
dWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+Ci0jZWxzZQotI2RlZmluZSBBU1NFUlQoYXNzZXJ0
aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQotI2VuZGlmCiAKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKSW5kZXg6IGVkaXRpbmcvc3BsaXRfZWxlbWVudF9j
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9l
ZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MwpkaWZmIC1wIC11IC1yMS4zIGVkaXRpbmcvc3BsaXRfZWxlbWVudF9jb21tYW5kLmNwcAotLS0g
ZWRpdGluZy9zcGxpdF9lbGVtZW50X2NvbW1hbmQuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MjEgLTAw
MDAJMS4zCisrKyBlZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29tbWFuZC5jcHAJMTEgTm92IDIwMDUg
MTk6MzQ6MDQgLTAwMDAKQEAgLTI4LDExICsyOCw3IEBACiAKICNpbmNsdWRlICJ4bWwvZG9tX2Vs
ZW1lbnRpbXBsLmgiCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNz
ZXJ0aW9ucy5oPgotI2Vsc2UKLSNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2Vy
dGlvbikKLSNlbmRpZgogCiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6RWxl
bWVudEltcGw7CkluZGV4OiBlZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X3Rl
eHRfbm9kZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUg
LXIxLjUgZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29tbWFuZC5jcHAKLS0tIGVkaXRpbmcvc3Bs
aXRfdGV4dF9ub2RlX2NvbW1hbmQuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MjEgLTAwMDAJMS41Cisr
KyBlZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb21tYW5kLmNwcAkxMSBOb3YgMjAwNSAxOTozNDow
NCAtMDAwMApAQCAtMjksMTEgKzI5LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIK
ICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAjaW5j
bHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgotI2Vsc2UKLSNkZWZpbmUgQVNTRVJUKGFzc2Vy
dGlvbikgYXNzZXJ0KGFzc2VydGlvbikKLSNlbmRpZgogCiB1c2luZyBET006OkRvY3VtZW50SW1w
bDsKIHVzaW5nIERPTTo6VGV4dEltcGw7CkluZGV4OiBlZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9j
b250YWluaW5nX2VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IGVkaXRpbmcvc3BsaXRf
dGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudC5jcHAKLS0tIGVkaXRpbmcvc3BsaXRfdGV4dF9u
b2RlX2NvbnRhaW5pbmdfZWxlbWVudC5jcHAJMyBPY3QgMjAwNSAyMToxMjoyMSAtMDAwMAkxLjQK
KysrIGVkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudC5jcHAJMTEgTm92
IDIwMDUgMTk6MzQ6MDQgLTAwMDAKQEAgLTMwLDExICszMCw3IEBACiAjaW5jbHVkZSAieG1sL2Rv
bV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAK
LSNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgotI2Vs
c2UKLSNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKLSNlbmRpZgog
CiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7CkluZGV4OiBl
ZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQgZWRpdGluZy90eXBpbmdfY29tbWFuZC5jcHAKLS0t
IGVkaXRpbmcvdHlwaW5nX2NvbW1hbmQuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MjEgLTAwMDAJMS40
CisrKyBlZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowNCAtMDAw
MApAQCAtMzYsMTEgKzM2LDcgQEAKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5j
bHVkZSAidmlzaWJsZV91bml0cy5oIgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPGt4
bWxjb3JlL0Fzc2VydGlvbnMuaD4KLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFz
c2VydChhc3NlcnRpb24pCi0jZW5kaWYKIAogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2lu
ZyBET006OkRPTVN0cmluZzsKSW5kZXg6IGVkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxl
X3Bvc2l0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MgpkaWZmIC1wIC11IC1yMS42
MiBlZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwCi0tLSBlZGl0aW5nL3Zpc2libGVfcG9zaXRp
b24uY3BwCTggTm92IDIwMDUgMDg6MTA6NTUgLTAwMDAJMS42MgorKysgZWRpdGluZy92aXNpYmxl
X3Bvc2l0aW9uLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowNCAtMDAwMApAQCAtMzUsMTMgKzM1LDgg
QEAKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0
aW1wbC5oIgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlICJLV1FMb2dnaW5nLmgiCi0jZWxzZQotI2RlZmluZSBBU1NFUlQoYXNz
ZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQotI2RlZmluZSBMT0coY2hhbm5lbCwgZm9ybWF0QW5k
QXJncy4uLikgKCh2b2lkKTApCi0jZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIERPTTo6SFRNTE5h
bWVzOwogCkluZGV4OiBlZGl0aW5nL3dyYXBfY29udGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5n
L3dyYXBfY29udGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMgZWRpdGluZy93cmFwX2NvbnRlbnRzX2luX2R1bW15
X3NwYW5fY29tbWFuZC5jcHAKLS0tIGVkaXRpbmcvd3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFu
X2NvbW1hbmQuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MjEgLTAwMDAJMS4zCisrKyBlZGl0aW5nL3dy
YXBfY29udGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kLmNwcAkxMSBOb3YgMjAwNSAxOTozNDow
NCAtMDAwMApAQCAtMjksMTEgKzI5LDcgQEAKICNpbmNsdWRlICJhcHBseV9zdHlsZV9jb21tYW5k
LmgiCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgogCi0jaWYgQVBQTEVfQ0hBTkdF
UwogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KLSNlbHNlCi0jZGVmaW5lIEFTU0VS
VChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCi0jZW5kaWYKIAogdXNpbmcgRE9NOjpEb2N1
bWVudEltcGw7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwpJbmRleDogaHRtbC9odG1sX2RvY3Vt
ZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
aHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzQKZGlm
ZiAtcCAtdSAtcjEuNzQgaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAKLS0tIGh0bWwvaHRtbF9k
b2N1bWVudGltcGwuY3BwCTggTm92IDIwMDUgMDg6MTA6NTggLTAwMDAJMS43NAorKysgaHRtbC9o
dG1sX2RvY3VtZW50aW1wbC5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MDUgLTAwMDAKQEAgLTg5LDkg
Kzg5LDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxxcHRyc3RhY2suaD4KIAot
I2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlICJLV1FLQ29va2llSmFyLmgiCi0jZW5kaWYKIAog
CiAvLyBUdXJuIG9mZiBpbmxpbmluZyB0byBhdm9pZCB3YXJuaW5nIHdpdGggbmV3ZXIgZ2NjLgpA
QCAtMTM3LDEzICsxMzUsNyBAQCBFbGVtZW50SW1wbCogSFRNTERvY3VtZW50SW1wbDo6ZG9jdW1l
bnRFCiBET01TdHJpbmcgSFRNTERvY3VtZW50SW1wbDo6cmVmZXJyZXIoKSBjb25zdAogewogICAg
IGlmICggcGFydCgpICkKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIHJldHVybiBLV1EocGFy
dCgpKS0+aW5jb21pbmdSZWZlcnJlcigpOwotI2Vsc2UKLSAgICAgICAgLy8gVGhpcyBpcyBicm9r
ZW47IHJldHVybnMgdGhlIHJlZmVycmVyIHVzZWQgZm9yIGxpbmtzIHdpdGhpbiB0aGlzIHBhZ2Ug
KGJhc2ljYWxseQotICAgICAgICAvLyB0aGUgc2FtZSBhcyB0aGUgVVJMKSwgbm90IHRoZSByZWZl
cnJlciB1c2VkIGZvciBsb2FkaW5nIHRoaXMgcGFnZSBpdHNlbGYuCi0gICAgICAgIHJldHVybiBw
YXJ0KCktPnJlZmVycmVyKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gRE9NU3RyaW5nKCk7CiB9CiAK
QEAgLTE1Niw3MSArMTQ4LDEyIEBAIERPTVN0cmluZyBIVE1MRG9jdW1lbnRJbXBsOjpsYXN0TW9k
aWZpZWQKIAogRE9NU3RyaW5nIEhUTUxEb2N1bWVudEltcGw6OmNvb2tpZSgpIGNvbnN0CiB7Ci0j
aWYgQVBQTEVfQ0hBTkdFUwogICAgIHJldHVybiBLV1FLQ29va2llSmFyOjpjb29raWUoVVJMKCkp
OwotI2Vsc2UKLSAgICBsb25nIHdpbmRvd0lkID0gMDsKLSAgICBLSFRNTFZpZXcgKnYgPSB2aWV3
ICgpOwotICAgIAotICAgIGlmICggdiAmJiB2LT50b3BMZXZlbFdpZGdldCgpICkKLSAgICAgIHdp
bmRvd0lkID0gdi0+dG9wTGV2ZWxXaWRnZXQoKS0+d2luSWQoKTsKLQotICAgIFFDU3RyaW5nIHJl
cGx5VHlwZTsKLSAgICBRQnl0ZUFycmF5IHBhcmFtcywgcmVwbHk7Ci0gICAgUURhdGFTdHJlYW0g
c3RyZWFtKHBhcmFtcywgSU9fV3JpdGVPbmx5KTsKLSAgICBzdHJlYW0gPDwgVVJMKCkgPDwgd2lu
ZG93SWQ7Ci0gICAgaWYgKCFrYXBwLT5kY29wQ2xpZW50KCktPmNhbGwoImtjb29raWVqYXIiLCAi
a2Nvb2tpZWphciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbmRET01D
b29raWVzKFFTdHJpbmcsIGludCkiLCBwYXJhbXMsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcGx5VHlwZSwgcmVwbHkpKSB7Ci0gICAgICAgICAvLyBNYXliZSBpdCB3YXNu
J3QgcnVubmluZyAoZS5nLiB3ZSdyZSBvcGVuaW5nIGxvY2FsIGh0bWwgZmlsZXMpCi0gICAgICAg
ICBLQXBwbGljYXRpb246OnN0YXJ0U2VydmljZUJ5RGVza3RvcE5hbWUoICJrY29va2llamFyIik7
Ci0gICAgICAgICBpZiAoIWthcHAtPmRjb3BDbGllbnQoKS0+Y2FsbCgia2Nvb2tpZWphciIsICJr
Y29va2llamFyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaW5k
RE9NQ29va2llcyhRU3RyaW5nKSIsIHBhcmFtcywgcmVwbHlUeXBlLCByZXBseSkpIHsKLSAgICAg
ICAgICAga2RXYXJuaW5nKDYwMTApIDw8ICJDYW4ndCBjb21tdW5pY2F0ZSB3aXRoIGNvb2tpZWph
ciEiIDw8IGVuZGw7Ci0gICAgICAgICAgIHJldHVybiBET01TdHJpbmcoKTsKLSAgICAgICAgIH0K
LSAgICB9Ci0KLSAgICBRRGF0YVN0cmVhbSBzdHJlYW0yKHJlcGx5LCBJT19SZWFkT25seSk7Ci0g
ICAgaWYocmVwbHlUeXBlICE9ICJRU3RyaW5nIikgewotICAgICAgICAga2RFcnJvcig2MDEwKSA8
PCAiRENPUCBmdW5jdGlvbiBmaW5kRE9NQ29va2llcyguLi4pIHJldHVybnMgIgotICAgICAgICAg
ICAgICAgICAgICAgICA8PCByZXBseVR5cGUgPDwgIiwgZXhwZWN0ZWQgUVN0cmluZyIgPDwgZW5k
bDsKLSAgICAgICAgIHJldHVybiBET01TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBRU3RyaW5nIHJl
c3VsdDsKLSAgICBzdHJlYW0yID4+IHJlc3VsdDsKLSAgICByZXR1cm4gRE9NU3RyaW5nKHJlc3Vs
dCk7Ci0jZW5kaWYgLy8gQVBQTEVfQ0hBTkdFUwogfQogCiB2b2lkIEhUTUxEb2N1bWVudEltcGw6
OnNldENvb2tpZSggY29uc3QgRE9NU3RyaW5nICYgdmFsdWUgKQogewotI2lmIEFQUExFX0NIQU5H
RVMKICAgICByZXR1cm4gS1dRS0Nvb2tpZUphcjo6c2V0Q29va2llKFVSTCgpLCBtX3BvbGljeUJh
c2VVUkwucXN0cmluZygpLCB2YWx1ZS5xc3RyaW5nKCkpOwotI2Vsc2UKLSAgICBsb25nIHdpbmRv
d0lkID0gMDsKLSAgICBLSFRNTFZpZXcgKnYgPSB2aWV3ICgpOwotICAgIAotICAgIGlmICggdiAm
JiB2LT50b3BMZXZlbFdpZGdldCgpICkKLSAgICAgIHdpbmRvd0lkID0gdi0+dG9wTGV2ZWxXaWRn
ZXQoKS0+d2luSWQoKTsKLSAgICAgCi0gICAgUUJ5dGVBcnJheSBwYXJhbXM7Ci0gICAgUURhdGFT
dHJlYW0gc3RyZWFtKHBhcmFtcywgSU9fV3JpdGVPbmx5KTsKLSAgICBRU3RyaW5nIGZha2VfaGVh
ZGVyKCJTZXQtQ29va2llOiAiKTsKLSAgICBmYWtlX2hlYWRlci5hcHBlbmQodmFsdWUucXN0cmlu
ZygpKTsKLSAgICBmYWtlX2hlYWRlci5hcHBlbmQoIlxuIik7Ci0gICAgc3RyZWFtIDw8IFVSTCgp
IDw8IGZha2VfaGVhZGVyLnV0ZjgoKSA8PCB3aW5kb3dJZDsKLSAgICBpZiAoIWthcHAtPmRjb3BD
bGllbnQoKS0+c2VuZCgia2Nvb2tpZWphciIsICJrY29va2llamFyIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiYWRkQ29va2llcyhRU3RyaW5nLFFDU3RyaW5nLGxvbmcgaW50
KSIsIHBhcmFtcykpCi0gICAgewotICAgICAgICAgLy8gTWF5YmUgaXQgd2Fzbid0IHJ1bm5pbmcg
KGUuZy4gd2UncmUgb3BlbmluZyBsb2NhbCBodG1sIGZpbGVzKQotICAgICAgICAgS0FwcGxpY2F0
aW9uOjpzdGFydFNlcnZpY2VCeURlc2t0b3BOYW1lKCAia2Nvb2tpZWphciIpOwotICAgICAgICAg
aWYgKCFrYXBwLT5kY29wQ2xpZW50KCktPnNlbmQoImtjb29raWVqYXIiLCAia2Nvb2tpZWphciIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkQ29va2llcyhRU3Ry
aW5nLFFDU3RyaW5nLGxvbmcgaW50KSIsIHBhcmFtcykpCi0gICAgICAgICAgICAga2RXYXJuaW5n
KDYwMTApIDw8ICJDYW4ndCBjb21tdW5pY2F0ZSB3aXRoIGNvb2tpZWphciEiIDw8IGVuZGw7Ci0g
ICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgSFRNTERvY3VtZW50SW1wbDo6c2V0Qm9keShIVE1MRWxl
bWVudEltcGwgKl9ib2R5LCBpbnQgJmV4Y2VwdGlvbmNvZGUpCkluZGV4OiBodG1sL2h0bWxfZm9y
bWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0
bWwvaHRtbF9mb3JtaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAzCmRpZmYgLXAg
LXUgLXIxLjIwMyBodG1sL2h0bWxfZm9ybWltcGwuY3BwCi0tLSBodG1sL2h0bWxfZm9ybWltcGwu
Y3BwCTExIE5vdiAyMDA1IDAyOjE1OjM1IC0wMDAwCTEuMjAzCisrKyBodG1sL2h0bWxfZm9ybWlt
cGwuY3BwCTExIE5vdiAyMDA1IDE5OjM0OjA1IC0wMDAwCkBAIC0xMzQsNyArMTM0LDYgQEAgSFRN
TEZvcm1FbGVtZW50SW1wbDo6fkhUTUxGb3JtRWxlbWVudEltcAogICAgICAgICBpbWdFbGVtZW50
c1tpXS0+bV9mb3JtID0gMDsKIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKIAogYm9vbCBIVE1MRm9y
bUVsZW1lbnRJbXBsOjpmb3JtV291bGRIYXZlU2VjdXJlU3VibWlzc2lvbihjb25zdCBET01TdHJp
bmcgJnVybCkKIHsKQEAgLTE0NCwxOCArMTQzLDE1IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50SW1w
bDo6Zm9ybVdvdWxkSGF2ZVMKICAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
dXJsLnFzdHJpbmcoKSkuc3RhcnRzV2l0aCgiaHR0cHM6IiwgZmFsc2UpOwogfQogCi0jZW5kaWYK
IAogdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjphdHRhY2goKQogewogICAgIEhUTUxFbGVtZW50
SW1wbDo6YXR0YWNoKCk7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8gbm90ZSB3ZSBkb24n
dCBkZWFsIHdpdGggY2FsbGluZyBzZWN1cmVGb3JtUmVtb3ZlZCgpIG9uIGRldGFjaCwgYmVjYXVz
ZSB0aGUgdGltaW5nCiAgICAgLy8gd2FzIHN1Y2ggdGhhdCBpdCBjbGVhcmVkIG91ciBzdGF0ZSB0
b28gZWFybHkKICAgICBpZiAoZm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24obV91cmwpKQog
ICAgICAgICBnZXREb2N1bWVudCgpLT5zZWN1cmVGb3JtQWRkZWQoKTsKLSNlbmRpZgogfQogCiB2
b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6Omluc2VydGVkSW50b0RvY3VtZW50KCkKQEAgLTE4OCw3
ICsxODQsNiBAQCBpbnQgSFRNTEZvcm1FbGVtZW50SW1wbDo6bGVuZ3RoKCkgY29uc3QKICAgICBy
ZXR1cm4gbGVuOwogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogCiB2b2lkIEhUTUxGb3JtRWxlbWVu
dEltcGw6OnN1Ym1pdENsaWNrKCkKIHsKQEAgLTIwNyw3ICsyMDIsNiBAQCB2b2lkIEhUTUxGb3Jt
RWxlbWVudEltcGw6OnN1Ym1pdENsaWNrKCkKICAgICAgICAgcHJlcGFyZVN1Ym1pdCgpOwogfQog
Ci0jZW5kaWYgLy8gQVBQTEVfQ0hBTkdFUwogCiBzdGF0aWMgUUNTdHJpbmcgZW5jb2RlQ1N0cmlu
Zyhjb25zdCBRQ1N0cmluZyYgZSkKIHsKQEAgLTMwNywyNiArMzAxLDYgQEAgc3RhdGljIFFDU3Ry
aW5nIGZpeExpbmVCcmVha3MoY29uc3QgUUNTdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNp
ZiAhQVBQTEVfQ0hBTkdFUwotCi12b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OmkxOG5EYXRhKCkK
LXsKLSAgICBRU3RyaW5nIGZvbzEgPSBpMThuKCAiWW91J3JlIGFib3V0IHRvIHNlbmQgZGF0YSB0
byB0aGUgSW50ZXJuZXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ2aWEgYW4gdW5lbmNy
eXB0ZWQgY29ubmVjdGlvbi4gSXQgbWlnaHQgYmUgcG9zc2libGUgIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICJmb3Igb3RoZXJzIHRvIHNlZSB0aGlzIGluZm9ybWF0aW9uLlxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICJEbyB5b3Ugd2FudCB0byBjb250aW51ZT8iKTsKLSAgICBRU3Ry
aW5nIGZvbzIgPSBpMThuKCJLREUgV2ViIGJyb3dzZXIiKTsKLSAgICBRU3RyaW5nIGZvbzMgPSBp
MThuKCJXaGVuIHlvdSBzZW5kIGEgcGFzc3dvcmQgdW5lbmNyeXB0ZWQgdG8gdGhlIEludGVybmV0
LCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiaXQgbWlnaHQgYmUgcG9zc2libGUgZm9yIG90
aGVycyB0byBjYXB0dXJlIGl0IGFzIHBsYWluIHRleHQuXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICAiRG8geW91IHdhbnQgdG8gY29udGludWU/Iik7Ci0gICAgUVN0cmluZyBmb281ID0gaTE4
bigiWW91ciBkYXRhIHN1Ym1pc3Npb24gaXMgcmVkaXJlY3RlZCB0byAiCi0gICAgICAgICAgICAg
ICAgICAgICAgICAiYW4gaW5zZWN1cmUgc2l0ZS4gVGhlIGRhdGEgaXMgc2VudCB1bmVuY3J5cHRl
ZC5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICJEbyB5b3Ugd2FudCB0byBjb250aW51ZT8i
KTsKLSAgICBRU3RyaW5nIGZvbzYgPSBpMThuKCJUaGUgcGFnZSBjb250ZW50cyBleHBpcmVkLiBZ
b3UgY2FuIHJlcG9zdCB0aGUgZm9ybSIKLSAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhIGJ5
IHVzaW5nIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmdvKDApO1wiPlJlbG9hZDwvYT4iKTsKLX0KLQot
I2VuZGlmCiAKIGJvb2wgSFRNTEZvcm1FbGVtZW50SW1wbDo6Zm9ybURhdGEoRm9ybURhdGEgJmZv
cm1fZGF0YSkgY29uc3QKIHsKQEAgLTM1OSw5ICszMzMsNiBAQCBib29sIEhUTUxGb3JtRWxlbWVu
dEltcGw6OmZvcm1EYXRhKEZvcm1ECiAgICAgaWYoIWNvZGVjKQogICAgICAgICBjb2RlYyA9IFFU
ZXh0Q29kZWM6OmNvZGVjRm9yTG9jYWxlKCk7CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIFFT
dHJpbmdMaXN0IGZpbGVVcGxvYWRzOwotI2VuZGlmCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZm9ybUVsZW1lbnRzLmNvdW50KCk7ICsraSkgewogICAgICAgICBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbCogY3VycmVudCA9IGZvcm1FbGVtZW50c1tpXTsKQEAgLTQwNSw5ICszNzYs
NiBAQCBib29sIEhUTUxGb3JtRWxlbWVudEltcGw6OmZvcm1EYXRhKEZvcm1ECiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQp
LT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6RklMRSkKICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBwYXRoID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KS0+dmFsdWUoKS5xc3RyaW5nKCk7
Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRoLmxl
bmd0aCgpKSBmaWxlVXBsb2FkcyA8PCBwYXRoOwotI2VuZGlmCiAKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHdvbid0IHdvcmsgaWYgdGhlIGZpbGVuYW1lIGluY2x1ZGVz
IGEgIiBtYXJrLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3IgY29udHJvbCBjaGFyYWN0
ZXJzIGxpa2UgQ1Igb3IgTEYuIFRoaXMgYWxzbyBkb2VzIHN0cmFuZ2UKQEAgLTQxOSwxMiArMzg3
LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpmb3JtRGF0YShGb3JtRAogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZighc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihj
dXJyZW50KS0+dmFsdWUoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0j
aWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbWlt
ZVR5cGUgPSBwYXJ0ID8gS1dRKHBhcnQpLT5taW1lVHlwZUZvckZpbGVOYW1lKHBhdGgpIDogUVN0
cmluZygpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBLTWltZVR5cGU6OlB0
ciBwdHIgPSBLTWltZVR5cGU6OmZpbmRCeVVSTChLVVJMKHBhdGgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBRU3RyaW5nIG1pbWVUeXBlID0gcHRyLT5uYW1lKCk7Ci0jZW5kaWYKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3RyICs9ICJcclxuQ29udGVudC1UeXBlOiAi
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoc3RyICs9IG1pbWVUeXBlLmFzY2lp
KCk7CkBAIC00MzcsMzYgKzQwMCwxOCBAQCBib29sIEhUTUxGb3JtRWxlbWVudEltcGw6OmZvcm1E
YXRhKEZvcm1ECiAKICAgICAgICAgICAgICAgICAgICAgLy8gYXBwZW5kIGJvZHkKICAgICAgICAg
ICAgICAgICAgICAgZm9ybV9kYXRhLmFwcGVuZERhdGEoaHN0ci5kYXRhKCksIGhzdHIubGVuZ3Ro
KCkpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybURh
dGFMaXN0SXRlbSAmaXRlbSA9ICppdDsKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFT
aXplID0gaXRlbS5tX2RhdGEuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVNp
emUgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZGF0YS5hcHBlbmREYXRhKGl0
ZW0ubV9kYXRhLCBkYXRhU2l6ZSAtIDEpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgh
aXRlbS5tX3BhdGguaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kYXRh
LmFwcGVuZEZpbGUoaXRlbS5tX3BhdGgpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgZm9y
bV9kYXRhLmFwcGVuZERhdGEoKCppdCkubV9kYXRhLCAoKml0KS5tX2RhdGEuc2l6ZSgpIC0gMSk7
Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgZm9ybV9kYXRhLmFwcGVuZERhdGEoIlxyXG4i
LCAyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIGlmIChmaWxlVXBsb2Fkcy5jb3VudCgpKSB7Ci0g
ICAgICAgIGludCByZXN1bHQgPSBLTWVzc2FnZUJveDo6d2FybmluZ0NvbnRpbnVlQ2FuY2VsTGlz
dCggMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpMThuKCJZb3UncmUgYWJvdXQgdG8gdHJhbnNmZXIgdGhlIGZvbGxvd2luZyBm
aWxlcyBmcm9tICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ5b3VyIGxvY2FsIGNvbXB1dGVyIHRvIHRoZSBJbnRlcm5l
dC5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWU/IiksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsZVVwbG9hZHMpOwotCi0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBLTWVzc2FnZUJveDo6Q2Fu
Y2VsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k
aWYKIAogICAgIGlmIChtX211bHRpcGFydCkKICAgICAgICAgZW5jX3N0cmluZyA9ICgiLS0iICsg
bV9ib3VuZGFyeS5xc3RyaW5nKCkgKyAiLS1cclxuIikuYXNjaWkoKTsKQEAgLTU0MSwxMiArNDg2
LDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpzdWJtaXQoIGJvb2wgYQogICAgIEhUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsKiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24gPSAwOwog
ICAgIGJvb2wgbmVlZEJ1dHRvbkFjdGl2YXRpb24gPSBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbjsJLy8g
ZG8gd2UgbmVlZCB0byBhY3RpdmF0ZSBhIHN1Ym1pdCBidXR0b24/CiAgICAgCi0jaWYgQVBQTEVf
Q0hBTkdFUwogICAgIEtXUShwYXJ0KS0+Y2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKLSNlbmRp
ZgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuY291bnQoKTsgKytp
KSB7CiAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKiBjdXJyZW50ID0gZm9ybUVs
ZW1lbnRzW2ldOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgLy8gT3VyIGFwcCBuZWVkcyB0
byBnZXQgZm9ybSB2YWx1ZXMgZm9yIHBhc3N3b3JkIGZpZWxkcyBmb3IgZG9pbmcgcGFzc3dvcmQg
YXV0b2NvbXBsZXRlLAogICAgICAgICAvLyBzbyB3ZSBhcmUgbW9yZSBsZW5pZW50IGluIHB1c2hp
bmcgdmFsdWVzLCBhbmQgbGV0IHRoZSBhcHAgZGVjaWRlIHdoYXQgdG8gc2F2ZSB3aGVuLgogICAg
ICAgICBpZiAoY3VycmVudC0+aGFzTG9jYWxOYW1lKGlucHV0VGFnKSkgewpAQCAtNTYwLDE1ICs1
MDIsNiBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdCggYm9vbCBhCiAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckxpbmVFZGl0Kj4oaW5wdXQtPnJlbmRlcmVy
KCkpLT5hZGRTZWFyY2hSZXN1bHQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotI2Vsc2UK
LSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfSU5QVVQgJiYKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPmlucHV0VHlwZSgpID09
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpURVhUICYmCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT5hdXRvQ29tcGxldGUoKSApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICppbnB1dCA9IHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnRJbXBsICo+KGN1cnJlbnQpOwotICAgICAgICAgICAgdmlldy0+YWRk
Rm9ybUNvbXBsZXRpb25JdGVtKGlucHV0LT5uYW1lKCkucXN0cmluZygpLCBpbnB1dC0+dmFsdWUo
KS5xc3RyaW5nKCkpOwotICAgICAgICB9Ci0jZW5kaWYKIAogICAgICAgICBpZiAobmVlZEJ1dHRv
bkFjdGl2YXRpb24pIHsKICAgICAgICAgICAgIGlmIChjdXJyZW50LT5pc0FjdGl2YXRlZFN1Ym1p
dCgpKSB7CkBAIC02MzEsMTIgKzU2NCw5IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6cmVz
ZXQoICApCiB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBhY3Rp
b25BdHRyKSAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgewogICAgICAgICBib29sIG9sZFVSTFdh
c1NlY3VyZSA9IGZvcm1Xb3VsZEhhdmVTZWN1cmVTdWJtaXNzaW9uKG1fdXJsKTsKLSNlbmRpZgog
ICAgICAgICBtX3VybCA9IGtodG1sOjpwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsKLSNpZiBBUFBM
RV9DSEFOR0VTCiAgICAgICAgIGJvb2wgbmV3VVJMSXNTZWN1cmUgPSBmb3JtV291bGRIYXZlU2Vj
dXJlU3VibWlzc2lvbihtX3VybCk7CiAKICAgICAgICAgaWYgKG1fYXR0YWNoZWQgJiYgKG9sZFVS
TFdhc1NlY3VyZSAhPSBuZXdVUkxJc1NlY3VyZSkpCkBAIC02NDUsNyArNTc1LDYgQEAgdm9pZCBI
VE1MRm9ybUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dAogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGdldERvY3VtZW50KCktPnNlY3VyZUZvcm1SZW1vdmVkKCk7CiAgICAgfQot
I2VuZGlmCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRhcmdldEF0dHIpIHsKICAgICAg
ICAgbV90YXJnZXQgPSBhdHRyLT52YWx1ZSgpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG1ldGhvZEF0dHIpIHsKQEAgLTEwMjgsMTMgKzk1Nyw5IEBAIGJvb2wgSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGw6OmlzTW91c2UKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxS
ZW5kZXJXaWRnZXQqPihtX3JlbmRlciktPndpZGdldCgpICYmCiAgICAgICAgICAgICAgICAgKHN0
YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KG1fcmVuZGVyKS0+d2lkZ2V0KCktPmZvY3VzUG9saWN5
KCkgJiBRV2lkZ2V0OjpDbGlja0ZvY3VzKTsKICAgICAgICAgfQotI2lmIEFQUExFX0NIQU5HRVMK
ICAgICAgICAgLy8gRm9yIDxpbnB1dCB0eXBlPWltYWdlPiBhbmQgPGJ1dHRvbj4sIHdlIHdpbGwg
YXNzdW1lIG5vIG1vdXNlIGZvY3VzYWJpbGl0eS4gIFRoaXMgaXMKICAgICAgICAgLy8gY29uc2lz
dGVudCB3aXRoIE9TIFggYmVoYXZpb3IgZm9yIGJ1dHRvbnMuCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSNlbHNlCi0gICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKIH0KQEAgLTEwNTIsMTggKzk3Nyw4IEBAIHZvaWQgSFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGw6OmRlZmF1bHQKICAgICAgICAgICAgICAgICBleHQtPmVkaXRhYmxlV2lkZ2V0Rm9j
dXNlZCh3aWRnZXQpOwogICAgICAgICB9CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAJLy8gV2UgZG9u
J3Qgd2FudCB0aGlzIGRlZmF1bHQga2V5IGV2ZW50IGhhbmRsaW5nLCB3ZSdsbCBjb3VudCBvbgog
CS8vIENvY29hIGV2ZW50IGRpc3BhdGNoIGlmIHRoZSBldmVudCBkb2Vzbid0IGdldCBibG9ja2Vk
LgotI2Vsc2UKLQlpZiAoZXZ0LT50eXBlKCk9PWtleWRvd25FdmVudCB8fAotCSAgICBldnQtPnR5
cGUoKT09a2V5dXBFdmVudCkKLQl7Ci0JICAgIEtleWJvYXJkRXZlbnRJbXBsICogayA9IHN0YXRp
Y19jYXN0PEtleWJvYXJkRXZlbnRJbXBsICo+KGV2dCk7Ci0JICAgIGlmIChrLT5rZXlWYWwoKSA9
PSBRQ2hhcignXG4nKS51bmljb2RlKCkgJiYgbV9yZW5kZXIgJiYgbV9yZW5kZXItPmlzV2lkZ2V0
KCkgJiYgay0+cUtleUV2ZW50KQotCQlRQXBwbGljYXRpb246OnNlbmRFdmVudChzdGF0aWNfY2Fz
dDxSZW5kZXJXaWRnZXQgKj4obV9yZW5kZXIpLT53aWRnZXQoKSwgay0+cUtleUV2ZW50KTsKLQl9
Ci0jZW5kaWYKIAogCWlmIChldnQtPnR5cGUoKT09RE9NRm9jdXNPdXRFdmVudCAmJiBpc0VkaXRh
YmxlKCkgJiYgcGFydCAmJiBtX3JlbmRlciAmJiBtX3JlbmRlci0+aXNXaWRnZXQoKSkgewogCSAg
ICBLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uICpleHQgPSBzdGF0aWNfY2FzdDxLSFRNTFBhcnRC
cm93c2VyRXh0ZW5zaW9uICo+KHBhcnQtPmJyb3dzZXJFeHRlbnNpb24oKSk7CkBAIC0xNDI3LDEy
ICsxMzQyLDEwIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldElucHV0VHlwZSgKICAg
ICAgICAgbmV3VHlwZSA9IEJVVFRPTjsKICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImto
dG1sX2lzaW5kZXgiICkgPT0gMCApCiAgICAgICAgIG5ld1R5cGUgPSBJU0lOREVYOwotI2lmIEFQ
UExFX0NIQU5HRVMKICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgInNlYXJjaCIgKSA9PSAw
ICkKICAgICAgICAgbmV3VHlwZSA9IFNFQVJDSDsKICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCgg
dCwgInJhbmdlIiApID09IDAgKQogICAgICAgICBuZXdUeXBlID0gUkFOR0U7Ci0jZW5kaWYKICAg
ICBlbHNlCiAgICAgICAgIG5ld1R5cGUgPSBURVhUOwogCkBAIC0xNDkzLDEwICsxNDA2LDggQEAg
RE9NU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjp0eXBlKCkgYwogICAgIGNhc2UgSElEREVO
OiByZXR1cm4gImhpZGRlbiI7CiAgICAgY2FzZSBJTUFHRTogcmV0dXJuICJpbWFnZSI7CiAgICAg
Y2FzZSBCVVRUT046IHJldHVybiAiYnV0dG9uIjsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgY2Fz
ZSBTRUFSQ0g6IHJldHVybiAic2VhcmNoIjsKICAgICBjYXNlIFJBTkdFOiByZXR1cm4gInJhbmdl
IjsKLSNlbmRpZgogICAgIGNhc2UgSVNJTkRFWDogcmV0dXJuICIiOwogICAgIH0KICAgICByZXR1
cm4gIiI7CkBAIC0xNTM5LDkgKzE0NTAsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpj
YW5IYXZlU2VsZWN0CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBURVhUOgog
ICAgICAgICBjYXNlIFBBU1NXT1JEOgotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgY2FzZSBT
RUFSQ0g6Ci0jZW5kaWYKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTU1LDkgKzE0NjQsNyBAQCBpbnQgSFRNTElucHV0
RWxlbWVudEltcGw6OnNlbGVjdGlvblN0YXJ0CiAgICAgCiAgICAgc3dpdGNoIChtX3R5cGUpIHsK
ICAgICAgICAgY2FzZSBQQVNTV09SRDoKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGNhc2Ug
U0VBUkNIOgotI2VuZGlmCiAgICAgICAgIGNhc2UgVEVYVDoKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJMaW5lRWRpdCAqPihtX3JlbmRlciktPnNlbGVjdGlvblN0YXJ0KCk7
CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNTcyLDkgKzE0NzksNyBAQCBpbnQgSFRNTElucHV0RWxl
bWVudEltcGw6OnNlbGVjdGlvbkVuZCgpCiAgICAgCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAg
ICAgICAgY2FzZSBQQVNTV09SRDoKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGNhc2UgU0VB
UkNIOgotI2VuZGlmCiAgICAgICAgIGNhc2UgVEVYVDoKICAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxSZW5kZXJMaW5lRWRpdCAqPihtX3JlbmRlciktPnNlbGVjdGlvbkVuZCgpOwogICAg
ICAgICBkZWZhdWx0OgpAQCAtMTU4OSw5ICsxNDk0LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
SW1wbDo6c2V0U2VsZWN0aW9uUwogICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgICAg
IGNhc2UgUEFTU1dPUkQ6Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICBjYXNlIFNFQVJDSDoK
LSNlbmRpZgogICAgICAgICBjYXNlIFRFWFQ6CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5k
ZXJMaW5lRWRpdCAqPihtX3JlbmRlciktPnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0KTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTYwNiw5ICsxNTA5LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
SW1wbDo6c2V0U2VsZWN0aW9uRQogICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgICAg
IGNhc2UgUEFTU1dPUkQ6Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICBjYXNlIFNFQVJDSDoK
LSNlbmRpZgogICAgICAgICBjYXNlIFRFWFQ6CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5k
ZXJMaW5lRWRpdCAqPihtX3JlbmRlciktPnNldFNlbGVjdGlvbkVuZChlbmQpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xNjI2LDkgKzE1MjcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBs
OjpzZWxlY3QoICApCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJGaWxlQnV0dG9uKj4o
bV9yZW5kZXIpLT5zZWxlY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBB
U1NXT1JEOgotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgY2FzZSBTRUFSQ0g6Ci0jZW5kaWYK
ICAgICAgICAgY2FzZSBURVhUOgogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTGluZUVk
aXQqPihtX3JlbmRlciktPnNlbGVjdCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjM4LDkg
KzE1MzcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZWxlY3QoICApCiAgICAgICAg
IGNhc2UgSU1BR0U6CiAgICAgICAgIGNhc2UgSVNJTkRFWDoKICAgICAgICAgY2FzZSBSQURJTzoK
LSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGNhc2UgUkFOR0U6Ci0jZW5kaWYKICAgICAgICAg
Y2FzZSBSRVNFVDoKICAgICAgICAgY2FzZSBTVUJNSVQ6CiAgICAgICAgICAgICBicmVhazsKQEAg
LTE2NTMsOSArMTU1MCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldFNlbGVjdGlv
blIKICAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgICAgICBjYXNlIFBBU1NXT1JEOgot
I2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgY2FzZSBTRUFSQ0g6Ci0jZW5kaWYKICAgICAgICAg
Y2FzZSBURVhUOgogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTGluZUVkaXQgKj4obV9y
ZW5kZXIpLT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTY3NiwxMiArMTU3MSwxMCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpjbGlj
ayhib29sIHNlCiAgICAgICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6Y2xpY2so
c2VuZE1vdXNlRXZlbnRzLCBzaG93UHJlc3NlZExvb2spOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRklMRToKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgICAgICBpZiAocmVu
ZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckZpbGVCdXR0b24g
Kj4ocmVuZGVyZXIoKSktPmNsaWNrKHNlbmRNb3VzZUV2ZW50cyk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgICAgIEhUTUxHZW5lcmljRm9y
bUVsZW1lbnRJbXBsOjpjbGljayhzZW5kTW91c2VFdmVudHMsIHNob3dQcmVzc2VkTG9vayk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDSEVDS0JPWDoKQEAgLTE2ODksMTAgKzE1
ODIsOCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpjbGljayhib29sIHNlCiAgICAgICAg
IGNhc2UgSU1BR0U6CiAgICAgICAgIGNhc2UgSVNJTkRFWDoKICAgICAgICAgY2FzZSBQQVNTV09S
RDoKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGNhc2UgU0VBUkNIOgogICAgICAgICBjYXNl
IFJBTkdFOgotI2VuZGlmCiAgICAgICAgIGNhc2UgVEVYVDoKICAgICAgICAgICAgIEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsOjpjbGljayhzZW5kTW91c2VFdmVudHMsIHNob3dQcmVzc2VkTG9v
ayk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3MDcsOSArMTU5OCw3IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudEltcGw6OmFjY2Vzc0tleUFjdGkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFRFWFQ6CiAgICAgICAgIGNhc2UgUEFTU1dPUkQ6Ci0jaWYgQVBQTEVfQ0hBTkdFUwog
ICAgICAgICBjYXNlIFNFQVJDSDoKLSNlbmRpZgogICAgICAgICBjYXNlIElTSU5ERVg6CiAgICAg
ICAgICAgICBmb2N1cygpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzIwLDkgKzE2MDksNyBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjphY2Nlc3NLZXlBY3RpCiAgICAgICAgIGNhc2Ug
SU1BR0U6CiAgICAgICAgIGNhc2UgQlVUVE9OOgogICAgICAgICBjYXNlIEZJTEU6Ci0jaWYgQVBQ
TEVfQ0hBTkdFUwogICAgICAgICBjYXNlIFJBTkdFOgotI2VuZGlmCiAgICAgICAgICAgICAvLyBm
b2N1cwogICAgICAgICAgICAgZm9jdXMoKTsKIApAQCAtMTg1MSwxMCArMTczOCw4IEBAIGJvb2wg
SFRNTElucHV0RWxlbWVudEltcGw6OnJlbmRlcmVySXNOZWUKICAgICB7CiAgICAgY2FzZSBURVhU
OgogICAgIGNhc2UgUEFTU1dPUkQ6Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIGNhc2UgU0VBUkNI
OgogICAgIGNhc2UgUkFOR0U6Ci0jZW5kaWYKICAgICBjYXNlIElTSU5ERVg6CiAgICAgY2FzZSBD
SEVDS0JPWDoKICAgICBjYXNlIFJBRElPOgpAQCAtMTg3NSw5ICsxNzYwLDcgQEAgUmVuZGVyT2Jq
ZWN0ICpIVE1MSW5wdXRFbGVtZW50SW1wbDo6Y3JlYQogICAgIHsKICAgICBjYXNlIFRFWFQ6CiAg
ICAgY2FzZSBQQVNTV09SRDoKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgY2FzZSBTRUFSQ0g6Ci0j
ZW5kaWYKICAgICBjYXNlIElTSU5ERVg6ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyTGluZUVk
aXQodGhpcyk7CiAgICAgY2FzZSBDSEVDS0JPWDoKICAgICBjYXNlIFJBRElPOgpAQCAtMTg4OCw5
ICsxNzcxLDcgQEAgUmVuZGVyT2JqZWN0ICpIVE1MSW5wdXRFbGVtZW50SW1wbDo6Y3JlYQogICAg
ICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyQnV0dG9uKHRoaXMpOwogICAgIGNhc2UgSU1B
R0U6ICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJJbWFnZUJ1dHRvbih0aGlzKTsKICAgICBj
YXNlIEZJTEU6ICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyRmlsZUJ1dHRvbih0aGlzKTsK
LSAgICAjaWYgQVBQTEVfQ0hBTkdFUwogICAgIGNhc2UgUkFOR0U6ICAgIHJldHVybiBuZXcgKGFy
ZW5hKSBSZW5kZXJTbGlkZXIodGhpcyk7Ci0jZW5kaWYKICAgICBjYXNlIEhJRERFTjogICBicmVh
azsKICAgICB9CiAgICAgYXNzZXJ0KGZhbHNlKTsKQEAgLTE5NDAsMTIgKzE4MjEsMTAgQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgfQogICAgIH0KIAotI2lm
IEFQUExFX0NIQU5HRVMKICAgICAvLyBub3RlIHdlIGRvbid0IGRlYWwgd2l0aCBjYWxsaW5nIHBh
c3N3b3JkRmllbGRSZW1vdmVkKCkgb24gZGV0YWNoLCBiZWNhdXNlIHRoZSB0aW1pbmcKICAgICAv
LyB3YXMgc3VjaCB0aGF0IGl0IGNsZWFyZWQgb3VyIHN0YXRlIHRvbyBlYXJseQogICAgIGlmICht
X3R5cGUgPT0gUEFTU1dPUkQpCiAgICAgICAgIGdldERvY3VtZW50KCktPnBhc3N3b3JkRmllbGRB
ZGRlZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OmRldGFjaCgp
CkBAIC0xOTY2LDExICsxODQ1LDcgQEAgRE9NU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjph
bHRUZXh0KAogICAgIGlmIChhbHQuaXNOdWxsKCkpCiAgICAgICAgIGFsdCA9IGdldEF0dHJpYnV0
ZSh2YWx1ZUF0dHIpOwogICAgIGlmIChhbHQuaXNFbXB0eSgpKQotI2lmIEFQUExFX0NIQU5HRVMK
ICAgICAgICAgYWx0ID0gaW5wdXRFbGVtZW50QWx0VGV4dCgpOwotI2Vsc2UKLSAgICAgICAgYWx0
ID0gaTE4biggIlN1Ym1pdCIgKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIGFsdDsKIH0KQEAgLTIw
MDQsMTAgKzE4NzksOCBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGF0
CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBISURERU46CiAgICAgICAgIGNh
c2UgVEVYVDoKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGNhc2UgU0VBUkNIOgogICAgICAg
ICBjYXNlIFJBTkdFOgotI2VuZGlmCiAgICAgICAgIGNhc2UgUEFTU1dPUkQ6CiAgICAgICAgICAg
ICAvLyBhbHdheXMgc3VjY2Vzc2Z1bAogICAgICAgICAgICAgZW5jb2RpbmcuYXBwZW5kRGF0YShu
YW1lKCksIHZhbHVlKCkpOwpAQCAtMjA2Miw0OSArMTkzNSw4IEBAIGJvb2wgSFRNTElucHV0RWxl
bWVudEltcGw6OmFwcGVuZEZvcm1EYXQKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgIGVuY29kaW5nLmFw
cGVuZEZpbGUobmFtZSgpLCB2YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2Vs
c2UKLSAgICAgICAgICAgIEtVUkwgZmlsZXVybCgiZmlsZTovLy8iKTsKLSAgICAgICAgICAgIGZp
bGV1cmwuc2V0UGF0aCh2YWx1ZSgpLnFzdHJpbmcoKSk7Ci0gICAgICAgICAgICBLSU86OlVEU0Vu
dHJ5IGZpbGVzdGF0OwotCi0gICAgICAgICAgICBpZiAoIUtJTzo6TmV0QWNjZXNzOjpzdGF0KGZp
bGV1cmwsIGZpbGVzdGF0KSkgewotICAgICAgICAgICAgICAgIEtNZXNzYWdlQm94Ojpzb3JyeSgw
TCwgaTE4bigiRXJyb3IgZmV0Y2hpbmcgZmlsZSBmb3Igc3VibWlzc2lvbjpcbiUxIikuYXJnKEtJ
Tzo6TmV0QWNjZXNzOjpsYXN0RXJyb3JTdHJpbmcoKSkpOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgS0ZpbGVJdGVtIGZpbGVpdGVt
KGZpbGVzdGF0LCBmaWxldXJsLCB0cnVlLCBmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoZmlsZWl0
ZW0uaXNEaXIoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgUVN0cmluZyBsb2NhbDsKLSAgICAgICAgICAgIGlmICggS0lPOjpO
ZXRBY2Nlc3M6OmRvd25sb2FkKGZpbGV1cmwsIGxvY2FsKSApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgUUZpbGUgZmlsZShsb2NhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpbGUu
b3BlbihJT19SZWFkT25seSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBRQ1N0cmluZyBmaWxlYXJyYXkoZmlsZS5zaXplKCkrMSk7Ci0gICAgICAgICAgICAgICAgICAg
IGludCByZWFkYnl0ZXMgPSBmaWxlLnJlYWRCbG9jayggZmlsZWFycmF5LmRhdGEoKSwgZmlsZS5z
aXplKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIHJlYWRieXRlcyA+PSAwICkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZpbGVhcnJheVtyZWFkYnl0ZXNdID0gJ1wwJzsKLSAgICAgICAg
ICAgICAgICAgICAgZmlsZS5jbG9zZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGVuY29kaW5n
LmFwcGVuZERhdGEobmFtZSgpLCBmaWxlYXJyYXkpOwotICAgICAgICAgICAgICAgICAgICBLSU86
Ok5ldEFjY2Vzczo6cmVtb3ZlVGVtcEZpbGUoIGxvY2FsICk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIEtNZXNzYWdlQm94Ojpzb3JyeSgwTCwgaTE4bigiRXJyb3IgZmV0Y2hpbmcgZmlsZSBmb3Ig
c3VibWlzc2lvbjpcbiUxIikuYXJnKEtJTzo6TmV0QWNjZXNzOjpsYXN0RXJyb3JTdHJpbmcoKSkp
OwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBJU0lOREVYOgogICAg
ICAgICAgICAgZW5jb2RpbmcuYXBwZW5kRGF0YShuYW1lKCksIHZhbHVlKCkpOwpAQCAtMjE3NCwx
OSArMjAwNiwxMSBAQCBET01TdHJpbmcgSFRNTElucHV0RWxlbWVudEltcGw6OnZhbHVlV2l0CiAg
ICAgaWYgKHYuaXNFbXB0eSgpKSB7CiAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgICAg
ICAgICBjYXNlIFJFU0VUOgotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgICAgICB2ID0g
cmVzZXRCdXR0b25EZWZhdWx0TGFiZWwoKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgdiA9IGkx
OG4oIlJlc2V0Iik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgY2FzZSBTVUJNSVQ6Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAgICAgICAgIHYgPSBz
dWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgdiA9IGkx
OG4oIlN1Ym1pdCIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
ICAgIGNhc2UgQlVUVE9OOgpAQCAtMjE5NywxMCArMjAyMSw4IEBAIERPTVN0cmluZyBIVE1MSW5w
dXRFbGVtZW50SW1wbDo6dmFsdWVXaXQKICAgICAgICAgICAgIGNhc2UgSVNJTkRFWDoKICAgICAg
ICAgICAgIGNhc2UgUEFTU1dPUkQ6CiAgICAgICAgICAgICBjYXNlIFJBRElPOgotI2lmIEFQUExF
X0NIQU5HRVMKICAgICAgICAgICAgIGNhc2UgUkFOR0U6CiAgICAgICAgICAgICBjYXNlIFNFQVJD
SDoKLSNlbmRpZgogICAgICAgICAgICAgY2FzZSBURVhUOgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0yMjQxLDE3ICsyMDYzLDEzIEBAIGJvb2wgSFRNTElucHV0RWxlbWVu
dEltcGw6OnN0b3Jlc1ZhbHVlU2UKICAgICAgICAgY2FzZSBISURERU46CiAgICAgICAgIGNhc2Ug
SU1BR0U6CiAgICAgICAgIGNhc2UgUkFESU86Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICBj
YXNlIFJBTkdFOgotI2VuZGlmCiAgICAgICAgIGNhc2UgUkVTRVQ6CiAgICAgICAgIGNhc2UgU1VC
TUlUOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIElTSU5ERVg6CiAg
ICAgICAgIGNhc2UgUEFTU1dPUkQ6Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICBjYXNlIFNF
QVJDSDoKLSNlbmRpZgogICAgICAgICBjYXNlIFRFWFQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC0yMzcyLDcgKzIxOTAsNiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBs
OjpkZWZhdWx0RXZlbnRICiAgICAgICAgIH0gCiAgICAgfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwog
ICAgIC8vIFVzZSBrZXkgcHJlc3MgZXZlbnQgaGVyZSBzaW5jZSBzZW5kaW5nIHNpbXVsYXRlZCBt
b3VzZSBldmVudHMKICAgICAvLyBvbiBrZXkgZG93biBibG9ja3MgdGhlIHByb3BlciBzZW5kaW5n
IG9mIHRoZSBrZXkgcHJlc3MgZXZlbnQuCiAgICAgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNz
RXZlbnQgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkgewpAQCAtMjQ3Nyw3ICsyMjk0LDYgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SAogICAgICAgICAgICAgZXZ0
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAgICAgfQotI2VuZGlmCiAKICAgICBI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOwogfQpA
QCAtMjkyMCwxNCArMjczNiwxMCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0VmFs
dWUoY29uCiAKIFFTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzdGF0ZSgpCiB7Ci0jaWYg
IUFQUExFX0NIQU5HRVMKLSAgICBRU3RyaW5nIHN0YXRlOwotI2VuZGlmCiAgICAgUU1lbUFycmF5
PEhUTUxFbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAKICAgICBpbnQgbCA9IGl0
ZW1zLmNvdW50KCk7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgUUNoYXIgc3RhdGVDaGFyc1ts
XTsKICAgICAKICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbDsgaSsrKQpAQCAtMjkzNiwxMiArMjc0
OCw2IEBAIFFTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzdGF0ZSgpCiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHN0YXRlQ2hhcnNbaV0gPSAnLic7CiAgICAgUVN0cmluZyBzdGF0ZShz
dGF0ZUNoYXJzLCBsKTsKLSNlbHNlIC8qIEFQUExFX0NIQU5HRVMgbm90IGRlZmluZWQgKi8KLSAg
ICBzdGF0ZS5maWxsKCcuJywgbCk7Ci0gICAgZm9yKGludCBpID0gMDsgaSA8IGw7IGkrKykKLSAg
ICAgICAgaWYoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OICYmIHN0YXRpY19jYXN0PEhUTUxP
cHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSkKLSAgICAgICAgICAgIHN0
YXRlW2ldID0gJ1gnOwotI2VuZGlmIC8qIEFQUExFX0NIQU5HRVMgbm90IGRlZmluZWQgKi8KIAog
ICAgIHJldHVybiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6c3RhdGUoKSArIHN0YXRlOwog
fQpAQCAtMjk1NiwxMiArMjc2Miw4IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZXN0
b3JlU3RhdGUKICAgICBRU3RyaW5nIHN0YXRlID0gX3N0YXRlOwogICAgIGlmKCFzdGF0ZS5pc0Vt
cHR5KCkgJiYgIXN0YXRlLmNvbnRhaW5zKCdYJykgJiYgIW1fbXVsdGlwbGUpIHsKICAgICAgICAg
cVdhcm5pbmcoInNob3VsZCBub3QgaGFwcGVuIGluIHJlc3RvcmVTdGF0ZSEiKTsKLSNpZiBBUFBM
RV9DSEFOR0VTCiAgICAgICAgIC8vIEtXUVN0cmluZyBkb2Vzbid0IHN1cHBvcnQgdGhpcyBvcGVy
YXRpb24uIFNob3VsZCBuZXZlciBnZXQgaGVyZSBhbnl3YXkuCiAgICAgICAgIC8vc3RhdGVbMF0g
PSAnWCc7Ci0jZWxzZQotICAgICAgICBzdGF0ZVswXSA9ICdYJzsKLSNlbmRpZgogICAgIH0KIAog
ICAgIFFNZW1BcnJheTxIVE1MRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwpAQCAt
MzI3Niw3ICszMDc4LDYgQEAgdm9pZCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OnBhcnNlTWFwcGVk
QQogCiBib29sIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFM
aXN0JiBlbmNvZGVkX3ZhbHVlcywgYm9vbCkKIHsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8g
T25seSBSU0EgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4KICAgICBpZiAoIW1fa2V5VHlwZS5p
c051bGwoKSAmJiBzdHJjYXNlY21wKG1fa2V5VHlwZSwgInJzYSIpKSB7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTMyODcsMjEgKzMwODgsNiBAQCBib29sIEhUTUxLZXlnZW5FbGVtZW50SW1w
bDo6YXBwZW5kRm9ybURhCiAgICAgfQogICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEobmFt
ZSgpLCB2YWx1ZS51dGY4KCkpOwogICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBib29sIHN1
Y2Nlc3NmdWwgPSBmYWxzZTsKLQotICAgIC8vIHBvcCB1cCB0aGUgZmFuY3kgY2VydGlmaWNhdGUg
Y3JlYXRpb24gZGlhbG9nIGhlcmUKLSAgICBLU1NMS2V5R2VuICprZyA9IG5ldyBLU1NMS2V5R2Vu
KHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCAqPihtX3JlbmRlciktPndpZGdldCgpLCAiS2V5IEdl
bmVyYXRvciIsIHRydWUpOwotCi0gICAga2ctPnNldEtleVNpemUoMCk7Ci0gICAgc3VjY2Vzc2Z1
bCA9IChRRGlhbG9nOjpBY2NlcHRlZCA9PSBrZy0+ZXhlYygpKTsKLQotICAgIGRlbGV0ZSBrZzsK
LQotICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEobmFtZSgpLCAiZGVhZGJlZWYiKTsKLSAg
ICAKLSAgICByZXR1cm4gc3VjY2Vzc2Z1bDsKLSNlbmRpZgogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCkluZGV4OiBodG1sL2h0bWxfZm9ybWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS45NQpkaWZmIC1wIC11IC1yMS45NSBodG1sL2h0bWxfZm9ybWltcGwuaAotLS0gaHRt
bC9odG1sX2Zvcm1pbXBsLmgJMTEgTm92IDIwMDUgMDI6MTU6MzUgLTAwMDAJMS45NQorKysgaHRt
bC9odG1sX2Zvcm1pbXBsLmgJMTEgTm92IDIwMDUgMTk6MzQ6MDUgLTAwMDAKQEAgLTQzLDkgKzQz
LDcgQEAgbmFtZXNwYWNlIGtodG1sCiAgICAgY2xhc3MgUmVuZGVyU2VsZWN0OwogICAgIGNsYXNz
IFJlbmRlckxpbmVFZGl0OwogICAgIGNsYXNzIFJlbmRlckZpbGVCdXR0b247Ci0jaWYgQVBQTEVf
Q0hBTkdFUwogICAgIGNsYXNzIFJlbmRlclNsaWRlcjsKLSNlbmRpZgogfQogCiBuYW1lc3BhY2Ug
RE9NIHsKQEAgLTI5OSwxMCArMjk3LDggQEAgY2xhc3MgSFRNTElucHV0RWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNTAogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6UmVuZGVyTGluZUVkaXQ7CiAgICAg
ZnJpZW5kIGNsYXNzIGtodG1sOjpSZW5kZXJGaWxlQnV0dG9uOwogCi0jaWYgQVBQTEVfQ0hBTkdF
UwogICAgIGZyaWVuZCBjbGFzcyBIVE1MU2VsZWN0RWxlbWVudEltcGw7CiAgICAgZnJpZW5kIGNs
YXNzIGtodG1sOjpSZW5kZXJTbGlkZXI7Ci0jZW5kaWYKIAogcHVibGljOgogICAgIC8vIGRvIG5v
dCBjaGFuZ2UgdGhlIG9yZGVyIQpAQCAtMzE4LDEwICszMTQsOCBAQCBwdWJsaWM6CiAgICAgICAg
IEhJRERFTiwKICAgICAgICAgSU1BR0UsCiAgICAgICAgIEJVVFRPTgotI2lmIEFQUExFX0NIQU5H
RVMKICAgICAgICAgLFNFQVJDSCwKICAgICAgICAgUkFOR0UKLSNlbmRpZgogICAgIH07CiAKICAg
ICBIVE1MSW5wdXRFbGVtZW50SW1wbChEb2N1bWVudEltcGwgKmRvYywgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZiA9IDApOwpJbmRleDogaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTQKZGlmZiAtcCAtdSAtcjEuNTQgaHRtbC9odG1sX2lt
YWdlaW1wbC5jcHAKLS0tIGh0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTggTm92IDIwMDUgMDg6MTA6
NTkgLTAwMDAJMS41NAorKysgaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJMTEgTm92IDIwMDUgMTk6
MzQ6MDUgLTAwMDAKQEAgLTEwMiwxMSArMTAyLDkgQEAgdm9pZCBIVE1MSW1hZ2VMb2FkZXI6OnVw
ZGF0ZUZyb21FbGVtZW50KAogICAgICAgICBpZiAob2xkSW1hZ2UpCiAgICAgICAgICAgICBvbGRJ
bWFnZS0+ZGVyZWYodGhpcyk7CiAgICAgfQotI2lmIEFQUExFX0NIQU5HRVMKICAgICBraHRtbDo6
UmVuZGVySW1hZ2UgKnJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8a2h0bWw6OlJlbmRlckltYWdlKj4o
ZWxlbWVudCgpLT5yZW5kZXJlcigpKTsKICAgICBpZiAocmVuZGVyZXIpCiAgICAgICAgIHJlbmRl
cmVyLT5yZXNldEFuaW1hdGlvbigpOwotI2VuZGlmCiB9CiAKIHZvaWQgSFRNTEltYWdlTG9hZGVy
OjpkaXNwYXRjaExvYWRFdmVudCgpCkBAIC0yMjgsMTAgKzIyNiw4IEBAIHZvaWQgSFRNTEltYWdl
RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXQKICAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIo
bG9hZEV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5j
cmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOwog
ICAgIH0KLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNv
bXBvc2l0ZUF0dHIpCiAgICAgICAgIF9jb21wb3NpdGVPcGVyYXRvciA9IGF0dHItPnZhbHVlKCku
cXN0cmluZygpOwotI2VuZGlmCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRy
KSB7CiAgICAgICAgIERPTVN0cmluZyBuZXdOYW1lQXR0ciA9IGF0dHItPnZhbHVlKCk7CiAgICAg
ICAgIGlmIChpbkRvY3VtZW50KCkgJiYgZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkg
ewpJbmRleDogaHRtbC9odG1sX2lubGluZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS41MwpkaWZmIC1wIC11IC1yMS41MyBodG1sL2h0bWxfaW5saW5laW1wbC5j
cHAKLS0tIGh0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAk4IE5vdiAyMDA1IDA4OjEwOjU5IC0wMDAw
CTEuNTMKKysrIGh0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowNSAt
MDAwMApAQCAtOTYsMTEgKzk2LDcgQEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmlzRm9j
dXNhYmxlKAogCiBib29sIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6aXNNb3VzZUZvY3VzYWJsZSgp
IGNvbnN0CiB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCi0g
ICAgcmV0dXJuIGlzRm9jdXNhYmxlKCk7Ci0jZW5kaWYKIH0KIAogYm9vbCBIVE1MQW5jaG9yRWxl
bWVudEltcGw6OmlzS2V5Ym9hcmRGb2N1c2FibGUoKSBjb25zdApJbmRleDogaHRtbC9odG1sX29i
amVjdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44OApkaWZm
IC1wIC11IC1yMS44OCBodG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAKLS0tIGh0bWwvaHRtbF9vYmpl
Y3RpbXBsLmNwcAk4IE5vdiAyMDA1IDA4OjExOjAwIC0wMDAwCTEuODgKKysrIGh0bWwvaHRtbF9v
YmplY3RpbXBsLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowNSAtMDAwMApAQCAtNTAsOSArNTAsNyBA
QAogI2luY2x1ZGUgImphdmEva2phdmFhcHBsZXRjb250ZXh0LmgiCiAjZW5kaWYKIAotI2lmIEFQ
UExFX0NIQU5HRVMKICNpbmNsdWRlICJLV1FLSFRNTFBhcnQuaCIKLSNlbmRpZgogCiB1c2luZyBu
YW1lc3BhY2Uga2h0bWw7CiAKQEAgLTIwOSwzNiArMjA3LDEzIEBAIFJlbmRlck9iamVjdCAqSFRN
TEFwcGxldEVsZW1lbnRJbXBsOjpjcmUKIH0KIAogYm9vbCBIVE1MQXBwbGV0RWxlbWVudEltcGw6
OmdldE1lbWJlcihjb25zdCBRU3RyaW5nICYgbmFtZSwgSlR5cGUgJiB0eXBlLCBRU3RyaW5nICYg
dmFsKSB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwotICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCi0jaWZu
ZGVmIFFfV1NfUVdTIC8vIFdlIGRvbid0IGhhdmUgSmF2YSBpbiBRdCBFbWJlZGRlZAotICAgIGlm
ICggIW1fcmVuZGVyIHx8ICFtX3JlbmRlci0+aXNBcHBsZXQoKSApCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBLSmF2YUFwcGxldFdpZGdldCAqdyA9IHN0YXRpY19jYXN0PEtKYXZhQXBwbGV0
V2lkZ2V0Kj4oc3RhdGljX2Nhc3Q8UmVuZGVyQXBwbGV0Kj4obV9yZW5kZXIpLT53aWRnZXQoKSk7
Ci0gICAgcmV0dXJuICh3ICYmIHctPmFwcGxldCgpICYmIHctPmFwcGxldCgpLT5nZXRNZW1iZXIo
bmFtZSwgdHlwZSwgdmFsKSk7Ci0jZWxzZQogICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotI2Vu
ZGlmCiB9CiAKIGJvb2wgSFRNTEFwcGxldEVsZW1lbnRJbXBsOjpjYWxsTWVtYmVyKGNvbnN0IFFT
dHJpbmcgJiBuYW1lLCBjb25zdCBRU3RyaW5nTGlzdCAmIGFyZ3MsIEpUeXBlICYgdHlwZSwgUVN0
cmluZyAmIHZhbCkgewotI2lmIEFQUExFX0NIQU5HRVMKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxz
ZQotI2lmbmRlZiBRX1dTX1FXUyAvLyBXZSBkb24ndCBoYXZlIEphdmEgaW4gUXQgRW1iZWRkZWQK
LSAgICBpZiAoICFtX3JlbmRlciB8fCAhbV9yZW5kZXItPmlzQXBwbGV0KCkgKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgS0phdmFBcHBsZXRXaWRnZXQgKncgPSBzdGF0aWNfY2FzdDxLSmF2
YUFwcGxldFdpZGdldCo+KHN0YXRpY19jYXN0PFJlbmRlckFwcGxldCo+KG1fcmVuZGVyKS0+d2lk
Z2V0KCkpOwotICAgIHJldHVybiAodyAmJiB3LT5hcHBsZXQoKSAmJiB3LT5hcHBsZXQoKS0+Y2Fs
bE1lbWJlcihuYW1lLCBhcmdzLCB0eXBlLCB2YWwpKTsKLSNlbHNlCiAgICAgcmV0dXJuIGZhbHNl
OwotI2VuZGlmCi0jZW5kaWYKIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKIEtKUzo6QmluZGluZ3M6
Okluc3RhbmNlICpIVE1MQXBwbGV0RWxlbWVudEltcGw6OmdldEFwcGxldEluc3RhbmNlKCkgY29u
c3QKIHsKICAgICBLSFRNTFBhcnQqIHBhcnQgPSBnZXREb2N1bWVudCgpLT5wYXJ0KCk7CkBAIC0y
NzUsNyArMjUwLDYgQEAgYm9vbCBIVE1MQXBwbGV0RWxlbWVudEltcGw6OmFsbFBhcmFtc0F2YQog
ewogICAgIHJldHVybiBtX2FsbFBhcmFtc0F2YWlsYWJsZTsKIH0KLSNlbmRpZgogCiBET01TdHJp
bmcgSFRNTEFwcGxldEVsZW1lbnRJbXBsOjphbGlnbigpIGNvbnN0CiB7CkBAIC00MDIsNyArMzc2
LDYgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29ucwogICAgIHJldHVy
biBuZXdDaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykgfHwgSFRNTEVsZW1lbnRJbXBsOjpjaGVj
a0RURChuZXdDaGlsZCk7CiB9CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiBLSlM6OkJpbmRpbmdzOjpJ
bnN0YW5jZSAqSFRNTEVtYmVkRWxlbWVudEltcGw6OmdldEVtYmVkSW5zdGFuY2UoKSBjb25zdAog
ewogICAgIEtIVE1MUGFydCogcGFydCA9IGdldERvY3VtZW50KCktPnBhcnQoKTsKQEAgLTQyNiw3
ICszOTksNiBAQCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqSFRNTEVtYmVkRWxlbWVuCiAgICAg
fQogICAgIHJldHVybiBlbWJlZEluc3RhbmNlOwogfQotI2VuZGlmCiAKIGJvb2wgSFRNTEVtYmVk
RWxlbWVudEltcGw6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CkBAIC01NTQsMTEgKzUyNiw3IEBA
IGJvb2wgSFRNTEVtYmVkRWxlbWVudEltcGw6OmlzVVJMQXR0cmlidXQKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpIVE1MT2JqZWN0RWxlbWVudEltcGwoRG9j
dW1lbnRJbXBsICpkb2MpIAotI2lmIEFQUExFX0NIQU5HRVMKIDogSFRNTEVsZW1lbnRJbXBsKG9i
amVjdFRhZywgZG9jKSwgbV9pbWFnZUxvYWRlcigwKSwgb2JqZWN0SW5zdGFuY2UoMCkKLSNlbHNl
Ci06IEhUTUxFbGVtZW50SW1wbChvYmplY3RUYWcsIGRvYyksIG1faW1hZ2VMb2FkZXIoMCkKLSNl
bmRpZgogewogICAgIG5lZWRXaWRnZXRVcGRhdGUgPSBmYWxzZTsKICAgICBtX3VzZUZhbGxiYWNr
Q29udGVudCA9IGZhbHNlOwpAQCAtNTc2LDcgKzU0NCw2IEBAIGJvb2wgSFRNTE9iamVjdEVsZW1l
bnRJbXBsOjpjaGVja0RURChjb24KICAgICByZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUocGFy
YW1UYWcpIHx8IEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwogfQogCi0jaWYg
QVBQTEVfQ0hBTkdFUwogS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxPYmplY3RFbGVtZW50
SW1wbDo6Z2V0T2JqZWN0SW5zdGFuY2UoKSBjb25zdAogewogICAgIEtIVE1MUGFydCogcGFydCA9
IGdldERvY3VtZW50KCktPnBhcnQoKTsKQEAgLTYwMyw3ICs1NzAsNiBAQCBLSlM6OkJpbmRpbmdz
OjpJbnN0YW5jZSAqSFRNTE9iamVjdEVsZW1lCiAKICAgICByZXR1cm4gb2JqZWN0SW5zdGFuY2U7
CiB9Ci0jZW5kaWYKIAogSFRNTEZvcm1FbGVtZW50SW1wbCAqSFRNTE9iamVjdEVsZW1lbnRJbXBs
Ojpmb3JtKCkgY29uc3QKIHsKQEAgLTcxNiwxNiArNjgyLDggQEAgYm9vbCBIVE1MT2JqZWN0RWxl
bWVudEltcGw6OnJlbmRlcmVySXNOZQogICAgIGlmICghcGFydCB8fCAhcGFydC0+cGx1Z2luc0Vu
YWJsZWQoKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotI2lmIEFQUExFX0NIQU5H
RVMKICAgICAvLyBFdmVudHVhbGx5IHdlIHdpbGwgbWVyZ2Ugd2l0aCB0aGUgYmV0dGVyIHZlcnNp
b24gb2YgdGhpcyBjaGVjayBvbiB0aGUgdGlwIG9mIHRyZWUuCiAgICAgLy8gVW50aWwgdGhlbiwg
anVzdCBsZWF2ZSBpdCBvdXQuCi0jZWxzZQotICAgIEtVUkwgdSA9IGdldERvY3VtZW50KCktPmNv
bXBsZXRlVVJMKHVybCk7Ci0gICAgZm9yIChLSFRNTFBhcnQqIHBhcnQgPSB3LT5wYXJ0KCktPnBh
cmVudFBhcnQoKTsgcGFydDsgcGFydCA9IHBhcnQtPnBhcmVudFBhcnQoKSkKLSAgICAgICAgaWYg
KHBhcnQtPnVybCgpID09IHUpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IGh0bWwvaHRtbF9vYmplY3Rp
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX29iamVjdGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZmIC1wIC11IC1y
MS4zOSBodG1sL2h0bWxfb2JqZWN0aW1wbC5oCi0tLSBodG1sL2h0bWxfb2JqZWN0aW1wbC5oCTgg
Tm92IDIwMDUgMDg6MTE6MDEgLTAwMDAJMS4zOQorKysgaHRtbC9odG1sX29iamVjdGltcGwuaAkx
MSBOb3YgMjAwNSAxOTozNDowNSAtMDAwMApAQCAtMjgsOSArMjgsNyBAQAogI2luY2x1ZGUgInht
bC9kb21fc3RyaW5naW1wbC5oIgogI2luY2x1ZGUgImphdmEva2phdmFhcHBsZXRjb250ZXh0Lmgi
CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvcnVudGltZS5o
PgotI2VuZGlmCiAKIGNsYXNzIFFTdHJpbmdMaXN0OwogCkBAIC05MSwxMSArODksOSBAQCBwdWJs
aWM6CiAgICAgRE9NU3RyaW5nIHdpZHRoKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRXaWR0aChjb25z
dCBET01TdHJpbmcgJik7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgdmlydHVhbCBib29sIGFs
bFBhcmFtc0F2YWlsYWJsZSgpOwogICAgIHZvaWQgc2V0dXBBcHBsZXQoKSBjb25zdDsKICAgICBL
SlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqZ2V0QXBwbGV0SW5zdGFuY2UoKSBjb25zdDsKLSNlbmRp
ZgogCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKQEAgLTEwNiwxMCArMTAyLDggQEAgcHJvdGVj
dGVkOgogcHJpdmF0ZToKICAgICBET01TdHJpbmcgb2xkTmFtZUF0dHI7CiAgICAgRE9NU3RyaW5n
IG9sZElkQXR0cjsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgbXV0YWJsZSBLSlM6OkJpbmRpbmdz
OjpJbnN0YW5jZSAqYXBwbGV0SW5zdGFuY2U7CiAgICAgYm9vbCBtX2FsbFBhcmFtc0F2YWlsYWJs
ZTsKLSNlbmRpZgogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM1LDkgKzEyOSw3IEBA
IHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRl
SW1wbCAqYXR0cikgY29uc3Q7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgS0pTOjpCaW5kaW5n
czo6SW5zdGFuY2UgKmdldEVtYmVkSW5zdGFuY2UoKSBjb25zdDsKLSNlbmRpZgogCiAgICAgUVN0
cmluZyB1cmw7CiAgICAgUVN0cmluZyBwbHVnaW5QYWdlOwpAQCAtMTQ1LDkgKzEzNyw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBET01TdHJpbmcgb2xkTmFtZUF0dHI7Ci0jaWYgQVBQTEVf
Q0hBTkdFUwogICAgIG11dGFibGUgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKmVtYmVkSW5zdGFu
Y2U7Ci0jZW5kaWYKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI0MSw5ICsyMzEsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb21wbGV0ZShib29sIGNvbXBsZXRlKTsKICAgICAKICAg
ICBib29sIGlzRG9jTmFtZWRJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9kb2NOYW1lZEl0ZW07IH0K
LSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKmdldE9iamVj
dEluc3RhbmNlKCkgY29uc3Q7Ci0jZW5kaWYKIAogICAgIFFTdHJpbmcgc2VydmljZVR5cGU7CiAg
ICAgUVN0cmluZyB1cmw7CkBAIC0yNTYsOSArMjQ0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVw
ZGF0ZURvY05hbWVkSXRlbSgpOwogICAgIERPTVN0cmluZyBvbGRJZEF0dHI7CiAgICAgRE9NU3Ry
aW5nIG9sZE5hbWVBdHRyOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICBtdXRhYmxlIEtKUzo6Qmlu
ZGluZ3M6Okluc3RhbmNlICpvYmplY3RJbnN0YW5jZTsKLSNlbmRpZgogICAgIGJvb2wgbV9jb21w
bGV0ZTsKICAgICBib29sIG1fZG9jTmFtZWRJdGVtOwogfTsKSW5kZXg6IGh0bWwvaHRtbF90YWJs
ZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0
bWwvaHRtbF90YWJsZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY3CmRpZmYgLXAg
LXUgLXIxLjY3IGh0bWwvaHRtbF90YWJsZWltcGwuY3BwCi0tLSBodG1sL2h0bWxfdGFibGVpbXBs
LmNwcAk4IE5vdiAyMDA1IDA4OjExOjAxIC0wMDAwCTEuNjcKKysrIGh0bWwvaHRtbF90YWJsZWlt
cGwuY3BwCTExIE5vdiAyMDA1IDE5OjM0OjA2IC0wMDAwCkBAIC02MCwxMCArNjAsNiBAQCBIVE1M
VGFibGVFbGVtZW50SW1wbDo6SFRNTFRhYmxlRWxlbWVudEltCiAgICAgZm9vdCA9IDA7CiAgICAg
Zmlyc3RCb2R5ID0gMDsKIAotI2lmIDAKLSAgICBydWxlcyA9IE5vbmU7Ci0gICAgZnJhbWUgPSBW
b2lkOwotI2VuZGlmCiAgCiAgICAgcGFkZGluZyA9IDE7CiAgICAgCkBAIC00NDksMTMgKzQ0NSw2
IEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXQKICAgICAgICAgICAg
IERPTVN0cmluZyB2ID0gUVN0cmluZzo6bnVtYmVyKCBib3JkZXIgKTsKICAgICAgICAgICAgIGFk
ZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9CT1JERVJfV0lEVEgsIHYgKTsKICAgICAgICAgfQot
I2lmIDAKLSAgICAgICAgLy8gd2FudGVkIGJ5IEhUTUw0IHNwZWNzCi0gICAgICAgIGlmIChtX25v
Qm9yZGVyKQotICAgICAgICAgICAgZnJhbWUgPSBWb2lkLCBydWxlcyA9IE5vbmU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGZyYW1lID0gQm94LCBydWxlcyA9IEFsbDsKLSNlbmRpZgogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJnY29sb3JBdHRyKSB7CiAgICAgICAgIGFkZENT
U0NvbG9yKGF0dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJvcmRlcmNvbG9yQXR0cikgewpAQCAtNDcz
LDM5ICs0NjIsNyBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAg
ICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGFkZENTU0ltYWdlUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSwgZ2V0RG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwodXJsKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZnJhbWVBdHRyKSB7
Ci0jaWYgMAotICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJ2b2lkIiAp
ID09IDAgKQotICAgICAgICAgICAgZnJhbWUgPSBWb2lkOwotICAgICAgICBlbHNlIGlmICggc3Ry
Y2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImJvcmRlciIgKSA9PSAwICkKLSAgICAgICAgICAgIGZy
YW1lID0gQm94OwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwg
ImJveCIgKSA9PSAwICkKLSAgICAgICAgICAgIGZyYW1lID0gQm94OwotICAgICAgICBlbHNlIGlm
ICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImhzaWRlcyIgKSA9PSAwICkKLSAgICAgICAg
ICAgIGZyYW1lID0gSHNpZGVzOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+
dmFsdWUoKSwgInZzaWRlcyIgKSA9PSAwICkKLSAgICAgICAgICAgIGZyYW1lID0gVnNpZGVzOwot
ICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImFib3ZlIiApID09
IDAgKQotICAgICAgICAgICAgZnJhbWUgPSBBYm92ZTsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNh
c2VjbXAoIGF0dHItPnZhbHVlKCksICJiZWxvdyIgKSA9PSAwICkKLSAgICAgICAgICAgIGZyYW1l
ID0gQmVsb3c7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAi
bGhzIiApID09IDAgKQotICAgICAgICAgICAgZnJhbWUgPSBMaHM7Ci0gICAgICAgIGVsc2UgaWYg
KCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAicmhzIiApID09IDAgKQotICAgICAgICAgICAg
ZnJhbWUgPSBSaHM7Ci0jZW5kaWYKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBydWxl
c0F0dHIpIHsKLSNpZiAwCi0gICAgICAgIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwg
Im5vbmUiICkgPT0gMCApCi0gICAgICAgICAgICBydWxlcyA9IE5vbmU7Ci0gICAgICAgIGVsc2Ug
aWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiZ3JvdXBzIiApID09IDAgKQotICAgICAg
ICAgICAgcnVsZXMgPSBHcm91cHM7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRy
LT52YWx1ZSgpLCAicm93cyIgKSA9PSAwICkKLSAgICAgICAgICAgIHJ1bGVzID0gUm93czsKLSAg
ICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJjb2xzIiApID09IDAg
KQotICAgICAgICAgICAgcnVsZXMgPSBDb2xzOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNt
cCggYXR0ci0+dmFsdWUoKSwgImFsbCIgKSA9PSAwICkKLSAgICAgICAgICAgIHJ1bGVzID0gQWxs
OwotI2VuZGlmCiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY2VsbHNwYWNpbmdBdHRy
KSB7CiAgICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBh
ZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1NQQUNJTkcsIGF0dHItPnZhbHVlKCkp
OwpAQCAtNTIxLDExICs0NzgsNiBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnRJbXBsOjpwYXJzZU1h
cHBlZEF0CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2xzQXR0
cikgewogICAgICAgICAvLyAjIyMKLSNpZiAwCi0gICAgICAgIGludCBjOwotICAgICAgICBjID0g
YXR0ci0+dmFsKCktPnRvSW50KCk7Ci0gICAgICAgIGFkZENvbHVtbnMoYy10b3RhbENvbHMpOwot
I2VuZGlmCiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdnNwYWNlQXR0cikgewogICAg
ICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1RPUCwgYXR0ci0+dmFsdWUo
KSk7CiAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBh
dHRyLT52YWx1ZSgpKTsKSW5kZXg6IGh0bWwvaHRtbHBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMjEKZGlmZiAtcCAtdSAtcjEuMTIxIGh0bWwvaHRtbHBhcnNlci5j
cHAKLS0tIGh0bWwvaHRtbHBhcnNlci5jcHAJOCBOb3YgMjAwNSAwODoxMTowMiAtMDAwMAkxLjEy
MQorKysgaHRtbC9odG1scGFyc2VyLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowNiAtMDAwMApAQCAt
MTMxOSwxMSArMTMxOSw3IEBAIE5vZGVJbXBsICpIVE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4KCBU
b2sKICAgICBpc0luZGV4LT5zZXRBdHRyaWJ1dGVNYXAoYXR0cnMpOwogICAgIGlzSW5kZXgtPnNl
dEF0dHJpYnV0ZSh0eXBlQXR0ciwgImtodG1sX2lzaW5kZXgiKTsKIAotI2lmIEFQUExFX0NIQU5H
RVMKICAgICBET01TdHJpbmcgdGV4dCA9IHNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpOwot
I2Vsc2UKLSAgICBET01TdHJpbmcgdGV4dCA9IGkxOG4oIlRoaXMgaXMgYSBzZWFyY2hhYmxlIGlu
ZGV4LiBFbnRlciBzZWFyY2gga2V5d29yZHM6ICIpOwotI2VuZGlmCiAgICAgaWYgKGF0dHJzKSB7
CiAgICAgICAgIGlmIChBdHRyaWJ1dGVJbXBsICphID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0o
cHJvbXB0QXR0cikpCiAgICAgICAgICAgICB0ZXh0ID0gYS0+dmFsdWUoKS5kb21TdHJpbmcoKSAr
ICIgIjsKSW5kZXg6IGh0bWwvaHRtbHRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xMjUKZGlmZiAtcCAtdSAtcjEuMTI1IGh0bWwvaHRtbHRva2VuaXplci5j
cHAKLS0tIGh0bWwvaHRtbHRva2VuaXplci5jcHAJOCBOb3YgMjAwNSAwODoxMTowMiAtMDAwMAkx
LjEyNQorKysgaHRtbC9odG1sdG9rZW5pemVyLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowNiAtMDAw
MApAQCAtNDg4LDEwICs0ODgsOCBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVy
OjpzY3JpCiBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpcHRFeGVjdXRp
b24oY29uc3QgUVN0cmluZyYgc3RyLCBTdGF0ZSBzdGF0ZSwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBzY3JpcHRVUkwsIGludCBi
YXNlTGluZSkKIHsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYgKCF2aWV3IHx8ICF2aWV3LT5w
YXJ0KCkpCiAgICAgICAgIHJldHVybiBzdGF0ZTsKLSNlbmRpZgogICAgIGJvb2wgb2xkc2NyaXB0
ID0gc3RhdGUuaW5TY3JpcHQoKTsKICAgICBtX2V4ZWN1dGluZ1NjcmlwdCsrOwogICAgIHN0YXRl
LnNldEluU2NyaXB0KGZhbHNlKTsKSW5kZXg6IGh0bWwvaHRtbHRva2VuaXplci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ2CmRpZmYgLXAgLXUgLXIxLjQ2IGh0bWwvaHRtbHRv
a2VuaXplci5oCi0tLSBodG1sL2h0bWx0b2tlbml6ZXIuaAk4IE5vdiAyMDA1IDA4OjExOjAzIC0w
MDAwCTEuNDYKKysrIGh0bWwvaHRtbHRva2VuaXplci5oCTExIE5vdiAyMDA1IDE5OjM0OjA2IC0w
MDAwCkBAIC0zOCwxMSArMzgsOSBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5o
IgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2lm
ZGVmIF9fT0JKQ19fCiAjZGVmaW5lIGlkIGlkX0FWT0lEX0tFWVdPUkQKICNlbmRpZgotI2VuZGlm
CiAKIGNsYXNzIEtDaGFyc2V0czsKIGNsYXNzIEhUTUxQYXJzZXI7CkBAIC0zODQsOCArMzgyLDYg
QEAgdm9pZCBwYXJzZUhUTUxEb2N1bWVudEZyYWdtZW50KGNvbnN0IERPTQogCiB9CiAKLSNpZiBB
UFBMRV9DSEFOR0VTCiAjdW5kZWYgaWQKLSNlbmRpZgogCiAjZW5kaWYgLy8gSFRNTFRPS0VOSVpF
UgpJbmRleDogbWlzYy9kZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9taXNjL2RlY29kZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ1
CmRpZmYgLXAgLXUgLXIxLjQ1IG1pc2MvZGVjb2Rlci5jcHAKLS0tIG1pc2MvZGVjb2Rlci5jcHAJ
MyBPY3QgMjAwNSAyMToxMjozNSAtMDAwMAkxLjQ1CisrKyBtaXNjL2RlY29kZXIuY3BwCTExIE5v
diAyMDA1IDE5OjM0OjA2IC0wMDAwCkBAIC0zMDIsNyArMzAyLDYgQEAgdm9pZCBEZWNvZGVyOjpz
ZXRFbmNvZGluZyhjb25zdCBjaGFyICpfZQogICAgIGlmKGVuYy5pc051bGwoKSB8fCBlbmMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgUVRleHRD
b2RlYyAqY29kZWMgPSAodHlwZSA9PSBFbmNvZGluZ0Zyb21NZXRhVGFnIHx8IHR5cGUgPT0gRW5j
b2RpbmdGcm9tWE1MSGVhZGVyKQogICAgICAgICA/IFFUZXh0Q29kZWM6OmNvZGVjRm9yTmFtZUVp
Z2h0Qml0T25seShlbmMpCiAgICAgICAgIDogUVRleHRDb2RlYzo6Y29kZWNGb3JOYW1lKGVuYyk7
CkBAIC0zMTAsMjEgKzMwOSw2IEBAIHZvaWQgRGVjb2Rlcjo6c2V0RW5jb2RpbmcoY29uc3QgY2hh
ciAqX2UKICAgICAgICAgZW5jID0gY29kZWMtPm5hbWUoKTsKICAgICAgICAgdmlzdWFsUlRMID0g
Y29kZWMtPnVzZXNWaXN1YWxPcmRlcmluZygpOwogICAgIH0KLSNlbHNlCi0gICAgaWYoZW5jID09
ICJ2aXN1YWwiKSAvLyBoZWJyZXcgdmlzdWFsbHkgb3JkZXJlZAotICAgICAgICBlbmMgPSAiaXNv
ODg1OS04IjsKLSAgICBib29sIGI7Ci0gICAgUVRleHRDb2RlYyAqY29kZWMgPSBLR2xvYmFsOjpj
aGFyc2V0cygpLT5jb2RlY0Zvck5hbWUoZW5jLCBiKTsKLSAgICBpZiAoIWIpCi0gICAgICAgIGNv
ZGVjID0gMDsKLQotICAgIGlmIChjb2RlYyAmJiBjb2RlYy0+bWliRW51bSgpID09IDExKSAgewot
ICAgICAgICAvLyB2aXN1YWxseSBvcmRlcmVkIHVubGVzcyBvbmUgb2YgdGhlIGZvbGxvd2luZwot
ICAgICAgICBpZiggIShlbmMgPT0gImlzby04ODU5LTgtaSIgfHwgZW5jID09ICJpc29fODg1OS04
LWkiCi0gICAgICAgICAgICAgICAgfHwgZW5jID09ICJjc2lzbzg4NTk4aSIgfHwgZW5jID09ICJs
b2dpY2FsIikgKQotICAgICAgICAgICAgdmlzdWFsUlRMID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYK
IAogICAgIGlmKCBjb2RlYyApIHsgLy8gaW4gY2FzZSB0aGUgY29kZWMgZGlkbid0IGV4aXN0LCB3
ZSBrZWVwIHRoZSBvbGQgb25lIChmaXhlcyBzb21lIHNpdGVzIHNwZWNpZnlpbmcgaW52YWxpZCBj
b2RlY3MpCiAgICAgICAgIG1fY29kZWMgPSBjb2RlYzsKQEAgLTQ2MSwyMiArNDQ1LDcgQEAgUVN0
cmluZyBEZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hhciAqZGF0YQogICAgICAgICBrZERlYnVnKDYw
MDUpIDw8ICJsb29raW5nIGZvciBjaGFyc2V0IGRlZmluaXRpb24iIDw8IGVuZGw7CiAjZW5kaWYK
ICAgICAgICAgeyAvLyBleHRyYSBsZXZlbCBvZiBicmFjZXMgdG8ga2VlcCBpbmRlbnRpbmcgbWF0
Y2hpbmcgb3JpZ2luYWwgZm9yIGJldHRlciBkaWZmJ2luZwotI2lmIEFQUExFX0NIQU5HRVMKICAg
ICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgbGVuKTsKLSNlbHNlCi0gICAgICAgICAgICBp
ZihtX2NvZGVjLT5taWJFbnVtKCkgIT0gMTAwMCkgLy8gdXRmMTYKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyAjIyMgaGFjayBmb3IgYSBidWcgaW4gUVRleHRDb2RlYy4gSXQgY3V0
J3MgdGhlIGlucHV0IHN0cmVhbQotICAgICAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlcmUgYXJl
IFwwIGluIGl0LiBaRE5FVCBoYXMgdGhlbSBpbnNpZGUuLi4gOi0oCi0gICAgICAgICAgICAgICAg
Y2hhciAqZCA9IGNvbnN0X2Nhc3Q8Y2hhciAqPihkYXRhKTsKLSAgICAgICAgICAgICAgICBpbnQg
aSA9IGxlbiAtIDE7Ci0gICAgICAgICAgICAgICAgd2hpbGUoaSA+PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmKCooZCtpKSA9PSAwKSAqKGQraSkgPSAnICc7Ci0gICAgICAgICAgICAgICAg
ICAgIGktLTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
dWZmZXIgKz0gUUNTdHJpbmcoZGF0YSwgbGVuKzEpOwotI2VuZGlmCiAgICAgICAgICAgICAvLyB3
ZSBzdGlsbCBkb24ndCBoYXZlIGFuIGVuY29kaW5nLCBhbmQgYXJlIGluIHRoZSBoZWFkCiAgICAg
ICAgICAgICAvLyB0aGUgZm9sbG93aW5nIHRhZ3MgYXJlIGFsbG93ZWQgaW4gPGhlYWQ+OgogICAg
ICAgICAgICAgLy8gU0NSSVBUfFNUWUxFfE1FVEF8TElOS3xPQkpFQ1R8VElUTEV8QkFTRQpAQCAt
NDkxLDEzICs0NjAsOCBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShjb25zdCBjaGFyICpkYXRh
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgd2l0aGluVGl0bGUgPSBmYWxzZTsKIAot
I2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciA9IGJ1ZmZlci5s
YXRpbjEoKTsKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBFbmQgPSBwdHIgKyBidWZmZXIubGVu
Z3RoKCk7Ci0jZWxzZQotICAgICAgICAgICAgY29uc3QgY2hhciAqcHRyID0gYnVmZmVyLmRhdGEo
KTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBFbmQgPSBidWZmZXIubGVuZ3RoKCk7Ci0jZW5k
aWYKICAgICAgICAgICAgIHdoaWxlKHB0ciAhPSBwRW5kKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGlmKCpwdHIgPT0gJzwnKSB7CkBAIC01MjksMTEgKzQ5Myw3IEBAIFFTdHJpbmcg
RGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIgKmRhdGEKICAgICAgICAgICAgICAgICAgICAgICAg
IGdvdG8gZm91bmQ7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHRyWzBdID09IDAg
JiYgcHRyWzFdID09ICc/JyAmJiBwdHJbMl0gPT0gMCAmJiBwdHJbM10gPT0gJ3gnICYmIHB0cls0
XSA9PSAwICYmIHB0cls1XSA9PSAnbScgJiYgcHRyWzZdID09IDAgJiYgcHRyWzddID09ICdsJykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVVRGLTE2IHdpdGhvdXQgQk9NCi0jaWYgQVBQ
TEVfQ0hBTkdFUwogICAgICAgICAgICAgICAgICAgICAgICAgc2V0RW5jb2RpbmcoKChwdHIgLSBi
dWZmZXIubGF0aW4xKCkpICUgMikgPyAiVVRGLTE2TEUiIDogIlVURi0xNkJFIiwgQXV0b0RldGVj
dGVkRW5jb2RpbmcpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEVuY29kaW5n
KCgocHRyIC0gYnVmZmVyLmRhdGEoKSkgJSAyKSA/ICJVVEYtMTZMRSIgOiAiVVRGLTE2QkUiLCBB
dXRvRGV0ZWN0ZWRFbmNvZGluZyk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gZm91bmQ7CiAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtNjE1LDEyICs1NzUsOCBAQCBR
U3RyaW5nIERlY29kZXI6OmRlY29kZShjb25zdCBjaGFyICpkYXRhCiAgICAgfQogCiAgZm91bmQ6
Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIC8vIERvIHRoZSBhdXRvLWRldGVjdCBpZiBvdXIgZGVm
YXVsdCBlbmNvZGluZyBpcyBvbmUgb2YgdGhlIEphcGFuZXNlIG9uZXMuCiAgICAgaWYgKG1fdHlw
ZSAhPSBVc2VyQ2hvc2VuRW5jb2RpbmcgJiYgbV90eXBlICE9IEF1dG9EZXRlY3RlZEVuY29kaW5n
ICYmIG1fY29kZWMgJiYgbV9jb2RlYy0+aXNKYXBhbmVzZSgpKQotI2Vsc2UKLSAgICBpZiAobV90
eXBlID09IERlZmF1bHRFbmNvZGluZyAmJiBLR2xvYmFsOjpsb2NhbGUoKS0+bGFuZ3VhZ2VMaXN0
KClbMF0gPT0gImphIikKLSNlbmRpZgogICAgIHsKICNpZmRlZiBERUNPREVfREVCVUcKIAlrZERl
YnVnKCA2MDA1ICkgPDwgIkRlY29kZXI6IHVzZSBhdXRvLWRldGVjdCAoIiA8PCBzdHJsZW4oZGF0
YSkgPDwgIikiIDw8IGVuZGw7CkBAIC02NjUsNyArNjIxLDYgQEAgUVN0cmluZyBEZWNvZGVyOjpk
ZWNvZGUoY29uc3QgY2hhciAqZGF0YQogICAgIH0KICAgICBRU3RyaW5nIG91dDsKIAotI2lmIEFQ
UExFX0NIQU5HRVMKICAgICBpZiAoIWJ1ZmZlci5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKCFs
b29rRm9yTWV0YVRhZykKICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoZGF0YSwgbGVuKTsKQEAg
LTY3NCw0NiArNjI5LDEzIEBAIFFTdHJpbmcgRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIgKmRh
dGEKICAgICB9IGVsc2UgewogICAgICAgICBvdXQgPSBtX2RlY29kZXItPnRvVW5pY29kZShkYXRh
LCBsZW4pOwogICAgIH0KLSNlbHNlCi0gICAgaWYoIWJ1ZmZlci5pc0VtcHR5KCkgJiYgZW5jICE9
ICJJU08tMTA2NDYtVUNTLTIiKSB7Ci0gICAgICAgIG91dCA9IG1fZGVjb2Rlci0+dG9Vbmljb2Rl
KGJ1ZmZlci5sYXRpbjEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKLSAgICAgICAgYnVmZmVyID0gIiI7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYobV9jb2RlYy0+bWliRW51bSgpICE9IDEwMDApIC8v
IHV0ZjE2Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vICMjIyBoYWNrIGZvciBhIGJ1ZyBpbiBR
VGV4dENvZGVjLiBJdCBjdXQncyB0aGUgaW5wdXQgc3RyZWFtCi0gICAgICAgICAgICAvLyBpbiBj
YXNlIHRoZXJlIGFyZSBcMCBpbiBpdC4gWkRORVQgaGFzIHRoZW0gaW5zaWRlLi4uIDotKAotICAg
ICAgICAgICAgY2hhciAqZCA9IGNvbnN0X2Nhc3Q8Y2hhciAqPihkYXRhKTsKLSAgICAgICAgICAg
IGludCBpID0gbGVuIC0gMTsKLSAgICAgICAgICAgIHdoaWxlKGkgPj0gMCkgewotICAgICAgICAg
ICAgICAgIGlmKCooZCtpKSA9PSAwKSAqKGQraSkgPSAnICc7Ci0gICAgICAgICAgICAgICAgaS0t
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG91dCA9IG1fZGVjb2Rlci0+dG9V
bmljb2RlKGRhdGEsIGxlbik7Ci0gICAgfQotCi0gICAgaWYgKG91dC5pc051bGwoKSkgewotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiAgZGVjb2RlZCBzdHJpbmcgaXMgbnVsbFxuIik7
Ci0gICAgfSBlbHNlIGlmIChvdXQubGVuZ3RoKCkgPT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVSUk9SOiAgZGVjb2RlZCBzdHJpbmcgbGVuZ3RoID09IDBcbiIpOwotICAgIH0KLSAg
ICAvLyB0aGUgaGVsbCBrbm93cywgd2h5IHRoZSBvdXRwdXQgZG9lcyBzb21ldGltZXMgaGF2ZSBh
IFFDaGFyOjpudWxsIGF0Ci0gICAgLy8gdGhlIGVuZC4uLgotICAgIGVsc2UgaWYob3V0W291dC5s
ZW5ndGgoKS0xXSA9PSBRQ2hhcjo6bnVsbCkKLSAgICAgICAgb3V0LnRydW5jYXRlKG91dC5sZW5n
dGgoKSAtIDEpOwotI2VuZGlmCiAKICAgICByZXR1cm4gb3V0OwogfQogCiBRU3RyaW5nIERlY29k
ZXI6OmZsdXNoKCkgY29uc3QKIHsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgcmV0dXJuIG1fZGVj
b2Rlci0+dG9Vbmljb2RlKGJ1ZmZlci5sYXRpbjEoKSwgYnVmZmVyLmxlbmd0aCgpLCB0cnVlKTsK
LSNlbHNlCi0gICAgcmV0dXJuIG1fZGVjb2Rlci0+dG9Vbmljb2RlKGJ1ZmZlci5sYXRpbjEoKSwg
YnVmZmVyLmxlbmd0aCgpKTsKLSNlbmRpZgogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJ
bmRleDogbWlzYy9kZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvbWlzYy9kZWNvZGVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC1w
IC11IC1yMS45IG1pc2MvZGVjb2Rlci5oCi0tLSBtaXNjL2RlY29kZXIuaAkzIEp1biAyMDAzIDE5
OjQ3OjQ1IC0wMDAwCTEuOQorKysgbWlzYy9kZWNvZGVyLmgJMTEgTm92IDIwMDUgMTk6MzQ6MDYg
LTAwMDAKQEAgLTY2LDEzICs2Niw5IEBAIHByb3RlY3RlZDoKICAgICBRQ1N0cmluZyBlbmM7CiAg
ICAgRW5jb2RpbmdUeXBlIG1fdHlwZTsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICAvLyBPdXIg
dmVyc2lvbiBvZiBRU3RyaW5nIHdvcmtzIHdlbGwgZm9yIGFsbC04LWJpdCBjaGFyYWN0ZXJzLCBh
bmQgYWxsb3dzIG51bGwgY2hhcmFjdGVycy4KICAgICAvLyBUaGlzIHdvcmtzIGJldHRlciB0aGFu
IFFDU3RyaW5nIHdoZW4gdGhlcmUgYXJlIG51bGwgY2hhcmFjdGVycyBpbnZvbHZlZC4KICAgICBR
U3RyaW5nIGJ1ZmZlcjsKLSNlbHNlCi0gICAgUUNTdHJpbmcgYnVmZmVyOwotI2VuZGlmCiAKICAg
ICBib29sIGJvZHk7CiAgICAgYm9vbCBiZWdpbm5pbmc7CkluZGV4OiBtaXNjL2hlbHBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9oZWxwZXIu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIyCmRpZmYgLXAgLXUgLXIxLjIyIG1pc2MvaGVs
cGVyLmNwcAotLS0gbWlzYy9oZWxwZXIuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MzUgLTAwMDAJMS4y
MgorKysgbWlzYy9oZWxwZXIuY3BwCTExIE5vdiAyMDA1IDE5OjM0OjA2IC0wMDAwCkBAIC0yNCw5
ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiaGVscGVyLmgiCiAKLSNp
ZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSAiS1dRVGV4dFV0aWxpdGllcy5oIgotI2VuZGlmCiAK
IG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTM5LDM4ICszNywyMiBAQCB2b2lkIHNldFByaW50UGFp
bnRlciggUVBhaW50ZXIgKnByaW50ZXIgCiAKIHZvaWQgZmluZFdvcmRCb3VuZGFyeShjb25zdCBR
Q2hhciAqY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50ICpzdGFydCwgaW50ICplbmQp
CiB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIEtXUUZpbmRXb3JkQm91bmRhcnkoY2hhcnMsIGxl
biwgcG9zaXRpb24sIHN0YXJ0LCBlbmQpOwotI2Vsc2UKLSAgICAvLyBLREUgaW1wbGVtZW50YXRp
b24KLSNlbmRpZgogfQogCiBpbnQgbmV4dFdvcmRGcm9tSW5kZXgoY29uc3QgUUNoYXIgKmNoYXJz
LCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKIHsKLSNpZiBBUFBMRV9DSEFO
R0VTCiAgICAgcmV0dXJuIEtXUUZpbmROZXh0V29yZEZyb21JbmRleChjaGFycywgbGVuLCBwb3Np
dGlvbiwgZm9yd2FyZCk7Ci0jZWxzZQotICAgIC8vIEtERSBpbXBsZW1lbnRhdGlvbgotI2VuZGlm
CiB9CiAKIHZvaWQgZmluZFNlbnRlbmNlQm91bmRhcnkoY29uc3QgUUNoYXIgKmNoYXJzLCBpbnQg
bGVuLCBpbnQgcG9zaXRpb24sIGludCAqc3RhcnQsIGludCAqZW5kKQogewotI2lmIEFQUExFX0NI
QU5HRVMKICAgICBLV1FGaW5kU2VudGVuY2VCb3VuZGFyeShjaGFycywgbGVuLCBwb3NpdGlvbiwg
c3RhcnQsIGVuZCk7Ci0jZWxzZQotICAgIC8vIEtERSBpbXBsZW1lbnRhdGlvbgotI2VuZGlmCiB9
CiAKIGludCBuZXh0U2VudGVuY2VGcm9tSW5kZXgoY29uc3QgUUNoYXIgKmNoYXJzLCBpbnQgbGVu
LCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKIHsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAg
cmV0dXJuIEtXUUZpbmROZXh0U2VudGVuY2VGcm9tSW5kZXgoY2hhcnMsIGxlbiwgcG9zaXRpb24s
IGZvcndhcmQpOwotI2Vsc2UKLSAgICAvLyBLREUgaW1wbGVtZW50YXRpb24KLSNlbmRpZgogfQog
CiB9CkluZGV4OiBtaXNjL2hlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL21pc2MvaGVscGVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlm
ZiAtcCAtdSAtcjEuMTEgbWlzYy9oZWxwZXIuaAotLS0gbWlzYy9oZWxwZXIuaAk2IEphbiAyMDA1
IDE4OjIwOjUwIC0wMDAwCTEuMTEKKysrIG1pc2MvaGVscGVyLmgJMTEgTm92IDIwMDUgMTk6MzQ6
MDYgLTAwMDAKQEAgLTMzLDEwICszMyw2IEBAIGNsYXNzIFFDaGFyOwogbmFtZXNwYWNlIGtodG1s
CiB7CiAgICAgY29uc3QgUVJnYiB0cmFuc3BhcmVudENvbG9yID0gMHgwMDAwMDAwMDsKLSNpZiAh
QVBQTEVfQ0hBTkdFUwotICAgIGNvbnN0IFFSZ2IgaW52ZXJ0ZWRDb2xvciAgICA9IDB4MDAwMDAw
MDI7IC8vIFRoaXMgcmVhbGx5IG1ha2VzIG5vIHNlbnNlLiBUaGlzIGlzIGEgdmFsaWQgY29sb3Ig
dmFsdWUsIHNvIHdoeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGlzIGl0IGJlaW5nIGdpdmVuIHNwZWNpYWwgbWVhbmluZz8gLWR3aAotI2VuZGlmCiAg
ICAgCiAgICAgZXh0ZXJuIFFQYWludGVyICpwcmludHBhaW50ZXI7CiAgICAgdm9pZCBzZXRQcmlu
dFBhaW50ZXIoUVBhaW50ZXIgKnByaW50ZXIpOwpJbmRleDogbWlzYy9sb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvbG9hZGVyLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS44MApkaWZmIC1wIC11IC1yMS44MCBtaXNjL2xvYWRlci5j
cHAKLS0tIG1pc2MvbG9hZGVyLmNwcAkyNCBPY3QgMjAwNSAyMTo1MjowMSAtMDAwMAkxLjgwCisr
KyBtaXNjL2xvYWRlci5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MDYgLTAwMDAKQEAgLTYyLDE3ICs2
MiwxMyBAQAogI2luY2x1ZGUgInhibC94YmxfZG9jaW1wbC5oIgogI2VuZGlmCiAKLSNpZiBBUFBM
RV9DSEFOR0VTCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIktX
UUxvYWRlci5oIgotI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIHVzaW5nIG5hbWVz
cGFjZSBET007CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiBzdGF0aWMgYm9vbCBjYWNoZURpc2FibGVk
OwotI2VuZGlmCiAKIC8vIENhbGwgdGhpcyAid2Fsa2VyIiBpbnN0ZWFkIG9mIGl0ZXJhdG9yIHNv
IHBlb3BsZSB3b24ndCBleHBlY3QgUXQgb3IgU1RMLXN0eWxlIGl0ZXJhdG9yIGludGVyZmFjZS4K
IC8vIEp1c3Qga2VlcCBjYWxsaW5nIG5leHQoKSBvbiB0aGlzLiBJdCdzIHNhZmUgZnJvbSBkZWxl
dGlvbnMgb2YgdGhlIGN1cnJlbnQgaXRlbQpAQCAtOTAsMTAgKzg2LDggQEAgQ2FjaGVkT2JqZWN0
Ojp+Q2FjaGVkT2JqZWN0KCkKICAgICBpZihtX2RlbGV0ZWQpIGFib3J0KCk7CiAgICAgQ2FjaGU6
OnJlbW92ZUZyb21MUlVMaXN0KHRoaXMpOwogICAgIG1fZGVsZXRlZCA9IHRydWU7Ci0jaWYgQVBQ
TEVfQ0hBTkdFUwogICAgIHNldFJlc3BvbnNlKDApOwogICAgIHNldEFsbERhdGEoMCk7Ci0jZW5k
aWYKIH0KIAogdm9pZCBDYWNoZWRPYmplY3Q6OmZpbmlzaCgpCkBAIC0zNTIsMTQ2ICszNDYsNiBA
QCB2b2lkIENhY2hlZFNjcmlwdDo6ZXJyb3IoIGludCAvKmVyciovLCBjCiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jaWYgIUFQUExFX0NIQU5HRVMKLQotbmFtZXNw
YWNlIGtodG1sCi17Ci0KLSAgICBjbGFzcyBJbWFnZVNvdXJjZSA6IHB1YmxpYyBRRGF0YVNvdXJj
ZQotICAgIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEltYWdlU291cmNlKFFCeXRlQXJyYXkgYnVm
KTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogT3ZlcmxvYWQgUURhdGFTb3VyY2U6OnJlYWR5
VG9TZW5kKCkgYW5kIHJldHVybnMgdGhlIG51bWJlcgotICAgICAgICAgKiBvZiBieXRlcyByZWFk
eSB0byBzZW5kIGlmIG5vdCBlb2YgaW5zdGVhZCBvZiByZXR1cm5pbmcgLTEuCi0gICAgICAgICAq
LwotICAgICAgICBpbnQgcmVhZHlUb1NlbmQoKTsKLQotICAgICAgICAvKiEKLSAgICAgICAgICBS
ZWFkcyBhbmQgc2VuZHMgYSBibG9jayBvZiBkYXRhLgotICAgICAgICAqLwotICAgICAgICB2b2lk
IHNlbmRUbyhRRGF0YVNpbmsqLCBpbnQgY291bnQpOwotCi0gICAgICAgIC8qKgotICAgICAgICAg
KiBTZXRzIHRoZSBFT0Ygc3RhdGUuCi0gICAgICAgICAqLwotICAgICAgICB2b2lkIHNldEVPRigg
Ym9vbCBzdGF0ZSApOwotCi0gICAgICAgIC8qIQotICAgICAgICAgIEtIVE1MSW1hZ2VTb3VyY2Un
cyBpcyByZXdpbmRhYmxlLgotICAgICAgICAqLwotICAgICAgICBib29sIHJld2luZGFibGUoKSBj
b25zdDsKLQotICAgICAgICAvKiEKLSAgICAgICAgICBFbmFibGVzIHJld2luZGluZy4gIE5vIHNw
ZWNpYWwgYWN0aW9uIGlzIHRha2VuLgotICAgICAgICAqLwotICAgICAgICB2b2lkIGVuYWJsZVJl
d2luZChib29sIG9uKTsKLQotICAgICAgICAvKgotICAgICAgICAgIENhbGxzIHJlc2V0KCkgb24g
dGhlIFFJT0RldmljZS4KLSAgICAgICAgKi8KLSAgICAgICAgdm9pZCByZXdpbmQoKTsKLQotICAg
ICAgICAvKgotICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBidWZmZXJlZCBkYXRhIGlzIG5v
IGxvbmdlcgotICAgICAgICAgIG5lZWRlZC4KLSAgICAgICAgKi8KLSAgICAgICAgdm9pZCBjbGVh
bkJ1ZmZlcigpOwotCi0gICAgICAgIFFCeXRlQXJyYXkgYnVmZmVyOwotICAgICAgICB1bnNpZ25l
ZCBpbnQgcG9zOwotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgZW9mICAgICA6IDE7Ci0gICAg
ICAgIGJvb2wgcmV3ICAgICA6IDE7Ci0gICAgICAgIGJvb2wgcmV3YWJsZSA6IDE7Ci0gICAgfTsK
LX0KLQotCi1JbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoUUJ5dGVBcnJheSBidWYpCi17Ci0gIGJ1
ZmZlciA9IGJ1ZjsKLSAgcmV3ID0gZmFsc2U7Ci0gIHBvcyA9IDA7Ci0gIGVvZiA9IGZhbHNlOwot
ICByZXdhYmxlID0gdHJ1ZTsKLX0KLQotaW50IEltYWdlU291cmNlOjpyZWFkeVRvU2VuZCgpCi17
Ci0gICAgaWYoZW9mICYmIHBvcyA9PSBidWZmZXIuc2l6ZSgpKQotICAgICAgICByZXR1cm4gLTE7
Ci0KLSAgICByZXR1cm4gIGJ1ZmZlci5zaXplKCkgLSBwb3M7Ci19Ci0KLXZvaWQgSW1hZ2VTb3Vy
Y2U6OnNlbmRUbyhRRGF0YVNpbmsqIHNpbmssIGludCBuKQotewotICAgIHNpbmstPnJlY2VpdmUo
KGNvbnN0IHVjaGFyKikmYnVmZmVyLmF0KHBvcyksIG4pOwotCi0gICAgcG9zICs9IG47Ci0KLSAg
ICAvLyBidWZmZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZAotICAgIGlmKGVvZiAmJiBwb3MgPT0gYnVm
ZmVyLnNpemUoKSAmJiAhcmV3YWJsZSkKLSAgICB7Ci0gICAgICAgIGJ1ZmZlci5yZXNpemUoMCk7
Ci0gICAgICAgIHBvcyA9IDA7Ci0gICAgfQotfQotCi12b2lkIEltYWdlU291cmNlOjpzZXRFT0Yo
IGJvb2wgc3RhdGUgKQotewotICAgIGVvZiA9IHN0YXRlOwotfQotCi0vLyBJbWFnZVNvdXJjZSdz
IGlzIHJld2luZGFibGUuCi1ib29sIEltYWdlU291cmNlOjpyZXdpbmRhYmxlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gcmV3YWJsZTsKLX0KLQotLy8gRW5hYmxlcyByZXdpbmRpbmcuICBObyBzcGVj
aWFsIGFjdGlvbiBpcyB0YWtlbi4KLXZvaWQgSW1hZ2VTb3VyY2U6OmVuYWJsZVJld2luZChib29s
IG9uKQotewotICAgIHJldyA9IG9uOwotfQotCi0vLyBDYWxscyByZXNldCgpIG9uIHRoZSBRSU9E
ZXZpY2UuCi12b2lkIEltYWdlU291cmNlOjpyZXdpbmQoKQotewotICAgIHBvcyA9IDA7Ci0gICAg
aWYgKCFyZXcpIHsKLSAgICAgICAgUURhdGFTb3VyY2U6OnJld2luZCgpOwotICAgIH0gZWxzZQot
ICAgICAgICByZWFkeSgpOwotfQotCi12b2lkIEltYWdlU291cmNlOjpjbGVhbkJ1ZmZlcigpCi17
Ci0gICAgLy8gaWYgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHJld2luZCwgYnVmZmVyIGlzIG5lZWRl
ZAotICAgIGlmKHJldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmV3YWJsZSA9IGZhbHNlOwot
Ci0gICAgLy8gYnVmZmVyIGlzIG5vIGxvbmdlciBuZWVkZWQKLSAgICBpZihlb2YgJiYgcG9zID09
IGJ1ZmZlci5zaXplKCkpCi0gICAgewotICAgICAgICBidWZmZXIucmVzaXplKDApOwotICAgICAg
ICBwb3MgPSAwOwotICAgIH0KLX0KLQotc3RhdGljIFFTdHJpbmcgYnVpbGRBY2NlcHRIZWFkZXIo
KQotewotICAgIFFTdHJpbmcgcmVzdWx0ID0gS0ltYWdlSU86Om1pbWVUeXBlcyggS0ltYWdlSU86
OlJlYWRpbmcgKS5qb2luKCIsICIpOwotICAgIGlmIChyZXN1bHQucmlnaHQoMikgPT0gIiwgIikK
LSAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmxlZnQocmVzdWx0Lmxlbmd0aCgpLTIpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLSNlbmRpZiAvLyBBUFBMRV9DSEFOR0VTCiAKIHN0YXRpYyBib29s
IGNyb3NzRG9tYWluKGNvbnN0IFFTdHJpbmcgJmEsIGNvbnN0IFFTdHJpbmcgJmIpCiB7CkBAIC01
MTgsNyArMzcyLDYgQEAgc3RhdGljIGJvb2wgY3Jvc3NEb21haW4oY29uc3QgUVN0cmluZyAmYQog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYgQVBQTEVfQ0hBTkdFUwog
dm9pZCBDYWNoZWRJbWFnZUNhbGxiYWNrOjpub3RpZnlVcGRhdGUoKSAKIHsgCiAgICAgaWYgKGNh
Y2hlZEltYWdlKSB7CkBAIC02MDcsMjYgKzQ2MCwxNiBAQCB2b2lkIENhY2hlZEltYWdlQ2FsbGJh
Y2s6OmNsZWFyKCkgCiAgICAgfQogICAgIGNhY2hlZEltYWdlID0gMDsKIH0KLSNlbmRpZgogCiBD
YWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoRG9jTG9hZGVyKiBkbCwgY29uc3QgRE9NU3RyaW5nICZ1
cmwsIEtJTzo6Q2FjaGVDb250cm9sIF9jYWNoZVBvbGljeSwgdGltZV90IF9leHBpcmVEYXRlKQog
ICAgIDogUU9iamVjdCgpLCBDYWNoZWRPYmplY3QodXJsLCBJbWFnZSwgX2NhY2hlUG9saWN5LCBf
ZXhwaXJlRGF0ZSkKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLCBtX2RhdGFTaXplKDApCi0jZW5k
aWYKIHsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nICZhY2Nl
cHRIZWFkZXIgPSBLR2xvYmFsOjpzdGF0aWNRU3RyaW5nKCBidWlsZEFjY2VwdEhlYWRlcigpICk7
Ci0jZW5kaWYKIAogICAgIG0gPSAwOwogICAgIHAgPSAwOwogICAgIHBpeFBhcnQgPSAwOwogICAg
IGJnID0gMDsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIGJnQ29sb3IgPSBxUmdiYSggMCwgMCwg
MCwgMHhGRiApOwotICAgIHR5cGVDaGVja2VkID0gZmFsc2U7Ci0jZW5kaWYKICAgICBpc0Z1bGx5
VHJhbnNwYXJlbnQgPSBmYWxzZTsKICAgICBlcnJvck9jY3VyZWQgPSBmYWxzZTsKICAgICBtb25v
Y2hyb21lID0gZmFsc2U7CkBAIC02MzQsMTYgKzQ3NywxMSBAQCBDYWNoZWRJbWFnZTo6Q2FjaGVk
SW1hZ2UoRG9jTG9hZGVyKiBkbCwgCiAgICAgbV9zdGF0dXMgPSBVbmtub3duOwogICAgIGltZ1Nv
dXJjZSA9IDA7CiAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAg
IHNldEFjY2VwdCggYWNjZXB0SGVhZGVyICk7Ci0jZW5kaWYKICAgICBtX3Nob3dBbmltYXRpb25z
ID0gZGwtPnNob3dBbmltYXRpb25zKCk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIGlmIChRUGl4
bWFwOjpzaG91bGRVc2VUaHJlYWRlZERlY29kaW5nKCkpCiAgICAgICAgIG1fZGVjb2RlckNhbGxi
YWNrID0gbmV3IENhY2hlZEltYWdlQ2FsbGJhY2sodGhpcyk7CiAgICAgZWxzZQogICAgICAgICBt
X2RlY29kZXJDYWxsYmFjayA9IDA7Ci0jZW5kaWYKIH0KIAogQ2FjaGVkSW1hZ2U6On5DYWNoZWRJ
bWFnZSgpCkBAIC02OTAsODMgKzUyOCw3IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmRlcmVmKCBDYWNo
ZWRPYmplY3RDbGkKIAogY29uc3QgUVBpeG1hcCAmQ2FjaGVkSW1hZ2U6OnRpbGVkX3BpeG1hcChj
b25zdCBRQ29sb3ImIG5ld2MpCiB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIHJldHVybiBwaXht
YXAoKTsKLSNlbHNlCi0gICAgc3RhdGljIFFSZ2IgYmdUcmFuc3BhcmFudCA9IHFSZ2JhKCAwLCAw
LCAwLCAweEZGICk7Ci0gICAgaWYgKCAoYmdDb2xvciAhPSBiZ1RyYW5zcGFyYW50KSAmJiAoYmdD
b2xvciAhPSBuZXdjLnJnYigpKSApIHsKLSAgICAgICAgZGVsZXRlIGJnOyBiZyA9IDA7Ci0gICAg
fQotCi0gICAgaWYgKGJnKQotICAgICAgICByZXR1cm4gKmJnOwotCi0gICAgY29uc3QgUVBpeG1h
cCAmciA9IHBpeG1hcCgpOwotCi0gICAgaWYgKHIuaXNOdWxsKCkpIHJldHVybiByOwotCi0gICAg
Ly8gbm8gZXJyb3IgaW5kaWNhdGlvbiBmb3IgYmFja2dyb3VuZCBpbWFnZXMKLSAgICBpZihlcnJv
ck9jY3VyZWQpIHJldHVybiAqQ2FjaGU6Om51bGxQaXhtYXA7Ci0KLSAgICBib29sIGlzdmFsaWQg
PSBuZXdjLmlzVmFsaWQoKTsKLSAgICBRU2l6ZSBzKHBpeG1hcF9zaXplKCkpOwotICAgIGludCB3
ID0gci53aWR0aCgpOwotICAgIGludCBoID0gci5oZWlnaHQoKTsKLSAgICBpZiAoIHcqaCA8IDgx
OTIgKQotICAgIHsKLSAgICAgICAgaWYgKCByLndpZHRoKCkgPCBCR01JTldJRFRIICkKLSAgICAg
ICAgICAgIHcgPSAoKEJHTUlOV0lEVEggIC8gcy53aWR0aCgpKSsxKSAqIHMud2lkdGgoKTsKLSAg
ICAgICAgaWYgKCByLmhlaWdodCgpIDwgQkdNSU5IRUlHSFQgKQotICAgICAgICAgICAgaCA9ICgo
QkdNSU5IRUlHSFQgLyBzLmhlaWdodCgpKSsxKSAqIHMuaGVpZ2h0KCk7Ci0gICAgfQotICAgIGlm
ICggKHcgIT0gci53aWR0aCgpKSB8fCAoaCAhPSByLmhlaWdodCgpKSB8fCAoaXN2YWxpZCAmJiBy
Lm1hc2soKSkpCi0gICAgewotICAgICAgICBRUGl4bWFwIHBpeCA9IHI7Ci0gICAgICAgIGlmICgg
dyAhPSByLndpZHRoKCkgfHwgKGlzdmFsaWQgJiYgcGl4Lm1hc2soKSkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGJnID0gbmV3IFFQaXhtYXAodywgci5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBR
UGFpbnRlciBwKGJnKTsKLSAgICAgICAgICAgIGlmKGlzdmFsaWQpIHAuZmlsbFJlY3QoMCwgMCwg
dywgci5oZWlnaHQoKSwgbmV3Yyk7Ci0gICAgICAgICAgICBwLmRyYXdUaWxlZFBpeG1hcCgwLCAw
LCB3LCByLmhlaWdodCgpLCBwaXgpOwotICAgICAgICAgICAgaWYoIWlzdmFsaWQgJiYgcGl4Lm1h
c2soKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyB1bmZvcnR1bmF0ZWx5IG91
ciBhbnRpLXRyYW5zcGFyZW5jeSB0cmljayBkb2Vzbid0IHdvcmsgaGVyZQotICAgICAgICAgICAg
ICAgIC8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgbWFzay4KLSAgICAgICAgICAgICAgICBRQml0bWFw
IG5ld21hc2sodywgci5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgUVBhaW50ZXIgcG0oJm5l
d21hc2spOwotICAgICAgICAgICAgICAgIHBtLmRyYXdUaWxlZFBpeG1hcCgwLCAwLCB3LCByLmhl
aWdodCgpLCAqcGl4Lm1hc2soKSk7Ci0gICAgICAgICAgICAgICAgYmctPnNldE1hc2sobmV3bWFz
ayk7Ci0gICAgICAgICAgICAgICAgYmdDb2xvciA9IGJnVHJhbnNwYXJhbnQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmdDb2xvcj0gbmV3Yy5yZ2Io
KTsKLSAgICAgICAgICAgIHBpeCA9ICpiZzsKLSAgICAgICAgfQotICAgICAgICBpZiAoIGggIT0g
ci5oZWlnaHQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSBiZzsKLSAgICAgICAg
ICAgIGJnID0gbmV3IFFQaXhtYXAodywgaCk7Ci0gICAgICAgICAgICBRUGFpbnRlciBwKGJnKTsK
LSAgICAgICAgICAgIGlmKGlzdmFsaWQpIHAuZmlsbFJlY3QoMCwgMCwgdywgaCwgbmV3Yyk7Ci0g
ICAgICAgICAgICBwLmRyYXdUaWxlZFBpeG1hcCgwLCAwLCB3LCBoLCBwaXgpOwotICAgICAgICAg
ICAgaWYoIWlzdmFsaWQgJiYgcGl4Lm1hc2soKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAvLyB1bmZvcnR1bmF0ZWx5IG91ciBhbnRpLXRyYW5zcGFyZW5jeSB0cmljayBkb2Vzbid0
IHdvcmsgaGVyZQotICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgbWFzay4K
LSAgICAgICAgICAgICAgICBRQml0bWFwIG5ld21hc2sodywgaCk7Ci0gICAgICAgICAgICAgICAg
UVBhaW50ZXIgcG0oJm5ld21hc2spOwotICAgICAgICAgICAgICAgIHBtLmRyYXdUaWxlZFBpeG1h
cCgwLCAwLCB3LCBoLCAqcGl4Lm1hc2soKSk7Ci0gICAgICAgICAgICAgICAgYmctPnNldE1hc2so
bmV3bWFzayk7Ci0gICAgICAgICAgICAgICAgYmdDb2xvciA9IGJnVHJhbnNwYXJhbnQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmdDb2xvcj0gbmV3
Yy5yZ2IoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKmJnOwotICAgIH0KLQotICAgIHJl
dHVybiByOwotI2VuZGlmCiB9CiAKIGNvbnN0IFFQaXhtYXAgJkNhY2hlZEltYWdlOjpwaXhtYXAo
ICkgY29uc3QKQEAgLTc3NCwyOSArNTM2LDggQEAgY29uc3QgUVBpeG1hcCAmQ2FjaGVkSW1hZ2U6
OnBpeG1hcCggKSBjbwogICAgIGlmKGVycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuICpDYWNo
ZTo6YnJva2VuUGl4bWFwOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIGlmIChwKQogICAgICAg
ICByZXR1cm4gKnA7Ci0jZWxzZQotICAgIGlmKG0pCi0gICAgewotICAgICAgICBpZihtLT5mcmFt
ZVBpeG1hcCgpLnNpemUoKSAhPSBtLT5nZXRWYWxpZFJlY3QoKS5zaXplKCkgJiYgbS0+Z2V0VmFs
aWRSZWN0KCkuc2l6ZSgpLmlzVmFsaWQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gcGl4
bWFwIGlzIG5vdCB5ZXQgY29tcGxldGVseSBsb2FkZWQsIHNvIHdlCi0gICAgICAgICAgICAvLyBy
ZXR1cm4gYSBjbGlwcGVkIHZlcnNpb24uIGFzc2VydGluZyBoZXJlCi0gICAgICAgICAgICAvLyB0
aGF0IHRoZSB2YWxpZCByZWN0IGlzIGFsd2F5cyBmcm9tIDAvMCB0byBmdWxsd2lkdGgvIHNvbWVo
ZWlnaHQKLSAgICAgICAgICAgIGlmKCFwaXhQYXJ0KSBwaXhQYXJ0ID0gbmV3IFFQaXhtYXAobS0+
Z2V0VmFsaWRSZWN0KCkuc2l6ZSgpKTsKLQotICAgICAgICAgICAgKCpwaXhQYXJ0KSA9IG0tPmZy
YW1lUGl4bWFwKCk7Ci0gICAgICAgICAgICBwaXhQYXJ0LT5yZXNpemUobS0+Z2V0VmFsaWRSZWN0
KCkuc2l6ZSgpKTsKLSAgICAgICAgICAgIHJldHVybiAqcGl4UGFydDsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbS0+ZnJhbWVQaXhtYXAoKTsKLSAgICB9Ci0g
ICAgZWxzZSBpZihwKQotICAgICAgICByZXR1cm4gKnA7Ci0jZW5kaWYgLy8gQVBQTEVfQ0hBTkdF
UwogCiAgICAgcmV0dXJuICpDYWNoZTo6bnVsbFBpeG1hcDsKIH0KQEAgLTgyMSwxNjEgKzU2Miwz
MiBAQCB2b2lkIENhY2hlZEltYWdlOjpkb19ub3RpZnkoY29uc3QgUVBpeG1hCiAgICAgICAgIGMt
PnNldFBpeG1hcChwLCByLCB0aGlzKTsKIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0KLXZvaWQg
Q2FjaGVkSW1hZ2U6Om1vdmllVXBkYXRlZCggY29uc3QgUVJlY3QmIHIgKQotewotI2lmZGVmIENB
Q0hFX0RFQlVHCi0gICAgcURlYnVnKCJtb3ZpZSB1cGRhdGVkICVkLyVkLyVkLyVkLCBwaXhtYXAg
c2l6ZSAlZC8lZCIsIHIueCgpLCByLnkoKSwgci5yaWdodCgpLCByLmJvdHRvbSgpLAotICAgICAg
ICAgICBtLT5mcmFtZVBpeG1hcCgpLnNpemUoKS53aWR0aCgpLCBtLT5mcmFtZVBpeG1hcCgpLnNp
emUoKS5oZWlnaHQoKSk7Ci0jZW5kaWYKLQotICAgIGRvX25vdGlmeShtLT5mcmFtZVBpeG1hcCgp
LCByKTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6bW92aWVTdGF0dXMoaW50IHN0YXR1cykKLXsK
LSNpZmRlZiBDQUNIRV9ERUJVRwotICAgIHFEZWJ1ZygibW92aWVTdGF0dXMoJWQpIiwgc3RhdHVz
KTsKLSNlbmRpZgotCi0gICAgLy8gIyMjIHRoZSBodG1sIGltYWdlIG9iamVjdHMgYXJlIHN1cHBv
c2VkIHRvIHNlbmQgdGhlIGxvYWQgZXZlbnQgYWZ0ZXIgZXZlcnkgZnJhbWUgKGFjY29yZGluZyB0
bwotICAgIC8vIG5ldHNjYXBlKS4gV2UgaGF2ZSBhIHByb2JsZW0gdGhvdWdoIHdoZXJlIGFuIGlt
YWdlIGlzIHByZXNlbnQsIGFuZCBqcyBjb2RlIGNyZWF0ZXMgYSBuZXcgSW1hZ2Ugb2JqZWN0LAot
ICAgIC8vIHdoaWNoIHVzZXMgdGhlIHNhbWUgQ2FjaGVkSW1hZ2UsIHRoZSBvbmUgaW4gdGhlIGRv
Y3VtZW50IGlzIG5vdCBzdXBwb3NlZCB0byBiZSBub3RpZmllZAotCi0gICAgLy8ganVzdCBhbm90
aGVyIFF0IDIuMi4wIGJ1Zy4gd2UgY2Fubm90IGNhbGwKLSAgICAvLyBRTW92aWU6OmZyYW1lSW1h
Z2UgaWYgd2UncmUgYWZ0ZXIgUU1vdmllOjpFbmRPZk1vdmllCi0gICAgaWYoc3RhdHVzID09IFFN
b3ZpZTo6RW5kT2ZGcmFtZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IFFJbWFnZSYgaW0gPSBtLT5m
cmFtZUltYWdlKCk7Ci0gICAgICAgIG1vbm9jaHJvbWUgPSAoICggaW0uZGVwdGgoKSA8PSA4ICkg
JiYgKCBpbS5udW1Db2xvcnMoKSAtIGludCggaW0uaGFzQWxwaGFCdWZmZXIoKSApIDw9IDIgKSAp
OwotICAgICAgICBmb3IgKGludCBpID0gMDsgbW9ub2Nocm9tZSAmJiBpIDwgaW0ubnVtQ29sb3Jz
KCk7ICsraSkKLSAgICAgICAgICAgIGlmIChpbS5jb2xvclRhYmxlKClbaV0gIT0gcVJnYigweGZm
LCAweGZmLCAweGZmKSAmJgotICAgICAgICAgICAgICAgIGltLmNvbG9yVGFibGUoKVtpXSAhPSBx
UmdiKDB4MDAsIDB4MDAsIDB4MDApKQotICAgICAgICAgICAgICAgIG1vbm9jaHJvbWUgPSBmYWxz
ZTsKLSAgICAgICAgaWYoKGltLndpZHRoKCkgPCA1IHx8IGltLmhlaWdodCgpIDwgNSkgJiYgaW0u
aGFzQWxwaGFCdWZmZXIoKSkgLy8gb25seSBldmFsdWF0ZSBmb3Igc21hbGwgaW1hZ2VzCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFFJbWFnZSBhbSA9IGltLmNyZWF0ZUFscGhhTWFzaygpOwotICAg
ICAgICAgICAgaWYoYW0uZGVwdGgoKSA9PSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGJvb2wgc29saWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5
IDwgYW0uaGVpZ2h0KCk7IHkrKykKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsg
eCA8IGFtLndpZHRoKCk7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFtLnBpeGVs
SW5kZXgoeCwgeSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2xpZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaXNGdWxseVRyYW5zcGFyZW50ID0gKCFzb2xpZCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB3ZSBoYXZlIHRvIGRlbGV0ZSBv
dXIgdGlsZWQgYmcgdmFyaWFudCBoZXJlCi0gICAgICAgIC8vIGJlY2F1c2UgdGhlIGZyYW1lIGhh
cyBjaGFuZ2VkIChpbiBvcmRlciB0byBrZWVwIGl0IGluIHN5bmMpCi0gICAgICAgIGRlbGV0ZSBi
ZzsKLSAgICAgICAgYmcgPSAwOwotICAgIH0KLQotCi0gICAgaWYoKHN0YXR1cyA9PSBRTW92aWU6
OkVuZE9mTW92aWUgJiYgKCFtIHx8IG0tPmZyYW1lTnVtYmVyKCkgPD0gMSkpIHx8Ci0gICAgICAg
KChzdGF0dXMgPT0gUU1vdmllOjpFbmRPZkxvb3ApICYmIChtX3Nob3dBbmltYXRpb25zID09IEtI
VE1MU2V0dGluZ3M6OktBbmltYXRpb25Mb29wT25jZSkpIHx8Ci0gICAgICAgKChzdGF0dXMgPT0g
UU1vdmllOjpFbmRPZkZyYW1lKSAmJiAobV9zaG93QW5pbWF0aW9ucyA9PSBLSFRNTFNldHRpbmdz
OjpLQW5pbWF0aW9uRGlzYWJsZWQpKQotICAgICAgKQotICAgIHsKLSAgICAgICAgaWYoaW1nU291
cmNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXRTaG93QW5pbWF0aW9ucyggS0hUTUxTZXR0
aW5nczo6S0FuaW1hdGlvbkRpc2FibGVkICk7Ci0KLSAgICAgICAgICAgIC8vIG1vbm9jaHJvbWUg
YWxwaGFtYXNrZWQgaW1hZ2VzIGFyZSB1c3VhbGx5IGFib3V0IDEwMDAwIHRpbWVzCi0gICAgICAg
ICAgICAvLyBmYXN0ZXIgdG8gZHJhdywgc28gdGhpcyBpcyB3b3J0aCB0aGUgaGFjawotICAgICAg
ICAgICAgaWYgKHAgJiYgbW9ub2Nocm9tZSAmJiBwLT5kZXB0aCgpID4gMSApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgUVBpeG1hcCogcGl4ID0gbmV3IFFQaXhtYXA7Ci0gICAgICAg
ICAgICAgICAgcGl4LT5jb252ZXJ0RnJvbUltYWdlKCBwLT5jb252ZXJ0VG9JbWFnZSgpLmNvbnZl
cnREZXB0aCggMSApLCBNb25vT25seXxBdm9pZERpdGhlciApOwotICAgICAgICAgICAgICAgIGlm
ICggcC0+bWFzaygpICkKLSAgICAgICAgICAgICAgICAgICAgcGl4LT5zZXRNYXNrKCAqcC0+bWFz
aygpICk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHA7Ci0gICAgICAgICAgICAgICAgcCA9IHBp
eDsKLSAgICAgICAgICAgICAgICBtb25vY2hyb21lID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBDYWNoZWRPYmplY3RDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMp
OwotICAgICAgICB3aGlsZSAoQ2FjaGVkT2JqZWN0Q2xpZW50ICpjID0gdy5uZXh0KCkpCi0gICAg
ICAgICAgICBjLT5ub3RpZnlGaW5pc2hlZCh0aGlzKTsKLSAgICB9Ci0KLSAgICBpZigoc3RhdHVz
ID09IFFNb3ZpZTo6RW5kT2ZGcmFtZSkgfHwgKHN0YXR1cyA9PSBRTW92aWU6OkVuZE9mTW92aWUp
KQotICAgIHsKLSNpZmRlZiBDQUNIRV9ERUJVRwotICAgICAgICBRUmVjdCByKHZhbGlkX3JlY3Qo
KSk7Ci0gICAgICAgIHFEZWJ1ZygibW92aWUgU3RhdHVzIGZyYW1lIHVwZGF0ZSAlZC8lZC8lZC8l
ZCwgcGl4bWFwIHNpemUgJWQvJWQiLCByLngoKSwgci55KCksIHIucmlnaHQoKSwgci5ib3R0b20o
KSwKLSAgICAgICAgICAgICAgIHBpeG1hcCgpLnNpemUoKS53aWR0aCgpLCBwaXhtYXAoKS5zaXpl
KCkuaGVpZ2h0KCkpOwotI2VuZGlmCi0gICAgICAgICAgICBkb19ub3RpZnkocGl4bWFwKCksIHZh
bGlkX3JlY3QoKSk7Ci0gICAgfQotfQotCi12b2lkIENhY2hlZEltYWdlOjptb3ZpZVJlc2l6ZShj
b25zdCBRU2l6ZSYgLypzKi8pCi17Ci0vLyAgICBkb19ub3RpZnkobS0+ZnJhbWVQaXhtYXAoKSwg
UVJlY3QoKSk7Ci19Ci0KLSNlbmRpZiAvLyBBUFBMRV9DSEFOR0VTCiAKIHZvaWQgQ2FjaGVkSW1h
Z2U6OnNldFNob3dBbmltYXRpb25zKCBLSFRNTFNldHRpbmdzOjpLQW5pbWF0aW9uQWR2aWNlIHNo
b3dBbmltYXRpb25zICkKIHsKICAgICBtX3Nob3dBbmltYXRpb25zID0gc2hvd0FuaW1hdGlvbnM7
Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBpZiAoIChtX3Nob3dBbmltYXRpb25zID09IEtIVE1M
U2V0dGluZ3M6OktBbmltYXRpb25EaXNhYmxlZCkgJiYgaW1nU291cmNlICkgewotICAgICAgICBp
bWdTb3VyY2UtPmNsZWFuQnVmZmVyKCk7Ci0gICAgICAgIGRlbGV0ZSBwOwotICAgICAgICBwID0g
bmV3IFFQaXhtYXAobS0+ZnJhbWVQaXhtYXAoKSk7Ci0KLSAgICAgICAgbS0+ZGlzY29ubmVjdFVw
ZGF0ZSggdGhpcywgU0xPVCggbW92aWVVcGRhdGVkKCBjb25zdCBRUmVjdCAmKSApKTsKLSAgICAg
ICAgbS0+ZGlzY29ubmVjdFN0YXR1cyggdGhpcywgU0xPVCggbW92aWVTdGF0dXMoIGludCApICkp
OwotICAgICAgICBtLT5kaXNjb25uZWN0UmVzaXplKCB0aGlzLCBTTE9UKCBtb3ZpZVJlc2l6ZSgg
Y29uc3QgUVNpemUmICkgKSApOwotICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QoMCwgdGhpcywg
U0xPVCggZGVsZXRlTW92aWUoKSkpOwotICAgICAgICBpbWdTb3VyY2UgPSAwOwotICAgIH0KLSNl
bmRpZgotfQotCi0jaWYgIUFQUExFX0NIQU5HRVMKLQotdm9pZCBDYWNoZWRJbWFnZTo6ZGVsZXRl
TW92aWUoKQotewotICAgIGRlbGV0ZSBtOyBtID0gMDsKIH0KIAotI2VuZGlmIC8vIEFQUExFX0NI
QU5HRVMKIAogdm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXIoKQogewogICAgIGRlbGV0ZSBtOyAgIG0g
PSAwOwogICAgIGRlbGV0ZSBwOyAgIHAgPSAwOwogICAgIGRlbGV0ZSBiZzsgIGJnID0gMDsKLSNp
ZiAhQVBQTEVfQ0hBTkdFUwotICAgIGJnQ29sb3IgPSBxUmdiYSggMCwgMCwgMCwgMHhmZiApOwot
I2VuZGlmCiAgICAgZGVsZXRlIHBpeFBhcnQ7IHBpeFBhcnQgPSAwOwogCiAgICAgZm9ybWF0VHlw
ZSA9IDA7CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIHR5cGVDaGVja2VkID0gZmFsc2U7Ci0j
ZW5kaWYKICAgICBzZXRTaXplKDApOwogCiAgICAgLy8gTm8gbmVlZCB0byBkZWxldGUgaW1hZ2VT
b3VyY2UgLSBRTW92aWUgZG9lcyBpdCBmb3IgdXMKICAgICBpbWdTb3VyY2UgPSAwOwogCi0jaWYg
QVBQTEVfQ0hBTkdFUwogICAgIGlmIChtX2RlY29kZXJDYWxsYmFjaykgewogICAgICAgICBtX2Rl
Y29kZXJDYWxsYmFjay0+Y2xlYXIoKTsKICAgICAgICAgbV9kZWNvZGVyQ2FsbGJhY2stPmRlcmVm
KCk7CiAgICAgICAgIG1fZGVjb2RlckNhbGxiYWNrID0gMDsKICAgICB9Ci0jZW5kaWYKIH0KIAog
dm9pZCBDYWNoZWRJbWFnZTo6ZGF0YSAoIFFCdWZmZXIgJl9idWZmZXIsIGJvb2wgZW9mICkKQEAg
LTk4NCw1NyArNTk2LDYgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGF0YSAoIFFCdWZmZXIgJl9idWZm
ZQogICAgIGtkRGVidWcoIDYwNjAgKSA8PCB0aGlzIDw8ICJpbiBDYWNoZWRJbWFnZTo6ZGF0YShi
dWZmZXJzaXplICIgPDwgX2J1ZmZlci5idWZmZXIoKS5zaXplKCkgPDwiLCBlb2Y9IiA8PCBlb2Yg
PDwgZW5kbDsKICNlbmRpZgogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBpZiAoICF0eXBlQ2hl
Y2tlZCApCi0gICAgewotICAgICAgICBmb3JtYXRUeXBlID0gUUltYWdlRGVjb2Rlcjo6Zm9ybWF0
TmFtZSggKGNvbnN0IHVjaGFyKilfYnVmZmVyLmJ1ZmZlcigpLmRhdGEoKSwgX2J1ZmZlci5zaXpl
KCkpOwotCi0gICAgICAgIHR5cGVDaGVja2VkID0gdHJ1ZTsKLQotICAgICAgICBpZiAoIGZvcm1h
dFR5cGUgKSAgLy8gbW92aWUgZm9ybWF0IGV4aXN0cwotICAgICAgICB7Ci0gICAgICAgICAgICBp
bWdTb3VyY2UgPSBuZXcgSW1hZ2VTb3VyY2UoIF9idWZmZXIuYnVmZmVyKCkpOwotICAgICAgICAg
ICAgbSA9IG5ldyBRTW92aWUoIGltZ1NvdXJjZSwgODE5MiApOwotICAgICAgICAgICAgbS0+Y29u
bmVjdFVwZGF0ZSggdGhpcywgU0xPVCggbW92aWVVcGRhdGVkKCBjb25zdCBRUmVjdCAmKSApKTsK
LSAgICAgICAgICAgIG0tPmNvbm5lY3RTdGF0dXMoIHRoaXMsIFNMT1QoIG1vdmllU3RhdHVzKGlu
dCkpKTsKLSAgICAgICAgICAgIG0tPmNvbm5lY3RSZXNpemUoIHRoaXMsIFNMT1QoIG1vdmllUmVz
aXplKCBjb25zdCBRU2l6ZSYgKSApICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIGlt
Z1NvdXJjZSApCi0gICAgewotICAgICAgICBpbWdTb3VyY2UtPnNldEVPRihlb2YpOwotICAgICAg
ICBpbWdTb3VyY2UtPm1heWJlUmVhZHkoKTsKLSAgICB9Ci0KLSAgICBpZihlb2YpCi0gICAgewot
ICAgICAgICAvLyBRTW92aWUgY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBhbGwga2luZHMgb2Yg
aW1hZ2UgZm9ybWF0cwotICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHVzZSBhIFFQaXhtYXAgaGVy
ZSB3aGVuIHdlIGZpbmlzaGVkIGxvYWRpbmcgdGhlIGNvbXBsZXRlCi0gICAgICAgIC8vIHBpY3R1
cmUgYW5kIGRpc3BsYXkgaXQgdGhlbiBhbGwgYXQgb25jZS4KLSAgICAgICAgaWYodHlwZUNoZWNr
ZWQgJiYgIWZvcm1hdFR5cGUpCi0gICAgICAgIHsKLSNpZmRlZiBDQUNIRV9ERUJVRwotICAgICAg
ICAgICAga2REZWJ1Zyg2MDYwKSA8PCAiQ2FjaGVkSW1hZ2U6OmRhdGEoKTogcmVsb2FkaW5nIGFz
IHBpeG1hcDoiIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgICAgIHAgPSBuZXcgUVBpeG1hcCgg
X2J1ZmZlci5idWZmZXIoKSApOwotICAgICAgICAgICAgLy8gc2V0IHNpemUgb2YgaW1hZ2UuCi0j
aWZkZWYgQ0FDSEVfREVCVUcKLSAgICAgICAgICAgIGtkRGVidWcoNjA2MCkgPDwgIkNhY2hlZElt
YWdlOjpkYXRhKCk6IGltYWdlIGlzIG51bGw6ICIgPDwgcC0+aXNOdWxsKCkgPDwgZW5kbDsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIGlmKHAtPmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgZXJyb3JPY2N1cmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgZG9fbm90aWZ5KHBpeG1hcCgpLCBRUmVjdCgwLCAwLCAxNiwgMTYpKTsgLy8gbG9hZCAi
YnJva2VuIGltYWdlIiBpY29uCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgZG9fbm90aWZ5KCpwLCBwLT5yZWN0KCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgUVNpemUgcyA9IHBpeG1hcF9zaXplKCk7Ci0gICAgICAgIHNldFNpemUo
cy53aWR0aCgpICogcy5oZWlnaHQoKSAqIDIpOwotICAgIH0KLSNlbHNlIC8vIEFQUExFX0NIQU5H
RVMKICAgICBib29sIGNhbkRyYXcgPSBmYWxzZTsKICAgICAKICAgICBtX2RhdGFTaXplID0gX2J1
ZmZlci5zaXplKCk7CkBAIC0xMDc0LDcgKzYzNSw2IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmRhdGEg
KCBRQnVmZmVyICZfYnVmZmUKICAgICAgICAgICAgIGNoZWNrTm90aWZ5KCk7CiAgICAgICAgIH0K
ICAgICB9Ci0jZW5kaWYgLy8gQVBQTEVfQ0hBTkdFUwogfQogCiB2b2lkIENhY2hlZEltYWdlOjpl
cnJvciggaW50IC8qZXJyKi8sIGNvbnN0IGNoYXIgKi8qdGV4dCovICkKQEAgLTEwODQsMTUgKzY0
NCwxMCBAQCB2b2lkIENhY2hlZEltYWdlOjplcnJvciggaW50IC8qZXJyKi8sIGNvCiAjZW5kaWYK
IAogICAgIGNsZWFyKCk7Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICB0eXBlQ2hlY2tlZCA9IHRy
dWU7Ci0jZW5kaWYKICAgICBlcnJvck9jY3VyZWQgPSB0cnVlOwogICAgIGRvX25vdGlmeShwaXht
YXAoKSwgUVJlY3QoMCwgMCwgMTYsIDE2KSk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIG1fbG9h
ZGluZyA9IGZhbHNlOwogICAgIGNoZWNrTm90aWZ5KCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBDYWNo
ZWRJbWFnZTo6Y2hlY2tOb3RpZnkoKQpAQCAtMTI4OCw5ICs4NDMsNyBAQCBEb2NMb2FkZXI6OkRv
Y0xvYWRlcihLSFRNTFBhcnQqIHBhcnQsIERvCiAgICAgbV9kb2MgPSBkb2M7CiAgICAgbV9sb2Fk
SW5Qcm9ncmVzcyA9IGZhbHNlOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIENhY2hlOjppbml0
KCk7Ci0jZW5kaWYKICAgICBDYWNoZTo6ZG9jbG9hZGVyLT5hcHBlbmQoIHRoaXMgKTsKIH0KIApA
QCAtMTM0MSwyMSArODk0LDE1IEBAIENhY2hlZEltYWdlICpEb2NMb2FkZXI6OnJlcXVlc3RJbWFn
ZSggY28KICAgICBLVVJMIGZ1bGxVUkwgPSBtX2RvYy0+Y29tcGxldGVVUkwoIHVybC5xc3RyaW5n
KCkgKTsKICAgICBpZiAoIG1fcGFydCAmJiBtX3BhcnQtPm9ubHlMb2NhbFJlZmVyZW5jZXMoKSAm
JiBmdWxsVVJMLnByb3RvY29sKCkgIT0gImZpbGUiKSByZXR1cm4gMDsKIAotI2lmIEFQUExFX0NI
QU5HRVMKICAgICBpZiAoS1dRQ2hlY2tJZlJlbG9hZGluZyh0aGlzKSkgewogICAgICAgICBzZXRD
YWNoZVBvbGljeShLSU86OkNDX1JlbG9hZCk7CiAgICAgfQotI2VuZGlmCiAKICAgICBib29sIHJl
bG9hZCA9IG5lZWRSZWxvYWQoZnVsbFVSTCk7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgQ2Fj
aGVkSW1hZ2UgKmNhY2hlZE9iamVjdCA9IENhY2hlOjpyZXF1ZXN0SW1hZ2UodGhpcywgZnVsbFVS
TCwgcmVsb2FkLCBtX2V4cGlyZURhdGUpOwogICAgIEtXUUNoZWNrQ2FjaGVPYmplY3RTdGF0dXMo
dGhpcywgY2FjaGVkT2JqZWN0KTsKICAgICByZXR1cm4gY2FjaGVkT2JqZWN0OwotI2Vsc2UKLSAg
ICByZXR1cm4gQ2FjaGU6OnJlcXVlc3RJbWFnZSh0aGlzLCBmdWxsVVJMLCByZWxvYWQsIG1fZXhw
aXJlRGF0ZSk7Ci0jZW5kaWYKIH0KIAogQ2FjaGVkQ1NTU3R5bGVTaGVldCAqRG9jTG9hZGVyOjpy
ZXF1ZXN0U3R5bGVTaGVldCggY29uc3QgRE9NOjpET01TdHJpbmcgJnVybCwgY29uc3QgUVN0cmlu
ZyYgY2hhcnNldCkKQEAgLTEzNjMsMjEgKzkxMCwxNSBAQCBDYWNoZWRDU1NTdHlsZVNoZWV0ICpE
b2NMb2FkZXI6OnJlcXVlc3RTCiAgICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJM
KCB1cmwucXN0cmluZygpICk7CiAgICAgaWYgKCBtX3BhcnQgJiYgbV9wYXJ0LT5vbmx5TG9jYWxS
ZWZlcmVuY2VzKCkgJiYgZnVsbFVSTC5wcm90b2NvbCgpICE9ICJmaWxlIikgcmV0dXJuIDA7CiAK
LSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYgKEtXUUNoZWNrSWZSZWxvYWRpbmcodGhpcykpIHsK
ICAgICAgICAgc2V0Q2FjaGVQb2xpY3koS0lPOjpDQ19SZWxvYWQpOwogICAgIH0KLSNlbmRpZgog
CiAgICAgYm9vbCByZWxvYWQgPSBuZWVkUmVsb2FkKGZ1bGxVUkwpOwogCi0jaWYgQVBQTEVfQ0hB
TkdFUwogICAgIENhY2hlZENTU1N0eWxlU2hlZXQgKmNhY2hlZE9iamVjdCA9IENhY2hlOjpyZXF1
ZXN0U3R5bGVTaGVldCh0aGlzLCB1cmwsIHJlbG9hZCwgbV9leHBpcmVEYXRlLCBjaGFyc2V0KTsK
ICAgICBLV1FDaGVja0NhY2hlT2JqZWN0U3RhdHVzKHRoaXMsIGNhY2hlZE9iamVjdCk7CiAgICAg
cmV0dXJuIGNhY2hlZE9iamVjdDsKLSNlbHNlCi0gICAgcmV0dXJuIENhY2hlOjpyZXF1ZXN0U3R5
bGVTaGVldCh0aGlzLCB1cmwsIHJlbG9hZCwgbV9leHBpcmVEYXRlLCBjaGFyc2V0KTsKLSNlbmRp
ZgogfQogCiBDYWNoZWRTY3JpcHQgKkRvY0xvYWRlcjo6cmVxdWVzdFNjcmlwdCggY29uc3QgRE9N
OjpET01TdHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyYgY2hhcnNldCkKQEAgLTEzODUsMjEgKzky
NiwxNSBAQCBDYWNoZWRTY3JpcHQgKkRvY0xvYWRlcjo6cmVxdWVzdFNjcmlwdCggCiAgICAgS1VS
TCBmdWxsVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJMKCB1cmwucXN0cmluZygpICk7CiAgICAgaWYg
KCBtX3BhcnQgJiYgbV9wYXJ0LT5vbmx5TG9jYWxSZWZlcmVuY2VzKCkgJiYgZnVsbFVSTC5wcm90
b2NvbCgpICE9ICJmaWxlIikgcmV0dXJuIDA7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYg
KEtXUUNoZWNrSWZSZWxvYWRpbmcodGhpcykpIHsKICAgICAgICAgc2V0Q2FjaGVQb2xpY3koS0lP
OjpDQ19SZWxvYWQpOwogICAgIH0KLSNlbmRpZgogCiAgICAgYm9vbCByZWxvYWQgPSBuZWVkUmVs
b2FkKGZ1bGxVUkwpOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIENhY2hlZFNjcmlwdCAqY2Fj
aGVkT2JqZWN0ID0gQ2FjaGU6OnJlcXVlc3RTY3JpcHQodGhpcywgdXJsLCByZWxvYWQsIG1fZXhw
aXJlRGF0ZSwgY2hhcnNldCk7CiAgICAgS1dRQ2hlY2tDYWNoZU9iamVjdFN0YXR1cyh0aGlzLCBj
YWNoZWRPYmplY3QpOwogICAgIHJldHVybiBjYWNoZWRPYmplY3Q7Ci0jZWxzZQotICAgIHJldHVy
biBDYWNoZTo6cmVxdWVzdFNjcmlwdCh0aGlzLCB1cmwsIHJlbG9hZCwgbV9leHBpcmVEYXRlLCBj
aGFyc2V0KTsKLSNlbmRpZgogfQogCiAjaWZkZWYgS0hUTUxfWFNMVApAQCAtMTQwOSwyMCArOTQ0
LDE0IEBAIENhY2hlZFhTTFN0eWxlU2hlZXQqIERvY0xvYWRlcjo6cmVxdWVzdFgKICAgICAKICAg
ICBpZiAobV9wYXJ0ICYmIG1fcGFydC0+b25seUxvY2FsUmVmZXJlbmNlcygpICYmIGZ1bGxVUkwu
cHJvdG9jb2woKSAhPSAiZmlsZSIpIHJldHVybiAwOwogICAgIAotI2lmIEFQUExFX0NIQU5HRVMK
ICAgICBpZiAoS1dRQ2hlY2tJZlJlbG9hZGluZyh0aGlzKSkKICAgICAgICAgc2V0Q2FjaGVQb2xp
Y3koS0lPOjpDQ19SZWxvYWQpOwotI2VuZGlmCiAgICAgCiAgICAgYm9vbCByZWxvYWQgPSBuZWVk
UmVsb2FkKGZ1bGxVUkwpOwogICAgIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICBDYWNoZWRYU0xT
dHlsZVNoZWV0ICpjYWNoZWRPYmplY3QgPSBDYWNoZTo6cmVxdWVzdFhTTFN0eWxlU2hlZXQodGhp
cywgdXJsLCByZWxvYWQsIG1fZXhwaXJlRGF0ZSk7CiAgICAgS1dRQ2hlY2tDYWNoZU9iamVjdFN0
YXR1cyh0aGlzLCBjYWNoZWRPYmplY3QpOwogICAgIHJldHVybiBjYWNoZWRPYmplY3Q7Ci0jZWxz
ZQotICAgIHJldHVybiBDYWNoZTo6cmVxdWVzdFhTTFN0eWxlU2hlZXQodGhpcywgdXJsLCByZWxv
YWQsIG1fZXhwaXJlRGF0ZSk7Ci0jZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNDM0LDIxICs5NjMs
MTUgQEAgQ2FjaGVkWEJMRG9jdW1lbnQqIERvY0xvYWRlcjo6cmVxdWVzdFhCTAogICAgIC8vIEZJ
WE1FOiBJcyB0aGlzIHJpZ2h0IGZvciBYQkw/CiAgICAgaWYgKG1fcGFydCAmJiBtX3BhcnQtPm9u
bHlMb2NhbFJlZmVyZW5jZXMoKSAmJiBmdWxsVVJMLnByb3RvY29sKCkgIT0gImZpbGUiKSByZXR1
cm4gMDsKICAgICAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYgKEtXUUNoZWNrSWZSZWxvYWRp
bmcodGhpcykpIHsKICAgICAgICAgc2V0Q2FjaGVQb2xpY3koS0lPOjpDQ19SZWxvYWQpOwogICAg
IH0KLSNlbmRpZgogICAgIAogICAgIGJvb2wgcmVsb2FkID0gbmVlZFJlbG9hZChmdWxsVVJMKTsK
ICAgICAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgQ2FjaGVkWEJMRG9jdW1lbnQgKmNhY2hlZE9i
amVjdCA9IENhY2hlOjpyZXF1ZXN0WEJMRG9jdW1lbnQodGhpcywgdXJsLCByZWxvYWQsIG1fZXhw
aXJlRGF0ZSk7CiAgICAgS1dRQ2hlY2tDYWNoZU9iamVjdFN0YXR1cyh0aGlzLCBjYWNoZWRPYmpl
Y3QpOwogICAgIHJldHVybiBjYWNoZWRPYmplY3Q7Ci0jZWxzZQotICAgIHJldHVybiBDYWNoZTo6
cmVxdWVzdFhCTERvY3VtZW50KHRoaXMsIHVybCwgcmVsb2FkLCBtX2V4cGlyZURhdGUpOwotI2Vu
ZGlmCiB9CiAjZW5kaWYKIApAQCAtMTUxMCwxNiArMTAzMywxMiBAQCBMb2FkZXI6OkxvYWRlcigp
IDogUU9iamVjdCgpCiB7CiAgICAgbV9yZXF1ZXN0c1BlbmRpbmcuc2V0QXV0b0RlbGV0ZSggdHJ1
ZSApOwogICAgIG1fcmVxdWVzdHNMb2FkaW5nLnNldEF1dG9EZWxldGUoIHRydWUgKTsKLSNpZiBB
UFBMRV9DSEFOR0VTCiAgICAga3dxID0gbmV3IEtXUUxvYWRlcih0aGlzKTsKLSNlbmRpZgogfQog
CiBMb2FkZXI6On5Mb2FkZXIoKQogewotI2lmIEFQUExFX0NIQU5HRVMKICAgICBkZWxldGUga3dx
OwotI2VuZGlmCiB9CiAKIHZvaWQgTG9hZGVyOjpsb2FkKERvY0xvYWRlciogZGwsIENhY2hlZE9i
amVjdCAqb2JqZWN0LCBib29sIGluY3JlbWVudGFsKQpAQCAtMTU0NSwxMSArMTA2NCw3IEBAIHZv
aWQgTG9hZGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpCiAjZW5kaWYKIAogICBLVVJMIHUocmVx
LT5vYmplY3QtPnVybCgpLnFzdHJpbmcoKSk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICBLSU86OlRy
YW5zZmVySm9iKiBqb2IgPSBLSU86OmdldCggdSwgZmFsc2UsIGZhbHNlIC8qbm8gR1VJKi8sIHRy
dWUpOwotI2Vsc2UKLSAgS0lPOjpUcmFuc2ZlckpvYiogam9iID0gS0lPOjpnZXQoIHUsIGZhbHNl
LCBmYWxzZSAvKm5vIEdVSSovKTsKLSNlbmRpZgogICAKICAgam9iLT5hZGRNZXRhRGF0YSgiY2Fj
aGUiLCBnZXRDYWNoZUNvbnRyb2xTdHJpbmcocmVxLT5vYmplY3QtPmNhY2hlUG9saWN5KCkpKTsK
ICAgaWYgKCFyZXEtPm9iamVjdC0+YWNjZXB0KCkuaXNFbXB0eSgpKQpAQCAtMTU2NywxMyArMTA4
Miw4IEBAIHZvaWQgTG9hZGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpCiAgICAgICAgICBqb2It
PmFkZE1ldGFEYXRhKCJjcm9zcy1kb21haW4iLCAidHJ1ZSIpOwogICB9CiAKLSNpZiBBUFBMRV9D
SEFOR0VTCiAgIGNvbm5lY3QoIGpvYiwgU0lHTkFMKCByZXN1bHQoIEtJTzo6Sm9iICosIE5TRGF0
YSAqKSApLCB0aGlzLCBTTE9UKCBzbG90RmluaXNoZWQoIEtJTzo6Sm9iICosIE5TRGF0YSAqKSAp
ICk7Ci0jZWxzZQotICBjb25uZWN0KCBqb2IsIFNJR05BTCggcmVzdWx0KCBLSU86OkpvYiAqICkg
KSwgdGhpcywgU0xPVCggc2xvdEZpbmlzaGVkKCBLSU86OkpvYiAqICkgKSApOwotI2VuZGlmCiAg
IAotI2lmIEFQUExFX0NIQU5HRVMKICAgY29ubmVjdCggam9iLCBTSUdOQUwoIGRhdGEoIEtJTzo6
Sm9iKiwgY29uc3QgY2hhciAqLCBpbnQpKSwKICAgICAgICAgICAgU0xPVCggc2xvdERhdGEoIEtJ
Tzo6Sm9iKiwgY29uc3QgY2hhciAqLCBpbnQpKSk7CiAgIGNvbm5lY3QoIGpvYiwgU0lHTkFMKCBy
ZWNlaXZlZFJlc3BvbnNlKCBLSU86OkpvYiAqLCBOU1VSTFJlc3BvbnNlICopKSwgU0xPVCggc2xv
dFJlY2VpdmVkUmVzcG9uc2UoIEtJTzo6Sm9iICosIE5TVVJMUmVzcG9uc2UgKikpICk7CkBAIC0x
NTg3LDUyICsxMDk3LDggQEAgdm9pZCBMb2FkZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKCkKICAg
ICAgIH0KICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLmluc2VydChqb2IsIHJlcSk7CiAgIH0KLSNl
bHNlCi0gIGNvbm5lY3QoIGpvYiwgU0lHTkFMKCBkYXRhKCBLSU86OkpvYiosIGNvbnN0IFFCeXRl
QXJyYXkgJikpLAotICAgICAgICAgICBTTE9UKCBzbG90RGF0YSggS0lPOjpKb2IqLCBjb25zdCBR
Qnl0ZUFycmF5ICYpKSk7Ci0KLSAgaWYgKCByZXEtPm9iamVjdC0+c2NoZWR1bGUoKSApCi0gICAg
ICBLSU86OlNjaGVkdWxlcjo6c2NoZWR1bGVKb2IoIGpvYiApOwotCi0gIG1fcmVxdWVzdHNMb2Fk
aW5nLmluc2VydChqb2IsIHJlcSk7Ci0jZW5kaWYgLy8gQVBQTEVfQ0hBTkdFUwogfQogCi0jaWYg
IUFQUExFX0NIQU5HRVMKLXZvaWQgTG9hZGVyOjpzbG90RmluaXNoZWQoIEtJTzo6Sm9iKiBqb2Ip
Ci17Ci0gIFJlcXVlc3QgKnIgPSBtX3JlcXVlc3RzTG9hZGluZy50YWtlKCBqb2IgKTsKLSAgS0lP
OjpUcmFuc2ZlckpvYiogaiA9IHN0YXRpY19jYXN0PEtJTzo6VHJhbnNmZXJKb2IqPihqb2IpOwot
Ci0gIGlmICggIXIgKQotICAgIHJldHVybjsKLSAgCi0gIGlmIChqLT5lcnJvcigpIHx8IGotPmlz
RXJyb3JQYWdlKCkpCi0gIHsKLSAgICAgIGtkRGVidWcoNjA2MCkgPDwgIkxvYWRlcjo6c2xvdEZp
bmlzaGVkLCB3aXRoIGVycm9yLiBqb2ItPmVycm9yKCk9ICIgPDwgai0+ZXJyb3IoKSA8PCAiIGpv
Yi0+aXNFcnJvclBhZ2UoKT0iIDw8IGotPmlzRXJyb3JQYWdlKCkgPDwgZW5kbDsKLSAgICAgIHIt
Pm9iamVjdC0+ZXJyb3IoIGpvYi0+ZXJyb3IoKSwgam9iLT5lcnJvclRleHQoKS5hc2NpaSgpICk7
Ci0gICAgICBlbWl0IHJlcXVlc3RGYWlsZWQoIHItPm1fZG9jTG9hZGVyLCByLT5vYmplY3QgKTsK
LSAgfQotICBlbHNlCi0gIHsKLSAgICAgIHItPm9iamVjdC0+ZGF0YShyLT5tX2J1ZmZlciwgdHJ1
ZSk7ICAKLSAgICAgIGVtaXQgcmVxdWVzdERvbmUoIHItPm1fZG9jTG9hZGVyLCByLT5vYmplY3Qg
KTsKLSAgICAgIHRpbWVfdCBleHBpcmVEYXRlID0gai0+cXVlcnlNZXRhRGF0YSgiZXhwaXJlLWRh
dGUiKS50b0xvbmcoKTsKLWtkRGVidWcoNjA2MCkgPDwgIkxvYWRlcjo6c2xvdEZpbmlzaGVkLCB1
cmwgPSAiIDw8IGotPnVybCgpLnVybCgpIDw8ICIgZXhwaXJlcyAiIDw8IGN0aW1lKCZleHBpcmVE
YXRlKSA8PCBlbmRsOwotICAgICAgci0+b2JqZWN0LT5zZXRFeHBpcmVEYXRlKGV4cGlyZURhdGUs
IGZhbHNlKTsKLSAgfQotCi0gIHItPm9iamVjdC0+ZmluaXNoKCk7Ci0KLSNpZmRlZiBDQUNIRV9E
RUJVRwotICBrZERlYnVnKCA2MDYwICkgPDwgIkxvYWRlcjo6IEpPQiBGSU5JU0hFRCAiIDw8IHIt
Pm9iamVjdCA8PCAiOiAiIDw8IHItPm9iamVjdC0+dXJsKCkucXN0cmluZygpIDw8IGVuZGw7Ci0j
ZW5kaWYKLQotICBkZWxldGUgcjsKLQotICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwotfQotI2Vs
c2UgLy8gQVBQTEVfQ0hBTkdFUwogdm9pZCBMb2FkZXI6OnNsb3RGaW5pc2hlZCggS0lPOjpKb2Iq
IGpvYiwgTlNEYXRhICphbGxEYXRhKQogewogICAgIFJlcXVlc3QgKnIgPSBtX3JlcXVlc3RzTG9h
ZGluZy50YWtlKCBqb2IgKTsKQEAgLTE2ODIsOSArMTE0OCw3IEBAIHZvaWQgTG9hZGVyOjpzbG90
RmluaXNoZWQoIEtJTzo6Sm9iKiBqb2IKIAogICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9
Ci0jZW5kaWYKIAotI2lmIEFQUExFX0NIQU5HRVMKIAogdm9pZCBMb2FkZXI6OnNsb3RSZWNlaXZl
ZFJlc3BvbnNlKEtJTzo6Sm9iKiBqb2IsIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlKQogewpAQCAt
MTcxMiwxMyArMTE3Niw4IEBAIHZvaWQgTG9hZGVyOjpzbG90UmVjZWl2ZWRSZXNwb25zZShLSU86
OkoKICAgICB9CiB9CiAKLSNlbmRpZgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogdm9pZCBMb2FkZXI6
OnNsb3REYXRhKCBLSU86OkpvYipqb2IsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBzaXplICkKLSNl
bHNlCi12b2lkIExvYWRlcjo6c2xvdERhdGEoIEtJTzo6Sm9iKmpvYiwgY29uc3QgUUJ5dGVBcnJh
eSAmZGF0YSApCi0jZW5kaWYKIHsKICAgICBSZXF1ZXN0ICpyID0gbV9yZXF1ZXN0c0xvYWRpbmdb
am9iXTsKICAgICBpZighcikgewpAQCAtMTcyOSwxMSArMTE4OCw3IEBAIHZvaWQgTG9hZGVyOjpz
bG90RGF0YSggS0lPOjpKb2Iqam9iLCBjb24KICAgICBpZiAoICFyLT5tX2J1ZmZlci5pc09wZW4o
KSApCiAgICAgICAgIHItPm1fYnVmZmVyLm9wZW4oIElPX1dyaXRlT25seSApOwogCi0jaWYgQVBQ
TEVfQ0hBTkdFUwogICAgIHItPm1fYnVmZmVyLndyaXRlQmxvY2soIGRhdGEsIHNpemUgKTsKLSNl
bHNlCi0gICAgci0+bV9idWZmZXIud3JpdGVCbG9jayggZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgp
ICk7Ci0jZW5kaWYKIAogICAgIGlmIChyLT5tdWx0aXBhcnQpCiAgICAgICAgIHItPm9iamVjdC0+
ZGF0YSggci0+bV9idWZmZXIsIHRydWUgKTsgLy8gdGhlIGxvYWRlciBkZWxpdmVycyB0aGUgZGF0
YSBpbiBhIG11bHRpcGFydCBzZWN0aW9uIGFsbCBhdCBvbmNlLCBzZW5kIGVvZgpAQCAtMTc1Niwx
MiArMTIxMSwxMCBAQCBpbnQgTG9hZGVyOjpudW1SZXF1ZXN0cyggRG9jTG9hZGVyKiBkbCApCiAg
ICAgICAgICAgICBpZiAoIWxJdC5jdXJyZW50KCktPm11bHRpcGFydCkKICAgICAgICAgICAgICAg
ICByZXMrKzsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICBRUHRyTGlzdEl0ZXJhdG9yPFJlcXVl
c3Q+IGJkSXQoIG1fcmVxdWVzdHNCYWNrZ3JvdW5kRGVjb2RpbmcgKTsKICAgICBmb3IgKDsgYmRJ
dC5jdXJyZW50KCk7ICsrYmRJdCApCiAgICAgICAgIGlmICggYmRJdC5jdXJyZW50KCktPm1fZG9j
TG9hZGVyID09IGRsICkKICAgICAgICAgICAgIHJlcysrOwotI2VuZGlmCiAKICAgICBpZiAoZGwt
PmxvYWRJblByb2dyZXNzKCkpCiAgICAgICAgIHJlcysrOwpAQCAtMTgwNSw3ICsxMjU4LDYgQEAg
dm9pZCBMb2FkZXI6OmNhbmNlbFJlcXVlc3RzKCBEb2NMb2FkZXIqIAogICAgICAgICAgICAgKyts
SXQ7CiAgICAgfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIFFQdHJMaXN0SXRlcmF0b3I8UmVx
dWVzdD4gYmRJdCggbV9yZXF1ZXN0c0JhY2tncm91bmREZWNvZGluZyApOwogICAgIHdoaWxlICgg
YmRJdC5jdXJyZW50KCkgKQogICAgIHsKQEAgLTE4MTksMTAgKzEyNzEsOCBAQCB2b2lkIExvYWRl
cjo6Y2FuY2VsUmVxdWVzdHMoIERvY0xvYWRlciogCiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICsrYmRJdDsKICAgICB9Ci0jZW5kaWYKIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKIHZvaWQgTG9h
ZGVyOjpyZW1vdmVCYWNrZ3JvdW5kRGVjb2RpbmdSZXF1ZXN0IChSZXF1ZXN0ICpyKQogewogICAg
IGJvb2wgcHJlc2VudCA9IG1fcmVxdWVzdHNCYWNrZ3JvdW5kRGVjb2RpbmcuY29udGFpbnNSZWYo
cik7CkBAIC0xODMwLDcgKzEyODAsNiBAQCB2b2lkIExvYWRlcjo6cmVtb3ZlQmFja2dyb3VuZERl
Y29kaW5nUmVxCiAJbV9yZXF1ZXN0c0JhY2tncm91bmREZWNvZGluZy5yZW1vdmUgKHIpOwogICAg
IH0KIH0KLSNlbmRpZgogCiBLSU86OkpvYiAqTG9hZGVyOjpqb2JGb3JSZXF1ZXN0KCBjb25zdCBE
T006OkRPTVN0cmluZyAmdXJsICkgY29uc3QKIHsKQEAgLTE4NDcsMTQgKzEyOTYsMTIgQEAgS0lP
OjpKb2IgKkxvYWRlcjo6am9iRm9yUmVxdWVzdCggY29uc3QgRAogICAgIHJldHVybiAwOwogfQog
Ci0jaWYgQVBQTEVfQ0hBTkdFUwogCiBib29sIExvYWRlcjo6aXNLSFRNTExvYWRlcigpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLSNlbmRpZgogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKQEAgLTE4OTQsMTEgKzEzNDEsNyBAQCB2b2lkIENhY2hlOjppbml0KCkKICAgICAgICAg
bnVsbFBpeG1hcCA9IG5ldyBRUGl4bWFwOwogCiAgICAgaWYgKCAhYnJva2VuUGl4bWFwICkKLSNp
ZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGJyb2tlblBpeG1hcCA9IEtXUUxvYWRQaXhtYXAoIm1p
c3NpbmdfaW1hZ2UiKTsKLSNlbHNlCi0gICAgICAgIGJyb2tlblBpeG1hcCA9IG5ldyBRUGl4bWFw
KEtIVE1MRmFjdG9yeTo6aW5zdGFuY2UoKS0+aWNvbkxvYWRlcigpLT5sb2FkSWNvbigiZmlsZV9i
cm9rZW4iLCBLSWNvbjo6RGVza3RvcCwgMTYsIEtJY29uOjpEaXNhYmxlZFN0YXRlKSk7Ci0jZW5k
aWYKIAogICAgIGlmICggIW1fbG9hZGVyICkKICAgICAgICAgbV9sb2FkZXIgPSBuZXcgTG9hZGVy
KCk7CkBAIC0xOTM4LDIzICsxMzgxLDExIEBAIENhY2hlZEltYWdlICpDYWNoZTo6cmVxdWVzdElt
YWdlKCBEb2NMb2EKICAgICBlbHNlCiAgICAgICAgIGNhY2hlUG9saWN5ID0gS0lPOjpDQ19WZXJp
Znk7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8gQ2hlY2tpbmcgaWYgdGhlIFVSTCBpcyBt
YWxmb3JtZWQgaXMgbG90cyBvZiBleHRyYSB3b3JrIGZvciBsaXR0bGUgYmVuZWZpdC4KLSNlbHNl
Ci0gICAgaWYoIGt1cmwuaXNNYWxmb3JtZWQoKSApCi0gICAgewotI2lmZGVmIENBQ0hFX0RFQlVH
Ci0gICAgICBrZERlYnVnKCA2MDYwICkgPDwgIkNhY2hlOiBNYWxmb3JtZWQgdXJsOiAiIDw8IGt1
cmwudXJsKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotI2VuZGlm
CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYgKCFkbC0+ZG9jKCktPnNob3VsZENyZWF0ZVJl
bmRlcmVycygpKXsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotI2VuZGlmCiAKICAgICBDYWNo
ZWRPYmplY3QgKm8gPSAwOwogICAgIGlmICghcmVsb2FkKQpAQCAtMTk2NiwyMiArMTM5NywxNSBA
QCBDYWNoZWRJbWFnZSAqQ2FjaGU6OnJlcXVlc3RJbWFnZSggRG9jTG9hCiAjZW5kaWYKICAgICAg
ICAgQ2FjaGVkSW1hZ2UgKmltID0gbmV3IENhY2hlZEltYWdlKGRsLCB1cmwudXJsKCksIGNhY2hl
UG9saWN5LCBfZXhwaXJlRGF0ZSk7CiAgICAgICAgIGlmICggZGwgJiYgZGwtPmF1dG9sb2FkSW1h
Z2VzKCkgKSBDYWNoZTo6bG9hZGVyKCktPmxvYWQoZGwsIGltLCB0cnVlKTsKLSNpZiBBUFBMRV9D
SEFOR0VTCiAgICAgICAgIGlmIChjYWNoZURpc2FibGVkKQogICAgICAgICAgICAgaW0tPnNldEZy
ZWUodHJ1ZSk7CiAgICAgICAgIGVsc2UgewotI2VuZGlmCiAgICAgICAgIGNhY2hlLT5pbnNlcnQo
IHVybC51cmwoKSwgaW0gKTsKICAgICAgICAgbW92ZVRvSGVhZE9mTFJVTGlzdChpbSk7Ci0jaWYg
QVBQTEVfQ0hBTkdFUwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgbyA9IGltOwogICAgIH0K
IAotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgby0+c2V0RXhwaXJlRGF0ZShfZXhwaXJlRGF0ZSwg
dHJ1ZSk7Ci0jZW5kaWYKICAgICAKICAgICBpZihvLT50eXBlKCkgIT0gQ2FjaGVkT2JqZWN0OjpJ
bWFnZSkKICAgICB7CkBAIC0yMDAxLDkgKzE0MjUsNyBAQCBDYWNoZWRJbWFnZSAqQ2FjaGU6OnJl
cXVlc3RJbWFnZSggRG9jTG9hCiAgICAgbW92ZVRvSGVhZE9mTFJVTGlzdChvKTsKICAgICBpZiAo
IGRsICkgewogICAgICAgICBkbC0+bV9kb2NPYmplY3RzLnJlbW92ZSggbyApOwotI2lmIEFQUExF
X0NIQU5HRVMKICAgICAgICAgaWYgKCFjYWNoZURpc2FibGVkKQotI2VuZGlmCiAgICAgICAgIGRs
LT5tX2RvY09iamVjdHMuYXBwZW5kKCBvICk7CiAgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDYWNoZWRJbWFnZSAqPihvKTsKQEAgLTIwMjUsMTUgKzE0NDcsNyBAQCBDYWNoZWRDU1NTdHls
ZVNoZWV0ICpDYWNoZTo6cmVxdWVzdFN0eWxlCiAgICAgICAgIGNhY2hlUG9saWN5ID0gS0lPOjpD
Q19WZXJpZnk7CiAgICAgfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIC8vIENoZWNraW5nIGlm
IHRoZSBVUkwgaXMgbWFsZm9ybWVkIGlzIGxvdHMgb2YgZXh0cmEgd29yayBmb3IgbGl0dGxlIGJl
bmVmaXQuCi0jZWxzZQotICAgIGlmKCBrdXJsLmlzTWFsZm9ybWVkKCkgKQotICAgIHsKLSAgICAg
IGtkRGVidWcoIDYwNjAgKSA8PCAiQ2FjaGU6IE1hbGZvcm1lZCB1cmw6ICIgPDwga3VybC51cmwo
KSA8PCBlbmRsOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotI2VuZGlmCiAKICAgICBDYWNoZWRP
YmplY3QgKm8gPSBjYWNoZS0+ZmluZChrdXJsLnVybCgpKTsKICAgICBpZighbykKQEAgLTIwNDIs
MjIgKzE0NTYsMTUgQEAgQ2FjaGVkQ1NTU3R5bGVTaGVldCAqQ2FjaGU6OnJlcXVlc3RTdHlsZQog
ICAgICAgICBrZERlYnVnKCA2MDYwICkgPDwgIkNhY2hlOiBuZXc6ICIgPDwga3VybC51cmwoKSA8
PCBlbmRsOwogI2VuZGlmCiAgICAgICAgIENhY2hlZENTU1N0eWxlU2hlZXQgKnNoZWV0ID0gbmV3
IENhY2hlZENTU1N0eWxlU2hlZXQoZGwsIGt1cmwudXJsKCksIGNhY2hlUG9saWN5LCBfZXhwaXJl
RGF0ZSwgY2hhcnNldCk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICBpZiAoY2FjaGVEaXNh
YmxlZCkKICAgICAgICAgICAgIHNoZWV0LT5zZXRGcmVlKHRydWUpOwogICAgICAgICBlbHNlIHsK
LSNlbmRpZgogICAgICAgICBjYWNoZS0+aW5zZXJ0KCBrdXJsLnVybCgpLCBzaGVldCApOwogICAg
ICAgICBtb3ZlVG9IZWFkT2ZMUlVMaXN0KHNoZWV0KTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAg
ICAgIH0KLSNlbmRpZgogICAgICAgICBvID0gc2hlZXQ7CiAgICAgfQogCi0jaWYgIUFQUExFX0NI
QU5HRVMKLSAgICBvLT5zZXRFeHBpcmVEYXRlKF9leHBpcmVEYXRlLCB0cnVlKTsKLSNlbmRpZgog
ICAgIAogICAgIGlmKG8tPnR5cGUoKSAhPSBDYWNoZWRPYmplY3Q6OkNTU1N0eWxlU2hlZXQpCiAg
ICAgewpAQCAtMjA3Nyw5ICsxNDg0LDcgQEAgQ2FjaGVkQ1NTU3R5bGVTaGVldCAqQ2FjaGU6OnJl
cXVlc3RTdHlsZQogICAgIG1vdmVUb0hlYWRPZkxSVUxpc3Qobyk7CiAgICAgaWYgKCBkbCApIHsK
ICAgICAgICAgZGwtPm1fZG9jT2JqZWN0cy5yZW1vdmUoIG8gKTsKLSNpZiBBUFBMRV9DSEFOR0VT
CiAgICAgICAgIGlmICghY2FjaGVEaXNhYmxlZCkKLSNlbmRpZgogICAgICAgICBkbC0+bV9kb2NP
YmplY3RzLmFwcGVuZCggbyApOwogICAgIH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVk
Q1NTU3R5bGVTaGVldCAqPihvKTsKQEAgLTIxMTEsMTUgKzE1MTYsNyBAQCBDYWNoZWRTY3JpcHQg
KkNhY2hlOjpyZXF1ZXN0U2NyaXB0KCBEb2NMCiAgICAgICAgIGNhY2hlUG9saWN5ID0gS0lPOjpD
Q19WZXJpZnk7CiAgICAgfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIC8vIENoZWNraW5nIGlm
IHRoZSBVUkwgaXMgbWFsZm9ybWVkIGlzIGxvdHMgb2YgZXh0cmEgd29yayBmb3IgbGl0dGxlIGJl
bmVmaXQuCi0jZWxzZQotICAgIGlmKCBrdXJsLmlzTWFsZm9ybWVkKCkgKQotICAgIHsKLSAgICAg
IGtkRGVidWcoIDYwNjAgKSA8PCAiQ2FjaGU6IE1hbGZvcm1lZCB1cmw6ICIgPDwga3VybC51cmwo
KSA8PCBlbmRsOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotI2VuZGlmCiAKICAgICBDYWNoZWRP
YmplY3QgKm8gPSBjYWNoZS0+ZmluZChrdXJsLnVybCgpKTsKICAgICBpZighbykKQEAgLTIxMjgs
MjIgKzE1MjUsMTUgQEAgQ2FjaGVkU2NyaXB0ICpDYWNoZTo6cmVxdWVzdFNjcmlwdCggRG9jTAog
ICAgICAgICBrZERlYnVnKCA2MDYwICkgPDwgIkNhY2hlOiBuZXc6ICIgPDwga3VybC51cmwoKSA8
PCBlbmRsOwogI2VuZGlmCiAgICAgICAgIENhY2hlZFNjcmlwdCAqc2NyaXB0ID0gbmV3IENhY2hl
ZFNjcmlwdChkbCwga3VybC51cmwoKSwgY2FjaGVQb2xpY3ksIF9leHBpcmVEYXRlLCBjaGFyc2V0
KTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGlmIChjYWNoZURpc2FibGVkKQogICAgICAg
ICAgICAgc2NyaXB0LT5zZXRGcmVlKHRydWUpOwogICAgICAgICBlbHNlIHsKLSNlbmRpZgogICAg
ICAgICBjYWNoZS0+aW5zZXJ0KCBrdXJsLnVybCgpLCBzY3JpcHQgKTsKICAgICAgICAgbW92ZVRv
SGVhZE9mTFJVTGlzdChzY3JpcHQpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgfQotI2Vu
ZGlmCiAgICAgICAgIG8gPSBzY3JpcHQ7CiAgICAgfQogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAg
ICBvLT5zZXRFeHBpcmVEYXRlKF9leHBpcmVEYXRlLCB0cnVlKTsKLSNlbmRpZgogICAgIAogICAg
IGlmKCEoby0+dHlwZSgpID09IENhY2hlZE9iamVjdDo6U2NyaXB0KSkKICAgICB7CkBAIC0yMTY0
LDkgKzE1NTQsNyBAQCBDYWNoZWRTY3JpcHQgKkNhY2hlOjpyZXF1ZXN0U2NyaXB0KCBEb2NMCiAg
ICAgbW92ZVRvSGVhZE9mTFJVTGlzdChvKTsKICAgICBpZiAoIGRsICkgewogICAgICAgICBkbC0+
bV9kb2NPYmplY3RzLnJlbW92ZSggbyApOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgaWYg
KCFjYWNoZURpc2FibGVkKQotI2VuZGlmCiAgICAgICAgIGRsLT5tX2RvY09iamVjdHMuYXBwZW5k
KCBvICk7CiAgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNoZWRTY3JpcHQgKj4obyk7
CkBAIC0yMTk4LDE0ICsxNTg2LDcgQEAgQ2FjaGVkWFNMU3R5bGVTaGVldCogQ2FjaGU6OnJlcXVl
c3RYU0xTdAogICAgICAgICBjYWNoZVBvbGljeSA9IEtJTzo6Q0NfVmVyaWZ5OwogICAgIH0KICAg
ICAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8gQ2hlY2tpbmcgaWYgdGhlIFVSTCBpcyBtYWxm
b3JtZWQgaXMgbG90cyBvZiBleHRyYSB3b3JrIGZvciBsaXR0bGUgYmVuZWZpdC4KLSNlbHNlCi0g
ICAgaWYoa3VybC5pc01hbGZvcm1lZCgpKSB7Ci0gICAgICAgIGtkRGVidWcoIDYwNjAgKSA8PCAi
Q2FjaGU6IE1hbGZvcm1lZCB1cmw6ICIgPDwga3VybC51cmwoKSA8PCBlbmRsOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0jZW5kaWYKICAgICAKICAgICBDYWNoZWRPYmplY3QgKm8gPSBjYWNo
ZS0+ZmluZChrdXJsLnVybCgpKTsKICAgICBpZiAoIW8pIHsKQEAgLTIyMTMsMjIgKzE1OTQsMTUg
QEAgQ2FjaGVkWFNMU3R5bGVTaGVldCogQ2FjaGU6OnJlcXVlc3RYU0xTdAogICAgICAgICBrZERl
YnVnKCA2MDYwICkgPDwgIkNhY2hlOiBuZXc6ICIgPDwga3VybC51cmwoKSA8PCBlbmRsOwogI2Vu
ZGlmCiAgICAgICAgIENhY2hlZFhTTFN0eWxlU2hlZXQqIGRvYyA9IG5ldyBDYWNoZWRYU0xTdHls
ZVNoZWV0KGRsLCBrdXJsLnVybCgpLCBjYWNoZVBvbGljeSwgX2V4cGlyZURhdGUpOwotI2lmIEFQ
UExFX0NIQU5HRVMKICAgICAgICAgaWYgKGNhY2hlRGlzYWJsZWQpCiAgICAgICAgICAgICBkb2Mt
PnNldEZyZWUodHJ1ZSk7CiAgICAgICAgIGVsc2UgewotI2VuZGlmCiAgICAgICAgICAgICBjYWNo
ZS0+aW5zZXJ0KGt1cmwudXJsKCksIGRvYyk7CiAgICAgICAgICAgICBtb3ZlVG9IZWFkT2ZMUlVM
aXN0KGRvYyk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAg
byA9IGRvYzsKICAgICB9CiAgICAgCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBvLT5zZXRFeHBp
cmVEYXRlKF9leHBpcmVEYXRlLCB0cnVlKTsKLSNlbmRpZgogICAgIAogICAgIGlmIChvLT50eXBl
KCkgIT0gQ2FjaGVkT2JqZWN0OjpYU0xTdHlsZVNoZWV0KSB7CiAjaWZkZWYgQ0FDSEVfREVCVUcK
QEAgLTIyNDcsOSArMTYyMSw3IEBAIENhY2hlZFhTTFN0eWxlU2hlZXQqIENhY2hlOjpyZXF1ZXN0
WFNMU3QKICAgICBtb3ZlVG9IZWFkT2ZMUlVMaXN0KG8pOwogICAgIGlmIChkbCkgewogICAgICAg
ICBkbC0+bV9kb2NPYmplY3RzLnJlbW92ZSggbyApOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICAg
ICAgaWYgKCFjYWNoZURpc2FibGVkKQotI2VuZGlmCiAgICAgICAgICAgICBkbC0+bV9kb2NPYmpl
Y3RzLmFwcGVuZCggbyApOwogICAgIH0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkWFNM
U3R5bGVTaGVldCo+KG8pOwpAQCAtMjI3MiwxNSArMTY0NCw3IEBAIENhY2hlZFhCTERvY3VtZW50
KiBDYWNoZTo6cmVxdWVzdFhCTERvY3UKICAgICAgICAgY2FjaGVQb2xpY3kgPSBLSU86OkNDX1Zl
cmlmeTsKICAgICB9CiAgICAgCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIC8vIENoZWNraW5nIGlm
IHRoZSBVUkwgaXMgbWFsZm9ybWVkIGlzIGxvdHMgb2YgZXh0cmEgd29yayBmb3IgbGl0dGxlIGJl
bmVmaXQuCi0jZWxzZQotICAgIGlmKCBrdXJsLmlzTWFsZm9ybWVkKCkgKQotICAgIHsKLSAgICAg
ICAga2REZWJ1ZyggNjA2MCApIDw8ICJDYWNoZTogTWFsZm9ybWVkIHVybDogIiA8PCBrdXJsLnVy
bCgpIDw8IGVuZGw7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSNlbmRpZgogICAgIAogICAg
IENhY2hlZE9iamVjdCAqbyA9IGNhY2hlLT5maW5kKGt1cmwudXJsKCkpOwogICAgIGlmKCFvKQpA
QCAtMjI4OSwyMiArMTY1MywxNSBAQCBDYWNoZWRYQkxEb2N1bWVudCogQ2FjaGU6OnJlcXVlc3RY
QkxEb2N1CiAgICAgICAgIGtkRGVidWcoIDYwNjAgKSA8PCAiQ2FjaGU6IG5ldzogIiA8PCBrdXJs
LnVybCgpIDw8IGVuZGw7CiAjZW5kaWYKICAgICAgICAgQ2FjaGVkWEJMRG9jdW1lbnQqIGRvYyA9
IG5ldyBDYWNoZWRYQkxEb2N1bWVudChkbCwga3VybC51cmwoKSwgY2FjaGVQb2xpY3ksIF9leHBp
cmVEYXRlKTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGlmIChjYWNoZURpc2FibGVkKQog
ICAgICAgICAgICAgZG9jLT5zZXRGcmVlKHRydWUpOwogICAgICAgICBlbHNlIHsKLSNlbmRpZgog
ICAgICAgICAgICAgY2FjaGUtPmluc2VydChrdXJsLnVybCgpLCBkb2MpOwogICAgICAgICAgICAg
bW92ZVRvSGVhZE9mTFJVTGlzdChkb2MpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgfQot
I2VuZGlmCiAgICAgICAgIG8gPSBkb2M7CiAgICAgfQogICAgIAotI2lmICFBUFBMRV9DSEFOR0VT
Ci0gICAgby0+c2V0RXhwaXJlRGF0ZShfZXhwaXJlRGF0ZSwgdHJ1ZSk7Ci0jZW5kaWYKICAgICAK
ICAgICBpZihvLT50eXBlKCkgIT0gQ2FjaGVkT2JqZWN0OjpYQkwpCiAgICAgewpAQCAtMjMyNCw5
ICsxNjgxLDcgQEAgQ2FjaGVkWEJMRG9jdW1lbnQqIENhY2hlOjpyZXF1ZXN0WEJMRG9jdQogICAg
IG1vdmVUb0hlYWRPZkxSVUxpc3Qobyk7CiAgICAgaWYgKCBkbCApIHsKICAgICAgICAgZGwtPm1f
ZG9jT2JqZWN0cy5yZW1vdmUoIG8gKTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGlmICgh
Y2FjaGVEaXNhYmxlZCkKLSNlbmRpZgogICAgICAgICAgICAgZGwtPm1fZG9jT2JqZWN0cy5hcHBl
bmQoIG8gKTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZFhCTERvY3VtZW50
Kj4obyk7CkBAIC0yMzY1LDQyICsxNzIwLDYgQEAgdm9pZCBDYWNoZTo6Zmx1c2goYm9vbCBmb3Jj
ZSkKICNlbmRpZgogfQogCi0jaWYgMAotCi12b2lkIENhY2hlOjpjaGVja0xSVUFuZFVuY2FjaGVh
YmxlTGlzdEludGVncml0eSgpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICAKLSAgICB7Ci0g
ICAgICAgIGludCBzaXplID0gMDsKLSAgICAgICAgQ2FjaGVkT2JqZWN0ICpwcmV2ID0gMDsKLSAg
ICAgICAgZm9yIChDYWNoZWRPYmplY3QgKm8gPSBtX2hlYWRPZkxSVUxpc3Q7IG87IG8gPSBvLT5t
X25leHRJbkxSVUxpc3QpIHsKLSAgICAgICAgICAgIEFTU0VSVChvLT5hbGxvd0luTFJVTGlzdCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChvLT5zdGF0dXMoKSAhPSBDYWNoZWRPYmplY3Q6OlVuY2Fj
aGVhYmxlKTsKLSAgICAgICAgICAgIEFTU0VSVChvLT5tX3ByZXZJbkxSVUxpc3QgPT0gcHJldik7
Ci0gICAgICAgICAgICBzaXplICs9IG8tPnNpemUoKTsKLSAgICAgICAgICAgIHByZXYgPSBvOwot
ICAgICAgICAgICAgKytjb3VudDsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQobV90YWlsT2ZM
UlVMaXN0ID09IHByZXYpOwotICAgICAgICBBU1NFUlQobV90b3RhbFNpemVPZkxSVUxpc3QgPT0g
c2l6ZSk7Ci0gICAgfQotICAgIAotICAgIHsKLSAgICAgICAgQ2FjaGVkT2JqZWN0ICpwcmV2ID0g
MDsKLSAgICAgICAgZm9yIChDYWNoZWRPYmplY3QgKm8gPSBtX2hlYWRPZlVuY2FjaGVhYmxlTGlz
dDsgbzsgbyA9IG8tPm1fbmV4dEluTFJVTGlzdCkgewotICAgICAgICAgICAgQVNTRVJUKG8tPmFs
bG93SW5MUlVMaXN0KCkpOwotICAgICAgICAgICAgQVNTRVJUKG8tPnN0YXR1cygpID09IENhY2hl
ZE9iamVjdDo6VW5jYWNoZWFibGUpOwotICAgICAgICAgICAgQVNTRVJUKG8tPm1fcHJldkluTFJV
TGlzdCA9PSBwcmV2KTsKLSAgICAgICAgICAgIHByZXYgPSBvOwotICAgICAgICAgICAgKytjb3Vu
dDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobV9jb3VudE9mTFJVQW5kVW5j
YWNoZWFibGVMaXN0cyA9PSBjb3VudCk7Ci19Ci0KLSNlbmRpZgogCiB2b2lkIENhY2hlOjpzZXRT
aXplKCBpbnQgYnl0ZXMgKQogewpAQCAtMjYxOSw3ICsxOTM4LDYgQEAgdm9pZCBDYWNoZWRPYmpl
Y3RDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKAogI2luY2x1ZGUgImxvYWRlci5tb2MiCiAKIAotI2lm
IEFQUExFX0NIQU5HRVMKIAogQ2FjaGU6OlN0YXRpc3RpY3MgQ2FjaGU6OmdldFN0YXRpc3RpY3Mo
KQogewpAQCAtMjY5Myw0ICsyMDExLDMgQEAgdm9pZCBDYWNoZTo6c2V0Q2FjaGVEaXNhYmxlZChi
b29sIGRpc2FibAogICAgICAgICBmbHVzaEFsbCgpOwogfQogCi0jZW5kaWYgLy8gQVBQTEVfQ0hB
TkdFUwpJbmRleDogbWlzYy9sb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9taXNjL2xvYWRlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ2CmRp
ZmYgLXAgLXUgLXIxLjQ2IG1pc2MvbG9hZGVyLmgKLS0tIG1pc2MvbG9hZGVyLmgJOCBOb3YgMjAw
NSAwODoxMTowOSAtMDAwMAkxLjQ2CisrKyBtaXNjL2xvYWRlci5oCTExIE5vdiAyMDA1IDE5OjM0
OjA2IC0wMDAwCkBAIC02OCw3ICs2OCw2IEBAIG5hbWVzcGFjZSBET00KICAgICBjbGFzcyBEb2N1
bWVudEltcGw7CiB9OwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogCiBjbGFzcyBLV1FMb2FkZXI7CiAK
QEAgLTgwLDcgKzc5LDYgQEAgY2xhc3MgTlNEYXRhOwogY2xhc3MgTlNVUkxSZXNwb25zZTsKICNl
bmRpZgogCi0jZW5kaWYKIAogbmFtZXNwYWNlIGtodG1sCiB7CkBAIC0xNDEsMTAgKzEzOSw4IEBA
IG5hbWVzcGFjZSBraHRtbAogCSAgICBtX2ZyZWUgPSBmYWxzZTsKIAkgICAgbV9jYWNoZVBvbGlj
eSA9IF9jYWNoZVBvbGljeTsKIAkgICAgbV9yZXF1ZXN0ID0gMDsKLSNpZiBBUFBMRV9DSEFOR0VT
CiAgICAgICAgIG1fcmVzcG9uc2UgPSAwOwogICAgICAgICBtX2FsbERhdGEgPSAwOwotI2VuZGlm
ICAgICAgICAgICAgCiAJICAgIG1fZXhwaXJlRGF0ZSA9IF9leHBpcmVEYXRlOwogICAgICAgICBt
X2RlbGV0ZWQgPSBmYWxzZTsKICAgICAgICAgbV9leHBpcmVEYXRlQ2hhbmdlZCA9IGZhbHNlOwpA
QCAtMTk3LDEyICsxOTMsMTAgQEAgbmFtZXNwYWNlIGtodG1sCiAKICAgICAgICAgdm9pZCBzZXRS
ZXF1ZXN0KFJlcXVlc3QgKl9yZXF1ZXN0KTsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAg
TlNVUkxSZXNwb25zZSAqcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CiAg
ICAgICAgIHZvaWQgc2V0UmVzcG9uc2UoTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpOwogICAgICAg
ICBOU0RhdGEgKmFsbERhdGEoKSBjb25zdCB7IHJldHVybiBtX2FsbERhdGE7IH0KICAgICAgICAg
dm9pZCBzZXRBbGxEYXRhIChOU0RhdGEgKmRhdGEpOwotI2VuZGlmCiAKICAgICAgICAgYm9vbCBj
YW5EZWxldGUoKSBjb25zdCB7IHJldHVybiAobV9jbGllbnRzLmNvdW50KCkgPT0gMCAmJiAhbV9y
ZXF1ZXN0KTsgfQogCkBAIC0yMjcsMTAgKzIyMSw4IEBAIG5hbWVzcGFjZSBraHRtbAogCURPTTo6
RE9NU3RyaW5nIG1fdXJsOwogICAgICAgICBRU3RyaW5nIG1fYWNjZXB0OwogICAgICAgICBSZXF1
ZXN0ICptX3JlcXVlc3Q7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICBOU1VSTFJlc3BvbnNl
ICptX3Jlc3BvbnNlOwogICAgICAgICBOU0RhdGEgKm1fYWxsRGF0YTsKLSNlbmRpZgogCVR5cGUg
bV90eXBlOwogCVN0YXR1cyBtX3N0YXR1czsKICAgICBwcml2YXRlOgpAQCAtMzEyLDcgKzMwNCw2
IEBAIG5hbWVzcGFjZSBraHRtbAogCiAgICAgY2xhc3MgSW1hZ2VTb3VyY2U7CiAKLSNpZiBBUFBM
RV9DSEFOR0VTICAgIAogICAgIGNsYXNzIENhY2hlZEltYWdlOwogICAgIAogICAgIGNsYXNzIENh
Y2hlZEltYWdlQ2FsbGJhY2sKQEAgLTMzNCw3ICszMjUsNiBAQCBuYW1lc3BhY2Uga2h0bWwKICAg
ICAgICAgdWludCByZWZDb3VudDsKIAlib29sIGhlYWRlclJlY2VpdmVkOwogICAgIH07Ci0jZW5k
aWYKICAgICAgICAgCiAgICAgLyoqCiAgICAgICogYSBjYWNoZWQgaW1hZ2UKQEAgLTQwNCw3ICsz
OTQsNiBAQCBuYW1lc3BhY2Uga2h0bWwKIAogICAgICAgICBmcmllbmQgY2xhc3MgQ2FjaGU7CiAK
LSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgcHVibGljOgogICAgICAgICBpbnQgZGF0YVNpemUoKSBj
b25zdCB7IHJldHVybiBtX2RhdGFTaXplOyB9CiAJQ2FjaGVkSW1hZ2VDYWxsYmFjayAqZGVjb2Rl
ckNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVyQ2FsbGJhY2s7IH0KQEAgLTQxMyw3
ICs0MDIsNiBAQCBuYW1lc3BhY2Uga2h0bWwKICAgICAgICAgCiAgICAgICAgIGludCBtX2RhdGFT
aXplOwogICAgICAgICBDYWNoZWRJbWFnZUNhbGxiYWNrICptX2RlY29kZXJDYWxsYmFjazsKLSNl
bmRpZgogICAgIH07CiAKICNpZmRlZiBLSFRNTF9YU0xUCkBAIC01NTMsMTYgKzU0MSwxMiBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIGludCBudW1SZXF1ZXN0cyggRG9jTG9hZGVyKiBkbCApIGNvbnN0
OwogICAgICAgICB2b2lkIGNhbmNlbFJlcXVlc3RzKCBEb2NMb2FkZXIqIGRsICk7CiAKLSNpZiBB
UFBMRV9DSEFOR0VTCiAJdm9pZCByZW1vdmVCYWNrZ3JvdW5kRGVjb2RpbmdSZXF1ZXN0IChSZXF1
ZXN0ICpyKTsKLSNlbmRpZgogCQogICAgICAgICAvLyBtYXkgcmV0dXJuIDBMCiAgICAgICAgIEtJ
Tzo6Sm9iICpqb2JGb3JSZXF1ZXN0KCBjb25zdCBET006OkRPTVN0cmluZyAmdXJsICkgY29uc3Q7
CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIEtXUUxvYWRlciAqa3dxOwotI2VuZGlmCiAK
ICAgICBzaWduYWxzOgogCWZyaWVuZCBjbGFzcyBDYWNoZWRJbWFnZUNhbGxiYWNrOwpAQCAtNTcy
LDI4ICs1NTYsMTkgQEAgcHJvdGVjdGVkOgogCXZvaWQgcmVxdWVzdEZhaWxlZCgga2h0bWw6OkRv
Y0xvYWRlciogZGwsIGtodG1sOjpDYWNoZWRPYmplY3QgKm9iaiApOwogCiAgICAgcHJvdGVjdGVk
IHNsb3RzOgotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgdm9pZCBzbG90RmluaXNoZWQoIEtJ
Tzo6Sm9iICogLCBOU0RhdGEgKmFsbERhdGEpOwogCXZvaWQgc2xvdERhdGEoIEtJTzo6Sm9iICos
IGNvbnN0IGNoYXIgKmRhdGEsIGludCBzaXplICk7CiAgICAgICAgIHZvaWQgc2xvdFJlY2VpdmVk
UmVzcG9uc2UgKCBLSU86OkpvYiAqLCBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSApOwotI2Vsc2UK
LSAgICAgICAgdm9pZCBzbG90RmluaXNoZWQoIEtJTzo6Sm9iICogKTsKLQl2b2lkIHNsb3REYXRh
KCBLSU86OkpvYiAqLCBjb25zdCBRQnl0ZUFycmF5ICYgKTsKLSNlbmRpZgogCiAgICAgcHJpdmF0
ZToKIAl2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0tIVE1MTG9hZGVyKCkgY29uc3Q7Ci0jZW5kaWYKIAogCVFQ
dHJMaXN0PFJlcXVlc3Q+IG1fcmVxdWVzdHNQZW5kaW5nOwogCVFQdHJEaWN0PFJlcXVlc3Q+IG1f
cmVxdWVzdHNMb2FkaW5nOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogCVFQdHJMaXN0PFJlcXVlc3Q+
IG1fcmVxdWVzdHNCYWNrZ3JvdW5kRGVjb2Rpbmc7Ci0jZW5kaWYKIAogI2lmZGVmIEhBVkVfTElC
SlBFRwogICAgICAgICBLSlBFR0Zvcm1hdFR5cGUgbV9qcGVnbG9hZGVyOwpAQCAtNjk0LDcgKzY2
OSw2IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBzdGF0aWMgdm9pZCByZW1vdmVDYWNoZUVudHJ5
KCBDYWNoZWRPYmplY3QgKm9iamVjdCApOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICBz
dHJ1Y3QgVHlwZVN0YXRpc3RpYyB7CiAgICAgICAgICAgICBpbnQgY291bnQ7CiAgICAgICAgICAg
ICBpbnQgc2l6ZTsKQEAgLTcxOCw3ICs2OTIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHN0YXRp
YyBTdGF0aXN0aWNzIGdldFN0YXRpc3RpY3MoKTsKICAgICAgICAgc3RhdGljIHZvaWQgZmx1c2hB
bGwoKTsKICAgICAgICAgc3RhdGljIHZvaWQgc2V0Q2FjaGVEaXNhYmxlZChib29sKTsKLSNlbmRp
ZgogCiAgICAgICAgIHN0YXRpYyB2b2lkIGluc2VydEluTFJVTGlzdChDYWNoZWRPYmplY3QgKik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIHJlbW92ZUZyb21MUlVMaXN0KENhY2hlZE9iamVjdCAqKTsK
SW5kZXg6IG1pc2Mvc3RyaW5naXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9taXNjL3N0cmluZ2l0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZm
IC1wIC11IC1yMS43IG1pc2Mvc3RyaW5naXQuaAotLS0gbWlzYy9zdHJpbmdpdC5oCTIwIEp1bCAy
MDA0IDA4OjEyOjA4IC0wMDAwCTEuNworKysgbWlzYy9zdHJpbmdpdC5oCTExIE5vdiAyMDA1IDE5
OjM0OjA2IC0wMDAwCkBAIC00NCwxMSArNDQsNyBAQCBwcml2YXRlOgogICAgIAogICAgIFRva2Vu
aXplclN1YnN0cmluZygpIDogbV9sZW5ndGgoMCksIG1fY3VycmVudCgwKSB7fQogICAgIFRva2Vu
aXplclN1YnN0cmluZyhjb25zdCBRU3RyaW5nICZzdHIpIDogbV9zdHJpbmcoc3RyKSwgbV9sZW5n
dGgoc3RyLmxlbmd0aCgpKSB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogCW1fY3VycmVudCA9IG1fbGVu
Z3RoID09IDAgPyAwIDogbV9zdHJpbmcuc3RhYmxlVW5pY29kZSgpOwotI2Vsc2UKLQltX2N1cnJl
bnQgPSBtX2xlbmd0aCA9PSAwID8gMCA6IG1fc3RyaW5nLnVuaWNvZGUoKTsKLSNlbmRpZgogCiAK
ICAgICB9CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM1CmRpZmYgLXAgLXUgLXIxLjM1IHJlbmRlcmluZy9y
ZW5kZXJfYXBwbGV0LmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3BwCTI1IEF1ZyAy
MDA1IDIzOjEzOjUzIC0wMDAwCTEuMzUKKysrIHJlbmRlcmluZy9yZW5kZXJfYXBwbGV0LmNwcAkx
MSBOb3YgMjAwNSAxOTozNDowNyAtMDAwMApAQCAtNTQsMTYgKzU0LDggQEAgUmVuZGVyQXBwbGV0
OjpSZW5kZXJBcHBsZXQoSFRNTEVsZW1lbnRJbQogICAgICAgICBjb250ZXh0ID0gcGFydC0+Y3Jl
YXRlSmF2YUNvbnRleHQoKTsKICAgICB9CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgbV9jb250
ZXh0ID0gY29udGV4dDsKICAgICBtX2FyZ3MgPSBhcmdzOwotI2Vsc2UKLSAgICBpZiAoIGNvbnRl
eHQgKSB7Ci0gICAgICAgIC8va2REZWJ1Zyg2MTAwKSA8PCAiUmVuZGVyQXBwbGV0OjpSZW5kZXJB
cHBsZXQsIHNldHRpbmcgUVdpZGdldCIgPDwgZW5kbDsKLSAgICAgICAgc2V0UVdpZGdldCggbmV3
IEtKYXZhQXBwbGV0V2lkZ2V0KGNvbnRleHQsIF92aWV3LT52aWV3cG9ydCgpKSApOwotICAgICAg
ICBwcm9jZXNzQXJndW1lbnRzKGFyZ3MpOwotICAgIH0KLSNlbmRpZgogfQogCiBSZW5kZXJBcHBs
ZXQ6On5SZW5kZXJBcHBsZXQoKQpAQCAtMTI2LDU4ICsxMTgsMTIgQEAgdm9pZCBSZW5kZXJBcHBs
ZXQ6OmxheW91dCgpCiAgICAgY2FsY0hlaWdodCgpOwogCiAgICAgS0phdmFBcHBsZXRXaWRnZXQg
KnRtcCA9IHN0YXRpY19jYXN0PEtKYXZhQXBwbGV0V2lkZ2V0Kj4obV93aWRnZXQpOwotI2lmIEFQ
UExFX0NIQU5HRVMKICAgICAvLyBUaGUgYXBwbGV0J3MgUVdpZGdldCBnZXRzIGNyZWF0ZWQgbGF6
aWx5IHVwb24gZmlyc3QgbGF5b3V0LgogICAgIGlmICghdG1wKQogICAgICAgICBjcmVhdGVXaWRn
ZXRJZk5lY2Vzc2FyeSgpOwotI2Vsc2UgCi0gICAgaWYgKCB0bXAgKSB7Ci0gICAgICAgIE5vZGVJ
bXBsICpjaGlsZCA9IGVsZW1lbnQoKS0+Zmlyc3RDaGlsZCgpOwotCi0gICAgICAgIHdoaWxlKGNo
aWxkKSB7Ci0KLSAgICAgICAgICAgIGlmKGNoaWxkLT5pZCgpID09IElEX1BBUkFNKSB7Ci0gICAg
ICAgICAgICAgICAgSFRNTFBhcmFtRWxlbWVudEltcGwgKnAgPSBzdGF0aWNfY2FzdDxIVE1MUGFy
YW1FbGVtZW50SW1wbCAqPihjaGlsZCk7Ci0gICAgICAgICAgICAgICAgaWYodG1wLT5hcHBsZXQo
KSkKLSAgICAgICAgICAgICAgICAgICAgdG1wLT5hcHBsZXQoKS0+c2V0UGFyYW1ldGVyKCBwLT5u
YW1lKCksIHAtPnZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgfQotICAgICAgICAvL2tkRGVidWcoNjEwMCkg
PDwgInNldHRpbmcgYXBwbGV0IHdpZGdldCB0byBzaXplOiAiIDw8IG1fd2lkdGggPDwgIiwgIiA8
PCBtX2hlaWdodCA8PCBlbmRsOwotICAgICAgICBtX3dpZGdldC0+cmVzaXplKG1fd2lkdGggLSBi
b3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdo
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVpZ2h0IC0gYm9yZGVyVG9wKCkgLSBi
b3JkZXJCb3R0b20oKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKSk7Ci0gICAgICAg
IHRtcC0+c2hvd0FwcGxldCgpOwotICAgIH0KLSNlbmRpZgogICAgIHNldE5lZWRzTGF5b3V0KGZh
bHNlKTsKIH0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi12b2lkIFJlbmRlckFwcGxldDo6cHJvY2Vz
c0FyZ3VtZW50cyhjb25zdCBRTWFwPFFTdHJpbmcsIFFTdHJpbmc+ICZhcmdzKQotewotICAgIEtK
YXZhQXBwbGV0V2lkZ2V0ICp3ID0gc3RhdGljX2Nhc3Q8S0phdmFBcHBsZXRXaWRnZXQqPihtX3dp
ZGdldCk7Ci0gICAgS0phdmFBcHBsZXQqIGFwcGxldCA9IHcgPyB3LT5hcHBsZXQoKSA6IDA7Ci0K
LSAgICBpZiAoIGFwcGxldCApIHsKLSAgICAgICAgYXBwbGV0LT5zZXRCYXNlVVJMKCBhcmdzW1FT
dHJpbmc6OmZyb21MYXRpbjEoImJhc2VVUkwiKSBdICk7Ci0gICAgICAgIGFwcGxldC0+c2V0QXBw
bGV0Q2xhc3MoIGFyZ3NbUVN0cmluZzo6ZnJvbUxhdGluMSgiY29kZSIpIF0gKTsKLQotCVFTdHJp
bmcgc3RyID0gYXJnc1tRU3RyaW5nOjpmcm9tTGF0aW4xKCJjb2RlQmFzZSIpIF07Ci0gICAgICAg
IGlmKCAhc3RyLmlzRW1wdHkoKSApCi0gICAgICAgICAgICBhcHBsZXQtPnNldENvZGVCYXNlKCBz
dHIgKTsKLQotCXN0ciA9IGFyZ3NbUVN0cmluZzo6ZnJvbUxhdGluMSgibmFtZSIpIF07Ci0gICAg
ICAgIGlmKCAhc3RyLmlzTnVsbCgpICkKLSAgICAgICAgICAgIGFwcGxldC0+c2V0QXBwbGV0TmFt
ZSggc3RyICk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGxldC0+c2V0QXBwbGV0TmFt
ZSggYXJnc1tRU3RyaW5nOjpmcm9tTGF0aW4xKCJjb2RlIikgXSApOwotCi0Jc3RyID0gYXJnc1tR
U3RyaW5nOjpmcm9tTGF0aW4xKCJhcmNoaXZlIikgXTsKLSAgICAgICAgaWYoICFzdHIuaXNFbXB0
eSgpICkgCi0gICAgICAgICAgICBhcHBsZXQtPnNldEFyY2hpdmVzKCBhcmdzW1FTdHJpbmc6OmZy
b21MYXRpbjEoImFyY2hpdmUiKSBdICk7Ci0gICAgfQotfQotI2VuZGlmCiAKIFJlbmRlckVtcHR5
QXBwbGV0OjpSZW5kZXJFbXB0eUFwcGxldChET006Ok5vZGVJbXBsKiBub2RlKQogICA6IFJlbmRl
cldpZGdldChub2RlKQpAQCAtMTg1LDEzICsxMzEsNyBAQCBSZW5kZXJFbXB0eUFwcGxldDo6UmVu
ZGVyRW1wdHlBcHBsZXQoRE9NCiAgICAgLy8gaW5pdCBSZW5kZXJPYmplY3QgYXR0cmlidXRlcwog
ICAgIHNldElubGluZSh0cnVlKTsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICAvLyBGSVhNRTog
RmlndXJlIG91dCBob3cgdG8gaGFuZGxlIHRoaXMuCi0jZWxzZQotICAgIFFMYWJlbCogbGFiZWwg
PSBuZXcgUUxhYmVsKGkxOG4oIkphdmEgQXBwbGV0IGlzIG5vdCBsb2FkZWQuIChKYXZhIGludGVy
cHJldGVyIGRpc2FibGVkKSIpLCBub2RlLT5nZXREb2N1bWVudCgpLT52aWV3KCktPnZpZXdwb3J0
KCkpOwotICAgIGxhYmVsLT5zZXRBbGlnbm1lbnQoIFF0OjpBbGlnbkNlbnRlciB8IFF0OjpXb3Jk
QnJlYWsgKTsKLSAgICBzZXRRV2lkZ2V0KGxhYmVsKTsKLSNlbmRpZgogfQogCiBpbnQgUmVuZGVy
RW1wdHlBcHBsZXQ6OmludHJpbnNpY1dpZHRoKCkgY29uc3QKQEAgLTIxMywxNCArMTUzLDYgQEAg
dm9pZCBSZW5kZXJFbXB0eUFwcGxldDo6bGF5b3V0KCkKICAgICBjYWxjSGVpZ2h0KCk7CiAKICAg
ICAvLyB1cGRhdGVXaWRnZXRQb3NpdGlvbnMgd2lsbCBzaXplIHRoZSB3aWRnZXQsIHNvIHdlIGRv
bid0IG5lZWQgdG8gZG8gdGhhdCBoZXJlLgotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgaWYobV93
aWRnZXQpCi0gICAgewotICAgICAgICAvL2tkRGVidWcoNjEwMCkgPDwgIlJlbmRlckVtcHR5QXBw
bGV0OjpsYXlvdXQsIG1fd2lkdGggPSAiIDw8IG1fd2lkdGggPDwgIiwgbV9oZWlnaHQgPSAiIDw8
IG1faGVpZ2h0IDw8IGVuZGw7Ci0gICAgICAgIG1fd2lkZ2V0LT5yZXNpemUobV93aWR0aC1ib3Jk
ZXJMZWZ0KCktYm9yZGVyUmlnaHQoKS1wYWRkaW5nTGVmdCgpLXBhZGRpbmdSaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faGVpZ2h0LWJvcmRlclRvcCgpLWJvcmRlckJvdHRvbSgp
LXBhZGRpbmdUb3AoKS1wYWRkaW5nQm90dG9tKCkpOwotICAgIH0KLSNlbmRpZgogICAgIAogICAg
IHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfYXBwbGV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9hcHBsZXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUgLXIx
LjcgcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuaAotLS0gcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQu
aAkyNiBGZWIgMjAwNCAyMzoxMDo0NCAtMDAwMAkxLjcKKysrIHJlbmRlcmluZy9yZW5kZXJfYXBw
bGV0LmgJMTEgTm92IDIwMDUgMTk6MzQ6MDcgLTAwMDAKQEAgLTQ0LDkgKzQ0LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlckFwcGxldCI7IH0KIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICB2b2lkIGNyZWF0ZVdp
ZGdldElmTmVjZXNzYXJ5KCk7Ci0jZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
ICAgICB2aXJ0dWFsIGludCBpbnRyaW5zaWNXaWR0aCgpIGNvbnN0OwpAQCAtNTcsMTIgKzU1LDgg
QEAgcHVibGljOgogICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PERPTTo6SFRNTEVsZW1lbnRJbXBs
Kj4oUmVuZGVyT2JqZWN0OjplbGVtZW50KCkpOyB9CiAKIHByaXZhdGU6Ci0jaWYgQVBQTEVfQ0hB
TkdFUwogICAgIEtKYXZhQXBwbGV0Q29udGV4dCAqbV9jb250ZXh0OwogICAgIFFNYXA8UVN0cmlu
ZywgUVN0cmluZz4gbV9hcmdzOwotI2Vsc2UKLSAgICB2b2lkIHByb2Nlc3NBcmd1bWVudHMoIGNv
bnN0IFFNYXA8UVN0cmluZywgUVN0cmluZz4gJmFyZ3MgKTsKLSNlbmRpZgogfTsKIAogY2xhc3Mg
UmVuZGVyRW1wdHlBcHBsZXQgOiBwdWJsaWMgUmVuZGVyV2lkZ2V0CkluZGV4OiByZW5kZXJpbmcv
cmVuZGVyX2NhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjM0CmRpZmYgLXAgLXUgLXIxLjM0IHJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmNwcAotLS0gcmVu
ZGVyaW5nL3JlbmRlcl9jYW52YXMuY3BwCTE5IE9jdCAyMDA1IDA5OjE1OjEzIC0wMDAwCTEuMzQK
KysrIHJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowNyAtMDAw
MApAQCAtMjcsOSArMjcsNyBAQAogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgPGtk
ZWJ1Zy5oPgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKLSNl
bmRpZgogCiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKQEAgLTYyMyw3ICs2MjEsNiBAQCBpbnQg
UmVuZGVyQ2FudmFzOjpkb2NXaWR0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHc7CiB9CiAKLSNpZiBB
UFBMRV9DSEFOR0VTCiAvLyBUaGUgaWRlYSBoZXJlIGlzIHRvIHRha2UgaW50byBhY2NvdW50IHdo
YXQgb2JqZWN0IGlzIG1vdmluZyB0aGUgcGFnaW5hdGlvbiBwb2ludCwgYW5kCiAvLyB0aHVzIGNo
b29zZSB0aGUgYmVzdCBwbGFjZSB0byBjaG9wIGl0Lgogdm9pZCBSZW5kZXJDYW52YXM6OnNldEJl
c3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyT2JqZWN0ICpmb3JSZW5kZXJlciwgYm9vbCBmb3Jj
ZWRCcmVhaykKQEAgLTY0NSw0ICs2NDIsMyBAQCB2b2lkIFJlbmRlckNhbnZhczo6c2V0QmVzdFRy
dW5jYXRlZEF0KGluCiAgICAgICAgIG1fYmVzdFRydW5jYXRlZEF0ID0geTsKICAgICB9CiB9Ci0j
ZW5kaWYKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXMuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC1yMS4xMiByZW5kZXJpbmcvcmVuZGVy
X2NhbnZhcy5oCi0tLSByZW5kZXJpbmcvcmVuZGVyX2NhbnZhcy5oCTE5IE9jdCAyMDA1IDA5OjE1
OjE0IC0wMDAwCTEuMTIKKysrIHJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmgJMTEgTm92IDIwMDUg
MTk6MzQ6MDcgLTAwMDAKQEAgLTY5LDcgKzY5LDYgQEAgcHVibGljOgogICAgIGJvb2wgcHJpbnRp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wcmludGluZ01vZGU7IH0KICAgICB2b2lkIHNldFBy
aW50SW1hZ2VzKGJvb2wgZW5hYmxlKSB7IG1fcHJpbnRJbWFnZXMgPSBlbmFibGU7IH0KICAgICBi
b29sIHByaW50SW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcmludEltYWdlczsgfQotI2lmIEFQ
UExFX0NIQU5HRVMKICAgICB2b2lkIHNldFRydW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1bmNhdGVk
QXQgPSB5OyBtX2Jlc3RUcnVuY2F0ZWRBdCA9IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBtX2ZvcmNl
ZFBhZ2VCcmVhayA9IGZhbHNlOyB9CiAgICAgdm9pZCBzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHks
IFJlbmRlck9iamVjdCAqZm9yUmVuZGVyZXIsIGJvb2wgZm9yY2VkQnJlYWsgPSBmYWxzZSk7CiAg
ICAgaW50IGJlc3RUcnVuY2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVzdFRydW5jYXRlZEF0
OyB9CkBAIC03OCw5ICs3Nyw2IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdHJ1bmNhdG9yV2lkdGg7
CiAgICAgYm9vbCBtX2ZvcmNlZFBhZ2VCcmVhazsKIHB1YmxpYzoKLSNlbHNlCi0gICAgdm9pZCBz
ZXRUcnVuY2F0ZWRBdChpbnQgeSkgeyBtX3RydW5jYXRlZEF0ID0geTsgfQotI2VuZGlmCiAgICAg
aW50IHRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV90cnVuY2F0ZWRBdDsgfQogCiAgICAg
dmlydHVhbCB2b2lkIHNldFdpZHRoKCBpbnQgd2lkdGggKSB7IG1fcm9vdFdpZHRoID0gbV93aWR0
aCA9IHdpZHRoOyB9CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2NvbnRhaW5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9j
b250YWluZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc3CmRpZmYgLXAgLXUgLXIxLjc3
IHJlbmRlcmluZy9yZW5kZXJfY29udGFpbmVyLmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl9jb250
YWluZXIuY3BwCTI0IE9jdCAyMDA1IDIyOjMzOjU0IC0wMDAwCTEuNzcKKysrIHJlbmRlcmluZy9y
ZW5kZXJfY29udGFpbmVyLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowNyAtMDAwMApAQCAtMzcsMTAg
KzM3LDggQEAKICNpbmNsdWRlIDxrZGVidWcuaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4KIAotI2lm
IEFQUExFX0NIQU5HRVMKIC8vIEZvciBhY2Nlc3NpYmlsaXR5CiAjaW5jbHVkZSAiS1dRQWNjT2Jq
ZWN0Q2FjaGUuaCIgCi0jZW5kaWYKIAogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIG5hbWVz
cGFjZSBraHRtbDsKQEAgLTEyMCwxNCArMTE4LDEyIEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjph
ZGRDaGlsZChSZW5kZXJPYmoKICAgICAgICAgICAgIC8va2REZWJ1ZyggNjA0MCApIDw8ICJhZGRp
bmcgY2VsbCIgPDwgZW5kbDsKICAgICAgICAgICAgIGlmICggIWlzVGFibGVSb3coKSApCiAgICAg
ICAgICAgICAgICAgbmVlZHNUYWJsZSA9IHRydWU7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAg
ICAgICAgLy8gSSdtIG5vdCAxMDAlIHN1cmUgdGhpcyBpcyB0aGUgYmVzdCB3YXkgdG8gZml4IHRo
aXMsIGJ1dCB3aXRob3V0IHRoaXMKICAgICAgICAgICAgIC8vIGNoYW5nZSB3ZSByZWN1cnNlIGlu
ZmluaXRlbHkgd2hlbiB0cnlpbmcgdG8gcmVuZGVyIHRoZSBDU1MyIHRlc3QgcGFnZToKICAgICAg
ICAgICAgIC8vIGh0dHA6Ly93d3cuYmF0aC5hYy51ay8lN0VweThpZWgvaW50ZXJuZXQvZXZpbHRl
c3RzL2h0bWxib2R5aGVhZHJlbmRlcmluZzIuaHRtbC4KICAgICAgICAgICAgIC8vIFNlZSBSYWRh
ciAyOTI1MjkxLgogICAgICAgICAgICAgaWYgKCBpc1RhYmxlQ2VsbCgpICYmICFmaXJzdENoaWxk
KCkgJiYgIW5ld0NoaWxkLT5pc1RhYmxlQ2VsbCgpICkKICAgICAgICAgICAgICAgICBuZWVkc1Rh
YmxlID0gZmFsc2U7Ci0jZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5P
TkU6CiAgICAgICAgICAgICBrZERlYnVnKCA2MDAwICkgPDwgImVycm9yIGluIFJlbmRlck9iamVj
dDo6YWRkQ2hpbGQoKSEhISEiIDw8IGVuZGw7CkBAIC0xOTksMTAgKzE5NSw4IEBAIFJlbmRlck9i
amVjdCogUmVuZGVyQ29udGFpbmVyOjpyZW1vdmVDaGkKICAgICBvbGRDaGlsZC0+c2V0TmV4dFNp
YmxpbmcoMCk7CiAgICAgb2xkQ2hpbGQtPnNldFBhcmVudCgwKTsKIAotI2lmIEFQUExFX0NIQU5H
RVMKICAgICBpZiAoS1dRQWNjT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAg
ICAgICAgIGRvY3VtZW50KCktPmdldEFjY09iamVjdENhY2hlKCktPmNoaWxkcmVuQ2hhbmdlZCh0
aGlzKTsKLSNlbmRpZgogICAgIAogICAgIHJldHVybiBvbGRDaGlsZDsKIH0KQEAgLTM1NCwxMCAr
MzQ4LDggQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OmFwcGVuZENoaWxkTm9kZShSZQogICAgIGlm
ICghbmV3Q2hpbGQtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiBjaGlsZHJlbklubGluZSgp
KQogICAgICAgICBkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChuZXdDaGlsZCk7CiAgICAgCi0j
aWYgQVBQTEVfQ0hBTkdFUwogICAgIGlmIChLV1FBY2NPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0
eUVuYWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+Z2V0QWNjT2JqZWN0Q2FjaGUoKS0+Y2hp
bGRyZW5DaGFuZ2VkKHRoaXMpOwotI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVyQ29udGFpbmVyOjpp
bnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCkKQEAgLTM5NCwxMCArMzg2LDggQEAgdm9pZCBSZW5kZXJDb250YWluZXI6Omluc2VydENo
aWxkTm9kZShSZQogICAgIGlmICghY2hpbGQtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiBj
aGlsZHJlbklubGluZSgpKQogICAgICAgICBkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChjaGls
ZCk7CiAgICAgCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIGlmIChLV1FBY2NPYmplY3RDYWNoZTo6
YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+Z2V0QWNjT2JqZWN0
Q2FjaGUoKS0+Y2hpbGRyZW5DaGFuZ2VkKHRoaXMpOwotI2VuZGlmICAgIAogfQogCiB2b2lkIFJl
bmRlckNvbnRhaW5lcjo6bGF5b3V0KCkKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfZmxleGJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9mbGV4Ym94LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOQpkaWZmIC1wIC11
IC1yMS4yOSByZW5kZXJpbmcvcmVuZGVyX2ZsZXhib3guY3BwCi0tLSByZW5kZXJpbmcvcmVuZGVy
X2ZsZXhib3guY3BwCTI2IE9jdCAyMDA1IDA2OjA4OjAzIC0wMDAwCTEuMjkKKysrIHJlbmRlcmlu
Zy9yZW5kZXJfZmxleGJveC5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MDcgLTAwMDAKQEAgLTY5MCw5
ICs2OTAsOCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAg
ICAgIGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOwogICAgIH0KIAotI2lmIEFQUExFX0NIQU5HRVMK
ICAgICAvLyBXZSBjb25maW5lIHRoZSBsaW5lIGNsYW1wIHVnbGluZXNzIHRvIHZlcnRpY2FsIGZs
ZXhpYmxlIGJveGVzICh0aHVzIGtlZXBpbmcgaXQgb3V0IG9mCi0gICAgLy8gbWFpbnN0cmVhbSBi
bG9jayBsYXlvdXQpIGFuZCBwdXQgaXQgYWxsIGluc2lkZSBBUFBMRV9DSEFOR0VTIHRvIGRlbm90
ZSB0aGF0IHRoaXMgaXMgbm90CisgICAgLy8gbWFpbnN0cmVhbSBibG9jayBsYXlvdXQpIGFuZCBw
dXQgaXQgYWxsIGluc2lkZSAxIHRvIGRlbm90ZSB0aGF0IHRoaXMgaXMgbm90CiAgICAgLy8gcmVh
bGx5IHBhcnQgb2YgdGhlIFhVTCBib3ggbW9kZWwuCiAgICAgYm9vbCBoYXZlTGluZUNsYW1wID0g
c3R5bGUoKS0+bGluZUNsYW1wKCkgPj0gMCAmJiBzdHlsZSgpLT5saW5lQ2xhbXAoKSA8PSAxMDA7
CiAgICAgaWYgKGhhdmVMaW5lQ2xhbXApIHsKQEAgLTc4MSw3ICs3ODAsNiBAQCB2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9Ci0jZW5kaWYKIAogICAgIC8vIFdlIGRvIDIgcGFzc2VzLiAgVGhlIGZpcnN0IHBhc3Mg
aXMgc2ltcGx5IHRvIGxheSBldmVyeW9uZSBvdXQgYXQKICAgICAvLyB0aGVpciBwcmVmZXJyZWQg
d2lkdGhzLiAgVGhlIHNlY29uZCBwYXNzIGhhbmRsZXMgZmxleGluZyB0aGUgY2hpbGRyZW4uCklu
ZGV4OiByZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTczCmRpZmYgLXAgLXUgLXIxLjE3MyByZW5kZXJpbmcvcmVuZGVyX2Zsb3cu
Y3BwCi0tLSByZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCTI0IE9jdCAyMDA1IDIyOjMzOjU0IC0w
MDAwCTEuMTczCisrKyByZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCTExIE5vdiAyMDA1IDE5OjM0
OjA3IC0wMDAwCkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBSZW5kZXJGbG93OjpwYWludExpbmVz
KFBhaW50SW5mbyYgaQogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZSBwYWludCBvcmRlciBvZiBv
dXRsaW5lcyB3aWxsIGJlIHdyb25nLCBhbHRob3VnaCB0aGlzIGlzIGEgbWlub3IgaXNzdWUuCiAg
ICAgICAgIFFQdHJEaWN0SXRlcmF0b3I8UmVuZGVyRmxvdz4gb2JqZWN0cygqaS5vdXRsaW5lT2Jq
ZWN0cyk7CiAgICAgICAgIGZvciAob2JqZWN0cy50b0ZpcnN0KCk7IG9iamVjdHMuY3VycmVudCgp
OyArK29iamVjdHMpIHsKLSNpZmRlZiBBUFBMRV9DSEFOR0VTCisjaWZkZWYgMQogICAgICAgICAg
ICAgaWYgKG9iamVjdHMuY3VycmVudCgpLT5zdHlsZSgpLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSkK
ICAgICAgICAgICAgICAgICBvYmplY3RzLmN1cnJlbnQoKS0+cGFpbnRGb2N1c1JpbmcoaS5wLCBf
dHgsIF90eSk7CiAgICAgICAgICAgICBlbHNlCkBAIC02NTgsNyArNjU4LDYgQEAgUVJlY3QgUmVu
ZGVyRmxvdzo6Y2FyZXRSZWN0KGludCBvZmZzZXQsIAogICAgIHJldHVybiBRUmVjdChfeCwgX3ks
IHdpZHRoLCBoZWlnaHQpOwogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogdm9pZCBSZW5kZXJGbG93
OjphZGRGb2N1c1JpbmdSZWN0cyhRUGFpbnRlciAqcCwgaW50IF90eCwgaW50IF90eSkKIHsKICAg
ICAvLyBPbmx5IHBhaW50IGZvY3VzIHJpbmcgYXJvdW5kIG91dGVybW9zdCBjb250ZW50ZWRpdGFi
bGUgZWxlbWVudC4KQEAgLTY5OSw3ICs2OTgsNiBAQCB2b2lkIFJlbmRlckZsb3c6OnBhaW50Rm9j
dXNSaW5nKFFQYWludGVyCiAgICAgcC0+ZHJhd0ZvY3VzUmluZygpOwogICAgIHAtPmNsZWFyRm9j
dXNSaW5nKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBSZW5kZXJGbG93OjpwYWludE91dGxpbmVzKFFQ
YWludGVyICpwLCBpbnQgX3R4LCBpbnQgX3R5KQogewpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9m
bG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9mbG93LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjIKZGlmZiAtcCAtdSAt
cjEuNjIgcmVuZGVyaW5nL3JlbmRlcl9mbG93LmgKLS0tIHJlbmRlcmluZy9yZW5kZXJfZmxvdy5o
CTYgT2N0IDIwMDUgMDA6NTM6NTcgLTAwMDAJMS42MgorKysgcmVuZGVyaW5nL3JlbmRlcl9mbG93
LmgJMTEgTm92IDIwMDUgMTk6MzQ6MDcgLTAwMDAKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgog
ICAgIAogICAgIHZpcnR1YWwgUVJlY3QgY2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZpbml0eSBh
ZmZpbml0eSA9IFVQU1RSRUFNLCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOwogCi0j
aWZkZWYgQVBQTEVfQ0hBTkdFUworI2lmZGVmIDEKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNS
aW5nUmVjdHMoUVBhaW50ZXIgKnBhaW50ZXIsIGludCBfdHgsIGludCBfdHkpOwogICAgIHZvaWQg
cGFpbnRGb2N1c1JpbmcoUVBhaW50ZXIgKnAsIGludCB0eCwgaW50IHR5KTsKICNlbmRpZgpJbmRl
eDogcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEzMQpkaWZmIC1wIC11IC1yMS4xMzEgcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNw
cAotLS0gcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkxMSBOb3YgMjAwNSAxNzo0NDoyNyAtMDAw
MAkxLjEzMQorKysgcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkxMSBOb3YgMjAwNSAxOTozNDow
NyAtMDAwMApAQCAtNDYsMTAgKzQ2LDggQEAKIAogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCi0jaWYg
QVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgIktXUUZpbGVCdXR0b24uaCIKICNpbmNsdWRlICJLV1FT
bGlkZXIuaCIKLSNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiB1c2luZyBuYW1lc3Bh
Y2UgRE9NOwpAQCAtNjgsMjYgKzY2LDE4IEBAIFJlbmRlckZvcm1FbGVtZW50Ojp+UmVuZGVyRm9y
bUVsZW1lbnQoKQogCiBzaG9ydCBSZW5kZXJGb3JtRWxlbWVudDo6YmFzZWxpbmVQb3NpdGlvbigg
Ym9vbCBmLCBib29sIGlzUm9vdExpbmVCb3ggKSBjb25zdAogewotI2lmIEFQUExFX0NIQU5HRVMK
ICAgICByZXR1cm4gbWFyZ2luVG9wKCkgKyB3aWRnZXQoKS0+YmFzZWxpbmVQb3NpdGlvbihtX2hl
aWdodCk7Ci0jZWxzZQotICAgIHJldHVybiBSZW5kZXJXaWRnZXQ6OmJhc2VsaW5lUG9zaXRpb24o
IGYsIGlzUm9vdExpbmVCb3ggKSAtIDIgLSBzdHlsZSgpLT5mb250TWV0cmljcygpLmRlc2NlbnQo
KTsKLSNlbmRpZgogfQogCiB2b2lkIFJlbmRlckZvcm1FbGVtZW50OjpzZXRTdHlsZShSZW5kZXJT
dHlsZSogcykKIHsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYgKGNhbkhhdmVJbnRyaW5zaWNN
YXJnaW5zKCkpCiAgICAgICAgIGFkZEludHJpbnNpY01hcmdpbnNJZkFsbG93ZWQocyk7Ci0jZW5k
aWYKIAogICAgIFJlbmRlcldpZGdldDo6c2V0U3R5bGUocyk7CiAKLSNpZiBBUFBMRV9DSEFOR0VT
CiAgICAgLy8gRG8gbm90IHBhaW50IGEgYmFja2dyb3VuZCBvciBib3JkZXIgZm9yIEFxdWEgZm9y
bSBlbGVtZW50cwogICAgIHNldFNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9yZGVyKGZhbHNlKTsK
LSNlbmRpZgogCiAgICAgbV93aWRnZXQtPnNldEZvbnQoc3R5bGUoKS0+Zm9udCgpKTsKIH0KQEAg
LTk2LDcxICs4Niw3IEBAIHZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OnVwZGF0ZUZyb21FbGVtZW4K
IHsKICAgICBtX3dpZGdldC0+c2V0RW5hYmxlZCghZWxlbWVudCgpLT5kaXNhYmxlZCgpKTsKIAot
I2lmIEFQUExFX0NIQU5HRVMKICAgICBtX3dpZGdldC0+c2V0UGFsZXR0ZShRUGFsZXR0ZShzdHls
ZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+Y29sb3IoKSkpOwotI2Vsc2UKLSAgICBR
Q29sb3IgY29sb3IgPSBzdHlsZSgpLT5jb2xvcigpOwotICAgIFFDb2xvciBiYWNrZ3JvdW5kQ29s
b3IgPSBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKLQotICAgIGlmICggY29sb3IuaXNWYWxp
ZCgpIHx8IGJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkgKSB7Ci0gICAgICAgIFFQYWxldHRlIHBh
bChtX3dpZGdldC0+cGFsZXR0ZSgpKTsKLQotICAgICAgICBpbnQgY29udHJhc3RfID0gS0dsb2Jh
bFNldHRpbmdzOjpjb250cmFzdCgpOwotICAgICAgICBpbnQgaGlnaGxpZ2h0VmFsID0gMTAwICsg
KDIqY29udHJhc3RfKzQpKjE2LzEwOwotICAgICAgICBpbnQgbG93bGlnaHRWYWwgPSAxMDAgKyAo
Mipjb250cmFzdF8rNCkqMTA7Ci0KLSAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvci5pc1ZhbGlk
KCkpIHsKLQkgICAgZm9yICggaW50IGkgPSAwOyBpIDwgUVBhbGV0dGU6Ok5Db2xvckdyb3Vwczsg
aSsrICkgewotCQlwYWwuc2V0Q29sb3IoIChRUGFsZXR0ZTo6Q29sb3JHcm91cClpLCBRQ29sb3JH
cm91cDo6QmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yICk7Ci0JCXBhbC5zZXRDb2xvciggKFFQ
YWxldHRlOjpDb2xvckdyb3VwKWksIFFDb2xvckdyb3VwOjpMaWdodCwgYmFja2dyb3VuZENvbG9y
LmxpZ2h0KGhpZ2hsaWdodFZhbCkgKTsKLQkJcGFsLnNldENvbG9yKCAoUVBhbGV0dGU6OkNvbG9y
R3JvdXApaSwgUUNvbG9yR3JvdXA6OkRhcmssIGJhY2tncm91bmRDb2xvci5kYXJrKGxvd2xpZ2h0
VmFsKSApOwotCQlwYWwuc2V0Q29sb3IoIChRUGFsZXR0ZTo6Q29sb3JHcm91cClpLCBRQ29sb3JH
cm91cDo6TWlkLCBiYWNrZ3JvdW5kQ29sb3IuZGFyaygxMjApICk7Ci0JCXBhbC5zZXRDb2xvcigg
KFFQYWxldHRlOjpDb2xvckdyb3VwKWksIFFDb2xvckdyb3VwOjpNaWRsaWdodCwgYmFja2dyb3Vu
ZENvbG9yLmxpZ2h0KDExMCkgKTsKLQkJcGFsLnNldENvbG9yKCAoUVBhbGV0dGU6OkNvbG9yR3Jv
dXApaSwgUUNvbG9yR3JvdXA6OkJ1dHRvbiwgYmFja2dyb3VuZENvbG9yICk7Ci0JCXBhbC5zZXRD
b2xvciggKFFQYWxldHRlOjpDb2xvckdyb3VwKWksIFFDb2xvckdyb3VwOjpCYXNlLCBiYWNrZ3Jv
dW5kQ29sb3IgKTsKLQkgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICggY29sb3IuaXNWYWxp
ZCgpICkgewotCSAgICBzdHJ1Y3QgQ29sb3JTZXQgewotCQlRUGFsZXR0ZTo6Q29sb3JHcm91cCBj
ZzsKLQkJUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSBjcjsKLQkgICAgfTsKLQkgICAgY29uc3Qgc3Ry
dWN0IENvbG9yU2V0IHRvU2V0IFtdID0gewotCQl7IFFQYWxldHRlOjpBY3RpdmUsIFFDb2xvckdy
b3VwOjpGb3JlZ3JvdW5kIH0sCi0JCXsgUVBhbGV0dGU6OkFjdGl2ZSwgUUNvbG9yR3JvdXA6OkJ1
dHRvblRleHQgfSwKLQkJeyBRUGFsZXR0ZTo6QWN0aXZlLCBRQ29sb3JHcm91cDo6VGV4dCB9LAot
CQl7IFFQYWxldHRlOjpJbmFjdGl2ZSwgUUNvbG9yR3JvdXA6OkZvcmVncm91bmQgfSwKLQkJeyBR
UGFsZXR0ZTo6SW5hY3RpdmUsIFFDb2xvckdyb3VwOjpCdXR0b25UZXh0IH0sCi0JCXsgUVBhbGV0
dGU6OkluYWN0aXZlLCBRQ29sb3JHcm91cDo6VGV4dCB9LAotCQl7IFFQYWxldHRlOjpEaXNhYmxl
ZCxRQ29sb3JHcm91cDo6QnV0dG9uVGV4dCB9LAotCQl7IFFQYWxldHRlOjpOQ29sb3JHcm91cHMs
IFFDb2xvckdyb3VwOjpOQ29sb3JSb2xlcyB9LAotCSAgICB9OwotCSAgICBjb25zdCBDb2xvclNl
dCAqc2V0ID0gdG9TZXQ7Ci0JICAgIHdoaWxlKCBzZXQtPmNnICE9IFFQYWxldHRlOjpOQ29sb3JH
cm91cHMgKSB7Ci0JCXBhbC5zZXRDb2xvciggc2V0LT5jZywgc2V0LT5jciwgY29sb3IgKTsKLQkJ
KytzZXQ7Ci0JICAgIH0KLQotICAgICAgICAgICAgUUNvbG9yIGRpc2ZnID0gY29sb3I7Ci0gICAg
ICAgICAgICBpbnQgaCwgcywgdjsKLSAgICAgICAgICAgIGRpc2ZnLmhzdiggJmgsICZzLCAmdiAp
OwotICAgICAgICAgICAgaWYgKHYgPiAxMjgpCi0gICAgICAgICAgICAgICAgLy8gZGFyayBiZywg
bGlnaHQgZmcgLSBuZWVkIGEgZGFya2VyIGRpc2FibGVkIGZnCi0gICAgICAgICAgICAgICAgZGlz
ZmcgPSBkaXNmZy5kYXJrKGxvd2xpZ2h0VmFsKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGRpc2Zn
ICE9IFF0OjpibGFjaykKLSAgICAgICAgICAgICAgICAvLyBsaWdodCBiZywgZGFyayBmZyAtIG5l
ZWQgYSBsaWdodGVyIGRpc2FibGVkIGZnIC0gYnV0IG9ubHkgaWYgIWJsYWNrCi0gICAgICAgICAg
ICAgICAgZGlzZmcgPSBkaXNmZy5saWdodChoaWdobGlnaHRWYWwpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIC8vIGJsYWNrIGZnIC0gdXNlIGRhcmtncmV5IGRpc2FibGVkIGZn
Ci0gICAgICAgICAgICAgICAgZGlzZmcgPSBRdDo6ZGFya0dyYXk7Ci0gICAgICAgICAgICBwYWwu
c2V0Q29sb3IoUVBhbGV0dGU6OkRpc2FibGVkLFFDb2xvckdyb3VwOjpGb3JlZ3JvdW5kLGRpc2Zn
KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fd2lkZ2V0LT5zZXRQYWxldHRlKHBhbCk7Ci0gICAg
fQotICAgIGVsc2UKLSAgICAgICAgbV93aWRnZXQtPnVuc2V0UGFsZXR0ZSgpOwotI2VuZGlmCiB9
CiAKIHZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OmxheW91dCgpCkBAIC0xNzQsMTIgKzEwMCw2IEBA
IHZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OmxheW91dCgpCiAgICAgY2FsY1dpZHRoKCk7CiAgICAg
Y2FsY0hlaWdodCgpOwogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBpZiAoIG1fd2lkZ2V0ICkK
LSAgICAgICAgcmVzaXplV2lkZ2V0KG1fd2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgbV93
aWR0aC1ib3JkZXJMZWZ0KCktYm9yZGVyUmlnaHQoKS1wYWRkaW5nTGVmdCgpLXBhZGRpbmdSaWdo
dCgpLAotICAgICAgICAgICAgICAgICAgICAgbV9oZWlnaHQtYm9yZGVyTGVmdCgpLWJvcmRlclJp
Z2h0KCktcGFkZGluZ0xlZnQoKS1wYWRkaW5nUmlnaHQoKSk7Ci0jZW5kaWYKICAgICAKICAgICBz
ZXROZWVkc0xheW91dChmYWxzZSk7CiB9CkBAIC0yMTcsNyArMTM3LDYgQEAgUXQ6OkFsaWdubWVu
dEZsYWdzIFJlbmRlckZvcm1FbGVtZW50Ojp0ZQogICAgIHJldHVybiBBbGlnbkxlZnQ7CiB9CiAK
LSNpZiBBUFBMRV9DSEFOR0VTCiAKIHZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OmFkZEludHJpbnNp
Y01hcmdpbnNJZkFsbG93ZWQoUmVuZGVyU3R5bGUqIF9zdHlsZSkKIHsKQEAgLTI1Miw3ICsxNzEs
NiBAQCB2b2lkIFJlbmRlckZvcm1FbGVtZW50OjpzbG90U2VsZWN0aW9uQ2hhCiAgICAgLy8gZG8g
bm90aGluZwogfQogCi0jZW5kaWYKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0y
NjQsNDMgKzE4MiwxMiBAQCBSZW5kZXJJbWFnZUJ1dHRvbjo6UmVuZGVySW1hZ2VCdXR0b24oSFRN
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotI2lmICFBUFBMRV9DSEFOR0VTCi0KLUxp
bmVFZGl0V2lkZ2V0OjpMaW5lRWRpdFdpZGdldChRV2lkZ2V0ICpwYXJlbnQpCi0gICAgICAgIDog
S0xpbmVFZGl0KHBhcmVudCkKLXsKLSAgICBzZXRNb3VzZVRyYWNraW5nKHRydWUpOwotfQotCi1i
b29sIExpbmVFZGl0V2lkZ2V0OjpldmVudCggUUV2ZW50ICplICkKLXsKLSAgICBpZiAoIGUtPnR5
cGUoKSA9PSBRRXZlbnQ6OkFjY2VsQXZhaWxhYmxlICYmIGlzUmVhZE9ubHkoKSApIHsKLSAgICAg
ICAgUUtleUV2ZW50KiBrZSA9IChRS2V5RXZlbnQqKSBlOwotICAgICAgICBpZiAoIGtlLT5zdGF0
ZSgpICYgQ29udHJvbEJ1dHRvbiApIHsKLSAgICAgICAgICAgIHN3aXRjaCAoIGtlLT5rZXkoKSAp
IHsKLSAgICAgICAgICAgICAgICBjYXNlIEtleV9MZWZ0OgotICAgICAgICAgICAgICAgIGNhc2Ug
S2V5X1JpZ2h0OgotICAgICAgICAgICAgICAgIGNhc2UgS2V5X1VwOgotICAgICAgICAgICAgICAg
IGNhc2UgS2V5X0Rvd246Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlfSG9tZToKLSAgICAgICAg
ICAgICAgICBjYXNlIEtleV9FbmQ6Ci0gICAgICAgICAgICAgICAgICAgIGtlLT5hY2NlcHQoKTsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBLTGluZUVkaXQ6OmV2ZW50KCBl
ICk7Ci19Ci0KLSNlbmRpZgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZW5kZXJMaW5l
RWRpdDo6UmVuZGVyTGluZUVkaXQoSFRNTElucHV0RWxlbWVudEltcGwgKmVsZW1lbnQpCiAgICAg
OiBSZW5kZXJGb3JtRWxlbWVudChlbGVtZW50KSwgbV91cGRhdGluZyhmYWxzZSkKIHsKLSNpZiBB
UFBMRV9DSEFOR0VTCiAgICAgUUxpbmVFZGl0OjpUeXBlIHR5cGU7CiAgICAgc3dpdGNoIChlbGVt
ZW50LT5pbnB1dFR5cGUoKSkgewogICAgICAgICBjYXNlIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpQ
QVNTV09SRDoKQEAgLTMxNSwzMCArMjAyLDEzIEBAIFJlbmRlckxpbmVFZGl0OjpSZW5kZXJMaW5l
RWRpdChIVE1MSW5wdXQKICAgICBLTGluZUVkaXQgKmVkaXQgPSBuZXcgS0xpbmVFZGl0KHR5cGUp
OwogICAgIGlmICh0eXBlID09IFFMaW5lRWRpdDo6U2VhcmNoKQogICAgICAgICBlZGl0LT5zZXRM
aXZlU2VhcmNoKGZhbHNlKTsKLSNlbHNlCi0gICAgTGluZUVkaXRXaWRnZXQgKmVkaXQgPSBuZXcg
TGluZUVkaXRXaWRnZXQodmlldygpLT52aWV3cG9ydCgpKTsKLSNlbmRpZgogICAgIGNvbm5lY3Qo
ZWRpdCxTSUdOQUwocmV0dXJuUHJlc3NlZCgpKSwgdGhpcywgU0xPVChzbG90UmV0dXJuUHJlc3Nl
ZCgpKSk7CiAgICAgY29ubmVjdChlZGl0LCBTSUdOQUwoc2VsZWN0aW9uQ2hhbmdlZCgpKSwgdGhp
cywgU0xPVChzbG90U2VsZWN0aW9uQ2hhbmdlZCgpKSk7CiAgICAgY29ubmVjdChlZGl0LFNJR05B
TCh0ZXh0Q2hhbmdlZChjb25zdCBRU3RyaW5nICYpKSx0aGlzLFNMT1Qoc2xvdFRleHRDaGFuZ2Vk
KGNvbnN0IFFTdHJpbmcgJikpKTsKICAgICBjb25uZWN0KGVkaXQsU0lHTkFMKGNsaWNrZWQoKSks
dGhpcyxTTE9UKHNsb3RDbGlja2VkKCkpKTsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICBjb25u
ZWN0KGVkaXQsU0lHTkFMKHBlcmZvcm1TZWFyY2goKSksIHRoaXMsIFNMT1Qoc2xvdFBlcmZvcm1T
ZWFyY2goKSkpOwotI2VuZGlmCiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIGlmKGVsZW1lbnQt
PmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpQQVNTV09SRCkKLSAgICAgICAg
ZWRpdC0+c2V0RWNob01vZGUoIFFMaW5lRWRpdDo6UGFzc3dvcmQgKTsKLQotICAgIGlmICggZWxl
bWVudC0+YXV0b0NvbXBsZXRlKCkgKSB7Ci0gICAgICAgIFFTdHJpbmdMaXN0IGNvbXBsZXRpb25z
ID0gdmlldygpLT5mb3JtQ29tcGxldGlvbkl0ZW1zKGVsZW1lbnQtPm5hbWUoKS5xc3RyaW5nKCkp
OwotICAgICAgICBpZiAoY29tcGxldGlvbnMuY291bnQoKSkgewotICAgICAgICAgICAgZWRpdC0+
Y29tcGxldGlvbk9iamVjdCgpLT5zZXRJdGVtcyhjb21wbGV0aW9ucyk7Ci0gICAgICAgICAgICBl
ZGl0LT5zZXRDb250ZXh0TWVudUVuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k
aWYKIAogICAgIHNldFFXaWRnZXQoZWRpdCk7CiB9CkBAIC0zNTYsMTIgKzIyNiw2IEBAIHZvaWQg
UmVuZGVyTGluZUVkaXQ6OnNsb3RTZWxlY3Rpb25DaGFuZ2UKIAogdm9pZCBSZW5kZXJMaW5lRWRp
dDo6c2xvdFJldHVyblByZXNzZWQoKQogewotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgLy8gZG9u
J3Qgc3VibWl0IHRoZSBmb3JtIHdoZW4gcmV0dXJuIHdhcyBwcmVzc2VkIGluIGEgY29tcGxldGlv
bi1wb3B1cAotICAgIEtDb21wbGV0aW9uQm94ICpib3ggPSB3aWRnZXQoKS0+Y29tcGxldGlvbkJv
eChmYWxzZSk7Ci0gICAgaWYgKCBib3ggJiYgYm94LT5pc1Zpc2libGUoKSAmJiBib3gtPmN1cnJl
bnRJdGVtKCkgIT0gLTEgKQotCXJldHVybjsKLSNlbmRpZgogCiAgICAgLy8gRW1pdCBvbkNoYW5n
ZSBpZiBuZWNlc3NhcnkKICAgICAvLyBXb3JrcyBidXQgbWlnaHQgbm90IGJlIGVub3VnaCwgZGly
ayBzYWlkIGhlIGhhZCBhbm90aGVyIHNvbHV0aW9uIGF0CkBAIC0zNzMsNyArMjM3LDYgQEAgdm9p
ZCBSZW5kZXJMaW5lRWRpdDo6c2xvdFJldHVyblByZXNzZWQoKQogICAgICAgICBmZS0+c3VibWl0
Q2xpY2soKTsKIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKIHZvaWQgUmVuZGVyTGluZUVkaXQ6OnNs
b3RQZXJmb3JtU2VhcmNoKCkKIHsKICAgICAvLyBGaXJlIHRoZSAic2VhcmNoIiBET00gZXZlbnQu
CkBAIC0zODUsNyArMjQ4LDYgQEAgdm9pZCBSZW5kZXJMaW5lRWRpdDo6YWRkU2VhcmNoUmVzdWx0
KCkKICAgICBpZiAod2lkZ2V0KCkpCiAgICAgICAgIHdpZGdldCgpLT5hZGRTZWFyY2hSZXN1bHQo
KTsKIH0KLSNlbmRpZgogCiB2b2lkIFJlbmRlckxpbmVFZGl0OjpoYW5kbGVGb2N1c091dCgpCiB7
CkBAIC0zOTksMjQgKzI2MSwxMSBAQCB2b2lkIFJlbmRlckxpbmVFZGl0OjpjYWxjTWluTWF4V2lk
dGgoKQogewogICAgIEtIVE1MQXNzZXJ0KCAhbWluTWF4S25vd24oKSApOwogCi0jaWYgQVBQTEVf
Q0hBTkdFUwogICAgIC8vIExldCB0aGUgd2lkZ2V0IHRlbGwgdXMgaG93IGJpZyBpdCB3YW50cyB0
byBiZS4KICAgICBtX3VwZGF0aW5nID0gdHJ1ZTsKICAgICBpbnQgc2l6ZSA9IGVsZW1lbnQoKS0+
c2l6ZSgpOwogICAgIFFTaXplIHMod2lkZ2V0KCktPnNpemVGb3JDaGFyYWN0ZXJXaWR0aChzaXpl
ID4gMCA/IHNpemUgOiAyMCkpOwogICAgIG1fdXBkYXRpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAg
Y29uc3QgUUZvbnRNZXRyaWNzICZmbSA9IHN0eWxlKCktPmZvbnRNZXRyaWNzKCk7Ci0gICAgUVNp
emUgczsKLQotICAgIGludCBzaXplID0gZWxlbWVudCgpLT5zaXplKCk7Ci0KLSAgICBpbnQgaCA9
IGZtLmxpbmVTcGFjaW5nKCk7Ci0gICAgaW50IHcgPSBmbS53aWR0aCggJ3gnICkgKiAoc2l6ZSA+
IDAgPyBzaXplIDogMTcpOyAvLyAic29tZSIKLSAgICBzID0gUVNpemUodyArIDIgKyAyKndpZGdl
dCgpLT5mcmFtZVdpZHRoKCksCi0gICAgICAgICAgICAgIGtNYXgoaCwgMTQpICsgMiArIDIqd2lk
Z2V0KCktPmZyYW1lV2lkdGgoKSkKLSAgICAgICAgLmV4cGFuZGVkVG8oUUFwcGxpY2F0aW9uOjpn
bG9iYWxTdHJ1dCgpKTsKLSNlbmRpZgogCiAgICAgc2V0SW50cmluc2ljV2lkdGgoIHMud2lkdGgo
KSApOwogICAgIHNldEludHJpbnNpY0hlaWdodCggcy5oZWlnaHQoKSApOwpAQCAtNDM3LDkgKzI4
Niw3IEBAIHZvaWQgUmVuZGVyTGluZUVkaXQ6OnNldFN0eWxlKFJlbmRlclN0eWwKIAogICAgIEtM
aW5lRWRpdCAqdyA9IHdpZGdldCgpOwogICAgIHctPnNldEFsaWdubWVudCh0ZXh0QWxpZ25tZW50
KCkpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICB3LT5zZXRXcml0aW5nRGlyZWN0aW9uKHN0eWxl
KCktPmRpcmVjdGlvbigpID09IFJUTCA/IFFQYWludGVyOjpSVEwgOiBRUGFpbnRlcjo6TFRSKTsK
LSNlbmRpZgogfQogCiB2b2lkIFJlbmRlckxpbmVFZGl0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCkBA
IC00NzUsNyArMzIyLDYgQEAgdm9pZCBSZW5kZXJMaW5lRWRpdDo6dXBkYXRlRnJvbUVsZW1lbnQo
KQogCiAgICAgdy0+c2V0UmVhZE9ubHkoZS0+cmVhZE9ubHkoKSk7CiAgICAgCi0jaWYgQVBQTEVf
Q0hBTkdFUwogICAgIC8vIEhhbmRsZSB1cGRhdGluZyB0aGUgc2VhcmNoIGF0dHJpYnV0ZXMuCiAg
ICAgdy0+c2V0UGxhY2Vob2xkZXJTdHJpbmcoZS0+Z2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0
cikucXN0cmluZygpKTsKICAgICBpZiAody0+dHlwZSgpID09IFFMaW5lRWRpdDo6U2VhcmNoKSB7
CkBAIC00ODMsNyArMzI5LDYgQEAgdm9pZCBSZW5kZXJMaW5lRWRpdDo6dXBkYXRlRnJvbUVsZW1l
bnQoKQogICAgICAgICB3LT5zZXRBdXRvU2F2ZU5hbWUoZS0+Z2V0QXR0cmlidXRlKGF1dG9zYXZl
QXR0cikucXN0cmluZygpKTsKICAgICAgICAgdy0+c2V0TWF4UmVzdWx0cyhlLT5tYXhSZXN1bHRz
KCkpOwogICAgIH0KLSNlbmRpZgogCiAgICAgUmVuZGVyRm9ybUVsZW1lbnQ6OnVwZGF0ZUZyb21F
bGVtZW50KCk7CiB9CkBAIC02OTUsNTAgKzU0MCwxOSBAQCB2b2lkIFJlbmRlckZpZWxkc2V0Ojpz
ZXRTdHlsZShSZW5kZXJTdHlsCiBSZW5kZXJGaWxlQnV0dG9uOjpSZW5kZXJGaWxlQnV0dG9uKEhU
TUxJbnB1dEVsZW1lbnRJbXBsICplbGVtZW50KQogICAgIDogUmVuZGVyRm9ybUVsZW1lbnQoZWxl
bWVudCkKIHsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgS1dRRmlsZUJ1dHRvbiAqdyA9IG5ldyBL
V1FGaWxlQnV0dG9uKHZpZXcoKS0+cGFydCgpKTsKICAgICBjb25uZWN0KHcsIFNJR05BTCh0ZXh0
Q2hhbmdlZChjb25zdCBRU3RyaW5nICYpKSx0aGlzLFNMT1Qoc2xvdFRleHRDaGFuZ2VkKGNvbnN0
IFFTdHJpbmcgJikpKTsKICAgICBjb25uZWN0KHcsIFNJR05BTChjbGlja2VkKCkpLCB0aGlzLCBT
TE9UKHNsb3RDbGlja2VkKCkpKTsKICAgICBzZXRRV2lkZ2V0KHcpOwotI2Vsc2UKLSAgICBRSEJv
eCAqdyA9IG5ldyBRSEJveCh2aWV3KCktPnZpZXdwb3J0KCkpOwotCi0gICAgbV9lZGl0ID0gbmV3
IExpbmVFZGl0V2lkZ2V0KHcpOwotCi0gICAgY29ubmVjdChtX2VkaXQsIFNJR05BTChyZXR1cm5Q
cmVzc2VkKCkpLCB0aGlzLCBTTE9UKHNsb3RSZXR1cm5QcmVzc2VkKCkpKTsKLSAgICBjb25uZWN0
KG1fZWRpdCwgU0lHTkFMKHRleHRDaGFuZ2VkKGNvbnN0IFFTdHJpbmcgJikpLHRoaXMsU0xPVChz
bG90VGV4dENoYW5nZWQoY29uc3QgUVN0cmluZyAmKSkpOwotCi0gICAgbV9idXR0b24gPSBuZXcg
UVB1c2hCdXR0b24oaTE4bigiQnJvd3NlLi4uIiksIHcpOwotICAgIG1fYnV0dG9uLT5zZXRGb2N1
c1BvbGljeShRV2lkZ2V0OjpDbGlja0ZvY3VzKTsKLSAgICBjb25uZWN0KG1fYnV0dG9uLFNJR05B
TChjbGlja2VkKCkpLCB0aGlzLCBTTE9UKHNsb3RDbGlja2VkKCkpKTsKLQotICAgIHctPnNldFN0
cmV0Y2hGYWN0b3IobV9lZGl0LCAyKTsKLSAgICB3LT5zZXRGb2N1c1Byb3h5KG1fZWRpdCk7Ci0K
LSAgICBzZXRRV2lkZ2V0KHcpOwotI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVyRmlsZUJ1dHRvbjo6
Y2FsY01pbk1heFdpZHRoKCkKIHsKICAgICBLSFRNTEFzc2VydCggIW1pbk1heEtub3duKCkgKTsK
IAotI2lmIEFQUExFX0NIQU5HRVMKICAgICAvLyBMZXQgdGhlIHdpZGdldCB0ZWxsIHVzIGhvdyBi
aWcgaXQgd2FudHMgdG8gYmUuCiAgICAgaW50IHNpemUgPSBlbGVtZW50KCktPnNpemUoKTsKICAg
ICBRU2l6ZSBzKHN0YXRpY19jYXN0PEtXUUZpbGVCdXR0b24gKj4od2lkZ2V0KCkpLT5zaXplRm9y
Q2hhcmFjdGVyV2lkdGgoc2l6ZSA+IDAgPyBzaXplIDogMjApKTsKLSNlbHNlCi0gICAgY29uc3Qg
UUZvbnRNZXRyaWNzICZmbSA9IHN0eWxlKCktPmZvbnRNZXRyaWNzKCk7Ci0gICAgUVNpemUgczsK
LSAgICBpbnQgc2l6ZSA9IGVsZW1lbnQoKS0+c2l6ZSgpOwotCi0gICAgaW50IGggPSBmbS5saW5l
U3BhY2luZygpOwotICAgIGludCB3ID0gZm0ud2lkdGgoICd4JyApICogKHNpemUgPiAwID8gc2l6
ZSA6IDE3KTsgLy8gInNvbWUiCi0gICAgdyArPSA2ICsgZm0ud2lkdGgoIG1fYnV0dG9uLT50ZXh0
KCkgKSArIDIqZm0ud2lkdGgoICcgJyApOwotICAgIHMgPSBRU2l6ZSh3ICsgMiArIDIqbV9lZGl0
LT5mcmFtZVdpZHRoKCksCi0gICAgICAgICAgICAgIGtNYXgoaCwgMTQpICsgMiArIDIqbV9lZGl0
LT5mcmFtZVdpZHRoKCkpCi0gICAgICAgIC5leHBhbmRlZFRvKFFBcHBsaWNhdGlvbjo6Z2xvYmFs
U3RydXQoKSk7Ci0jZW5kaWYKIAogICAgIHNldEludHJpbnNpY1dpZHRoKCBzLndpZHRoKCkgKTsK
ICAgICBzZXRJbnRyaW5zaWNIZWlnaHQoIHMuaGVpZ2h0KCkgKTsKQEAgLTc0Niw0NSArNTYwLDE1
IEBAIHZvaWQgUmVuZGVyRmlsZUJ1dHRvbjo6Y2FsY01pbk1heFdpZHRoKCkKICAgICBSZW5kZXJG
b3JtRWxlbWVudDo6Y2FsY01pbk1heFdpZHRoKCk7CiB9CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwot
Ci12b2lkIFJlbmRlckZpbGVCdXR0b246OmhhbmRsZUZvY3VzT3V0KCkKLXsKLSAgICBpZiAoIG1f
ZWRpdCAmJiBtX2VkaXQtPmVkaXRlZCgpICkgewotICAgICAgICBlbGVtZW50KCktPm9uQ2hhbmdl
KCk7Ci0gICAgICAgIG1fZWRpdC0+c2V0RWRpdGVkKCBmYWxzZSApOwotICAgIH0KLX0KLQotI2Vu
ZGlmCiAKIHZvaWQgUmVuZGVyRmlsZUJ1dHRvbjo6c2xvdENsaWNrZWQoKQogewotI2lmIEFQUExF
X0NIQU5HRVMKICAgICBSZW5kZXJGb3JtRWxlbWVudDo6c2xvdENsaWNrZWQoKTsKLSNlbHNlCi0g
ICAgUVN0cmluZyBmaWxlX25hbWUgPSBLRmlsZURpYWxvZzo6Z2V0T3BlbkZpbGVOYW1lKFFTdHJp
bmc6Om51bGwsIFFTdHJpbmc6Om51bGwsIDAsIGkxOG4oIkJyb3dzZS4uLiIpKTsKLSAgICBpZiAo
IWZpbGVfbmFtZS5pc051bGwoKSkgewotICAgICAgICBlbGVtZW50KCktPm1fdmFsdWUgPSBET01T
dHJpbmcoZmlsZV9uYW1lKTsKLSAgICAgICAgbV9lZGl0LT5zZXRUZXh0KGZpbGVfbmFtZSk7Ci0g
ICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVyRmlsZUJ1dHRvbjo6dXBkYXRlRnJvbUVsZW1l
bnQoKQogewotI2lmIEFQUExFX0NIQU5HRVMKICAgICBzdGF0aWNfY2FzdDxLV1FGaWxlQnV0dG9u
ICo+KHdpZGdldCgpKS0+c2V0RmlsZW5hbWUoZWxlbWVudCgpLT52YWx1ZSgpLnFzdHJpbmcoKSk7
Ci0jZWxzZQotICAgIG1fZWRpdC0+YmxvY2tTaWduYWxzKHRydWUpOwotICAgIG1fZWRpdC0+c2V0
VGV4dChlbGVtZW50KCktPnZhbHVlKCkucXN0cmluZygpKTsKLSAgICBtX2VkaXQtPmJsb2NrU2ln
bmFscyhmYWxzZSk7Ci0gICAgaW50IG1sID0gZWxlbWVudCgpLT5tYXhMZW5ndGgoKTsKLSAgICBp
ZiAoIG1sIDw9IDAgfHwgbWwgPiAxMDI0ICkKLSAgICAgICAgbWwgPSAxMDI0OwotICAgIG1fZWRp
dC0+c2V0TWF4TGVuZ3RoKCBtbCApOwotICAgIG1fZWRpdC0+c2V0RWRpdGVkKCBmYWxzZSApOwot
I2VuZGlmCiAKICAgICBSZW5kZXJGb3JtRWxlbWVudDo6dXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0K
QEAgLTgwMywxOSArNTg3LDE0IEBAIHZvaWQgUmVuZGVyRmlsZUJ1dHRvbjo6c2xvdFRleHRDaGFu
Z2VkKGMKIAogdm9pZCBSZW5kZXJGaWxlQnV0dG9uOjpzZWxlY3QoKQogewotI2lmICFBUFBMRV9D
SEFOR0VTCi0gICAgbV9lZGl0LT5zZWxlY3RBbGwoKTsKLSNlbmRpZgogfQogCi0jaWYgQVBQTEVf
Q0hBTkdFUwogCiB2b2lkIFJlbmRlckZpbGVCdXR0b246OmNsaWNrKGJvb2wgc2VuZE1vdXNlRXZl
bnRzKQogewogICAgIHN0YXRpY19jYXN0PEtXUUZpbGVCdXR0b24gKj4od2lkZ2V0KCkpLT5jbGlj
ayhzZW5kTW91c2VFdmVudHMpOwogfQogCi0jZW5kaWYKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CkBAIC04NDQsNDkgKzYyMywxMSBAQCBDb21ib0JveFdpZGdldDo6Q29tYm9Cb3hXaWRnZXQoUVdp
ZGdldCAqCiAKIGJvb2wgQ29tYm9Cb3hXaWRnZXQ6OmV2ZW50KFFFdmVudCAqZSkKIHsKLSNpZiAh
QVBQTEVfQ0hBTkdFUwotICAgIGlmIChlLT50eXBlKCk9PVFFdmVudDo6S2V5UHJlc3MpCi0gICAg
ewotCVFLZXlFdmVudCAqa2UgPSBzdGF0aWNfY2FzdDxRS2V5RXZlbnQgKj4oZSk7Ci0Jc3dpdGNo
KGtlLT5rZXkoKSkKLQl7Ci0JY2FzZSBLZXlfUmV0dXJuOgotCWNhc2UgS2V5X0VudGVyOgotCSAg
ICBwb3B1cCgpOwotCSAgICBrZS0+YWNjZXB0KCk7Ci0JICAgIHJldHVybiB0cnVlOwotCWRlZmF1
bHQ6Ci0JICAgIHJldHVybiBLQ29tYm9Cb3g6OmV2ZW50KGUpOwotCX0KLSAgICB9Ci0jZW5kaWYK
ICAgICByZXR1cm4gS0NvbWJvQm94OjpldmVudChlKTsKIH0KIAogYm9vbCBDb21ib0JveFdpZGdl
dDo6ZXZlbnRGaWx0ZXIoUU9iamVjdCAqZGVzdCwgUUV2ZW50ICplKQogewotI2lmICFBUFBMRV9D
SEFOR0VTCi0gICAgaWYgKGRlc3Q9PWxpc3RCb3goKSAmJiAgZS0+dHlwZSgpPT1RRXZlbnQ6Oktl
eVByZXNzKQotICAgIHsKLQlRS2V5RXZlbnQgKmtlID0gc3RhdGljX2Nhc3Q8UUtleUV2ZW50ICo+
KGUpOwotCWJvb2wgZm9yd2FyZCA9IGZhbHNlOwotCXN3aXRjaChrZS0+a2V5KCkpCi0JewotCWNh
c2UgS2V5X1RhYjoKLQkgICAgZm9yd2FyZD10cnVlOwotCWNhc2UgS2V5X0JhY2tUYWI6Ci0JICAg
IC8vIHVnbHkgaGFjay4gZW11bGF0ZSBwb3Bkb3dubGlzdGJveCgpIChwcml2YXRlIGluIFFDb21i
b0JveCkKLQkgICAgLy8gd2UgcmUtdXNlIGtlIGhlcmUgdG8gc3RvcmUgdGhlIHJlZmVyZW5jZSB0
byB0aGUgZ2VuZXJhdGVkIGV2ZW50LgotCSAgICBrZSA9IG5ldyBRS2V5RXZlbnQoUUV2ZW50OjpL
ZXlQcmVzcywgS2V5X0VzY2FwZSwgMCwgMCk7Ci0JICAgIFFBcHBsaWNhdGlvbjo6c2VuZEV2ZW50
KGRlc3Qsa2UpOwotCSAgICBmb2N1c05leHRQcmV2Q2hpbGQoZm9yd2FyZCk7Ci0JICAgIGRlbGV0
ZSBrZTsKLQkgICAgcmV0dXJuIHRydWU7Ci0JZGVmYXVsdDoKLQkgICAgcmV0dXJuIEtDb21ib0Jv
eDo6ZXZlbnRGaWx0ZXIoZGVzdCwgZSk7Ci0JfQotICAgIH0KLSNlbmRpZgogICAgIHJldHVybiBL
Q29tYm9Cb3g6OmV2ZW50RmlsdGVyKGRlc3QsIGUpOwogfQogCkBAIC05MDgsNyArNjQ5LDYgQEAg
UmVuZGVyU2VsZWN0OjpSZW5kZXJTZWxlY3QoSFRNTFNlbGVjdEVsZQogICAgICAgICBzZXRRV2lk
Z2V0KGNyZWF0ZUNvbWJvQm94KCkpOwogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogCiB2b2lkIFJl
bmRlclNlbGVjdDo6c2V0V2lkZ2V0V3JpdGluZ0RpcmVjdGlvbigpCiB7CkBAIC05MjUsNyArNjY1
LDYgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNldFN0eWxlKFJlbmRlclN0eWxlIAogICAgIHNldFdp
ZGdldFdyaXRpbmdEaXJlY3Rpb24oKTsKIH0KIAotI2VuZGlmCiAKIHZvaWQgUmVuZGVyU2VsZWN0
Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiB7CkBAIC05NDksOSArNjg4LDcgQEAgdm9pZCBSZW5kZXJT
ZWxlY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAgICAgICBzZXRRV2lkZ2V0KGNy
ZWF0ZUxpc3RCb3goKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0UVdp
ZGdldChjcmVhdGVDb21ib0JveCgpKTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgICAgICBz
ZXRXaWRnZXRXcml0aW5nRGlyZWN0aW9uKCk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChtX3VzZUxpc3RCb3ggJiYgb2xkTXVsdGlwbGUgIT0gbV9tdWx0aXBsZSkgewpAQCAtOTg0
LDIxICs3MjEsMTAgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAg
ICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNvbGxhcHNlIG91ciB3aGl0ZXNwYWNlIHRvby4g
IFRoaXMgd2lsbCBtYXRjaCBvdGhlciBicm93c2Vycy4KICAgICAgICAgICAgICAgICBsYWJlbCA9
IGxhYmVsLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOwogICAgICAgICAgICAgICAgIAotI2lmIEFQUExF
X0NIQU5HRVMKICAgICAgICAgICAgICAgICBpZiAobV91c2VMaXN0Qm94KQogICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxLTGlzdEJveCo+KG1fd2lkZ2V0KS0+YXBwZW5kR3JvdXBMYWJl
bChsYWJlbCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxLQ29tYm9Cb3gqPihtX3dpZGdldCktPmFwcGVuZEdyb3VwTGFiZWwobGFiZWwpOwot
I2Vsc2UKLSAgICAgICAgICAgICAgICBpZihtX3VzZUxpc3RCb3gpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUUxpc3RCb3hUZXh0ICppdGVtID0gbmV3IFFMaXN0Qm94VGV4dChsYWJlbCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEtMaXN0Qm94Kj4obV93aWRnZXQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAtPmluc2VydEl0ZW0oaXRlbSwgbGlzdEluZGV4KTsKLSAgICAgICAg
ICAgICAgICAgICAgaXRlbS0+c2V0U2VsZWN0YWJsZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
S0NvbWJvQm94Kj4obV93aWRnZXQpLT5pbnNlcnRJdGVtKGxhYmVsLCBsaXN0SW5kZXgpOwotI2Vu
ZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChsaXN0SXRlbXNbbGlzdElu
ZGV4XS0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7CiAgICAgICAgICAgICAgICAgUVN0cmluZyBp
dGVtVGV4dCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGxpc3RJdGVtc1ts
aXN0SW5kZXhdKS0+dGV4dCgpLnFzdHJpbmcoKTsKQEAgLTEwMTIsMTcgKzczOCwxMCBAQCB2b2lk
IFJlbmRlclNlbGVjdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgICAgIGlmIChs
aXN0SXRlbXNbbGlzdEluZGV4XS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKG9wdGdyb3VwVGFn
KSkKICAgICAgICAgICAgICAgICAgICAgaXRlbVRleHQucHJlcGVuZCgiICAgICIpOwogCi0jaWYg
QVBQTEVfQ0hBTkdFUwogICAgICAgICAgICAgICAgIGlmIChtX3VzZUxpc3RCb3gpCiAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEtMaXN0Qm94Kj4obV93aWRnZXQpLT5hcHBlbmRJdGVt
KGl0ZW1UZXh0KTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PEtDb21ib0JveCo+KG1fd2lkZ2V0KS0+YXBwZW5kSXRlbShpdGVtVGV4dCk7Ci0j
ZWxzZQotICAgICAgICAgICAgICAgIGlmKG1fdXNlTGlzdEJveCkKLSAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8S0xpc3RCb3gqPihtX3dpZGdldCktPmluc2VydEl0ZW0oaXRlbVRleHQs
IGxpc3RJbmRleCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxLQ29tYm9Cb3gqPihtX3dpZGdldCktPmluc2VydEl0ZW0oaXRlbVRleHQsIGxp
c3RJbmRleCk7Ci0jZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGxp
c3RJdGVtc1tsaXN0SW5kZXhdLT5oYXNUYWdOYW1lKGhyVGFnKSkgewogICAgICAgICAgICAgICAg
IGlmICghbV91c2VMaXN0Qm94KSB7CkBAIC0xMDMzLDEwICs3NTIsOCBAQCB2b2lkIFJlbmRlclNl
bGVjdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgICAgIEtIVE1MQXNzZXJ0KGZh
bHNlKTsKICAgICAgICAgICAgIG1fc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0K
LSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIGlmIChtX3VzZUxpc3RCb3gpCiAJICAgIHN0YXRp
Y19jYXN0PEtMaXN0Qm94Kj4obV93aWRnZXQpLT5kb25lQXBwZW5kaW5nSXRlbXMoKTsKLSNlbmRp
ZgogICAgICAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwogICAgICAgICBtX29w
dGlvbnNDaGFuZ2VkID0gZmFsc2U7CiAgICAgfQpAQCAtMTA1MSw3ICs3NjgsNiBAQCB2b2lkIFJl
bmRlclNlbGVjdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIFJlbmRlckZvcm1FbGVtZW50Ojp1
cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogCiBzaG9ydCBSZW5k
ZXJTZWxlY3Q6OmJhc2VsaW5lUG9zaXRpb24oIGJvb2wgZiwgYm9vbCBpc1Jvb3RMaW5lQm94ICkg
Y29uc3QKIHsKQEAgLTEwNjMsNyArNzc5LDYgQEAgc2hvcnQgUmVuZGVyU2VsZWN0OjpiYXNlbGlu
ZVBvc2l0aW9uKCBibwogICAgIHJldHVybiBSZW5kZXJGb3JtRWxlbWVudDo6YmFzZWxpbmVQb3Np
dGlvbiggZiwgaXNSb290TGluZUJveCApOwogfQogCi0jZW5kaWYKIAogdm9pZCBSZW5kZXJTZWxl
Y3Q6OmNhbGNNaW5NYXhXaWR0aCgpCiB7CkBAIC0xMDk0LDE2ICs4MDksNiBAQCB2b2lkIFJlbmRl
clNlbGVjdDo6bGF5b3V0KCApCiAgICAgaWYobV91c2VMaXN0Qm94KSB7CiAgICAgICAgIEtMaXN0
Qm94KiB3ID0gc3RhdGljX2Nhc3Q8S0xpc3RCb3gqPihtX3dpZGdldCk7CiAKLSNpZiAhQVBQTEVf
Q0hBTkdFUwotICAgICAgICBRTGlzdEJveEl0ZW0qIHAgPSB3LT5maXJzdEl0ZW0oKTsKLSAgICAg
ICAgaW50IHdpZHRoID0gMDsKLSAgICAgICAgaW50IGhlaWdodCA9IDA7Ci0gICAgICAgIHdoaWxl
KHApIHsKLSAgICAgICAgICAgIHdpZHRoID0ga01heCh3aWR0aCwgcC0+d2lkdGgocC0+bGlzdEJv
eCgpKSk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBrTWF4KGhlaWdodCwgcC0+aGVpZ2h0KHAtPmxp
c3RCb3goKSkpOwotICAgICAgICAgICAgcCA9IHAtPm5leHQoKTsKLSAgICAgICAgfQotI2VuZGlm
CiAKICAgICAgICAgaW50IHNpemUgPSBtX3NpemU7CiAgICAgICAgIC8vIGNoZWNrIGlmIG11bHRp
cGxlIGFuZCBzaXplIHdhcyBub3QgZ2l2ZW4gb3IgaW52YWxpZApAQCAtMTExNCwxOCArODE5LDEw
IEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpsYXlvdXQoICkKICAgICAgICAgaWYoc2l6ZSA8IDEpCiAg
ICAgICAgICAgICBzaXplID0ga01pbihzdGF0aWNfY2FzdDxLTGlzdEJveCo+KG1fd2lkZ2V0KS0+
Y291bnQoKSwgMTBVKTsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgLy8gTGV0IHRoZSB3
aWRnZXQgdGVsbCB1cyBob3cgYmlnIGl0IHdhbnRzIHRvIGJlLgogICAgICAgICBRU2l6ZSBzKHct
PnNpemVGb3JOdW1iZXJPZkxpbmVzKHNpemUpKTsKICAgICAgICAgc2V0SW50cmluc2ljV2lkdGgo
IHMud2lkdGgoKSApOwogICAgICAgICBzZXRJbnRyaW5zaWNIZWlnaHQoIHMuaGVpZ2h0KCkgKTsK
LSNlbHNlCi0gICAgICAgIHdpZHRoICs9IDIqdy0+ZnJhbWVXaWR0aCgpICsgdy0+dmVydGljYWxT
Y3JvbGxCYXIoKS0+c2l6ZUhpbnQoKS53aWR0aCgpOwotICAgICAgICBoZWlnaHQgPSBzaXplKmhl
aWdodCArIDIqdy0+ZnJhbWVXaWR0aCgpOwotCi0gICAgICAgIHNldEludHJpbnNpY1dpZHRoKCB3
aWR0aCApOwotICAgICAgICBzZXRJbnRyaW5zaWNIZWlnaHQoIGhlaWdodCApOwotI2VuZGlmCiAg
ICAgfQogICAgIGVsc2UgewogICAgICAgICBRU2l6ZSBzKG1fd2lkZ2V0LT5zaXplSGludCgpKTsK
QEAgLTEyODAsNTggKzk3NywxOSBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlU2VsZWN0aW9u
KCkKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jaWYgIUFQUExFX0NIQU5HRVMKLQotVGV4dEFy
ZWFXaWRnZXQ6OlRleHRBcmVhV2lkZ2V0KFFXaWRnZXQqIHBhcmVudCkKLSAgICA6IEtUZXh0RWRp
dChwYXJlbnQpCi17Ci19Ci0KLWJvb2wgVGV4dEFyZWFXaWRnZXQ6OmV2ZW50KCBRRXZlbnQgKmUg
KQotewotICAgIGlmICggZS0+dHlwZSgpID09IFFFdmVudDo6QWNjZWxBdmFpbGFibGUgJiYgaXNS
ZWFkT25seSgpICkgewotICAgICAgICBRS2V5RXZlbnQqIGtlID0gKFFLZXlFdmVudCopIGU7Ci0g
ICAgICAgIGlmICgga2UtPnN0YXRlKCkgJiBDb250cm9sQnV0dG9uICkgewotICAgICAgICAgICAg
c3dpdGNoICgga2UtPmtleSgpICkgewotICAgICAgICAgICAgICAgIGNhc2UgS2V5X0xlZnQ6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBLZXlfUmlnaHQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlf
VXA6Ci0gICAgICAgICAgICAgICAgY2FzZSBLZXlfRG93bjoKLSAgICAgICAgICAgICAgICBjYXNl
IEtleV9Ib21lOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5X0VuZDoKLSAgICAgICAgICAgICAg
ICAgICAga2UtPmFjY2VwdCgpOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IEtUZXh0RWRpdDo6ZXZlbnQoIGUgKTsKLX0KLQotI2VuZGlmCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogUmVuZGVyVGV4dEFyZWE6OlJlbmRlclRleHRBcmVhKEhUTUxUZXh0QXJlYUVsZW1lbnRJ
bXBsICplbGVtZW50KQogICAgIDogUmVuZGVyRm9ybUVsZW1lbnQoZWxlbWVudCksIG1fZGlydHko
ZmFsc2UpCiB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIFFUZXh0RWRpdCAqZWRpdCA9IG5ldyBL
VGV4dEVkaXQodmlldygpKTsKLSNlbHNlCi0gICAgUVRleHRFZGl0ICplZGl0ID0gbmV3IFRleHRB
cmVhV2lkZ2V0KHZpZXcoKSk7Ci0jZW5kaWYKIAogICAgIGlmIChlbGVtZW50LT53cmFwKCkgIT0g
SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnRhX05vV3JhcCkKICAgICAgICAgZWRpdC0+c2V0V29y
ZFdyYXAoUVRleHRFZGl0OjpXaWRnZXRXaWR0aCk7CiAgICAgZWxzZQogICAgICAgICBlZGl0LT5z
ZXRXb3JkV3JhcChRVGV4dEVkaXQ6Ok5vV3JhcCk7CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAg
IEtDdXJzb3I6OnNldEF1dG9IaWRlQ3Vyc29yKGVkaXQtPnZpZXdwb3J0KCksIHRydWUpOwotICAg
IGVkaXQtPnNldFRleHRGb3JtYXQoUVRleHRFZGl0OjpQbGFpblRleHQpOwotICAgIGVkaXQtPnNl
dEF1dG9NYXNrKHRydWUpOwotICAgIGVkaXQtPnNldE1vdXNlVHJhY2tpbmcodHJ1ZSk7Ci0jZW5k
aWYKIAogICAgIHNldFFXaWRnZXQoZWRpdCk7CiAKQEAgLTEzNjAsMTggKzEwMTgsNyBAQCB2b2lk
IFJlbmRlclRleHRBcmVhOjpjYWxjTWluTWF4V2lkdGgoKQogICAgIEtIVE1MQXNzZXJ0KCAhbWlu
TWF4S25vd24oKSApOwogCiAgICAgUVRleHRFZGl0KiB3ID0gc3RhdGljX2Nhc3Q8UVRleHRFZGl0
Kj4obV93aWRnZXQpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICBRU2l6ZSBzaXplKHctPnNpemVX
aXRoQ29sdW1uc0FuZFJvd3Moa01heChlbGVtZW50KCktPmNvbHMoKSwgMSksIGtNYXgoZWxlbWVu
dCgpLT5yb3dzKCksIDEpKSk7Ci0jZWxzZQotICAgIGNvbnN0IFFGb250TWV0cmljcyAmbSA9IHN0
eWxlKCktPmZvbnRNZXRyaWNzKCk7Ci0gICAgdy0+c2V0VGFiU3RvcFdpZHRoKDggKiBtLndpZHRo
KCIgIikpOwotICAgIFFTaXplIHNpemUoIGtNYXgoZWxlbWVudCgpLT5jb2xzKCksIDEpKm0ud2lk
dGgoJ3gnKSArIHctPmZyYW1lV2lkdGgoKSArCi0gICAgICAgICAgICAgICAgdy0+dmVydGljYWxT
Y3JvbGxCYXIoKS0+c2l6ZUhpbnQoKS53aWR0aCgpLAotICAgICAgICAgICAgICAgIGtNYXgoZWxl
bWVudCgpLT5yb3dzKCksIDEpKm0uaGVpZ2h0KCkgKyB3LT5mcmFtZVdpZHRoKCkqMiArCi0gICAg
ICAgICAgICAgICAgKHctPndvcmRXcmFwKCkgPT0gUVRleHRFZGl0OjpOb1dyYXAgPwotICAgICAg
ICAgICAgICAgICB3LT5ob3Jpem9udGFsU2Nyb2xsQmFyKCktPnNpemVIaW50KCkuaGVpZ2h0KCkg
OiAwKQotICAgICAgICApOwotI2VuZGlmCiAKICAgICBzZXRJbnRyaW5zaWNXaWR0aCggc2l6ZS53
aWR0aCgpICk7CiAgICAgc2V0SW50cmluc2ljSGVpZ2h0KCBzaXplLmhlaWdodCgpICk7CkBAIC0x
Mzk0LDkgKzEwNDEsNyBAQCB2b2lkIFJlbmRlclRleHRBcmVhOjpzZXRTdHlsZShSZW5kZXJTdHls
CiAgICAgdy0+c2V0QWxpZ25tZW50KHRleHRBbGlnbm1lbnQoKSk7CiAgICAgdy0+c2V0TGluZUhl
aWdodChSZW5kZXJPYmplY3Q6OmxpbmVIZWlnaHQodHJ1ZSkpOwogCi0jaWYgQVBQTEVfQ0hBTkdF
UwogICAgIHctPnNldFdyaXRpbmdEaXJlY3Rpb24oc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRM
ID8gUVBhaW50ZXI6OlJUTCA6IFFQYWludGVyOjpMVFIpOwotI2VuZGlmCiAKICAgICBRU2Nyb2xs
Vmlldzo6U2Nyb2xsQmFyTW9kZSBzY3JvbGxNb2RlID0gUVNjcm9sbFZpZXc6OkF1dG87CiAgICAg
c3dpdGNoIChzdHlsZSgpLT5vdmVyZmxvdygpKSB7CkBAIC0xNDE2LDEyICsxMDYxLDcgQEAgdm9p
ZCBSZW5kZXJUZXh0QXJlYTo6c2V0U3R5bGUoUmVuZGVyU3R5bAogICAgIGlmIChlbGVtZW50KCkt
PndyYXAoKSAhPSBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6dGFfTm9XcmFwKQogICAgICAgICBo
b3Jpem9udGFsU2Nyb2xsTW9kZSA9IFFTY3JvbGxWaWV3OjpBbHdheXNPZmY7CiAKLSNpZiBBUFBM
RV9DSEFOR0VTCiAgICAgdy0+c2V0U2Nyb2xsQmFyTW9kZXMoaG9yaXpvbnRhbFNjcm9sbE1vZGUs
IHNjcm9sbE1vZGUpOwotI2Vsc2UKLSAgICB3LT5zZXRIU2Nyb2xsQmFyTW9kZShob3Jpem9udGFs
U2Nyb2xsTW9kZSk7Ci0gICAgdy0+c2V0VlNjcm9sbEJhck1vZGUoc2Nyb2xsTW9kZSk7Ci0jZW5k
aWYKIH0KIAogdm9pZCBSZW5kZXJUZXh0QXJlYTo6dXBkYXRlRnJvbUVsZW1lbnQoKQpAQCAtMTQz
MCw5ICsxMDcwLDcgQEAgdm9pZCBSZW5kZXJUZXh0QXJlYTo6dXBkYXRlRnJvbUVsZW1lbnQoKQog
ICAgIFFUZXh0RWRpdCogdyA9IHN0YXRpY19jYXN0PFFUZXh0RWRpdCo+KG1fd2lkZ2V0KTsKIAog
ICAgIHctPnNldFJlYWRPbmx5KGUtPnJlYWRPbmx5KCkpOwotI2lmIEFQUExFX0NIQU5HRVMKICAg
ICB3LT5zZXREaXNhYmxlZChlLT5kaXNhYmxlZCgpKTsKLSNlbmRpZgogCiAgICAgZS0+dXBkYXRl
VmFsdWUoKTsKICAgICBpZiAoIWUtPnZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkpIHsKQEAgLTE0NjAs
MjYgKzEwOTgsNyBAQCBRU3RyaW5nIFJlbmRlclRleHRBcmVhOjp0ZXh0KCkKICAgICBRVGV4dEVk
aXQqIHcgPSBzdGF0aWNfY2FzdDxRVGV4dEVkaXQqPihtX3dpZGdldCk7CiAKICAgICBpZiAoZWxl
bWVudCgpLT53cmFwKCkgPT0gSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnRhX1BoeXNpY2FsKSB7
Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICB0eHQgPSB3LT50ZXh0V2l0aEhhcmRMaW5lQnJl
YWtzKCk7Ci0jZWxzZQotICAgICAgICAvLyB5ZWFoLCBRVGV4dEVkaXQgaGFzIG5vIGFjY2Vzc29y
IGZvciBnZXR0aW5nIHRoZSB2aXN1YWxseSB3cmFwcGVkIHRleHQKLSAgICAgICAgZm9yIChpbnQg
cD0wOyBwIDwgdy0+cGFyYWdyYXBocygpOyArK3ApIHsKLSAgICAgICAgICAgIGludCBwbCA9IHct
PnBhcmFncmFwaExlbmd0aChwKTsKLSAgICAgICAgICAgIGludCBsbCA9IDA7Ci0gICAgICAgICAg
ICBpbnQgbGluZGV4ID0gdy0+bGluZU9mQ2hhcihwLCAwKTsKLSAgICAgICAgICAgIFFTdHJpbmcg
cGFyYWdyYXBoVGV4dCA9IHctPnRleHQocCk7Ci0gICAgICAgICAgICBmb3IgKGludCBsID0gMDsg
bCA8IHBsOyArK2wpIHsKLSAgICAgICAgICAgICAgICBpZiAobGluZGV4ICE9IHctPmxpbmVPZkNo
YXIocCwgbCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoVGV4dC5pbnNlcnQobCts
bCsrLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJcbiIpKTsKLSAgICAgICAgICAgICAgICAgICAgbGlu
ZGV4ID0gdy0+bGluZU9mQ2hhcihwLCBsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB0eHQgKz0gcGFyYWdyYXBoVGV4dDsKLSAgICAgICAgICAgIGlmIChw
IDwgdy0+cGFyYWdyYXBocygpIC0gMSkKLSAgICAgICAgICAgICAgICB0eHQgKz0gUVN0cmluZzo6
ZnJvbUxhdGluMSgiXG4iKTsKLSAgICAgICAgfQotI2VuZGlmCiAgICAgfQogICAgIGVsc2UKICAg
ICAgICAgdHh0ID0gdy0+dGV4dCgpOwpAQCAtMTQ5Nyw0OSArMTExNiwyNSBAQCB2b2lkIFJlbmRl
clRleHRBcmVhOjpzbG90VGV4dENoYW5nZWQoKQogaW50IFJlbmRlclRleHRBcmVhOjpzZWxlY3Rp
b25TdGFydCgpCiB7CiAgICAgUVRleHRFZGl0ICp0ZXh0RWRpdCA9IHN0YXRpY19jYXN0PFFUZXh0
RWRpdCAqPihtX3dpZGdldCk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIHJldHVybiB0ZXh0RWRp
dC0+c2VsZWN0aW9uU3RhcnQoKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEkgaGF2ZSBubyB3YXkg
dG8gdGVzdCBRdCwgc28gSSdsbAotICAgIC8vIGxlYXZlIHRoaXMgYWxvbmUgZm9yIG5vdwotI2Vy
cm9yIFVuaW1wbGVtZW50ZWQgbWV0aG9kCi0jZW5kaWYKIH0KIAogaW50IFJlbmRlclRleHRBcmVh
OjpzZWxlY3Rpb25FbmQoKQogewogICAgIFFUZXh0RWRpdCAqdGV4dEVkaXQgPSBzdGF0aWNfY2Fz
dDxRVGV4dEVkaXQgKj4obV93aWRnZXQpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICByZXR1cm4g
dGV4dEVkaXQtPnNlbGVjdGlvbkVuZCgpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogSSBoYXZlIG5v
IHdheSB0byB0ZXN0IFF0LCBzbyBJJ2xsCi0gICAgLy8gbGVhdmUgdGhpcyBhbG9uZSBmb3Igbm93
Ci0jZXJyb3IgVW5pbXBsZW1lbnRlZCBtZXRob2QKLSNlbmRpZgogfQogCiB2b2lkIFJlbmRlclRl
eHRBcmVhOjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCiB7CiAgICAgUVRleHRFZGl0ICp0
ZXh0RWRpdCA9IHN0YXRpY19jYXN0PFFUZXh0RWRpdCAqPihtX3dpZGdldCk7Ci0jaWYgQVBQTEVf
Q0hBTkdFUwogICAgIHRleHRFZGl0LT5zZXRTZWxlY3Rpb25TdGFydChzdGFydCk7Ci0jZWxzZQot
ICAgIC8vIEZJWE1FOiBJIGhhdmUgbm8gd2F5IHRvIHRlc3QgUXQsIHNvIEknbGwKLSAgICAvLyBs
ZWF2ZSB0aGlzIGFsb25lIGZvciBub3cKLSNlcnJvciBVbmltcGxlbWVudGVkIG1ldGhvZAotI2Vu
ZGlmCiB9CiAKIHZvaWQgUmVuZGVyVGV4dEFyZWE6OnNldFNlbGVjdGlvbkVuZChpbnQgZW5kKQog
ewogICAgIFFUZXh0RWRpdCAqdGV4dEVkaXQgPSBzdGF0aWNfY2FzdDxRVGV4dEVkaXQgKj4obV93
aWRnZXQpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICB0ZXh0RWRpdC0+c2V0U2VsZWN0aW9uRW5k
KGVuZCk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBJIGhhdmUgbm8gd2F5IHRvIHRlc3QgUXQsIHNv
IEknbGwKLSAgICAvLyBsZWF2ZSB0aGlzIGFsb25lIGZvciBub3cKLSNlcnJvciBVbmltcGxlbWVu
dGVkIG1ldGhvZAotI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVyVGV4dEFyZWE6OnNlbGVjdCgpCkBA
IC0xNTUwLDEzICsxMTQ1LDcgQEAgdm9pZCBSZW5kZXJUZXh0QXJlYTo6c2VsZWN0KCkKIHZvaWQg
UmVuZGVyVGV4dEFyZWE6OnNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCkKIHsK
ICAgICBRVGV4dEVkaXQgKnRleHRFZGl0ID0gc3RhdGljX2Nhc3Q8UVRleHRFZGl0ICo+KG1fd2lk
Z2V0KTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgdGV4dEVkaXQtPnNldFNlbGVjdGlvblJhbmdl
KHN0YXJ0LCBlbmQtc3RhcnQpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogSSBoYXZlIG5vIHdheSB0
byB0ZXN0IFF0LCBzbyBJJ2xsCi0gICAgLy8gbGVhdmUgdGhpcyBhbG9uZSBmb3Igbm93Ci0jZXJy
b3IgVW5pbXBsZW1lbnRlZCBtZXRob2QKLSNlbmRpZgogfQogCiB2b2lkIFJlbmRlclRleHRBcmVh
OjpzbG90U2VsZWN0aW9uQ2hhbmdlZCgpCkBAIC0xNTcyLDcgKzExNjEsNiBAQCB2b2lkIFJlbmRl
clRleHRBcmVhOjpzbG90U2VsZWN0aW9uQ2hhbmdlCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci0jaWYgQVBQTEVfQ0hBTkdFUwogUmVuZGVyU2xpZGVyOjpSZW5kZXJTbGlkZXIoSFRNTElucHV0
RWxlbWVudEltcGwqIGVsZW1lbnQpCiA6UmVuZGVyRm9ybUVsZW1lbnQoZWxlbWVudCkKIHsKQEAg
LTE2NTMsNiArMTI0MSw1IEBAIHZvaWQgUmVuZGVyU2xpZGVyOjpzbG90Q2xpY2tlZCgpCiAgICAg
UmVuZGVyRm9ybUVsZW1lbnQ6OnNsb3RDbGlja2VkKCk7CiB9CiAKLSNlbmRpZgogCiAjaW5jbHVk
ZSAicmVuZGVyX2Zvcm0ubW9jIgpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9m
b3JtLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTcKZGlmZiAtcCAtdSAtcjEuNTcgcmVuZGVy
aW5nL3JlbmRlcl9mb3JtLmgKLS0tIHJlbmRlcmluZy9yZW5kZXJfZm9ybS5oCTIxIE9jdCAyMDA1
IDIxOjI3OjQ3IC0wMDAwCTEuNTcKKysrIHJlbmRlcmluZy9yZW5kZXJfZm9ybS5oCTExIE5vdiAy
MDA1IDE5OjM0OjA3IC0wMDAwCkBAIC02OCw3ICs2OCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBpc0Zvcm1FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0jaWYgQVBQ
TEVfQ0hBTkdFUwogICAgIC8vIEFxdWEgZm9ybSBjb250cm9scyBuZXZlciBoYXZlIGJvcmRlci9w
YWRkaW5nLgogICAgIGludCBib3JkZXJUb3AoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgaW50
IGJvcmRlckJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KQEAgLTg4LDcgKzg3LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgYWRkSW50cmluc2ljTWFyZ2luc0lmQWxsb3dlZChSZW5kZXJTdHlsZSog
X3N0eWxlKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUludHJpbnNpY01hcmdpbnMoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIGludCBpbnRyaW5zaWNNYXJnaW4oKSBjb25zdCB7IHJl
dHVybiAyOyB9Ci0jZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHls
ZSAqKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKQEAgLTEwMywxMCAr
MTAxLDggQEAgcHVibGljIHNsb3RzOgogICAgIHZpcnR1YWwgdm9pZCBzbG90Q2xpY2tlZCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBzbG90U2VsZWN0aW9uQ2hhbmdlZCgpOwogICAgIAotI2lmIEFQUExF
X0NIQU5HRVMKICAgICAvLyBIYWNrIHRvIG1ha2UgS1dRU2xvdCBjb2RlIHdvcmsuCiAgICAgdmly
dHVhbCB2b2lkIHNsb3RUZXh0Q2hhbmdlZChjb25zdCBRU3RyaW5nICZzdHJpbmcpOwotI2VuZGlm
CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CkBAIC0xMzQsMTAgKzEzMCw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMaW5l
RWRpdChET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsICplbGVtZW50KTsKIAogICAgIHZpcnR1YWwg
dm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaW50IGNhbGNS
ZXBsYWNlZEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGludHJpbnNpY0hlaWdodCgpOyB9CiAgICAg
dmlydHVhbCBib29sIGNhbkhhdmVJbnRyaW5zaWNNYXJnaW5zKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotI2VuZGlmCiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25z
dCB7IHJldHVybiAiUmVuZGVyTGluZUVkaXQiOyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZy
b21FbGVtZW50KCk7CkBAIC0xNTksMTEgKzE1Myw5IEBAIHB1YmxpYyBzbG90czoKICAgICB2b2lk
IHNsb3RSZXR1cm5QcmVzc2VkKCk7CiAgICAgdm9pZCBzbG90VGV4dENoYW5nZWQoY29uc3QgUVN0
cmluZyAmc3RyaW5nKTsKICAgICB2b2lkIHNsb3RTZWxlY3Rpb25DaGFuZ2VkKCk7Ci0jaWYgQVBQ
TEVfQ0hBTkdFUwogICAgIHZvaWQgc2xvdFBlcmZvcm1TZWFyY2goKTsKIHB1YmxpYzoKICAgICB2
b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwotI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlRm9jdXNPdXQoKTsKQEAgLTI3OCwxMSArMjcwLDkgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
clNlbGVjdCI7IH0KIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICBzaG9ydCBiYXNlbGluZVBvc2l0
aW9uKCBib29sIGYsIGJvb2wgYiApIGNvbnN0OwogICAgIGludCBjYWxjUmVwbGFjZWRIZWlnaHQo
KSBjb25zdCB7IGlmICghbV91c2VMaXN0Qm94KSByZXR1cm4gaW50cmluc2ljSGVpZ2h0KCk7IHJl
dHVybiBSZW5kZXJGb3JtRWxlbWVudDo6Y2FsY1JlcGxhY2VkSGVpZ2h0KCk7IH0KICAgICB2aXJ0
dWFsIGJvb2wgY2FuSGF2ZUludHJpbnNpY01hcmdpbnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0jZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7CkBAIC0yOTIsOSArMjgyLDcgQEAgcHVibGljOgogICAgIGJvb2wg
c2VsZWN0aW9uQ2hhbmdlZCgpIHsgcmV0dXJuIG1fc2VsZWN0aW9uQ2hhbmdlZDsgfQogICAgIHZv
aWQgc2V0U2VsZWN0aW9uQ2hhbmdlZChib29sIF9zZWxlY3Rpb25DaGFuZ2VkKSB7IG1fc2VsZWN0
aW9uQ2hhbmdlZCA9IF9zZWxlY3Rpb25DaGFuZ2VkOyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUZyb21FbGVtZW50KCk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIHZpcnR1YWwgdm9pZCBzZXRT
dHlsZShSZW5kZXJTdHlsZSAqKTsKLSNlbmRpZgogCiAgICAgdm9pZCB1cGRhdGVTZWxlY3Rpb24o
KTsKIApAQCAtMzA0LDkgKzI5Miw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBLTGlzdEJv
eCAqY3JlYXRlTGlzdEJveCgpOwogICAgIENvbWJvQm94V2lkZ2V0ICpjcmVhdGVDb21ib0JveCgp
OwotI2lmIEFQUExFX0NIQU5HRVMKICAgICB2b2lkIHNldFdpZGdldFdyaXRpbmdEaXJlY3Rpb24o
KTsKLSNlbmRpZgogCiAgICAgdW5zaWduZWQgIG1fc2l6ZTsKICAgICBib29sIG1fbXVsdGlwbGU7
CkBAIC0zNjMsOSArMzQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2VsZWN0KCk7CiAgICAgdm9p
ZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQsIGludCk7CiAgICAgCi0jaWYgQVBQTEVfQ0hBTkdFUwog
ICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlSW50cmluc2ljTWFyZ2lucygpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSNlbmRpZgogCiBwcm90ZWN0ZWQgc2xvdHM6CiAgICAgdm9pZCBzbG90VGV4dENo
YW5nZWQoKTsKQEAgLTM4MSw3ICszNjUsNiBAQCBwcm90ZWN0ZWQ6CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotI2lmIEFQUExFX0NIQU5HRVMKIGNsYXNzIFJlbmRlclNsaWRlciA6IHB1YmxpYyBS
ZW5kZXJGb3JtRWxlbWVudAogewogcHVibGljOgpAQCAtMzk5LDcgKzM4Miw2IEBAIHByb3RlY3Rl
ZCBzbG90czoKICAgICB2b2lkIHNsb3RTbGlkZXJWYWx1ZUNoYW5nZWQoKTsKICAgICB2b2lkIHNs
b3RDbGlja2VkKCk7CiB9OwotI2VuZGlmCiAKIH07IC8vbmFtZXNwYWNlCiAKSW5kZXg6IHJlbmRl
cmluZy9yZW5kZXJfZnJhbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuODMKZGlmZiAtcCAtdSAtcjEuODMgcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCi0t
LSByZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJMSBOb3YgMjAwNSAxODozNjoyOSAtMDAwMAkx
LjgzCisrKyByZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MDcg
LTAwMDAKQEAgLTU1OSw3MCArNTU5LDQzIEBAIGJvb2wgUmVuZGVyRnJhbWVTZXQ6OnVzZXJSZXNp
emUoIE1vdXNlRXYKICAgICB9CiAgICAgCiAgICAgZWxzZSBpZiAobV9yZXNpemluZyB8fCBldnQt
PnR5cGUoKSA9PSBtb3VzZXVwRXZlbnQpIHsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIEtI
VE1MVmlldyAqdiA9IGNhbnZhcygpLT52aWV3KCk7CiAgICAgICAgIFFQYWludGVyIHBhaW50Owog
ICAgICAgICAKICAgICAgICAgdi0+ZGlzYWJsZUZsdXNoRHJhd2luZygpOwogICAgICAgICB2LT5s
b2NrRHJhd2luZ0ZvY3VzKCk7Ci0jZWxzZQotICAgICAgICBRUGFpbnRlciBwYWludCggY2FudmFz
KCktPnZpZXcoKSApOwotI2VuZGlmCiAgICAgICAgIHBhaW50LnNldFBlbiggUXQ6OmdyYXkgKTsK
ICAgICAgICAgcGFpbnQuc2V0QnJ1c2goIFF0OjpncmF5ICk7CiAgICAgICAgIAotI2lmICFBUFBM
RV9DSEFOR0VTCi0gICAgICAgIHBhaW50LnNldFJhc3Rlck9wKCBRdDo6WG9yUk9QICk7Ci0jZW5k
aWYKICAgICAgICAgUVJlY3Qgcih4UG9zKCksIHlQb3MoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwog
ICAgICAgICBjb25zdCBpbnQgckJvcmQgPSAzOwogICAgICAgICBpbnQgc3cgPSBlbGVtZW50KCkt
PmJvcmRlcigpOwogICAgICAgICBpbnQgcCA9IG1fcmVzaXppbmcgPyAobV92U3BsaXQgPiAtMSA/
IF94IDogX3kpIDogLTE7CiAgICAgICAgIGlmIChtX3ZTcGxpdCA+IC0xKSB7CiAgICAgICAgICAg
ICBpZiAoIG1fb2xkcG9zID49IDAgKQotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgICAg
ICB2LT51cGRhdGVDb250ZW50cyggbV9vbGRwb3MgKyBzdy8yIC0gckJvcmQgLCByLnkoKSwgMipy
Qm9yZCwgci5oZWlnaHQoKSwgdHJ1ZSApOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBwYWludC5k
cmF3UmVjdCggbV9vbGRwb3MgKyBzdy8yIC0gckJvcmQgLCByLnkoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMipyQm9yZCwgci5oZWlnaHQoKSApOwotI2VuZGlmCiAgICAgICAg
ICAgICBpZiAoIHAgPj0gMCApewotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgICAgICBw
YWludC5zZXRQZW4oIFF0OjpOb1BlbiApOwogICAgICAgICAgICAgICAgIHBhaW50LnNldEJydXNo
KCBRdDo6Z3JheSApOwogICAgICAgICAgICAgICAgIHYtPnNldERyYXdpbmdBbHBoYSgoZmxvYXQp
MC4yNSk7CiAgICAgICAgICAgICAgICAgcGFpbnQuZHJhd1JlY3QoIHAgICsgc3cvMiAtIHJCb3Jk
LCByLnkoKSwgMipyQm9yZCwgci5oZWlnaHQoKSApOwogICAgICAgICAgICAgICAgIHYtPnNldERy
YXdpbmdBbHBoYSgoZmxvYXQpMS4wKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgcGFpbnQuZHJh
d1JlY3QoIHAgICsgc3cvMiAtIHJCb3JkLCByLnkoKSwgMipyQm9yZCwgci5oZWlnaHQoKSApOwot
I2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
IG1fb2xkcG9zID49IDAgKQotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgICAgICB2LT51
cGRhdGVDb250ZW50cyggci54KCksIG1fb2xkcG9zICsgc3cvMiAtIHJCb3JkLCByLndpZHRoKCks
IDIqckJvcmQsIHRydWUgKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgcGFpbnQuZHJhd1JlY3Qo
IHIueCgpLCBtX29sZHBvcyArIHN3LzIgLSByQm9yZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgci53aWR0aCgpLCAyKnJCb3JkICk7Ci0jZW5kaWYKICAgICAgICAgICAgIGlmICgg
cCA+PSAwICl7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAgICAgICAgIHBhaW50LnNldFBl
biggUXQ6Ok5vUGVuICk7CiAgICAgICAgICAgICAgICAgcGFpbnQuc2V0QnJ1c2goIFF0OjpncmF5
ICk7CiAgICAgICAgICAgICAgICAgdi0+c2V0RHJhd2luZ0FscGhhKChmbG9hdCkwLjI1KTsKICAg
ICAgICAgICAgICAgICBwYWludC5kcmF3UmVjdCggci54KCksIHAgKyBzdy8yIC0gckJvcmQsIHIu
d2lkdGgoKSwgMipyQm9yZCApOwogICAgICAgICAgICAgICAgIHYtPnNldERyYXdpbmdBbHBoYSgo
ZmxvYXQpMS4wKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgcGFpbnQuZHJhd1JlY3QoIHIueCgp
LCBwICsgc3cvMiAtIHJCb3JkLCByLndpZHRoKCksIDIqckJvcmQgKTsKLSNlbmRpZgogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG1fb2xkcG9zID0gcDsKIAotI2lmIEFQUExFX0NI
QU5HRVMKICAgICAgICAgdi0+dW5sb2NrRHJhd2luZ0ZvY3VzKCk7CiAgICAgICAgIHYtPmVuYWJs
ZUZsdXNoRHJhd2luZygpOwotI2VuZGlmCiAgICAgfQogICAgIAogICAgIHJldHVybiByZXM7CkBA
IC03MzYsMTUgKzcwOSwxMCBAQCB2b2lkIFJlbmRlckZyYW1lOjpzbG90Vmlld0NsZWFyZWQoKQog
ICAgICAgICBRU2Nyb2xsVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PFFTY3JvbGxWaWV3ICo+KG1f
d2lkZ2V0KTsKICAgICAgICAgaWYoIWVsZW1lbnQoKS0+bV9mcmFtZUJvcmRlciB8fCAhKHN0YXRp
Y19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKS0+cGFyZW50Tm9kZSgp
KSktPmZyYW1lQm9yZGVyKCkpCiAgICAgICAgICAgICB2aWV3LT5zZXRGcmFtZVN0eWxlKFFGcmFt
ZTo6Tm9GcmFtZSk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAvLyBRdCBjcmVhdGVzIFFT
Y3JvbGxWaWV3IHcvIGEgZGVmYXVsdCBzdHlsZSBvZiBRRnJhbWU6OlN0eWxlZFBhbmVsIHwgUUZy
YW1lOjpTdW5rZW4uCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHZpZXctPnNldEZyYW1lU3R5
bGUoIFFGcmFtZTo6U3R5bGVkUGFuZWwgfCBRRnJhbWU6OlN1bmtlbiApOwogCi0jZWxzZQotICAg
ICAgICB2aWV3LT5zZXRIU2Nyb2xsQmFyTW9kZShlbGVtZW50KCktPnNjcm9sbGluZyApOwotICAg
ICAgICB2aWV3LT5zZXRWU2Nyb2xsQmFyTW9kZShlbGVtZW50KCktPnNjcm9sbGluZyApOwotI2Vu
ZGlmCiAKICAgICAgICAgaWYodmlldy0+aW5oZXJpdHMoIktIVE1MVmlldyIpKSB7CiAjaWZkZWYg
REVCVUdfTEFZT1VUCkBAIC05MTIsMTAgKzg4MCw2IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6
dXBkYXRlV2lkZ2V0KCkKICAgICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgICAgICAgICAK
LSNpZiAhQVBQTEVfQ0hBTkdFUyAgICAgIAotICAgICAgcGFyYW1zLmFwcGVuZCggUVN0cmluZzo6
ZnJvbUxhdGluMSgiX19LSFRNTF9fQ0xBU1NJRD1cIiUxXCIiKS5hcmcoIG8tPmNsYXNzSWQgKSAp
OwotICAgICAgcGFyYW1zLmFwcGVuZCggUVN0cmluZzo6ZnJvbUxhdGluMSgiX19LSFRNTF9fQ09E
RUJBU0U9XCIlMVwiIikuYXJnKCBvLT5nZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyKS5xc3RyaW5n
KCkgKSApOwotI2VuZGlmCiAKICAgICAgIC8vIEZpbmQgb3V0IGlmIHdlIHN1cHBvcnQgZmFsbGJh
Y2sgY29udGVudC4KICAgICAgIG1faGFzRmFsbGJhY2tDb250ZW50ID0gZmFsc2U7CkBAIC05NzYs
MTAgKzk0MCw2IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6bGF5b3V0KCApCiAgICAgS0hUTUxB
c3NlcnQoIG5lZWRzTGF5b3V0KCkgKTsKICAgICBLSFRNTEFzc2VydCggbWluTWF4S25vd24oKSAp
OwogCi0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBpbnQgbV9vbGR3aWR0aCA9IG1fd2lkdGg7Ci0g
ICAgaW50IG1fb2xkaGVpZ2h0ID0gbV9oZWlnaHQ7Ci0jZW5kaWYKIAogICAgIGNhbGNXaWR0aCgp
OwogICAgIGNhbGNIZWlnaHQoKTsKQEAgLTEwMTAsMTAgKzk3MCw2IEBAIHZvaWQgUmVuZGVyUGFy
dE9iamVjdDo6c2xvdFZpZXdDbGVhcmVkKCkKICAgICAgIH0KICAgICAgIHZpZXctPnNldEZyYW1l
U3R5bGUoZnJhbWVTdHlsZSk7CiAKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgICAgdmlldy0+c2V0
VlNjcm9sbEJhck1vZGUoc2Nyb2xsKTsKLSAgICAgIHZpZXctPnNldEhTY3JvbGxCYXJNb2RlKHNj
cm9sbCk7Ci0jZW5kaWYKIAogICAgICAgaWYodmlldy0+aW5oZXJpdHMoIktIVE1MVmlldyIpKSB7
CiAjaWZkZWYgREVCVUdfTEFZT1VUCkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2ltYWdlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44OApkaWZmIC1wIC11IC1yMS44
OCByZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5j
cHAJMjcgT2N0IDIwMDUgMjI6MzU6NTcgLTAwMDAJMS44OAorKysgcmVuZGVyaW5nL3JlbmRlcl9p
bWFnZS5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MDcgLTAwMDAKQEAgLTE2OCwxOCArMTY4LDEyIEBA
IHZvaWQgUmVuZGVySW1hZ2U6OnNldFBpeG1hcCggY29uc3QgUVBpeG0KICAgICAgICAgfQogICAg
IH0KIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICAvLyBTdG9wIHRoZSBwcmV2aW91cyBpbWFnZSwg
aWYgaXQgbWF5IGJlIGFuaW1hdGluZy4KICAgICBwaXguc3RvcEFuaW1hdGlvbnMoKTsKLSNlbmRp
ZgogICAgIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICBwaXguZGVjcmVhc2VVc2VDb3VudCgpOwot
I2VuZGlmCiAgICAgcGl4ID0gcDsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgcC5pbmNyZWFzZVVz
ZUNvdW50KCk7Ci0jZW5kaWYKIAogICAgIGlmIChuZWVkbGF5b3V0KSB7CiAgICAgICAgIGlmICgh
c2VsZk5lZWRzTGF5b3V0KCkpCkBAIC0xODgsNDIgKzE4MiwxOSBAQCB2b2lkIFJlbmRlckltYWdl
OjpzZXRQaXhtYXAoIGNvbnN0IFFQaXhtCiAgICAgICAgICAgICBzZXRNaW5NYXhLbm93bihmYWxz
ZSk7CiAgICAgfQogICAgIGVsc2UgewotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgLy8gRklY
TUU6IFdlIGFsd2F5cyBqdXN0IGRvIGEgY29tcGxldGUgcmVwYWludCwgc2luY2Ugd2UgYWx3YXlz
IHBhc3MgaW4gdGhlIGZ1bGwgcGl4bWFwCiAgICAgICAgIC8vIHJlY3QgYXQgdGhlIG1vbWVudCBh
bnl3YXkuCiAgICAgICAgIHJlc2l6ZUNhY2hlID0gUVBpeG1hcCgpOwogICAgICAgICByZXBhaW50
UmVjdGFuZ2xlKFFSZWN0KGJvcmRlckxlZnQoKStwYWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKStw
YWRkaW5nVG9wKCksIGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpKTsKLSNlbHNlCi0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBoYW5kbGUgc2NhbGluZyBwcm9wZXJs
eSwgc2luY2UgaXQgZG9lc24ndCBzY2FsZSB8cnwuCi0gICAgICAgIGJvb2wgY29tcGxldGVSZXBh
aW50ID0gIXJlc2l6ZUNhY2hlLmlzTnVsbCgpOwotICAgICAgICBpbnQgY0hlaWdodCA9IGNvbnRl
bnRIZWlnaHQoKTsKLSAgICAgICAgaW50IHNjYWxlZEhlaWdodCA9IGludHJpbnNpY0hlaWdodCgp
ID8gKChvLT52YWxpZF9yZWN0KCkuaGVpZ2h0KCkqY0hlaWdodCkvaW50cmluc2ljSGVpZ2h0KCkp
IDogMDsKLQotICAgICAgICAvLyBkb24ndCBib2cgZG93biBYIHNlcnZlciBkb2luZyB4Zm9ybXMK
LSAgICAgICAgaWYoY29tcGxldGVSZXBhaW50ICYmIGNIZWlnaHQgPj0gNSAmJiAgby0+dmFsaWRf
cmVjdCgpLmhlaWdodCgpIDwgaW50cmluc2ljSGVpZ2h0KCkgJiYKLSAgICAgICAgICAgKHNjYWxl
ZEhlaWdodCAvIChjSGVpZ2h0LzUpID09IHJlc2l6ZUNhY2hlLmhlaWdodCgpIC8gKGNIZWlnaHQv
NSkpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHJlc2l6ZUNhY2hlID0gUVBpeG1h
cCgpOyAvLyBmb3IgcmVzaXplZCBhbmltYXRpb25zCi0gICAgICAgIGlmKGNvbXBsZXRlUmVwYWlu
dCkKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUoUVJlY3QoYm9yZGVyTGVmdCgpK3BhZGRp
bmdMZWZ0KCksIGJvcmRlclRvcCgpK3BhZGRpbmdUb3AoKSwgY29udGVudFdpZHRoKCksIGNvbnRl
bnRIZWlnaHQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlcGFp
bnRSZWN0YW5nbGUoUVJlY3Qoci54KCkgKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBy
LnkoKSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByLndpZHRoKCksIHIuaGVpZ2h0KCkpKTsKLSAgICAgICAgfQotI2VuZGlmCiAgICAg
fQogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogdm9pZCBSZW5kZXJJbWFnZTo6cmVzZXRBbmltYXRp
b24oKQogewogICAgIHBpeC5yZXNldEFuaW1hdGlvbigpOwogICAgIGlmICghbmVlZHNMYXlvdXQo
KSkKICAgICAgICAgcmVwYWludCgpOwogfQotI2VuZGlmCiAKIHZvaWQgUmVuZGVySW1hZ2U6OnBh
aW50KFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkKIHsKQEAgLTI0Niw3ICsyMTcsNiBA
QCB2b2lkIFJlbmRlckltYWdlOjpwYWludChQYWludEluZm8mIGksIGluCiAgICAgaWYgKCFzaG91
bGRQYWludFdpdGhpblJvb3QoaSkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0jaWYgQVBQ
TEVfQ0hBTkdFUwogICAgIGJvb2wgaXNQcmludGluZyA9IChpLnAtPmRldmljZSgpLT5kZXZUeXBl
KCkgPT0gUUludGVybmFsOjpQcmludGVyKTsKICAgICBib29sIGRyYXdTZWxlY3Rpb25UaW50ID0g
KHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgJiYgIWlzUHJpbnRpbmc7CiAgICAg
aWYgKGkucGhhc2UgPT0gUGFpbnRBY3Rpb25TZWxlY3Rpb24pIHsKQEAgLTI1NSw3ICsyMjUsNiBA
QCB2b2lkIFJlbmRlckltYWdlOjpwYWludChQYWludEluZm8mIGksIGluCiAgICAgICAgIH0KICAg
ICAgICAgZHJhd1NlbGVjdGlvblRpbnQgPSBmYWxzZTsKICAgICB9Ci0jZW5kaWYKICAgICAgICAg
CiAgICAgaW50IGNXaWR0aCA9IGNvbnRlbnRXaWR0aCgpOwogICAgIGludCBjSGVpZ2h0ID0gY29u
dGVudEhlaWdodCgpOwpAQCAtMjc1LDcgKzI0NCw2IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50
KFBhaW50SW5mbyYgaSwgaW4KIAogICAgICAgICBpZihjV2lkdGggPiAyICYmIGNIZWlnaHQgPiAy
KQogICAgICAgICB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAgICAgaWYgKCAhYmVycm9y
UGljICkgewogICAgICAgICAgICAgICAgIHAtPnNldFBlbiAoUXQ6OmxpZ2h0R3JheSk7CiAgICAg
ICAgICAgICAgICAgcC0+c2V0QnJ1c2ggKFF0OjpOb0JydXNoKTsKQEAgLTMyMCwzOSArMjg4LDEz
IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgaSwgaW4KICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHVzYWJsZVdpZHRoID49IHRleHRXaWR0aCAmJiBjSGVpZ2h0ID49IGZt
LmhlaWdodCgpKQogICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChheCwgYXkrYXNjZW50
LCB0YWJXaWR0aCgpLCAwLCAwIC8qIGlnbm9yZWQgKi8sIDAgLyogaWdub3JlZCAqLywgUXQ6Oldv
cmRCcmVhayAgLyogbm90IHN1cHBvcnRlZCAqLywgdGV4dCApOwogICAgICAgICAgICAgfQotI2Vs
c2UgLyogbm90IEFQUExFX0NIQU5HRVMgKi8KLSAgICAgICAgICAgIGlmICggIWJlcnJvclBpYyAp
IHsKLSAgICAgICAgICAgICAgICAvL3FEZWJ1ZygicURyYXdTaGFkZVBhbmVsICVkLyVkLyVkLyVk
IiwgX3R4ICsgbGVmdEJvcmRlciwgX3R5ICsgdG9wQm9yZGVyLCBjV2lkdGgsIGNIZWlnaHQpOwot
ICAgICAgICAgICAgICAgIHFEcmF3U2hhZGVQYW5lbCggcCwgX3R4ICsgbGVmdEJvcmRlciArIGxl
ZnRQYWQsIF90eSArIHRvcEJvcmRlciArIHRvcFBhZCwgY1dpZHRoLCBjSGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgS0FwcGxpY2F0aW9uOjpwYWxldHRlKCkuaW5hY3Rp
dmUoKSwgdHJ1ZSwgMSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYoYmVycm9yUGlj
ICYmICFwaXguaXNOdWxsKCkgJiYgKGNXaWR0aCA+PSBwaXgud2lkdGgoKSs0KSAmJiAoY0hlaWdo
dCA+PSBwaXguaGVpZ2h0KCkrNCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFFS
ZWN0IHIocGl4LnJlY3QoKSk7Ci0gICAgICAgICAgICAgICAgciA9IHIuaW50ZXJzZWN0KFFSZWN0
KDAsIDAsIGNXaWR0aC00LCBjSGVpZ2h0LTQpKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3UGl4
bWFwKCBRUG9pbnQoIF90eCArIGxlZnRCb3JkZXIgKyBsZWZ0UGFkKzIsIF90eSArIHRvcEJvcmRl
ciArIHRvcFBhZCsyKSwgcGl4LCByICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZigh
YWx0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIFFTdHJpbmcgdGV4dCA9IGFsdC5xc3Ry
aW5nKCk7Ci0gICAgICAgICAgICAgICAgdGV4dC5yZXBsYWNlKCdcXCcsIGJhY2tzbGFzaEFzQ3Vy
cmVuY3lTeW1ib2woKSk7Ci0gICAgICAgICAgICAgICAgcC0+c2V0Rm9udChzdHlsZSgpLT5mb250
KCkpOwotICAgICAgICAgICAgICAgIHAtPnNldFBlbiggc3R5bGUoKS0+Y29sb3IoKSApOwotICAg
ICAgICAgICAgICAgIGludCBheCA9IF90eCArIGxlZnRCb3JkZXIgKyBsZWZ0UGFkICsgMjsKLSAg
ICAgICAgICAgICAgICBpbnQgYXkgPSBfdHkgKyB0b3BCb3JkZXIgKyB0b3BQYWQgKyAyOwotICAg
ICAgICAgICAgICAgIGNvbnN0IFFGb250TWV0cmljcyAmZm0gPSBzdHlsZSgpLT5mb250TWV0cmlj
cygpOwotICAgICAgICAgICAgICAgIGlmIChjV2lkdGg+NSAmJiBjSGVpZ2h0Pj1mbS5oZWlnaHQo
KSkKLSAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoYXgsIGF5KzEsIHRhYldpZHRoKCks
IDAsIGNXaWR0aCAtIDQsIGNIZWlnaHQgLSA0LCBRdDo6V29yZEJyZWFrLCB0ZXh0ICk7Ci0gICAg
ICAgICAgICB9Ci0jZW5kaWYgLyogQVBQTEVfQ0hBTkdFUyBub3QgZGVmaW5lZCAqLwogICAgICAg
ICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGltYWdlICYmICFpbWFnZS0+aXNUcmFuc3BhcmVudCgp
KSB7CiAgICAgICAgIGlmICggKGNXaWR0aCAhPSBpbnRyaW5zaWNXaWR0aCgpIHx8ICBjSGVpZ2h0
ICE9IGludHJpbnNpY0hlaWdodCgpKSAmJgogICAgICAgICAgICAgIHBpeC53aWR0aCgpID4gMCAm
JiBwaXguaGVpZ2h0KCkgPiAwICYmIGltYWdlLT52YWxpZF9yZWN0KCkuaXNWYWxpZCgpKQogICAg
ICAgICB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAgICAgUVNpemUgdGludFNpemU7Ci0j
ZW5kaWYKICAgICAgICAgICAgIGlmIChyZXNpemVDYWNoZS5pc051bGwoKSAmJiBjV2lkdGggJiYg
Y0hlaWdodCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBRUmVjdCBzY2FsZWRyZWN0
KGltYWdlLT52YWxpZF9yZWN0KCkpOwpAQCAtMzg0LDIyICszMjYsMTYgQEAgdm9pZCBSZW5kZXJJ
bWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogCiAgICAgICAgICAgICAgICAgcC0+ZHJhd1Bp
eG1hcCggUVBvaW50KCBfdHggKyBsZWZ0Qm9yZGVyICsgbGVmdFBhZCwgX3R5ICsgdG9wQm9yZGVy
ICsgdG9wUGFkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVDYWNoZSwg
c2NhbGVkcmVjdCApOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgICAgICB0aW50U2l6
ZSA9IHM7Ci0jZW5kaWYKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcC0+
ZHJhd1BpeG1hcCggUVBvaW50KCBfdHggKyBsZWZ0Qm9yZGVyICsgbGVmdFBhZCwgX3R5ICsgdG9w
Qm9yZGVyICsgdG9wUGFkKSwgcmVzaXplQ2FjaGUgKTsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAg
ICAgICAgICAgICAgdGludFNpemUgPSByZXNpemVDYWNoZS5yZWN0KCkuc2l6ZSgpOwotI2VuZGlm
CiAgICAgICAgICAgICB9Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAgICAgaWYgKGRyYXdT
ZWxlY3Rpb25UaW50KSB7CiAgICAgICAgICAgICAgICAgUUJydXNoIGJydXNoKHNlbGVjdGlvbkNv
bG9yKHApKTsKICAgICAgICAgICAgICAgICBRUmVjdCBzZWxSZWN0KHNlbGVjdGlvblJlY3QoKSk7
CiAgICAgICAgICAgICAgICAgcC0+ZmlsbFJlY3Qoc2VsUmVjdC54KCksIHNlbFJlY3QueSgpLCBz
ZWxSZWN0LndpZHRoKCksIHNlbFJlY3QuaGVpZ2h0KCksIGJydXNoKTsKICAgICAgICAgICAgIH0K
LSNlbmRpZgogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtNDI5LDEzICsz
NjUsMTEgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBwLT5kcmF3UGl4bWFwKG9mZnMsIHBpeCwg
cmVjdCk7CiAgICAgICAgICAgICAgfQotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgICBp
ZiAoZHJhd1NlbGVjdGlvblRpbnQpIHsKICAgICAgICAgICAgICAgICAgUUJydXNoIGJydXNoKHNl
bGVjdGlvbkNvbG9yKHApKTsKICAgICAgICAgICAgICAgICAgUVJlY3Qgc2VsUmVjdChzZWxlY3Rp
b25SZWN0KCkpOwogICAgICAgICAgICAgICAgICBwLT5maWxsUmVjdChzZWxSZWN0LngoKSwgc2Vs
UmVjdC55KCksIHNlbFJlY3Qud2lkdGgoKSwgc2VsUmVjdC5oZWlnaHQoKSwgYnJ1c2gpOwogICAg
ICAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDY5LDE0ICs0MDMs
NiBAQCB2b2lkIFJlbmRlckltYWdlOjpsYXlvdXQoKQogLy8gV2UgZG9uJ3Qgd2FudCB0byBpbXBv
c2UgYSBjb25zdHJhaW50IG9uIGltYWdlIHNpemUgaGVyZS4gQnV0IHRoZXJlIGFsc28KIC8vIGlz
IGEgYnVnIHNvbWV3aGVyZSB0aGF0IGNhdXNlcyB0aGUgc2NhbGVkIGhlaWdodCB0byBiZSB1c2Vk
IHdpdGggdGhlCiAvLyBvcmlnaW5hbCB3aWR0aCwgY2F1c2luZyB0aGUgaW1hZ2UgdG8gYmUgY29t
cHJlc3NlZCB2ZXJ0aWNhbGx5LgotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgLy8gbGltaXQgdG90
YWwgc2l6ZSB0byBub3QgcnVuIG91dCBvZiBtZW1vcnkgd2hlbiBkb2luZyB0aGUgeGZvcm0gY2Fs
bC4KLSAgICBpZiAoIG1fd2lkdGggKiBtX2hlaWdodCA+IDIwNDgqMjA0OCApIHsKLQlmbG9hdCBz
Y2FsZSA9IHNxcnQoIG1fd2lkdGgqbV9oZWlnaHQgLyAoIDIwNDguKjIwNDguICkgKTsKLQltX3dp
ZHRoID0gKGludCkgKG1fd2lkdGgvc2NhbGUpOwotCW1faGVpZ2h0ID0gKGludCkgKG1faGVpZ2h0
L3NjYWxlKTsKLSAgICB9Ci0jZW5kaWYKIAogICAgIGlmICggbV93aWR0aCAhPSBvbGR3aWR0aCB8
fCBtX2hlaWdodCAhPSBvbGRoZWlnaHQgKQogICAgICAgICByZXNpemVDYWNoZSA9IFFQaXhtYXAo
KTsKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMjgKZGlmZiAtcCAtdSAtcjEuMjggcmVuZGVyaW5nL3JlbmRlcl9pbWFn
ZS5oCi0tLSByZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgJOSBKdWwgMjAwNSAyMDoxOToxNyAtMDAw
MAkxLjI4CisrKyByZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgJMTEgTm92IDIwMDUgMTk6MzQ6MDcg
LTAwMDAKQEAgLTgxLDkgKzgxLDcgQEAgcHVibGljOgogICAgIAogICAgIERPTTo6SFRNTE1hcEVs
ZW1lbnRJbXBsKiBpbWFnZU1hcCgpOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIHZvaWQgcmVz
ZXRBbmltYXRpb24oKTsKLSNlbmRpZgogCiBwcml2YXRlOgogICAgIGJvb2wgaXNXaWR0aFNwZWNp
ZmllZCgpIGNvbnN0OwpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9sYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9sYXll
ci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIzCmRpZmYgLXAgLXUgLXIxLjEyMyByZW5k
ZXJpbmcvcmVuZGVyX2xheWVyLmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl9sYXllci5jcHAJOSBO
b3YgMjAwNSAyMzowNTowOSAtMDAwMAkxLjEyMworKysgcmVuZGVyaW5nL3JlbmRlcl9sYXllci5j
cHAJMTEgTm92IDIwMDUgMTk6MzQ6MDggLTAwMDAKQEAgLTU4LDkgKzU4LDcgQEAKICNpbmNsdWRl
IDxxc2Nyb2xsYmFyLmg+CiAjaW5jbHVkZSA8cXB0cnZlY3Rvci5oPgogCi0jaWYgQVBQTEVfQ0hB
TkdFUwogI2luY2x1ZGUgIktXUUtIVE1MUGFydC5oIiAvLyBGb3IgRGFzaGJvYXJkLgotI2VuZGlm
CiAKIC8vIFRoZXNlIG1hdGNoIHRoZSBudW1iZXJzIHdlIHVzZSBvdmVyIGluIFdlYktpdCAoV2Vi
RnJhbWVWaWV3Lm0pLgogI2RlZmluZSBMSU5FX1NURVAgICA0MApAQCAtNzQsNyArNzIsNyBAQCB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCi0jaWZkZWYg
QVBQTEVfQ0hBTkdFUworI2lmZGVmIDEKIFFTY3JvbGxCYXIqIFJlbmRlckxheWVyOjpnU2Nyb2xs
QmFyID0gMDsKICNlbmRpZgogCkBAIC01MzMsMTEgKzUzMSw5IEBAIFJlbmRlckxheWVyOjpzY3Jv
bGxUb09mZnNldChpbnQgeCwgaW50IHkKICAgICAKICAgICBSZW5kZXJDYW52YXMgKmNhbnZhcyA9
IHJlbmRlcmVyKCktPmNhbnZhcygpOwogICAgIGlmIChjYW52YXMpIHsKLSNpZiBBUFBMRV9DSEFO
R0VTCiAgICAgICAgIC8vIFVwZGF0ZSBkYXNoYm9hcmQgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBj
aGFuZ2UgdGhlIGNsaXAgb2YgYQogICAgICAgICAvLyBwYXJ0aWN1bGFyIHJlZ2lvbi4KICAgICAg
ICAgY2FudmFzLT52aWV3KCktPnVwZGF0ZURhc2hib2FyZFJlZ2lvbnMoKTsKLSNlbmRpZgogCiAg
ICAgICAgIG1fb2JqZWN0LT5jYW52YXMoKS0+dXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7CiAgICAg
fQpAQCAtODUyLDExICs4NDgsOSBAQCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVy
TGF5b3V0CiAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZEhvcml6b250YWxC
YXIpOwogICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkVmVydGljYWxCYXIpOwog
ICAgICAgIAotI2lmIEFQUExFX0NIQU5HRVMKIAkvLyBGb3JjZSBhbiB1cGRhdGUgc2luY2Ugd2Ug
a25vdyB0aGUgc2Nyb2xsYmFycyBoYXZlIGNoYW5nZWQgdGhpbmdzLgogCWlmIChtX29iamVjdC0+
ZG9jdW1lbnQoKS0+aGFzRGFzaGJvYXJkUmVnaW9ucygpKQogCSAgICBtX29iamVjdC0+ZG9jdW1l
bnQoKS0+c2V0RGFzaGJvYXJkUmVnaW9uc0RpcnR5KHRydWUpOwotI2VuZGlmCiAKICAgICAgICAg
bV9vYmplY3QtPnJlcGFpbnQoKTsKIApAQCAtODc2LDcgKzg3MCw3IEBAIFJlbmRlckxheWVyOjp1
cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQKICAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVu
dFdpZHRoLVBBR0VfS0VFUCk7CiAgICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0g
Y2xpZW50V2lkdGg7CiAgICAgICAgIG1faEJhci0+c2V0U3RlcHMoTElORV9TVEVQLCBwYWdlU3Rl
cCk7Ci0jaWZkZWYgQVBQTEVfQ0hBTkdFUworI2lmZGVmIDEKICAgICAgICAgbV9oQmFyLT5zZXRL
bm9iUHJvcG9ydGlvbihjbGllbnRXaWR0aCwgbV9zY3JvbGxXaWR0aCk7CiAjZWxzZQogICAgICAg
ICBtX2hCYXItPnNldFJhbmdlKDAsIG1fc2Nyb2xsV2lkdGgtY2xpZW50V2lkdGgpOwpAQCAtODkw
LDcgKzg4NCw3IEBAIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQKICAg
ICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudEhlaWdodC1QQUdFX0tFRVApOwogICAgICAgICBp
ZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKICAgICAgICAgbV92QmFy
LT5zZXRTdGVwcyhMSU5FX1NURVAsIHBhZ2VTdGVwKTsKLSNpZmRlZiBBUFBMRV9DSEFOR0VTCisj
aWZkZWYgMQogICAgICAgICBtX3ZCYXItPnNldEtub2JQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwg
bV9zY3JvbGxIZWlnaHQpOwogI2Vsc2UKICAgICAgICAgbV92QmFyLT5zZXRSYW5nZSgwLCBtX3Nj
cm9sbEhlaWdodC1jbGllbnRIZWlnaHQpOwpAQCAtOTAwLDE2ICs4OTQsMTMgQEAgUmVuZGVyTGF5
ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX29iamVjdC0+aGVpZ2h0KCkgLSBtX29iamVjdC0+Ym9yZGVyVG9wKCkgLSBt
X29iamVjdC0+Ym9yZGVyQm90dG9tKCkpKTsKICAgICB9CiAgICAgCi0jaWYgQVBQTEVfQ0hBTkdF
UwogICAgIC8vIEZvcmNlIGFuIHVwZGF0ZSBzaW5jZSB3ZSBrbm93IHRoZSBzY3JvbGxiYXJzIGhh
dmUgY2hhbmdlZCB0aGluZ3MuCiAgICAgaWYgKG1fb2JqZWN0LT5kb2N1bWVudCgpLT5oYXNEYXNo
Ym9hcmRSZWdpb25zKCkpCiAJbV9vYmplY3QtPmRvY3VtZW50KCktPnNldERhc2hib2FyZFJlZ2lv
bnNEaXJ0eSh0cnVlKTsKLSNlbmRpZgogCiAgICAgbV9vYmplY3QtPnJlcGFpbnQoKTsKIH0KIAot
I2lmIEFQUExFX0NIQU5HRVMKIHZvaWQKIFJlbmRlckxheWVyOjpwYWludFNjcm9sbGJhcnMoUVBh
aW50ZXIqIHAsIGNvbnN0IFFSZWN0JiBkYW1hZ2VSZWN0KQogewpAQCAtOTMwLDcgKzkyMSw2IEBA
IFJlbmRlckxheWVyOjpwYWludFNjcm9sbGJhcnMoUVBhaW50ZXIqIHAKICAgICBpZiAobV92QmFy
KQogICAgICAgICBtX3ZCYXItPnBhaW50KHAsIGRhbWFnZVJlY3QpOwogfQotI2VuZGlmCiAKIGJv
b2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChLV1FTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBLV1FT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKIHsKQEAgLTk2
NiwxNiArOTU2LDcgQEAgc3RhdGljIHZvaWQgc2V0Q2xpcChRUGFpbnRlciogcCwgY29uc3QgUQog
CiAgICAgcC0+c2F2ZSgpOwogICAgIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICBwLT5hZGRDbGlw
KGNsaXBSZWN0KTsKLSNlbHNlCi0gICAgUVJlY3QgY2xpcHBlZFJlY3QgPSBwLT54Rm9ybShjbGlw
UmVjdCk7Ci0gICAgUVJlZ2lvbiBjcmVnKGNsaXBwZWRSZWN0KTsKLSAgICBRUmVnaW9uIG9sZCA9
IHAtPmNsaXBSZWdpb24oKTsKLSAgICBpZiAoIW9sZC5pc051bGwoKSkKLSAgICAgICAgY3JlZyA9
IG9sZC5pbnRlcnNlY3QoY3JlZyk7Ci0gICAgcC0+c2V0Q2xpcFJlZ2lvbihjcmVnKTsKLSNlbmRp
ZgogICAgIAogfQogCkBAIC0xMDI2LDEyICsxMDA3LDEwIEBAIFJlbmRlckxheWVyOjpwYWludExh
eWVyKFJlbmRlckxheWVyKiByb28KICAgICAgICAgLy8gUGFpbnQgdGhlIGJhY2tncm91bmQuCiAg
ICAgICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIGluZm8ocCwgZGFtYWdlUmVjdCwgUGFpbnRB
Y3Rpb25CbG9ja0JhY2tncm91bmQsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICAgICAg
cmVuZGVyZXIoKS0+cGFpbnQoaW5mbywgeCAtIHJlbmRlcmVyKCktPnhQb3MoKSwgeSAtIHJlbmRl
cmVyKCktPnlQb3MoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCkpOyAgICAgICAgCi0j
aWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAvLyBPdXIgc2Nyb2xsYmFyIHdpZGdldHMgcGFpbnQg
ZXhhY3RseSB3aGVuIHdlIHRlbGwgdGhlbSB0bywgc28gdGhhdCB0aGV5IHdvcmsgcHJvcGVybHkg
d2l0aAogICAgICAgICAvLyB6LWluZGV4LiAgV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUg
YmFja2dyb3VuZC9ib3JkZXIsIHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgICAgICAv
LyBzaXQgYWJvdmUgdGhlIGJhY2tncm91bmQvYm9yZGVyLgogICAgICAgICBwYWludFNjcm9sbGJh
cnMocCwgZGFtYWdlUmVjdCk7Ci0jZW5kaWYKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgY2xpcC4K
ICAgICAgICAgcmVzdG9yZUNsaXAocCwgcGFpbnREaXJ0eVJlY3QsIGRhbWFnZVJlY3QpOwogICAg
IH0KQEAgLTEwOTUsMTAgKzEwNzQsOCBAQCBSZW5kZXJMYXllcjo6cGFpbnRMYXllcihSZW5kZXJM
YXllciogcm9vCiBib29sCiBSZW5kZXJMYXllcjo6aGl0VGVzdChSZW5kZXJPYmplY3Q6Ok5vZGVJ
bmZvJiBpbmZvLCBpbnQgeCwgaW50IHkpCiB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIC8vIENs
ZWFyIG91ciBvdXIgc2Nyb2xsYmFyIHZhcmlhYmxlCiAgICAgUmVuZGVyTGF5ZXI6OmdTY3JvbGxC
YXIgPSAwOwotI2VuZGlmCiAgICAgCiAgICAgUVJlY3QgZGFtYWdlUmVjdChtX3gsIG1feSwgd2lk
dGgoKSwgaGVpZ2h0KCkpOwogICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RM
YXllcih0aGlzLCBpbmZvLCB4LCB5LCBkYW1hZ2VSZWN0KTsKSW5kZXg6IHJlbmRlcmluZy9yZW5k
ZXJfbGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2xheWVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTcKZGlmZiAt
cCAtdSAtcjEuNTcgcmVuZGVyaW5nL3JlbmRlcl9sYXllci5oCi0tLSByZW5kZXJpbmcvcmVuZGVy
X2xheWVyLmgJMyBOb3YgMjAwNSAyMDowMDo1NyAtMDAwMAkxLjU3CisrKyByZW5kZXJpbmcvcmVu
ZGVyX2xheWVyLmgJMTEgTm92IDIwMDUgMTk6MzQ6MDggLTAwMDAKQEAgLTE4NSw3ICsxODUsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIFNjcm9sbEJlaGF2aW9yIGdldFBhcnRpYWxCZWhhdmlvcihj
b25zdCBTY3JvbGxBbGlnbm1lbnQmIHMpIHsgcmV0dXJuIHMubV9yZWN0UGFydGlhbDsgfQogICAg
IHN0YXRpYyBTY3JvbGxCZWhhdmlvciBnZXRIaWRkZW5CZWhhdmlvcihjb25zdCBTY3JvbGxBbGln
bm1lbnQmIHMpIHsgcmV0dXJuIHMubV9yZWN0SGlkZGVuOyB9CiAKLSNpZmRlZiBBUFBMRV9DSEFO
R0VTCisjaWZkZWYgMQogICAgIHN0YXRpYyBRU2Nyb2xsQmFyKiBnU2Nyb2xsQmFyOwogI2VuZGlm
CiAgICAgCkBAIC0yNTcsNyArMjU3LDcgQEAgcHVibGljOgogICAgIGludCBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KCk7CiAgICAgdm9pZCBtb3ZlU2Nyb2xsYmFyc0FzaWRlKCk7CiAgICAgdm9p
ZCBwb3NpdGlvblNjcm9sbGJhcnMoY29uc3QgUVJlY3QmIGFic0JvdW5kcyk7Ci0jaWZkZWYgQVBQ
TEVfQ0hBTkdFUworI2lmZGVmIDEKICAgICB2b2lkIHBhaW50U2Nyb2xsYmFycyhRUGFpbnRlciog
cCwgY29uc3QgUVJlY3QmIGRhbWFnZVJlY3QpOwogI2VuZGlmCiAgICAgdm9pZCB1cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQoKTsKQEAgLTM5NCwxMSArMzk0LDkgQEAgcHJvdGVjdGVkOiAgIAog
ICAgIGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOwogICAgIGJvb2wgbV96T3JkZXJM
aXN0c0RpcnR5IDogMTsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICBib29sIG1fdXNlZFRyYW5z
cGFyZW5jeSA6IDE7IC8vIFRyYWNrcyB3aGV0aGVyIHdlIG5lZWQgdG8gY2xvc2UgYSB0cmFuc3Bh
cmVudCBsYXllciwgaS5lLiwgd2hldGhlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gd2UgZW5kZWQgdXAgcGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkgZGVzY2VuZGFudHMg
KGFuZCB0aGVyZWZvcmUgbmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYmxlbmQpLgotI2VuZGlmCiAKICAgICBNYXJxdWVlKiBtX21hcnF1ZWU7IC8vIFVzZWQgYnkg
bGF5ZXJzIHdpdGggb3ZlcmZsb3c6bWFycXVlZQogfTsKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJf
bGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41NgpkaWZmIC1w
IC11IC1yMS41NiByZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCi0tLSByZW5kZXJpbmcvcmVuZGVy
X2xpbmUuY3BwCTIgTm92IDIwMDUgMDg6NTI6NDUgLTAwMDAJMS41NgorKysgcmVuZGVyaW5nL3Jl
bmRlcl9saW5lLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowOCAtMDAwMApAQCAtOTYxLDcgKzk2MSw2
IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnREZWNvcmF0aW9ucyhSZW4KICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICAgICAgCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAv
LyBTZXQgdXAgdGhlIGFwcHJvcHJpYXRlIHRleHQtc2hhZG93IGVmZmVjdCBmb3IgdGhlIGRlY29y
YXRpb24uCiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG11bHRpcGxlIHNoYWRvdyBlZmZlY3Rz
LiAgTmVlZCBtb3JlIGZyb20gdGhlIENHIEFQSSBiZWZvcmUgd2UgY2FuIGRvIHRoaXMuCiAgICAg
ICAgIGJvb2wgc2V0U2hhZG93ID0gZmFsc2U7CkBAIC05NzAsNyArOTY5LDYgQEAgdm9pZCBJbmxp
bmVGbG93Qm94OjpwYWludERlY29yYXRpb25zKFJlbgogICAgICAgICAgICAgICAgICAgICAgICAg
IHN0eWxlVG9Vc2UtPnRleHRTaGFkb3coKS0+Ymx1ciwgc3R5bGVUb1VzZS0+dGV4dFNoYWRvdygp
LT5jb2xvcik7CiAgICAgICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgICAgICB9Ci0jZW5k
aWYKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG11c3QgaGF2ZSBjaGlsZCBib3hlcyBhbmQgaGF2
ZSBkZWNvcmF0aW9ucyBkZWZpbmVkLgogICAgICAgICBfdHggKz0gYm9yZGVyTGVmdCgpICsgcGFk
ZGluZ0xlZnQoKTsKQEAgLTk5NiwxMCArOTk0LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWlu
dERlY29yYXRpb25zKFJlbgogICAgICAgICAgICAgcC0+ZHJhd0xpbmVGb3JUZXh0KF90eCwgX3R5
LCAyKm1fYmFzZWxpbmUvMywgdyk7CiAgICAgICAgIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKICAg
ICAgICAgaWYgKHNldFNoYWRvdykKICAgICAgICAgICAgIHAtPmNsZWFyU2hhZG93KCk7Ci0jZW5k
aWYKICAgICB9CiB9CiAKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MgpkaWZmIC1wIC11IC1yMS43MiByZW5kZXJp
bmcvcmVuZGVyX2xpc3QuY3BwCi0tLSByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCTYgT2N0IDIw
MDUgMDA6NTM6NTcgLTAwMDAJMS43MgorKysgcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAkxMSBO
b3YgMjAwNSAxOTozNDowOCAtMDAwMApAQCAtNDczLDE0ICs0NzMsMTAgQEAgdm9pZCBSZW5kZXJM
aXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAgICByZXR1cm47CiAgICAgZGVmYXVs
dDoKICAgICAgICAgaWYgKCFtX2l0ZW0uaXNFbXB0eSgpKSB7Ci0jaWYgQVBQTEVfQ0hBTkdFUwog
ICAgICAgICAgICAgLy8gVGV4dCBzaG91bGQgYmUgZHJhd24gb24gdGhlIGJhc2VsaW5lLCBzbyB3
ZSBhZGQgaW4gdGhlIGFzY2VudCBvZiB0aGUgZm9udC4gCiAgICAgICAgICAgICAvLyBGb3Igc29t
ZSBpbmV4cGxpY2FibGUgcmVhc29uLCB0aGlzIHdvcmtzIGluIEtvbnF1ZXJvci4gIEknbSBub3Qg
c3VyZSB3aHkuCiAgICAgICAgICAgICAvLyAtIGR3aAogICAgICAgIAkgICAgX3R5ICs9IGZtLmFz
Y2VudCgpOwotI2Vsc2UKLSAgICAgICAJICAgIC8vX3R5ICs9IGZtLmFzY2VudCgpIC0gZm0uaGVp
Z2h0KCkvMiArIDE7Ci0jZW5kaWYKIAogICAgICAgICAgICAgaWYgKGlzSW5zaWRlKCkpIHsKICAg
ICAgICAgICAgIAlpZiggc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CkluZGV4OiByZW5k
ZXJpbmcvcmVuZGVyX2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
NgpkaWZmIC1wIC11IC1yMS4yNiByZW5kZXJpbmcvcmVuZGVyX2xpc3QuaAotLS0gcmVuZGVyaW5n
L3JlbmRlcl9saXN0LmgJNiBPY3QgMjAwNSAwMDo1Mzo1OCAtMDAwMAkxLjI2CisrKyByZW5kZXJp
bmcvcmVuZGVyX2xpc3QuaAkxMSBOb3YgMjAwNSAxOTozNDowOCAtMDAwMApAQCAtMTE5LDkgKzEx
OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5vdEluTGlzdChib29sIG5vdEluTGlzdCkgeyBf
bm90SW5MaXN0ID0gbm90SW5MaXN0OyB9CiAgICAgYm9vbCBub3RJbkxpc3QoKSBjb25zdCB7IHJl
dHVybiBfbm90SW5MaXN0OyB9CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgUVN0cmluZyBtYXJr
ZXJTdHJpbmdWYWx1ZSgpIHsgaWYgKG1fbWFya2VyKSByZXR1cm4gbV9tYXJrZXItPm1faXRlbTsg
cmV0dXJuICIiOyB9Ci0jZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIGludCBwcmVkZWZWYWw7Cklu
ZGV4OiByZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjIyNQpkaWZmIC1wIC11IC1yMS4yMjUgcmVuZGVyaW5nL3JlbmRlcl9v
YmplY3QuY3BwCi0tLSByZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAJNyBOb3YgMjAwNSAyMzoy
NDoxOSAtMDAwMAkxLjIyNQorKysgcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTExIE5vdiAy
MDA1IDE5OjM0OjA4IC0wMDAwCkBAIC00NywxMCArNDcsOCBAQAogI2luY2x1ZGUgInJlbmRlcl9m
bGV4Ym94LmgiCiAjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAv
LyBGb3IgYWNjZXNzaWJpbGl0eQogI2luY2x1ZGUgIktXUUFjY09iamVjdENhY2hlLmgiIAotI2Vu
ZGlmCiAKICNpbmNsdWRlIDxhc3NlcnQuaD4KIApAQCAtMTMxNyw3ICsxMzE1LDYgQEAgUVJlY3Qg
UmVuZGVyT2JqZWN0OjpwYWludGluZ1Jvb3RSZWN0KFFSZQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiB2b2lkIFJlbmRlck9iamVjdDo6YWRkRm9jdXNSaW5nUmVj
dHMoUVBhaW50ZXIgKnAsIGludCBfdHgsIGludCBfdHkpCiB7CiAgICAgLy8gRm9yIGJsb2NrcyBp
bnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQgYW5kIGluY2x1ZGUgbWFyZ2lucyBzbyB0aGF0IHdl
IHJ1biByaWdodCB1cCB0byB0aGUKQEAgLTEzMzIsNyArMTMyOSw2IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjphZGRGb2N1c1JpbmdSZWN0cyhRUGEKICAgICBlbHNlCiAgICAgICAgIHAtPmFkZEZvY3Vz
UmluZ1JlY3QoX3R4LCBfdHksIHdpZHRoKCksIGhlaWdodCgpKTsKIH0KLSNlbmRpZgogCiB2b2lk
IFJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKFFQYWludGVyICpwLCBpbnQgX3R4LCBpbnQgX3R5
LCBpbnQgdywgaW50IGgsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKQEAgLTEzNDksNyAr
MTM0NSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUoUVBhaW50ZXIKICAgICAK
ICAgICBpbnQgb2Zmc2V0ID0gc3R5bGUtPm91dGxpbmVPZmZzZXQoKTsKICAgICAKLSNpZmRlZiBB
UFBMRV9DSEFOR0VTCisjaWZkZWYgMQogICAgIGlmIChzdHlsZS0+b3V0bGluZVN0eWxlSXNBdXRv
KCkpIHsKICAgICAgICAgaWYgKCFzdHlsZS0+aGFzQXBwZWFyYW5jZSgpKSB7CiAgICAgICAgICAg
ICAvLyBPbmx5IHBhaW50IHRoZSBmb2N1cyByaW5nIGJ5IGhhbmQgaWYgdGhlcmUgaXMgbm8gY3Vz
dG9tIGFwcGVhcmFuY2UKQEAgLTE3NTQsMTIgKzE3NTAsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6
OnNldFN0eWxlKFJlbmRlclN0eWxlIAogICAgICAgICAvLyBJZiBvdXIgei1pbmRleCBjaGFuZ2Vz
IHZhbHVlIG9yIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8g
ZGlydHkgb3VyIHN0YWNraW5nIGNvbnRleHQncyB6LW9yZGVyIGxpc3QuCiAgICAgICAgIGlmIChz
dHlsZSkgewotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAgIGlmIChtX3N0eWxlLT52aXNp
YmlsaXR5KCkgIT0gc3R5bGUtPnZpc2liaWxpdHkoKSB8fAogICAgICAgICAgICAgICAgIG1fc3R5
bGUtPnpJbmRleCgpICE9IHN0eWxlLT56SW5kZXgoKSB8fAogICAgICAgICAgICAgICAgIG1fc3R5
bGUtPmhhc0F1dG9aSW5kZXgoKSAhPSBzdHlsZS0+aGFzQXV0b1pJbmRleCgpKQogICAgICAgICAg
ICAgICAgIGRvY3VtZW50KCktPnNldERhc2hib2FyZFJlZ2lvbnNEaXJ0eSh0cnVlKTsKLSNlbmRp
ZgogCiAgICAgICAgICAgICBpZiAoKG1fc3R5bGUtPmhhc0F1dG9aSW5kZXgoKSAhPSBzdHlsZS0+
aGFzQXV0b1pJbmRleCgpIHx8CiAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnpJbmRleCgpICE9
IHN0eWxlLT56SW5kZXgoKSB8fApAQCAtMjAyNCwxOSArMjAxOCw2IEBAIGJvb2wgUmVuZGVyT2Jq
ZWN0Ojppc1NlbGVjdGlvbkJvcmRlcigpIGMKICAgICByZXR1cm4gc3QgPT0gU2VsZWN0aW9uU3Rh
cnQgfHwgc3QgPT0gU2VsZWN0aW9uRW5kIHx8IHN0ID09IFNlbGVjdGlvbkJvdGg7CiB9CiAKLSNp
ZiAwCi1zdGF0aWMgdm9pZCBjaGVja0Zsb2F0cyhSZW5kZXJPYmplY3QqIG8sIFJlbmRlck9iamVj
dCogZikKLXsKLSAgICBpZiAoby0+aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAgIFJlbmRlckJs
b2NrKiBiID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvKTsKLSAgICAgICAgaWYgKGItPmNv
bnRhaW5zRmxvYXQoZikpCi0gICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgIH0KLSAgICAK
LSAgICBmb3IgKFJlbmRlck9iamVjdCogYyA9IG8tPmZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgIGNoZWNrRmxvYXRzKGMsIGYpOwotfQotI2VuZGlmCiAKIHZv
aWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9tT2JqZWN0TGlzdHMoKQogewpAQCAtMjA0OSwxMCAr
MjAzMCw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9tT2JqZWN0TGlzdHMKICAgICAg
ICAgCiAgICAgICAgIGlmIChvdXRlcm1vc3RCbG9jaykKICAgICAgICAgICAgIG91dGVybW9zdEJs
b2NrLT5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KHRoaXMpOwotI2lmIDAK
LSAgICAgICAgLy8gRGVidWdnaW5nIGNvZGUgZm9yIGZsb2F0IGNoZWNraW5nLgotICAgICAgICBj
aGVja0Zsb2F0cyhjYW52YXMoKSwgdGhpcyk7Ci0jZW5kaWYKICAgICB9CiAKICAgICBpZiAoaXNQ
b3NpdGlvbmVkKCkpIHsKQEAgLTIwNzIsMTAgKzIwNDksOCBAQCBSZW5kZXJBcmVuYSogUmVuZGVy
T2JqZWN0OjpyZW5kZXJBcmVuYSgpCiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmUoKQogewot
I2lmIEFQUExFX0NIQU5HRVMKICAgICAvLyBEZWxldGUgb3VyIGFjY2Vzc2liaWxpdHkgb2JqZWN0
IGlmIHdlIGhhdmUgb25lLgogICAgIGRvY3VtZW50KCktPmdldEFjY09iamVjdENhY2hlKCktPmRl
dGFjaCh0aGlzKTsKLSNlbmRpZgogCiAgICAgcmVtb3ZlRnJvbU9iamVjdExpc3RzKCk7CiAKQEAg
LTI0MzcsNyArMjQxMiw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVXaWRnZXRQb3NpdGlv
bigKIHsKIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKIFFWYWx1ZUxpc3Q8RGFzaGJvYXJkUmVnaW9u
VmFsdWU+IFJlbmRlck9iamVjdDo6Y29tcHV0ZURhc2hib2FyZFJlZ2lvbnMoKQogewogICAgIFFW
YWx1ZUxpc3Q8RGFzaGJvYXJkUmVnaW9uVmFsdWU+IHJlZ2lvbnM7CkBAIC0yNDk5LDcgKzI0NzMs
NiBAQCB2b2lkIFJlbmRlck9iamVjdDo6Y29sbGVjdERhc2hib2FyZFJlZ2lvCiAgICAgfQogfQog
Ci0jZW5kaWYKIAogdm9pZCBSZW5kZXJPYmplY3Q6OmNvbGxlY3RCb3JkZXJzKFFWYWx1ZUxpc3Q8
Q29sbGFwc2VkQm9yZGVyVmFsdWU+JiBib3JkZXJTdHlsZXMpCiB7CkBAIC0yNTI0LDkgKzI0OTcs
NiBAQCBib29sIFJlbmRlck9iamVjdDo6dXNlc0xpbmVXaWR0aCgpIGNvbnN0CiAKIFFDaGFyIFJl
bmRlck9iamVjdDo6YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0CiB7Ci0jaWYgIUFQ
UExFX0NIQU5HRVMKLSAgICByZXR1cm4gJ1xcJzsKLSNlbHNlCiAgICAgTm9kZUltcGwgKm5vZGUg
PSBlbGVtZW50KCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gJ1xcJzsKQEAgLTI1
NDAsNyArMjUxMCw2IEBAIFFDaGFyIFJlbmRlck9iamVjdDo6YmFja3NsYXNoQXNDdXJyZW5jeVMK
ICAgICBpZiAoIWNvZGVjKQogICAgICAgICByZXR1cm4gJ1xcJzsKICAgICByZXR1cm4gY29kZWMt
PmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKTsKLSNlbmRpZgogfQogCiB2b2lkIFJlbmRlck9i
amVjdDo6c2V0UGl4bWFwKGNvbnN0IFFQaXhtYXAmLCBjb25zdCBRUmVjdCYsIENhY2hlZEltYWdl
ICppbWFnZSkKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjUKZGlmZiAtcCAtdSAtcjEuMTY1IHJlbmRlcmluZy9y
ZW5kZXJfb2JqZWN0LmgKLS0tIHJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgJNyBOb3YgMjAwNSAy
MzoyNDoxOSAtMDAwMAkxLjE2NQorKysgcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaAkxMSBOb3Yg
MjAwNSAxOTozNDowOCAtMDAwMApAQCAtMTE0LDcgKzExNCw2IEBAIG5hbWVzcGFjZSBraHRtbCB7
CiAgICAgY2xhc3MgSW5saW5lRmxvd0JveDsKICAgICBjbGFzcyBDb2xsYXBzZWRCb3JkZXJWYWx1
ZTsKIAotI2lmIEFQUExFX0NIQU5HRVMKIHN0cnVjdCBEYXNoYm9hcmRSZWdpb25WYWx1ZQogewog
ICAgIFFTdHJpbmcgbGFiZWw7CkBAIC0xMjcsNyArMTI2LDYgQEAgc3RydWN0IERhc2hib2FyZFJl
Z2lvblZhbHVlCiAgICAgICAgIHJldHVybiB0eXBlID09IG8udHlwZSAmJiBib3VuZHMgPT0gby5i
b3VuZHMgJiYgbGFiZWwgPT0gby5sYWJlbDsKICAgICB9CiB9OwotI2VuZGlmCiAKIAogLyoqCkBA
IC00NjUsMTEgKzQ2Myw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVXaWRn
ZXRQb3NpdGlvbigpOwogICAgIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICBRVmFsdWVMaXN0PERh
c2hib2FyZFJlZ2lvblZhbHVlPiBSZW5kZXJPYmplY3Q6OmNvbXB1dGVEYXNoYm9hcmRSZWdpb25z
KCk7CiAgICAgdm9pZCBhZGREYXNoYm9hcmRSZWdpb25zIChRVmFsdWVMaXN0PERhc2hib2FyZFJl
Z2lvblZhbHVlPiYgcmVnaW9ucyk7CiAgICAgdm9pZCBjb2xsZWN0RGFzaGJvYXJkUmVnaW9ucyAo
UVZhbHVlTGlzdDxEYXNoYm9hcmRSZWdpb25WYWx1ZT4mIHJlZ2lvbnMpOwotI2VuZGlmCiAKICAg
ICAvLyBkb2VzIGEgcXVlcnkgb24gdGhlIHJlbmRlcnRyZWUgYW5kIGZpbmRzIHRoZSBpbm5lcm5v
ZGUKICAgICAvLyBhbmQgb3ZlclVSTCBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uCkBAIC02NjgsOSAr
NjY0LDcgQEAgcHVibGljOgogICAgIC8vIHRoZSByZWN0IHRoYXQgd2lsbCBiZSBwYWludGVkIGlm
IHRoaXMgb2JqZWN0IGlzIHBhc3NlZCBhcyB0aGUgcGFpbnRpbmdSb290CiAgICAgUVJlY3QgcGFp
bnRpbmdSb290UmVjdChRUmVjdCYgdG9wTGV2ZWxSZWN0KTsKIAotI2lmIEFQUExFX0NIQU5HRVMK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoUVBhaW50ZXIgKnBhaW50ZXIsIGlu
dCBfdHgsIGludCBfdHkpOwotI2VuZGlmCiAKICAgICB2aXJ0dWFsIGludCBtaW5XaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGludCBtYXhXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfcmVwbGFjZWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfcmVwbGFj
ZWQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkzCmRpZmYgLXAgLXUgLXIxLjkzIHJlbmRl
cmluZy9yZW5kZXJfcmVwbGFjZWQuY3BwCi0tLSByZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmNw
cAkxMSBOb3YgMjAwNSAxNzo0NDoyNyAtMDAwMAkxLjkzCisrKyByZW5kZXJpbmcvcmVuZGVyX3Jl
cGxhY2VkLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowOCAtMDAwMApAQCAtMjg2LDExICsyODYsNiBA
QCBSZW5kZXJXaWRnZXQ6On5SZW5kZXJXaWRnZXQoKQogCiB2b2lkICBSZW5kZXJXaWRnZXQ6OnJl
c2l6ZVdpZGdldCggUVdpZGdldCAqd2lkZ2V0LCBpbnQgdywgaW50IGggKQogewotI2lmICFBUFBM
RV9DSEFOR0VTCi0gICAgLy8gdWdseSBoYWNrIHRvIGxpbWl0IHRoZSBtYXhpbXVtIHNpemUgb2Yg
dGhlIHdpZGdldCAoYXMgWDExIGhhcyBwcm9ibGVtcyBpZiBpdCdzIGJpZ2dlcikKLSAgICBoID0g
a01pbiggaCwgMzA3MiApOwotICAgIHcgPSBrTWluKCB3LCAyMDAwICk7Ci0jZW5kaWYKIAogICAg
IGlmIChlbGVtZW50KCkgJiYgKHdpZGdldC0+d2lkdGgoKSAhPSB3IHx8IHdpZGdldC0+aGVpZ2h0
KCkgIT0gaCkpIHsKICAgICAgICAgUmVuZGVyQXJlbmEgKmFyZW5hID0gcmVmKCk7CkBAIC0zNDcs
MTQgKzM0MiwxMiBAQCB2b2lkIFJlbmRlcldpZGdldDo6bGF5b3V0KCApCiAgICAgc2V0TmVlZHNM
YXlvdXQoZmFsc2UpOwogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogdm9pZCBSZW5kZXJXaWRnZXQ6
OnNlbmRDb25zdW1lZE1vdXNlVXAoKQogewogICAgIFJlbmRlckFyZW5hICphcmVuYSA9IHJlZigp
OwogICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hTaW11bGF0ZWRNb3VzZUV2ZW50KG1vdXNldXBFdmVu
dCk7CiAgICAgZGVyZWYoYXJlbmEpOwogfQotI2VuZGlmCiAKIHZvaWQgUmVuZGVyV2lkZ2V0Ojpz
bG90V2lkZ2V0RGVzdHJ1Y3RlZCgpCiB7CkBAIC0zNjksMTAgKzM2Miw4IEBAIHZvaWQgUmVuZGVy
V2lkZ2V0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSAKICAgICAgICAgbV93aWRnZXQtPnNldEZvbnQo
c3R5bGUoKS0+Zm9udCgpKTsKICAgICAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBW
SVNJQkxFKQogICAgICAgICAgICAgbV93aWRnZXQtPmhpZGUoKTsKLSNpZiBBUFBMRV9DSEFOR0VT
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fd2lkZ2V0LT5zaG93KCk7Ci0jZW5kaWYKICAg
ICB9CiB9CiAKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfcmVwbGFjZWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2Vk
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzYKZGlmZiAtcCAtdSAtcjEuMzYgcmVuZGVyaW5n
L3JlbmRlcl9yZXBsYWNlZC5oCi0tLSByZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmgJMTkgT2N0
IDIwMDUgMDk6MTU6MTQgLTAwMDAJMS4zNgorKysgcmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNlZC5o
CTExIE5vdiAyMDA1IDE5OjM0OjA4IC0wMDAwCkBAIC05OCw5ICs5OCw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgcyk7
CiAKLSNpZiBBUFBMRV9DSEFOR0VTIAogICAgIHZvaWQgc2VuZENvbnN1bWVkTW91c2VVcCgpOwot
I2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVdpZGdldFBvc2l0aW9uKCk7CiAKIHB1Ymxp
YyBzbG90czoKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfc3R5bGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjczCmRpZmYgLXAgLXUgLXIxLjczIHJlbmRlcmluZy9y
ZW5kZXJfc3R5bGUuY3BwCi0tLSByZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmNwcAk2IE9jdCAyMDA1
IDAwOjUzOjU5IC0wMDAwCTEuNzMKKysrIHJlbmRlcmluZy9yZW5kZXJfc3R5bGUuY3BwCTExIE5v
diAyMDA1IDE5OjM0OjA4IC0wMDAwCkBAIC04OCw5ICs4OCw2IEBAIFN0eWxlVmlzdWFsRGF0YTo6
U3R5bGVWaXN1YWxEYXRhKCkKICAgICAgIDogaGFzQ2xpcChmYWxzZSksIAogICAgICAgdGV4dERl
Y29yYXRpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbigpKSwgCiAgICAgICBj
b2xzcGFuKCAxICksIGNvdW50ZXJfaW5jcmVtZW50KCAwICksIGNvdW50ZXJfcmVzZXQoIDAgKQot
I2lmICFBUFBMRV9DSEFOR0VTCi0gICAgICAsIHBhbGV0dGUoIFFBcHBsaWNhdGlvbjo6cGFsZXR0
ZSgpICkKLSNlbmRpZgogewogfQogCkBAIC0xMDEsOSArOTgsNiBAQCBTdHlsZVZpc3VhbERhdGE6
OlN0eWxlVmlzdWFsRGF0YShjb25zdCBTCiAgICAgOiBTaGFyZWQ8U3R5bGVWaXN1YWxEYXRhPigp
LAogICAgICAgY2xpcCggby5jbGlwICksIGhhc0NsaXAoIG8uaGFzQ2xpcCApLCB0ZXh0RGVjb3Jh
dGlvbihvLnRleHREZWNvcmF0aW9uKSwgY29sc3Bhbiggby5jb2xzcGFuICksCiAgICAgICBjb3Vu
dGVyX2luY3JlbWVudCggby5jb3VudGVyX2luY3JlbWVudCApLCBjb3VudGVyX3Jlc2V0KCBvLmNv
dW50ZXJfcmVzZXQgKQotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgICAsIHBhbGV0dGUoIG8ucGFs
ZXR0ZSApCi0jZW5kaWYKIHsKIH0KIApAQCAtMzM3LDkgKzMzMSw3IEBAIGJvb2wgU3R5bGVGbGV4
aWJsZUJveERhdGE6Om9wZXJhdG9yPT0oY28KIAogU3R5bGVDU1MzTm9uSW5oZXJpdGVkRGF0YTo6
U3R5bGVDU1MzTm9uSW5oZXJpdGVkRGF0YSgpCiA6U2hhcmVkPFN0eWxlQ1NTM05vbkluaGVyaXRl
ZERhdGE+KCksIAotI2lmIEFQUExFX0NIQU5HRVMKIGxpbmVDbGFtcChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVDbGFtcCgpKSwKLSNlbmRpZgogb3BhY2l0eShSZW5kZXJTdHlsZTo6aW5pdGlhbE9w
YWNpdHkoKSksCiB1c2VyRHJhZyhSZW5kZXJTdHlsZTo6aW5pdGlhbFVzZXJEcmFnKCkpLAogdXNl
clNlbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbFVzZXJTZWxlY3QoKSksCkBAIC0zNTUsOSArMzQ3
LDcgQEAgbV9hcHBlYXJhbmNlKFJlbmRlclN0eWxlOjppbml0aWFsQXBwZWFyYQogCiBTdHlsZUNT
UzNOb25Jbmhlcml0ZWREYXRhOjpTdHlsZUNTUzNOb25Jbmhlcml0ZWREYXRhKGNvbnN0IFN0eWxl
Q1NTM05vbkluaGVyaXRlZERhdGEmIG8pCiA6U2hhcmVkPFN0eWxlQ1NTM05vbkluaGVyaXRlZERh
dGE+KCksIAotI2lmIEFQUExFX0NIQU5HRVMKIGxpbmVDbGFtcChvLmxpbmVDbGFtcCksCi0jZW5k
aWYKIG9wYWNpdHkoby5vcGFjaXR5KSwgZmxleGlibGVCb3goby5mbGV4aWJsZUJveCksIG1hcnF1
ZWUoby5tYXJxdWVlKSwKIHVzZXJEcmFnKG8udXNlckRyYWcpLCB1c2VyU2VsZWN0KG8udXNlclNl
bGVjdCksIHRleHRPdmVyZmxvdyhvLnRleHRPdmVyZmxvdyksCiBtYXJnaW5Ub3BDb2xsYXBzZShv
Lm1hcmdpblRvcENvbGxhcHNlKSwgbWFyZ2luQm90dG9tQ29sbGFwc2Uoby5tYXJnaW5Cb3R0b21D
b2xsYXBzZSksCkBAIC0zOTYsMTggKzM4NiwxNCBAQCBib29sIFN0eWxlQ1NTM05vbkluaGVyaXRl
ZERhdGE6Om9wZXJhdG9yCiAjaWZuZGVmIEtIVE1MX05PX1hCTAogICAgICAgICAgICAmJiBiaW5k
aW5nc0VxdWl2YWxlbnQobykKICNlbmRpZgotI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICAg
JiYgbGluZUNsYW1wID09IG8ubGluZUNsYW1wICYmIG1fZGFzaGJvYXJkUmVnaW9ucyA9PSBvLm1f
ZGFzaGJvYXJkUmVnaW9ucwotI2VuZGlmCiAgICAgOwogfQogCiBTdHlsZUNTUzNJbmhlcml0ZWRE
YXRhOjpTdHlsZUNTUzNJbmhlcml0ZWREYXRhKCkKIDpTaGFyZWQ8U3R5bGVDU1MzSW5oZXJpdGVk
RGF0YT4oKSwgdGV4dFNoYWRvdygwKSwgdXNlck1vZGlmeShSRUFEX09OTFkpLCB3b3JkV3JhcChX
Qk5PUk1BTCksIAogICAgIG5ic3BNb2RlKE5CTk9STUFMKSwga2h0bWxMaW5lQnJlYWsoTEJOT1JN
QUwpCi0jaWYgQVBQTEVfQ0hBTkdFUwogLCB0ZXh0U2l6ZUFkanVzdChSZW5kZXJTdHlsZTo6aW5p
dGlhbFRleHRTaXplQWRqdXN0KCkpCi0jZW5kaWYKIHsKIAogfQpAQCAtNDIwLDkgKzQwNiw3IEBA
IFN0eWxlQ1NTM0luaGVyaXRlZERhdGE6OlN0eWxlQ1NTM0luaGVyaXQKICAgICB3b3JkV3JhcCA9
IG8ud29yZFdyYXA7CiAgICAgbmJzcE1vZGUgPSBvLm5ic3BNb2RlOwogICAgIGtodG1sTGluZUJy
ZWFrID0gby5raHRtbExpbmVCcmVhazsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgdGV4dFNpemVB
ZGp1c3QgPSBvLnRleHRTaXplQWRqdXN0OwotI2VuZGlmCiB9CiAKIFN0eWxlQ1NTM0luaGVyaXRl
ZERhdGE6On5TdHlsZUNTUzNJbmhlcml0ZWREYXRhKCkKQEAgLTQzNCw5ICs0MTgsNyBAQCBib29s
IFN0eWxlQ1NTM0luaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0oCiB7CiAgICAgcmV0dXJuICh1c2Vy
TW9kaWZ5ID09IG8udXNlck1vZGlmeSkgJiYgc2hhZG93RGF0YUVxdWl2YWxlbnQobykgJiYgKHdv
cmRXcmFwID09IG8ud29yZFdyYXApICYmCiAgICAgICAgIChuYnNwTW9kZSA9PSBvLm5ic3BNb2Rl
KSAmJiAoa2h0bWxMaW5lQnJlYWsgPT0gby5raHRtbExpbmVCcmVhaykKLSNpZiBBUFBMRV9DSEFO
R0VTCiAgICAgICAgICAgICAmJiAodGV4dFNpemVBZGp1c3QgPT0gby50ZXh0U2l6ZUFkanVzdCkK
LSNlbmRpZgogICAgIDsKIH0KIApAQCAtNzIzLDEwICs3MDUsOCBAQCBSZW5kZXJTdHlsZTo6RGlm
ZiBSZW5kZXJTdHlsZTo6ZGlmZiggY29uCiAgICAgICAgICBjc3MzTm9uSW5oZXJpdGVkRGF0YS0+
bWFyZ2luVG9wQ29sbGFwc2UgIT0gb3RoZXItPmNzczNOb25Jbmhlcml0ZWREYXRhLT5tYXJnaW5U
b3BDb2xsYXBzZSB8fAogICAgICAgICAgY3NzM05vbkluaGVyaXRlZERhdGEtPm1hcmdpbkJvdHRv
bUNvbGxhcHNlICE9IG90aGVyLT5jc3MzTm9uSW5oZXJpdGVkRGF0YS0+bWFyZ2luQm90dG9tQ29s
bGFwc2UgfHwKICAgICAgICAgICpjc3MzTm9uSW5oZXJpdGVkRGF0YS0+ZmxleGlibGVCb3guZ2V0
KCkgIT0gKm90aGVyLT5jc3MzTm9uSW5oZXJpdGVkRGF0YS0+ZmxleGlibGVCb3guZ2V0KCkgfHwK
LSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgICAoY3NzM05vbkluaGVyaXRlZERhdGEtPmxpbmVD
bGFtcCAhPSBvdGhlci0+Y3NzM05vbkluaGVyaXRlZERhdGEtPmxpbmVDbGFtcCkgfHwKICAgICAg
ICAgIChjc3MzSW5oZXJpdGVkRGF0YS0+dGV4dFNpemVBZGp1c3QgIT0gb3RoZXItPmNzczNJbmhl
cml0ZWREYXRhLT50ZXh0U2l6ZUFkanVzdCkgfHwKLSNlbmRpZgogICAgICAgICAgKGNzczNJbmhl
cml0ZWREYXRhLT53b3JkV3JhcCAhPSBvdGhlci0+Y3NzM0luaGVyaXRlZERhdGEtPndvcmRXcmFw
KSB8fAogICAgICAgICAgKGNzczNJbmhlcml0ZWREYXRhLT5uYnNwTW9kZSAhPSBvdGhlci0+Y3Nz
M0luaGVyaXRlZERhdGEtPm5ic3BNb2RlKSB8fAogICAgICAgICAgKGNzczNJbmhlcml0ZWREYXRh
LT5raHRtbExpbmVCcmVhayAhPSBvdGhlci0+Y3NzM0luaGVyaXRlZERhdGEtPmtodG1sTGluZUJy
ZWFrKSB8fApAQCAtODA4LDExICs3ODgsOSBAQCBSZW5kZXJTdHlsZTo6RGlmZiBSZW5kZXJTdHls
ZTo6ZGlmZiggY29uCiAgICAgICAgIGJvcmRlclJpZ2h0V2lkdGgoKSAhPSBvdGhlci0+Ym9yZGVy
UmlnaHRXaWR0aCgpKQogICAgICAgICByZXR1cm4gTGF5b3V0OwogCi0jaWYgQVBQTEVfQ0hBTkdF
UwogICAgIC8vIElmIHJlZ2lvbnMgY2hhbmdlIHRyaWdnZXIgYSByZWxheW91dCB0byByZS1jYWxj
IHJlZ2lvbnMuCiAgICAgaWYgKCEoY3NzM05vbkluaGVyaXRlZERhdGEtPm1fZGFzaGJvYXJkUmVn
aW9ucyA9PSBvdGhlci0+Y3NzM05vbkluaGVyaXRlZERhdGEtPm1fZGFzaGJvYXJkUmVnaW9ucykp
CiAgICAgICAgIHJldHVybiBMYXlvdXQ7Ci0jZW5kaWYKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGVz
ZSBsZWZ0L3RvcC9yaWdodC9ib3R0b20gY2hlY2tzIHN0YXkgYmVsb3cgYWxsIGxheW91dCBjaGVj
a3MgYW5kIGFib3ZlCiAgICAgLy8gYWxsIHZpc2libGUgY2hlY2tzLgpAQCAtODUxLDkgKzgyOSw2
IEBAIFJlbmRlclN0eWxlOjpEaWZmIFJlbmRlclN0eWxlOjpkaWZmKCBjb24KICAgICAgICAgY3Nz
M0luaGVyaXRlZERhdGEtPnVzZXJNb2RpZnkgIT0gb3RoZXItPmNzczNJbmhlcml0ZWREYXRhLT51
c2VyTW9kaWZ5IHx8CiAgICAgICAgIGNzczNOb25Jbmhlcml0ZWREYXRhLT51c2VyU2VsZWN0ICE9
IG90aGVyLT5jc3MzTm9uSW5oZXJpdGVkRGF0YS0+dXNlclNlbGVjdCB8fAogICAgICAgICBjc3Mz
Tm9uSW5oZXJpdGVkRGF0YS0+dXNlckRyYWcgIT0gb3RoZXItPmNzczNOb25Jbmhlcml0ZWREYXRh
LT51c2VyRHJhZwotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgICAgIHx8ICEodmlzdWFsLT5wYWxl
dHRlID09IG90aGVyLT52aXN1YWwtPnBhbGV0dGUpCi0jZW5kaWYKIAkpCiAgICAgICAgIHJldHVy
biBSZXBhaW50OwogCkBAIC04NzMsMTQgKzg0OCw2IEBAIHZvaWQgUmVuZGVyU3R5bGU6OmNsZWFu
dXAoKQogLy8gICAgU2hhcmVkRGF0YTo6Y291bnRlciA9IDA7CiB9CiAKLSNpZiAhQVBQTEVfQ0hB
TkdFUwotCi12b2lkIFJlbmRlclN0eWxlOjpzZXRQYWxldHRlQ29sb3IoUVBhbGV0dGU6OkNvbG9y
R3JvdXAgZywgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSByLCBjb25zdCBRQ29sb3ImIGMpCi17Ci0g
ICAgdmlzdWFsLmFjY2VzcygpLT5wYWxldHRlLnNldENvbG9yKGcscixjKTsKLX0KLQotI2VuZGlm
CiAKIHZvaWQgUmVuZGVyU3R5bGU6OmFkanVzdEJhY2tncm91bmRMYXllcnMoKQogewpJbmRleDog
cmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS45NwpkaWZmIC1wIC11IC1yMS45NyByZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgKLS0tIHJl
bmRlcmluZy9yZW5kZXJfc3R5bGUuaAkyIE5vdiAyMDA1IDA4OjUyOjQ2IC0wMDAwCTEuOTcKKysr
IHJlbmRlcmluZy9yZW5kZXJfc3R5bGUuaAkxMSBOb3YgMjAwNSAxOTozNDowOCAtMDAwMApAQCAt
NDIzLDcgKzQyMyw2IEBAIHB1YmxpYzoKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBEYXNoYm9hcmQgcmVnaW9uIGF0dHJpYnV0ZXMuIE5vdCBp
bmhlcml0ZWQuCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiBzdHJ1Y3QgU3R5bGVEYXNoYm9hcmRSZWdp
b24KIHsKICAgICBRU3RyaW5nIGxhYmVsOwpAQCAtNDQxLDcgKzQ0MCw2IEBAIHN0cnVjdCBTdHls
ZURhc2hib2FyZFJlZ2lvbgogICAgICAgICByZXR1cm4gdHlwZSA9PSBvLnR5cGUgJiYgb2Zmc2V0
ID09IG8ub2Zmc2V0ICYmIGxhYmVsID09IG8ubGFiZWw7CiAgICAgfQogfTsKLSNlbmRpZgogCiAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gUmFu
ZG9tIHZpc3VhbCByZW5kZXJpbmcgbW9kZWwgYXR0cmlidXRlcy4gTm90IGluaGVyaXRlZC4KQEAg
LTQ4MCw5ICs0NzgsNiBAQCBwdWJsaWM6CiAJCSBjb2xzcGFuID09IG8uY29sc3BhbiAmJgogCQkg
Y291bnRlcl9pbmNyZW1lbnQgPT0gby5jb3VudGVyX2luY3JlbWVudCAmJgogCQkgY291bnRlcl9y
ZXNldCA9PSBvLmNvdW50ZXJfcmVzZXQgJiYKLSNpZiAhQVBQTEVfQ0hBTkdFUwotCQkgcGFsZXR0
ZSA9PSBvLnBhbGV0dGUgJiYKLSNlbmRpZgogICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlv
biA9PSBvLnRleHREZWNvcmF0aW9uKTsKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvciE9KCBjb25z
dCBTdHlsZVZpc3VhbERhdGEgJm8gKSBjb25zdCB7CkBAIC00OTgsOSArNDkzLDYgQEAgcHVibGlj
OgogICAgIHNob3J0IGNvdW50ZXJfaW5jcmVtZW50OyAvL29rLCBzbyB0aGVzZSBhcmUgbm90IHZp
c3VhbCBtb2RlIHNwZXNpZmljCiAgICAgc2hvcnQgY291bnRlcl9yZXNldDsgICAgIC8vY2FuJ3Qg
Z28gdG8gaW5oZXJpdGVkLCBzaW5jZSB0aGVzZSBhcmUgbm90IGluaGVyaXRlZAogCi0jaWYgIUFQ
UExFX0NIQU5HRVMKLSAgICBRUGFsZXR0ZSBwYWxldHRlOyAgICAgIC8vd2lkZ2V0IHN0eWxpbmcg
d2l0aCBJRSBhdHRyaWJ1dGVzCi0jZW5kaWYKIH07CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03ODMsMTAgKzc3NSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7CiAgICAgfQogICAgIAotI2lmIEFQUExFX0NI
QU5HRVMKICAgICBpbnQgbGluZUNsYW1wOyAgICAgICAgIC8vIEFuIEFwcGxlIGV4dGVuc2lvbi4g
IE5vdCByZWFsbHkgQ1NTMyBidXQgbm90IHdvcnRoIG1ha2luZyBhIG5ldyBzdHJ1Y3Qgb3Zlci4K
ICAgICBRVmFsdWVMaXN0PFN0eWxlRGFzaGJvYXJkUmVnaW9uPiBtX2Rhc2hib2FyZFJlZ2lvbnM7
Ci0jZW5kaWYKICAgICBmbG9hdCBvcGFjaXR5OyAgICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHdl
J3JlIHRyYW5zcGFyZW50LgogICAgIERhdGFSZWY8U3R5bGVGbGV4aWJsZUJveERhdGE+IGZsZXhp
YmxlQm94OyAvLyBGbGV4aWJsZSBib3ggcHJvcGVydGllcyAKICAgICBEYXRhUmVmPFN0eWxlTWFy
cXVlZURhdGE+IG1hcnF1ZWU7IC8vIE1hcnF1ZWUgcHJvcGVydGllcwpAQCAtODI1LDkgKzgxNSw3
IEBAIHB1YmxpYzoKICAgICBFV29yZFdyYXAgd29yZFdyYXAgOiAxOyAgICAvLyBGbGFnIHVzZWQg
Zm9yIHdvcmQgd3JhcAogICAgIEVOQlNQTW9kZSBuYnNwTW9kZSA6IDE7ICAgIAogICAgIEVLSFRN
TExpbmVCcmVhayBraHRtbExpbmVCcmVhayA6IDE7ICAgIAotI2lmIEFQUExFX0NIQU5HRVMKICAg
ICBib29sIHRleHRTaXplQWRqdXN0IDogMTsgICAgLy8gQW4gQXBwbGUgZXh0ZW5zaW9uLiAgTm90
IHJlYWxseSBDU1MzIGJ1dCBub3Qgd29ydGggbWFraW5nIGEgbmV3IHN0cnVjdCBvdmVyLgotI2Vu
ZGlmCiAgICAgCiBwcml2YXRlOgogICAgIFN0eWxlQ1NTM0luaGVyaXRlZERhdGEgJm9wZXJhdG9y
PShjb25zdCBTdHlsZUNTUzNJbmhlcml0ZWREYXRhICYpOwpAQCAtMTQwMiwxMSArMTM5MCw5IEBA
IHB1YmxpYzoKICAgICBFTWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvciBtYXRjaE5lYXJl
c3RNYWlsQmxvY2txdW90ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gY3NzM05vbkluaGVyaXRlZERh
dGEtPm1hdGNoTmVhcmVzdE1haWxCbG9ja3F1b3RlQ29sb3I7IH0KICAgICAvLyBFbmQgQ1NTMyBH
ZXR0ZXJzCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8gQXBwbGUtc3BlY2lmaWMgcHJvcGVy
dHkgZ2V0dGVyIG1ldGhvZHMKICAgICBpbnQgbGluZUNsYW1wKCkgY29uc3QgeyByZXR1cm4gY3Nz
M05vbkluaGVyaXRlZERhdGEtPmxpbmVDbGFtcDsgfQogICAgIGJvb2wgdGV4dFNpemVBZGp1c3Qo
KSBjb25zdCB7IHJldHVybiBjc3MzSW5oZXJpdGVkRGF0YS0+dGV4dFNpemVBZGp1c3Q7IH0KLSNl
bmRpZgogCiAvLyBhdHRyaWJ1dGUgc2V0dGVyIG1ldGhvZHMKIApAQCAtMTQyOCw3ICsxNDE0LDYg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0TWluSGVpZ2h0KExlbmd0aCB2KSB7IFNFVF9WQVIoYm94
LG1pbl9oZWlnaHQsdikgfQogICAgIHZvaWQgc2V0TWF4SGVpZ2h0KExlbmd0aCB2KSB7IFNFVF9W
QVIoYm94LG1heF9oZWlnaHQsdikgfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIFFWYWx1ZUxp
c3Q8U3R5bGVEYXNoYm9hcmRSZWdpb24+IGRhc2hib2FyZFJlZ2lvbnMoKSBjb25zdCB7IHJldHVy
biBjc3MzTm9uSW5oZXJpdGVkRGF0YS0+bV9kYXNoYm9hcmRSZWdpb25zOyB9CiAgICAgdm9pZCBz
ZXREYXNoYm9hcmRSZWdpb25zKFFWYWx1ZUxpc3Q8U3R5bGVEYXNoYm9hcmRSZWdpb24+IHJlZ2lv
bnMpIHsgU0VUX1ZBUihjc3MzTm9uSW5oZXJpdGVkRGF0YSxtX2Rhc2hib2FyZFJlZ2lvbnMscmVn
aW9ucyk7IH0KICAgICB2b2lkIHNldERhc2hib2FyZFJlZ2lvbiAoaW50IHR5cGUsIFFTdHJpbmcg
bGFiZWwsIExlbmd0aCB0LCBMZW5ndGggciwgTGVuZ3RoIGIsIExlbmd0aCBsLCBib29sIGFwcGVu
ZCkgewpAQCAtMTQ0NCw3ICsxNDI5LDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGNz
czNOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2Rhc2hib2FyZFJlZ2lvbnMuYXBwZW5kIChy
ZWdpb24pOwogICAgIH0KLSNlbmRpZgogCiAgICAgdm9pZCByZXNldEJvcmRlcigpIHsgcmVzZXRC
b3JkZXJJbWFnZSgpOyByZXNldEJvcmRlclRvcCgpOyByZXNldEJvcmRlclJpZ2h0KCk7IHJlc2V0
Qm9yZGVyQm90dG9tKCk7IHJlc2V0Qm9yZGVyTGVmdCgpOyByZXNldEJvcmRlclJhZGl1cygpOyB9
CiAgICAgdm9pZCByZXNldEJvcmRlclRvcCgpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLnRv
cCwgQm9yZGVyVmFsdWUoKSkgfQpAQCAtMTYyNSwyMCArMTYwOSwxMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRNYXRjaE5lYXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yKEVNYXRjaE5lYXJlc3RNYWls
QmxvY2txdW90ZUNvbG9yIGMpICB7IFNFVF9WQVIoY3NzM05vbkluaGVyaXRlZERhdGEsIG1hdGNo
TmVhcmVzdE1haWxCbG9ja3F1b3RlQ29sb3IsIGMpOyB9CiAgICAgLy8gRW5kIENTUzMgU2V0dGVy
cwogICAgCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIC8vIEFwcGxlLXNwZWNpZmljIHByb3BlcnR5
IHNldHRlcnMKICAgICB2b2lkIHNldExpbmVDbGFtcChpbnQgYykgeyBTRVRfVkFSKGNzczNOb25J
bmhlcml0ZWREYXRhLCBsaW5lQ2xhbXAsIGMpOyB9CiAgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVz
dChib29sIGIpIHsgU0VUX1ZBUihjc3MzSW5oZXJpdGVkRGF0YSwgdGV4dFNpemVBZGp1c3QsIGIp
OyB9Ci0jZW5kaWYKIAotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgUVBhbGV0dGUgcGFsZXR0ZSgp
IGNvbnN0IHsgcmV0dXJuIHZpc3VhbC0+cGFsZXR0ZTsgfQotICAgIHZvaWQgc2V0UGFsZXR0ZUNv
bG9yKFFQYWxldHRlOjpDb2xvckdyb3VwIGcsIFFDb2xvckdyb3VwOjpDb2xvclJvbGUgciwgY29u
c3QgUUNvbG9yJiBjKTsKLSAgICB2b2lkIHJlc2V0UGFsZXR0ZSgpIC8vIENhbGxlZCB3aGVuIHRo
ZSBkZXNrdG9wIGNvbG9yIHNjaGVtZSBjaGFuZ2VzLgotICAgIHsKLSAgICAgICAgY29uc3RfY2Fz
dDxTdHlsZVZpc3VhbERhdGEgKj4odmlzdWFsLmdldCgpKS0+cGFsZXR0ZSA9IFFBcHBsaWNhdGlv
bjo6cGFsZXR0ZSgpOwotICAgIH0KLSNlbmRpZgogCiAgICAgQ29udGVudERhdGEqIGNvbnRlbnRE
YXRhKCkgeyByZXR1cm4gY29udGVudDsgfQogICAgIGJvb2wgY29udGVudERhdGFFcXVpdmFsZW50
KFJlbmRlclN0eWxlKiBvdGhlclN0eWxlKTsKQEAgLTE3NTAsMTMgKzE3MjQsMTEgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBFTWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvciBpbml0aWFsTWF0
Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcigpIHsgcmV0dXJuIEJDTk9STUFMOyB9CiAgICAg
c3RhdGljIEVBcHBlYXJhbmNlIGluaXRpYWxBcHBlYXJhbmNlKCkgeyByZXR1cm4gTm9BcHBlYXJh
bmNlOyB9CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8gS2VlcCB0aGVzZSBhdCB0aGUgZW5k
LgogICAgIHN0YXRpYyBpbnQgaW5pdGlhbExpbmVDbGFtcCgpIHsgcmV0dXJuIC0xOyB9CiAgICAg
c3RhdGljIGJvb2wgaW5pdGlhbFRleHRTaXplQWRqdXN0KCkgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHN0YXRpYyBjb25zdCBRVmFsdWVMaXN0PFN0eWxlRGFzaGJvYXJkUmVnaW9uPiYgaW5pdGlhbERh
c2hib2FyZFJlZ2lvbnMoKTsKICAgICBzdGF0aWMgY29uc3QgUVZhbHVlTGlzdDxTdHlsZURhc2hi
b2FyZFJlZ2lvbj4mIG5vbmVEYXNoYm9hcmRSZWdpb25zKCk7Ci0jZW5kaWYKIH07CiAKIApJbmRl
eDogcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTM3CmRpZmYgLXAgLXUgLXIxLjEzNyByZW5kZXJpbmcvcmVuZGVyX3RhYmxl
LmNwcAotLS0gcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAJMiBOb3YgMjAwNSAwODo1Mjo0NiAt
MDAwMAkxLjEzNworKysgcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAJMTEgTm92IDIwMDUgMTk6
MzQ6MDggLTAwMDAKQEAgLTkzNiwyOSArOTM2LDggQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246
OmFkZENlbGwoIFJlbmRlcgogICAgIC8vIDxUUj48VEQ+MSA8VEQgcm93c3Bhbj0iMiI+MiA8VEQ+
MyA8VEQ+NAogICAgIC8vIDxUUj48VEQgY29sc3Bhbj0iMiI+NQogICAgIC8vIDwvVEFCTEU+Ci0j
aWYgMAotICAgIC8vIGZpbmQgZW1wdHkgc3BhY2UgZm9yIHRoZSBjZWxsCi0gICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwotICAgIHdoaWxlICggIWZvdW5kICkgewotCWZvdW5kID0gdHJ1ZTsKLQl3aGls
ZSAoIGNDb2wgPCBuQ29scyAmJiBjZWxsQXQoIGNSb3csIGNDb2wgKSApCi0JICAgIGNDb2wrKzsK
LQlpbnQgcG9zID0gY0NvbDsKLQlpbnQgc3BhbiA9IDA7Ci0Jd2hpbGUgKCBwb3MgPCBuQ29scyAm
JiBzcGFuIDwgY1NwYW4gKSB7Ci0JICAgIGlmICggY2VsbEF0KCBjUm93LCBwb3MgKSApIHsKLQkJ
Zm91bmQgPSBmYWxzZTsKLQkJY0NvbCA9IHBvczsKLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAgc3Bh
biArPSBjb2x1bW5zW3Bvc10uc3BhbjsKLQkgICAgcG9zKys7Ci0JfQotICAgIH0KLSNlbHNlCiAg
ICAgd2hpbGUgKCBjQ29sIDwgbkNvbHMgJiYgY2VsbEF0KCBjUm93LCBjQ29sICkgKQogCWNDb2wr
KzsKLSNlbmRpZgogCiAvLyAgICAgICBxRGVidWcoImFkZGluZyBjZWxsIGF0ICVkLyVkIHNwYW49
KCVkLyVkKSIsICBjUm93LCBjQ29sLCByU3BhbiwgY1NwYW4gKTsKIApAQCAtOTc5LDEzICs5NTgs
NiBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbCggUmVuZGVyCiAJCSAgICBncmlk
W2NSb3ddLmhlaWdodCA9IGhlaWdodDsKIAkJYnJlYWs7CiAJICAgIGNhc2UgUmVsYXRpdmU6Ci0j
aWYgMAotCQkvLyB3ZSB0cmVhdCB0aGlzIGFzIHZhcmlhYmxlLiBUaGlzIGlzIGNvcnJlY3QgYWNj
b3JkaW5nIHRvIEhUTUw0LCBhcyBpdCBvbmx5IHNwZWNpZmllcyBsZW5ndGggZm9yIHRoZSBoZWln
aHQuCi0JCWlmICggY1Jvd0hlaWdodC50eXBlID09IEF1dG8gfHwKLQkJICAgICAoIGNSb3dIZWln
aHQudHlwZSA9PSBSZWxhdGl2ZSAmJiBjUm93SGVpZ2h0LnZhbHVlIDwgaGVpZ2h0LnZhbHVlICkg
KQotCQkgICAgIGdyaWRbY1Jvd10uaGVpZ2h0ID0gaGVpZ2h0OwotCQkgICAgIGJyZWFrOwotI2Vu
ZGlmCiAJICAgIGRlZmF1bHQ6CiAJCWJyZWFrOwogCSAgICB9CkluZGV4OiByZW5kZXJpbmcvcmVu
ZGVyX3RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX3RleHQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45MgpkaWZmIC1w
IC11IC1yMS45MiByZW5kZXJpbmcvcmVuZGVyX3RleHQuaAotLS0gcmVuZGVyaW5nL3JlbmRlcl90
ZXh0LmgJOCBOb3YgMjAwNSAwMDo0OTowOSAtMDAwMAkxLjkyCisrKyByZW5kZXJpbmcvcmVuZGVy
X3RleHQuaAkxMSBOb3YgMjAwNSAxOTozNDowOSAtMDAwMApAQCAtMjYwLDEyICsyNjAsMTAgQEAg
cHVibGljOgogICAgIAogICAgIHZpcnR1YWwgSW5saW5lQm94ICppbmxpbmVCb3goaW50IG9mZnNl
dCwgRUFmZmluaXR5IGFmZmluaXR5ID0gVVBTVFJFQU0pOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwog
ICAgIGludCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250ICosIGludCBzdGFydCwgaW50IGxlbiwg
aW50IHRhYldpZHRoLCBpbnQgeHBvcykgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRVc2VNb25vc3Bh
Y2VDYWNoZShjb25zdCBGb250ICopIGNvbnN0OwogICAgIHZvaWQgY2FjaGVXaWR0aHMoKTsKICAg
ICBib29sIGFsbEFzY2lpKCkgY29uc3Q7Ci0jZW5kaWYKIAogICAgIHZpcnR1YWwgaW50IGNhcmV0
TWluT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25z
dDsKQEAgLTI3Nyw5ICsyNzUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhdExpbmVXcmFwKElubGlu
ZVRleHRCb3ggKmJveCwgaW50IG9mZnNldCk7CiAgICAgYm9vbCBjb250YWluc1JldmVyc2VkVGV4
dCgpIHsgcmV0dXJuIG1fY29udGFpbnNSZXZlcnNlZFRleHQ7IH0KICAgICAKLSNpZiBBUFBMRV9D
SEFOR0VTCiBwdWJsaWM6Ci0jZW5kaWYKICAgICBJbmxpbmVUZXh0Qm94ICogZmluZE5leHRJbmxp
bmVUZXh0Qm94KCBpbnQgb2Zmc2V0LCBpbnQgJnBvcyApIGNvbnN0OwogCiBwcm90ZWN0ZWQ6IC8v
IG1lbWJlcnMKQEAgLTMwNywxMSArMzAzLDkgQEAgcHJvdGVjdGVkOiAvLyBtZW1iZXJzCiAgICAg
Ym9vbCBtX2NvbnRhaW5zUmV2ZXJzZWRUZXh0IDogMTsKIAogICAgIC8vIDIyIGJpdHMgbGVmdAot
I2lmIEFQUExFX0NIQU5HRVMKICAgICBtdXRhYmxlIGJvb2wgbV9hbGxBc2NpaUNoZWNrZWQ6MTsK
ICAgICBtdXRhYmxlIGJvb2wgbV9hbGxBc2NpaToxOwogICAgIGludCBtX21vbm9zcGFjZUNoYXJh
Y3RlcldpZHRoOwotI2VuZGlmCiB9OwogCiAvLyBVc2VkIHRvIHJlcHJlc2VudCBhIHRleHQgc3Vi
c3RyaW5nIG9mIGFuIGVsZW1lbnQsIGUuZy4sIGZvciB0ZXh0IHJ1bnMgdGhhdCBhcmUgc3BsaXQg
YmVjYXVzZSBvZgpJbmRleDogeG1sL2RvbV9kb2NpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjI2OApkaWZmIC1wIC11IC1yMS4yNjggeG1sL2RvbV9kb2NpbXBsLmNwcAot
LS0geG1sL2RvbV9kb2NpbXBsLmNwcAkxMSBOb3YgMjAwNSAwMjoxNTozNiAtMDAwMAkxLjI2OAor
KysgeG1sL2RvbV9kb2NpbXBsLmNwcAkxMSBOb3YgMjAwNSAxOTozNDowOSAtMDAwMApAQCAtODks
MTAgKzg5LDggQEAKIHVzaW5nIFhCTDo6WEJMQmluZGluZ01hbmFnZXI7CiAjZW5kaWYKIAotI2lm
IEFQUExFX0NIQU5HRVMKICNpbmNsdWRlICJLV1FBY2NPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUg
IktXUUxvZ2dpbmcuaCIKLSNlbmRpZgogCiAjaWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJkb21f
a2RvbWRvY3VtZW50d3JhcHBlci5oIgpAQCAtMzc0LDcgKzM3Miw2IEBAIERvY3VtZW50SW1wbDo6
RG9jdW1lbnRJbXBsKERPTUltcGxlbWVudGEKICNpZmRlZiBLSFRNTF9YU0xUCiAgICAgLCBtX3Ry
YW5zZm9ybVNvdXJjZSgwKQogI2VuZGlmCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICwgbV9maW5p
c2hlZFBhcnNpbmcodGhpcywgU0lHTkFMKGZpbmlzaGVkUGFyc2luZygpKSkKICAgICAsIG1faW5Q
YWdlQ2FjaGUoZmFsc2UpCiAgICAgLCBtX3NhdmVkUmVuZGVyZXIoMCkKQEAgLTM4Nyw3ICszODQs
NiBAQCBEb2N1bWVudEltcGw6OkRvY3VtZW50SW1wbChET01JbXBsZW1lbnRhCiAgICAgLCBtX2Rh
c2hib2FyZFJlZ2lvbnNEaXJ0eShmYWxzZSkKICAgICAsIG1fc2VsZk9ubHlSZWZDb3VudCgwKQog
ICAgICwgbV9zZWxlY3RlZFJhZGlvQnV0dG9ucygwKQotI2VuZGlmCiB7CiAgICAgZG9jdW1lbnQu
cmVzZXRTa2lwcGluZ1JlZih0aGlzKTsKIApAQCAtMzk3LDkgKzM5Myw3IEBAIERvY3VtZW50SW1w
bDo6RG9jdW1lbnRJbXBsKERPTUltcGxlbWVudGEKICAgICBtX3ZpZXcgPSB2OwogICAgIG1fcmVu
ZGVyQXJlbmEgPSAwOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogICAgIG1fYWNjQ2FjaGUgPSAwOwot
I2VuZGlmCiAgICAgCiAgICAgaWYgKCB2ICkgewogICAgICAgICBtX2RvY0xvYWRlciA9IG5ldyBE
b2NMb2FkZXIodi0+cGFydCgpLCB0aGlzICk7CkBAIC00OTEsMTAgKzQ4NSw4IEBAIHZvaWQgRG9j
dW1lbnRJbXBsOjpyZW1vdmVkTGFzdFJlZigpCiBEb2N1bWVudEltcGw6On5Eb2N1bWVudEltcGwo
KQogewogICAgIGFzc2VydCghbV9yZW5kZXIpOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICBhc3Nl
cnQoIW1faW5QYWdlQ2FjaGUpOwogICAgIGFzc2VydChtX3NhdmVkUmVuZGVyZXIgPT0gMCk7Ci0j
ZW5kaWYKICAgICAKICAgICBLSlM6OlNjcmlwdEludGVycHJldGVyOjpmb3JnZXRBbGxET01Ob2Rl
c0ZvckRvY3VtZW50KHRoaXMpOwogCkBAIC01MzYsMTIgKzUyOCwxMCBAQCBEb2N1bWVudEltcGw6
On5Eb2N1bWVudEltcGwoKQogICAgIGRlbGV0ZSBtX2JpbmRpbmdNYW5hZ2VyOwogI2VuZGlmCiAK
LSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYgKG1fYWNjQ2FjaGUpewogICAgICAgICBkZWxldGUg
bV9hY2NDYWNoZTsKICAgICAgICAgbV9hY2NDYWNoZSA9IDA7CiAgICAgfQotI2VuZGlmCiAgICAg
CiAgICAgaWYgKG1fZGVjb2Rlcil7CiAgICAgICAgIG1fZGVjb2Rlci0+ZGVyZWYoKTsKQEAgLTg2
NiwyNyArODU2LDcgQEAgdm9pZCBEb2N1bWVudEltcGw6OnVwZGF0ZVRpdGxlKCkKICAgICBpZiAo
IXApCiAgICAgICAgIHJldHVybjsKIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICBLV1EocCktPnNl
dFRpdGxlKG1fdGl0bGUpOwotI2Vsc2UKLSAgICBRU3RyaW5nIHRpdGxlU3RyID0gbV90aXRsZS5x
c3RyaW5nKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aXRsZVN0ci5sZW5ndGgoKTsgKytp
KQotICAgICAgICBpZiAodGl0bGVTdHJbaV0gPCAnICcpCi0gICAgICAgICAgICB0aXRsZVN0cltp
XSA9ICcgJzsKLSAgICB0aXRsZVN0ciA9IHRpdGxlU3RyLnN0cmlwV2hpdGVTcGFjZSgpOwotICAg
IHRpdGxlU3RyLmNvbXBvc2UoKTsKLSAgICBpZiAoICFwLT5wYXJlbnRQYXJ0KCkgKSB7Ci0JaWYg
KHRpdGxlU3RyLmlzTnVsbCgpIHx8IHRpdGxlU3RyLmlzRW1wdHkoKSkgewotCSAgICAvLyBlbXB0
eSB0aXRsZS4uLiBzZXQgd2luZG93IGNhcHRpb24gYXMgdGhlIFVSTAotCSAgICBLVVJMIHVybCA9
IG1fdXJsOwotCSAgICB1cmwuc2V0UmVmKFFTdHJpbmc6Om51bGwpOwotCSAgICB1cmwuc2V0UXVl
cnkoUVN0cmluZzo6bnVsbCk7Ci0JICAgIHRpdGxlU3RyID0gdXJsLnVybCgpOwotCX0KLQotCWVt
aXQgcC0+c2V0V2luZG93Q2FwdGlvbiggS1N0cmluZ0hhbmRsZXI6OmNzcXVlZXplKCB0aXRsZVN0
ciwgMTI4ICkgKTsKLSAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBEb2N1bWVudEltcGw6OnNldFRp
dGxlKERPTVN0cmluZyB0aXRsZSwgTm9kZUltcGwgKnRpdGxlRWxlbWVudCkKQEAgLTEwMjQsMTcg
Kzk5NCwxMyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhCiAJZm9u
dERlZi5mYW1pbHkgPSAqKGYuZmlyc3RGYW1pbHkoKSk7CiAJZm9udERlZi5pdGFsaWMgPSBmLml0
YWxpYygpOwogCWZvbnREZWYud2VpZ2h0ID0gZi53ZWlnaHQoKTsKLSNpZiBBUFBMRV9DSEFOR0VT
CiAgICAgICAgIGJvb2wgcHJpbnRpbmcgPSBtX3BhaW50RGV2aWNlICYmIChtX3BhaW50RGV2aWNl
LT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpQcmludGVyKTsKICAgICAgICAgZm9udERlZi51c2VQ
cmludGVyRm9udCA9IHByaW50aW5nOwotI2VuZGlmCiAgICAgICAgIGlmIChtX3ZpZXcpIHsKICAg
ICAgICAgICAgIGNvbnN0IEtIVE1MU2V0dGluZ3MgKnNldHRpbmdzID0gbV92aWV3LT5wYXJ0KCkt
PnNldHRpbmdzKCk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAgICAgaWYgKHByaW50aW5n
ICYmICFzZXR0aW5ncy0+c2hvdWxkUHJpbnRCYWNrZ3JvdW5kcygpKSB7CiAgICAgICAgICAgICAg
ICAgX3N0eWxlLT5zZXRGb3JjZUJhY2tncm91bmRzVG9XaGl0ZSh0cnVlKTsKICAgICAgICAgICAg
IH0KLSNlbmRpZgogICAgICAgICAgICAgUVN0cmluZyBzdGRmb250ID0gc2V0dGluZ3MtPnN0ZEZv
bnROYW1lKCk7CiAgICAgICAgICAgICBpZiAoICFzdGRmb250LmlzRW1wdHkoKSApIHsKICAgICAg
ICAgICAgICAgICBmb250RGVmLmZhbWlseS5zZXRGYW1pbHkoc3RkZm9udCk7CkBAIC0xMDkyLDEy
ICsxMDU4LDYgQEAgdm9pZCBEb2N1bWVudEltcGw6OnVwZGF0ZVJlbmRlcmluZygpCiAvLyAgICAg
a2REZWJ1ZygpIDw8ICJVUERBVEVSRU5ERVJJTkc6ICI8PGVuZGw7CiAKICAgICBTdHlsZUNoYW5n
ZSBjaGFuZ2UgPSBOb0NoYW5nZTsKLSNpZiAwCi0gICAgaWYgKCBtX3N0eWxlU2VsZWN0b3JEaXJ0
eSApIHsKLQlyZWNhbGNTdHlsZVNlbGVjdG9yKCk7Ci0JY2hhbmdlID0gRm9yY2U7Ci0gICAgfQot
I2VuZGlmCiAgICAgcmVjYWxjU3R5bGUoIGNoYW5nZSApOwogCiAvLyAgICBrZERlYnVnKCkgPDwg
IlVQREFURVJFTkRFUklORyB0aW1lIHVzZWQ9Ijw8dGltZS5lbGFwc2VkKCk8PGVuZGw7CkBAIC0x
MTQ4LDkgKzExMDgsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6dXBkYXRlTGF5b3V0SWdub3JlUGVu
CiB2b2lkIERvY3VtZW50SW1wbDo6YXR0YWNoKCkKIHsKICAgICBhc3NlcnQoIWF0dGFjaGVkKCkp
OwotI2lmIEFQUExFX0NIQU5HRVMKICAgICBhc3NlcnQoIW1faW5QYWdlQ2FjaGUpOwotI2VuZGlm
CiAKICAgICBpZiAoIG1fdmlldyApCiAgICAgICAgIHNldFBhaW50RGV2aWNlKCBtX3ZpZXcgKTsK
QEAgLTExODEsMTMgKzExMzksMTEgQEAgdm9pZCBEb2N1bWVudEltcGw6OmRldGFjaCgpCiAgICAg
Ly8gaW5kaWNhdGUgZGVzdHJ1Y3Rpb24gbW9kZSwgIGkuZS4gYXR0YWNoZWQoKSBidXQgbV9yZW5k
ZXIgPT0gMAogICAgIG1fcmVuZGVyID0gMDsKICAgICAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAg
aWYgKG1faW5QYWdlQ2FjaGUpIHsKICAgICAgICAgaWYgKCByZW5kZXIgKQogICAgICAgICAgICAg
Z2V0QWNjT2JqZWN0Q2FjaGUoKS0+ZGV0YWNoKHJlbmRlcik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0jZW5kaWYKIAogICAgIC8vIEVtcHR5IG91dCB0aGVzZSBsaXN0cyBhcyBhIHBlcmZvcm1h
bmNlIG9wdGltaXphdGlvbiwgc2luY2UgZGV0YWNoaW5nCiAgICAgLy8gYWxsIHRoZSBpbmRpdmlk
dWFsIHJlbmRlciBvYmplY3RzIHdpbGwgY2F1c2UgYWxsIHRoZSBSZW5kZXJJbWFnZQpAQCAtMTIz
OSw3ICsxMTk1LDYgQEAgdm9pZCBEb2N1bWVudEltcGw6OnJlbW92ZUFsbERpc2Nvbm5lY3RlZAog
ICAgIG1fZGlzY29ubmVjdGVkTm9kZXNXaXRoRXZlbnRMaXN0ZW5lcnMuY2xlYXIoKTsKIH0KIAot
I2lmIEFQUExFX0NIQU5HRVMKIEtXUUFjY09iamVjdENhY2hlKiBEb2N1bWVudEltcGw6OmdldEFj
Y09iamVjdENhY2hlKCkKIHsKICAgICAvLyBUaGUgb25seSBkb2N1bWVudCB0aGF0IGFjdHVhbGx5
IGhhcyBhIEtXUUFjY09iamVjdENhY2hlIGlzIHRoZSB0b3AtbGV2ZWwKQEAgLTEyNzYsNyArMTIz
MSw2IEBAIEtXUUFjY09iamVjdENhY2hlKiBEb2N1bWVudEltcGw6OmdldEFjY08KICAgICBtX2Fj
Y0NhY2hlID0gbmV3IEtXUUFjY09iamVjdENhY2hlOwogICAgIHJldHVybiBtX2FjY0NhY2hlOwog
fQotI2VuZGlmCiAKIHZvaWQgRG9jdW1lbnRJbXBsOjpzZXRWaXN1YWxseU9yZGVyZWQoKQogewpA
QCAtMTMwNSwxMyArMTI1OSwxMSBAQCB2b2lkIERvY3VtZW50SW1wbDo6dXBkYXRlU2VsZWN0aW9u
KCkKICAgICAgICAgfQogICAgIH0KICAgICAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8gc2Vu
ZCB0aGUgQVhTZWxlY3RlZFRleHRDaGFuZ2VkIG5vdGlmaWNhdGlvbiBvbmx5IGlmIHRoZSBuZXcg
c2VsZWN0aW9uIGlzIG5vbi1udWxsLAogICAgIC8vIGJlY2F1c2UgbnVsbCBzZWxlY3Rpb25zIGFy
ZSBvbmx5IHRyYW5zaXRvcnkgKGUuZy4gd2hlbiBzdGFydGluZyBhbiBFZGl0Q29tbWFuZCwgY3Vy
cmVudGx5KQogICAgIGlmIChLV1FBY2NPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSAmJiBzLnN0YXJ0KCkuaXNOb3ROdWxsKCkgJiYgcy5lbmQoKS5pc05vdE51bGwoKSkgewogICAg
ICAgICBnZXRBY2NPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uVG9Ub3BXZWJBcmVhKHJl
bmRlcmVyKCksICJBWFNlbGVjdGVkVGV4dENoYW5nZWQiKTsKICAgICB9Ci0jZW5kaWYKIAogfQog
CkBAIC0xNDYyLDEwICsxNDE0LDggQEAgdm9pZCBEb2N1bWVudEltcGw6OmltcGxpY2l0Q2xvc2Uo
KQogICAgICAgICBpZiAodmlldygpICYmIHJlbmRlcmVyKCkgJiYgKCFyZW5kZXJlcigpLT5maXJz
dENoaWxkKCkgfHwgcmVuZGVyZXIoKS0+bmVlZHNMYXlvdXQoKSkpCiAgICAgICAgICAgICB2aWV3
KCktPmxheW91dCgpOwogICAgIH0KLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYgKHJlbmRlcmVy
KCkgJiYgS1dRQWNjT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAg
IGdldEFjY09iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocmVuZGVyZXIoKSwgIkFYTG9h
ZENvbXBsZXRlIik7Ci0jZW5kaWYKIH0KIAogdm9pZCBEb2N1bWVudEltcGw6OnNldFBhcnNpbmco
Ym9vbCBiKQpAQCAtMTg1NSwxMiArMTgwNSw4IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpwcm9jZXNz
SHR0cEVxdWl2KGNvbnMKICAgICAgICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKICAgICAgICAgICAg
IGludCBkZWxheSA9IDA7CiAJICAgIGRlbGF5ID0gc3RyLnRvSW50KCZvayk7Ci0jaWYgQVBQTEVf
Q0hBTkdFUwogCSAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0aGUgcmVmcmVz
aCB0aW1lb3V0ID4gMSBzZWNvbmQKIAkgICAgaWYob2sgJiYgcGFydCkgcGFydC0+c2NoZWR1bGVS
ZWRpcmVjdGlvbihkZWxheSwgcGFydC0+dXJsKCkudXJsKCksIGRlbGF5IDw9IDEpOwotI2Vsc2UK
LQkgICAgaWYob2sgJiYgcGFydCkgcGFydC0+c2NoZWR1bGVSZWRpcmVjdGlvbihkZWxheSwgcGFy
dC0+dXJsKCkudXJsKCkgKTsKLSNlbmRpZgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ZG91YmxlIGRlbGF5ID0gMDsKICAgICAgICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKQEAgLTE4NzQs
MTIgKzE4MjAsOCBAQCB2b2lkIERvY3VtZW50SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zCiAg
ICAgICAgICAgICBpZiAoIHN0ci5sZW5ndGgoKSAmJiBzdHJbMF0gPT0gJz0nICkgc3RyID0gc3Ry
Lm1pZCggMSApLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAgICAgc3RyID0gcGFyc2VVUkwo
IERPTVN0cmluZyhzdHIpICkucXN0cmluZygpOwogICAgICAgICAgICAgaWYgKCBvayAmJiBwYXJ0
ICkKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCBhIG5ldyBo
aXN0b3J5IGl0ZW0gaWYgdGhlIHJlZnJlc2ggdGltZW91dCA+IDEgc2Vjb25kCiAgICAgICAgICAg
ICAgICAgcGFydC0+c2NoZWR1bGVSZWRpcmVjdGlvbihkZWxheSwgY29tcGxldGVVUkwoIHN0ciAp
LCBkZWxheSA8PSAxKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgcGFydC0+c2NoZWR1bGVSZWRp
cmVjdGlvbihkZWxheSwgY29tcGxldGVVUkwoIHN0ciApKTsKLSNlbmRpZgogICAgICAgICB9CiAg
ICAgfQogICAgIGVsc2UgaWYoc3RyY2FzZWNtcChlcXVpdiwgImV4cGlyZXMiKSA9PSAwKQpAQCAt
MjA0MywxMCArMTk4NSw2IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjp1cGRhdGVTdHlsZVNlbGVjdG9y
KCkKIAogICAgIHJlY2FsY1N0eWxlU2VsZWN0b3IoKTsKICAgICByZWNhbGNTdHlsZShGb3JjZSk7
Ci0jaWYgMAotCi0gICAgbV9zdHlsZVNlbGVjdG9yRGlydHkgPSB0cnVlOwotI2VuZGlmCiAKICNp
ZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCiAgICAgaWYgKCFvd25lckVsZW1lbnQo
KSkKQEAgLTIxOTYsNyArMjEzNCw2IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpzZXRBY3RpdmVOb2Rl
KE5vZGVJbXAKICAgICAgICAgbV9hY3RpdmVOb2RlID0gbmV3QWN0aXZlTm9kZTsKIH0KIAotI2lm
IEFQUExFX0NIQU5HRVMKIAogYm9vbCBEb2N1bWVudEltcGw6OnJlbGlucXVpc2hlc0VkaXRpbmdG
b2N1cyhOb2RlSW1wbCAqbm9kZSkKIHsKQEAgLTIyMzMsNyArMjE3MCw2IEBAIHZvaWQgRG9jdW1l
bnRJbXBsOjpzZXREYXNoYm9hcmRSZWdpb25zICgKICAgICBzZXREYXNoYm9hcmRSZWdpb25zRGly
dHkgKGZhbHNlKTsKIH0KIAotI2VuZGlmCiAKIHN0YXRpYyBRV2lkZ2V0ICp3aWRnZXRGb3JOb2Rl
KE5vZGVJbXBsICpmb2N1c05vZGUpCiB7CkBAIC0yMjU0LDEwICsyMTkwLDggQEAgYm9vbCBEb2N1
bWVudEltcGw6OnNldEZvY3VzTm9kZShOb2RlSW1wbAogICAgIGlmIChtX2ZvY3VzTm9kZSA9PSBu
ZXdGb2N1c05vZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwog
ICAgIGlmIChtX2ZvY3VzTm9kZSAmJiBtX2ZvY3VzTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAm
JiAhcmVsaW5xdWlzaGVzRWRpdGluZ0ZvY3VzKG1fZm9jdXNOb2RlLmdldCgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotI2VuZGlmICAgICAKICAgICAgICAKICAgICBib29sIGZvY3VzQ2hhbmdl
QmxvY2tlZCA9IGZhbHNlOwogICAgIFNoYXJlZFB0cjxOb2RlSW1wbD4gb2xkRm9jdXNOb2RlID0g
bV9mb2N1c05vZGU7CkBAIC0yMjk0LDEzICsyMjI4LDExIEBAIGJvb2wgRG9jdW1lbnRJbXBsOjpz
ZXRGb2N1c05vZGUoTm9kZUltcGwKICAgICB9CiAKICAgICBpZiAobmV3Rm9jdXNOb2RlKSB7Ci0j
aWYgQVBQTEVfQ0hBTkdFUyAgICAgICAgICAgIAogICAgICAgICBpZiAobmV3Rm9jdXNOb2RlLT5p
c0NvbnRlbnRFZGl0YWJsZSgpICYmICFhY2NlcHRzRWRpdGluZ0ZvY3VzKG5ld0ZvY3VzTm9kZSkp
IHsKICAgICAgICAgICAgIC8vIGRlbGVnYXRlIGJsb2NrcyBmb2N1cyBjaGFuZ2UKICAgICAgICAg
ICAgIGZvY3VzQ2hhbmdlQmxvY2tlZCA9IHRydWU7CiAgICAgICAgICAgICBnb3RvIFNldEZvY3Vz
Tm9kZURvbmU7CiAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICAvLyBTZXQgZm9jdXMgb24gdGhl
IG5ldyBub2RlCiAgICAgICAgIG1fZm9jdXNOb2RlID0gbmV3Rm9jdXNOb2RlOwogICAgICAgICBt
X2ZvY3VzTm9kZS0+ZGlzcGF0Y2hIVE1MRXZlbnQoZm9jdXNFdmVudCwgZmFsc2UsIGZhbHNlKTsK
QEAgLTIzNDAsMTAgKzIyNzIsOCBAQCBib29sIERvY3VtZW50SW1wbDo6c2V0Rm9jdXNOb2RlKE5v
ZGVJbXBsCiAgICAgICAgIH0KICAgIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICBpZiAoIWZv
Y3VzQ2hhbmdlQmxvY2tlZCAmJiBtX2ZvY3VzTm9kZSAmJiBLV1FBY2NPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgZ2V0QWNjT2JqZWN0Q2FjaGUoKS0+aGFuZGxl
Rm9jdXNlZFVJRWxlbWVudENoYW5nZWQoKTsKLSNlbmRpZgogCiBTZXRGb2N1c05vZGVEb25lOgog
ICAgIHVwZGF0ZVJlbmRlcmluZygpOwpAQCAtMjczNSw3ICsyNjY1LDYgQEAgSFRNTE1hcEVsZW1l
bnRJbXBsICpEb2N1bWVudEltcGw6OmdldEltYQogICAgIHJldHVybiAqaXQ7CiB9CiAKLSNpZiBB
UFBMRV9DSEFOR0VTCiAKIHZvaWQgRG9jdW1lbnRJbXBsOjpzZXREZWNvZGVyKERlY29kZXIgKmRl
Y29kZXIpCiB7CkBAIC0yODM1LDcgKzI3NjQsNiBAQCBET01TdHJpbmcgRG9jdW1lbnRJbXBsOjp0
b1N0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2VuZGlmIC8vIEFQUExF
X0NIQU5HRVMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gU3VwcG9ydCBmb3IgSmF2YXNj
cmlwdCBleGVjQ29tbWFuZCwgYW5kIHJlbGF0ZWQgbWV0aG9kcwpJbmRleDogeG1sL2RvbV9kb2Np
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2Rv
bV9kb2NpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM2CmRpZmYgLXAgLXUgLXIxLjEz
NiB4bWwvZG9tX2RvY2ltcGwuaAotLS0geG1sL2RvbV9kb2NpbXBsLmgJMTEgTm92IDIwMDUgMDI6
MTU6MzYgLTAwMDAJMS4xMzYKKysrIHhtbC9kb21fZG9jaW1wbC5oCTExIE5vdiAyMDA1IDE5OjM0
OjA5IC0wMDAwCkBAIC0zOSwxMCArMzksOCBAQAogCiAjaW5jbHVkZSA8a3VybC5oPgogCi0jaWYg
QVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgIktXUVNpZ25hbC5oIgogI2luY2x1ZGUgImRlY29kZXIu
aCIKLSNlbmRpZgogCiAjaW5jbHVkZSA8a3htbGNvcmUvSGFzaE1hcC5oPgogCkBAIC01Miw5ICs1
MCw3IEBAIGNsYXNzIEtIVE1MVmlldzsKIGNsYXNzIEtIVE1MUGFydDsKIGNsYXNzIFJlbmRlckFy
ZW5hOwogCi0jaWYgQVBQTEVfQ0hBTkdFUwogY2xhc3MgS1dRQWNjT2JqZWN0Q2FjaGU7Ci0jZW5k
aWYKIAogbmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yOwpAQCAt
MzE3LDkgKzMxMyw3IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSgp
IHsgcmV0dXJuIG1fcmVuZGVyQXJlbmE7IH0KIAotI2lmIEFQUExFX0NIQU5HRVMKICAgICBLV1FB
Y2NPYmplY3RDYWNoZSogZ2V0QWNjT2JqZWN0Q2FjaGUoKTsKLSNlbmRpZgogICAgIAogICAgIC8v
IHRvIGdldCB2aXN1YWxseSBvcmRlcmVkIGhlYnJldyBhbmQgYXJhYmljIHBhZ2VzIHJpZ2h0CiAg
ICAgdm9pZCBzZXRWaXN1YWxseU9yZGVyZWQoKTsKQEAgLTcwMyw5ICs2OTcsNyBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBRUHRyRGljdDwgUVZhbHVlTGlzdDxEb2N1bWVudE1hcmtlcj4gPiBtX21hcmtl
cnM7CiAKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgS1dRQWNjT2JqZWN0Q2FjaGUqIG1fYWNjQ2Fj
aGU7Ci0jZW5kaWYKICAgICAKICAgICBpbnQgbV9ldmVudERpc3BhdGNoRm9yYmlkZGVuOwogICAg
IFFQdHJMaXN0PEhUTUxJbWFnZUxvYWRlcj4gbV9pbWFnZUxvYWRFdmVudERpc3BhdGNoU29vbkxp
c3Q7CkBAIC03MzUsNyArNzI3LDYgQEAgcHJvdGVjdGVkOgogCiAgICAgaW50IG1fZG9jSUQ7IC8v
IEEgdW5pcXVlIGRvY3VtZW50IGlkZW50aWZpZXIgdXNlZCBmb3IgdGhpbmdzIGxpa2UgZG9jdW1l
bnQtc3BlY2lmaWMgbWFwcGVkIGF0dHJpYnV0ZXMuCiAKLSNpZiBBUFBMRV9DSEFOR0VTCiBwdWJs
aWM6CiAgICAgS1dRU2lnbmFsIG1fZmluaXNoZWRQYXJzaW5nOwogCkBAIC04MDgsNyArNzk5LDYg
QEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8RE9NU3RyaW5nSW1wbCosIEhUTUxJbnB1
dEVsZW1lbnRJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gTmFtZVRvSW5wdXRN
YXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEhUTUxGb3JtRWxlbWVudEltcGwqLCBOYW1lVG9JbnB1
dE1hcCosIFBvaW50ZXJIYXNoPEhUTUxGb3JtRWxlbWVudEltcGwqPiA+IEZvcm1Ub0dyb3VwTWFw
OwogICAgIEZvcm1Ub0dyb3VwTWFwKiBtX3NlbGVjdGVkUmFkaW9CdXR0b25zOwotI2VuZGlmCiB9
OwogCiBjbGFzcyBEb2N1bWVudEZyYWdtZW50SW1wbCA6IHB1YmxpYyBDb250YWluZXJOb2RlSW1w
bApJbmRleDogeG1sL2RvbV9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuOTAKZGlmZiAtcCAtdSAtcjEuOTAgeG1sL2RvbV9lbGVtZW50aW1wbC5jcHAK
LS0tIHhtbC9kb21fZWxlbWVudGltcGwuY3BwCTggTm92IDIwMDUgMDg6MTE6MTIgLTAwMDAJMS45
MAorKysgeG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MTAgLTAwMDAK
QEAgLTUyNiwyMCArNTI2LDYgQEAgdm9pZCBFbGVtZW50SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxl
Q2hhbgogICAgIFJlbmRlclN0eWxlKiBfc3R5bGUgPSBtX3JlbmRlciA/IG1fcmVuZGVyLT5zdHls
ZSgpIDogMDsKICAgICBib29sIGhhc1BhcmVudFJlbmRlcmVyID0gcGFyZW50KCkgPyBwYXJlbnQo
KS0+cmVuZGVyZXIoKSA6IGZhbHNlOwogICAgIAotI2lmIDAKLSAgICBjb25zdCBjaGFyKiBkZWJ1
ZzsKLSAgICBzd2l0Y2goY2hhbmdlKSB7Ci0gICAgY2FzZSBOb0NoYW5nZTogZGVidWcgPSAiTm9D
aGFuZ2UiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5vSW5oZXJpdDogZGVidWc9ICJOb0lu
aGVyaXQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEluaGVyaXQ6IGRlYnVnID0gIkluaGVy
aXQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvcmNlOiBkZWJ1ZyA9ICJGb3JjZSI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBxRGVidWcoInJlY2FsY1N0eWxlKCVkOiAlcylbJXA6
ICVzXSIsIGNoYW5nZSwgZGVidWcsIHRoaXMsIHRhZ05hbWUoKS5xc3RyaW5nKCkubGF0aW4xKCkp
OwotI2VuZGlmCiAgICAgaWYgKCBoYXNQYXJlbnRSZW5kZXJlciAmJiAoY2hhbmdlID49IEluaGVy
aXQgfHwgY2hhbmdlZCgpKSApIHsKICAgICAgICAgUmVuZGVyU3R5bGUgKm5ld1N0eWxlID0gZ2V0
RG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQodGhpcyk7CiAgICAg
ICAgIG5ld1N0eWxlLT5yZWYoKTsKSW5kZXg6IHhtbC9kb21fZWxlbWVudGltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBs
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTkKZGlmZiAtcCAtdSAtcjEuNTkgeG1sL2RvbV9l
bGVtZW50aW1wbC5oCi0tLSB4bWwvZG9tX2VsZW1lbnRpbXBsLmgJOCBOb3YgMjAwNSAwODoxMTox
MiAtMDAwMAkxLjU5CisrKyB4bWwvZG9tX2VsZW1lbnRpbXBsLmgJMTEgTm92IDIwMDUgMTk6MzQ6
MTAgLTAwMDAKQEAgLTMyLDExICszMiw5IEBACiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1ZWltcGwu
aCIKICNpbmNsdWRlICJkb21fcW5hbWUuaCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpZmRlZiBf
X09CSkNfXwogI2RlZmluZSBpZCBpZF9BVk9JRF9LRVlXT1JECiAjZW5kaWYKLSNlbmRpZgogCiAj
aW5jbHVkZSAiZG9tX2F0b21pY3N0cmluZ2xpc3QuaCIKIApAQCAtNDY4LDggKzQ2Niw2IEBAIHBy
b3RlY3RlZDoKIAogfTsgLy9uYW1lc3BhY2UKIAotI2lmIEFQUExFX0NIQU5HRVMKICN1bmRlZiBp
ZAotI2VuZGlmCiAKICNlbmRpZgpJbmRleDogeG1sL2RvbV9ub2RlaW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjA4CmRpZmYgLXAgLXUgLXIxLjIwOCB4bWwvZG9tX25v
ZGVpbXBsLmNwcAotLS0geG1sL2RvbV9ub2RlaW1wbC5jcHAJOCBOb3YgMjAwNSAwODoxMToxMiAt
MDAwMAkxLjIwOAorKysgeG1sL2RvbV9ub2RlaW1wbC5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MTAg
LTAwMDAKQEAgLTU4LDEzICs1OCw4IEBACiAjaW5jbHVkZSAieGJsL3hibF9iaW5kaW5nX21hbmFn
ZXIuaCIKICNlbmRpZgogCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPGt4bWxjb3JlL0Fz
c2VydGlvbnMuaD4KICNpbmNsdWRlICJLV1FMb2dnaW5nLmgiCi0jZWxzZQotI2RlZmluZSBBU1NF
UlQoYXNzZXJ0aW9uKSBhc3NlcnQoYXNzZXJ0aW9uKQotI2RlZmluZSBMT0coY2hhbm5lbCwgZm9y
bWF0QW5kQXJncy4uLikgKCh2b2lkKTApCi0jZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIGtodG1s
OwogCkBAIC05MDYsMTYgKzkwMSwxMCBAQCBib29sIE5vZGVJbXBsOjpkaXNwYXRjaEtleUV2ZW50
KFFLZXlFdmVuCiAgICAga2V5Ym9hcmRFdmVudEltcGwtPnJlZigpOwogICAgIGJvb2wgciA9IGRp
c3BhdGNoRXZlbnQoa2V5Ym9hcmRFdmVudEltcGwsZXhjZXB0aW9uY29kZSx0cnVlKTsKIAotI2lm
IEFQUExFX0NIQU5HRVMKICAgICAvLyB3ZSB3YW50IHRvIHJldHVybiBmYWxzZSBpZiBkZWZhdWx0
IGlzIHByZXZlbnRlZCAoYWxyZWFkeSB0YWtlbiBjYXJlIG9mKQogICAgIC8vIG9yIGlmIHRoZSBl
bGVtZW50IGlzIGRlZmF1bHQtaGFuZGxlZCBieSB0aGUgRE9NLiBPdGhlcndpc2Ugd2UgbGV0IGl0
IGp1c3QKICAgICAvLyBsZXQgaXQgZ2V0IGhhbmRsZWQgYnkgQXBwS2l0IAogICAgIGlmIChrZXli
b2FyZEV2ZW50SW1wbC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSNlbHNlCi0gICAgLy8gdGhlIGRlZmF1
bHQgZXZlbnQgaGFuZGxlciBzaG91bGQgYWNjZXB0KCkgdGhlIGludGVybmFsIFFLZXlFdmVudAot
ICAgIC8vIHRvIHByZXZlbnQgdGhlIHZpZXcgZnJvbSBmdXJ0aGVyIGV2YWx1YXRpbmcgaXQuCi0g
ICAgaWYgKCFrZXlib2FyZEV2ZW50SW1wbC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFrZXlib2Fy
ZEV2ZW50SW1wbC0+cUtleUV2ZW50LT5pc0FjY2VwdGVkKCkpCi0jZW5kaWYKICAgICAgIHIgPSBm
YWxzZTsKIAogICAgIGtleWJvYXJkRXZlbnRJbXBsLT5kZXJlZigpOwpAQCAtMTQxMywxMCArMTQw
Miw4IEBAIE5vZGVJbXBsICpOb2RlSW1wbDo6bmV4dExlYWZOb2RlKCkgY29uc3QKIHZvaWQgTm9k
ZUltcGw6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKQogewogCi0jaWYgQVBQTEVfQ0hBTkdFUwog
ICAgIGlmICghZ2V0RG9jdW1lbnQoKS0+c2hvdWxkQ3JlYXRlUmVuZGVyZXJzKCkpCiAgICAgICAg
IHJldHVybjsKLSNlbmRpZgogICAgICAgICAKICAgICBhc3NlcnQoIWF0dGFjaGVkKCkpOwogICAg
IGFzc2VydCghbV9yZW5kZXIpOwpJbmRleDogeG1sL2RvbV9wb3NpdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODEKZGlmZiAtcCAtdSAtcjEuODEgeG1sL2RvbV9wb3Np
dGlvbi5jcHAKLS0tIHhtbC9kb21fcG9zaXRpb24uY3BwCTggT2N0IDIwMDUgMDA6NTA6MzAgLTAw
MDAJMS44MQorKysgeG1sL2RvbV9wb3NpdGlvbi5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MTAgLTAw
MDAKQEAgLTQ3LDEzICs0Nyw4IEBACiAjaW5jbHVkZSAiZWRpdGluZy92aXNpYmxlX3RleHQuaCIK
ICNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxr
eG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSAiS1dRTG9nZ2luZy5oIgotI2Vsc2UKLSNk
ZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKLSNkZWZpbmUgTE9HKGNo
YW5uZWwsIGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQotI2VuZGlmCiAKIHVzaW5nIGtodG1s
OjpFQWZmaW5pdHk7CiB1c2luZyBraHRtbDo6SW5saW5lQm94OwpJbmRleDogeG1sL2RvbV90ZXh0
aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9k
b21fdGV4dGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC1wIC11IC1yMS4y
MSB4bWwvZG9tX3RleHRpbXBsLmgKLS0tIHhtbC9kb21fdGV4dGltcGwuaAk4IE5vdiAyMDA1IDA4
OjExOjEzIC0wMDAwCTEuMjEKKysrIHhtbC9kb21fdGV4dGltcGwuaAkxMSBOb3YgMjAwNSAxOToz
NDoxMCAtMDAwMApAQCAtMzAsMTAgKzMwLDggQEAKIG5hbWVzcGFjZSBET00gewogCiAgICAgY2xh
c3MgRG9jdW1lbnRJbXBsOwotI2lmIEFQUExFX0NIQU5HRVMKICAgICBjbGFzcyBDaGFyYWN0ZXJE
YXRhOwogICAgIGNsYXNzIFRleHQ7Ci0jZW5kaWYKIAogY2xhc3MgQ2hhcmFjdGVyRGF0YUltcGwg
OiBwdWJsaWMgTm9kZUltcGwKIHsKSW5kZXg6IHhtbC9kb21feG1saW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21feG1saW1wbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1IHhtbC9kb21feG1saW1wbC5o
Ci0tLSB4bWwvZG9tX3htbGltcGwuaAk4IE5vdiAyMDA1IDA4OjExOjE0IC0wMDAwCTEuMTUKKysr
IHhtbC9kb21feG1saW1wbC5oCTExIE5vdiAyMDA1IDE5OjM0OjEwIC0wMDAwCkBAIC0zNSw5ICsz
NSw3IEBAIG5hbWVzcGFjZSBET00gewogCiBjbGFzcyBEb2N1bWVudEltcGw7CiBjbGFzcyBET01T
dHJpbmc7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uOwot
I2VuZGlmCiAKIGNsYXNzIEVudGl0eUltcGwgOiBwdWJsaWMgQ29udGFpbmVyTm9kZUltcGwKIHsK
SW5kZXg6IHhtbC94bWxfdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNTEKZGlmZiAtcCAtdSAtcjEuNTEgeG1sL3htbF90b2tlbml6ZXIuY3BwCi0tLSB4bWwv
eG1sX3Rva2VuaXplci5jcHAJOCBOb3YgMjAwNSAwODoxMToxNCAtMDAwMAkxLjUxCisrKyB4bWwv
eG1sX3Rva2VuaXplci5jcHAJMTEgTm92IDIwMDUgMTk6MzQ6MTAgLTAwMDAKQEAgLTUyLDE3ICs1
MiwxMyBAQCBjb25zdCBpbnQgbWF4RXJyb3JzID0gMjU7CiB0eXBlZGVmIEhhc2hNYXA8RE9NU3Ry
aW5nSW1wbCAqLCBET01TdHJpbmdJbXBsICo+IFByZWZpeEZvck5hbWVzcGFjZU1hcDsKIAogVG9r
ZW5pemVyOjpUb2tlbml6ZXIoKSA6IG1fcGFyc2VyU3RvcHBlZChmYWxzZSkKLSNpZiBBUFBMRV9D
SEFOR0VTCiAgICAgLCBtX2ZpbmlzaGVkUGFyc2luZyh0aGlzLCBTSUdOQUwoZmluaXNoZWRQYXJz
aW5nKCkpKQotI2VuZGlmCiB7CiB9CiAKIHZvaWQgVG9rZW5pemVyOjpmaW5pc2hlZFBhcnNpbmco
KQogewotI2lmIEFQUExFX0NIQU5HRVMKICAgICBtX2ZpbmlzaGVkUGFyc2luZy5jYWxsKCk7Ci0j
ZW5kaWYKIH0KIAogY2xhc3MgWE1MVG9rZW5pemVyIDogcHVibGljIFRva2VuaXplciwgcHVibGlj
IENhY2hlZE9iamVjdENsaWVudApAQCAtNDMwLDI1ICs0MjYsMTIgQEAgdm9pZCBYTUxUb2tlbml6
ZXI6OmVycm9yKEVycm9yVHlwZSB0eXBlLAogICAgICAgICBRU3RyaW5nIGZvcm1hdDsKICAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICAgICBjYXNlIHdhcm5pbmc6Ci0jaWYgQVBQTEVf
Q0hBTkdFUwogICAgICAgICAgICAgICAgIGZvcm1hdCA9IFFTdHJpbmcoIndhcm5pbmcgb24gbGlu
ZSAlMiBhdCBjb2x1bW4gJTM6ICUxIik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGZvcm1hdCA9
IGkxOG4oICJ3YXJuaW5nOiAlMSBpbiBsaW5lICUyLCBjb2x1bW4gJTNcbiIgKTsKLSNlbmRpZgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBmYXRhbDoKLSNpZiBBUFBM
RV9DSEFOR0VTCiAgICAgICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCi0jZWxzZQotICAgICAg
ICAgICAgICAgIGZvcm1hdCA9IGkxOG4oICJmYXRhbCBlcnJvcjogJTEgaW4gbGluZSAlMiwgY29s
dW1uICUzXG4iICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAgICAgICAgIGZvcm1hdCA9IFFT
dHJpbmcoImVycm9yIG9uIGxpbmUgJTIgYXQgY29sdW1uICUzOiAlMSIpOwotI2Vsc2UKLSAgICAg
ICAgICAgICAgICBmb3JtYXQgPSBpMThuKCAiZXJyb3I6ICUxIGluIGxpbmUgJTIsIGNvbHVtbiAl
M1xuIiApOwotI2VuZGlmCiAgICAgICAgIH0KIAogICAgICAgICBjaGFyICptOwpJbmRleDogeG1s
L3htbF90b2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC94bWwveG1sX3Rva2VuaXplci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIyCmRpZmYg
LXAgLXUgLXIxLjIyIHhtbC94bWxfdG9rZW5pemVyLmgKLS0tIHhtbC94bWxfdG9rZW5pemVyLmgJ
OCBOb3YgMjAwNSAwODoxMToxNCAtMDAwMAkxLjIyCisrKyB4bWwveG1sX3Rva2VuaXplci5oCTEx
IE5vdiAyMDA1IDE5OjM0OjEwIC0wMDAwCkBAIC0yOCw5ICsyOCw3IEBACiAjaW5jbHVkZSA8cW1h
cC5oPgogI2luY2x1ZGUgIm1pc2Mvc3RyaW5naXQuaCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNp
bmNsdWRlICJLV1FTaWduYWwuaCIKLSNlbmRpZgogCiBjbGFzcyBLSFRNTFZpZXc7CiAKQEAgLTc2
LDEwICs3NCw4IEBAIHB1YmxpYzoKIHNpZ25hbHM6CiAgICAgdm9pZCBmaW5pc2hlZFBhcnNpbmco
KTsKIAotI2lmIEFQUExFX0NIQU5HRVMKIHByaXZhdGU6CiAgICAgS1dRU2lnbmFsIG1fZmluaXNo
ZWRQYXJzaW5nOwotI2VuZGlmCiB9OwogCiBUb2tlbml6ZXIgKm5ld1hNTFRva2VuaXplcihET006
OkRvY3VtZW50SW1wbCAqLCBLSFRNTFZpZXcgKiA9IDApOwo=
</data>
<flag name="review"
          id="848"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4668</attachid>
            <date>2005-11-11 11:36:48 -0800</date>
            <delta_ts>2005-11-11 11:36:48 -0800</delta_ts>
            <desc>cleanup script</desc>
            <filename>remove-apple-changes.pl</filename>
            <type>text/x-perl-script</type>
            <size>351</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsIC13Cm15ICR0ZXN0RGlyZWN0b3J5ID0gJy4nOwpteSBAZmlsZXM7CnB1
c2ggQGZpbGVzLCBtYXAgeyBjaG9tcDsgcy1eJHRlc3REaXJlY3RvcnkvLS07ICRfOyB9IGBmaW5k
IC1FICR0ZXN0RGlyZWN0b3J5IC1yZWdleCAnLipcXC4oaHxjcHApJyAtcHJpbnRgOwpmb3IgbXkg
JGZpbGUgKEBmaWxlcykKewoJcHJpbnQgIiRmaWxlXG4iOwoJKHN5c3RlbSgiLi9wYXJ0cHAucGwg
LURBUFBMRV9DSEFOR0VTICRmaWxlID4gJGZpbGUudGVtcCIpID09IDApIG9yIGRpZSAiRmFpbGVk
IHRvIHJ1biBQYXJ0aWFsIHByZXByb2Nlc3NvciBvbiAkZmlsZSI7CglgbXYgJGZpbGUudGVtcCAk
ZmlsZWA7Cn0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4669</attachid>
            <date>2005-11-11 11:37:14 -0800</date>
            <delta_ts>2005-11-20 17:17:33 -0800</delta_ts>
            <desc>A hacked version of the partial preprocessor</desc>
            <filename>partpp.pl</filename>
            <type>text/x-perl-script</type>
            <size>17950</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsIC13DQojDQojICBQYXJ0aWFsIFByZXByb2Nlc3Nvcg0KIw0KIyAgVGhp
cyBwcm9ncmFtIHByb2Nlc3NlcyBDIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMsIGVsaW1pbmF0
aW5nDQojICBjb25kaXRpb25zIGtub3duIHRvIGJlIHRydWUgb3IgZmFsc2UuIFRoaXMgY2FuIGJl
IHVzZWQgdG8gc2ltcGxpZnkNCiMgICNpZmRlZi1yaWRkZW4gY29kZS4gVGhpcyBwcm9ncmFtIGF0
dGVtcHRzIHRvIGJlIHNtYXJ0IGFib3V0IGNvbXBsZXgNCiMgIGNvbmRpdGlvbnMuIEZvciBleGFt
cGxlLA0KIyAgICAgICNpZiBkZWZpbmVkKGZvbykgJiYgZGVmaW5lZChiYXIpIHx8IGRlZmluZWQo
aHVoKQ0KIyAgaXMgcmVwbGFjZWQgYnkNCiMgICAgICAjaWYgZGVmaW5lZChodWgpDQojICB3aGVu
IHdlIGtub3cgdGhhdCBmb28gaXMgZGVmaW5lZCBhbmQgYmFyIGlzIG5vdC4gRm9yIGFub3RoZXIg
ZXhhbXBsZSwNCiMgICAgICBwYXJ0cHAgLVVfX1dJTjMyX18NCiMgIHdvdWxkIGVsaW1pbmF0ZSBh
bGwgV2luMzItc3BlY2lmaWMgY29kZSBmcm9tIGEgZ2l2ZW4gc291cmNlIGNvZGUuDQojDQojICBQ
YXJhbWV0ZXJzOg0KIyAgICAtRHN5bSAgICB3ZSBrbm93IHRoYXQgc3ltIGlzIGRlZmluZWQNCiMg
ICAgLVVzeW0gICAgd2Uga25vdyB0aGF0IHN5bSBpcyBub3QgZGVmaW5lZA0KIyAgICAtQyAgICAg
ICBhc3N1bWUgdGhhdCB1c2VyIHdyb3RlICJjbGVhbiIgY29kZSwgdGhhdCBpcywgYWxsDQojICAg
ICAgICAgICAgIG9iamVjdC1saWtlIG1hY3JvcyBiZWhhdmUgYXMgb2JqZWN0cw0KIyAgICAtZCAg
ICAgICBwcm9jZXNzICNkZWZpbmUvI3VuZGVmIGRpcmVjdGl2ZXMgaW4gb3JkZXIgdG8NCiMgICAg
ICAgICAgICAga2VlcCBvdXIgZGljdGlvbmFyeSB1cC10by1kYXRlLg0KIyAgICAtZiAgICAgICBm
b3JjZSBzaW1wbGlmeSBleHByZXNzaW9ucyBldmVuIHdoZW4gdGhleSBkb24ndCBjb250YWluDQoj
ICAgICAgICAgICAgIGFueSBvZiBvdXIgc3ltYm9scw0KIyAgICAtZWV4cHIgICBldmFsdWF0ZSBl
eHByZXNzaW9uIGFuZCBwcmludCBzaW1wbGlmaWVkIHZlcnNpb24NCiMNCiMgIFRoZSAtQyBvcHRp
b24gZGVzZXJ2ZXMgZXhwbGFuYXRpb246IGFzc3VtZSB0aGUgZm9sbG93aW5nOg0KIyAgICAgICAj
ZGVmaW5lIFggMCkgLSAoMQ0KIyAgICAgICAjaWYgKGRlZmluZWQoZm9vKSB8fCBYKQ0KIyAgQXNz
dW1pbmcgZm9vIGlzIGRlZmluZWQsIHRoZSAjaWYgZXhwcmVzc2lvbiB3b3VsZCBiZSBlcXVpdmFs
ZW50IHRvDQojICAgICAgICNpZiAoMSB8fCBYKQ0KIyAgd2hpY2ggaXMgYXQgZmlyc3Qgc2lnaHQg
ZXF1aXZhbGVudCB0bw0KIyAgICAgICAjaWYgKFgpDQojICB3aGljaCBpcyBlcXVhbCB0byAiI2lm
IC0xIiBpLmUuIHRydWUuIEhvd2V2ZXIsIHRoZSBvcmlnaW5hbA0KIyAgZXhwcmVzc2lvbiBpcyAi
I2lmICgxIHx8IDApIC0gKDEpIiB3aGljaCBpcyBmYWxzZS4gVG8gZ3VhcmFudGVlDQojICBjb3Jy
ZWN0bmVzcywgd2UgYXNzdW1lIHRoYXQgdGhpcyBjYW4gaGFwcGVuLCBhbmQgcGFzcyB0aHJvdWdo
DQojICBleHByZXNzaW9ucyBjb250YWluaW5nICJyYXciIG1hY3JvIG5hbWVzIHVuY2hhbmdlZC4g
V2l0aCAtQywgd2UNCiMgIGFzc3VtZSB1c2VyIGRvZXNuJ3Qgd3JpdGUgc3VjaCBoYWNrcyAodGhh
dCBpcywgYWxsIG5vbi1mdW5jdGlvbg0KIyAgbWFjcm9zIGFyZSBwcm9wZXJseSBwYXJlbnRoZXNp
emVkIGV4cHJlc3Npb25zKSwgYW5kIHdvdWxkIHJlcGxhY2UNCiMgIHRoZSBzdGFydGluZyBleHBy
ZXNzaW9uIHdpdGggIihYKSIuDQojDQojICBXaXRoIC1mLCB0aGlzIHByb2dyYW0gc2ltcGxpZmll
cyBleHByZXNzaW9ucyBldmVuIGlmIHRoZXkgZG9uJ3QNCiMgIGNvbnRhaW4gb25lIG9mIG91ciBz
eW1ib2xzLiBGb3IgZXhhbXBsZSwgd2l0aCAtZiwNCiMgICAgICAgI2lmIDEgfHwgMg0KIyAgaXMg
c2ltcGxpZmllZCB0byAiI2lmIDEiLiBCZWNhdXNlIHBhcnRwcCBjb21wdXRlcyBpbiBkZWNpbWFs
IChhbmQNCiMgIHRodXMgbWFrZXMgY29kZSBjb250YWluaW5nIGhleC9vY3QgY29tcHV0YXRpb25z
IGxlc3MgcmVhZGFibGUpLA0KIyAgdGhpcyBpcyBub3JtYWxseSBub3QgZG9uZSBvbiB1bnJlbGF0
ZWQgZXhwcmVzc2lvbnMuDQojDQojICBCdWdzOg0KIyAgLSB3aGVuIHdlIG1vZGlmeSBhIGNvbmRp
dGlvbmFsIGxpbmUsIGNvbW1lbnRzIGdldCBsb3N0DQojICAtIHJlc3VsdHMgbWF5IGJlIGluY29y
cmVjdCBpZiBhbiAjaW5jbHVkZSBmaWxlICN1bmRlZidzIG9yDQojICAgICNkZWZpbmUncyBhIHN5
bWJvbCBwYXNzZWQgaW4gYnkgLUQvLVUuIFRoZSAtZCBvcHRpb24gbWF5IG1ha2UNCiMgICAgdGhp
cyBldmVuIHdvcnNlLg0KIyAgLSAjZWxpZiBpcyBub3Qgc3VwcG9ydGVkDQojICAtIGAjaWYgMCcg
YW5kIGAjaWYgMScgYXJlIGVsaW1pbmF0ZWQgZXZlbiB3aGVuIC1mIGlzIG5vdCBzcGVjaWZpZWQN
CiMNCiMgIChjKSAyMDAyIGJ5IFN0ZWZhbiBSZXV0aGVyDQojDQoNCnVzZSBzdHJpY3Q7DQp1c2Ug
dmFycyBxd3sgJWRlZmluZWQgQGZpbGVzICRvcHRfb3B0aW1pc3RpYyAkb3B0X2RlZmluZXMgQGV4
cHJzDQogICAgICAgICAgICAgICAgICRvcHRfZm9yY2UNCiAgICAgICAgICAgICAgICAgJHNlZW5f
ZGVmaW5lZCB9Ow0KDQokb3B0X29wdGltaXN0aWMgPSAwOw0KJG9wdF9kZWZpbmVzID0gMDsNCiRv
cHRfZm9yY2UgPSAwOw0KDQpteSAkYWxsb3dfY2MgPSAwOw0KDQpmb3JlYWNoIChAQVJHVikgew0K
ICAgIGlmICgvXi0tYmVnaW4kLykgew0KICAgICAgICAkYWxsb3dfY2MgPSAxOw0KICAgIH0gZWxz
aWYgKC9eLS1lbmQkLykgew0KICAgICAgICAkYWxsb3dfY2MgPSAwOw0KICAgIH0gZWxzaWYgKC9e
LUQoLispLykgew0KICAgICAgICAkZGVmaW5lZHskMX0gPSAxOw0KICAgIH0gZWxzaWYgKC9eLVUo
LispLykgew0KICAgICAgICAkZGVmaW5lZHskMX0gPSAwOw0KICAgIH0gZWxzaWYgKCEkYWxsb3df
Y2MgJiYgL14tQyQvKSB7DQogICAgICAgICRvcHRfb3B0aW1pc3RpYyA9IDE7DQogICAgfSBlbHNp
ZiAoISRhbGxvd19jYyAmJiAvXi1kJC8pIHsNCiAgICAgICAgJG9wdF9kZWZpbmVzID0gMTsNCiAg
ICB9IGVsc2lmICghJGFsbG93X2NjICYmIC9eLWYkLykgew0KICAgICAgICAkb3B0X2ZvcmNlID0g
MTsNCiAgICB9IGVsc2lmICghJGFsbG93X2NjICYmIC9eLWUoLiopLykgew0KICAgICAgICBwdXNo
IEBleHBycywgJDE7DQogICAgfSBlbHNpZiAoL14taCQvIHx8IC9eLS0/aGVscCQvKSB7DQogICAg
ICAgIHByaW50ICIkMCAtIHBhcnRpYWwgcHJlcHJvY2Vzc29yDQoNCnVzYWdlOiAkMCBbLURzeW0u
Li5dIFstVXN5bS4uLl0gWy1DXSBbLWRdIFstZl0gWy1ofC0taGVscF0gW2ZpbGVzLi4uXQ0KDQot
RHN5bSAgICAgIGRlZmluZSBhIHN5bWJvbA0KLVVzeW0gICAgICB1bmRlZmluZSBhIHN5bWJvbA0K
LUMgICAgICAgICBhc3N1bWUgJ2NsZWFuJyBjb2RlIChkZXRhaWxlZCBpbmZvIGluIHNvdXJjZSBj
b2RlKQ0KLWQgICAgICAgICBwcm9jZXNzICNkZWZpbmUvI3VuZGVmIGxpbmVzDQotZiAgICAgICAg
IGZvcmNlIHNpbXBsaWZ5DQoNCkMgY29tcGlsZXIgb3B0aW9ucyBjYW4gYmUgcGFzc2VkIGluIC0t
YmVnaW4gLS1lbmQsIHN1Y2ggYXMNCiAgJDAgLS1iZWdpbiAtRHN5bSAtRHN5bSAtSWRpciAtTGRp
ciAtbGxpYiAtLWVuZCBmaWxlLmMNClwodGhpcyBwcm9ncmFtIHdpbGwgdGhlbiBpZ25vcmUgb3B0
aW9ucyBpdCBkb2Vzbid0IGtub3cpLg0KDQpJZiBubyBmaWxlcyBzcGVjaWZpZWQsIHByb2Nlc3Nl
cyBzdGRpbi4gT3V0cHV0IGFsd2F5cyBnb2VzIHRvIHN0ZG91dC4NCg0KXChjKSAyMDAyIFN0ZWZh
biBSZXV0aGVyIDxTdHJldVxAZ214LmRlPi5cbiI7DQogICAgICAgIGV4aXQgMDsNCiAgICB9IGVs
c2Ugew0KICAgICAgICBpZiAoJF8gPX4gL14tLyAmJiAkXyBuZSAnLScpIHsNCiAgICAgICAgICAg
IGRpZSAiYmFkIHBhcmFtZXRlciBgJF8nXG4iDQogICAgICAgICAgICAgICAgdW5sZXNzICRhbGxv
d19jYzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHB1c2ggQGZpbGVzLCAkXzsNCg0K
ICAgICAgICB9DQogICAgfQ0KfQ0KcHVzaCBAZmlsZXMsICItIiBpZiAhQGZpbGVzICYmICFAZXhw
cnM7DQoNCm15ICRleGl0ID0gMDsNCmZvcmVhY2ggKEBleHBycykgew0KICAgIHByaW50ICRfLCAi
OlxuLSAiLCBldmFsX2V4cHIoJF8pLCAiXG4iOw0KfQ0KZm9yZWFjaCAoQGZpbGVzKSB7DQogICAg
aWYgKCRfIGVxICctJykgew0KICAgICAgICBwcm9jZXNzIChcKlNURElOLCBcKlNURE9VVCk7DQog
ICAgfSBlbHNlIHsNCiAgICAgICAgb3BlbiBJTiwgIjwgJF8iIG9yIGRvIHsgcHJpbnQgU1RERVJS
ICIkXzogJCFcbiI7ICRleGl0PTE7IG5leHQ7IH07DQogICAgICAgIHByb2Nlc3MgKFwqSU4sIFwq
U1RET1VUKTsNCiAgICAgICAgY2xvc2UgSU47DQogICAgfQ0KfQ0KZXhpdCAkZXhpdDsNCg0KIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIHByb2Nlc3MgIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjDQoNCiMgcHJvY2VzcyAoaW5mZCwgb3V0ZmQpDQojIC0gcHJvY2VzcyBv
bmUgZmlsZS4gVGhpcyBpcyB0aGUgZW5naW5lIG9mIHRoZSBwcm9ncmFtLg0Kc3ViIHByb2Nlc3Mg
ew0KICAgIG15ICgkaW4sICRvdXQpID0gQF87DQogICAgbXkgJHRvdGFsOw0KICAgIG15IEBpZnN0
YWNrOw0KICAgIG15ICRvdXRfZW5hYmxlZCA9IDE7DQogICAgIyBsaW5lIGxvb3ANCiBMSU5FOg0K
ICAgIHdoaWxlICgxKSB7DQogICAgICAgICMgcmVhZCBvbmUgInZpcnR1YWwiIGxpbmUNCiAgICAg
ICAgJHRvdGFsID0gIiI7DQogICAgICAgIGRvIHsNCiAgICAgICAgICAgIG15ICRsaW5lID0gPCRp
bj47DQogICAgICAgICAgICBpZiAoIWRlZmluZWQgJGxpbmUpIHsNCiAgICAgICAgICAgICAgICBs
YXN0IExJTkUgaWYgJHRvdGFsIGVxICcnOw0KICAgICAgICAgICAgICAgIGRpZSAiJF86JC46IHVu
dGVybWluYXRlZCBjb21tZW50XG4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgd2hpbGUg
KCRsaW5lID1+IC9cXFxuJC8pIHsNCiAgICAgICAgICAgICAgICBteSAkbmV4dCA9IDwkaW4+Ow0K
ICAgICAgICAgICAgICAgIGRpZSAiJF86JC46IHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVcbiIgaWYg
bm90IGRlZmluZWQgJG5leHQ7DQogICAgICAgICAgICAgICAgJGxpbmUgLj0gJG5leHQ7DQogICAg
ICAgICAgICB9DQogICAgICAgICAgICAkbGluZSA9fiBzL1whQVBQTEVfQ0hBTkdFUy8wLzsNCiAg
ICAgICAgICAgICRsaW5lID1+IHMvQVBQTEVfQ0hBTkdFUy8xLzsNCiAgICAgICAgICAgICR0b3Rh
bCAuPSAkbGluZTsNCiAgICAgICAgfSB3aGlsZSAoISBpc19jb21wbGV0ZSgkdG90YWwpKTsNCg0K
ICAgICAgICAjIHJlbW92ZSBjb21tZW50cyB0byBzZWUgaWYgaXQncyBhIHBwIGNvbW1hbmQNCiAg
ICAgICAgbXkgJHNpbmdsZV9saW5lID0gJHRvdGFsOyAkc2luZ2xlX2xpbmUgPX4gcy9cXFxuLy9z
ZzsNCiAgICAgICAgbXkgJGNvbW1hbmQgPSAiIjsNCiAgICAgICAgd2hpbGUgKDEpIHsNCiAgICAg
ICAgICAgIGxhc3QgaWYgJHNpbmdsZV9saW5lID1+IG0vXEckL3NnYzsNCiAgICAgICAgICAgIGlm
ICgkc2luZ2xlX2xpbmUgPX4gbXtcRyhbXlwiXCcvXSspfXNnYw0KICAgICAgICAgICAgICAgICB8
fCAkc2luZ2xlX2xpbmUgPX4gbXtcRygnKFteXCdcXF18XFwuKSonKX1zZ2MNCiAgICAgICAgICAg
ICAgICAgfHwgJHNpbmdsZV9saW5lID1+IG17XEcoIihbXlwiXFxdfFxcLikqIil9c2djDQogICAg
ICAgICAgICAgICAgIHx8ICRzaW5nbGVfbGluZSA9fiBte1xHKC9bXi8qXSl9c2djKQ0KICAgICAg
ICAgICAgew0KICAgICAgICAgICAgICAgICRjb21tYW5kIC49ICQxOw0KICAgICAgICAgICAgICAg
IG5leHQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJHNpbmdsZV9saW5lID1+IG17
XEcvLy4qfXNnYw0KICAgICAgICAgICAgICAgIHx8ICRzaW5nbGVfbGluZSA9fiBte1xHL1wqLio/
XCovfXNnYykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkY29tbWFuZCAuPSAiICI7
DQogICAgICAgICAgICAgICAgbmV4dDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGRpZSAi
aHVoPyI7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRjb21tYW5kID1+IC9eXHMqXCNccyooW2Et
el0rKVxzKiguKikvKSB7DQogICAgICAgICAgICAjIHBwIGNvbW1hbmQNCiAgICAgICAgICAgIG15
ICgkY20sICRhcmcpID0gKCQxLCB0cmltKCQyKSk7DQogICAgICAgICAgICBpZiAoJGNtIGVxICdp
ZmRlZicpIHsNCiAgICAgICAgICAgICAgICBpZiAoJG91dF9lbmFibGVkKSB7DQogICAgICAgICAg
ICAgICAgICAgIGlmIChleGlzdHMgJGRlZmluZWR7JGFyZ30pIHsNCiAgICAgICAgICAgICAgICAg
ICAgICAgICRvdXRfZW5hYmxlZCA9ICRkZWZpbmVkeyRhcmd9Ow0KICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaGlmdCBAaWZzdGFjaywgJG91dF9lbmFibGVkOw0KICAgICAgICAgICAgICAgICAg
ICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZzdGFjaywgJ3Vu
a25vd24nOw0KICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJG91dCAkdG90YWw7DQogICAg
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg
ICAgICAgICB1bnNoaWZ0IEBpZnN0YWNrLCAxOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgIH0gZWxzaWYgKCRjbSBlcSAnaWZuZGVmJykgew0KICAgICAgICAgICAgICAgIGlmICgkb3V0
X2VuYWJsZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmluZWQgJGRlZmluZWR7JGFy
Z30pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRfZW5hYmxlZCA9IDEgLSAkZGVmaW5l
ZHskYXJnfTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2hpZnQgQGlmc3RhY2ssICRvdXRf
ZW5hYmxlZDsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2hpZnQgQGlmc3RhY2ssICd1bmtub3duJzsNCiAgICAgICAgICAgICAgICAgICAg
ICAgIHByaW50ICRvdXQgJHRvdGFsOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg
ICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZzdGFjaywgMTsN
CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2lmICgkY20gZXEgJ2lmJykgew0K
ICAgICAgICAgICAgICAgIGlmICgkb3V0X2VuYWJsZWQpIHsNCiAgICAgICAgICAgICAgICAgICAg
bXkgJHJlc3VsdCA9IHRyaW0oZXZhbF9leHByKCRhcmcpKTsNCiAgICAgICAgICAgICAgICAgICAg
aWYgKCRyZXN1bHQgIX4gL1xELykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG91dF9lbmFi
bGVkID0gKCRyZXN1bHQgPyAiMSIgOiAiMCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aGlmdCBAaWZzdGFjaywgJG91dF9lbmFibGVkOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ew0KICAgICAgICAgICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZzdGFjaywgJ3Vua25vd24nOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJG91dCAiI2lmICRyZXN1bHRcbiI7DQogICAg
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg
ICAgICAgICB1bnNoaWZ0IEBpZnN0YWNrLCAxOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgIH0gZWxzaWYgKCRjbSBlcSAnZWxpZicpIHsNCiAgICAgICAgICAgICAgICBkaWUgIiNlbGlm
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQiOw0KICAgICAgICAgICAgfSBlbHNpZiAoJGNtIGVxICdl
bHNlJykgew0KICAgICAgICAgICAgICAgIGRpZSAiI2Vsc2Ugd2l0aG91dCAjaWYiDQogICAgICAg
ICAgICAgICAgICAgIGlmICEgQGlmc3RhY2s7DQogICAgICAgICAgICAgICAgaWYgKCRvdXRfZW5h
YmxlZCkgew0KICAgICAgICAgICAgICAgICAgICAjIG91dHB1dCBjYW4gYmUgZW5hYmxlZCBpZiBh
KSB3ZSBkb24ndCBrbm93IG9yIGIpIHdlDQogICAgICAgICAgICAgICAgICAgICMga25vdyBvdXIg
Y29uZGl0aW9uIGlzIHRydWUNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpZnN0YWNrWzBdIGVx
ICcxJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGlmc3RhY2tbMF0gPSAnMCc7DQogICAg
ICAgICAgICAgICAgICAgICAgICAkb3V0X2VuYWJsZWQgPSAwOw0KICAgICAgICAgICAgICAgICAg
ICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJG91dCAkdG90YWw7DQog
ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg
ICAgICAgICAgICBpZiAoJGlmc3RhY2tbMF0gZXEgJzAnKSB7DQogICAgICAgICAgICAgICAgICAg
ICAgICAkaWZzdGFja1swXSA9ICcxJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRfZW5h
YmxlZCA9IGNoZWNrX291dChAaWZzdGFjayk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2lmICgkY20gZXEgJ2VuZGlmJykgew0KICAg
ICAgICAgICAgICAgIGRpZSAiI2VuZGlmIHdpdGhvdXQgI2lmIg0KICAgICAgICAgICAgICAgICAg
ICBpZiAhIEBpZnN0YWNrOw0KICAgICAgICAgICAgICAgIG15ICR3aHkgPSBzaGlmdCBAaWZzdGFj
azsNCiAgICAgICAgICAgICAgICAkb3V0X2VuYWJsZWQgPSBjaGVja19vdXQgKEBpZnN0YWNrKTsN
CiAgICAgICAgICAgICAgICBpZiAoJG91dF9lbmFibGVkICYmICgkd2h5IG5lICcwJyAmJiAkd2h5
IG5lICcxJykpIHsNCiAgICAgICAgICAgICAgICAgICAgcHJpbnQgJG91dCAkdG90YWw7DQogICAg
ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBpZiAo
JGNtIGVxICdkZWZpbmUnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkb3V0X2VuYWJsZWQg
JiYgJG9wdF9kZWZpbmVzICYmICRhcmcgPX4gbXteKFx3Kyl9KSB7DQogICAgICAgICAgICAgICAg
ICAgICAgICAkZGVmaW5lZHskMX0gPSAxOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg
ICAgICAgICAgfSBlbHNpZiAoJGNtIGVxICd1bmRlZicpIHsNCiAgICAgICAgICAgICAgICAgICAg
aWYgKCRvdXRfZW5hYmxlZCAmJiAkb3B0X2RlZmluZXMgJiYgJGFyZyA9fiBte14oXHcrKX0pIHsN
CiAgICAgICAgICAgICAgICAgICAgICAgICRkZWZpbmVkeyQxfSA9IDA7DQogICAgICAgICAgICAg
ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2lmICgkY20gbmUgJ2luY2x1ZGUnICYmICRj
bSBuZSAncHJhZ21hJyAmJiAkY20gbmUgJ2Vycm9yJyAmJiAkY20gbmUgJ2ltcG9ydCcgJiYgJGNt
IG5lICd3YXJuaW5nJykgew0KICAgICAgICAgICAgICAgICAgICBkaWUgIiRfOiQuOiB1bmtub3du
IHByZXByb2Nlc3NvciBjb21tYW5kICckY20nXG4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgICAgICBwcmludCAkb3V0ICR0b3RhbA0KICAgICAgICAgICAgICAgICAgICBpZiAkb3V0
X2VuYWJsZWQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBw
cmludCAkb3V0ICR0b3RhbA0KICAgICAgICAgICAgICAgIGlmICRvdXRfZW5hYmxlZDsNCiAgICAg
ICAgfQ0KICAgIH0NCiAgICBwcmludGYgIiRfOiQuOiAlZCB1bnRlcm1pbmF0ZWQgY29uZGl0aW9u
YWwocykgc3RpbGwgb3BlblxuIiwgc2NhbGFyIEBpZnN0YWNrDQogICAgICAgIGlmIEBpZnN0YWNr
Ow0KfQ0KDQojIHRydWUgaWZmICRfWzBdIGlzIGEgY29tcGxldGUgbGluZS4gQ29tcGxldGUgbGlu
ZXMgbWF5IG5vdCBjb250YWluDQojIHBhcnRpYWwgY29tbWVudHMuDQpzdWIgaXNfY29tcGxldGUg
ew0KICAgIG15ICRsaW5lID0gc2hpZnQ7DQogICAgJGxpbmUgPX4gcy9cXFxuLy9zZzsNCiAgICB3
aGlsZSAoMSkgew0KICAgICAgICBsYXN0IGlmICRsaW5lID1+IC9cRyQvc2djOw0KICAgICAgICBu
ZXh0IGlmICgkbGluZSA9fiBte1xHW15cIlwnL10rfXNnYw0KICAgICAgICAgICAgICAgICB8fCAk
bGluZSA9fiBte1xHJyhbXlwnXFxdfFxcLikqJ31zZ2MNCiAgICAgICAgICAgICAgICAgfHwgJGxp
bmUgPX4gbXtcRyIoW15cIlxcXXxcXC4pKiJ9c2djDQogICAgICAgICAgICAgICAgIHx8ICRsaW5l
ID1+IG17XEcvW14vKl19c2djDQogICAgICAgICAgICAgICAgIHx8ICRsaW5lID1+IG17XEcvLy4q
fXNnYw0KICAgICAgICAgICAgICAgICB8fCAkbGluZSA9fiBte1xHL1wqLio/XCovfXNnYyk7DQog
ICAgICAgIGRpZSAiJF86JC46IGxpdGVyYWwgYWNyb3NzIGxpbmVzXG4iDQogICAgICAgICAgICBp
ZiAoJGxpbmUgPX4gbXtcR1tcIlwnXX1zZ2MpOw0KICAgICAgICAjIGl0IGlzIGEgY29tbWVudA0K
ICAgICAgICByZXR1cm4gMDsNCiAgICB9DQogICAgcmV0dXJuIDE7DQp9DQoNCiMgR2l2ZW4gYSBs
aXN0IG9mIHN0YXR1cyB0b2tlbnMgKCcwJywgJzEnLCAnYW55dGhpbmcgZWxzZScpLCBkZWNpZGUN
CiMgd2hldGhlciB3ZSBjYW4gc2FmZWx5IHN1cHByZXNzIG91dHB1dC4NCnN1YiBjaGVja19vdXQg
ew0KICAgIGZvcmVhY2ggKEBfKSB7DQogICAgICAgIGlmICgkXyBlcSAnMCcpIHsNCiAgICAgICAg
ICAgIHJldHVybiAwOw0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAxOw0KfQ0KDQojIFJl
bW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLg0Kc3ViIHRyaW0gew0KICAgIG15
ICR4ID0gc2hpZnQ7DQogICAgJHggPX4gcy9eXHMrLy9zOw0KICAgICR4ID1+IHMvXHMrJC8vczsN
CiAgICAkeDsNCn0NCg0KIyBHaXZlbiBhbiBleHByZXNzaW9uLCByZXR1cm4gc2ltcGxpZmllZCB2
ZXJzaW9uIHRoZXJlb2YgKGkuZS4NCiMgZGVmaW5lZChYKSBleHBhbmRlZCBpZiBrbm93bikuDQpz
dWIgZXZhbF9leHByIHsNCiAgICBsb2NhbCAkXyA9IHNoaWZ0Ow0KICAgIGxvY2FsICRzZWVuX2Rl
ZmluZWQgPSAkb3B0X2ZvcmNlOw0KICAgIG15ICRyZXN1bHQgPSBldmFsX2NvbmQoKTsNCiAgICBy
ZXR1cm4gJF8gaWYgIS9cR1xzKiQvc2djIHx8ICRyZXN1bHQgPX4gbXsvXCpFUlJPUlwqL30gfHwg
ISRzZWVuX2RlZmluZWQ7DQogICAgJHJlc3VsdDsNCn0NCg0KIyBQYXJzZSBjb25kaXRpb25hbC1l
eHByZXNzaW9uIHByb2R1Y3Rpb24uIFdlIHByb2Nlc3MgdGhlc2UsIHNvDQojICIjaWYgZGVmaW5l
ZChBKSA/IGRlZmluZWQoQikgOiAwIiB3b3Jrcy4NCnN1YiBldmFsX2NvbmQgew0KICAgIG15ICRh
ID0gZXZhbF9vcigpOw0KICAgIGlmIChte1xHXHMqXD99c2djKSB7DQogICAgICAgICMgY29uZGl0
aW9uYWwgb3BlcmF0b3INCiAgICAgICAgbXkgJGxocyA9IGV2YWxfY29uZCgpOw0KICAgICAgICBy
ZXR1cm4gIi8qRVJST1IqLyIgaWYgbm90IC9cR1xzKjovc2djOw0KICAgICAgICBteSAkcmhzID0g
ZXZhbF9jb25kKCk7DQogICAgICAgIGlmICgkYSA9fiAvXEQvKSB7DQogICAgICAgICAgICByZXR1
cm4gIiRhID8gJGxocyA6ICRyaHMiOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0
dXJuICRhID8gJGxocyA6ICRyaHM7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICBy
ZXR1cm4gJGE7DQogICAgfQ0KfQ0KDQojIFBhcnNlIGxvZ2ljYWwtb3ItZXhwcmVzc2lvbi4gRXZh
bHVhdGVzIHRvICIxIiBpZiBvbmUgcGFydCBrbm93biB0bw0KIyBiZSBkZWZpbmVkLCAiMCIgaWYg
YWxsIHBhcnRzIGtub3duIHRvIGJlIHVuZGVmaW5lZCwgInx8IiBvZiBhbGwNCiMgdW5rbm93biB0
ZXJtcyBlbHNlLg0Kc3ViIGV2YWxfb3Igew0KICAgIG15IEB0ZXJtczsNCiAgICBteSBAYWxsOw0K
ICAgIG15ICR0cnVlID0gMDsNCiAgICBkbyB7DQogICAgICAgIG15ICRhID0gZXZhbF9hbmQoKTsN
CiAgICAgICAgcHVzaCBAYWxsLCAkYTsNCiAgICAgICAgaWYgKCRhID1+IC9cRC8pIHsNCiAgICAg
ICAgICAgIHB1c2ggQHRlcm1zLCAkYTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR0
cnVlIHx8PSAkYSswOw0KICAgICAgICB9DQogICAgfSB3aGlsZSAobXtcR1xzKlx8XHx9c2djKTsN
CiAgICByZXR1cm4gKEBhbGwgPT0gMQ0KICAgICAgICAgICAgPyAkYWxsWzBdDQogICAgICAgICAg
ICA6ICR0cnVlDQogICAgICAgICAgICA/ICIxIg0KICAgICAgICAgICAgOiAhQHRlcm1zDQogICAg
ICAgICAgICA/ICIwIg0KICAgICAgICAgICAgOiBAdGVybXMgPT0gMQ0KICAgICAgICAgICAgPyAi
MCB8fCAkdGVybXNbMF0iDQogICAgICAgICAgICA6IGpvaW4gIiB8fCAiLCBAdGVybXMpOw0KfQ0K
DQojIFBhcnNlIGxvZ2ljYWwtYW5kLWV4cHJlc3Npb24uIEV2YWx1YXRlcyB0byAiMCIgaWYgb25l
IHBhcnQga25vd24gdG8NCiMgYmUgdW5kZWZpbmVkLCAiMSIgaWYgYWxsIHBhcnRzIGtub3duIHRv
IGJlIGRlZmluZWQsICImJiIgb2YgYWxsDQojIHVua25vd24gdGVybXMgZWxzZS4NCnN1YiBldmFs
X2FuZCB7DQogICAgbXkgQHRlcm1zOw0KICAgIG15IEBhbGw7DQogICAgbXkgJHRydWUgPSAxOw0K
ICAgIGRvIHsNCiAgICAgICAgbXkgJGEgPSBldmFsX2JpdG9yKCk7DQogICAgICAgIHB1c2ggQGFs
bCwgJGE7DQogICAgICAgIGlmICgkYSA9fiAvXEQvKSB7DQogICAgICAgICAgICBwdXNoIEB0ZXJt
cywgJGE7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdHJ1ZSAmJj0gJGErMDsNCiAg
ICAgICAgfQ0KICAgIH0gd2hpbGUgKG17XEdccypcJlwmfXNnYyk7DQogICAgcmV0dXJuIChAYWxs
ID09IDENCiAgICAgICAgICAgID8gJGFsbFswXQ0KICAgICAgICAgICAgOiAhJHRydWUNCiAgICAg
ICAgICAgID8gIjAiDQogICAgICAgICAgICA6ICFAdGVybXMNCiAgICAgICAgICAgID8gIjEiDQog
ICAgICAgICAgICA6IEB0ZXJtcyA9PSAxDQogICAgICAgICAgICA/ICIxICYmICR0ZXJtc1swXSIN
CiAgICAgICAgICAgIDogam9pbiAiICYmICIsIEB0ZXJtcyk7DQp9DQoNCiMgUGFyc2UgaW5jbHVz
aXZlLW9yLWV4cHJlc3Npb24uIFRoaXMgY29tYmluZXMgdGhlIGtub3duIHRlcm1zIHRvIG9uZSwN
CiMgdGhhdCBpcywgYCNpZiAxICsgKDIgfCAzKScgeWllbGRzIGAjaWYgMSArIDMnLg0Kc3ViIGV2
YWxfYml0b3Igew0KICAgIG15IEB0ZXJtczsNCiAgICBteSAkdmFsdWUgPSAwOw0KICAgIGRvIHsN
CiAgICAgICAgbXkgJGEgPSBldmFsX2JpdHhvcigpOw0KICAgICAgICBpZiAoJGEgPX4gL1xELykg
ew0KICAgICAgICAgICAgcHVzaCBAdGVybXMsICRhOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAg
ICAgICAgJHZhbHVlIHw9ICRhKzA7DQogICAgICAgIH0NCiAgICB9IHdoaWxlIChte1xHXHMqXHwo
Pz0kfFtefF0pfXNnYyk7DQogICAgcHVzaCBAdGVybXMsICR2YWx1ZSBpZiAkdmFsdWU7DQogICAg
cmV0dXJuIChAdGVybXMgPyBqb2luICIgfCAiLCBAdGVybXMgOiAiMCIpOw0KfQ0KDQojIFBhcnNl
IGV4Y2x1c2l2ZS1vci1leHByZXNzaW9uLiBUaGlzIGNvbWJpbmVzIHRoZSBrbm93biB0ZXJtcyB0
byBvbmUsDQojIHRoYXQgaXMsIGAjaWYgMSArICgyIF4gMyknIHlpZWxkcyBgI2lmIDEgKyAxJy4N
CnN1YiBldmFsX2JpdHhvciB7DQogICAgbXkgQHRlcm1zOw0KICAgIG15ICR2YWx1ZSA9IDA7DQog
ICAgZG8gew0KICAgICAgICBteSAkYSA9IGV2YWxfYml0YW5kKCk7DQogICAgICAgIGlmICgkYSA9
fiAvXEQvKSB7DQogICAgICAgICAgICBwdXNoIEB0ZXJtcywgJGE7DQogICAgICAgIH0gZWxzZSB7
DQogICAgICAgICAgICAkdmFsdWUgXj0gJGErMDsNCiAgICAgICAgfQ0KICAgIH0gd2hpbGUgKG17
XEdccypcXn1zZ2MpOw0KICAgIHB1c2ggQHRlcm1zLCAkdmFsdWUgaWYgJHZhbHVlOw0KICAgIHJl
dHVybiAoQHRlcm1zID8gam9pbiAiIF4gIiwgQHRlcm1zIDogIjAiKTsNCn0NCg0KIyBQYXJzZSBh
bmQtZXhwcmVzc2lvbi4gVGhpcyBjb21iaW5lcyB0aGUga25vd24gdGVybXMgdG8gb25lLA0KIyB0
aGF0IGlzLCBgI2lmIDEgKyAoMiAmIDMpJyB5aWVsZHMgYCNpZiAxICsgMicuDQpzdWIgZXZhbF9i
aXRhbmQgew0KICAgIG15IEB0ZXJtczsNCiAgICBteSAkdmFsdWUgPSB+MDsNCiAgICBkbyB7DQog
ICAgICAgIG15ICRhID0gZXZhbF9lcSgpOw0KICAgICAgICBpZiAoJGEgPX4gL1xELykgew0KICAg
ICAgICAgICAgcHVzaCBAdGVybXMsICRhOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg
JHZhbHVlICY9ICRhKzA7DQogICAgICAgIH0NCiAgICB9IHdoaWxlIChte1xHXHMqXCYoPz0kfFte
Jl0pfXNnYyk7DQogICAgcHVzaCBAdGVybXMsICR2YWx1ZSBpZiAkdmFsdWUgIT0gfjA7DQogICAg
aWYgKCR2YWx1ZSA9PSAwKSB7DQogICAgICAgIHJldHVybiAiMCI7DQogICAgfSBlbHNlIHsNCiAg
ICAgICAgcmV0dXJuIChAdGVybXMgPyBqb2luICIgJiAiLCBAdGVybXMgOiAiMCIpOw0KICAgIH0N
Cn0NCg0KIyBQYXJzZSBlcXVhbGl0eS1leHByZXNzaW9uLiBUaG9zZSBhcmUgdG9vIHNlbGRvbSBp
biBjb25kaXRpb25hbHMNCiMgY29uY2VybmVkIHdpdGggZGVmaW5lZG5lc3MsIHNvIHdlIGRvbid0
IGV2YWx1YXRlIHRoZW0uDQpzdWIgZXZhbF9lcSB7DQogICAgbXkgJGEgPSBldmFsX3JlbGEoKTsN
CiAgICB3aGlsZSAobXtcR1xzKihbPSFdPSl9c2djKSB7DQogICAgICAgICRhIC49ICIgJDEgIjsN
CiAgICAgICAgJGEgLj0gZXZhbF9yZWxhKCk7DQogICAgfQ0KICAgICRhOw0KfQ0KDQojIFBhcnNl
IHJlbGF0aW9uYWwtZXhwcmVzc2lvbi4gVGhvc2UgYXJlIHRvbyBzZWxkb20gaW4gY29uZGl0aW9u
YWxzDQojIGNvbmNlcm5lZCB3aXRoIGRlZmluZWRuZXNzLCBzbyB3ZSBkb24ndCBldmFsdWF0ZSB0
aGVtLg0Kc3ViIGV2YWxfcmVsYSB7DQogICAgbXkgJGEgPSBldmFsX3NoaWZ0KCk7DQogICAgd2hp
bGUgKG17XEdccyooWzw+XT0/KSg/PVtePD5dKX1zZ2MpIHsNCiAgICAgICAgJGEgLj0gIiAkMSAi
Ow0KICAgICAgICAkYSAuPSBldmFsX3NoaWZ0KCk7DQogICAgfQ0KICAgICRhOw0KfQ0KDQojIFBh
cnNlIHNoaWZ0LWV4cHJlc3Npb24uIFRob3NlIGFyZSB0b28gc2VsZG9tIGluIGNvbmRpdGlvbmFs
cw0KIyBjb25jZXJuZWQgd2l0aCBkZWZpbmVkbmVzcywgc28gd2UgZG9uJ3QgZXZhbHVhdGUgdGhl
bS4NCnN1YiBldmFsX3NoaWZ0IHsNCiAgICBteSAkYSA9IGV2YWxfYWRkKCk7DQogICAgd2hpbGUg
KG17XEdccyooPDx8Pj4pfXNnYykgew0KICAgICAgICAkYSAuPSAiICQxICI7DQogICAgICAgICRh
IC49IGV2YWxfYWRkKCk7DQogICAgfQ0KICAgICRhOw0KfQ0KDQojIFBhcnNlIGFkZGl0aXZlLWV4
cHJlc3Npb24uIFRob3NlIGFyZSB0b28gc2VsZG9tIGluIGNvbmRpdGlvbmFscw0KIyBjb25jZXJu
ZWQgd2l0aCBkZWZpbmVkbmVzcywgc28gd2UgZG9uJ3QgZXZhbHVhdGUgdGhlbS4NCnN1YiBldmFs
X2FkZCB7DQogICAgbXkgJGEgPSBldmFsX211bHQoKTsNCiAgICB3aGlsZSAobXtcR1xzKihcK3wt
KX1zZ2MpIHsNCiAgICAgICAgJGEgLj0gIiAkMSAiOw0KICAgICAgICAkYSAuPSBldmFsX211bHQo
KTsNCiAgICB9DQogICAgJGE7DQp9DQoNCiMgUGFyc2UgbXVsdGlwbGljYXRpdmUtZXhwcmVzc2lv
bi4gVGhvc2UgYXJlIHRvbyBzZWxkb20gaW4gY29uZGl0aW9uYWxzDQojIGNvbmNlcm5lZCB3aXRo
IGRlZmluZWRuZXNzLCBzbyB3ZSBkb24ndCBldmFsdWF0ZSB0aGVtLg0Kc3ViIGV2YWxfbXVsdCB7
DQogICAgbXkgJGEgPSBldmFsX3VuYXJ5KCk7DQogICAgd2hpbGUgKG17XEdccyooXCp8L3wlKX1z
Z2MpIHsNCiAgICAgICAgJGEgLj0gIiAkMSAiOw0KICAgICAgICAkYSAuPSBldmFsX3VuYXJ5KCk7
DQogICAgfQ0KICAgICRhOw0KfQ0KDQojIFBhcnNlIHVuYXJ5LWV4cHJlc3Npb24uIEluIHByZXBy
b2Nlc3NvciBkZWZpbmVzLCB0aGlzIGFyZToNCiMgLSAiLWV4cHIiLCAiK2V4cHIiLCAiIWV4cHIi
LCAifmV4cHIiIChoYW5kbGVkIGJlY2F1c2UgdGhleSdyZSBzaW1wbGUpDQojIC0gImRlZmluZWQo
U1lNKSIsICJkZWZpbmVkIFNZTSIgKGhhbmRsZWQpDQojIC0gbnVtYmVycyBhcmUgY29udmVydGVk
IHRvIGRlY2ltYWwNCiMgLSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb25zDQpzdWIgZXZhbF91bmFy
eSB7DQogICAgbXtcR1xzKn1zZ2M7DQogICAgaWYgKG17XEchfXNnYykgew0KICAgICAgICBteSAk
YXJnID0gZXZhbF91bmFyeSgpOw0KICAgICAgICBpZiAoJGFyZyA9fiAvXEQvKSB7DQogICAgICAg
ICAgICByZXR1cm4gIiEkYXJnIjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVy
biAkYXJnID8gIjAiIDogIjEiOw0KICAgICAgICB9DQogICAgfSBlbHNpZiAobXtcR359c2djKSB7
DQogICAgICAgIG15ICRhcmcgPSBldmFsX3VuYXJ5KCk7DQogICAgICAgIGlmICgkYXJnID1+IC9c
RC8pIHsNCiAgICAgICAgICAgIHJldHVybiAifiRhcmciOw0KICAgICAgICB9IGVsc2Ugew0KICAg
ICAgICAgICAgcmV0dXJuIH4kYXJnOw0KICAgICAgICB9DQogICAgfSBlbHNpZiAobXtcR1wrfXNn
Yykgew0KICAgICAgICByZXR1cm4gZXZhbF91bmFyeSgpOw0KICAgIH0gZWxzaWYgKG17XEdcLX1z
Z2MpIHsNCiAgICAgICAgbXkgJGFyZyA9IGV2YWxfdW5hcnkoKTsNCiAgICAgICAgaWYgKCRhcmcg
PX4gL1xELykgew0KICAgICAgICAgICAgcmV0dXJuICItICRhcmciOw0KICAgICAgICB9IGVsc2Ug
ew0KICAgICAgICAgICAgcmV0dXJuIC0kYXJnOw0KICAgICAgICB9DQogICAgfSBlbHNpZiAobXtc
R2RlZmluZWRccypcKFxzKihcdyspXHMqXCl9c2djIHx8IG17XEdccypkZWZpbmVkXHMrKFx3Kyl9
c2djKSB7DQogICAgICAgIGlmIChleGlzdHMgJGRlZmluZWR7JDF9KSB7DQogICAgICAgICAgICAk
c2Vlbl9kZWZpbmVkID0gMTsNCiAgICAgICAgICAgIHJldHVybiAkZGVmaW5lZHskMX07DQogICAg
ICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gImRlZmluZWQoJDEpIjsNCiAgICAgICAg
fQ0KICAgIH0gZWxzaWYgKG17XEcwW3hYXShbMC05YS1mQS1GXSspW3VVbExdKn1zZ2MpIHsNCiAg
ICAgICAgcmV0dXJuIGhleCAkMTsNCiAgICB9IGVsc2lmIChte1xHMChbMC03XSspW3VVbExdKn1z
Z2MpIHsNCiAgICAgICAgcmV0dXJuIG9jdCAkMTsNCiAgICB9IGVsc2lmIChte1xHKFswLTldKylb
dVVsTF0qfXNnYykgew0KICAgICAgICByZXR1cm4gJDE7DQogICAgfSBlbHNpZiAobXtcRyhcdysp
fXNnYykgew0KICAgICAgICBpZiAobXtcR1xzKD89XCgpfXNnYykgew0KICAgICAgICAgICAgIyBm
dW5jdGlvbi1saWtlIG1hY3JvDQogICAgICAgICAgICByZXR1cm4gIi8qRVJST1IqLyI7DQogICAg
ICAgIH0gZWxzaWYgKGV4aXN0cyAkZGVmaW5lZHskMX0gJiYgISRkZWZpbmVkeyQxfSkgew0KICAg
ICAgICAgICAgIyBvYmplY3QtbGlrZSBtYWNybyB3aGljaCBpcyBrbm93biB0byBub3QgYmUgZGVm
aW5lZA0KICAgICAgICAgICAgcmV0dXJuICIwIjsNCiAgICAgICAgfSBlbHNpZiAoJG9wdF9vcHRp
bWlzdGljKSB7DQogICAgICAgICAgICAjIG9iamVjdC1saWtlIG1hY3JvIHdoaWNoIGlzIChtYXli
ZSkgZGVmaW5lZA0KICAgICAgICAgICAgcmV0dXJuICQxOw0KICAgICAgICB9IGVsc2Ugew0KICAg
ICAgICAgICAgcmV0dXJuICIvKkVSUk9SKi8iOw0KICAgICAgICB9DQogICAgfSBlbHNpZiAobXtc
R1wofXNnYykgew0KICAgICAgICBteSAkYXJnID0gZXZhbF9jb25kKCk7DQogICAgICAgIHJldHVy
biAiLypFUlJPUiovIiBpZiAhbXtcR1xzKlwpfXNnYzsNCiAgICAgICAgaWYgKCRhcmcgPX4gL1xE
Lykgew0KICAgICAgICAgICAgcmV0dXJuICIoJGFyZykiOw0KICAgICAgICB9IGVsc2Ugew0KICAg
ICAgICAgICAgcmV0dXJuICRhcmc7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICBy
ZXR1cm4gIi8qRVJST1IqLyI7DQogICAgfQ0KfQ0KDQpzdWIgZGVidWcgew0KICAgIHByaW50ICJ8
ICIsIHNoaWZ0LCAiOlxufCAkX1xufCAiLCAiICIgeCBwb3MoJF8pLCAiXlxuIjsNCn0NCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4751</attachid>
            <date>2005-11-20 17:17:33 -0800</date>
            <delta_ts>2005-11-20 17:17:33 -0800</delta_ts>
            <desc>A better hacked version of partpp.pl</desc>
            <filename>partpp.pl</filename>
            <type>text/x-perl-script</type>
            <size>17966</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsIC13DQojDQojICBQYXJ0aWFsIFByZXByb2Nlc3Nvcg0KIw0KIyAgVGhp
cyBwcm9ncmFtIHByb2Nlc3NlcyBDIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMsIGVsaW1pbmF0
aW5nDQojICBjb25kaXRpb25zIGtub3duIHRvIGJlIHRydWUgb3IgZmFsc2UuIFRoaXMgY2FuIGJl
IHVzZWQgdG8gc2ltcGxpZnkNCiMgICNpZmRlZi1yaWRkZW4gY29kZS4gVGhpcyBwcm9ncmFtIGF0
dGVtcHRzIHRvIGJlIHNtYXJ0IGFib3V0IGNvbXBsZXgNCiMgIGNvbmRpdGlvbnMuIEZvciBleGFt
cGxlLA0KIyAgICAgICNpZiBkZWZpbmVkKGZvbykgJiYgZGVmaW5lZChiYXIpIHx8IGRlZmluZWQo
aHVoKQ0KIyAgaXMgcmVwbGFjZWQgYnkNCiMgICAgICAjaWYgZGVmaW5lZChodWgpDQojICB3aGVu
IHdlIGtub3cgdGhhdCBmb28gaXMgZGVmaW5lZCBhbmQgYmFyIGlzIG5vdC4gRm9yIGFub3RoZXIg
ZXhhbXBsZSwNCiMgICAgICBwYXJ0cHAgLVVfX1dJTjMyX18NCiMgIHdvdWxkIGVsaW1pbmF0ZSBh
bGwgV2luMzItc3BlY2lmaWMgY29kZSBmcm9tIGEgZ2l2ZW4gc291cmNlIGNvZGUuDQojDQojICBQ
YXJhbWV0ZXJzOg0KIyAgICAtRHN5bSAgICB3ZSBrbm93IHRoYXQgc3ltIGlzIGRlZmluZWQNCiMg
ICAgLVVzeW0gICAgd2Uga25vdyB0aGF0IHN5bSBpcyBub3QgZGVmaW5lZA0KIyAgICAtQyAgICAg
ICBhc3N1bWUgdGhhdCB1c2VyIHdyb3RlICJjbGVhbiIgY29kZSwgdGhhdCBpcywgYWxsDQojICAg
ICAgICAgICAgIG9iamVjdC1saWtlIG1hY3JvcyBiZWhhdmUgYXMgb2JqZWN0cw0KIyAgICAtZCAg
ICAgICBwcm9jZXNzICNkZWZpbmUvI3VuZGVmIGRpcmVjdGl2ZXMgaW4gb3JkZXIgdG8NCiMgICAg
ICAgICAgICAga2VlcCBvdXIgZGljdGlvbmFyeSB1cC10by1kYXRlLg0KIyAgICAtZiAgICAgICBm
b3JjZSBzaW1wbGlmeSBleHByZXNzaW9ucyBldmVuIHdoZW4gdGhleSBkb24ndCBjb250YWluDQoj
ICAgICAgICAgICAgIGFueSBvZiBvdXIgc3ltYm9scw0KIyAgICAtZWV4cHIgICBldmFsdWF0ZSBl
eHByZXNzaW9uIGFuZCBwcmludCBzaW1wbGlmaWVkIHZlcnNpb24NCiMNCiMgIFRoZSAtQyBvcHRp
b24gZGVzZXJ2ZXMgZXhwbGFuYXRpb246IGFzc3VtZSB0aGUgZm9sbG93aW5nOg0KIyAgICAgICAj
ZGVmaW5lIFggMCkgLSAoMQ0KIyAgICAgICAjaWYgKGRlZmluZWQoZm9vKSB8fCBYKQ0KIyAgQXNz
dW1pbmcgZm9vIGlzIGRlZmluZWQsIHRoZSAjaWYgZXhwcmVzc2lvbiB3b3VsZCBiZSBlcXVpdmFs
ZW50IHRvDQojICAgICAgICNpZiAoMSB8fCBYKQ0KIyAgd2hpY2ggaXMgYXQgZmlyc3Qgc2lnaHQg
ZXF1aXZhbGVudCB0bw0KIyAgICAgICAjaWYgKFgpDQojICB3aGljaCBpcyBlcXVhbCB0byAiI2lm
IC0xIiBpLmUuIHRydWUuIEhvd2V2ZXIsIHRoZSBvcmlnaW5hbA0KIyAgZXhwcmVzc2lvbiBpcyAi
I2lmICgxIHx8IDApIC0gKDEpIiB3aGljaCBpcyBmYWxzZS4gVG8gZ3VhcmFudGVlDQojICBjb3Jy
ZWN0bmVzcywgd2UgYXNzdW1lIHRoYXQgdGhpcyBjYW4gaGFwcGVuLCBhbmQgcGFzcyB0aHJvdWdo
DQojICBleHByZXNzaW9ucyBjb250YWluaW5nICJyYXciIG1hY3JvIG5hbWVzIHVuY2hhbmdlZC4g
V2l0aCAtQywgd2UNCiMgIGFzc3VtZSB1c2VyIGRvZXNuJ3Qgd3JpdGUgc3VjaCBoYWNrcyAodGhh
dCBpcywgYWxsIG5vbi1mdW5jdGlvbg0KIyAgbWFjcm9zIGFyZSBwcm9wZXJseSBwYXJlbnRoZXNp
emVkIGV4cHJlc3Npb25zKSwgYW5kIHdvdWxkIHJlcGxhY2UNCiMgIHRoZSBzdGFydGluZyBleHBy
ZXNzaW9uIHdpdGggIihYKSIuDQojDQojICBXaXRoIC1mLCB0aGlzIHByb2dyYW0gc2ltcGxpZmll
cyBleHByZXNzaW9ucyBldmVuIGlmIHRoZXkgZG9uJ3QNCiMgIGNvbnRhaW4gb25lIG9mIG91ciBz
eW1ib2xzLiBGb3IgZXhhbXBsZSwgd2l0aCAtZiwNCiMgICAgICAgI2lmIDEgfHwgMg0KIyAgaXMg
c2ltcGxpZmllZCB0byAiI2lmIDEiLiBCZWNhdXNlIHBhcnRwcCBjb21wdXRlcyBpbiBkZWNpbWFs
IChhbmQNCiMgIHRodXMgbWFrZXMgY29kZSBjb250YWluaW5nIGhleC9vY3QgY29tcHV0YXRpb25z
IGxlc3MgcmVhZGFibGUpLA0KIyAgdGhpcyBpcyBub3JtYWxseSBub3QgZG9uZSBvbiB1bnJlbGF0
ZWQgZXhwcmVzc2lvbnMuDQojDQojICBCdWdzOg0KIyAgLSB3aGVuIHdlIG1vZGlmeSBhIGNvbmRp
dGlvbmFsIGxpbmUsIGNvbW1lbnRzIGdldCBsb3N0DQojICAtIHJlc3VsdHMgbWF5IGJlIGluY29y
cmVjdCBpZiBhbiAjaW5jbHVkZSBmaWxlICN1bmRlZidzIG9yDQojICAgICNkZWZpbmUncyBhIHN5
bWJvbCBwYXNzZWQgaW4gYnkgLUQvLVUuIFRoZSAtZCBvcHRpb24gbWF5IG1ha2UNCiMgICAgdGhp
cyBldmVuIHdvcnNlLg0KIyAgLSAjZWxpZiBpcyBub3Qgc3VwcG9ydGVkDQojICAtIGAjaWYgMCcg
YW5kIGAjaWYgMScgYXJlIGVsaW1pbmF0ZWQgZXZlbiB3aGVuIC1mIGlzIG5vdCBzcGVjaWZpZWQN
CiMNCiMgIChjKSAyMDAyIGJ5IFN0ZWZhbiBSZXV0aGVyDQojDQoNCnVzZSBzdHJpY3Q7DQp1c2Ug
dmFycyBxd3sgJWRlZmluZWQgQGZpbGVzICRvcHRfb3B0aW1pc3RpYyAkb3B0X2RlZmluZXMgQGV4
cHJzDQogICAgICAgICAgICAgICAgICRvcHRfZm9yY2UNCiAgICAgICAgICAgICAgICAgJHNlZW5f
ZGVmaW5lZCB9Ow0KDQokb3B0X29wdGltaXN0aWMgPSAwOw0KJG9wdF9kZWZpbmVzID0gMDsNCiRv
cHRfZm9yY2UgPSAwOw0KDQpteSAkYWxsb3dfY2MgPSAwOw0KDQpmb3JlYWNoIChAQVJHVikgew0K
ICAgIGlmICgvXi0tYmVnaW4kLykgew0KICAgICAgICAkYWxsb3dfY2MgPSAxOw0KICAgIH0gZWxz
aWYgKC9eLS1lbmQkLykgew0KICAgICAgICAkYWxsb3dfY2MgPSAwOw0KICAgIH0gZWxzaWYgKC9e
LUQoLispLykgew0KICAgICAgICAkZGVmaW5lZHskMX0gPSAxOw0KICAgIH0gZWxzaWYgKC9eLVUo
LispLykgew0KICAgICAgICAkZGVmaW5lZHskMX0gPSAwOw0KICAgIH0gZWxzaWYgKCEkYWxsb3df
Y2MgJiYgL14tQyQvKSB7DQogICAgICAgICRvcHRfb3B0aW1pc3RpYyA9IDE7DQogICAgfSBlbHNp
ZiAoISRhbGxvd19jYyAmJiAvXi1kJC8pIHsNCiAgICAgICAgJG9wdF9kZWZpbmVzID0gMTsNCiAg
ICB9IGVsc2lmICghJGFsbG93X2NjICYmIC9eLWYkLykgew0KICAgICAgICAkb3B0X2ZvcmNlID0g
MTsNCiAgICB9IGVsc2lmICghJGFsbG93X2NjICYmIC9eLWUoLiopLykgew0KICAgICAgICBwdXNo
IEBleHBycywgJDE7DQogICAgfSBlbHNpZiAoL14taCQvIHx8IC9eLS0/aGVscCQvKSB7DQogICAg
ICAgIHByaW50ICIkMCAtIHBhcnRpYWwgcHJlcHJvY2Vzc29yDQoNCnVzYWdlOiAkMCBbLURzeW0u
Li5dIFstVXN5bS4uLl0gWy1DXSBbLWRdIFstZl0gWy1ofC0taGVscF0gW2ZpbGVzLi4uXQ0KDQot
RHN5bSAgICAgIGRlZmluZSBhIHN5bWJvbA0KLVVzeW0gICAgICB1bmRlZmluZSBhIHN5bWJvbA0K
LUMgICAgICAgICBhc3N1bWUgJ2NsZWFuJyBjb2RlIChkZXRhaWxlZCBpbmZvIGluIHNvdXJjZSBj
b2RlKQ0KLWQgICAgICAgICBwcm9jZXNzICNkZWZpbmUvI3VuZGVmIGxpbmVzDQotZiAgICAgICAg
IGZvcmNlIHNpbXBsaWZ5DQoNCkMgY29tcGlsZXIgb3B0aW9ucyBjYW4gYmUgcGFzc2VkIGluIC0t
YmVnaW4gLS1lbmQsIHN1Y2ggYXMNCiAgJDAgLS1iZWdpbiAtRHN5bSAtRHN5bSAtSWRpciAtTGRp
ciAtbGxpYiAtLWVuZCBmaWxlLmMNClwodGhpcyBwcm9ncmFtIHdpbGwgdGhlbiBpZ25vcmUgb3B0
aW9ucyBpdCBkb2Vzbid0IGtub3cpLg0KDQpJZiBubyBmaWxlcyBzcGVjaWZpZWQsIHByb2Nlc3Nl
cyBzdGRpbi4gT3V0cHV0IGFsd2F5cyBnb2VzIHRvIHN0ZG91dC4NCg0KXChjKSAyMDAyIFN0ZWZh
biBSZXV0aGVyIDxTdHJldVxAZ214LmRlPi5cbiI7DQogICAgICAgIGV4aXQgMDsNCiAgICB9IGVs
c2Ugew0KICAgICAgICBpZiAoJF8gPX4gL14tLyAmJiAkXyBuZSAnLScpIHsNCiAgICAgICAgICAg
IGRpZSAiYmFkIHBhcmFtZXRlciBgJF8nXG4iDQogICAgICAgICAgICAgICAgdW5sZXNzICRhbGxv
d19jYzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHB1c2ggQGZpbGVzLCAkXzsNCg0K
ICAgICAgICB9DQogICAgfQ0KfQ0KcHVzaCBAZmlsZXMsICItIiBpZiAhQGZpbGVzICYmICFAZXhw
cnM7DQoNCm15ICRleGl0ID0gMDsNCmZvcmVhY2ggKEBleHBycykgew0KICAgIHByaW50ICRfLCAi
OlxuLSAiLCBldmFsX2V4cHIoJF8pLCAiXG4iOw0KfQ0KZm9yZWFjaCAoQGZpbGVzKSB7DQogICAg
aWYgKCRfIGVxICctJykgew0KICAgICAgICBwcm9jZXNzIChcKlNURElOLCBcKlNURE9VVCk7DQog
ICAgfSBlbHNlIHsNCiAgICAgICAgb3BlbiBJTiwgIjwgJF8iIG9yIGRvIHsgcHJpbnQgU1RERVJS
ICIkXzogJCFcbiI7ICRleGl0PTE7IG5leHQ7IH07DQogICAgICAgIHByb2Nlc3MgKFwqSU4sIFwq
U1RET1VUKTsNCiAgICAgICAgY2xvc2UgSU47DQogICAgfQ0KfQ0KZXhpdCAkZXhpdDsNCg0KIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIHByb2Nlc3MgIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjDQoNCiMgcHJvY2VzcyAoaW5mZCwgb3V0ZmQpDQojIC0gcHJvY2VzcyBv
bmUgZmlsZS4gVGhpcyBpcyB0aGUgZW5naW5lIG9mIHRoZSBwcm9ncmFtLg0Kc3ViIHByb2Nlc3Mg
ew0KICAgIG15ICgkaW4sICRvdXQpID0gQF87DQogICAgbXkgJHRvdGFsOw0KICAgIG15IEBpZnN0
YWNrOw0KICAgIG15ICRvdXRfZW5hYmxlZCA9IDE7DQogICAgIyBsaW5lIGxvb3ANCiBMSU5FOg0K
ICAgIHdoaWxlICgxKSB7DQogICAgICAgICMgcmVhZCBvbmUgInZpcnR1YWwiIGxpbmUNCiAgICAg
ICAgJHRvdGFsID0gIiI7DQogICAgICAgIGRvIHsNCiAgICAgICAgICAgIG15ICRsaW5lID0gPCRp
bj47DQogICAgICAgICAgICBpZiAoIWRlZmluZWQgJGxpbmUpIHsNCiAgICAgICAgICAgICAgICBs
YXN0IExJTkUgaWYgJHRvdGFsIGVxICcnOw0KICAgICAgICAgICAgICAgIGRpZSAiJF86JC46IHVu
dGVybWluYXRlZCBjb21tZW50XG4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgd2hpbGUg
KCRsaW5lID1+IC9cXFxuJC8pIHsNCiAgICAgICAgICAgICAgICBteSAkbmV4dCA9IDwkaW4+Ow0K
ICAgICAgICAgICAgICAgIGRpZSAiJF86JC46IHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVcbiIgaWYg
bm90IGRlZmluZWQgJG5leHQ7DQogICAgICAgICAgICAgICAgJGxpbmUgLj0gJG5leHQ7DQogICAg
ICAgICAgICB9DQogICAgICAgICAgICAkbGluZSA9fiBzL1wjaWYgIUFQUExFX0NIQU5HRVMvI2lm
IDAvOw0KICAgICAgICAgICAgJGxpbmUgPX4gcy8jaWYgQVBQTEVfQ0hBTkdFUy8jaWYgMS87DQog
ICAgICAgICAgICAkdG90YWwgLj0gJGxpbmU7DQogICAgICAgIH0gd2hpbGUgKCEgaXNfY29tcGxl
dGUoJHRvdGFsKSk7DQoNCiAgICAgICAgIyByZW1vdmUgY29tbWVudHMgdG8gc2VlIGlmIGl0J3Mg
YSBwcCBjb21tYW5kDQogICAgICAgIG15ICRzaW5nbGVfbGluZSA9ICR0b3RhbDsgJHNpbmdsZV9s
aW5lID1+IHMvXFxcbi8vc2c7DQogICAgICAgIG15ICRjb21tYW5kID0gIiI7DQogICAgICAgIHdo
aWxlICgxKSB7DQogICAgICAgICAgICBsYXN0IGlmICRzaW5nbGVfbGluZSA9fiBtL1xHJC9zZ2M7
DQogICAgICAgICAgICBpZiAoJHNpbmdsZV9saW5lID1+IG17XEcoW15cIlwnL10rKX1zZ2MNCiAg
ICAgICAgICAgICAgICAgfHwgJHNpbmdsZV9saW5lID1+IG17XEcoJyhbXlwnXFxdfFxcLikqJyl9
c2djDQogICAgICAgICAgICAgICAgIHx8ICRzaW5nbGVfbGluZSA9fiBte1xHKCIoW15cIlxcXXxc
XC4pKiIpfXNnYw0KICAgICAgICAgICAgICAgICB8fCAkc2luZ2xlX2xpbmUgPX4gbXtcRygvW14v
Kl0pfXNnYykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkY29tbWFuZCAuPSAkMTsN
CiAgICAgICAgICAgICAgICBuZXh0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRz
aW5nbGVfbGluZSA9fiBte1xHLy8uKn1zZ2MNCiAgICAgICAgICAgICAgICB8fCAkc2luZ2xlX2xp
bmUgPX4gbXtcRy9cKi4qP1wqL31zZ2MpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg
JGNvbW1hbmQgLj0gIiAiOw0KICAgICAgICAgICAgICAgIG5leHQ7DQogICAgICAgICAgICB9DQog
ICAgICAgICAgICBkaWUgImh1aD8iOw0KICAgICAgICB9DQogICAgICAgIGlmICgkY29tbWFuZCA9
fiAvXlxzKlwjXHMqKFthLXpdKylccyooLiopLykgew0KICAgICAgICAgICAgIyBwcCBjb21tYW5k
DQogICAgICAgICAgICBteSAoJGNtLCAkYXJnKSA9ICgkMSwgdHJpbSgkMikpOw0KICAgICAgICAg
ICAgaWYgKCRjbSBlcSAnaWZkZWYnKSB7DQogICAgICAgICAgICAgICAgaWYgKCRvdXRfZW5hYmxl
ZCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RzICRkZWZpbmVkeyRhcmd9KSB7DQog
ICAgICAgICAgICAgICAgICAgICAgICAkb3V0X2VuYWJsZWQgPSAkZGVmaW5lZHskYXJnfTsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2hpZnQgQGlmc3RhY2ssICRvdXRfZW5hYmxlZDsNCiAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2hp
ZnQgQGlmc3RhY2ssICd1bmtub3duJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICRv
dXQgJHRvdGFsOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNl
IHsNCiAgICAgICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZzdGFjaywgMTsNCiAgICAgICAgICAg
ICAgICB9DQogICAgICAgICAgICB9IGVsc2lmICgkY20gZXEgJ2lmbmRlZicpIHsNCiAgICAgICAg
ICAgICAgICBpZiAoJG91dF9lbmFibGVkKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChkZWZp
bmVkICRkZWZpbmVkeyRhcmd9KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0X2VuYWJs
ZWQgPSAxIC0gJGRlZmluZWR7JGFyZ307DQogICAgICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0
IEBpZnN0YWNrLCAkb3V0X2VuYWJsZWQ7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQog
ICAgICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0IEBpZnN0YWNrLCAndW5rbm93bic7DQogICAg
ICAgICAgICAgICAgICAgICAgICBwcmludCAkb3V0ICR0b3RhbDsNCiAgICAgICAgICAgICAgICAg
ICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHVuc2hp
ZnQgQGlmc3RhY2ssIDE7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNpZiAo
JGNtIGVxICdpZicpIHsNCiAgICAgICAgICAgICAgICBpZiAoJG91dF9lbmFibGVkKSB7DQogICAg
ICAgICAgICAgICAgICAgIG15ICRyZXN1bHQgPSB0cmltKGV2YWxfZXhwcigkYXJnKSk7DQogICAg
ICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0ICF+IC9cRC8pIHsNCiAgICAgICAgICAgICAgICAg
ICAgICAgICRvdXRfZW5hYmxlZCA9ICgkcmVzdWx0ID8gIjEiIDogIjAiKTsNCiAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2hpZnQgQGlmc3RhY2ssICRvdXRfZW5hYmxlZDsNCiAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2hpZnQgQGlmc3Rh
Y2ssICd1bmtub3duJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICRvdXQgIiNpZiAk
cmVzdWx0XG4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNl
IHsNCiAgICAgICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZzdGFjaywgMTsNCiAgICAgICAgICAg
ICAgICB9DQogICAgICAgICAgICB9IGVsc2lmICgkY20gZXEgJ2VsaWYnKSB7DQogICAgICAgICAg
ICAgICAgZGllICIjZWxpZiBpcyBub3QgeWV0IGltcGxlbWVudGVkIjsNCiAgICAgICAgICAgIH0g
ZWxzaWYgKCRjbSBlcSAnZWxzZScpIHsNCiAgICAgICAgICAgICAgICBkaWUgIiNlbHNlIHdpdGhv
dXQgI2lmIg0KICAgICAgICAgICAgICAgICAgICBpZiAhIEBpZnN0YWNrOw0KICAgICAgICAgICAg
ICAgIGlmICgkb3V0X2VuYWJsZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgIyBvdXRwdXQgY2Fu
IGJlIGVuYWJsZWQgaWYgYSkgd2UgZG9uJ3Qga25vdyBvciBiKSB3ZQ0KICAgICAgICAgICAgICAg
ICAgICAjIGtub3cgb3VyIGNvbmRpdGlvbiBpcyB0cnVlDQogICAgICAgICAgICAgICAgICAgIGlm
ICgkaWZzdGFja1swXSBlcSAnMScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRpZnN0YWNr
WzBdID0gJzAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJG91dF9lbmFibGVkID0gMDsNCiAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50
ICRvdXQgJHRvdGFsOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBl
bHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpZnN0YWNrWzBdIGVxICcwJykgew0KICAg
ICAgICAgICAgICAgICAgICAgICAgJGlmc3RhY2tbMF0gPSAnMSc7DQogICAgICAgICAgICAgICAg
ICAgICAgICAkb3V0X2VuYWJsZWQgPSBjaGVja19vdXQoQGlmc3RhY2spOw0KICAgICAgICAgICAg
ICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNpZiAoJGNtIGVx
ICdlbmRpZicpIHsNCiAgICAgICAgICAgICAgICBkaWUgIiNlbmRpZiB3aXRob3V0ICNpZiINCiAg
ICAgICAgICAgICAgICAgICAgaWYgISBAaWZzdGFjazsNCiAgICAgICAgICAgICAgICBteSAkd2h5
ID0gc2hpZnQgQGlmc3RhY2s7DQogICAgICAgICAgICAgICAgJG91dF9lbmFibGVkID0gY2hlY2tf
b3V0IChAaWZzdGFjayk7DQogICAgICAgICAgICAgICAgaWYgKCRvdXRfZW5hYmxlZCAmJiAoJHdo
eSBuZSAnMCcgJiYgJHdoeSBuZSAnMScpKSB7DQogICAgICAgICAgICAgICAgICAgIHByaW50ICRv
dXQgJHRvdGFsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAg
ICAgICAgICAgICAgaWYgKCRjbSBlcSAnZGVmaW5lJykgew0KICAgICAgICAgICAgICAgICAgICBp
ZiAoJG91dF9lbmFibGVkICYmICRvcHRfZGVmaW5lcyAmJiAkYXJnID1+IG17XihcdyspfSkgew0K
ICAgICAgICAgICAgICAgICAgICAgICAgJGRlZmluZWR7JDF9ID0gMTsNCiAgICAgICAgICAgICAg
ICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRjbSBlcSAndW5kZWYnKSB7DQogICAg
ICAgICAgICAgICAgICAgIGlmICgkb3V0X2VuYWJsZWQgJiYgJG9wdF9kZWZpbmVzICYmICRhcmcg
PX4gbXteKFx3Kyl9KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZGVmaW5lZHskMX0gPSAw
Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNpZiAoJGNtIG5l
ICdpbmNsdWRlJyAmJiAkY20gbmUgJ3ByYWdtYScgJiYgJGNtIG5lICdlcnJvcicgJiYgJGNtIG5l
ICdpbXBvcnQnICYmICRjbSBuZSAnd2FybmluZycpIHsNCiAgICAgICAgICAgICAgICAgICAgZGll
ICIkXzokLjogdW5rbm93biBwcmVwcm9jZXNzb3IgY29tbWFuZCAnJGNtJ1xuIjsNCiAgICAgICAg
ICAgICAgICB9DQogICAgICAgICAgICAgICAgcHJpbnQgJG91dCAkdG90YWwNCiAgICAgICAgICAg
ICAgICAgICAgaWYgJG91dF9lbmFibGVkOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ug
ew0KICAgICAgICAgICAgcHJpbnQgJG91dCAkdG90YWwNCiAgICAgICAgICAgICAgICBpZiAkb3V0
X2VuYWJsZWQ7DQogICAgICAgIH0NCiAgICB9DQogICAgcHJpbnRmICIkXzokLjogJWQgdW50ZXJt
aW5hdGVkIGNvbmRpdGlvbmFsKHMpIHN0aWxsIG9wZW5cbiIsIHNjYWxhciBAaWZzdGFjaw0KICAg
ICAgICBpZiBAaWZzdGFjazsNCn0NCg0KIyB0cnVlIGlmZiAkX1swXSBpcyBhIGNvbXBsZXRlIGxp
bmUuIENvbXBsZXRlIGxpbmVzIG1heSBub3QgY29udGFpbg0KIyBwYXJ0aWFsIGNvbW1lbnRzLg0K
c3ViIGlzX2NvbXBsZXRlIHsNCiAgICBteSAkbGluZSA9IHNoaWZ0Ow0KICAgICRsaW5lID1+IHMv
XFxcbi8vc2c7DQogICAgd2hpbGUgKDEpIHsNCiAgICAgICAgbGFzdCBpZiAkbGluZSA9fiAvXEck
L3NnYzsNCiAgICAgICAgbmV4dCBpZiAoJGxpbmUgPX4gbXtcR1teXCJcJy9dK31zZ2MNCiAgICAg
ICAgICAgICAgICAgfHwgJGxpbmUgPX4gbXtcRycoW15cJ1xcXXxcXC4pKid9c2djDQogICAgICAg
ICAgICAgICAgIHx8ICRsaW5lID1+IG17XEciKFteXCJcXF18XFwuKSoifXNnYw0KICAgICAgICAg
ICAgICAgICB8fCAkbGluZSA9fiBte1xHL1teLypdfXNnYw0KICAgICAgICAgICAgICAgICB8fCAk
bGluZSA9fiBte1xHLy8uKn1zZ2MNCiAgICAgICAgICAgICAgICAgfHwgJGxpbmUgPX4gbXtcRy9c
Ki4qP1wqL31zZ2MpOw0KICAgICAgICBkaWUgIiRfOiQuOiBsaXRlcmFsIGFjcm9zcyBsaW5lc1xu
Ig0KICAgICAgICAgICAgaWYgKCRsaW5lID1+IG17XEdbXCJcJ119c2djKTsNCiAgICAgICAgIyBp
dCBpcyBhIGNvbW1lbnQNCiAgICAgICAgcmV0dXJuIDA7DQogICAgfQ0KICAgIHJldHVybiAxOw0K
fQ0KDQojIEdpdmVuIGEgbGlzdCBvZiBzdGF0dXMgdG9rZW5zICgnMCcsICcxJywgJ2FueXRoaW5n
IGVsc2UnKSwgZGVjaWRlDQojIHdoZXRoZXIgd2UgY2FuIHNhZmVseSBzdXBwcmVzcyBvdXRwdXQu
DQpzdWIgY2hlY2tfb3V0IHsNCiAgICBmb3JlYWNoIChAXykgew0KICAgICAgICBpZiAoJF8gZXEg
JzAnKSB7DQogICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1
cm4gMTsNCn0NCg0KIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4NCnN1
YiB0cmltIHsNCiAgICBteSAkeCA9IHNoaWZ0Ow0KICAgICR4ID1+IHMvXlxzKy8vczsNCiAgICAk
eCA9fiBzL1xzKyQvL3M7DQogICAgJHg7DQp9DQoNCiMgR2l2ZW4gYW4gZXhwcmVzc2lvbiwgcmV0
dXJuIHNpbXBsaWZpZWQgdmVyc2lvbiB0aGVyZW9mIChpLmUuDQojIGRlZmluZWQoWCkgZXhwYW5k
ZWQgaWYga25vd24pLg0Kc3ViIGV2YWxfZXhwciB7DQogICAgbG9jYWwgJF8gPSBzaGlmdDsNCiAg
ICBsb2NhbCAkc2Vlbl9kZWZpbmVkID0gJG9wdF9mb3JjZTsNCiAgICBteSAkcmVzdWx0ID0gZXZh
bF9jb25kKCk7DQogICAgcmV0dXJuICRfIGlmICEvXEdccyokL3NnYyB8fCAkcmVzdWx0ID1+IG17
L1wqRVJST1JcKi99IHx8ICEkc2Vlbl9kZWZpbmVkOw0KICAgICRyZXN1bHQ7DQp9DQoNCiMgUGFy
c2UgY29uZGl0aW9uYWwtZXhwcmVzc2lvbiBwcm9kdWN0aW9uLiBXZSBwcm9jZXNzIHRoZXNlLCBz
bw0KIyAiI2lmIGRlZmluZWQoQSkgPyBkZWZpbmVkKEIpIDogMCIgd29ya3MuDQpzdWIgZXZhbF9j
b25kIHsNCiAgICBteSAkYSA9IGV2YWxfb3IoKTsNCiAgICBpZiAobXtcR1xzKlw/fXNnYykgew0K
ICAgICAgICAjIGNvbmRpdGlvbmFsIG9wZXJhdG9yDQogICAgICAgIG15ICRsaHMgPSBldmFsX2Nv
bmQoKTsNCiAgICAgICAgcmV0dXJuICIvKkVSUk9SKi8iIGlmIG5vdCAvXEdccyo6L3NnYzsNCiAg
ICAgICAgbXkgJHJocyA9IGV2YWxfY29uZCgpOw0KICAgICAgICBpZiAoJGEgPX4gL1xELykgew0K
ICAgICAgICAgICAgcmV0dXJuICIkYSA/ICRsaHMgOiAkcmhzIjsNCiAgICAgICAgfSBlbHNlIHsN
CiAgICAgICAgICAgIHJldHVybiAkYSA/ICRsaHMgOiAkcmhzOw0KICAgICAgICB9DQogICAgfSBl
bHNlIHsNCiAgICAgICAgcmV0dXJuICRhOw0KICAgIH0NCn0NCg0KIyBQYXJzZSBsb2dpY2FsLW9y
LWV4cHJlc3Npb24uIEV2YWx1YXRlcyB0byAiMSIgaWYgb25lIHBhcnQga25vd24gdG8NCiMgYmUg
ZGVmaW5lZCwgIjAiIGlmIGFsbCBwYXJ0cyBrbm93biB0byBiZSB1bmRlZmluZWQsICJ8fCIgb2Yg
YWxsDQojIHVua25vd24gdGVybXMgZWxzZS4NCnN1YiBldmFsX29yIHsNCiAgICBteSBAdGVybXM7
DQogICAgbXkgQGFsbDsNCiAgICBteSAkdHJ1ZSA9IDA7DQogICAgZG8gew0KICAgICAgICBteSAk
YSA9IGV2YWxfYW5kKCk7DQogICAgICAgIHB1c2ggQGFsbCwgJGE7DQogICAgICAgIGlmICgkYSA9
fiAvXEQvKSB7DQogICAgICAgICAgICBwdXNoIEB0ZXJtcywgJGE7DQogICAgICAgIH0gZWxzZSB7
DQogICAgICAgICAgICAkdHJ1ZSB8fD0gJGErMDsNCiAgICAgICAgfQ0KICAgIH0gd2hpbGUgKG17
XEdccypcfFx8fXNnYyk7DQogICAgcmV0dXJuIChAYWxsID09IDENCiAgICAgICAgICAgID8gJGFs
bFswXQ0KICAgICAgICAgICAgOiAkdHJ1ZQ0KICAgICAgICAgICAgPyAiMSINCiAgICAgICAgICAg
IDogIUB0ZXJtcw0KICAgICAgICAgICAgPyAiMCINCiAgICAgICAgICAgIDogQHRlcm1zID09IDEN
CiAgICAgICAgICAgID8gIjAgfHwgJHRlcm1zWzBdIg0KICAgICAgICAgICAgOiBqb2luICIgfHwg
IiwgQHRlcm1zKTsNCn0NCg0KIyBQYXJzZSBsb2dpY2FsLWFuZC1leHByZXNzaW9uLiBFdmFsdWF0
ZXMgdG8gIjAiIGlmIG9uZSBwYXJ0IGtub3duIHRvDQojIGJlIHVuZGVmaW5lZCwgIjEiIGlmIGFs
bCBwYXJ0cyBrbm93biB0byBiZSBkZWZpbmVkLCAiJiYiIG9mIGFsbA0KIyB1bmtub3duIHRlcm1z
IGVsc2UuDQpzdWIgZXZhbF9hbmQgew0KICAgIG15IEB0ZXJtczsNCiAgICBteSBAYWxsOw0KICAg
IG15ICR0cnVlID0gMTsNCiAgICBkbyB7DQogICAgICAgIG15ICRhID0gZXZhbF9iaXRvcigpOw0K
ICAgICAgICBwdXNoIEBhbGwsICRhOw0KICAgICAgICBpZiAoJGEgPX4gL1xELykgew0KICAgICAg
ICAgICAgcHVzaCBAdGVybXMsICRhOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJHRy
dWUgJiY9ICRhKzA7DQogICAgICAgIH0NCiAgICB9IHdoaWxlIChte1xHXHMqXCZcJn1zZ2MpOw0K
ICAgIHJldHVybiAoQGFsbCA9PSAxDQogICAgICAgICAgICA/ICRhbGxbMF0NCiAgICAgICAgICAg
IDogISR0cnVlDQogICAgICAgICAgICA/ICIwIg0KICAgICAgICAgICAgOiAhQHRlcm1zDQogICAg
ICAgICAgICA/ICIxIg0KICAgICAgICAgICAgOiBAdGVybXMgPT0gMQ0KICAgICAgICAgICAgPyAi
MSAmJiAkdGVybXNbMF0iDQogICAgICAgICAgICA6IGpvaW4gIiAmJiAiLCBAdGVybXMpOw0KfQ0K
DQojIFBhcnNlIGluY2x1c2l2ZS1vci1leHByZXNzaW9uLiBUaGlzIGNvbWJpbmVzIHRoZSBrbm93
biB0ZXJtcyB0byBvbmUsDQojIHRoYXQgaXMsIGAjaWYgMSArICgyIHwgMyknIHlpZWxkcyBgI2lm
IDEgKyAzJy4NCnN1YiBldmFsX2JpdG9yIHsNCiAgICBteSBAdGVybXM7DQogICAgbXkgJHZhbHVl
ID0gMDsNCiAgICBkbyB7DQogICAgICAgIG15ICRhID0gZXZhbF9iaXR4b3IoKTsNCiAgICAgICAg
aWYgKCRhID1+IC9cRC8pIHsNCiAgICAgICAgICAgIHB1c2ggQHRlcm1zLCAkYTsNCiAgICAgICAg
fSBlbHNlIHsNCiAgICAgICAgICAgICR2YWx1ZSB8PSAkYSswOw0KICAgICAgICB9DQogICAgfSB3
aGlsZSAobXtcR1xzKlx8KD89JHxbXnxdKX1zZ2MpOw0KICAgIHB1c2ggQHRlcm1zLCAkdmFsdWUg
aWYgJHZhbHVlOw0KICAgIHJldHVybiAoQHRlcm1zID8gam9pbiAiIHwgIiwgQHRlcm1zIDogIjAi
KTsNCn0NCg0KIyBQYXJzZSBleGNsdXNpdmUtb3ItZXhwcmVzc2lvbi4gVGhpcyBjb21iaW5lcyB0
aGUga25vd24gdGVybXMgdG8gb25lLA0KIyB0aGF0IGlzLCBgI2lmIDEgKyAoMiBeIDMpJyB5aWVs
ZHMgYCNpZiAxICsgMScuDQpzdWIgZXZhbF9iaXR4b3Igew0KICAgIG15IEB0ZXJtczsNCiAgICBt
eSAkdmFsdWUgPSAwOw0KICAgIGRvIHsNCiAgICAgICAgbXkgJGEgPSBldmFsX2JpdGFuZCgpOw0K
ICAgICAgICBpZiAoJGEgPX4gL1xELykgew0KICAgICAgICAgICAgcHVzaCBAdGVybXMsICRhOw0K
ICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJHZhbHVlIF49ICRhKzA7DQogICAgICAgIH0N
CiAgICB9IHdoaWxlIChte1xHXHMqXF59c2djKTsNCiAgICBwdXNoIEB0ZXJtcywgJHZhbHVlIGlm
ICR2YWx1ZTsNCiAgICByZXR1cm4gKEB0ZXJtcyA/IGpvaW4gIiBeICIsIEB0ZXJtcyA6ICIwIik7
DQp9DQoNCiMgUGFyc2UgYW5kLWV4cHJlc3Npb24uIFRoaXMgY29tYmluZXMgdGhlIGtub3duIHRl
cm1zIHRvIG9uZSwNCiMgdGhhdCBpcywgYCNpZiAxICsgKDIgJiAzKScgeWllbGRzIGAjaWYgMSAr
IDInLg0Kc3ViIGV2YWxfYml0YW5kIHsNCiAgICBteSBAdGVybXM7DQogICAgbXkgJHZhbHVlID0g
fjA7DQogICAgZG8gew0KICAgICAgICBteSAkYSA9IGV2YWxfZXEoKTsNCiAgICAgICAgaWYgKCRh
ID1+IC9cRC8pIHsNCiAgICAgICAgICAgIHB1c2ggQHRlcm1zLCAkYTsNCiAgICAgICAgfSBlbHNl
IHsNCiAgICAgICAgICAgICR2YWx1ZSAmPSAkYSswOw0KICAgICAgICB9DQogICAgfSB3aGlsZSAo
bXtcR1xzKlwmKD89JHxbXiZdKX1zZ2MpOw0KICAgIHB1c2ggQHRlcm1zLCAkdmFsdWUgaWYgJHZh
bHVlICE9IH4wOw0KICAgIGlmICgkdmFsdWUgPT0gMCkgew0KICAgICAgICByZXR1cm4gIjAiOw0K
ICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiAoQHRlcm1zID8gam9pbiAiICYgIiwgQHRlcm1z
IDogIjAiKTsNCiAgICB9DQp9DQoNCiMgUGFyc2UgZXF1YWxpdHktZXhwcmVzc2lvbi4gVGhvc2Ug
YXJlIHRvbyBzZWxkb20gaW4gY29uZGl0aW9uYWxzDQojIGNvbmNlcm5lZCB3aXRoIGRlZmluZWRu
ZXNzLCBzbyB3ZSBkb24ndCBldmFsdWF0ZSB0aGVtLg0Kc3ViIGV2YWxfZXEgew0KICAgIG15ICRh
ID0gZXZhbF9yZWxhKCk7DQogICAgd2hpbGUgKG17XEdccyooWz0hXT0pfXNnYykgew0KICAgICAg
ICAkYSAuPSAiICQxICI7DQogICAgICAgICRhIC49IGV2YWxfcmVsYSgpOw0KICAgIH0NCiAgICAk
YTsNCn0NCg0KIyBQYXJzZSByZWxhdGlvbmFsLWV4cHJlc3Npb24uIFRob3NlIGFyZSB0b28gc2Vs
ZG9tIGluIGNvbmRpdGlvbmFscw0KIyBjb25jZXJuZWQgd2l0aCBkZWZpbmVkbmVzcywgc28gd2Ug
ZG9uJ3QgZXZhbHVhdGUgdGhlbS4NCnN1YiBldmFsX3JlbGEgew0KICAgIG15ICRhID0gZXZhbF9z
aGlmdCgpOw0KICAgIHdoaWxlIChte1xHXHMqKFs8Pl09PykoPz1bXjw+XSl9c2djKSB7DQogICAg
ICAgICRhIC49ICIgJDEgIjsNCiAgICAgICAgJGEgLj0gZXZhbF9zaGlmdCgpOw0KICAgIH0NCiAg
ICAkYTsNCn0NCg0KIyBQYXJzZSBzaGlmdC1leHByZXNzaW9uLiBUaG9zZSBhcmUgdG9vIHNlbGRv
bSBpbiBjb25kaXRpb25hbHMNCiMgY29uY2VybmVkIHdpdGggZGVmaW5lZG5lc3MsIHNvIHdlIGRv
bid0IGV2YWx1YXRlIHRoZW0uDQpzdWIgZXZhbF9zaGlmdCB7DQogICAgbXkgJGEgPSBldmFsX2Fk
ZCgpOw0KICAgIHdoaWxlIChte1xHXHMqKDw8fD4+KX1zZ2MpIHsNCiAgICAgICAgJGEgLj0gIiAk
MSAiOw0KICAgICAgICAkYSAuPSBldmFsX2FkZCgpOw0KICAgIH0NCiAgICAkYTsNCn0NCg0KIyBQ
YXJzZSBhZGRpdGl2ZS1leHByZXNzaW9uLiBUaG9zZSBhcmUgdG9vIHNlbGRvbSBpbiBjb25kaXRp
b25hbHMNCiMgY29uY2VybmVkIHdpdGggZGVmaW5lZG5lc3MsIHNvIHdlIGRvbid0IGV2YWx1YXRl
IHRoZW0uDQpzdWIgZXZhbF9hZGQgew0KICAgIG15ICRhID0gZXZhbF9tdWx0KCk7DQogICAgd2hp
bGUgKG17XEdccyooXCt8LSl9c2djKSB7DQogICAgICAgICRhIC49ICIgJDEgIjsNCiAgICAgICAg
JGEgLj0gZXZhbF9tdWx0KCk7DQogICAgfQ0KICAgICRhOw0KfQ0KDQojIFBhcnNlIG11bHRpcGxp
Y2F0aXZlLWV4cHJlc3Npb24uIFRob3NlIGFyZSB0b28gc2VsZG9tIGluIGNvbmRpdGlvbmFscw0K
IyBjb25jZXJuZWQgd2l0aCBkZWZpbmVkbmVzcywgc28gd2UgZG9uJ3QgZXZhbHVhdGUgdGhlbS4N
CnN1YiBldmFsX211bHQgew0KICAgIG15ICRhID0gZXZhbF91bmFyeSgpOw0KICAgIHdoaWxlICht
e1xHXHMqKFwqfC98JSl9c2djKSB7DQogICAgICAgICRhIC49ICIgJDEgIjsNCiAgICAgICAgJGEg
Lj0gZXZhbF91bmFyeSgpOw0KICAgIH0NCiAgICAkYTsNCn0NCg0KIyBQYXJzZSB1bmFyeS1leHBy
ZXNzaW9uLiBJbiBwcmVwcm9jZXNzb3IgZGVmaW5lcywgdGhpcyBhcmU6DQojIC0gIi1leHByIiwg
IitleHByIiwgIiFleHByIiwgIn5leHByIiAoaGFuZGxlZCBiZWNhdXNlIHRoZXkncmUgc2ltcGxl
KQ0KIyAtICJkZWZpbmVkKFNZTSkiLCAiZGVmaW5lZCBTWU0iIChoYW5kbGVkKQ0KIyAtIG51bWJl
cnMgYXJlIGNvbnZlcnRlZCB0byBkZWNpbWFsDQojIC0gcGFyZW50aGVzaXplZCBleHByZXNzaW9u
cw0Kc3ViIGV2YWxfdW5hcnkgew0KICAgIG17XEdccyp9c2djOw0KICAgIGlmIChte1xHIX1zZ2Mp
IHsNCiAgICAgICAgbXkgJGFyZyA9IGV2YWxfdW5hcnkoKTsNCiAgICAgICAgaWYgKCRhcmcgPX4g
L1xELykgew0KICAgICAgICAgICAgcmV0dXJuICIhJGFyZyI7DQogICAgICAgIH0gZWxzZSB7DQog
ICAgICAgICAgICByZXR1cm4gJGFyZyA/ICIwIiA6ICIxIjsNCiAgICAgICAgfQ0KICAgIH0gZWxz
aWYgKG17XEd+fXNnYykgew0KICAgICAgICBteSAkYXJnID0gZXZhbF91bmFyeSgpOw0KICAgICAg
ICBpZiAoJGFyZyA9fiAvXEQvKSB7DQogICAgICAgICAgICByZXR1cm4gIn4kYXJnIjsNCiAgICAg
ICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiB+JGFyZzsNCiAgICAgICAgfQ0KICAgIH0g
ZWxzaWYgKG17XEdcK31zZ2MpIHsNCiAgICAgICAgcmV0dXJuIGV2YWxfdW5hcnkoKTsNCiAgICB9
IGVsc2lmIChte1xHXC19c2djKSB7DQogICAgICAgIG15ICRhcmcgPSBldmFsX3VuYXJ5KCk7DQog
ICAgICAgIGlmICgkYXJnID1+IC9cRC8pIHsNCiAgICAgICAgICAgIHJldHVybiAiLSAkYXJnIjsN
CiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAtJGFyZzsNCiAgICAgICAgfQ0K
ICAgIH0gZWxzaWYgKG17XEdkZWZpbmVkXHMqXChccyooXHcrKVxzKlwpfXNnYyB8fCBte1xHXHMq
ZGVmaW5lZFxzKyhcdyspfXNnYykgew0KICAgICAgICBpZiAoZXhpc3RzICRkZWZpbmVkeyQxfSkg
ew0KICAgICAgICAgICAgJHNlZW5fZGVmaW5lZCA9IDE7DQogICAgICAgICAgICByZXR1cm4gJGRl
ZmluZWR7JDF9Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICJkZWZpbmVk
KCQxKSI7DQogICAgICAgIH0NCiAgICB9IGVsc2lmIChte1xHMFt4WF0oWzAtOWEtZkEtRl0rKVt1
VWxMXSp9c2djKSB7DQogICAgICAgIHJldHVybiBoZXggJDE7DQogICAgfSBlbHNpZiAobXtcRzAo
WzAtN10rKVt1VWxMXSp9c2djKSB7DQogICAgICAgIHJldHVybiBvY3QgJDE7DQogICAgfSBlbHNp
ZiAobXtcRyhbMC05XSspW3VVbExdKn1zZ2MpIHsNCiAgICAgICAgcmV0dXJuICQxOw0KICAgIH0g
ZWxzaWYgKG17XEcoXHcrKX1zZ2MpIHsNCiAgICAgICAgaWYgKG17XEdccyg/PVwoKX1zZ2MpIHsN
CiAgICAgICAgICAgICMgZnVuY3Rpb24tbGlrZSBtYWNybw0KICAgICAgICAgICAgcmV0dXJuICIv
KkVSUk9SKi8iOw0KICAgICAgICB9IGVsc2lmIChleGlzdHMgJGRlZmluZWR7JDF9ICYmICEkZGVm
aW5lZHskMX0pIHsNCiAgICAgICAgICAgICMgb2JqZWN0LWxpa2UgbWFjcm8gd2hpY2ggaXMga25v
d24gdG8gbm90IGJlIGRlZmluZWQNCiAgICAgICAgICAgIHJldHVybiAiMCI7DQogICAgICAgIH0g
ZWxzaWYgKCRvcHRfb3B0aW1pc3RpYykgew0KICAgICAgICAgICAgIyBvYmplY3QtbGlrZSBtYWNy
byB3aGljaCBpcyAobWF5YmUpIGRlZmluZWQNCiAgICAgICAgICAgIHJldHVybiAkMTsNCiAgICAg
ICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAiLypFUlJPUiovIjsNCiAgICAgICAgfQ0K
ICAgIH0gZWxzaWYgKG17XEdcKH1zZ2MpIHsNCiAgICAgICAgbXkgJGFyZyA9IGV2YWxfY29uZCgp
Ow0KICAgICAgICByZXR1cm4gIi8qRVJST1IqLyIgaWYgIW17XEdccypcKX1zZ2M7DQogICAgICAg
IGlmICgkYXJnID1+IC9cRC8pIHsNCiAgICAgICAgICAgIHJldHVybiAiKCRhcmcpIjsNCiAgICAg
ICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAkYXJnOw0KICAgICAgICB9DQogICAgfSBl
bHNlIHsNCiAgICAgICAgcmV0dXJuICIvKkVSUk9SKi8iOw0KICAgIH0NCn0NCg0Kc3ViIGRlYnVn
IHsNCiAgICBwcmludCAifCAiLCBzaGlmdCwgIjpcbnwgJF9cbnwgIiwgIiAiIHggcG9zKCRfKSwg
Il5cbiI7DQp9DQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>