<?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>168489</bug_id>
          
          <creation_ts>2017-02-16 18:14:20 -0800</creation_ts>
          <short_desc>REGRESSION(r212514): broke test runner (Requested by alexchristensen on #webkit).</short_desc>
          <delta_ts>2017-02-16 18:18:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1278055</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-16 18:14:20 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/212514 broke the build:
broke test runner (Requested by alexchristensen on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278056</commentid>
    <comment_count>1</comment_count>
      <attachid>301869</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-16 18:14:33 -0800</bug_when>
    <thetext>Created attachment 301869
ROLLOUT of r212514

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278058</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-02-16 18:18:01 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/212517</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301869</attachid>
            <date>2017-02-16 18:14:33 -0800</date>
            <delta_ts>2017-02-16 18:17:53 -0800</delta_ts>
            <desc>ROLLOUT of r212514</desc>
            <filename>bug-168489-20170216211156.patch</filename>
            <type>text/plain</type>
            <size>243159</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyNTE2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjI2MzQ3ODc3MWI4YzlkNzM5Y2ZkMTc3ZmU1OWU3MjZm
M2VkYjdiMy4uZGNiZDRiMzE4ZmY2ZDVjOTBkZjI4OTcxNWRlNTNlMGE4ZjZiMDJiNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
IEBACisyMDE3LTAyLTE2ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4K
KworICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjEyNTE0LgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4NDg5CisKKyAgICAgICAgYnJv
a2UgdGVzdCBydW5uZXIgKFJlcXVlc3RlZCBieSBhbGV4Y2hyaXN0ZW5zZW4gb24gI3dlYmtpdCku
CisKKyAgICAgICAgUmV2ZXJ0ZWQgY2hhbmdlc2V0OgorCisgICAgICAgICJSZW1vdmUgRUZMLXNw
ZWNpZmljIGZpbGVzIGluIFRvb2xzLiIKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvMjEyNTE0CisKIDIwMTctMDItMTYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgRUZMLXNwZWNpZmljIGZpbGVzIGlu
IFRvb2xzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvSW1hZ2VEaWZmL2VmbC9JbWFnZURpZmYuY3BwIGIv
VG9vbHMvSW1hZ2VEaWZmL2VmbC9JbWFnZURpZmYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1N2I5N2I5YWU0
MGZhY2Q5ZGEzODMxNzUxNmMzN2EzZTk1N2E5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9J
bWFnZURpZmYvZWZsL0ltYWdlRGlmZi5jcHAKQEAgLTAsMCArMSwzNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9G
VVNJT04gRW1iZWRkZWQgU3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWNvcmVf
RXZhcy5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVk
ZSA8Y21hdGg+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVk
ZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL2VmbC9VbmlxdWVQdHJFZmwuaD4KKworZW51bSBQaXhlbENvbXBvbmVudCB7
CisgICAgUmVkLAorICAgIEdyZWVuLAorICAgIEJsdWUsCisgICAgQWxwaGEKK307CisKK3N0YXRp
YyBFZmxVbmlxdWVQdHI8RWNvcmVfRXZhcz4gZ0Vjb3JlRXZhczsKK3N0YXRpYyBkb3VibGUgZ1Rv
bGVyYW5jZSA9IDA7CisKK3N0YXRpYyB2b2lkIGFib3J0V2l0aEVycm9yTWVzc2FnZShjb25zdCBj
aGFyKiBlcnJvck1lc3NhZ2UpOworCitzdGF0aWMgdW5zaWduZWQgY2hhciogcGl4ZWxGcm9tSW1h
Z2VEYXRhKHVuc2lnbmVkIGNoYXIqIGltYWdlRGF0YSwgaW50IHJvd1N0cmlkZSwgaW50IHgsIGlu
dCB5KQoreworICAgIHJldHVybiBpbWFnZURhdGEgKyAoeSAqIHJvd1N0cmlkZSkgKyAoeCA8PCAy
KTsKK30KKworc3RhdGljIEV2YXNfT2JqZWN0KiBkaWZmZXJlbmNlSW1hZ2VGcm9tRGlmZmVyZW5j
ZUJ1ZmZlcihFdmFzKiBldmFzLCB1bnNpZ25lZCBjaGFyKiBidWZmZXIsIGludCB3aWR0aCwgaW50
IGhlaWdodCkKK3sKKyAgICBFdmFzX09iamVjdCogaW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9m
aWxsZWRfYWRkKGV2YXMpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIGFib3J0V2l0aEVycm9y
TWVzc2FnZSgiY291bGQgbm90IGNyZWF0ZSBkaWZmZXJlbmNlIGltYWdlIik7CisKKyAgICBldmFz
X29iamVjdF9pbWFnZV9zaXplX3NldChpbWFnZSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19v
YmplY3RfaW1hZ2VfY29sb3JzcGFjZV9zZXQoaW1hZ2UsIEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4
OCk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBkaWZmUGl4ZWxzID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KGltYWdlLCBFSU5BX1RSVUUpKTsK
KyAgICBjb25zdCBpbnQgcm93U3RyaWRlID0gZXZhc19vYmplY3RfaW1hZ2Vfc3RyaWRlX2dldChp
bWFnZSk7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIqIGRpZmZQaXhlbCA9IHBpeGVsRnJvbUltYWdlRGF0YShkaWZmUGl4ZWxzLCByb3dTdHJpZGUs
IHgsIHkpOworICAgICAgICAgICAgZGlmZlBpeGVsW1JlZF0gPSBkaWZmUGl4ZWxbR3JlZW5dID0g
ZGlmZlBpeGVsW0JsdWVdID0gKmJ1ZmZlcisrOworICAgICAgICAgICAgZGlmZlBpeGVsW0FscGhh
XSA9IDB4ZmY7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBldmFzX29iamVjdF9pbWFnZV9kYXRh
X3NldChpbWFnZSwgZGlmZlBpeGVscyk7CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRp
YyBmbG9hdCBjb21wdXRlRGlzdGFuY2VCZXR3ZWVuUGl4ZWxDb21wb25lbnRzKHVuc2lnbmVkIGNo
YXIgYWN0dWFsQ29tcG9uZW50LCB1bnNpZ25lZCBjaGFyIGJhc2VDb21wb25lbnQpCit7CisgICAg
cmV0dXJuIChhY3R1YWxDb21wb25lbnQgLSBiYXNlQ29tcG9uZW50KSAvIHN0ZDo6bWF4PGZsb2F0
PigyNTUgLSBiYXNlQ29tcG9uZW50LCBiYXNlQ29tcG9uZW50KTsKK30KKworc3RhdGljIGZsb2F0
IGNvbXB1dGVEaXN0YW5jZUJldHdlZW5QaXhlbENvbXBvbmVudHModW5zaWduZWQgY2hhciogYWN0
dWFsUGl4ZWwsIHVuc2lnbmVkIGNoYXIqIGJhc2VQaXhlbCwgUGl4ZWxDb21wb25lbnQgY29tcG9u
ZW50KQoreworICAgIHJldHVybiBjb21wdXRlRGlzdGFuY2VCZXR3ZWVuUGl4ZWxDb21wb25lbnRz
KGFjdHVhbFBpeGVsW2NvbXBvbmVudF0sIGJhc2VQaXhlbFtjb21wb25lbnRdKTsKK30KKworc3Rh
dGljIGZsb2F0IGNhbGN1bGF0ZVBpeGVsRGlmZmVyZW5jZSh1bnNpZ25lZCBjaGFyKiBiYXNlUGl4
ZWwsIHVuc2lnbmVkIGNoYXIqIGFjdHVhbFBpeGVsKQoreworICAgIGNvbnN0IGZsb2F0IHJlZCA9
IGNvbXB1dGVEaXN0YW5jZUJldHdlZW5QaXhlbENvbXBvbmVudHMoYWN0dWFsUGl4ZWwsIGJhc2VQ
aXhlbCwgUmVkKTsKKyAgICBjb25zdCBmbG9hdCBncmVlbiA9IGNvbXB1dGVEaXN0YW5jZUJldHdl
ZW5QaXhlbENvbXBvbmVudHMoYWN0dWFsUGl4ZWwsIGJhc2VQaXhlbCwgR3JlZW4pOworICAgIGNv
bnN0IGZsb2F0IGJsdWUgPSBjb21wdXRlRGlzdGFuY2VCZXR3ZWVuUGl4ZWxDb21wb25lbnRzKGFj
dHVhbFBpeGVsLCBiYXNlUGl4ZWwsIEJsdWUpOworICAgIGNvbnN0IGZsb2F0IGFscGhhID0gY29t
cHV0ZURpc3RhbmNlQmV0d2VlblBpeGVsQ29tcG9uZW50cyhhY3R1YWxQaXhlbCwgYmFzZVBpeGVs
LCBBbHBoYSk7CisgICAgcmV0dXJuIHNxcnRmKHJlZCAqIHJlZCArIGdyZWVuICogZ3JlZW4gKyBi
bHVlICogYmx1ZSArIGFscGhhICogYWxwaGEpIC8gMi4wZjsKK30KKworc3RhdGljIGZsb2F0IGNh
bGN1bGF0ZURpZmZlcmVuY2UoRXZhc19PYmplY3QqIGJhc2VsaW5lSW1hZ2UsIEV2YXNfT2JqZWN0
KiBhY3R1YWxJbWFnZSwgRWZsVW5pcXVlUHRyPEV2YXNfT2JqZWN0PiYgZGlmZmVyZW5jZUltYWdl
KQoreworICAgIGludCB3aWR0aCwgaGVpZ2h0LCBiYXNlbGluZVdpZHRoLCBiYXNlbGluZUhlaWdo
dDsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChhY3R1YWxJbWFnZSwgJndpZHRoLCAm
aGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChiYXNlbGluZUltYWdlLCAm
YmFzZWxpbmVXaWR0aCwgJmJhc2VsaW5lSGVpZ2h0KTsKKworICAgIGlmICh3aWR0aCAhPSBiYXNl
bGluZVdpZHRoIHx8IGhlaWdodCAhPSBiYXNlbGluZUhlaWdodCkgeworICAgICAgICBwcmludGYo
IkVycm9yLCB0ZXN0IGFuZCByZWZlcmVuY2UgaW1hZ2UgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuXG4i
KTsKKyAgICAgICAgcmV0dXJuIDEwMDsgLy8gQ29tcGxldGVseSBkaWZmZXJlbnQuCisgICAgfQor
CisgICAgYXV0byBkaWZmQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+
KHdpZHRoICogaGVpZ2h0KTsKKyAgICBpZiAoIWRpZmZCdWZmZXIpCisgICAgICAgIGFib3J0V2l0
aEVycm9yTWVzc2FnZSgiY291bGQgbm90IGNyZWF0ZSBkaWZmZXJlbmNlIGJ1ZmZlciIpOworCisg
ICAgY29uc3QgaW50IGFjdHVhbFJvd1N0cmlkZSA9IGV2YXNfb2JqZWN0X2ltYWdlX3N0cmlkZV9n
ZXQoYWN0dWFsSW1hZ2UpOworICAgIGNvbnN0IGludCBiYXNlUm93U3RyaWRlID0gZXZhc19vYmpl
Y3RfaW1hZ2Vfc3RyaWRlX2dldChiYXNlbGluZUltYWdlKTsKKyAgICB1bnNpZ25lZCBudW1iZXJP
ZkRpZmZlcmVudFBpeGVscyA9IDA7CisgICAgZmxvYXQgdG90YWxEaXN0YW5jZSA9IDA7CisgICAg
ZmxvYXQgbWF4RGlzdGFuY2UgPSAwOworICAgIHVuc2lnbmVkIGNoYXIqIGFjdHVhbFBpeGVscyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldChh
Y3R1YWxJbWFnZSwgRUlOQV9GQUxTRSkpOworICAgIHVuc2lnbmVkIGNoYXIqIGJhc2VQaXhlbHMg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQo
YmFzZWxpbmVJbWFnZSwgRUlOQV9GQUxTRSkpOworICAgIHVuc2lnbmVkIGNoYXIqIGN1cnJlbnRE
aWZmUGl4ZWwgPSBkaWZmQnVmZmVyLmdldCgpOworCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKSB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGFjdHVhbFBpeGVsID0gcGl4ZWxGcm9tSW1hZ2VE
YXRhKGFjdHVhbFBpeGVscywgYWN0dWFsUm93U3RyaWRlLCB4LCB5KTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIqIGJhc2VQaXhlbCA9IHBpeGVsRnJvbUltYWdlRGF0YShiYXNlUGl4ZWxzLCBi
YXNlUm93U3RyaWRlLCB4LCB5KTsKKworICAgICAgICAgICAgY29uc3QgZmxvYXQgZGlzdGFuY2Ug
PSBjYWxjdWxhdGVQaXhlbERpZmZlcmVuY2UoYmFzZVBpeGVsLCBhY3R1YWxQaXhlbCk7CisgICAg
ICAgICAgICAqY3VycmVudERpZmZQaXhlbCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
ZGlzdGFuY2UgKiAyNTUuMGYpOworCisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gMS4wZiAv
IDI1NS4wZikgeworICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZEaWZmZXJlbnRQaXhlbHM7Cisg
ICAgICAgICAgICAgICAgdG90YWxEaXN0YW5jZSArPSBkaXN0YW5jZTsKKyAgICAgICAgICAgICAg
ICBtYXhEaXN0YW5jZSA9IHN0ZDo6bWF4PGZsb2F0PihtYXhEaXN0YW5jZSwgZGlzdGFuY2UpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2hlbiB1c2luZyBldmFz
X29iamVjdF9pbWFnZV9kYXRhX2dldCgpLCBhIGNvbXBsZW1lbnRhcnkgZXZhc19vYmplY3RfZGF0
YV9zZXQoKSBtdXN0IGJlCisgICAgLy8gaXNzdWVkIHRvIGJhbGFuY2UgdGhlIHJlZmVyZW5jZSBj
b3VudCwgZXZlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gY2hhbmdlZC4KKyAgICBldmFzX29i
amVjdF9pbWFnZV9kYXRhX3NldChiYXNlbGluZUltYWdlLCBiYXNlUGl4ZWxzKTsKKyAgICBldmFz
X29iamVjdF9pbWFnZV9kYXRhX3NldChhY3R1YWxJbWFnZSwgYWN0dWFsUGl4ZWxzKTsKKworICAg
IC8vIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYXMgYSBwZXJjZW50YWdlIGNvbWJpbmluZyBib3Ro
IHRoZSBudW1iZXIgb2YKKyAgICAvLyBkaWZmZXJlbnQgcGl4ZWxzIGFuZCB0aGVpciBkaWZmZXJl
bmNlIGFtb3VudCBpLmUuIHRoZSBhdmVyYWdlIGRpc3RhbmNlCisgICAgLy8gb3ZlciB0aGUgZW50
aXJlIGltYWdlCisgICAgZmxvYXQgZGlmZmVyZW5jZSA9IDA7CisgICAgaWYgKG51bWJlck9mRGlm
ZmVyZW50UGl4ZWxzKQorICAgICAgICBkaWZmZXJlbmNlID0gMTAwLjBmICogdG90YWxEaXN0YW5j
ZSAvIChoZWlnaHQgKiB3aWR0aCk7CisgICAgaWYgKGRpZmZlcmVuY2UgPD0gZ1RvbGVyYW5jZSkK
KyAgICAgICAgZGlmZmVyZW5jZSA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIGRpZmZlcmVuY2Ug
PSByb3VuZGYoZGlmZmVyZW5jZSAqIDEwMC4wZikgLyAxMDAuMGY7CisgICAgICAgIGRpZmZlcmVu
Y2UgPSBzdGQ6Om1heChkaWZmZXJlbmNlLCAwLjAxZik7IC8vIHJvdW5kIHRvIDIgZGVjaW1hbCBw
bGFjZXMKKworICAgICAgICBkaWZmZXJlbmNlSW1hZ2UgPSBFZmxVbmlxdWVQdHI8RXZhc19PYmpl
Y3Q+KGRpZmZlcmVuY2VJbWFnZUZyb21EaWZmZXJlbmNlQnVmZmVyKGV2YXNfb2JqZWN0X2V2YXNf
Z2V0KGJhc2VsaW5lSW1hZ2UpLCBkaWZmQnVmZmVyLmdldCgpLCB3aWR0aCwgaGVpZ2h0KSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGRpZmZlcmVuY2U7Cit9CisKK3N0YXRpYyBpbnQgZ2V0VGVtcG9y
YXJ5RmlsZShjaGFyICpmaWxlTmFtZSwgc2l6ZV90IGZpbGVOYW1lTGVuZ3RoKQoreworICAgIGNo
YXIqIHRlbXBEaXJlY3RvcnkgPSBnZXRlbnYoIlRNUERJUiIpOworICAgIGlmICghdGVtcERpcmVj
dG9yeSkKKyAgICAgICAgdGVtcERpcmVjdG9yeSA9IGdldGVudigiVEVNUCIpOworCisgICAgaWYg
KHRlbXBEaXJlY3RvcnkpCisgICAgICAgIHNucHJpbnRmKGZpbGVOYW1lLCBmaWxlTmFtZUxlbmd0
aCwgIiVzL0ltYWdlRGlmZlhYWFhYWC5wbmciLCB0ZW1wRGlyZWN0b3J5KTsKKyAgICBlbHNlIHsK
KyNpZiBfX2xpbnV4X18KKyAgICAgICAgc3RyY3B5KGZpbGVOYW1lLCAiL2Rldi9zaG0vSW1hZ2VE
aWZmWFhYWFhYLnBuZyIpOworICAgICAgICBjb25zdCBpbnQgZmlsZURlc2NyaXB0b3IgPSBta3N0
ZW1wcyhmaWxlTmFtZSwgc2l6ZW9mKCIucG5nIikgLSAxKTsKKyAgICAgICAgaWYgKGZpbGVEZXNj
cmlwdG9yID49IDApCisgICAgICAgICAgICByZXR1cm4gZmlsZURlc2NyaXB0b3I7CisjZW5kaWYg
Ly8gX19saW51eF9fCisKKyAgICAgICAgc3RyY3B5KGZpbGVOYW1lLCAiSW1hZ2VEaWZmWFhYWFhY
LnBuZyIpOworICAgIH0KKworICAgIHJldHVybiBta3N0ZW1wcyhmaWxlTmFtZSwgc2l6ZW9mKCIu
cG5nIikgLSAxKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRJbWFnZShFdmFzX09iamVjdCogaW1h
Z2UpCit7CisgICAgY2hhciBmaWxlTmFtZVtQQVRIX01BWF07CisKKyAgICBjb25zdCBpbnQgdGVt
cEltYWdlRmQgPSBnZXRUZW1wb3JhcnlGaWxlKGZpbGVOYW1lLCBQQVRIX01BWCk7CisgICAgaWYg
KHRlbXBJbWFnZUZkID09IC0xKQorICAgICAgICBhYm9ydFdpdGhFcnJvck1lc3NhZ2UoImNvdWxk
IG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiKTsKKworICAgIGV2YXNfcmVuZGVyKGV2YXNfb2Jq
ZWN0X2V2YXNfZ2V0KGltYWdlKSk7CisKKyAgICBpZiAoZXZhc19vYmplY3RfaW1hZ2Vfc2F2ZShp
bWFnZSwgZmlsZU5hbWUsIDAsIDApKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOwor
ICAgICAgICBpZiAoIXN0YXQoZmlsZU5hbWUsICZmaWxlSW5mbykpIHsKKyAgICAgICAgICAgIHBy
aW50ZigiQ29udGVudC1MZW5ndGg6ICVsZFxuIiwgZmlsZUluZm8uc3Rfc2l6ZSk7CisgICAgICAg
ICAgICBmZmx1c2goc3Rkb3V0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJb
MjA0OF07CisgICAgICAgICAgICBzc2l6ZV90IGJ5dGVzUmVhZDsKKyAgICAgICAgICAgIHdoaWxl
ICgoYnl0ZXNSZWFkID0gcmVhZCh0ZW1wSW1hZ2VGZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkp
ID4gMCkgeworICAgICAgICAgICAgICAgIHNzaXplX3QgYnl0ZXNXcml0dGVuID0gMDsKKyAgICAg
ICAgICAgICAgICBzc2l6ZV90IGNvdW50OworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKChjb3VudCA9IHdyaXRlKDEsIGJ1ZmZlciArIGJ5dGVzV3JpdHRlbiwg
Ynl0ZXNSZWFkIC0gYnl0ZXNXcml0dGVuKSkgPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBieXRlc1dyaXR0ZW4gKz0gY291bnQ7CisgICAg
ICAgICAgICAgICAgfSB3aGlsZSAoYnl0ZXNXcml0dGVuIDwgYnl0ZXNSZWFkKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZSh0ZW1wSW1hZ2VGZCk7CisgICAgdW5s
aW5rKGZpbGVOYW1lKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRJbWFnZURpZmZlcmVuY2VzKEV2
YXNfT2JqZWN0KiBiYXNlbGluZUltYWdlLCBFdmFzX09iamVjdCogYWN0dWFsSW1hZ2UpCit7Cisg
ICAgRWZsVW5pcXVlUHRyPEV2YXNfT2JqZWN0PiBkaWZmZXJlbmNlSW1hZ2U7CisgICAgY29uc3Qg
ZmxvYXQgZGlmZmVyZW5jZSA9IGNhbGN1bGF0ZURpZmZlcmVuY2UoYmFzZWxpbmVJbWFnZSwgYWN0
dWFsSW1hZ2UsIGRpZmZlcmVuY2VJbWFnZSk7CisKKyAgICBpZiAoZGlmZmVyZW5jZSA+IDAuMGYp
IHsKKyAgICAgICAgaWYgKGRpZmZlcmVuY2VJbWFnZSkKKyAgICAgICAgICAgIHByaW50SW1hZ2Uo
ZGlmZmVyZW5jZUltYWdlLmdldCgpKTsKKworICAgICAgICBwcmludGYoImRpZmY6ICUwMS4yZiUl
IGZhaWxlZFxuIiwgZGlmZmVyZW5jZSk7CisgICAgfSBlbHNlCisgICAgICAgIHByaW50ZigiZGlm
ZjogJTAxLjJmJSUgcGFzc2VkXG4iLCBkaWZmZXJlbmNlKTsKK30KKworc3RhdGljIHZvaWQgcmVz
aXplRWNvcmVFdmFzSWZOZWVkZWQoRXZhc19PYmplY3QqIGltYWdlKQoreworICAgIGludCBuZXdX
aWR0aCwgbmV3SGVpZ2h0OworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KGltYWdlLCAm
bmV3V2lkdGgsICZuZXdIZWlnaHQpOworCisgICAgaW50IGN1cnJlbnRXaWR0aCwgY3VycmVudEhl
aWdodDsKKyAgICBlY29yZV9ldmFzX3NjcmVlbl9nZW9tZXRyeV9nZXQoZ0Vjb3JlRXZhcy5nZXQo
KSwgMCwgMCwgJmN1cnJlbnRXaWR0aCwgJmN1cnJlbnRIZWlnaHQpOworCisgICAgaWYgKG5ld1dp
ZHRoID4gY3VycmVudFdpZHRoKQorICAgICAgICBjdXJyZW50V2lkdGggPSBuZXdXaWR0aDsKKyAg
ICBpZiAobmV3SGVpZ2h0ID4gY3VycmVudEhlaWdodCkKKyAgICAgICAgY3VycmVudEhlaWdodCA9
IG5ld0hlaWdodDsKKworICAgIGVjb3JlX2V2YXNfcmVzaXplKGdFY29yZUV2YXMuZ2V0KCksIGN1
cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCk7Cit9CisKK3N0YXRpYyBFZmxVbmlxdWVQdHI8RXZh
c19PYmplY3Q+IHJlYWRJbWFnZUZyb21TdGRpbihFdmFzKiBldmFzLCBsb25nIGltYWdlU2l6ZSkK
K3sKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFy
W10+KGltYWdlU2l6ZSk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgYWJvcnRXaXRo
RXJyb3JNZXNzYWdlKCJjYW5ub3QgYWxsb2NhdGUgaW1hZ2UiKTsKKworICAgIGNvbnN0IHNpemVf
dCBieXRlc1JlYWQgPSBmcmVhZChpbWFnZUJ1ZmZlci5nZXQoKSwgMSwgaW1hZ2VTaXplLCBzdGRp
bik7CisgICAgaWYgKCFieXRlc1JlYWQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
RXZhc19PYmplY3QqIGltYWdlID0gZXZhc19vYmplY3RfaW1hZ2VfZmlsbGVkX2FkZChldmFzKTsK
KyAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldChpbWFnZSwgRVZBU19DT0xPUlNQ
QUNFX0FSR0I4ODg4KTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9tZW1maWxlX3NldChpbWFnZSwg
aW1hZ2VCdWZmZXIuZ2V0KCksIGJ5dGVzUmVhZCwgMCwgMCk7CisKKyAgICByZXNpemVFY29yZUV2
YXNJZk5lZWRlZChpbWFnZSk7CisKKyAgICByZXR1cm4gRWZsVW5pcXVlUHRyPEV2YXNfT2JqZWN0
PihpbWFnZSk7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlQ29tbWFuZExpbmVPcHRpb25zKGludCBh
cmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBzdGF0aWMgY29uc3Qgb3B0aW9uIG9wdGlvbnNbXSA9
IHsKKyAgICAgICAgeyAidG9sZXJhbmNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICd0JyB9LAor
ICAgICAgICB7IDAsIDAsIDAsIDAgfQorICAgIH07CisgICAgaW50IG9wdGlvbjsKKworICAgIHdo
aWxlICgob3B0aW9uID0gZ2V0b3B0X2xvbmcoYXJnYywgKGNoYXIqIGNvbnN0Kilhcmd2LCAidDoi
LCBvcHRpb25zLCAwKSkgIT0gLTEpIHsKKyAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKKyAgICAg
ICAgY2FzZSAndCc6CisgICAgICAgICAgICBnVG9sZXJhbmNlID0gYXRvZihvcHRhcmcpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJz8nOgorICAgICAgICBjYXNlICc6JzoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgdm9pZCBzaHV0ZG93bkVmbCgpCit7CisgICAgZWNvcmVfZXZhc19z
aHV0ZG93bigpOworICAgIGVjb3JlX3NodXRkb3duKCk7CisgICAgZXZhc19zaHV0ZG93bigpOwor
fQorCitzdGF0aWMgdm9pZCBhYm9ydFdpdGhFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogZXJyb3JN
ZXNzYWdlKQoreworICAgIHNodXRkb3duRWZsKCk7CisKKyAgICBwcmludGYoIkVycm9yLCAlcy5c
biIsIGVycm9yTWVzc2FnZSk7CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMg
RXZhcyogaW5pdEVmbCgpCit7CisgICAgZXZhc19pbml0KCk7CisgICAgZWNvcmVfaW5pdCgpOwor
ICAgIGVjb3JlX2V2YXNfaW5pdCgpOworCisgICAgZ0Vjb3JlRXZhcyA9IEVmbFVuaXF1ZVB0cjxF
Y29yZV9FdmFzPihlY29yZV9ldmFzX2J1ZmZlcl9uZXcoMSwgMSkpOworICAgIEV2YXMqIGV2YXMg
PSBlY29yZV9ldmFzX2dldChnRWNvcmVFdmFzLmdldCgpKTsKKyAgICBpZiAoIWV2YXMpCisgICAg
ICAgIGFib3J0V2l0aEVycm9yTWVzc2FnZSgiY291bGQgbm90IGNyZWF0ZSBFY29yZV9FdmFzIGJ1
ZmZlciIpOworCisgICAgcmV0dXJuIGV2YXM7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFy
KiBhcmd2W10pCit7CisgICAgaWYgKCFwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyhhcmdjLCBhcmd2
KSkKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworICAgIEV2YXMqIGV2YXMgPSBpbml0
RWZsKCk7CisKKyAgICBFZmxVbmlxdWVQdHI8RXZhc19PYmplY3Q+IGFjdHVhbEltYWdlOworICAg
IEVmbFVuaXF1ZVB0cjxFdmFzX09iamVjdD4gYmFzZWxpbmVJbWFnZTsKKworICAgIGNoYXIgYnVm
ZmVyWzIwNDhdOworICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRp
bikpIHsKKyAgICAgICAgY2hhciogY29udGVudExlbmd0aFN0YXJ0ID0gc3Ryc3RyKGJ1ZmZlciwg
IkNvbnRlbnQtTGVuZ3RoOiAiKTsKKyAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoU3RhcnQpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbG9uZyBpbWFnZVNpemU7CisgICAgICAgIGlm
IChzc2NhbmYoY29udGVudExlbmd0aFN0YXJ0LCAiQ29udGVudC1MZW5ndGg6ICVsZCIsICZpbWFn
ZVNpemUpID09IDEpIHsKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPD0gMCkKKyAgICAgICAg
ICAgICAgICBhYm9ydFdpdGhFcnJvck1lc3NhZ2UoImltYWdlIHNpemUgbXVzdCBiZSBzcGVjaWZp
ZWQiKTsKKworICAgICAgICAgICAgaWYgKCFhY3R1YWxJbWFnZSkKKyAgICAgICAgICAgICAgICBh
Y3R1YWxJbWFnZSA9IHJlYWRJbWFnZUZyb21TdGRpbihldmFzLCBpbWFnZVNpemUpOworICAgICAg
ICAgICAgZWxzZSBpZiAoIWJhc2VsaW5lSW1hZ2UpIHsKKyAgICAgICAgICAgICAgICBiYXNlbGlu
ZUltYWdlID0gcmVhZEltYWdlRnJvbVN0ZGluKGV2YXMsIGltYWdlU2l6ZSk7CisKKyAgICAgICAg
ICAgICAgICBwcmludEltYWdlRGlmZmVyZW5jZXMoYmFzZWxpbmVJbWFnZS5nZXQoKSwgYWN0dWFs
SW1hZ2UuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgYWN0dWFsSW1hZ2UucmVzZXQoKTsKKyAg
ICAgICAgICAgICAgICBiYXNlbGluZUltYWdlLnJlc2V0KCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICB9CisKKyAgICBnRWNvcmVFdmFz
ID0gbnVsbHB0cjsgLy8gTWFrZSBzdXJlIGVjb3JlX2V2YXNfZnJlZSBpcyBjYWxsZWQgYmVmb3Jl
IHRoZSBFRkwgYXJlIHNodXQgZG93bgorCisgICAgc2h1dGRvd25FZmwoKTsKKyAgICByZXR1cm4g
RVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL0NNYWtl
TGlzdHMudHh0IGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgyZDcyYzcxYWM1OWJlNzczYWQxYmFiN2FhMTc0ODRlMDhiY2E0ODMKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw3
MCBAQAorc2V0KE1pbmlCcm93c2VyX0RJUiAiJHtUT09MU19ESVJ9L01pbmlCcm93c2VyL2VmbCIp
CisKKyMgRWxlbWVudGFyeSBpcyBuZWVkZWQgdG8gYnVpbGQgTWluaUJyb3dzZXIKK2ZpbmRfcGFj
a2FnZShFbGRidXMgJHtFRkxfUkVRVUlSRURfVkVSU0lPTn0gJHtFRkxfQ09ORklHX01PREV9KQor
ZmluZF9wYWNrYWdlKEVsZW1lbnRhcnkgJHtFRkxfUkVRVUlSRURfVkVSU0lPTn0gJHtFRkxfQ09O
RklHX01PREV9KQorZmluZF9wYWNrYWdlKEV0aHVtYiAke0VGTF9SRVFVSVJFRF9WRVJTSU9OfSAk
e0VGTF9DT05GSUdfTU9ERX0pCitmaW5kX3BhY2thZ2UoRXRodW1iQ2xpZW50ICR7RUZMX1JFUVVJ
UkVEX1ZFUlNJT059ICR7RUZMX0NPTkZJR19NT0RFfSkKKworc2V0KE1pbmlCcm93c2VyX1NPVVJD
RVMKKyAgICAke01pbmlCcm93c2VyX0RJUn0vbWFpbi5jCispCisKK3NldChNaW5pQnJvd3Nlcl9J
TkNMVURFX0RJUkVDVE9SSUVTCisgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUMl9ESVJ9L2lu
Y2x1ZGUKKyAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2VmbAorICAgICR7V0VCS0lU
Ml9ESVJ9CisgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UKKykKKworc2V0KE1pbmlCcm93
c2VyX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgJHtDQUlST19JTkNMVURFX0RJUlN9
CisgICAgJHtFQ09SRV9JTkNMVURFX0RJUlN9CisgICAgJHtFQ09SRV9FVkFTX0lOQ0xVREVfRElS
U30KKyAgICAke0VDT1JFX0NPTl9JTkNMVURFX0RJUlN9CisgICAgJHtFQ09SRV9GSUxFX0lOQ0xV
REVfRElSU30KKyAgICAke0VDT1JFX0lNRl9JTkNMVURFX0RJUlN9CisgICAgJHtFQ09SRV9JTlBV
VF9JTkNMVURFX0RJUlN9CisgICAgJHtFREpFX0lOQ0xVREVfRElSU30KKyAgICAke0VFVF9JTkNM
VURFX0RJUlN9CisgICAgJHtFT19JTkNMVURFX0RJUlN9CisgICAgJHtEQlVTX0lOQ0xVREVfRElS
U30KKyAgICAke0VGUkVFVF9JTkNMVURFX0RJUlN9CisgICAgJHtFSU5BX0lOQ0xVREVfRElSU30K
KyAgICAke0VMREJVU19JTkNMVURFX0RJUlN9CisgICAgJHtFTEVNRU5UQVJZX0lOQ0xVREVfRElS
U30KKyAgICAke0VUSFVNQl9JTkNMVURFX0RJUlN9CisgICAgJHtFVEhVTUJfQ0xJRU5UX0lOQ0xV
REVfRElSU30KKyAgICAke0VWQVNfSU5DTFVERV9ESVJTfQorKQorCitzZXQoTWluaUJyb3dzZXJf
TElCUkFSSUVTCisgICAgSmF2YVNjcmlwdENvcmUKKyAgICBXZWJDb3JlCisgICAgV2ViS2l0Mgor
ICAgICR7Q0FJUk9fTElCUkFSSUVTfQorICAgICR7RUNPUkVfTElCUkFSSUVTfQorICAgICR7RUNP
UkVfRVZBU19MSUJSQVJJRVN9CisgICAgJHtFQ09SRV9GSUxFX0xJQlJBUklFU30KKyAgICAke0VE
SkVfTElCUkFSSUVTfQorICAgICR7RUVUX0xJQlJBUklFU30KKyAgICAke0VJTkFfTElCUkFSSUVT
fQorICAgICR7RUxFTUVOVEFSWV9MSUJSQVJJRVN9CisgICAgJHtFT19MSUJSQVJJRVN9CisgICAg
JHtFVkFTX0xJQlJBUklFU30KKyAgICAke0ZPTlRDT05GSUdfTElCUkFSSUVTfQorICAgICR7R0xJ
Ql9MSUJSQVJJRVN9CisgICAgJHtHTElCX0dUSFJFQURfTElCUkFSSUVTfQorICAgICR7TElCU09V
UF9MSUJSQVJJRVN9CisgICAgJHtMSUJYTUwyX0xJQlJBUklFU30KKyAgICAke0xJQlhTTFRfTElC
UkFSSUVTfSAtbG0KKyAgICAke09QRU5HTF9MSUJSQVJJRVN9CisgICAgJHtTUUxJVEVfTElCUkFS
SUVTfQorKQorCitpZiAoRUxFTUVOVEFSWV9GT1VORCkKKyAgICBpbmNsdWRlX2RpcmVjdG9yaWVz
KCR7TWluaUJyb3dzZXJfSU5DTFVERV9ESVJFQ1RPUklFU30pCisgICAgaW5jbHVkZV9kaXJlY3Rv
cmllcyhTWVNURU0gJHtNaW5pQnJvd3Nlcl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFU30pCisg
ICAgYWRkX2V4ZWN1dGFibGUoTWluaUJyb3dzZXIgJHtNaW5pQnJvd3Nlcl9TT1VSQ0VTfSkKKyAg
ICB0YXJnZXRfbGlua19saWJyYXJpZXMoTWluaUJyb3dzZXIgJHtNaW5pQnJvd3Nlcl9MSUJSQVJJ
RVN9KQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMg
Yi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzODI1ZWUzMWVkZjQx
MGM5NzVhY2YxMDdiMTcxODkwNTk2Njc3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5p
QnJvd3Nlci9lZmwvbWFpbi5jCkBAIC0wLDAgKzEsMjUzNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiRVdlYktpdDIuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgorI2lu
Y2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFY29yZV9HZXRvcHQuaD4KKyNpbmNsdWRl
IDxFZXQuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RWxlbWVudGFyeS5oPgorI2lu
Y2x1ZGUgPEV2YXMuaD4KKworZXh0ZXJuIGludCBlZnJlZXRfY2FjaGVfdXBkYXRlOworCitzdGF0
aWMgY29uc3QgY2hhciBERUZBVUxUX1VSTFtdID0gImh0dHA6Ly93d3cuZXdlYmtpdC5vcmcvIjsK
K3N0YXRpYyBjb25zdCBjaGFyIEFQUF9OQU1FW10gPSAiRUZMIE1pbmlCcm93c2VyIjsKK3N0YXRp
YyBjb25zdCBjaGFyIEpBVkFTQ1JJUFRfU0NIRU1FW10gPSAiamF2YXNjcmlwdDoiOworc3RhdGlj
IGNvbnN0IGNoYXIgRklMRV9TQ0hFTUVbXSA9ICJmaWxlOi8vIjsKK3N0YXRpYyBjb25zdCBjaGFy
IEhUVFBfU0NIRU1FW10gPSAiaHR0cDovLyI7CitzdGF0aWMgY29uc3QgaW50IFRPT0xfQkFSX0lD
T05fU0laRSA9IDI0Oworc3RhdGljIGNvbnN0IGludCBUT09MX0JBUl9CVVRUT05fU0laRSA9IDMy
Oworc3RhdGljIGNvbnN0IGludCBTRUFSQ0hfRklFTERfU0laRSA9IDIwMDsKK3N0YXRpYyBjb25z
dCBpbnQgU0VBUkNIX0JVVFRPTl9TSVpFID0gMzA7CitzdGF0aWMgY29uc3QgaW50IE1BWF9TRUFS
Q0hfQ09VTlQgPSAxMDAwOworc3RhdGljIGNvbnN0IGRvdWJsZSBUT09MVElQX0RFTEFZX1NFQ09O
RFMgPSAxLjA7CitzdGF0aWMgY29uc3QgZG91YmxlIExPTkdQUkVTU19JTlRFUlZBTF9TRUNPTkRT
ID0gMS41Oworc3RhdGljIGNvbnN0IGRvdWJsZSBMSVNUX0lURU1fSEVJR0hUID0gMjQuMzU7CisK
K3N0YXRpYyBFaW5hX0xpc3QgKndpbmRvd3MgPSBOVUxMOworc3RhdGljIGNoYXIgKmV2YXNfZW5n
aW5lX25hbWUgPSBOVUxMOworc3RhdGljIGNoYXIgKnVzZXJfYWdlbnRfc3RyaW5nID0gTlVMTDsK
K3N0YXRpYyBjaGFyICpleHRlbnNpb25zX3BhdGggPSBOVUxMOworc3RhdGljIGNoYXIgKmJhY2tn
cm91bmRfY29sb3Jfc3RyaW5nID0gTlVMTDsKK3N0YXRpYyBFaW5hX0Jvb2wgZW5jb2RpbmdfZGV0
ZWN0b3JfZW5hYmxlZCA9IEVJTkFfRkFMU0U7CitzdGF0aWMgRWluYV9Cb29sIGZyYW1lX2ZsYXR0
ZW5pbmdfZW5hYmxlZCA9IEVJTkFfRkFMU0U7CitzdGF0aWMgRWluYV9Cb29sIGxvY2FsX3N0b3Jh
Z2VfZW5hYmxlZCA9IEVJTkFfVFJVRTsKK3N0YXRpYyBFaW5hX0Jvb2wgb2ZmbGluZV93ZWJfYXBw
bGljYXRpb25fY2FjaGVfZW5hYmxlZCA9IEVJTkFfVFJVRTsKK3N0YXRpYyBFaW5hX0Jvb2wgZnVs
bHNjcmVlbl9lbmFibGVkID0gRUlOQV9GQUxTRTsKK3N0YXRpYyBFaW5hX0Jvb2wgc3BlbGxfY2hl
Y2tpbmdfZW5hYmxlZCA9IEVJTkFfRkFMU0U7CitzdGF0aWMgRWluYV9Cb29sIHdlYl9zZWN1cml0
eV9lbmFibGVkID0gRUlOQV9UUlVFOworc3RhdGljIEVpbmFfQm9vbCB0b3VjaF9ldmVudHNfZW5h
YmxlZCA9IEVJTkFfRkFMU0U7CitzdGF0aWMgRWluYV9Cb29sIGZpeGVkX2xheW91dF9lbmFibGVk
ID0gRUlOQV9UUlVFOworc3RhdGljIEVpbmFfQm9vbCBzZXBhcmF0ZWRfcHJvY2Vzc19lbmFibGVk
ID0gRUlOQV9GQUxTRTsKK3N0YXRpYyBFaW5hX0Jvb2wgbG9uZ3ByZXNzX2VuYWJsZWQgPSBFSU5B
X0ZBTFNFOworc3RhdGljIGludCB3aW5kb3dfd2lkdGggPSAxMDAwOworc3RhdGljIGludCB3aW5k
b3dfaGVpZ2h0ID0gODAwOworc3RhdGljIGludCBjb2xvcl9waWNrZXJfd2lkdGggPSAzNTA7Citz
dGF0aWMgaW50IGNvbG9yX3BpY2tlcl9oZWlnaHQgPSA1MDA7CitzdGF0aWMgaW50IHNlYXJjaF9m
bGFncyA9IEVXS19GSU5EX09QVElPTlNfU0hPV19ISUdITElHSFQgfCBFV0tfRklORF9PUFRJT05T
X1dSQVBfQVJPVU5EIHwgRVdLX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFOworLyogRGVm
YXVsdCB2YWx1ZSBvZiBkZXZpY2VfcGl4ZWxfcmF0aW8gaXMgJzAnIHNvIHRoYXQgd2UgZG9uJ3Qg
c2V0IGN1c3RvbSBkZXZpY2UKKyAqIHNjYWxlIGZhY3RvciB1bmxlc3MgaXQncyByZXF1aXJlZCBi
eSB0aGUgVXNlci4gKi8KK3N0YXRpYyBkb3VibGUgZGV2aWNlX3BpeGVsX3JhdGlvID0gMDsKK3N0
YXRpYyBFaW5hX0Jvb2wgbGVnYWN5X2JlaGF2aW9yX2VuYWJsZWQgPSBFSU5BX0ZBTFNFOworCisj
ZGVmaW5lIERFRkFVTFRfWk9PTV9MRVZFTCA1IC8vIFNldCBkZWZhdWx0IHpvb20gbGV2ZWwgdG8g
MS4wIChpbmRleCA1IG9uIHpvb21MZXZlbHMpLgorLy8gVGhlIHpvb20gdmFsdWVzIGFyZSBjaG9z
ZW4gdG8gYmUgbGlrZSBpbiBNb3ppbGxhIEZpcmVmb3ggMy4KK2NvbnN0IHN0YXRpYyBmbG9hdCB6
b29tTGV2ZWxzW10gPSB7MC4zLCAwLjUsIDAuNjcsIDAuOCwgMC45LCAxLjAsIDEuMSwgMS4yLCAx
LjMzLCAxLjUsIDEuNywgMi4wLCAyLjQsIDMuMH07CitzdGF0aWMgaW50IF9sb2dfZG9tYWluX2lk
ID0gLTE7CisKKyNkZWZpbmUgSU5GTyguLi4pIEVJTkFfTE9HX0RPTV9JTkZPKF9sb2dfZG9tYWlu
X2lkLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgRVJST1IoLi4uKSBFSU5BX0xPR19ET01fRVJSKF9s
b2dfZG9tYWluX2lkLCBfX1ZBX0FSR1NfXykKKworc3RhdGljIEVpbmFfQm9vbAorem9vbV9sZXZl
bF9zZXQoRXZhc19PYmplY3QgKndlYnZpZXcsIGludCBsZXZlbCkKK3sKKyAgIGlmIChsZXZlbCA8
IDAgIHx8IGxldmVsID49IHNpemVvZih6b29tTGV2ZWxzKSAvIHNpemVvZihmbG9hdCkpCisgICAg
IHJldHVybiBFSU5BX0ZBTFNFOworCisgICByZXR1cm4gZXdrX3ZpZXdfcGFnZV96b29tX3NldCh3
ZWJ2aWV3LCB6b29tTGV2ZWxzW2xldmVsXSk7Cit9CisKK3N0YXRpYyBFd2tfVmlld19TbWFydF9D
bGFzcyAqbWluaUJyb3dzZXJWaWV3U21hcnRDbGFzcygpCit7CisgICBzdGF0aWMgRXdrX1ZpZXdf
U21hcnRfQ2xhc3MgZXdrVmlld0NsYXNzID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1F
X1ZFUlNJT04oIk1pbmlCcm93c2VyX1ZpZXciKTsKKyAgIHJldHVybiAmZXdrVmlld0NsYXNzOwor
fQorCit0eXBlZGVmIHN0cnVjdCBfVG9vbHRpcF9JbmZvcm1hdGlvbiB7CisgICBFY29yZV9UaW1l
ciAqc2hvd190aW1lcjsKKyAgIEVpbmFfQm9vbCBhY3RpdmF0ZWQ7CisgICBFaW5hX0Jvb2wgdGV4
dF9zZXQ7CisgICBFaW5hX0Jvb2wgc2hvd247Cit9IFRvb2x0aXBfSW5mb3JtYXRpb247CisKK3R5
cGVkZWYgc3RydWN0IF9Db2xvcl9TZWxlY3RvciB7CisgICBFd2tfQ29sb3JfUGlja2VyICpld2tf
cGlja2VyOworICAgRXZhc19PYmplY3QgKmVsbV9zZWxlY3RvcjsKKyAgIEV2YXNfT2JqZWN0ICpl
bG1fc2VsZWN0b3Jfd2luZG93OworfSBDb2xvcl9TZWxlY3RvcjsKKwordHlwZWRlZiBzdHJ1Y3Qg
X0Jyb3dzZXJfV2luZG93IHsKKyAgIEV2YXNfT2JqZWN0ICplbG1fd2luZG93OworICAgRXZhc19P
YmplY3QgKmV3a192aWV3OworICAgRXZhc19PYmplY3QgKmhvcml6b250YWxfbGF5b3V0OworICAg
RXZhc19PYmplY3QgKnZlcnRpY2FsX2xheW91dDsKKyAgIEV2YXNfT2JqZWN0ICp1cmxfYmFyOwor
ICAgRXZhc19PYmplY3QgKmJhY2tfYnV0dG9uOworICAgRXZhc19PYmplY3QgKmZvcndhcmRfYnV0
dG9uOworICAgc3RydWN0IHsKKyAgICAgRXZhc19PYmplY3QgKmVsbV9tZW51OworICAgICBFd2tf
UG9wdXBfTWVudSAqZXdrX21lbnU7CisgICAgfSBwb3B1cDsKKyAgIHN0cnVjdCB7CisgICAgIEV2
YXNfT2JqZWN0ICpzZWFyY2hfYmFyOworICAgICBFdmFzX09iamVjdCAqc2VhcmNoX2ZpZWxkOwor
ICAgICBFdmFzX09iamVjdCAqc2VhcmNoX2ZpZWxkX2NvdW50OworICAgICBFdmFzX09iamVjdCAq
YmFja3dhcmRfYnV0dG9uOworICAgICBFdmFzX09iamVjdCAqZm9yd2FyZF9idXR0b247CisgICAg
IEV2YXNfT2JqZWN0ICpzZWFyY2hfY2FzZV9jaGVja19ib3g7CisgICAgIEV2YXNfT2JqZWN0ICpz
ZWFyY2hfd29yZF9zdGFydF9jaGVja19ib3g7CisgICAgIEV2YXNfT2JqZWN0ICpjbG9zZV9idXR0
b247CisgICB9IHNlYXJjaDsKKyAgIHN0cnVjdCB7CisgICAgIEV2YXNfT2JqZWN0ICpoaXN0b3J5
X2JveDsKKyAgICAgRXZhc19PYmplY3QgKmhpc3RvcnlfbGlzdDsKKyAgICAgRWluYV9MaXN0ICpo
aXN0b3J5X2xpc3RfaXRlbXM7CisgICB9IGhpc3Rvcnk7CisgICBpbnQgY3VycmVudF96b29tX2xl
dmVsOworICAgVG9vbHRpcF9JbmZvcm1hdGlvbiB0b29sdGlwOworICAgQ29sb3JfU2VsZWN0b3Ig
Y29sb3Jfc2VsZWN0b3I7CisgICBzdHJ1Y3QgeworICAgICBFdmFzX09iamVjdCAqZWxtX21lbnU7
CisgICAgIEV3a19Db250ZXh0X01lbnUgKmV3a19tZW51OworICAgfSBjb250ZXh0X21lbnU7Cit9
IEJyb3dzZXJfV2luZG93OworCit0eXBlZGVmIHN0cnVjdCBfRmlsZV9TZWxlY3Rvcl9EYXRhIHsK
KyAgIEJyb3dzZXJfV2luZG93KiBwYXJlbnQ7CisgICBFdmFzX09iamVjdCAqZWxtX3dpbmRvdzsK
KyAgIEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCAqcmVxdWVzdDsKK30gRmlsZV9TZWxlY3Rvcl9E
YXRhOworCit0eXBlZGVmIHN0cnVjdCBfQXV0aF9EYXRhIHsKKyAgIEV2YXNfT2JqZWN0ICpwb3B1
cDsKKyAgIEV3a19BdXRoX1JlcXVlc3QgKnJlcXVlc3Q7CisgICBFdmFzX09iamVjdCAqdXNlcm5h
bWVfZW50cnk7CisgICBFdmFzX09iamVjdCAqcGFzc3dvcmRfZW50cnk7Cit9IEF1dGhfRGF0YTsK
Kworc3RhdGljIGNvbnN0IEVjb3JlX0dldG9wdCBvcHRpb25zID0geworICAgIk1pbmlCcm93c2Vy
IiwKKyAgICIlcHJvZyBbb3B0aW9uc10gW3VybF0iLAorICAgIjAuMC4xIiwKKyAgICIoQykyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3NcbiAoQykyMDEyIEludGVsIENvcnBvcmF0aW9uXG4iLAorICAg
IiIsCisgICAiVGVzdCBXZWIgQnJvd3NlciB1c2luZyB0aGUgRW5saWdodGVubWVudCBGb3VuZGF0
aW9uIExpYnJhcmllcyAoRUZMKSBwb3J0IG9mIFdlYktpdDIiLAorICAgRUlOQV9UUlVFLCB7Cisg
ICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9TVFIKKyAgICAgICAgICgnZScsICJlbmdpbmUiLCAiRWNv
cmUtZXZhcyBlbmdpbmUgdG8gdXNlLiIpLAorICAgICBFQ09SRV9HRVRPUFRfU1RPUkVfU1RSCisg
ICAgICAgICAoJ3MnLCAid2luZG93LXNpemUiLCAiV2luZG93IHNpemUgaW4gZm9sbG93aW5nIGZv
cm1hdCAod2lkdGgpeChoZWlnaHQpLiIpLAorICAgICBFQ09SRV9HRVRPUFRfU1RPUkVfU1RSCisg
ICAgICAgICAoJ3UnLCAidXNlci1hZ2VudCIsICJVc2VyIGFnZW50IHRvIHNldC4iKSwKKyAgICAg
RUNPUkVfR0VUT1BUX1NUT1JFX1NUUgorICAgICAgICAgKCd4JywgImV4dGVuc2lvbnMtcGF0aCIs
ICJUaGUgcGF0aCB3aGljaCBleHRlbnNpb25zIGFyZSBzdG9yZWQuIiksCisgICAgIEVDT1JFX0dF
VE9QVF9TVE9SRV9ET1VCTEUKKyAgICAgICAgICgncicsICJkZXZpY2UtcGl4ZWwtcmF0aW8iLCAi
UmF0aW8gYmV0d2VlbiB0aGUgQ1NTIHVuaXRzIGFuZCBkZXZpY2UgcGl4ZWxzLiIpLAorICAgICBF
Q09SRV9HRVRPUFRfQ0FMTEJBQ0tfTk9BUkdTCisgICAgICAgICAoJ0UnLCAibGlzdC1lbmdpbmVz
IiwgIkxpc3QgZWNvcmUtZXZhcyBlbmdpbmVzLiIsCisgICAgICAgICAgZWNvcmVfZ2V0b3B0X2Nh
bGxiYWNrX2Vjb3JlX2V2YXNfbGlzdF9lbmdpbmVzLCBOVUxMKSwKKyAgICAgRUNPUkVfR0VUT1BU
X1NUT1JFX0RFRl9CT09MCisgICAgICAgICAoJ2MnLCAiZW5jb2RpbmctZGV0ZWN0b3IiLCAiRW5h
YmxlL2Rpc2FibGUgZW5jb2RpbmcgZGV0ZWN0b3IuIiwgRUlOQV9GQUxTRSksCisgICAgIEVDT1JF
X0dFVE9QVF9TVE9SRV9TVFIKKyAgICAgICAgICgnQycsICJiYWNrZ3JvdW5kLWNvbG9yIiwgIkJh
Y2tncm91bmQgY29sb3Igb2YgcGFnZS4gZXgpIC1DPTI1NToyNTU6MjU1OjI1NSIpLAorICAgICBF
Q09SRV9HRVRPUFRfU1RPUkVfREVGX0JPT0wKKyAgICAgICAgICgnZicsICJmbGF0dGVuaW5nIiwg
IkVuYWJsZS9kaXNhYmxlIGZyYW1lIGZsYXR0ZW5pbmcuIiwgRUlOQV9GQUxTRSksCisgICAgIEVD
T1JFX0dFVE9QVF9TVE9SRV9ERUZfQk9PTAorICAgICAgICAgKCdsJywgImxvY2FsLXN0b3JhZ2Ui
LCAiRW5hYmxlL2Rpc2FibGUgSFRNTDUgbG9jYWwgc3RvcmFnZS4iLCBFSU5BX1RSVUUpLAorICAg
ICBFQ09SRV9HRVRPUFRfU1RPUkVfREVGX0JPT0wKKyAgICAgICAgICgnbycsICJvZmZsaW5lLXdl
Yi1hcHBsaWNhdGlvbi1jYWNoZSIsICJFbmFibGUvZGlzYWJsZSBvZmZsaW5lIHdlYiBhcHBsaWNh
dGlvbiBjYWNoZS4iLCBFSU5BX1RSVUUpLAorICAgICBFQ09SRV9HRVRPUFRfU1RPUkVfREVGX0JP
T0wKKyAgICAgICAgICgnRicsICJmdWxsLXNjcmVlbiIsICJTdGFydCBpbiBmdWxsLXNjcmVlbi4i
LCBFSU5BX0ZBTFNFKSwKKyAgICAgRUNPUkVfR0VUT1BUX1NUT1JFX0RFRl9CT09MCisgICAgICAg
ICAoJ3QnLCAidGV4dC1jaGVja2luZyIsICJFbmFibGUvZGlzYWJsZSB0ZXh0IHNwZWxsIGNoZWNr
aW5nLiIsIEVJTkFfRkFMU0UpLAorICAgICBFQ09SRV9HRVRPUFRfU1RPUkVfREVGX0JPT0wKKyAg
ICAgICAgICgnVCcsICJ0b3VjaC1ldmVudHMiLCAiRW5hYmxlL2Rpc2FibGUgdG91Y2ggZXZlbnRz
LiIsIEVJTkFfRkFMU0UpLAorICAgICBFQ09SRV9HRVRPUFRfU1RPUkVfREVGX0JPT0wKKyAgICAg
ICAgICgnTCcsICJmaXhlZC1sYXlvdXQiLCAiRW5hYmxlL2Rpc2FibGUgZml4ZWQgbGF5b3V0LiIs
IEVJTkFfVFJVRSksCisgICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9ERUZfU1RSCisgICAgICAgICAo
J3AnLCAicG9saWN5LWNvb2tpZXMiLCAiQ29va2llcyBwb2xpY3k6XG4gIGFsd2F5cyAtIGFsd2F5
cyBhY2NlcHQsXG4gIG5ldmVyIC0gbmV2ZXIgYWNjZXB0LFxuICBuby10aGlyZC1wYXJ0eSAtIGRv
bid0IGFjY2VwdCB0aGlyZC1wYXJ0eSBjb29raWVzLiIsICJuby10aGlyZC1wYXJ0eSIpLAorICAg
ICBFQ09SRV9HRVRPUFRfU1RPUkVfREVGX0JPT0wKKyAgICAgICAgICgndycsICJ3ZWItc2VjdXJp
dHkiLCAiZW5hYmxlL2Rpc2FibGUgd2ViIHNlY3VyaXR5LiIsIEVJTkFfVFJVRSksCisgICAgIEVD
T1JFX0dFVE9QVF9TVE9SRV9ERUZfQk9PTAorICAgICAgICAgKCdTJywgInNlcGFyYXRlLXByb2Nl
c3MiLCAiQ3JlYXRlIG5ldyB3aW5kb3cgaW4gc2VwYXJhdGVkIHdlYiBwcm9jZXNzLiIsIEVJTkFf
RkFMU0UpLAorICAgICBFQ09SRV9HRVRPUFRfVkVSU0lPTgorICAgICAgICAgKCdWJywgInZlcnNp
b24iKSwKKyAgICAgRUNPUkVfR0VUT1BUX0NPUFlSSUdIVAorICAgICAgICAgKCdSJywgImNvcHly
aWdodCIpLAorICAgICBFQ09SRV9HRVRPUFRfSEVMUAorICAgICAgICAgKCdoJywgImhlbHAiKSwK
KyAgICAgRUNPUkVfR0VUT1BUX1NFTlRJTkVMCisgICB9Cit9OworCitzdGF0aWMgRWluYV9TdHJp
bmdzaGFyZSAqX2ZpbGVfZW50cnlfZGlhbG9nX3Nob3coQnJvd3Nlcl9XaW5kb3cgKndpbmRvdywg
Y29uc3QgY2hhciAqbGFiZWxfdGFnLCBjb25zdCBjaGFyICpkZWZhdWx0X3RleHQpOworc3RhdGlj
IEJyb3dzZXJfV2luZG93ICp3aW5kb3dfY3JlYXRlKEV3a19WaWV3X0NvbmZpZ3VyYXRpb24qIGNv
bmZpZ3VyYXRpb24sIGludCB3aWR0aCwgaW50IGhlaWdodCk7CitzdGF0aWMgRXdrX1ZpZXdfQ29u
ZmlndXJhdGlvbiogY29uZmlndXJhdGlvbigpOworCitzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndp
bmRvd19maW5kX3dpdGhfZXdrX3ZpZXcoRXZhc19PYmplY3QgKmV3a192aWV3KQoreworICAgRWlu
YV9MaXN0ICpsOworICAgdm9pZCAqZGF0YTsKKworICAgaWYgKCFld2tfdmlldykKKyAgICAgcmV0
dXJuIE5VTEw7CisKKyAgIEVJTkFfTElTVF9GT1JFQUNIKHdpbmRvd3MsIGwsIGRhdGEpIHsKKyAg
ICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKWRhdGE7CisgICAg
IGlmICh3aW5kb3ctPmV3a192aWV3ID09IGV3a192aWV3KQorICAgICAgIHJldHVybiB3aW5kb3c7
CisgICB9CisgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEVpbmFfQm9vbAorX3Rvb2x0aXBf
c2hvdyh2b2lkICp1c2VyX2RhdGEpCit7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJy
b3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworCisgICB3aW5kb3ctPnRvb2x0aXAuc2hvd190aW1l
ciA9IE5VTEw7CisgICBlbG1fb2JqZWN0X3Rvb2x0aXBfc2hvdyh3aW5kb3ctPmVsbV93aW5kb3cp
OworICAgd2luZG93LT50b29sdGlwLnNob3duID0gRUlOQV9UUlVFOworICAgcmV0dXJuIEVDT1JF
X0NBTExCQUNLX0NBTkNFTDsKK30KKworc3RhdGljIHZvaWQKK3dpbmRvd190b29sdGlwX2hpZGUo
QnJvd3Nlcl9XaW5kb3cgKndpbmRvdykKK3sKKyAgIGlmICh3aW5kb3ctPnRvb2x0aXAuc2hvd190
aW1lcikgeworICAgICBlY29yZV90aW1lcl9kZWwod2luZG93LT50b29sdGlwLnNob3dfdGltZXIp
OworICAgICB3aW5kb3ctPnRvb2x0aXAuc2hvd190aW1lciA9IE5VTEw7CisgICB9CisKKyAgIGlm
ICh3aW5kb3ctPnRvb2x0aXAuc2hvd24pIHsKKyAgICAgZWxtX29iamVjdF90b29sdGlwX2hpZGUo
d2luZG93LT5lbG1fd2luZG93KTsKKyAgICAgd2luZG93LT50b29sdGlwLnNob3duID0gRUlOQV9G
QUxTRTsKKyAgIH0KK30KKworc3RhdGljIHZvaWQKK3dpbmRvd190b29sdGlwX3VwZGF0ZShCcm93
c2VyX1dpbmRvdyAqd2luZG93KQoreworICAgd2luZG93X3Rvb2x0aXBfaGlkZSh3aW5kb3cpOwor
CisgICBpZiAod2luZG93LT50b29sdGlwLmFjdGl2YXRlZCAmJiB3aW5kb3ctPnRvb2x0aXAudGV4
dF9zZXQpCisgICAgIHdpbmRvdy0+dG9vbHRpcC5zaG93X3RpbWVyID0gZWNvcmVfdGltZXJfYWRk
KFRPT0xUSVBfREVMQVlfU0VDT05EUywgX3Rvb2x0aXBfc2hvdywgd2luZG93KTsKK30KKworc3Rh
dGljIHZvaWQKK19tb3VzZV9pbl9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXMgKmUsIEV2YXNfT2Jq
ZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKK3sKKyAgIEJyb3dzZXJfV2luZG93ICp3
aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisKKyAgIHdpbmRvdy0+dG9vbHRp
cC5hY3RpdmF0ZWQgPSBFSU5BX1RSVUU7CisgICB3aW5kb3dfdG9vbHRpcF91cGRhdGUod2luZG93
KTsKK30KKworc3RhdGljIHZvaWQKK19tb3VzZV9tb3ZlX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZh
cyAqZSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQoreworICAgd2lu
ZG93X3Rvb2x0aXBfdXBkYXRlKChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YSk7Cit9CisKK3N0
YXRpYyB2b2lkCitfbW91c2Vfb3V0X2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhcyAqZSwgRXZhc19P
YmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQoreworICAgQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKworICAgd2luZG93LT50b29s
dGlwLmFjdGl2YXRlZCA9IEVJTkFfRkFMU0U7CisgICB3aW5kb3dfdG9vbHRpcF91cGRhdGUod2lu
ZG93KTsKK30KKworc3RhdGljIHZvaWQKK19tb3VzZV93aGVlbF9jYih2b2lkICp1c2VyX2RhdGEs
IEV2YXMgKmUsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKK3sKKyAg
IEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7Cisg
ICBjb25zdCBFdmFzX01vZGlmaWVyICptb2QgPSBldmFzX2tleV9tb2RpZmllcl9nZXQoZSk7Cisg
ICBFdmFzX0V2ZW50X01vdXNlX1doZWVsICpldiA9IChFdmFzX0V2ZW50X01vdXNlX1doZWVsICop
ZXZlbnRfaW5mbzsKKyAgIEVpbmFfQm9vbCBzaGlmdFByZXNzZWQgPSBldmFzX2tleV9tb2RpZmll
cl9pc19zZXQobW9kLCAiU2hpZnQiKTsKKyAgIEVpbmFfQm9vbCBjdHJsUHJlc3NlZCA9IGV2YXNf
a2V5X21vZGlmaWVyX2lzX3NldChtb2QsICJDb250cm9sIik7CisKKyAgIGlmICghc2hpZnRQcmVz
c2VkICYmICFjdHJsUHJlc3NlZCkKKyAgICAgcmV0dXJuOworCisgICAvKiBuYXZpZ2F0ZSBoaXN0
b3J5IG9yIHpvb20gd2ViIHBhZ2UgYmFzZWQgb24gbW91c2Ugd2hlZWwgc2Nyb2xsIGFjdGlvbiB3
aXRoIHNoaWZ0IG9yIGNvbnRyb2wga2V5ICovCisgICBpZiAoc2hpZnRQcmVzc2VkKSB7CisgICAg
IGlmIChldi0+eiA9PSAtMSAmJiBld2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKGV3a192aWV3KSkg
eworICAgICAgIGV3a192aWV3X2ZvcndhcmQoZXdrX3ZpZXcpOworICAgICAgIGVsbV9vYmplY3Rf
ZGlzYWJsZWRfc2V0KHdpbmRvdy0+Zm9yd2FyZF9idXR0b24sICFld2tfdmlld19mb3J3YXJkX3Bv
c3NpYmxlKGV3a192aWV3KSk7CisgICAgIH0gZWxzZSBpZiAoZXYtPnogPT0gMSAmJiBld2tfdmll
d19iYWNrX3Bvc3NpYmxlKGV3a192aWV3KSkgeworICAgICAgIGV3a192aWV3X2JhY2soZXdrX3Zp
ZXcpOworICAgICAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KHdpbmRvdy0+YmFja19idXR0b24s
ICFld2tfdmlld19iYWNrX3Bvc3NpYmxlKGV3a192aWV3KSk7CisgICAgIH0KKyAgIH0gZWxzZSBp
ZiAoY3RybFByZXNzZWQpIHsKKyAgICAgaWYgKGV2LT56ID09IC0xICYmIHpvb21fbGV2ZWxfc2V0
KGV3a192aWV3LCB3aW5kb3ctPmN1cnJlbnRfem9vbV9sZXZlbCArIDEpKSB7CisgICAgICAgd2lu
ZG93LT5jdXJyZW50X3pvb21fbGV2ZWwrKzsKKyAgICAgICBJTkZPKCJab29tIGluIChDdHJsICsg
J3Njcm9sbCB1cCcpIHdhcyBwcmVzc2VkLCB6b29tIGxldmVsIGJlY2FtZSAlLjJmIiwgem9vbUxl
dmVsc1t3aW5kb3ctPmN1cnJlbnRfem9vbV9sZXZlbF0pOworICAgICB9IGVsc2UgaWYgKGV2LT56
ID09IDEgJiYgem9vbV9sZXZlbF9zZXQoZXdrX3ZpZXcsIHdpbmRvdy0+Y3VycmVudF96b29tX2xl
dmVsIC0gMSkpIHsKKyAgICAgICB3aW5kb3ctPmN1cnJlbnRfem9vbV9sZXZlbC0tOworICAgICAg
IElORk8oIlpvb20gb3V0IChDdHJsICsgJ3Njcm9sbCBkb3duJykgd2FzIHByZXNzZWQsIHpvb20g
bGV2ZWwgYmVjYW1lICUuMmYiLCB6b29tTGV2ZWxzW3dpbmRvdy0+Y3VycmVudF96b29tX2xldmVs
XSk7CisgICAgIH0KKyAgIH0KK30KKworc3RhdGljIHZvaWQKK193aW5kb3dfcmVzaXplX2NiKHZv
aWQgKnVzZXJfZGF0YSwgRXZhcyAqZSwgRXZhc19PYmplY3QgKmVsbV93aW5kb3csIHZvaWQgKmV2
ZW50X2luZm8pCit7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93
ICopdXNlcl9kYXRhOworCisgICBpZiAoIXdpbmRvdykgeworICAgICBFUlJPUigiV2luZG93IGlz
IE5VTEwuIik7CisgICAgIHJldHVybjsKKyAgIH0KKworICAgaWYgKHdpbmRvdy0+Y29udGV4dF9t
ZW51LmV3a19tZW51KQorICAgICBld2tfY29udGV4dF9tZW51X2hpZGUod2luZG93LT5jb250ZXh0
X21lbnUuZXdrX21lbnUpOworICAgaWYgKHdpbmRvdy0+cG9wdXAuZXdrX21lbnUpCisgICAgIGV3
a19wb3B1cF9tZW51X2Nsb3NlKHdpbmRvdy0+cG9wdXAuZXdrX21lbnUpOworICAgaWYgKHdpbmRv
dy0+cG9wdXAuZWxtX21lbnUpCisgICAgIGVsbV9tZW51X2Nsb3NlKHdpbmRvdy0+cG9wdXAuZWxt
X21lbnUpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX3ZpZXdfZmF2aWNvbihCcm93c2VyX1dp
bmRvdyAqd2luZG93LCBFdmFzX09iamVjdCAqaWNvbikKK3sKKyAgIC8qIFJlbW92ZSBwcmV2aW91
cyBpY29uIGZyb20gVVJMIGJhciAqLworICAgRXZhc19PYmplY3QgKm9sZF9pY29uID0gZWxtX29i
amVjdF9wYXJ0X2NvbnRlbnRfdW5zZXQod2luZG93LT51cmxfYmFyLCAiaWNvbiIpOworICAgaWYg
KG9sZF9pY29uKSB7CisgICAgIGV2YXNfb2JqZWN0X3VucmVmKG9sZF9pY29uKTsKKyAgICAgZXZh
c19vYmplY3RfZGVsKG9sZF9pY29uKTsKKyAgIH0KKworICAgLyogU2hvdyBuZXcgaWNvbiBpbiBV
UkwgYmFyICovCisgICBpZiAoaWNvbikgeworICAgICBldmFzX29iamVjdF9zaXplX2hpbnRfbWlu
X3NldChpY29uLCAzMiwgMzIpOworICAgICBlbG1fb2JqZWN0X3BhcnRfY29udGVudF9zZXQod2lu
ZG93LT51cmxfYmFyLCAiaWNvbiIsIGljb24pOworICAgICBldmFzX29iamVjdF9yZWYoaWNvbik7
CisgICB9Cit9CisKK3N0YXRpYyB2b2lkCitfaWNvbl9jaGFuZ2VkX2NiKEV3a19GYXZpY29uX0Rh
dGFiYXNlICpkYXRhYmFzZSwgY29uc3QgY2hhciAqdXJsLCB2b2lkICp1c2VyX2RhdGEpCit7Cisg
ICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwor
ICAgRXZhc19PYmplY3QgKmV3a192aWV3ID0gd2luZG93LT5ld2tfdmlldzsKKworICAgaWYgKHN0
cmNtcCh1cmwsIGV3a192aWV3X3VybF9nZXQoZXdrX3ZpZXcpKSkKKyAgICAgcmV0dXJuOworCisg
ICBFdmFzX09iamVjdCAqZmF2aWNvbiA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fZ2V0KGRh
dGFiYXNlLCB1cmwsIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a192aWV3KSk7CisgICB1cGRhdGVf
dmlld19mYXZpY29uKHdpbmRvdywgZmF2aWNvbik7CisKKyAgIGlmIChmYXZpY29uKQorICAgICBl
dmFzX29iamVjdF91bnJlZihmYXZpY29uKTsKK30KKworc3RhdGljIHZvaWQgd2luZG93X2ZyZWUo
QnJvd3Nlcl9XaW5kb3cgKndpbmRvdykKK3sKKyAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNr
X2RlbCh3aW5kb3ctPmV3a192aWV3LCBFVkFTX0NBTExCQUNLX01PVVNFX0lOLCBfbW91c2VfaW5f
Y2IpOworICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKHdpbmRvdy0+ZXdrX3ZpZXcs
IEVWQVNfQ0FMTEJBQ0tfTU9VU0VfT1VULCBfbW91c2Vfb3V0X2NiKTsKKyAgIGV2YXNfb2JqZWN0
X2V2ZW50X2NhbGxiYWNrX2RlbCh3aW5kb3ctPmV3a192aWV3LCBFVkFTX0NBTExCQUNLX01PVVNF
X01PVkUsIF9tb3VzZV9tb3ZlX2NiKTsKKyAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2Rl
bCh3aW5kb3ctPmV3a192aWV3LCBFVkFTX0NBTExCQUNLX01PVVNFX1dIRUVMLCBfbW91c2Vfd2hl
ZWxfY2IpOworCisgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwod2luZG93LT5lbG1f
d2luZG93LCBFVkFTX0NBTExCQUNLX1JFU0laRSwgX3dpbmRvd19yZXNpemVfY2IpOworCisgICBl
d2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFja19kZWwoZXdrX2NvbnRleHRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXQoZXdrX3ZpZXdfY29udGV4dF9nZXQod2luZG93LT5ld2tfdmll
dykpLCBfaWNvbl9jaGFuZ2VkX2NiKTsKKworICAgZXZhc19vYmplY3RfZGVsKHdpbmRvdy0+ZXdr
X3ZpZXcpOworICAgLyogVGhlIGVsbV93aW4gd2lsbCB0YWtlIGNhcmUgb2YgZnJlZWluZyBpdHMg
Y2hpbGRyZW4gKi8KKyAgIGV2YXNfb2JqZWN0X2RlbCh3aW5kb3ctPmVsbV93aW5kb3cpOworCisg
ICBpZiAod2luZG93LT50b29sdGlwLnNob3dfdGltZXIpCisgICAgIGVjb3JlX3RpbWVyX2RlbCh3
aW5kb3ctPnRvb2x0aXAuc2hvd190aW1lcik7CisKKyAgIGlmICh3aW5kb3ctPmNvbG9yX3NlbGVj
dG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpCisgICAgIGV2YXNfb2JqZWN0X2RlbCh3aW5kb3ctPmNv
bG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpOworCisgICBmcmVlKHdpbmRvdyk7Cit9
CisKK3N0YXRpYyB2b2lkIHdpbmRvd19jbG9zZShCcm93c2VyX1dpbmRvdyAqd2luZG93KQorewor
ICAgd2luZG93cyA9IGVpbmFfbGlzdF9yZW1vdmUod2luZG93cywgd2luZG93KTsKKyAgIHdpbmRv
d19mcmVlKHdpbmRvdyk7CisKKyAgIGlmICghd2luZG93cykKKyAgICAgZWxtX2V4aXQoKTsKK30K
Kworc3RhdGljIHZvaWQKK3NlYXJjaF9pY29uX3Nob3coQnJvd3Nlcl9XaW5kb3cgKndpbmRvdykK
K3sKKyAgIEV2YXNfT2JqZWN0ICppY29uID0gZWxtX2ljb25fYWRkKHdpbmRvdy0+ZWxtX3dpbmRv
dyk7CisgICBlbG1faWNvbl9zdGFuZGFyZF9zZXQoaWNvbiwgImVkaXQtZmluZCIpOworICAgZWxt
X29iamVjdF9wYXJ0X2NvbnRlbnRfc2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCwgImlj
b24iLCBpY29uKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9taW5fc2V0KGljb24sIDIwLCAy
MCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfbWF4X3NldChpY29uLCAyMCwgMjApOworICAg
ZWxtX2VudHJ5X2ljb25fdmlzaWJsZV9zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCBF
SU5BX1RSVUUpOworICAgZXZhc19vYmplY3Rfc2hvdyhpY29uKTsKK30KKworc3RhdGljIHZvaWQK
K3NlYXJjaF9ib3hfc2hvdyhCcm93c2VyX1dpbmRvdyAqd2luZG93KQoreworICAgZXZhc19vYmpl
Y3Rfc2l6ZV9oaW50X21pbl9zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2JhciwgU0VBUkNIX0ZJ
RUxEX1NJWkUgKyAyICogU0VBUkNIX0JVVFRPTl9TSVpFLCBTRUFSQ0hfQlVUVE9OX1NJWkUpOwor
CisgICBzZWFyY2hfaWNvbl9zaG93KHdpbmRvdyk7CisgICBldmFzX29iamVjdF9zaG93KHdpbmRv
dy0+c2VhcmNoLnNlYXJjaF9iYXIpOworICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPnNlYXJj
aC5zZWFyY2hfZmllbGQpOworICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPnNlYXJjaC5zZWFy
Y2hfZmllbGRfY291bnQpOworICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPnNlYXJjaC5iYWNr
d2FyZF9idXR0b24pOworICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPnNlYXJjaC5mb3J3YXJk
X2J1dHRvbik7CisgICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9jYXNl
X2NoZWNrX2JveCk7CisgICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF93
b3JkX3N0YXJ0X2NoZWNrX2JveCk7CisgICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+c2VhcmNo
LmNsb3NlX2J1dHRvbik7CisKKyAgIC8qIEdyYWIgZm9jdXMgZnJvbSB0aGUgdmlldyAqLworICAg
ZXZhc19vYmplY3RfZm9jdXNfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIEVJTkFfRkFMU0UpOworICAg
ZWxtX29iamVjdF9mb2N1c19zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCBFSU5BX1RS
VUUpOworfQorCitzdGF0aWMgdm9pZAorc2VhcmNoX2JveF9oaWRlKEJyb3dzZXJfV2luZG93ICp3
aW5kb3cpCit7CisgICBld2tfdmlld190ZXh0X2ZpbmRfaGlnaGxpZ2h0X2NsZWFyKHdpbmRvdy0+
ZXdrX3ZpZXcpOworCisgICBldmFzX29iamVjdF9zaXplX2hpbnRfbWluX3NldCh3aW5kb3ctPnNl
YXJjaC5zZWFyY2hfYmFyLCBTRUFSQ0hfRklFTERfU0laRSArIDIgKiBTRUFSQ0hfQlVUVE9OX1NJ
WkUsIDApOworICAgZXZhc19vYmplY3RfaGlkZSh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfYmFyKTsK
KyAgIGV2YXNfb2JqZWN0X2hpZGUod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkKTsKKyAgIGV2
YXNfb2JqZWN0X2hpZGUod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkX2NvdW50KTsKKyAgIGV2
YXNfb2JqZWN0X2hpZGUod2luZG93LT5zZWFyY2guYmFja3dhcmRfYnV0dG9uKTsKKyAgIGV2YXNf
b2JqZWN0X2hpZGUod2luZG93LT5zZWFyY2guZm9yd2FyZF9idXR0b24pOworICAgZXZhc19vYmpl
Y3RfaGlkZSh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfY2FzZV9jaGVja19ib3gpOworICAgZXZhc19v
YmplY3RfaGlkZSh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfd29yZF9zdGFydF9jaGVja19ib3gpOwor
ICAgZXZhc19vYmplY3RfaGlkZSh3aW5kb3ctPnNlYXJjaC5jbG9zZV9idXR0b24pOworCisgICAv
KiBHaXZlIGZvY3VzIGJhY2sgdG8gdGhlIHZpZXcgKi8KKyAgIGVsbV9vYmplY3RfZm9jdXNfc2V0
KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCwgRUlOQV9GQUxTRSk7CisgICBldmFzX29iamVj
dF9mb2N1c19zZXQod2luZG93LT5ld2tfdmlldywgRUlOQV9UUlVFKTsKK30KKworc3RhdGljIHZv
aWQKK2hpc3RvcnlfbGlzdF9oaWRlKEJyb3dzZXJfV2luZG93ICp3aW5kb3cpCit7CisgICAvKiBI
aWRlIGhpc3RvcnkgbGlzdCAqLworICAgZXZhc19vYmplY3RfaGlkZSh3aW5kb3ctPmhpc3Rvcnku
aGlzdG9yeV9ib3gpOworICAgZXZhc19vYmplY3RfaGlkZSh3aW5kb3ctPmhpc3RvcnkuaGlzdG9y
eV9saXN0KTsKKworICAgLyogRGVyZWZlcmVuY2UgdGhlIGxpc3QgaXRlbXMgYW5kIGNsZWFyIHRo
ZSBoaXN0b3J5IGxpc3QgKi8KKyAgIHZvaWQgKmRhdGE7CisgICBFSU5BX0xJU1RfRlJFRSh3aW5k
b3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0X2l0ZW1zLCBkYXRhKSB7CisgICAgICAgZXdrX29iamVj
dF91bnJlZihkYXRhKTsKKyAgIH0KKworICAgZWxtX2dlbmxpc3RfY2xlYXIod2luZG93LT5oaXN0
b3J5Lmhpc3RvcnlfbGlzdCk7CisKKyAgIC8qIEdpdmUgZm9jdXMgYmFjayB0byB0aGUgdmlldyAq
LworICAgZWxtX29iamVjdF9mb2N1c19zZXQod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfYm94LCBF
SU5BX0ZBTFNFKTsKKyAgIGVsbV9vYmplY3RfZm9jdXNfc2V0KHdpbmRvdy0+aGlzdG9yeS5oaXN0
b3J5X2xpc3QsIEVJTkFfRkFMU0UpOworICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHdpbmRvdy0+
ZXdrX3ZpZXcsIEVJTkFfVFJVRSk7CisKKyAgIC8qIFJlc2V0IGZsYWdzICovCisgICBsb25ncHJl
c3NfZW5hYmxlZCA9IEVJTkFfRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHNhdmVfcGFnZV9jb250
ZW50c19jYWxsYmFjayhFd2tfUGFnZV9Db250ZW50c19UeXBlIHR5cGUsIGNvbnN0IGNoYXIgKmRh
dGEsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgIEVldF9GaWxlICplZjsKKyAgIEVpbmFfU3RyaW5n
c2hhcmUgKmZpbGVOYW1lID0gKEVpbmFfU3RyaW5nc2hhcmUgKil1c2VyX2RhdGE7CisKKyAgIGlm
ICghZWluYV9zdHJfaGFzX2V4dGVuc2lvbihmaWxlTmFtZSwgIi5taHQiKSkgeworICAgICBFaW5h
X1N0cmJ1ZiAqZmlsZU5hbWVXaXRoTWh0ID0gZWluYV9zdHJidWZfbmV3KCk7CisgICAgIGVpbmFf
c3RyYnVmX2FwcGVuZF9wcmludGYoZmlsZU5hbWVXaXRoTWh0LCAiJXMubWh0IiwgZmlsZU5hbWUp
OworICAgICBlZiA9IGVldF9vcGVuKGVpbmFfc3RyYnVmX3N0cmluZ19nZXQoZmlsZU5hbWVXaXRo
TWh0KSwgRUVUX0ZJTEVfTU9ERV9XUklURSk7CisgICAgIElORk8oIlNhdmluZyBmaWxlIHRvOiAl
cyIsIGVpbmFfc3RyYnVmX3N0cmluZ19nZXQoZmlsZU5hbWVXaXRoTWh0KSk7CisgICAgIGVpbmFf
c3RyYnVmX2ZyZWUoZmlsZU5hbWVXaXRoTWh0KTsKKyAgIH0gZWxzZSB7CisgICAgIGVmID0gZWV0
X29wZW4oZmlsZU5hbWUsIEVFVF9GSUxFX01PREVfV1JJVEUpOworICAgICBJTkZPKCJTYXZpbmcg
ZmlsZSB0bzogJXMiLCBmaWxlTmFtZSk7CisgICB9CisKKyAgIGlmICghZWYpIHsKKyAgICAgRVJS
T1IoIkNvdWxkIG5vdCBjcmVhdGUgRmlsZSIpOworICAgICByZXR1cm47CisgICB9CisKKyAgIGVl
dF93cml0ZShlZiwgIk1IVE1MIGRhdGEiLCBkYXRhLCBzdHJsZW4oZGF0YSksIDAgLyogY29tcHJl
c3MgKi8pOworICAgZWV0X2Nsb3NlKGVmKTsKKyAgIElORk8oIlNVQ0NFU1M6IHNhdmVkLiIpOwor
CisgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChmaWxlTmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCitz
Y3JpcHRfZXhlY3V0ZV9jYWxsYmFjayhFdmFzX09iamVjdCAqZXdrX3ZpZXcsIGNvbnN0IGNoYXIg
KnJldHVybl92YWx1ZSwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgQnJvd3Nlcl9XaW5kb3cgKndp
bmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKworICAgRWluYV9TdHJidWYgKnRl
eHRfYnVmZmVyID0gZWluYV9zdHJidWZfbmV3KCk7CisKKyAgIGlmIChyZXR1cm5fdmFsdWUpIHsK
KyAgICAgZWluYV9zdHJidWZfYXBwZW5kKHRleHRfYnVmZmVyLCByZXR1cm5fdmFsdWUpOworICAg
ICBJTkZPKCJzZWxlY3RlZCB0ZXh0IGlzOiAlcyIsIGVpbmFfc3RyYnVmX3N0cmluZ19nZXQodGV4
dF9idWZmZXIpKTsKKyAgICAgZWxtX2VudHJ5X2VudHJ5X3NldCh3aW5kb3ctPnNlYXJjaC5zZWFy
Y2hfZmllbGQsIGVpbmFfc3RyYnVmX3N0cmluZ19nZXQodGV4dF9idWZmZXIpKTsKKyAgIH0KKyAg
IGVpbmFfc3RyYnVmX2ZyZWUodGV4dF9idWZmZXIpOworICAgc2VhcmNoX2JveF9zaG93KHdpbmRv
dyk7Cit9CisKK3N0YXRpYyB2b2lkCit0b2dnbGVfd2luZG93X2Z1bGxzY3JlZW4oQnJvd3Nlcl9X
aW5kb3cgKndpbmRvdywgRWluYV9Cb29sIGlzRnVsbFNjcmVlbikKK3sKKyAgIGlmIChpc0Z1bGxT
Y3JlZW4pIHsKKyAgICAgZXZhc19vYmplY3RfaGlkZSh3aW5kb3ctPmhvcml6b250YWxfbGF5b3V0
KTsKKyAgICAgZWxtX2JveF91bnBhY2sod2luZG93LT52ZXJ0aWNhbF9sYXlvdXQsIHdpbmRvdy0+
aG9yaXpvbnRhbF9sYXlvdXQpOworICAgICBlbG1fd2luX2Z1bGxzY3JlZW5fc2V0KHdpbmRvdy0+
ZWxtX3dpbmRvdywgRUlOQV9UUlVFKTsKKyAgIH0gZWxzZSB7CisgICAgIGVsbV93aW5fZnVsbHNj
cmVlbl9zZXQod2luZG93LT5lbG1fd2luZG93LCBFSU5BX0ZBTFNFKTsKKyAgICAgZWxtX2JveF9w
YWNrX3N0YXJ0KHdpbmRvdy0+dmVydGljYWxfbGF5b3V0LCB3aW5kb3ctPmhvcml6b250YWxfbGF5
b3V0KTsKKyAgICAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT5ob3Jpem9udGFsX2xheW91dCk7
CisgICB9Cit9CisKK3N0YXRpYyB2b2lkCitfa2V5X2Rvd25fY2Iodm9pZCAqdXNlcl9kYXRhLCBF
dmFzICplLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICBC
cm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworICAg
RXZhc19FdmVudF9LZXlfRG93biAqZXYgPSAoRXZhc19FdmVudF9LZXlfRG93biopIGV2ZW50X2lu
Zm87CisKKyAgIHN0YXRpYyBjb25zdCBjaGFyICplbmNvZGluZ3NbXSA9IHsKKyAgICAgIklTTy04
ODU5LTEiLAorICAgICAiVVRGLTgiLAorICAgICBOVUxMCisgICB9OworICAgc3RhdGljIGludCBj
dXJyZW50RW5jb2RpbmcgPSAtMTsKKyAgIGNvbnN0IEV2YXNfTW9kaWZpZXIgKm1vZCA9IGV2YXNf
a2V5X21vZGlmaWVyX2dldChlKTsKKyAgIEVpbmFfQm9vbCBjdHJsUHJlc3NlZCA9IGV2YXNfa2V5
X21vZGlmaWVyX2lzX3NldChtb2QsICJDb250cm9sIik7CisgICBFaW5hX0Jvb2wgYWx0UHJlc3Nl
ZCA9IGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChtb2QsICJBbHQiKTsKKyAgIEVpbmFfQm9vbCBz
aGlmdFByZXNzZWQgPSBldmFzX2tleV9tb2RpZmllcl9pc19zZXQobW9kLCAiU2hpZnQiKTsKKwor
ICAgaWYgKCFzdHJjbXAoZXYtPmtleSwgIkxlZnQiKSAmJiBhbHRQcmVzc2VkKSB7CisgICAgIElO
Rk8oIkJhY2sgKEFsdCtMZWZ0KSB3YXMgcHJlc3NlZCIpOworICAgICBpZiAoIWV3a192aWV3X2Jh
Y2soZXdrX3ZpZXcpKQorICAgICAgIElORk8oIkJhY2sgaWdub3JlZDogTm8gYmFjayBoaXN0b3J5
Iik7CisgICB9IGVsc2UgaWYgKCFzdHJjbXAoZXYtPmtleSwgIlJpZ2h0IikgJiYgYWx0UHJlc3Nl
ZCkgeworICAgICBJTkZPKCJGb3J3YXJkIChBbHQrUmlnaHQpIHdhcyBwcmVzc2VkIik7CisgICAg
IGlmICghZXdrX3ZpZXdfZm9yd2FyZChld2tfdmlldykpCisgICAgICAgSU5GTygiRm9yd2FyZCBp
Z25vcmVkOiBObyBmb3J3YXJkIGhpc3RvcnkiKTsKKyAgIH0gZWxzZSBpZiAoIXN0cmNtcChldi0+
a2V5LCAiSG9tZSIpICYmIGFsdFByZXNzZWQpIHsKKyAgICAgSU5GTygiSG9tZSAoQWx0K0hvbWUp
IHdhcyBwcmVzc2VkIik7CisgICAgIGV3a192aWV3X3VybF9zZXQod2luZG93LT5ld2tfdmlldywg
REVGQVVMVF9VUkwpOworICAgfSBlbHNlIGlmICghc3RyY21wKGV2LT5rZXksICJGMyIpKSB7Cisg
ICAgIGN1cnJlbnRFbmNvZGluZyA9IChjdXJyZW50RW5jb2RpbmcgKyAxKSAlIChzaXplb2YoZW5j
b2RpbmdzKSAvIHNpemVvZihlbmNvZGluZ3NbMF0pKTsKKyAgICAgSU5GTygiU2V0IGVuY29kaW5n
IChGMykgcHJlc3NlZC4gTmV3IGVuY29kaW5nIHRvICVzIiwgZW5jb2RpbmdzW2N1cnJlbnRFbmNv
ZGluZ10pOworICAgICBld2tfdmlld19jdXN0b21fZW5jb2Rpbmdfc2V0KGV3a192aWV3LCBlbmNv
ZGluZ3NbY3VycmVudEVuY29kaW5nXSk7CisgICB9IGVsc2UgaWYgKCghc3RyY21wKGV2LT5rZXks
ICJGNSIpICYmIGN0cmxQcmVzc2VkKSB8fCAoIXN0cmNtcChldi0+a2V5LCAiciIpICYmIChzaGlm
dFByZXNzZWQgJiBjdHJsUHJlc3NlZCkpKSB7CisgICAgIElORk8oIlJlbG9hZCBpZ25vcmluZyBj
YWNoZSAoQ3RybCtGNSBvciBDdHJsK1NoaWZ0K3IpIHdhcyBwcmVzc2VkLCByZWxvYWRpbmcgYW5k
IGJ5cGFzc2luZyBjYWNoZS4uLiIpOworICAgICBld2tfdmlld19yZWxvYWRfYnlwYXNzX2NhY2hl
KGV3a192aWV3KTsKKyAgIH0gZWxzZSBpZiAoIXN0cmNtcChldi0+a2V5LCAiRjUiKSB8fCAoIXN0
cmNtcChldi0+a2V5LCAiciIpICYmIGN0cmxQcmVzc2VkKSkgeworICAgICBJTkZPKCJSZWxvYWQg
KEY1IG9yIEN0cmwrcikgd2FzIHByZXNzZWQsIHJlbG9hZGluZy4uLiIpOworICAgICBld2tfdmll
d19yZWxvYWQoZXdrX3ZpZXcpOworICAgfSBlbHNlIGlmICghc3RyY21wKGV2LT5rZXksICJGNiIp
KSB7CisgICAgIElORk8oIlN0b3AgKEY2KSB3YXMgcHJlc3NlZCwgc3RvcCBsb2FkaW5nLiIpOwor
ICAgICBld2tfdmlld19zdG9wKGV3a192aWV3KTsKKyAgIH0gZWxzZSBpZiAoIXN0cmNtcChldi0+
a2V5LCAiRjciKSkgeworICAgICBFd2tfUGFnaW5hdGlvbl9Nb2RlIG1vZGUgPSAgZXdrX3ZpZXdf
cGFnaW5hdGlvbl9tb2RlX2dldChld2tfdmlldyk7CisgICAgIG1vZGUgPSAobW9kZSArIDEpICUg
KEVXS19QQUdJTkFUSU9OX01PREVfQk9UVE9NX1RPX1RPUCArIDEpOworICAgICBpZiAoZXdrX3Zp
ZXdfcGFnaW5hdGlvbl9tb2RlX3NldChld2tfdmlldywgbW9kZSkpCisgICAgICAgSU5GTygiQ2hh
bmdlIFBhZ2luYXRpb24gTW9kZSAoRjcpIHdhcyBwcmVzc2VkLCBjaGFuZ2VkIHRvOiAlZCIsIG1v
ZGUpOworICAgICBlbHNlCisgICAgICAgSU5GTygiQ2hhbmdlIFBhZ2luYXRpb24gTW9kZSAoRjcp
IHdhcyBwcmVzc2VkLCBidXQgTk9UIGNoYW5nZWQhIik7CisgICB9IGVsc2UgaWYgKCFzdHJjbXAo
ZXYtPmtleSwgIkYxMSIpKSB7CisgICAgIElORk8oIkZ1bGxzY3JlZW4gKEYxMSkgd2FzIHByZXNz
ZWQsIHRvZ2dsaW5nIHdpbmRvdy9mdWxsc2NyZWVuLiIpOworICAgICB0b2dnbGVfd2luZG93X2Z1
bGxzY3JlZW4od2luZG93LCAhZWxtX3dpbl9mdWxsc2NyZWVuX2dldCh3aW5kb3ctPmVsbV93aW5k
b3cpKTsKKyAgIH0gZWxzZSBpZiAoIXN0cmNtcChldi0+a2V5LCAibiIpICYmIGN0cmxQcmVzc2Vk
KSB7CisgICAgIElORk8oIkNyZWF0ZSBuZXcgd2luZG93IChDdHJsK24pIHdhcyBwcmVzc2VkLiIp
OworICAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2NyZWF0ZShjb25maWd1cmF0
aW9uKCksIDAsIDApOworICAgICBld2tfdmlld191cmxfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIERF
RkFVTFRfVVJMKTsKKyAgICAgLy8gMCBlcXVhbHMgZGVmYXVsdCB3aWR0aCBhbmQgaGVpZ2h0Lgor
ICAgICB3aW5kb3dzID0gZWluYV9saXN0X2FwcGVuZCh3aW5kb3dzLCB3aW5kb3cpOworICAgfSBl
bHNlIGlmICghc3RyY21wKGV2LT5rZXksICJpIikgJiYgY3RybFByZXNzZWQpIHsKKyAgICAgSU5G
TygiU2hvdyBJbnNwZWN0b3IgKEN0cmwraSkgd2FzIHByZXNzZWQuIik7CisgICAgIGV3a192aWV3
X2luc3BlY3Rvcl9zaG93KGV3a192aWV3KTsKKyAgIH0gZWxzZSBpZiAoIXN0cmNtcChldi0+a2V5
LCAiZiIpICYmIGN0cmxQcmVzc2VkKSB7CisgICAgIElORk8oIlNob3cgU2VhcmNoIEJveCAoQ3Ry
bCtmKSB3YXMgcHJlc3NlZC4iKTsKKyAgICAgY29uc3QgY2hhciBnZXRfZGF0YV9zY3JpcHRbXSA9
ICJ3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTsiOworICAgICBld2tfdmlld19zY3Jp
cHRfZXhlY3V0ZShld2tfdmlldywgZ2V0X2RhdGFfc2NyaXB0LCBzY3JpcHRfZXhlY3V0ZV9jYWxs
YmFjaywgKHZvaWQqKSh3aW5kb3cpKTsKKyAgIH0gZWxzZSBpZiAoIXN0cmNtcChldi0+a2V5LCAi
RXNjYXBlIikpIHsKKyAgICAgaWYgKGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KHdpbmRvdy0+c2Vh
cmNoLnNlYXJjaF9iYXIpKQorICAgICAgIHNlYXJjaF9ib3hfaGlkZSh3aW5kb3cpOworICAgICBl
bHNlIGlmIChldmFzX29iamVjdF92aXNpYmxlX2dldCh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9i
b3gpKQorICAgICAgIGhpc3RvcnlfbGlzdF9oaWRlKHdpbmRvdyk7CisgICAgIGVsc2UgaWYgKGVs
bV93aW5fZnVsbHNjcmVlbl9nZXQod2luZG93LT5lbG1fd2luZG93KSkKKyAgICAgICBld2tfdmll
d19mdWxsc2NyZWVuX2V4aXQoZXdrX3ZpZXcpOworICAgICBlbHNlCisgICAgICAgZXdrX3ZpZXdf
c3RvcChld2tfdmlldyk7CisgICB9IGVsc2UgaWYgKGN0cmxQcmVzc2VkICYmICghc3RyY21wKGV2
LT5rZXksICJtaW51cyIpIHx8ICFzdHJjbXAoZXYtPmtleSwgIktQX1N1YnRyYWN0IikpKSB7Cisg
ICAgIGlmICh6b29tX2xldmVsX3NldChld2tfdmlldywgd2luZG93LT5jdXJyZW50X3pvb21fbGV2
ZWwgLSAxKSkKKyAgICAgICB3aW5kb3ctPmN1cnJlbnRfem9vbV9sZXZlbC0tOworICAgICBJTkZP
KCJab29tIG91dCAoQ3RybCArICctJykgd2FzIHByZXNzZWQsIHpvb20gbGV2ZWwgYmVjYW1lICUu
MmYiLCB6b29tTGV2ZWxzW3dpbmRvdy0+Y3VycmVudF96b29tX2xldmVsXSk7CisgICB9IGVsc2Ug
aWYgKGN0cmxQcmVzc2VkICYmICghc3RyY21wKGV2LT5rZXksICJlcXVhbCIpIHx8ICFzdHJjbXAo
ZXYtPmtleSwgIktQX0FkZCIpKSkgeworICAgICBpZiAoem9vbV9sZXZlbF9zZXQoZXdrX3ZpZXcs
IHdpbmRvdy0+Y3VycmVudF96b29tX2xldmVsICsgMSkpCisgICAgICAgd2luZG93LT5jdXJyZW50
X3pvb21fbGV2ZWwrKzsKKyAgICAgSU5GTygiWm9vbSBpbiAoQ3RybCArICcrJykgd2FzIHByZXNz
ZWQsIHpvb20gbGV2ZWwgYmVjYW1lICUuMmYiLCB6b29tTGV2ZWxzW3dpbmRvdy0+Y3VycmVudF96
b29tX2xldmVsXSk7CisgICB9IGVsc2UgaWYgKGN0cmxQcmVzc2VkICYmICFzdHJjbXAoZXYtPmtl
eSwgIjAiKSkgeworICAgICBpZiAoem9vbV9sZXZlbF9zZXQoZXdrX3ZpZXcsIERFRkFVTFRfWk9P
TV9MRVZFTCkpCisgICAgICAgd2luZG93LT5jdXJyZW50X3pvb21fbGV2ZWwgPSBERUZBVUxUX1pP
T01fTEVWRUw7CisgICAgIElORk8oIlpvb20gdG8gZGVmYXVsdCAoQ3RybCArICcwJykgd2FzIHBy
ZXNzZWQsIHpvb20gbGV2ZWwgYmVjYW1lICUuMmYiLCB6b29tTGV2ZWxzW3dpbmRvdy0+Y3VycmVu
dF96b29tX2xldmVsXSk7CisgICB9IGVsc2UgaWYgKGN0cmxQcmVzc2VkICYmICFzdHJjbXAoZXYt
PmtleSwgInMiKSkgeworICAgICBFaW5hX1N0cmJ1ZiAqZGVmYXVsdF9maWxlID0gZWluYV9zdHJi
dWZfbmV3KCk7CisgICAgIGNvbnN0IGNoYXIgKmhvbWVfcGF0aCA9IGdldGVudigiSE9NRSIpOwor
ICAgICBjb25zdCBjaGFyICp0aXRsZSA9IGV3a192aWV3X3RpdGxlX2dldCh3aW5kb3ctPmV3a192
aWV3KTsKKyAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50ZihkZWZhdWx0X2ZpbGUsICIlcy8l
cy5taHQiLCBob21lX3BhdGggPyBob21lX3BhdGggOiAiL2hvbWUiLCB0aXRsZSA/IHRpdGxlIDog
InRpdGxlIik7CisgICAgIElORk8oIlByZXNzZWQgKENUUkwgKyBTKSA6IFNhdmluZyBDdXJyZW50
IFBhZ2UuIik7CisgICAgIEVpbmFfU3RyaW5nc2hhcmUgKnNhdmVfZmlsZV9uYW1lID0gX2ZpbGVf
ZW50cnlfZGlhbG9nX3Nob3cod2luZG93LCAiU0FWRSIsIGVpbmFfc3RyYnVmX3N0cmluZ19nZXQo
ZGVmYXVsdF9maWxlKSk7CisgICAgIGlmICghc2F2ZV9maWxlX25hbWUpCisgICAgICAgcmV0dXJu
OworICAgICBld2tfdmlld19wYWdlX2NvbnRlbnRzX2dldChld2tfdmlldywgRVdLX1BBR0VfQ09O
VEVOVFNfVFlQRV9NSFRNTCwgc2F2ZV9wYWdlX2NvbnRlbnRzX2NhbGxiYWNrLCAodm9pZCAqKXNh
dmVfZmlsZV9uYW1lKTsKKyAgICAgZWluYV9zdHJidWZfZnJlZShkZWZhdWx0X2ZpbGUpOworICAg
fSBlbHNlIGlmIChjdHJsUHJlc3NlZCAmJiAhc3RyY21wKGV2LT5rZXksICJsIikpIHsKKyAgICAg
Y29uc3QgY2hhciAqaG9tZV9wYXRoID0gIGdldGVudigiSE9NRSIpOworICAgICBFaW5hX1N0cmlu
Z3NoYXJlICpvcGVuX2ZpbGVfbmFtZSA9IF9maWxlX2VudHJ5X2RpYWxvZ19zaG93KHdpbmRvdywg
IkxPQUQiLCBob21lX3BhdGggPyBob21lX3BhdGggOiAiL2hvbWUiKTsKKyAgICAgaWYgKCFvcGVu
X2ZpbGVfbmFtZSkKKyAgICAgICByZXR1cm47CisgICAgIEVpbmFfU3RyYnVmICp1cmlfcGF0aCA9
IGVpbmFfc3RyYnVmX25ldygpOworICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKHVyaV9w
YXRoLCAiJXMlcyIsIEZJTEVfU0NIRU1FLCBvcGVuX2ZpbGVfbmFtZSk7CisgICAgIElORk8oInBy
ZXNzZWQgKENUUkwgKyBMKSA6IExvYWRpbmcgUGFnZSAlcyIsIGVpbmFfc3RyYnVmX3N0cmluZ19n
ZXQodXJpX3BhdGgpKTsKKyAgICAgZXdrX3ZpZXdfdXJsX3NldChld2tfdmlldywgZWluYV9zdHJi
dWZfc3RyaW5nX2dldCh1cmlfcGF0aCkpOworICAgICBlaW5hX3N0cmJ1Zl9mcmVlKHVyaV9wYXRo
KTsKKyAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwob3Blbl9maWxlX25hbWUpOworICAgfQorfQor
CitzdGF0aWMgdm9pZAordmlld19mb2N1c19zZXQoQnJvd3Nlcl9XaW5kb3cgKndpbmRvdywgRWlu
YV9Cb29sIGZvY3VzKQoreworICAgLyogV2Ugc3RlYWwgZm9jdXMgYXdheSBmcm9tIGVsbSdzIGZv
Y3VzIG1vZGVsIGFuZCBzdGFydCB0byBkbyB0aGluZ3MKKyAgICAqIG1hbnVhbGx5IGhlcmUsIHNv
IGVsbSBub3cgaGFzIG5vIGNsdWUgd2hhdCdzIHVwLiBUZWxsIGVsbSB0aGF0IGl0cworICAgICog
dG9wbGV2ZWwgd2lkZ2V0IGlzIHRvIGJlIHVuZm9jdXNlZCBzbyBlbG0gZ2l2ZXMgdXAgdGhlIGZv
Y3VzICovCisgICBlbG1fb2JqZWN0X2ZvY3VzX3NldChlbG1fb2JqZWN0X3RvcF93aWRnZXRfZ2V0
KHdpbmRvdy0+ZWxtX3dpbmRvdyksIEVJTkFfRkFMU0UpOworICAgZXZhc19vYmplY3RfZm9jdXNf
c2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIGZvY3VzKTsKK30KKworc3RhdGljIHZvaWQKK19tb3VzZV9k
b3duX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhcyAqZSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2
b2lkICpldmVudF9pbmZvKQoreworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2Vy
X1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIEV2YXNfRXZlbnRfTW91c2VfRG93biAqZXYgPSAoRXZh
c19FdmVudF9Nb3VzZV9Eb3duICopZXZlbnRfaW5mbzsKKworICAgLyogQ2xlYXIgc2VsZWN0aW9u
IGZyb20gdGhlIFVSTCBiYXIgKi8KKyAgIGVsbV9lbnRyeV9zZWxlY3Rfbm9uZSh3aW5kb3ctPnVy
bF9iYXIpOworCisgICBpZiAobG9uZ3ByZXNzX2VuYWJsZWQpCisgICAgIGhpc3RvcnlfbGlzdF9o
aWRlKHdpbmRvdyk7CisgICBpZiAoZXYtPmJ1dHRvbiA9PSAxKQorICAgICB2aWV3X2ZvY3VzX3Nl
dCh3aW5kb3csIEVJTkFfVFJVRSk7CisgICBlbHNlIGlmIChldi0+YnV0dG9uID09IDIpCisgICAg
IHZpZXdfZm9jdXNfc2V0KHdpbmRvdywgIWV2YXNfb2JqZWN0X2ZvY3VzX2dldChld2tfdmlldykp
OworfQorCitzdGF0aWMgdm9pZAordGl0bGVfc2V0KEV2YXNfT2JqZWN0ICplbG1fd2luZG93LCBj
b25zdCBjaGFyICp0aXRsZSwgaW50IHByb2dyZXNzKQoreworICAgRWluYV9TdHJidWYgKmJ1ZmZl
cjsKKworICAgaWYgKCF0aXRsZSB8fCAhKnRpdGxlKSB7CisgICAgIGVsbV93aW5fdGl0bGVfc2V0
KGVsbV93aW5kb3csIEFQUF9OQU1FKTsKKyAgICAgcmV0dXJuOworICAgfQorCisgICBidWZmZXIg
PSBlaW5hX3N0cmJ1Zl9uZXcoKTsKKyAgIGlmIChwcm9ncmVzcyA8IDEwMCkKKyAgICAgZWluYV9z
dHJidWZfYXBwZW5kX3ByaW50ZihidWZmZXIsICIlcyAoJWQlJSkgLSAlcyIsIHRpdGxlLCBwcm9n
cmVzcywgQVBQX05BTUUpOworICAgZWxzZQorICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRm
KGJ1ZmZlciwgIiVzIC0gJXMiLCB0aXRsZSwgQVBQX05BTUUpOworCisgICBlbG1fd2luX3RpdGxl
X3NldChlbG1fd2luZG93LCBlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGJ1ZmZlcikpOworICAgZWlu
YV9zdHJidWZfZnJlZShidWZmZXIpOworfQorCitzdGF0aWMgdm9pZAorX3RpdGxlX2NoYW5nZWRf
Y2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2lu
Zm8pCit7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNl
cl9kYXRhOworICAgY29uc3QgY2hhciAqdGl0bGUgPSAoY29uc3QgY2hhciAqKWV2ZW50X2luZm87
CisKKyAgIHRpdGxlX3NldCh3aW5kb3ctPmVsbV93aW5kb3csIHRpdGxlLCAxMDApOworfQorCitz
dGF0aWMgdm9pZAorX3VybF9jaGFuZ2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3Qg
KmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQoreworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRv
dyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIGNvbnN0IGNoYXIgKnVybCA9IGV3
a192aWV3X3VybF9nZXQod2luZG93LT5ld2tfdmlldyk7CisgICBjaGFyICpjb252ZXJ0ZWRfdXJs
ID0gZWxtX2VudHJ5X3V0ZjhfdG9fbWFya3VwKHVybCk7CisgICBlbG1fZW50cnlfZW50cnlfc2V0
KHdpbmRvdy0+dXJsX2JhciwgY29udmVydGVkX3VybCk7CisKKyAgIF9pY29uX2NoYW5nZWRfY2Io
ZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoZXdrX3ZpZXdfY29udGV4dF9nZXQoZXdr
X3ZpZXcpKSwgdXJsLCB1c2VyX2RhdGEpOworCisgICBmcmVlKGNvbnZlcnRlZF91cmwpOworCisg
ICBzZWFyY2hfYm94X2hpZGUod2luZG93KTsKK30KKworc3RhdGljIHZvaWQKK19iYWNrX2Zvcndh
cmRfbGlzdF9jaGFuZ2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3
LCB2b2lkICpldmVudF9pbmZvKQoreworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93
c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKworICAgLyogVXBkYXRlIG5hdmlnYXRpb24gYnV0dG9u
cyBzdGF0ZSAqLworICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQod2luZG93LT5iYWNrX2J1dHRv
biwgIWV3a192aWV3X2JhY2tfcG9zc2libGUoZXdrX3ZpZXcpKTsKKyAgIGVsbV9vYmplY3RfZGlz
YWJsZWRfc2V0KHdpbmRvdy0+Zm9yd2FyZF9idXR0b24sICFld2tfdmlld19mb3J3YXJkX3Bvc3Np
YmxlKGV3a192aWV3KSk7Cit9CisKK3N0YXRpYyB2b2lkCitfcHJvZ3Jlc3NfY2Iodm9pZCAqdXNl
cl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICBC
cm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworICAg
ZG91YmxlIHByb2dyZXNzID0gKihkb3VibGUgKilldmVudF9pbmZvOworCisgICB0aXRsZV9zZXQo
d2luZG93LT5lbG1fd2luZG93LCBld2tfdmlld190aXRsZV9nZXQod2luZG93LT5ld2tfdmlldyks
IHByb2dyZXNzICogMTAwKTsKK30KKworc3RhdGljIHZvaWQKK19lcnJvcl9jYih2b2lkICp1c2Vy
X2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKK3sKKyAgIEVp
bmFfU3RyYnVmICpidWZmZXI7CisgICBjb25zdCBFd2tfRXJyb3IgKmVycm9yID0gKGNvbnN0IEV3
a19FcnJvciAqKWV2ZW50X2luZm87CisKKyAgIC8qIFRoaXMgaXMgYSBjYW5jZWxsYXRpb24sIGRv
IG5vdCBkaXNwbGF5IHRoZSBlcnJvciBwYWdlICovCisgICBpZiAoZXdrX2Vycm9yX2NhbmNlbGxh
dGlvbl9nZXQoZXJyb3IpKQorICAgICByZXR1cm47CisKKyAgIGJ1ZmZlciA9IGVpbmFfc3RyYnVm
X25ldygpOworICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50ZihidWZmZXIsCisgICAgICI8aHRt
bD48Ym9keT48ZGl2IHN0eWxlPVwiY29sb3I6I2ZmMDAwMFwiPkVSUk9SITwvZGl2Pjxicj48ZGl2
PkNvZGU6ICVkPGJyPkRlc2NyaXB0aW9uOiAlczxicj5VUkw6ICVzPC9kaXY+PC9ib2R5PC9odG1s
PiIsCisgICAgIGV3a19lcnJvcl9jb2RlX2dldChlcnJvciksIGV3a19lcnJvcl9kZXNjcmlwdGlv
bl9nZXQoZXJyb3IpLCBld2tfZXJyb3JfdXJsX2dldChlcnJvcikpOworCisgICBld2tfdmlld19o
dG1sX3N0cmluZ19sb2FkKGV3a192aWV3LCBlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGJ1ZmZlciks
IDAsIGV3a19lcnJvcl91cmxfZ2V0KGVycm9yKSk7CisgICBlaW5hX3N0cmJ1Zl9mcmVlKGJ1ZmZl
cik7Cit9CisKK3N0YXRpYyB2b2lkCitfZG93bmxvYWRfcmVxdWVzdF9jYihFd2tfRG93bmxvYWRf
Sm9iICpkb3dubG9hZCwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgQnJvd3Nlcl9XaW5kb3cgKndp
bmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKworICAgRWluYV9TdHJidWYgKmRl
c3RpbmF0aW9uX3BhdGggPSBlaW5hX3N0cmJ1Zl9uZXcoKTsKKworICAgY29uc3QgY2hhciAqaG9t
ZV9wYXRoID0gZ2V0ZW52KCJIT01FIik7CisgICBFaW5hX1N0cmluZ3NoYXJlICpzYXZlX2ZpbGVf
cGF0aCA9IF9maWxlX2VudHJ5X2RpYWxvZ19zaG93KHdpbmRvdywgIkRPV05MT0FEIiwgaG9tZV9w
YXRoID8gaG9tZV9wYXRoIDogIi90bXAiKTsKKworICAgaWYgKHNhdmVfZmlsZV9wYXRoKQorICAg
ICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGRlc3RpbmF0aW9uX3BhdGgsICIlcyIsIHNhdmVf
ZmlsZV9wYXRoKTsKKyAgIGVsc2UKKyAgICAgZWluYV9zdHJidWZfYXBwZW5kKGRlc3RpbmF0aW9u
X3BhdGgsICIvdG1wIik7CisKKyAgIGNvbnN0IGNoYXIgKnN1Z2dlc3RlZF9uYW1lID0gZXdrX2Rv
d25sb2FkX2pvYl9zdWdnZXN0ZWRfZmlsZW5hbWVfZ2V0KGRvd25sb2FkKTsKKyAgIGlmIChzdWdn
ZXN0ZWRfbmFtZSAmJiAqc3VnZ2VzdGVkX25hbWUpCisgICAgIGVpbmFfc3RyYnVmX2FwcGVuZF9w
cmludGYoZGVzdGluYXRpb25fcGF0aCwgIi8lcyIsIHN1Z2dlc3RlZF9uYW1lKTsKKyAgIGVsc2Ug
eworICAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBmaWxlIG5hbWUgc2luY2Ugbm8gbmFtZSB3YXMg
c3VnZ2VzdGVkLgorICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmQoZGVzdGluYXRpb25fcGF0aCwgIi9k
b3dubG9hZGVkLWZpbGUuWFhYWFhYIik7CisgICAgIGNoYXIgKnVybCA9IE5VTEw7CisgICAgIHVy
bCA9IGVpbmFfc3RyYnVmX3N0cmluZ19zdGVhbChkZXN0aW5hdGlvbl9wYXRoKTsKKyAgICAgaWYg
KG1rc3RlbXAodXJsKSA9PSAtMSkgeworICAgICAgIEVSUk9SKCJDb3VsZCBub3QgZ2VuZXJhdGUg
YSB1bmlxdWUgZmlsZSBuYW1lLiIpOworICAgICAgIHJldHVybjsKKyAgICAgfQorICAgICBlaW5h
X3N0cmJ1Zl9hcHBlbmQoZGVzdGluYXRpb25fcGF0aCwgdXJsKTsKKyAgIH0KKworICAgZXdrX2Rv
d25sb2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoZG93bmxvYWQsIGVpbmFfc3RyYnVmX3N0cmluZ19n
ZXQoZGVzdGluYXRpb25fcGF0aCkpOworICAgSU5GTygiRG93bmxvYWRpbmc6ICVzIiwgZWluYV9z
dHJidWZfc3RyaW5nX2dldChkZXN0aW5hdGlvbl9wYXRoKSk7CisgICBlaW5hX3N0cmJ1Zl9mcmVl
KGRlc3RpbmF0aW9uX3BhdGgpOworICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc2F2ZV9maWxlX3Bh
dGgpOworfQorCitzdGF0aWMgdm9pZCBfZmlsZXBpY2tlcl9wYXJlbnRfZGVsZXRpb25fY2Iodm9p
ZCAqdXNlcl9kYXRhLCBFdmFzICpldmFzLCBFdmFzX09iamVjdCAqZWxtX3dpbmRvdywgdm9pZCAq
ZXZlbnQpOworCitzdGF0aWMgdm9pZCBjbG9zZV9maWxlX3BpY2tlcihGaWxlX1NlbGVjdG9yX0Rh
dGEgKmZzX2RhdGEpCit7CisgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwoZnNfZGF0
YS0+cGFyZW50LT5lbG1fd2luZG93LCBFVkFTX0NBTExCQUNLX0RFTCwgX2ZpbGVwaWNrZXJfcGFy
ZW50X2RlbGV0aW9uX2NiKTsKKyAgIGV2YXNfb2JqZWN0X2RlbChmc19kYXRhLT5lbG1fd2luZG93
KTsKKyAgIGV3a19vYmplY3RfdW5yZWYoZnNfZGF0YS0+cmVxdWVzdCk7CisgICBmcmVlKGZzX2Rh
dGEpOworfQorCitzdGF0aWMgdm9pZAorX2ZpbGVwaWNrZXJfcGFyZW50X2RlbGV0aW9uX2NiKHZv
aWQgKnVzZXJfZGF0YSwgRXZhcyAqZXZhcywgRXZhc19PYmplY3QgKmVsbV93aW5kb3csIHZvaWQg
KmV2ZW50KQoreworICAgY2xvc2VfZmlsZV9waWNrZXIoKEZpbGVfU2VsZWN0b3JfRGF0YSAqKXVz
ZXJfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCitfZmlsZXBpY2tlcl9kZWxldGlvbl9jYih2b2lk
ICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICplbG1fd2luZG93LCB2b2lkICpldmVudF9pbmZvKQor
eworICAgY2xvc2VfZmlsZV9waWNrZXIoKEZpbGVfU2VsZWN0b3JfRGF0YSAqKXVzZXJfZGF0YSk7
Cit9CisKK3N0YXRpYyB2b2lkCitfZmlsZXNlbGVjdG9yX2RvbmVfY2Iodm9pZCAqdXNlcl9kYXRh
LCBFdmFzX09iamVjdCAqZmlsZV9zZWxlY3Rvciwgdm9pZCAqZXZlbnRfaW5mbykKK3sKKyAgIEZp
bGVfU2VsZWN0b3JfRGF0YSAqZnNfZGF0YSA9IChGaWxlX1NlbGVjdG9yX0RhdGEgKil1c2VyX2Rh
dGE7CisKKyAgIGNvbnN0IGNoYXIgKnNlbGVjdGVkID0gKGNvbnN0IGNoYXIgKilldmVudF9pbmZv
OworICAgaWYgKHNlbGVjdGVkICYmICpzZWxlY3RlZCkKKyAgICAgZXdrX2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2ZpbGVfY2hvb3NlKGZzX2RhdGEtPnJlcXVlc3QsIHNlbGVjdGVkKTsKKworICAgY2xv
c2VfZmlsZV9waWNrZXIoZnNfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCitfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQg
KmV2ZW50X2luZm8pCit7CisgICBFdmFzX09iamVjdCAqYmc7CisgICBCcm93c2VyX1dpbmRvdyAq
d2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworICAgRXdrX0ZpbGVfQ2hvb3Nl
cl9SZXF1ZXN0ICpyZXF1ZXN0ID0gKEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCAqKWV2ZW50X2lu
Zm87CisKKyAgIC8vIFNob3cgYmFzaWMgZmlsZSBwaWNrZXIgd2hpY2ggZG9lcyBub3QgY3VycmVu
dGx5IHN1cHBvcnQgbXVsdGlwbGUgZmlsZXMKKyAgIC8vIG9yIE1JTUUgdHlwZSBmaWx0ZXJpbmcu
CisgICBFdmFzX09iamVjdCAqZWxtX3dpbmRvdyA9IGVsbV93aW5fYWRkKHdpbmRvdy0+ZWxtX3dp
bmRvdywgImZpbGUtcGlja2VyLXdpbmRvdyIsIEVMTV9XSU5fRElBTE9HX0JBU0lDKTsKKyAgIGVs
bV93aW5fdGl0bGVfc2V0KGVsbV93aW5kb3csICJGaWxlIHBpY2tlciIpOworICAgZWxtX3dpbl9t
b2RhbF9zZXQoZWxtX3dpbmRvdywgRUlOQV9UUlVFKTsKKworICAgYmcgPSBlbG1fYmdfYWRkKGVs
bV93aW5kb3cpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQoYmcsIEVWQVNf
SElOVF9FWFBBTkQsIEVWQVNfSElOVF9FWFBBTkQpOworICAgZWxtX3dpbl9yZXNpemVfb2JqZWN0
X2FkZChlbG1fd2luZG93LCBiZyk7CisgICBldmFzX29iamVjdF9zaG93KGJnKTsKKworICAgRmls
ZV9TZWxlY3Rvcl9EYXRhICpmc19kYXRhID0gKEZpbGVfU2VsZWN0b3JfRGF0YSAqKW1hbGxvYyhz
aXplb2YoRmlsZV9TZWxlY3Rvcl9EYXRhKSk7CisgICBmc19kYXRhLT5wYXJlbnQgPSB3aW5kb3c7
CisgICBmc19kYXRhLT5lbG1fd2luZG93ID0gZWxtX3dpbmRvdzsKKyAgIGZzX2RhdGEtPnJlcXVl
c3QgPSBld2tfb2JqZWN0X3JlZihyZXF1ZXN0KTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2FkZChlbG1fd2luZG93LCAiZGVsZXRlLHJlcXVlc3QiLCBfZmlsZXBpY2tlcl9kZWxldGlv
bl9jYiwgZnNfZGF0YSk7CisgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQod2luZG93
LT5lbG1fd2luZG93LCBFVkFTX0NBTExCQUNLX0RFTCwgX2ZpbGVwaWNrZXJfcGFyZW50X2RlbGV0
aW9uX2NiLCBmc19kYXRhKTsKKworICAgRXZhc19PYmplY3QgKmZpbGVfc2VsZWN0b3IgPSBlbG1f
ZmlsZXNlbGVjdG9yX2FkZChlbG1fd2luZG93KTsKKyAgIGNvbnN0IGNoYXIgKmhvbWVfcGF0aCA9
IGdldGVudigiSE9NRSIpOworICAgZWxtX2ZpbGVzZWxlY3Rvcl9wYXRoX3NldChmaWxlX3NlbGVj
dG9yLCBob21lX3BhdGggPyBob21lX3BhdGggOiAiL2hvbWUiKTsKKyAgIGV2YXNfb2JqZWN0X3Np
emVfaGludF93ZWlnaHRfc2V0KGZpbGVfc2VsZWN0b3IsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNf
SElOVF9FWFBBTkQpOworICAgZWxtX3dpbl9yZXNpemVfb2JqZWN0X2FkZChlbG1fd2luZG93LCBm
aWxlX3NlbGVjdG9yKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coZmlsZV9zZWxlY3Rvcik7CisKKyAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChmaWxlX3NlbGVjdG9yLCAiZG9uZSIsIF9m
aWxlc2VsZWN0b3JfZG9uZV9jYiwgZnNfZGF0YSk7CisKKyAgIGludCB4LCB5LCB3aWR0aCwgaGVp
Z2h0OworICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHdpbmRvdy0+ZWxtX3dpbmRvdywgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQpOworCisgICBpbnQgcGlja2VyX3ggPSB4ICsgd2lkdGggLyAy
IC0gY29sb3JfcGlja2VyX3dpZHRoIC8gMjsKKyAgIGludCBwaWNrZXJfeSA9IHkgKyBoZWlnaHQg
LyAyIC0gY29sb3JfcGlja2VyX2hlaWdodCAvIDI7CisgICBldmFzX29iamVjdF9nZW9tZXRyeV9z
ZXQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93LCBwaWNrZXJfeCwg
cGlja2VyX3ksCisgICAgIGNvbG9yX3BpY2tlcl93aWR0aCwgY29sb3JfcGlja2VyX2hlaWdodCk7
Cit9CisKK3N0YXRpYyB2b2lkCitfZG93bmxvYWRfZmluaXNoZWRfY2IoRXdrX0Rvd25sb2FkX0pv
YiAqZG93bmxvYWQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgIElORk8oIkRvd25sb2FkIGZpbmlz
aGVkOiAlcyIsICBld2tfZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9uX2dldChkb3dubG9hZCkpOwor
fQorCitzdGF0aWMgdm9pZAorX2Rvd25sb2FkX2ZhaWxlZF9jYihFd2tfRG93bmxvYWRfSm9iX0Vy
cm9yICpkb3dubG9hZF9lcnJvciwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgRXdrX0Vycm9yICpl
cnJvciA9IGRvd25sb2FkX2Vycm9yLT5lcnJvcjsKKworICAgSU5GTygiRG93bmxvYWQgZmFpbGVk
ISBFcnJvciBjb2RlOiAlZCwgRXJyb3IgZGVzY3JpcHRpb246ICVzLCBFcnJvciBVUkw6ICVzIiwg
ZXdrX2Vycm9yX2NvZGVfZ2V0KGVycm9yKSwgZXdrX2Vycm9yX2Rlc2NyaXB0aW9uX2dldChlcnJv
ciksIGV3a19lcnJvcl91cmxfZ2V0KGVycm9yKSk7Cit9CisKK3N0YXRpYyB2b2lkCitfY29sb3Jf
Y2hhbmdlZF9jYih2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9pbmZv
KQoreworICAgaW50IHIsIGcsIGIsIGE7CisKKyAgIGVsbV9jb2xvcnNlbGVjdG9yX2NvbG9yX2dl
dChvYmosICZyLCAmZywgJmIsICZhKTsKKyAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChkYXRhLCBy
LCBnLCBiLCBhKTsKK30KKworc3RhdGljIHZvaWQKK19jb2xvcl9pdGVtX3NlbGVjdGVkX2NiKHZv
aWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICBpbnQg
ciwgZywgYiwgYTsKKyAgIEVsbV9PYmplY3RfSXRlbSAqY29sb3JfaXRlbSA9IChFbG1fT2JqZWN0
X0l0ZW0gKilldmVudF9pbmZvOworCisgICBlbG1fY29sb3JzZWxlY3Rvcl9wYWxldHRlX2l0ZW1f
Y29sb3JfZ2V0KGNvbG9yX2l0ZW0sICZyLCAmZywgJmIsICZhKTsKKyAgIGV2YXNfb2JqZWN0X2Nv
bG9yX3NldChkYXRhLCByLCBnLCBiLCBhKTsKK30KKworc3RhdGljIHZvaWQKK19jb2xvcl9waWNr
ZXJfb2tfY2xpY2tlZF9jYih2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVu
dF9pbmZvKQoreworICAgaW50IHIsIGcsIGIsIGE7CisgICBDb2xvcl9TZWxlY3RvciAqY29sb3Jf
c2VsZWN0b3IgPSAoQ29sb3JfU2VsZWN0b3IgKilkYXRhOworCisgICBlbG1fY29sb3JzZWxlY3Rv
cl9jb2xvcl9nZXQoY29sb3Jfc2VsZWN0b3ItPmVsbV9zZWxlY3RvciwgJnIsICZnLCAmYiwgJmEp
OworICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xvcl9zZXQoY29sb3Jfc2VsZWN0b3ItPmV3a19waWNr
ZXIsIHIsIGcsIGIsIGEpOworfQorCitzdGF0aWMgdm9pZAorX2NvbG9yX3BpY2tlcl9jYW5jZWxf
Y2xpY2tlZF9jYih2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9pbmZv
KQoreworICAgaW50IHIsIGcsIGIsIGE7CisKKyAgIGV3a19jb2xvcl9waWNrZXJfY29sb3JfZ2V0
KGRhdGEsICZyLCAmZywgJmIsICZhKTsKKyAgIGV3a19jb2xvcl9waWNrZXJfY29sb3Jfc2V0KGRh
dGEsIHIsIGcsIGIsIGEpOworfQorCitzdGF0aWMgRWluYV9Cb29sCitfY29sb3JfcGlja2VyX2Rp
c21pc3NfY2IoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCit7CisgICBCcm93c2VyX1dpbmRvdyAq
d2luZG93ID0gd2luZG93X2ZpbmRfd2l0aF9ld2tfdmlldyhzZC0+c2VsZik7CisKKyAgIGV2YXNf
b2JqZWN0X2RlbCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpOwor
ICAgd2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93ID0gTlVMTDsKKwor
ICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGljIEVpbmFfQm9vbAorX2NvbG9yX3BpY2tl
cl9yZXF1ZXN0X2NiKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFd2tfQ29sb3JfUGlja2VyICpj
b2xvcl9waWNrZXIpCit7CisgICBpbnQgciwgZywgYiwgYTsKKyAgIEV2YXNfT2JqZWN0ICpiYWNr
Z3JvdW5kLCAqcmVjdCwgKmJveCwgKmJ1dHRvbl9ib3gsICpyZWN0X2ZyYW1lLCAqY3NfZnJhbWUs
ICpva19idXR0b24sICpjYW5jZWxfYnV0dG9uOworCisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93
ID0gd2luZG93X2ZpbmRfd2l0aF9ld2tfdmlldyhzZC0+c2VsZik7CisgICB3aW5kb3ctPmNvbG9y
X3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cgPSBlbG1fd2luX2FkZCh3aW5kb3ctPmVsbV93
aW5kb3csICJjb2xvciBzZWxlY3RvciIsIEVMTV9XSU5fQkFTSUMpOworICAgd2luZG93LT5jb2xv
cl9zZWxlY3Rvci5ld2tfcGlja2VyID0gY29sb3JfcGlja2VyOworCisgICBlbG1fd2luX3RpdGxl
X3NldCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csICJDb2xvciBz
ZWxlY3RvciIpOworCisgICAvKiBTaG93IGNvbG9yIHZpZXcgKi8KKyAgIGJhY2tncm91bmQgPSBl
bG1fYmdfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7Cisg
ICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChiYWNrZ3JvdW5kLCBFVkFTX0hJTlRf
RVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAgIGVsbV93aW5fcmVzaXplX29iamVjdF9hZGQo
d2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93LCBiYWNrZ3JvdW5kKTsK
KyAgIGV2YXNfb2JqZWN0X3Nob3coYmFja2dyb3VuZCk7CisKKyAgIGJveCA9IGVsbV9ib3hfYWRk
KHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7CisgICBldmFzX29i
amVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChib3gsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElO
VF9FWFBBTkQpOworICAgZWxtX3dpbl9yZXNpemVfb2JqZWN0X2FkZCh3aW5kb3ctPmNvbG9yX3Nl
bGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csIGJveCk7CisgICBldmFzX29iamVjdF9zaG93KGJv
eCk7CisKKyAgIHJlY3RfZnJhbWUgPSBlbG1fZnJhbWVfYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0
b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0
X3NldChyZWN0X2ZyYW1lLCBFVkFTX0hJTlRfRVhQQU5ELCAwLjMpOworICAgZXZhc19vYmplY3Rf
c2l6ZV9oaW50X2FsaWduX3NldChyZWN0X2ZyYW1lLCBFVkFTX0hJTlRfRklMTCwgRVZBU19ISU5U
X0ZJTEwpOworICAgZWxtX29iamVjdF90ZXh0X3NldChyZWN0X2ZyYW1lLCAiQ29sb3IgVmlldyIp
OworICAgZWxtX2JveF9wYWNrX2VuZChib3gsIHJlY3RfZnJhbWUpOworICAgZXZhc19vYmplY3Rf
c2hvdyhyZWN0X2ZyYW1lKTsKKworICAgcmVjdCA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQo
ZXZhc19vYmplY3RfZXZhc19nZXQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jf
d2luZG93KSk7CisgICBlbG1fb2JqZWN0X2NvbnRlbnRfc2V0KHJlY3RfZnJhbWUsIHJlY3QpOwor
ICAgZXdrX2NvbG9yX3BpY2tlcl9jb2xvcl9nZXQod2luZG93LT5jb2xvcl9zZWxlY3Rvci5ld2tf
cGlja2VyLCAmciwgJmcsICZiLCAmYSk7CisgICBldmFzX29iamVjdF9jb2xvcl9zZXQocmVjdCwg
ciwgZywgYiwgYSk7CisgICBldmFzX29iamVjdF9zaG93KHJlY3QpOworCisgICAvKiBTaG93IGNv
bG9yIHNlbGVjdG9yICovCisgICBjc19mcmFtZSA9IGVsbV9mcmFtZV9hZGQod2luZG93LT5jb2xv
cl9zZWxlY3Rvci5lbG1fc2VsZWN0b3Jfd2luZG93KTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGlu
dF93ZWlnaHRfc2V0KGNzX2ZyYW1lLCBFVkFTX0hJTlRfRVhQQU5ELCAwLjcpOworICAgZXZhc19v
YmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldChjc19mcmFtZSwgRVZBU19ISU5UX0ZJTEwsIEVWQVNf
SElOVF9GSUxMKTsKKyAgIGVsbV9vYmplY3RfdGV4dF9zZXQoY3NfZnJhbWUsICJDb2xvciBTZWxl
Y3RvciIpOworICAgZWxtX2JveF9wYWNrX2VuZChib3gsIGNzX2ZyYW1lKTsKKyAgIGV2YXNfb2Jq
ZWN0X3Nob3coY3NfZnJhbWUpOworCisgICB3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxl
Y3RvciA9IGVsbV9jb2xvcnNlbGVjdG9yX2FkZCh3aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9z
ZWxlY3Rvcl93aW5kb3cpOworICAgZWxtX29iamVjdF9jb250ZW50X3NldChjc19mcmFtZSwgd2lu
ZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3IpOworICAgZXZhc19vYmplY3Rfc2hvdyh3
aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcik7CisKKyAgIC8qIE9LLCBDYW5jZWwg
QnV0dG9ucyAqLworICAgYnV0dG9uX2JveCA9IGVsbV9ib3hfYWRkKHdpbmRvdy0+Y29sb3Jfc2Vs
ZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7CisgICBlbG1fYm94X2hvcml6b250YWxfc2V0KGJ1
dHRvbl9ib3gsIEVJTkFfVFJVRSk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfbWluX3NldChi
dXR0b25fYm94LCAyMDAsIDUwKTsKKyAgIGVsbV9ib3hfcGFja19lbmQoYm94LCBidXR0b25fYm94
KTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coYnV0dG9uX2JveCk7CisKKyAgIG9rX2J1dHRvbiA9IGVs
bV9idXR0b25fYWRkKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdyk7
CisgICBlbG1fb2JqZWN0X3RleHRfc2V0KG9rX2J1dHRvbiwgIk9LIik7CisgICBlbG1fYm94X3Bh
Y2tfZW5kKGJ1dHRvbl9ib3gsIG9rX2J1dHRvbik7CisgICBldmFzX29iamVjdF9zaG93KG9rX2J1
dHRvbik7CisKKyAgIGNhbmNlbF9idXR0b24gPSBlbG1fYnV0dG9uX2FkZCh3aW5kb3ctPmNvbG9y
X3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpOworICAgZWxtX29iamVjdF90ZXh0X3NldChj
YW5jZWxfYnV0dG9uLCAiQ2FuY2VsIik7CisgICBlbG1fYm94X3BhY2tfZW5kKGJ1dHRvbl9ib3gs
IGNhbmNlbF9idXR0b24pOworICAgZXZhc19vYmplY3Rfc2hvdyhjYW5jZWxfYnV0dG9uKTsKKwor
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG9rX2J1dHRvbiwgImNsaWNrZWQiLCBf
Y29sb3JfcGlja2VyX29rX2NsaWNrZWRfY2IsICYod2luZG93LT5jb2xvcl9zZWxlY3RvcikpOwor
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGNhbmNlbF9idXR0b24sICJjbGlja2Vk
IiwgX2NvbG9yX3BpY2tlcl9jYW5jZWxfY2xpY2tlZF9jYiwKKyAgICAgd2luZG93LT5jb2xvcl9z
ZWxlY3Rvci5ld2tfcGlja2VyKTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3
aW5kb3ctPmNvbG9yX3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3csICJkZWxldGUscmVxdWVz
dCIsCisgICAgIF9jb2xvcl9waWNrZXJfY2FuY2VsX2NsaWNrZWRfY2IsIHdpbmRvdy0+Y29sb3Jf
c2VsZWN0b3IuZXdrX3BpY2tlcik7CisgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQo
d2luZG93LT5jb2xvcl9zZWxlY3Rvci5lbG1fc2VsZWN0b3IsICJjaGFuZ2VkIiwgX2NvbG9yX2No
YW5nZWRfY2IsIHJlY3QpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRv
dy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yLCAiY29sb3IsaXRlbSxzZWxlY3RlZCIsIF9j
b2xvcl9pdGVtX3NlbGVjdGVkX2NiLAorICAgICByZWN0KTsKKworICAgaW50IHgsIHksIHdpZHRo
LCBoZWlnaHQ7CisgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQod2luZG93LT5lbG1fd2luZG93
LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgIGVsbV93aW5fY2VudGVyKHdpbmRvdy0+
Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVjdG9yX3dpbmRvdywgRUlOQV9UUlVFLCBFSU5BX1RSVUUp
OworICAgZXZhc19vYmplY3RfcmVzaXplKHdpbmRvdy0+Y29sb3Jfc2VsZWN0b3IuZWxtX3NlbGVj
dG9yX3dpbmRvdywgMzUwLCA1MDApOworICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPmNvbG9y
X3NlbGVjdG9yLmVsbV9zZWxlY3Rvcl93aW5kb3cpOworCisgICByZXR1cm4gRUlOQV9UUlVFOwor
fQorCitzdGF0aWMgaW50CitxdWl0KEVpbmFfQm9vbCBzdWNjZXNzLCBjb25zdCBjaGFyICptc2cp
Cit7CisgICBpZiAobXNnKQorICAgICBzdWNjZXNzID8gSU5GTygiJXMiLCBtc2cpIDogRVJST1Io
IiVzIiwgbXNnKTsKKworICAgZXdrX29iamVjdF91bnJlZihjb25maWd1cmF0aW9uKCkpOworICAg
ZXdrX3NodXRkb3duKCk7CisgICBlbG1fc2h1dGRvd24oKTsKKyAgIGVpbmFfbG9nX2RvbWFpbl91
bnJlZ2lzdGVyKF9sb2dfZG9tYWluX2lkKTsKKworICAgaWYgKCFzdWNjZXNzKQorICAgICByZXR1
cm4gRVhJVF9GQUlMVVJFOworCisgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitzdGF0aWMg
RWluYV9Cb29sCitoYXNfc2NoZW1lKGNvbnN0IGNoYXIgKnVybCkKK3sKKyAgIHJldHVybiAhIXN0
cnN0cih1cmwsICI6Ly8iKTsKK30KKworc3RhdGljIGNoYXIgKgordXJsX2Zyb21fdXNlcl9pbnB1
dChjb25zdCBjaGFyICphcmcpCit7CisgICAvKiBJZiBpdCBpcyBhbHJlYWR5IGEgVVJMLCByZXR1
cm4gdGhlIGFyZ3VtZW50IGFzIGlzLiAqLworICAgaWYgKGhhc19zY2hlbWUoYXJnKSB8fCBlaW5h
X3N0cl9oYXNfcHJlZml4KGFyZywgSkFWQVNDUklQVF9TQ0hFTUUpIHx8ICFzdHJjYXNlY21wKGFy
ZywgImFib3V0OmJsYW5rIikpCisgICAgIHJldHVybiBzdHJkdXAoYXJnKTsKKworICAgRWluYV9T
dHJidWYgKmJ1ZiA9IGVpbmFfc3RyYnVmX21hbmFnZV9uZXcoZWluYV9maWxlX3BhdGhfc2FuaXRp
emUoYXJnKSk7CisKKyAgIC8qIENoZWNrIGlmIHRoZSBwYXRoIGV4aXN0cy4gKi8KKyAgIGlmIChl
Y29yZV9maWxlX2V4aXN0cyhlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGJ1ZikpKSB7CisgICAgIC8q
IEZpbGUgZXhpc3RzLCBjb252ZXJ0IGxvY2FsIHBhdGggdG8gYSBVUkwuICovCisgICAgIGVpbmFf
c3RyYnVmX3ByZXBlbmQoYnVmLCBGSUxFX1NDSEVNRSk7CisgICB9IGVsc2UgeworICAgICAvKiBU
aGUgcGF0aCBkb2VzIG5vdCBleGlzdCwgY29udmVydCBpdCB0byBhIFVSTCBieQorICAgICAgICBw
cmVwZW5kaW5nIGh0dHA6Ly8gc2NoZW1lOgorICAgICAgICB3d3cuZ29vZ2xlLmNvbSAtPiBodHRw
Oi8vd3d3Lmdvb2dsZS5jb20gKi8KKyAgICAgZWluYV9zdHJidWZfc3RyaW5nX2ZyZWUoYnVmKTsK
KyAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50ZihidWYsICIlcyVzIiwgSFRUUF9TQ0hFTUUs
IGFyZyk7CisgICB9CisgICBjaGFyICp1cmwgPSBlaW5hX3N0cmJ1Zl9zdHJpbmdfc3RlYWwoYnVm
KTsKKyAgIGVpbmFfc3RyYnVmX2ZyZWUoYnVmKTsKKworICAgcmV0dXJuIHVybDsKK30KKworc3Rh
dGljIEVpbmFfQm9vbAordXJsX2xvYWRfZnJvbV91c2VyX2lucHV0KEV2YXNfT2JqZWN0ICpld2tf
dmlldywgY29uc3QgY2hhciAqdXJsKQoreworICAgaWYgKCFld2tfdmlldyB8fCAhdXJsKQorICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKKworICAgaWYgKGVpbmFfc3RyX2hhc19wcmVmaXgodXJsLCBK
QVZBU0NSSVBUX1NDSEVNRSkpCisgICAgIHJldHVybiBld2tfdmlld19zY3JpcHRfZXhlY3V0ZShl
d2tfdmlldywgc3Ryc3RyKHVybCwgSkFWQVNDUklQVF9TQ0hFTUUpLCAwLCAwKTsKKworICAgcmV0
dXJuIGV3a192aWV3X3VybF9zZXQoZXdrX3ZpZXcsIHVybCk7Cit9CisKK3N0YXRpYyB2b2lkCitf
dXJsX2Jhcl9hY3RpdmF0ZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqdXJsX2Jh
ciwgdm9pZCAqZXZlbnRfaW5mbykKK3sKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJv
d3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisKKyAgIGNvbnN0IGNoYXIgKm1hcmt1cF91cmwgPSBl
bG1fZW50cnlfZW50cnlfZ2V0KHVybF9iYXIpOworICAgY2hhciAqdXNlcl91cmwgPSBlbG1fZW50
cnlfbWFya3VwX3RvX3V0ZjgobWFya3VwX3VybCk7CisgICBjaGFyICp1cmwgPSB1cmxfZnJvbV91
c2VyX2lucHV0KHVzZXJfdXJsKTsKKyAgIHVybF9sb2FkX2Zyb21fdXNlcl9pbnB1dCh3aW5kb3ct
PmV3a192aWV3LCB1cmwpOworCisgICBmcmVlKHVzZXJfdXJsKTsKKyAgIGZyZWUodXJsKTsKKwor
ICAgLyogR2l2ZSBmb2N1cyBiYWNrIHRvIHRoZSB2aWV3ICovCisgICB2aWV3X2ZvY3VzX3NldCh3
aW5kb3csIEVJTkFfVFJVRSk7Cit9CisKK3N0YXRpYyB2b2lkCitfdXJsX2Jhcl9jbGlja2VkX2Ni
KHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKnVybF9iYXIsIHZvaWQgKmV2ZW50X2luZm8p
Cit7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9k
YXRhOworCisgICAvKiBHcmFiIGZvY3VzIGZyb20gdGhlIHZpZXcgKi8KKyAgIGV2YXNfb2JqZWN0
X2ZvY3VzX3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5BX0ZBTFNFKTsKKyAgIGVsbV9vYmplY3Rf
Zm9jdXNfc2V0KHVybF9iYXIsIEVJTkFfVFJVRSk7Cit9CisKK3N0YXRpYyB2b2lkCitfc2VhcmNo
X2ZpZWxkX2Fib3J0ZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqc2VhcmNoX2Zp
ZWxkLCB2b2lkICpldmVudF9pbmZvKQoreworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChC
cm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIHNlYXJjaF9ib3hfaGlkZSh3aW5kb3cpOwor
CisgICAvKiBHaXZlIGZvY3VzIGJhY2sgdG8gdGhlIHZpZXcgKi8KKyAgIHZpZXdfZm9jdXNfc2V0
KHdpbmRvdywgRUlOQV9UUlVFKTsKK30KKworc3RhdGljIHZvaWQKK19zZWFyY2hfZmllbGRfYWN0
aXZhdGVkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKnNlYXJjaF9maWVsZCwgdm9p
ZCAqZXZlbnRfaW5mbykKK3sKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9X
aW5kb3cgKil1c2VyX2RhdGE7CisKKyAgIGNvbnN0IGNoYXIgKm1hcmt1cF90ZXh0ID0gZWxtX2Vu
dHJ5X2VudHJ5X2dldChzZWFyY2hfZmllbGQpOworICAgY2hhciAqdGV4dCA9IGVsbV9lbnRyeV9t
YXJrdXBfdG9fdXRmOChtYXJrdXBfdGV4dCk7CisgICBld2tfdmlld190ZXh0X2ZpbmQod2luZG93
LT5ld2tfdmlldywgdGV4dCwgc2VhcmNoX2ZsYWdzLCBNQVhfU0VBUkNIX0NPVU5UKTsKKyAgIGZy
ZWUodGV4dCk7CisKKyAgIC8qIEdyYWIgZm9jdXMgZnJvbSB0aGUgdmlldyAqLworICAgZXZhc19v
YmplY3RfZm9jdXNfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIEVJTkFfRkFMU0UpOworICAgZWxtX29i
amVjdF9mb2N1c19zZXQoc2VhcmNoX2ZpZWxkLCBFSU5BX1RSVUUpOworfQorCitzdGF0aWMgdm9p
ZAorX3NlYXJjaF9maWVsZF9jbGlja2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3Qg
KnNlYXJjaF9maWVsZCwgdm9pZCAqZXZlbnRfaW5mbykKK3sKKyAgIEJyb3dzZXJfV2luZG93ICp3
aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisKKyAgIC8qIEdyYWIgZm9jdXMg
ZnJvbSB0aGUgdmlldyAqLworICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHdpbmRvdy0+ZXdrX3Zp
ZXcsIEVJTkFfRkFMU0UpOworICAgZWxtX29iamVjdF9mb2N1c19zZXQoc2VhcmNoX2ZpZWxkLCBF
SU5BX1RSVUUpOworfQorCitzdGF0aWMgdm9pZAorX2JhY2tfYnV0dG9uX2NsaWNrZWRfY2Iodm9p
ZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqYmFja19idXR0b24sIHZvaWQgKmV2ZW50X2luZm8p
Cit7CisgICBpZiAobG9uZ3ByZXNzX2VuYWJsZWQpCisgICAgIHJldHVybjsKKworICAgQnJvd3Nl
cl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKworICAgZXdr
X3ZpZXdfYmFjayh3aW5kb3ctPmV3a192aWV3KTsKKyAgIC8qIFVwZGF0ZSBiYWNrIGJ1dHRvbiBz
dGF0ZSAqLworICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQoYmFja19idXR0b24sICFld2tfdmll
d19iYWNrX3Bvc3NpYmxlKHdpbmRvdy0+ZXdrX3ZpZXcpKTsKK30KKworc3RhdGljIHZvaWQKK19m
b3J3YXJkX2J1dHRvbl9jbGlja2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmZv
cndhcmRfYnV0dG9uLCB2b2lkICpldmVudF9pbmZvKQoreworICAgaWYgKGxvbmdwcmVzc19lbmFi
bGVkKQorICAgICByZXR1cm47CisKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nl
cl9XaW5kb3cgKil1c2VyX2RhdGE7CisKKyAgIGV3a192aWV3X2ZvcndhcmQod2luZG93LT5ld2tf
dmlldyk7CisgICAvKiBVcGRhdGUgZm9yd2FyZCBidXR0b24gc3RhdGUgKi8KKyAgIGVsbV9vYmpl
Y3RfZGlzYWJsZWRfc2V0KGZvcndhcmRfYnV0dG9uLCAhZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJs
ZSh3aW5kb3ctPmV3a192aWV3KSk7Cit9CisKK3N0YXRpYyB2b2lkCitfc2VhcmNoX2JhY2t3YXJk
X2J1dHRvbl9jbGlja2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKnNlYXJjaF9i
YWNrd2FyZF9idXR0b24sIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICBCcm93c2VyX1dpbmRvdyAq
d2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworCisgICBjaGFyICp0ZXh0ID0g
ZWxtX2VudHJ5X21hcmt1cF90b191dGY4KGVsbV9lbnRyeV9lbnRyeV9nZXQod2luZG93LT5zZWFy
Y2guc2VhcmNoX2ZpZWxkKSk7CisgICBld2tfdmlld190ZXh0X2ZpbmQod2luZG93LT5ld2tfdmll
dywgdGV4dCwgc2VhcmNoX2ZsYWdzIHwgRVdLX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMsIE1BWF9T
RUFSQ0hfQ09VTlQpOworICAgZnJlZSh0ZXh0KTsKK30KKworc3RhdGljIHZvaWQKK19zZWFyY2hf
Zm9yd2FyZF9idXR0b25fY2xpY2tlZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpz
ZWFyY2hfZm9yd2FyZF9idXR0b24sIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICBCcm93c2VyX1dp
bmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworCisgICBjaGFyICp0
ZXh0ID0gZWxtX2VudHJ5X21hcmt1cF90b191dGY4KGVsbV9lbnRyeV9lbnRyeV9nZXQod2luZG93
LT5zZWFyY2guc2VhcmNoX2ZpZWxkKSk7CisgICBld2tfdmlld190ZXh0X2ZpbmQod2luZG93LT5l
d2tfdmlldywgdGV4dCwgc2VhcmNoX2ZsYWdzLCBNQVhfU0VBUkNIX0NPVU5UKTsKKyAgIGZyZWUo
dGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkCitfc2VhcmNoX2Nhc2Vfb3B0aW9uX2NoYW5nZWQodm9p
ZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqc2VhcmNoX2Nhc2VfY2hlY2tfYm94LCB2b2lkICpl
dmVudF9pbmZvKQoreworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRv
dyAqKXVzZXJfZGF0YTsKKyAgIGNoYXIgKnRleHQgPSBlbG1fZW50cnlfbWFya3VwX3RvX3V0Zjgo
ZWxtX2VudHJ5X2VudHJ5X2dldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQpKTsKKworICAg
LyogQml0IHRvZ2dsZSB0aGUgY2FzZSBzZW5zaXRpdmUgZmxhZyAqLworICAgc2VhcmNoX2ZsYWdz
ID0gc2VhcmNoX2ZsYWdzIF4gRVdLX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFOworCisg
ICBld2tfdmlld190ZXh0X2ZpbmQod2luZG93LT5ld2tfdmlldywgdGV4dCwgc2VhcmNoX2ZsYWdz
LCBNQVhfU0VBUkNIX0NPVU5UKTsKKyAgIGZyZWUodGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkCitf
c2VhcmNoX3dvcmRfc3RhcnRfb3B0aW9uX2NoYW5nZWRfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFz
X09iamVjdCAqc2VhcmNoX3dvcmRfc3RhcnRfY2hlY2tfYm94LCB2b2lkICpldmVudF9pbmZvKQor
eworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0
YTsKKyAgIGNoYXIgKnRleHQgPSBlbG1fZW50cnlfbWFya3VwX3RvX3V0ZjgoZWxtX2VudHJ5X2Vu
dHJ5X2dldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQpKTsKKworICAgLyogQml0IHRvZ2ds
ZSB0aGUgd29yZCBzdGFydCBmbGFnICovCisgICBzZWFyY2hfZmxhZ3MgPSBzZWFyY2hfZmxhZ3Mg
XiBFV0tfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTOworCisgICBld2tfdmlld190ZXh0X2Zp
bmQod2luZG93LT5ld2tfdmlldywgdGV4dCwgc2VhcmNoX2ZsYWdzLCBNQVhfU0VBUkNIX0NPVU5U
KTsKKyAgIGZyZWUodGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkCitfc2VhcmNoX2Nsb3NlX2J1dHRv
bl9jbGlja2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKnNlYXJjaF9jbG9zZV9i
dXR0b24sIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0g
KEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworCisgICBzZWFyY2hfYm94X2hpZGUod2luZG93
KTsKK30KKworc3RhdGljIHZvaWQKK19yZWZyZXNoX2J1dHRvbl9jbGlja2VkX2NiKHZvaWQgKnVz
ZXJfZGF0YSwgRXZhc19PYmplY3QgKnJlZnJlc2hfYnV0dG9uLCB2b2lkICpldmVudF9pbmZvKQor
eworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0
YTsKKworICAgRXZhcyAqZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHJlZnJlc2hfYnV0dG9u
KTsKKyAgIEVpbmFfQm9vbCBjdHJsUHJlc3NlZCA9IGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChl
dmFzX2tleV9tb2RpZmllcl9nZXQoZXZhcyksICJDb250cm9sIik7CisgICBpZiAoY3RybFByZXNz
ZWQpIHsKKyAgICAgSU5GTygiUmVsb2FkaW5nIGFuZCBieXBhc3NpbmcgY2FjaGUuLi4iKTsKKyAg
ICAgZXdrX3ZpZXdfcmVsb2FkX2J5cGFzc19jYWNoZSh3aW5kb3ctPmV3a192aWV3KTsKKyAgIH0g
ZWxzZSB7CisgICAgIElORk8oIlJlbG9hZGluZy4uLiIpOworICAgICBld2tfdmlld19yZWxvYWQo
d2luZG93LT5ld2tfdmlldyk7CisgICB9Cit9CisKK3N0YXRpYyB2b2lkCitfc3RvcF9idXR0b25f
Y2xpY2tlZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpzdG9wX2J1dHRvbiwgdm9p
ZCAqZXZlbnRfaW5mbykKK3sKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9X
aW5kb3cgKil1c2VyX2RhdGE7CisKKyAgIElORk8oIlN0b3Agd2FzIFByZXNzZWQuIEFib3J0aW5n
IGxvYWQuLi4iKTsKKyAgIGV3a192aWV3X3N0b3Aod2luZG93LT5ld2tfdmlldyk7Cit9CisKK3N0
YXRpYyBjaGFyICoKK2xpc3RfaXRlbV9sYWJlbF9nZXQodm9pZCAqZGF0YSwgRXZhc19PYmplY3Qg
Km9iaiwgY29uc3QgY2hhciAqcGFydCkKK3sKKyAgIGludCBsZW4gPSBzdHJsZW4oKGNoYXIgKilk
YXRhKTsKKyAgIGNoYXIgKmJ1ZiA9IChjaGFyICopbWFsbG9jKHNpemVvZihjaGFyKSAqIChsZW4g
KyAxKSk7CisgICBzbnByaW50ZihidWYsIGxlbiArIDEsICIlcyIsIChjaGFyICopZGF0YSk7Cisg
ICByZXR1cm4gYnVmOworfQorCitzdGF0aWMgdm9pZAorX2xpc3RfaXRlbV9zZWxlY3RfY2Iodm9p
ZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9pbmZvKQoreworICAg
QnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IGV2YXNfb2JqZWN0X2RhdGFfZ2V0KG9iaiwgIkJyb3dz
ZXJfV2luZG93Iik7CisgICBld2tfdmlld19uYXZpZ2F0ZV90byh3aW5kb3ctPmV3a192aWV3LCB1
c2VyX2RhdGEpOworICAgaGlzdG9yeV9saXN0X2hpZGUod2luZG93KTsKKyAgIGV2YXNfb2JqZWN0
X2RhdGFfZGVsKG9iaiwgIkJyb3dzZXJfV2luZG93Iik7Cit9CisKK3N0YXRpYyB2b2lkCituYXZp
Z2F0aW9uX2J1dHRvbl9sb25ncHJlc3NfcHJvY2Vzcyh2b2lkICp1c2VyX2RhdGEsIEVpbmFfQm9v
bCBmb3J3YXJkX25hdmlnYXRpb25fZW5hYmxlZCkKK3sKKyAgIGlmIChsb25ncHJlc3NfZW5hYmxl
ZCkKKyAgICAgcmV0dXJuOworCisgICBsb25ncHJlc3NfZW5hYmxlZCA9IEVJTkFfVFJVRTsKKyAg
IEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2VyX2RhdGE7CisK
KyAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCA9IGV3a192aWV3X2JhY2tfZm9yd2FyZF9s
aXN0X2dldCh3aW5kb3ctPmV3a192aWV3KTsKKyAgIGNvbnN0IEVpbmFfTGlzdCAqbDsKKyAgIHZv
aWQgKmRhdGE7CisgICBzdGF0aWMgRWxtX0dlbmxpc3RfSXRlbV9DbGFzcyAqbGlzdF9pdGVtID0g
TlVMTDsKKyAgIGNvbnN0IGNoYXIgKnRpdGxlID0gTlVMTDsKKyAgIGludCBpdGVtX2NvdW50Owor
ICAgaW50IHg7CisgICBpbnQgeTsKKyAgIGludCB3aWR0aDsKKyAgIGludCBoZWlnaHQ7CisgICBz
aXplX3QgaW5kZXg7CisKKyAgIGV2YXNfb2JqZWN0X2RhdGFfc2V0KHdpbmRvdy0+aGlzdG9yeS5o
aXN0b3J5X2xpc3QsICJCcm93c2VyX1dpbmRvdyIsIHdpbmRvdyk7CisKKyAgIGlmIChmb3J3YXJk
X25hdmlnYXRpb25fZW5hYmxlZCkKKyAgICAgd2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdF9p
dGVtcyA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2l0ZW1zX2NvcHkobGlzdCk7Cisg
ICBlbHNlCisgICAgIHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3RfaXRlbXMgPSBld2tfYmFj
a19mb3J3YXJkX2xpc3RfYmFja19pdGVtc19jb3B5KGxpc3QpOworCisgICBpZiAoIWxpc3RfaXRl
bSkgeworICAgICBsaXN0X2l0ZW0gPSBlbG1fZ2VubGlzdF9pdGVtX2NsYXNzX25ldygpOworICAg
ICBsaXN0X2l0ZW0tPml0ZW1fc3R5bGUgPSAiZGVmYXVsdCI7CisgICAgIGxpc3RfaXRlbS0+ZnVu
Yy50ZXh0X2dldCA9IGxpc3RfaXRlbV9sYWJlbF9nZXQ7CisgICAgIGxpc3RfaXRlbS0+ZnVuYy5j
b250ZW50X2dldCA9IE5VTEw7CisgICAgIGxpc3RfaXRlbS0+ZnVuYy5zdGF0ZV9nZXQgPSBOVUxM
OworICAgICBsaXN0X2l0ZW0tPmZ1bmMuZGVsID0gTlVMTDsKKyAgIH0KKworICAgaXRlbV9jb3Vu
dCA9IGVpbmFfbGlzdF9jb3VudCh3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0X2l0ZW1zKTsK
KyAgIElORk8oIm5hdmlnYXRpb25fYnV0dG9uX2xvbmdwcmVzc19wcm9jZXNzIDogSXRlbSBjb3Vu
dCA9ICVkIGZvcndhcmRfbmF2aWdhdGlvbl9lbmFibGVkID0gJWQiLCBpdGVtX2NvdW50LCBmb3J3
YXJkX25hdmlnYXRpb25fZW5hYmxlZCk7CisKKyAgIEVJTkFfTElTVF9GT1JFQUNIKHdpbmRvdy0+
aGlzdG9yeS5oaXN0b3J5X2xpc3RfaXRlbXMsIGwsIGRhdGEpIHsKKyAgICAgdGl0bGUgPSBld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRsZV9nZXQoZGF0YSk7CisgICAgIElORk8oIiB0aXRs
ZSA9ICVzIiwgdGl0bGUpOworICAgICBlbG1fZ2VubGlzdF9pdGVtX2FwcGVuZCh3aW5kb3ctPmhp
c3RvcnkuaGlzdG9yeV9saXN0LCBsaXN0X2l0ZW0sICh2b2lkICopKHRpdGxlKSwgTlVMTCwgRUxN
X0dFTkxJU1RfSVRFTV9OT05FLCBfbGlzdF9pdGVtX3NlbGVjdF9jYiwgZGF0YSk7CisgICB9CisK
KyAgIGlmIChpdGVtX2NvdW50ID4gMCkgeworICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQo
d2luZG93LT5lbG1fd2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgIGVsbV9s
aXN0X2dvKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QpOworICAgICBldmFzX29iamVjdF9y
ZXNpemUod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfYm94ICwgd2lkdGggLyAzICwgTElTVF9JVEVN
X0hFSUdIVCAqIGl0ZW1fY291bnQpOworCisgICAgIGlmIChmb3J3YXJkX25hdmlnYXRpb25fZW5h
YmxlZCkgeworICAgICAgIGV2YXNfb2JqZWN0X21vdmUod2luZG93LT5oaXN0b3J5Lmhpc3Rvcnlf
Ym94ICwgeCArIFRPT0xfQkFSX0JVVFRPTl9TSVpFICsgMSwgeSArIFRPT0xfQkFSX0JVVFRPTl9T
SVpFKTsKKyAgICAgICBldmFzX29iamVjdF9tb3ZlKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xp
c3QgLCB4ICsgVE9PTF9CQVJfQlVUVE9OX1NJWkUgKyAxLCB5ICsgVE9PTF9CQVJfQlVUVE9OX1NJ
WkUpOworICAgICB9IGVsc2UgeworICAgICAgIGV2YXNfb2JqZWN0X21vdmUod2luZG93LT5oaXN0
b3J5Lmhpc3RvcnlfYm94ICwgeCwgeSArIFRPT0xfQkFSX0JVVFRPTl9TSVpFKTsKKyAgICAgICBl
dmFzX29iamVjdF9tb3ZlKHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QgLCB4LCB5ICsgVE9P
TF9CQVJfQlVUVE9OX1NJWkUpOworICAgICB9CisKKyAgICAgZWxtX2dlbmxpc3RfbW9kZV9zZXQo
d2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCwgRUxNX0xJU1RfQ09NUFJFU1MpOworICAgICBl
dmFzX29iamVjdF9zaG93KHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2JveCk7CisgICAgIGV2YXNf
b2JqZWN0X3Nob3cod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCk7CisgICAgIGV2YXNfb2Jq
ZWN0X2ZvY3VzX3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5BX0ZBTFNFKTsKKyAgICAgZWxtX29i
amVjdF9mb2N1c19zZXQod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfbGlzdCwgRUlOQV9UUlVFKTsK
KyAgIH0gZWxzZQorICAgICBsb25ncHJlc3NfZW5hYmxlZCA9IEVJTkFfRkFMU0U7Cit9CisKK3N0
YXRpYyB2b2lkCitfZm9yd2FyZF9idXR0b25fbG9uZ3ByZXNzX2NiKHZvaWQgKnVzZXJfZGF0YSwg
RXZhc19PYmplY3QgKmZvcndhcmRfYnV0dG9uLCB2b2lkICpldmVudF9pbmZvKQoreworICAgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKworICAg
bmF2aWdhdGlvbl9idXR0b25fbG9uZ3ByZXNzX3Byb2Nlc3ModXNlcl9kYXRhLCBFSU5BX1RSVUUp
OworICAgZWxtX29iamVjdF9kaXNhYmxlZF9zZXQoZm9yd2FyZF9idXR0b24sICFld2tfdmlld19i
YWNrX3Bvc3NpYmxlKHdpbmRvdy0+ZXdrX3ZpZXcpKTsKK30KKworc3RhdGljIHZvaWQKK19iYWNr
X2J1dHRvbl9sb25ncHJlc3NfY2Iodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqYmFja19i
dXR0b24sIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0g
KEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOworCisgICBuYXZpZ2F0aW9uX2J1dHRvbl9sb25n
cHJlc3NfcHJvY2Vzcyh1c2VyX2RhdGEsIEVJTkFfRkFMU0UpOworICAgZWxtX29iamVjdF9kaXNh
YmxlZF9zZXQoYmFja19idXR0b24sICFld2tfdmlld19iYWNrX3Bvc3NpYmxlKHdpbmRvdy0+ZXdr
X3ZpZXcpKTsKK30KKworc3RhdGljIHZvaWQKK19va19jbGlja2VkX2NiKHZvaWQgKnVzZXJfZGF0
YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5mbykKK3sKKyAgIEVpbmFfQm9vbCAq
Y29uZmlybWVkID0gKEVpbmFfQm9vbCAqKXVzZXJfZGF0YTsKKyAgICpjb25maXJtZWQgPSBFSU5B
X1RSVUU7Cit9CisKK3N0YXRpYyBFaW5hX1N0cmluZ3NoYXJlICoKK19maWxlX2VudHJ5X2RpYWxv
Z19zaG93KEJyb3dzZXJfV2luZG93ICp3aW5kb3csIGNvbnN0IGNoYXIgKmxhYmVsX3RhZywgY29u
c3QgY2hhciAqZGVmYXVsdF90ZXh0KQoreworICAgRXZhc19PYmplY3QgKmZpbGVfcG9wdXAgPSBl
bG1fcG9wdXBfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7CisgICBldmFzX29iamVjdF9zaXplX2hp
bnRfd2VpZ2h0X3NldChmaWxlX3BvcHVwLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQ
QU5EKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coZmlsZV9wb3B1cCk7CisKKyAgIEV2YXNfT2JqZWN0
ICp2Ym94ID0gZWxtX2JveF9hZGQoZmlsZV9wb3B1cCk7CisgICBldmFzX29iamVjdF9zaXplX2hp
bnRfd2VpZ2h0X3NldCh2Ym94LCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsK
KyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQodmJveCwgRVZBU19ISU5UX0ZJTEws
IEVWQVNfSElOVF9GSUxMKTsKKyAgIGVsbV9vYmplY3RfY29udGVudF9zZXQoZmlsZV9wb3B1cCwg
dmJveCk7CisgICBldmFzX29iamVjdF9zaG93KHZib3gpOworCisgICBFdmFzX09iamVjdCAqbGFi
ZWwgPSBlbG1fbGFiZWxfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7CisgICBlbG1fb2JqZWN0X3Rl
eHRfc2V0KGxhYmVsLCBsYWJlbF90YWcpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdo
dF9zZXQobGFiZWwsIEVWQVNfSElOVF9FWFBBTkQsIDAuMCk7CisgICBldmFzX29iamVjdF9zaXpl
X2hpbnRfYWxpZ25fc2V0KGxhYmVsLCBFVkFTX0hJTlRfRklMTCwgMC41KTsKKyAgIGV2YXNfb2Jq
ZWN0X2NvbG9yX3NldChsYWJlbCwgMjMsIDQ1LCA2NywgMTQyKTsKKyAgIGVsbV9ib3hfcGFja19l
bmQodmJveCwgbGFiZWwpOworICAgZXZhc19vYmplY3Rfc2hvdyhsYWJlbCk7CisKKyAgIEV2YXNf
T2JqZWN0ICpmc19lbnRyeSA9IGVsbV9maWxlc2VsZWN0b3JfZW50cnlfYWRkKGZpbGVfcG9wdXAp
OworICAgZWxtX2ZpbGVzZWxlY3Rvcl9pc19zYXZlX3NldChmc19lbnRyeSwgRUlOQV9UUlVFKTsK
KyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQoZnNfZW50cnksIEVWQVNfSElOVF9G
SUxMLCAwKTsKKyAgIGVsbV9maWxlc2VsZWN0b3JfcGF0aF9zZXQoZnNfZW50cnksIGRlZmF1bHRf
dGV4dCk7CisgICBlbG1fb2JqZWN0X3RleHRfc2V0KGZzX2VudHJ5LCAiRmlsZUNob29zZXIiKTsK
KyAgIGVsbV9ib3hfcGFja19lbmQodmJveCwgZnNfZW50cnkpOworICAgZXZhc19vYmplY3Rfc2hv
dyhmc19lbnRyeSk7CisKKyAgIEV2YXNfT2JqZWN0ICpoYm94ID0gZWxtX2JveF9hZGQoZmlsZV9w
b3B1cCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChoYm94LCBFVkFTX0hJ
TlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAgIGVsbV9ib3hfaG9yaXpvbnRhbF9zZXQo
aGJveCwgRUlOQV9UUlVFKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQoaGJv
eCwgRVZBU19ISU5UX0ZJTEwsIEVWQVNfSElOVF9GSUxMKTsKKyAgIGVsbV9ib3hfcGFja19lbmQo
dmJveCwgaGJveCk7CisgICBldmFzX29iamVjdF9zaG93KGhib3gpOworCisgICBFaW5hX0Jvb2wg
b2sgPSBFSU5BX0ZBTFNFOworICAgRXZhc19PYmplY3QgKm9rX2J1dHRvbiA9IGVsbV9idXR0b25f
YWRkKGZpbGVfcG9wdXApOworICAgZWxtX29iamVjdF90ZXh0X3NldChva19idXR0b24sICJPSyIp
OworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG9rX2J1dHRvbiwgImNsaWNrZWQi
LCBfb2tfY2xpY2tlZF9jYiwgJm9rKTsKKyAgIGVsbV9ib3hfcGFja19lbmQoaGJveCwgb2tfYnV0
dG9uKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cob2tfYnV0dG9uKTsKKworICAgRWluYV9Cb29sIGNh
bmNlbCA9IEVJTkFfRkFMU0U7CisgICBFdmFzX09iamVjdCAqY2FuY2VsX2J1dHRvbiA9IGVsbV9i
dXR0b25fYWRkKGZpbGVfcG9wdXApOworICAgZWxtX29iamVjdF90ZXh0X3NldChjYW5jZWxfYnV0
dG9uLCAiQ2FuY2VsIik7CisgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoY2FuY2Vs
X2J1dHRvbiwgImNsaWNrZWQiLCBfb2tfY2xpY2tlZF9jYiwgJmNhbmNlbCk7CisgICBlbG1fYm94
X3BhY2tfZW5kKGhib3gsIGNhbmNlbF9idXR0b24pOworICAgZXZhc19vYmplY3Rfc2hvdyhjYW5j
ZWxfYnV0dG9uKTsKKworICAgd2hpbGUgKG9rICE9IEVJTkFfVFJVRSAmJiBjYW5jZWwgIT0gRUlO
QV9UUlVFKQorICAgIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7CisKKyAgIEVpbmFfU3RyaW5n
c2hhcmUgKmZpbGVfcGF0aCA9IG9rID8gZWluYV9zdHJpbmdzaGFyZV9hZGQoZWxtX2ZpbGVzZWxl
Y3Rvcl9wYXRoX2dldChmc19lbnRyeSkpIDogTlVMTDsKKyAgIGV2YXNfb2JqZWN0X2RlbChmaWxl
X3BvcHVwKTsKKyAgIHJldHVybiBmaWxlX3BhdGg7Cit9CisKK3N0YXRpYyB2b2lkCitfamF2YXNj
cmlwdF9hbGVydF9jYihFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEsIGNvbnN0IGNoYXIg
Km1lc3NhZ2UpCit7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2ZpbmRfd2l0
aF9ld2tfdmlldyhzbWFydERhdGEtPnNlbGYpOworCisgICBFdmFzX09iamVjdCAqYWxlcnRfcG9w
dXAgPSBlbG1fcG9wdXBfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7CisgICBldmFzX29iamVjdF9z
aXplX2hpbnRfd2VpZ2h0X3NldChhbGVydF9wb3B1cCwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19I
SU5UX0VYUEFORCk7CisgICBlbG1fb2JqZWN0X3RleHRfc2V0KGFsZXJ0X3BvcHVwLCBtZXNzYWdl
KTsKKyAgIGVsbV9vYmplY3RfcGFydF90ZXh0X3NldChhbGVydF9wb3B1cCwgInRpdGxlLHRleHQi
LCAiQWxlcnQiKTsKKworICAgLyogUG9wdXAgYnV0dG9ucyAqLworICAgRWluYV9Cb29sIG9rID0g
RUlOQV9GQUxTRTsKKyAgIEV2YXNfT2JqZWN0ICpidXR0b24gPSBlbG1fYnV0dG9uX2FkZChhbGVy
dF9wb3B1cCk7CisgICBlbG1fb2JqZWN0X3RleHRfc2V0KGJ1dHRvbiwgIk9LIik7CisgICBlbG1f
b2JqZWN0X3BhcnRfY29udGVudF9zZXQoYWxlcnRfcG9wdXAsICJidXR0b24xIiwgYnV0dG9uKTsK
KyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChidXR0b24sICJjbGlja2VkIiwgX29r
X2NsaWNrZWRfY2IsICZvayk7CisgICBlbG1fb2JqZWN0X2ZvY3VzX3NldChidXR0b24sIEVJTkFf
VFJVRSk7CisgICBldmFzX29iamVjdF9zaG93KGFsZXJ0X3BvcHVwKTsKKworICAgd2hpbGUgKG9r
ICE9IEVJTkFfVFJVRSkKKyAgICAgIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7CisKKyAgIGV2
YXNfb2JqZWN0X2RlbChhbGVydF9wb3B1cCk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wKK19qYXZh
c2NyaXB0X2NvbmZpcm1fY2IoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc21hcnREYXRhLCBjb25zdCBj
aGFyICptZXNzYWdlKQoreworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5k
X3dpdGhfZXdrX3ZpZXcoc21hcnREYXRhLT5zZWxmKTsKKworICAgRXZhc19PYmplY3QgKmNvbmZp
cm1fcG9wdXAgPSBlbG1fcG9wdXBfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7CisgICBldmFzX29i
amVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChjb25maXJtX3BvcHVwLCBFVkFTX0hJTlRfRVhQQU5E
LCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAgIGVsbV9vYmplY3RfdGV4dF9zZXQoY29uZmlybV9wb3B1
cCwgbWVzc2FnZSk7CisgICBlbG1fb2JqZWN0X3BhcnRfdGV4dF9zZXQoY29uZmlybV9wb3B1cCwg
InRpdGxlLHRleHQiLCAiQ29uZmlybWF0aW9uIik7CisKKyAgIC8qIFBvcHVwIGJ1dHRvbnMgKi8K
KyAgIEVpbmFfQm9vbCBjYW5jZWwgPSBFSU5BX0ZBTFNFOworICAgRXZhc19PYmplY3QgKmNhbmNl
bF9idXR0b24gPSBlbG1fYnV0dG9uX2FkZChjb25maXJtX3BvcHVwKTsKKyAgIGVsbV9vYmplY3Rf
dGV4dF9zZXQoY2FuY2VsX2J1dHRvbiwgIkNhbmNlbCIpOworICAgZWxtX29iamVjdF9wYXJ0X2Nv
bnRlbnRfc2V0KGNvbmZpcm1fcG9wdXAsICJidXR0b24xIiwgY2FuY2VsX2J1dHRvbik7CisgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoY2FuY2VsX2J1dHRvbiwgImNsaWNrZWQiLCBf
b2tfY2xpY2tlZF9jYiwgJmNhbmNlbCk7CisgICBFdmFzX09iamVjdCAqb2tfYnV0dG9uID0gZWxt
X2J1dHRvbl9hZGQoY29uZmlybV9wb3B1cCk7CisgICBFaW5hX0Jvb2wgb2sgPSBFSU5BX0ZBTFNF
OworICAgZWxtX29iamVjdF90ZXh0X3NldChva19idXR0b24sICJPSyIpOworICAgZWxtX29iamVj
dF9wYXJ0X2NvbnRlbnRfc2V0KGNvbmZpcm1fcG9wdXAsICJidXR0b24yIiwgb2tfYnV0dG9uKTsK
KyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChva19idXR0b24sICJjbGlja2VkIiwg
X29rX2NsaWNrZWRfY2IsICZvayk7CisgICBlbG1fb2JqZWN0X2ZvY3VzX3NldChva19idXR0b24s
IEVJTkFfVFJVRSk7CisgICBldmFzX29iamVjdF9zaG93KGNvbmZpcm1fcG9wdXApOworCisgICB3
aGlsZSAoY2FuY2VsICE9IEVJTkFfVFJVRSAmJiBvayAhPSBFSU5BX1RSVUUpCisgICAgICBlY29y
ZV9tYWluX2xvb3BfaXRlcmF0ZSgpOworCisgICBldmFzX29iamVjdF9kZWwoY29uZmlybV9wb3B1
cCk7CisKKyAgIHJldHVybiBvazsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorX2phdmFzY3Jp
cHRfcHJvbXB0X2NiKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSwgY29uc3QgY2hhciAq
bWVzc2FnZSwgY29uc3QgY2hhciAqZGVmYXVsdF92YWx1ZSkKK3sKKyAgIEJyb3dzZXJfV2luZG93
ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93aXRoX2V3a192aWV3KHNtYXJ0RGF0YS0+c2VsZik7CisK
KyAgIEV2YXNfT2JqZWN0ICpwcm9tcHRfcG9wdXAgPSBlbG1fcG9wdXBfYWRkKHdpbmRvdy0+ZWxt
X3dpbmRvdyk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChwcm9tcHRfcG9w
dXAsIEVWQVNfSElOVF9FWFBBTkQsIEVWQVNfSElOVF9FWFBBTkQpOworICAgZWxtX29iamVjdF9w
YXJ0X3RleHRfc2V0KHByb21wdF9wb3B1cCwgInRpdGxlLHRleHQiLCAiUHJvbXB0Iik7CisKKyAg
IC8qIFBvcHVwIENvbnRlbnQgKi8KKyAgIEV2YXNfT2JqZWN0ICpib3ggPSBlbG1fYm94X2FkZCh3
aW5kb3ctPmVsbV93aW5kb3cpOworICAgZWxtX2JveF9wYWRkaW5nX3NldChib3gsIDAsIDQpOwor
ICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQoYm94LCBFVkFTX0hJTlRfRVhQQU5E
LCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQo
Ym94LCBFVkFTX0hJTlRfRklMTCwgRVZBU19ISU5UX0ZJTEwpOworICAgZXZhc19vYmplY3Rfc2hv
dyhib3gpOworCisgICBFdmFzX09iamVjdCAqcHJvbXB0ID0gZWxtX2xhYmVsX2FkZCh3aW5kb3ct
PmVsbV93aW5kb3cpOworICAgZWxtX29iamVjdF90ZXh0X3NldChwcm9tcHQsIG1lc3NhZ2UpOwor
ICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQocHJvbXB0LCBFVkFTX0hJTlRfRVhQ
QU5ELCAwLjApOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldChwcm9tcHQsIEVW
QVNfSElOVF9GSUxMLCAwLjUpOworICAgZWxtX2JveF9wYWNrX2VuZChib3gsIHByb21wdCk7Cisg
ICBldmFzX29iamVjdF9zaG93KHByb21wdCk7CisKKyAgIEV2YXNfT2JqZWN0ICplbnRyeSA9IGVs
bV9lbnRyeV9hZGQod2luZG93LT5lbG1fd2luZG93KTsKKyAgIGVsbV9lbnRyeV9zY3JvbGxhYmxl
X3NldChlbnRyeSwgRUlOQV9UUlVFKTsKKyAgIGVsbV9lbnRyeV9zaW5nbGVfbGluZV9zZXQoZW50
cnksIEVJTkFfVFJVRSk7CisgICBlbG1fZW50cnlfdGV4dF9zdHlsZV91c2VyX3B1c2goZW50cnks
ICJERUZBVUxUPSdmb250X3NpemU9MTgnIik7CisgICBlbG1fZW50cnlfZW50cnlfc2V0KGVudHJ5
LCBkZWZhdWx0X3ZhbHVlID8gZGVmYXVsdF92YWx1ZSA6ICIiKTsKKyAgIGVsbV9lbnRyeV9zZWxl
Y3RfYWxsKGVudHJ5KTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KGVudHJ5
LCBFVkFTX0hJTlRfRVhQQU5ELCAwLjApOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWdu
X3NldChlbnRyeSwgRVZBU19ISU5UX0ZJTEwsIDAuNSk7CisgICBlbG1fYm94X3BhY2tfZW5kKGJv
eCwgZW50cnkpOworICAgZWxtX29iamVjdF9mb2N1c19zZXQoZW50cnksIEVJTkFfVFJVRSk7Cisg
ICBldmFzX29iamVjdF9zaG93KGVudHJ5KTsKKworICAgZWxtX29iamVjdF9jb250ZW50X3NldChw
cm9tcHRfcG9wdXAsIGJveCk7CisKKyAgIC8qIFBvcHVwIGJ1dHRvbnMgKi8KKyAgIEVpbmFfQm9v
bCBjYW5jZWwgPSBFSU5BX0ZBTFNFOworICAgRXZhc19PYmplY3QgKmNhbmNlbF9idXR0b24gPSBl
bG1fYnV0dG9uX2FkZChwcm9tcHRfcG9wdXApOworICAgZWxtX29iamVjdF90ZXh0X3NldChjYW5j
ZWxfYnV0dG9uLCAiQ2FuY2VsIik7CisgICBlbG1fb2JqZWN0X3BhcnRfY29udGVudF9zZXQocHJv
bXB0X3BvcHVwLCAiYnV0dG9uMSIsIGNhbmNlbF9idXR0b24pOworICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfYWRkKGNhbmNlbF9idXR0b24sICJjbGlja2VkIiwgX29rX2NsaWNrZWRfY2Is
ICZjYW5jZWwpOworICAgRWluYV9Cb29sIG9rID0gRUlOQV9GQUxTRTsKKyAgIEV2YXNfT2JqZWN0
ICpva19idXR0b24gPSBlbG1fYnV0dG9uX2FkZChwcm9tcHRfcG9wdXApOworICAgZWxtX29iamVj
dF90ZXh0X3NldChva19idXR0b24sICJPSyIpOworICAgZWxtX29iamVjdF9wYXJ0X2NvbnRlbnRf
c2V0KHByb21wdF9wb3B1cCwgImJ1dHRvbjIiLCBva19idXR0b24pOworICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfYWRkKG9rX2J1dHRvbiwgImNsaWNrZWQiLCBfb2tfY2xpY2tlZF9jYiwg
Jm9rKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cocHJvbXB0X3BvcHVwKTsKKworICAgd2hpbGUgKGNh
bmNlbCAhPSBFSU5BX1RSVUUgJiYgb2sgIT0gRUlOQV9UUlVFKQorICAgICAgZWNvcmVfbWFpbl9s
b29wX2l0ZXJhdGUoKTsKKworICAgLyogVGhlIHJldHVybiBzdHJpbmcgbmVlZCB0byBiZSBzdHJp
bmdzaGFyZWQgKi8KKyAgIGNvbnN0IGNoYXIgKnByb21wdF90ZXh0ID0gb2sgPyBlaW5hX3N0cmlu
Z3NoYXJlX2FkZChlbG1fZW50cnlfZW50cnlfZ2V0KGVudHJ5KSkgOiBOVUxMOworICAgZXZhc19v
YmplY3RfZGVsKHByb21wdF9wb3B1cCk7CisKKyAgIHJldHVybiBwcm9tcHRfdGV4dDsKK30KKwor
c3RhdGljIEVpbmFfQm9vbAorX2phdmFzY3JpcHRfYmVmb3JlX3VubG9hZF9jb25maXJtX2NiKEV3
a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKyAg
IHJldHVybiBfamF2YXNjcmlwdF9jb25maXJtX2NiKHNtYXJ0RGF0YSwgIldpbGwgeW91IGxlYXZl
IHRoaXMgcGFnZT8iKTsKK30KKworc3RhdGljIHZvaWQKK19wb3B1cF9tZW51X2l0ZW1fY2xpY2tl
ZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8p
Cit7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9k
YXRhOworICAgRWxtX09iamVjdF9JdGVtICppdGVtID0gKEVsbV9PYmplY3RfSXRlbSAqKWV2ZW50
X2luZm87CisKKyAgIElORk8oIlNlbGVjdGVkIHBvcHVwIG1lbnUgaW5kZXg6ICV1IiwgZWxtX21l
bnVfaXRlbV9pbmRleF9nZXQoaXRlbSkpOworICAgZXdrX3BvcHVwX21lbnVfc2VsZWN0ZWRfaW5k
ZXhfc2V0KHdpbmRvdy0+cG9wdXAuZXdrX21lbnUsIGVsbV9tZW51X2l0ZW1faW5kZXhfZ2V0KGl0
ZW0pKTsKKworICAgLy8gQ2xvc2UgcG9wdXAgbWVudS4KKyAgIGV3a19wb3B1cF9tZW51X2Nsb3Nl
KHdpbmRvdy0+cG9wdXAuZXdrX21lbnUpOworfQorCitzdGF0aWMgdm9pZAorcG9wdXBfbWVudV9w
b3B1bGF0ZShFdmFzX09iamVjdCAqZWxtX21lbnUsIEV3a19Qb3B1cF9NZW51ICpld2tfbWVudSwg
dm9pZCAqdXNlcl9kYXRhKQoreworICAgY29uc3QgRWluYV9MaXN0KiBld2tfaXRlbXMgPSBld2tf
cG9wdXBfbWVudV9pdGVtc19nZXQoZXdrX21lbnUpOworCisgICB2b2lkICpkYXRhOworICAgY29u
c3QgRWluYV9MaXN0ICpsOworICAgRUlOQV9MSVNUX0ZPUkVBQ0goZXdrX2l0ZW1zLCBsLCBkYXRh
KSB7CisgICAgIEV3a19Qb3B1cF9NZW51X0l0ZW0gKmV3a19pdGVtID0gKEV3a19Qb3B1cF9NZW51
X0l0ZW0gKilkYXRhOworICAgICBzd2l0Y2ggKGV3a19wb3B1cF9tZW51X2l0ZW1fdHlwZV9nZXQo
ZXdrX2l0ZW0pKSB7CisgICAgIGNhc2UgRVdLX1BPUFVQX01FTlVfU0VQQVJBVE9SOgorICAgICAg
IGVsbV9tZW51X2l0ZW1fc2VwYXJhdG9yX2FkZChlbG1fbWVudSwgTlVMTCk7CisgICAgICAgYnJl
YWs7CisgICAgIGNhc2UgRVdLX1BPUFVQX01FTlVfSVRFTToKKyAgICAgICBpZiAoZXdrX3BvcHVw
X21lbnVfaXRlbV9pc19sYWJlbF9nZXQoZXdrX2l0ZW0pKSB7CisgICAgICAgICBFbG1fT2JqZWN0
X0l0ZW0gKml0ZW0gPSBlbG1fbWVudV9pdGVtX2FkZChlbG1fbWVudSwgTlVMTCwgTlVMTCwgZXdr
X3BvcHVwX21lbnVfaXRlbV90ZXh0X2dldChld2tfaXRlbSksIE5VTEwsIE5VTEwpOworICAgICAg
ICAgZWxtX29iamVjdF9pdGVtX2Rpc2FibGVkX3NldChpdGVtLCBFSU5BX1RSVUUpOworICAgICAg
IH0gZWxzZSB7CisgICAgICAgICBFbG1fT2JqZWN0X0l0ZW0gKml0ZW0gPSBlbG1fbWVudV9pdGVt
X2FkZChlbG1fbWVudSwgTlVMTCwgTlVMTCwgZXdrX3BvcHVwX21lbnVfaXRlbV90ZXh0X2dldChl
d2tfaXRlbSksIF9wb3B1cF9tZW51X2l0ZW1fY2xpY2tlZF9jYiwgdXNlcl9kYXRhKTsKKyAgICAg
ICAgIGNvbnN0IGNoYXIgKnRvb2x0aXBfdGV4dCA9IGV3a19wb3B1cF9tZW51X2l0ZW1fdG9vbHRp
cF9nZXQoZXdrX2l0ZW0pOworICAgICAgICAgaWYgKHRvb2x0aXBfdGV4dCAmJiB0b29sdGlwX3Rl
eHRbMF0gIT0gJ1wwJykKKyAgICAgICAgICAgZWxtX29iamVjdF9pdGVtX3Rvb2x0aXBfdGV4dF9z
ZXQoaXRlbSwgdG9vbHRpcF90ZXh0KTsKKyAgICAgICAgIGVsbV9vYmplY3RfaXRlbV9kaXNhYmxl
ZF9zZXQoaXRlbSwgIWV3a19wb3B1cF9tZW51X2l0ZW1fZW5hYmxlZF9nZXQoZXdrX2l0ZW0pKTsK
KyAgICAgICAgIGVsbV9tZW51X2l0ZW1fc2VsZWN0ZWRfc2V0KGl0ZW0sIGV3a19wb3B1cF9tZW51
X2l0ZW1fc2VsZWN0ZWRfZ2V0KGV3a19pdGVtKSk7CisgICAgICAgfQorICAgICAgIGJyZWFrOwor
ICAgICBkZWZhdWx0OgorICAgICAgIElORk8oIlVucmVjb2duaXplZCBwb3B1cCBtZW51IGl0ZW0g
dHlwZSEiKTsKKyAgICAgICBicmVhazsKKyAgICAgfQorICAgfQorfQorCitzdGF0aWMgRWluYV9C
b29sCitfcG9wdXBfbWVudV9zaG93KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSwgRWlu
YV9SZWN0YW5nbGUgcmVjdCwgRXdrX1RleHRfRGlyZWN0aW9uIHRleHRfZGlyZWN0aW9uLCBkb3Vi
bGUgcGFnZV9zY2FsZV9mYWN0b3IsIEV3a19Qb3B1cF9NZW51ICpld2tfbWVudSkKK3sKKyAgIEJy
b3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93aXRoX2V3a192aWV3KHNtYXJ0RGF0
YS0+c2VsZik7CisKKyAgIGlmICh3aW5kb3ctPnBvcHVwLmVsbV9tZW51KQorICAgICBldmFzX29i
amVjdF9kZWwod2luZG93LT5wb3B1cC5lbG1fbWVudSk7CisKKyAgIHdpbmRvdy0+cG9wdXAuZWxt
X21lbnUgPSBlbG1fbWVudV9hZGQod2luZG93LT5lbG1fd2luZG93KTsKKyAgIHdpbmRvdy0+cG9w
dXAuZXdrX21lbnUgPSBld2tfbWVudTsKKworICAgcG9wdXBfbWVudV9wb3B1bGF0ZSh3aW5kb3ct
PnBvcHVwLmVsbV9tZW51LCBld2tfbWVudSwgd2luZG93KTsKKworICAgSU5GTygiU2hvd2luZyBw
b3B1cCBtZW51IGF0ICglZCwgJWQpIiwgcmVjdC54LCByZWN0LnkpOworICAgZWxtX21lbnVfbW92
ZSh3aW5kb3ctPnBvcHVwLmVsbV9tZW51LCByZWN0LngsIHJlY3QueSk7CisgICBldmFzX29iamVj
dF9zaG93KHdpbmRvdy0+cG9wdXAuZWxtX21lbnUpOworCisgICByZXR1cm4gRUlOQV9UUlVFOwor
fQorCitzdGF0aWMgRWluYV9Cb29sCitfcG9wdXBfbWVudV9oaWRlKEV3a19WaWV3X1NtYXJ0X0Rh
dGEgKnNtYXJ0RGF0YSkKK3sKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfZmlu
ZF93aXRoX2V3a192aWV3KHNtYXJ0RGF0YS0+c2VsZik7CisKKyAgIGlmICghd2luZG93LT5wb3B1
cC5lbG1fbWVudSkKKyAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgIGVsbV9tZW51X2Nsb3Nl
KHdpbmRvdy0+cG9wdXAuZWxtX21lbnUpOworICAgd2luZG93LT5wb3B1cC5ld2tfbWVudSA9IE5V
TEw7CisKKyAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wKK193aW5k
b3dfZ2VvbWV0cnlfZ2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFdmFzX0Nvb3JkICp4LCBF
dmFzX0Nvb3JkICp5LCBFdmFzX0Nvb3JkICp3aWR0aCwgRXZhc19Db29yZCAqaGVpZ2h0KQorewor
ICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRvd19maW5kX3dpdGhfZXdrX3ZpZXcoc2Qt
PnNlbGYpOworCisgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQod2luZG93LT5lbG1fd2luZG93
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3Rh
dGljIEVpbmFfQm9vbAorX3dpbmRvd19nZW9tZXRyeV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nv
b3JkIGhlaWdodCkKK3sKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93
aXRoX2V3a192aWV3KHNkLT5zZWxmKTsKKworICAgZXZhc19vYmplY3RfbW92ZSh3aW5kb3ctPmVs
bV93aW5kb3csIHgsIHkpOworICAgZXZhc19vYmplY3RfcmVzaXplKHdpbmRvdy0+ZWxtX3dpbmRv
dywgd2lkdGgsIGhlaWdodCk7CisKKyAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3R5cGVkZWYg
c3RydWN0IHsKKyAgIEV2YXNfT2JqZWN0ICpld2tfdmlldzsKKyAgIEV2YXNfT2JqZWN0ICpwZXJt
aXNzaW9uX3BvcHVwOworfSBQZXJtaXNzaW9uRGF0YTsKKworc3RhdGljIHZvaWQKK19mdWxsc2Ny
ZWVuX2FjY2VwdF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2
ZW50X2luZm8pCit7CisgICBQZXJtaXNzaW9uRGF0YSAqcGVybWlzc2lvbl9kYXRhID0gKFBlcm1p
c3Npb25EYXRhICopdXNlcl9kYXRhOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IHdpbmRv
d19maW5kX3dpdGhfZXdrX3ZpZXcocGVybWlzc2lvbl9kYXRhLT5ld2tfdmlldyk7CisKKyAgIGVs
bV93aW5fcmVzaXplX29iamVjdF9kZWwod2luZG93LT5lbG1fd2luZG93LCBwZXJtaXNzaW9uX2Rh
dGEtPnBlcm1pc3Npb25fcG9wdXApOworICAgZXZhc19vYmplY3RfZGVsKHBlcm1pc3Npb25fZGF0
YS0+cGVybWlzc2lvbl9wb3B1cCk7CisgICBldmFzX29iamVjdF9mb2N1c19zZXQocGVybWlzc2lv
bl9kYXRhLT5ld2tfdmlldywgRUlOQV9UUlVFKTsKKyAgIGZyZWUocGVybWlzc2lvbl9kYXRhKTsK
K30KKworc3RhdGljIHZvaWQKK19mdWxsc2NyZWVuX2RlbnlfY2Iodm9pZCAqdXNlcl9kYXRhLCBF
dmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9pbmZvKQoreworICAgUGVybWlzc2lvbkRhdGEg
KnBlcm1pc3Npb25fZGF0YSA9IChQZXJtaXNzaW9uRGF0YSAqKXVzZXJfZGF0YTsKKyAgIEJyb3dz
ZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93aXRoX2V3a192aWV3KHBlcm1pc3Npb25f
ZGF0YS0+ZXdrX3ZpZXcpOworCisgICBld2tfdmlld19mdWxsc2NyZWVuX2V4aXQocGVybWlzc2lv
bl9kYXRhLT5ld2tfdmlldyk7CisgICBlbG1fd2luX3Jlc2l6ZV9vYmplY3RfZGVsKHdpbmRvdy0+
ZWxtX3dpbmRvdywgcGVybWlzc2lvbl9kYXRhLT5wZXJtaXNzaW9uX3BvcHVwKTsKKyAgIGV2YXNf
b2JqZWN0X2RlbChwZXJtaXNzaW9uX2RhdGEtPnBlcm1pc3Npb25fcG9wdXApOworICAgZXZhc19v
YmplY3RfZm9jdXNfc2V0KHBlcm1pc3Npb25fZGF0YS0+ZXdrX3ZpZXcsIEVJTkFfVFJVRSk7Cisg
ICBmcmVlKHBlcm1pc3Npb25fZGF0YSk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wKK19mdWxsc2Ny
ZWVuX2VudGVyX2NiKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFd2tfU2VjdXJpdHlfT3JpZ2lu
ICpvcmlnaW4pCit7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2ZpbmRfd2l0
aF9ld2tfdmlldyhzZC0+c2VsZik7CisKKyAgIC8qIEdvIGZ1bGxzY3JlZW4gKi8KKyAgIHRvZ2ds
ZV93aW5kb3dfZnVsbHNjcmVlbih3aW5kb3csIEVJTkFfVFJVRSk7CisKKyAgIC8qIFNob3cgdXNl
ciBwb3B1cCAqLworICAgRXZhc19PYmplY3QgKnBlcm1pc3Npb25fcG9wdXAgPSBlbG1fcG9wdXBf
YWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0
X3NldChwZXJtaXNzaW9uX3BvcHVwLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5E
KTsKKworICAgRWluYV9TdHJidWYgKm1lc3NhZ2UgPSBlaW5hX3N0cmJ1Zl9uZXcoKTsKKyAgIGVp
bmFfc3RyYnVmX2FwcGVuZF9wcmludGYobWVzc2FnZSwgIiVzIGlzIG5vdyBmdWxsc2NyZWVuLjxi
cj5QcmVzcyBFU0MgYXQgYW55IHRpbWUgdG8gZXhpdCBmdWxsc2NyZWVuLjxicj5BbGxvdyBmdWxs
c2NyZWVuPyIsIGV3a19zZWN1cml0eV9vcmlnaW5faG9zdF9nZXQob3JpZ2luKSk7CisgICBlbG1f
b2JqZWN0X3RleHRfc2V0KHBlcm1pc3Npb25fcG9wdXAsIGVpbmFfc3RyYnVmX3N0cmluZ19nZXQo
bWVzc2FnZSkpOworICAgZWluYV9zdHJidWZfZnJlZShtZXNzYWdlKTsKKyAgIGVsbV9vYmplY3Rf
cGFydF90ZXh0X3NldChwZXJtaXNzaW9uX3BvcHVwLCAidGl0bGUsdGV4dCIsICJGdWxsc2NyZWVu
IFBlcm1pc3Npb24iKTsKKworICAgLyogUG9wdXAgYnV0dG9ucyAqLworICAgUGVybWlzc2lvbkRh
dGEgKnBlcm1pc3Npb25fZGF0YSA9IChQZXJtaXNzaW9uRGF0YSAqKW1hbGxvYyhzaXplb2YoUGVy
bWlzc2lvbkRhdGEpKTsKKyAgIHBlcm1pc3Npb25fZGF0YS0+ZXdrX3ZpZXcgPSB3aW5kb3ctPmV3
a192aWV3OworICAgcGVybWlzc2lvbl9kYXRhLT5wZXJtaXNzaW9uX3BvcHVwID0gcGVybWlzc2lv
bl9wb3B1cDsKKyAgIEV2YXNfT2JqZWN0ICphY2NlcHRfYnV0dG9uID0gZWxtX2J1dHRvbl9hZGQo
cGVybWlzc2lvbl9wb3B1cCk7CisgICBlbG1fb2JqZWN0X3RleHRfc2V0KGFjY2VwdF9idXR0b24s
ICJBY2NlcHQiKTsKKyAgIGVsbV9vYmplY3RfcGFydF9jb250ZW50X3NldChwZXJtaXNzaW9uX3Bv
cHVwLCAiYnV0dG9uMSIsIGFjY2VwdF9idXR0b24pOworICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfYWRkKGFjY2VwdF9idXR0b24sICJjbGlja2VkIiwgX2Z1bGxzY3JlZW5fYWNjZXB0X2Ni
LCBwZXJtaXNzaW9uX2RhdGEpOworCisgICBFdmFzX09iamVjdCAqZGVueV9idXR0b24gPSBlbG1f
YnV0dG9uX2FkZChwZXJtaXNzaW9uX3BvcHVwKTsKKyAgIGVsbV9vYmplY3RfdGV4dF9zZXQoZGVu
eV9idXR0b24sICJEZW55Iik7CisgICBlbG1fb2JqZWN0X3BhcnRfY29udGVudF9zZXQocGVybWlz
c2lvbl9wb3B1cCwgImJ1dHRvbjIiLCBkZW55X2J1dHRvbik7CisgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19hZGQoZGVueV9idXR0b24sICJjbGlja2VkIiwgX2Z1bGxzY3JlZW5fZGVueV9j
YiwgcGVybWlzc2lvbl9kYXRhKTsKKyAgIGVsbV93aW5fcmVzaXplX29iamVjdF9hZGQod2luZG93
LT5lbG1fd2luZG93LCBwZXJtaXNzaW9uX3BvcHVwKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cocGVy
bWlzc2lvbl9wb3B1cCk7CisKKyAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBFaW5h
X0Jvb2wgX2Z1bGxzY3JlZW5fZXhpdF9jYihFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAg
IEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93aXRoX2V3a192aWV3KHNkLT5z
ZWxmKTsKKworICAgdG9nZ2xlX3dpbmRvd19mdWxsc2NyZWVuKHdpbmRvdywgRUlOQV9GQUxTRSk7
CisKKyAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBFdmFzX09iamVjdCAqCitfd2lu
ZG93X2NyZWF0ZV9jYihFd2tfVmlld19TbWFydF9EYXRhICpzbWFydERhdGEsIEV3a19WaWV3X0Nv
bmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24sIGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMgKndp
bmRvd19mZWF0dXJlcykKK3sKKyAgIGludCB4ID0gMDsKKyAgIGludCB5ID0gMDsKKyAgIGludCB3
aWR0aCA9IDA7CisgICBpbnQgaGVpZ2h0ID0gMDsKKworICAgZXdrX3dpbmRvd19mZWF0dXJlc19n
ZW9tZXRyeV9nZXQod2luZG93X2ZlYXR1cmVzLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisK
KyAgIGlmICghd2lkdGgpCisgICAgIHdpZHRoID0gd2luZG93X3dpZHRoOworCisgICBpZiAoIWhl
aWdodCkKKyAgICAgaGVpZ2h0ID0gd2luZG93X2hlaWdodDsKKworICAgQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdyA9IHdpbmRvd19jcmVhdGUoY29uZmlndXJhdGlvbiwgd2lkdGgsIGhlaWdodCk7Cisg
ICBFdmFzX09iamVjdCAqbmV3X3ZpZXcgPSB3aW5kb3ctPmV3a192aWV3OworCisgICB3aW5kb3dz
ID0gZWluYV9saXN0X2FwcGVuZCh3aW5kb3dzLCB3aW5kb3cpOworCisgICBJTkZPKCJtaW5pYnJv
d3NlcjogbG9jYXRpb24oJWQsJWQpIHNpemU9KCVkLCVkKSIsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OworCisgICByZXR1cm4gbmV3X3ZpZXc7Cit9CisKK3N0YXRpYyB2b2lkCitfd2luZG93X2Nsb3Nl
X2NiKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNtYXJ0RGF0YSkKK3sKKyAgIEJyb3dzZXJfV2luZG93
ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93aXRoX2V3a192aWV3KHNtYXJ0RGF0YS0+c2VsZik7Cisg
ICB3aW5kb3dfY2xvc2Uod2luZG93KTsKK30KKworc3RhdGljIHZvaWQKK19jb250ZXh0X21lbnVf
aXRlbV9zZWxlY3RlZF9jYih2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVu
dF9pbmZvKQoreworICAgaWYgKCFkYXRhKSB7CisgICAgIEVSUk9SKCJDb250ZXh0IG1lbnUgY2Fs
bGJhY2sgZGF0YSBpcyBOVUxMLiIpOworICAgICByZXR1cm47CisgICB9CisKKyAgIEV3a19Db250
ZXh0X01lbnVfSXRlbSAqZXdrX2l0ZW0gPSAoRXdrX0NvbnRleHRfTWVudV9JdGVtICopZGF0YTsK
KyAgIElORk8oIlNlbGVjdGVkIGNvbnRleHQgbWVudSBpdGVtOiAlcy4iLCBld2tfY29udGV4dF9t
ZW51X2l0ZW1fdGl0bGVfZ2V0KGV3a19pdGVtKSk7CisgICBld2tfY29udGV4dF9tZW51X2l0ZW1f
c2VsZWN0KGV3a19jb250ZXh0X21lbnVfaXRlbV9wYXJlbnRfbWVudV9nZXQoZXdrX2l0ZW0pLCBl
d2tfaXRlbSk7CisgICBld2tfY29udGV4dF9tZW51X2hpZGUoZXdrX2NvbnRleHRfbWVudV9pdGVt
X3BhcmVudF9tZW51X2dldChld2tfaXRlbSkpOworfQorCitzdGF0aWMgdm9pZAorY29udGV4dF9t
ZW51X3BvcHVsYXRlKEV2YXNfT2JqZWN0KiBjb250ZXh0X21lbnUsIEV3a19Db250ZXh0X01lbnUg
KmV3a19tZW51LCBFbG1fT2JqZWN0X0l0ZW0gKnBhcmVudF9pdGVtKQoreworICAgaWYgKCFjb250
ZXh0X21lbnUgfHwgIWV3a19tZW51KSB7CisgICAgIEVSUk9SKCJOZWNlc3Nhcnkgb2JqZWN0cyBh
cmUgTlVMTC4iKTsKKyAgICAgcmV0dXJuOworICAgfQorCisgICBjb25zdCBFaW5hX0xpc3QgKmxp
c3QgPSBld2tfY29udGV4dF9tZW51X2l0ZW1zX2dldChld2tfbWVudSk7CisgICBjb25zdCBFaW5h
X0xpc3QgKmw7CisgICB2b2lkICpkYXRhOworCisgICBFd2tfQ29udGV4dF9NZW51X0l0ZW0gKmV3
a19pdGVtOworICAgRWxtX09iamVjdF9JdGVtICplbG1fbWVudV9pdGVtOworICAgRXZhc19PYmpl
Y3QgKmVsbV9jaGVja19pdGVtOworCisgICBFSU5BX0xJU1RfRk9SRUFDSChsaXN0LCBsLCBkYXRh
KSB7CisgICAgIGV3a19pdGVtID0gKEV3a19Db250ZXh0X01lbnVfSXRlbSAqKWRhdGE7CisgICAg
IHN3aXRjaCAoZXdrX2NvbnRleHRfbWVudV9pdGVtX3R5cGVfZ2V0KGV3a19pdGVtKSkgeworICAg
ICBjYXNlIEVXS19BQ1RJT05fVFlQRToKKyAgICAgICBlbG1fbWVudV9pdGVtID0gZWxtX21lbnVf
aXRlbV9hZGQoY29udGV4dF9tZW51LCBwYXJlbnRfaXRlbSwgTlVMTCwgZXdrX2NvbnRleHRfbWVu
dV9pdGVtX3RpdGxlX2dldChld2tfaXRlbSksIF9jb250ZXh0X21lbnVfaXRlbV9zZWxlY3RlZF9j
YiwgZXdrX2l0ZW0pOworICAgICAgIGJyZWFrOworICAgICBjYXNlIEVXS19DSEVDS0FCTEVfQUNU
SU9OX1RZUEU6CisgICAgICAgZWxtX2NoZWNrX2l0ZW0gPSBlbG1fY2hlY2tfYWRkKGNvbnRleHRf
bWVudSk7CisgICAgICAgZWxtX21lbnVfaXRlbSA9IGVsbV9tZW51X2l0ZW1fYWRkKGNvbnRleHRf
bWVudSwgcGFyZW50X2l0ZW0sIE5VTEwsIGV3a19jb250ZXh0X21lbnVfaXRlbV90aXRsZV9nZXQo
ZXdrX2l0ZW0pLCBfY29udGV4dF9tZW51X2l0ZW1fc2VsZWN0ZWRfY2IsIGV3a19pdGVtKTsKKyAg
ICAgICBlbG1fb2JqZWN0X2l0ZW1fY29udGVudF9zZXQoZWxtX21lbnVfaXRlbSwgZWxtX2NoZWNr
X2l0ZW0pOworICAgICAgIGVsbV9jaGVja19zdGF0ZV9zZXQoZWxtX2NoZWNrX2l0ZW0sIGV3a19j
b250ZXh0X21lbnVfaXRlbV9jaGVja2VkX2dldChld2tfaXRlbSkpOworICAgICAgIGJyZWFrOwor
ICAgICBjYXNlIEVXS19TVUJNRU5VX1RZUEU6CisgICAgICAgZWxtX21lbnVfaXRlbSA9IGVsbV9t
ZW51X2l0ZW1fYWRkKGNvbnRleHRfbWVudSwgcGFyZW50X2l0ZW0sIE5VTEwsIGV3a19jb250ZXh0
X21lbnVfaXRlbV90aXRsZV9nZXQoZXdrX2l0ZW0pLCBOVUxMLCBld2tfaXRlbSk7CisgICAgICAg
aWYgKGVsbV9tZW51X2l0ZW0pCisgICAgICAgICBjb250ZXh0X21lbnVfcG9wdWxhdGUoY29udGV4
dF9tZW51LCBld2tfY29udGV4dF9tZW51X2l0ZW1fc3VibWVudV9nZXQoZXdrX2l0ZW0pLCBlbG1f
bWVudV9pdGVtKTsKKyAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDoKKyAgICAgICBjb250aW51
ZTsKKyAgICAgfQorICAgICBlbG1fb2JqZWN0X2l0ZW1fZGlzYWJsZWRfc2V0KGVsbV9tZW51X2l0
ZW0sICFld2tfY29udGV4dF9tZW51X2l0ZW1fZW5hYmxlZF9nZXQoZXdrX2l0ZW0pKTsKKyAgIH0K
K30KKworc3RhdGljIEVpbmFfQm9vbAorX2NvbnRleHRfbWVudV9zaG93KEV3a19WaWV3X1NtYXJ0
X0RhdGEgKnNkLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXdrX0NvbnRleHRfTWVudSAq
bWVudSkKK3sKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSB3aW5kb3dfZmluZF93aXRoX2V3
a192aWV3KHNkLT5zZWxmKTsKKworICAgaWYgKCF3aW5kb3cgfHwgIW1lbnUpIHsKKyAgICAgRVJS
T1IoIk5lY2Vzc2FyeSBvYmplY3RzIGFyZSBOVUxMLiIpOworICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKKyAgIH0KKworICAgd2luZG93LT5jb250ZXh0X21lbnUuZWxtX21lbnUgPSBlbG1fbWVudV9h
ZGQod2luZG93LT5lbG1fd2luZG93KTsKKworICAgaWYgKCF3aW5kb3ctPmNvbnRleHRfbWVudS5l
bG1fbWVudSkgeworICAgICBFUlJPUigiQ291bGQgbm90IGNyZWF0ZSBtZW51IHdpZGdldC4iKTsK
KyAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICB9CisKKyAgIHdpbmRvdy0+Y29udGV4dF9tZW51
LmV3a19tZW51ID0gbWVudTsKKworICAgY29udGV4dF9tZW51X3BvcHVsYXRlKHdpbmRvdy0+Y29u
dGV4dF9tZW51LmVsbV9tZW51LCBtZW51LCBOVUxMKTsKKworICAgSU5GTygiU2hvd2luZyBjb250
ZXh0IG1lbnUgYXQgKCVkLCAlZCkuIiwgeCwgeSk7CisgICBlbG1fbWVudV9tb3ZlKHdpbmRvdy0+
Y29udGV4dF9tZW51LmVsbV9tZW51LCB4LCB5KTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93
LT5jb250ZXh0X21lbnUuZWxtX21lbnUpOworCisgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitz
dGF0aWMgRWluYV9Cb29sCitfY29udGV4dF9tZW51X2hpZGUoRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QpCit7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gd2luZG93X2ZpbmRfd2l0aF9ld2tf
dmlldyhzZC0+c2VsZik7CisKKyAgIGlmICghd2luZG93IHx8ICF3aW5kb3ctPmNvbnRleHRfbWVu
dS5lbG1fbWVudSkgeworICAgICBFUlJPUigiTmVjZXNzYXJ5IG9iamVjdHMgYXJlIE5VTEwuIik7
CisgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgfQorCisgICBlbG1fbWVudV9jbG9zZSh3aW5k
b3ctPmNvbnRleHRfbWVudS5lbG1fbWVudSk7CisgICBldmFzX29iamVjdF9kZWwod2luZG93LT5j
b250ZXh0X21lbnUuZWxtX21lbnUpOworICAgd2luZG93LT5jb250ZXh0X21lbnUuZWxtX21lbnUg
PSBOVUxMOworICAgd2luZG93LT5jb250ZXh0X21lbnUuZXdrX21lbnUgPSBOVUxMOworCisgICBy
ZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgdm9pZAorYXV0aF9wb3B1cF9jbG9zZShBdXRo
X0RhdGEgKmF1dGhfZGF0YSkKK3sKKyAgIGV3a19vYmplY3RfdW5yZWYoYXV0aF9kYXRhLT5yZXF1
ZXN0KTsKKyAgIGV2YXNfb2JqZWN0X2RlbChhdXRoX2RhdGEtPnBvcHVwKTsKKyAgIGZyZWUoYXV0
aF9kYXRhKTsKK30KKworc3RhdGljIHZvaWQKK19hdXRoX2NhbmNlbF9jYih2b2lkICp1c2VyX2Rh
dGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICBBdXRoX0RhdGEg
KmF1dGhfZGF0YSA9IChBdXRoX0RhdGEgKil1c2VyX2RhdGE7CisKKyAgIGV3a19hdXRoX3JlcXVl
c3RfY2FuY2VsKGF1dGhfZGF0YS0+cmVxdWVzdCk7CisKKyAgIGF1dGhfcG9wdXBfY2xvc2UoYXV0
aF9kYXRhKTsKK30KKworc3RhdGljIHZvaWQKK19hdXRoX29rX2NiKHZvaWQgKnVzZXJfZGF0YSwg
RXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5mbykKK3sKKyAgIEF1dGhfRGF0YSAqYXV0
aF9kYXRhID0gKEF1dGhfRGF0YSAqKXVzZXJfZGF0YTsKKworICAgY29uc3QgY2hhciAqdXNlcm5h
bWUgPSBlbG1fZW50cnlfZW50cnlfZ2V0KGF1dGhfZGF0YS0+dXNlcm5hbWVfZW50cnkpOworICAg
Y29uc3QgY2hhciAqcGFzc3dvcmQgPSBlbG1fZW50cnlfZW50cnlfZ2V0KGF1dGhfZGF0YS0+cGFz
c3dvcmRfZW50cnkpOworICAgZXdrX2F1dGhfcmVxdWVzdF9hdXRoZW50aWNhdGUoYXV0aF9kYXRh
LT5yZXF1ZXN0LCB1c2VybmFtZSwgcGFzc3dvcmQpOworCisgICBhdXRoX3BvcHVwX2Nsb3NlKGF1
dGhfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCitfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYih2
b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCit7Cisg
ICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwor
ICAgRXdrX0F1dGhfUmVxdWVzdCAqcmVxdWVzdCA9IGV3a19vYmplY3RfcmVmKChFd2tfQXV0aF9S
ZXF1ZXN0ICopZXZlbnRfaW5mbyk7CisKKyAgIEF1dGhfRGF0YSAqYXV0aF9kYXRhID0gKEF1dGhf
RGF0YSAqKW1hbGxvYyhzaXplb2YoQXV0aF9EYXRhKSk7CisgICBhdXRoX2RhdGEtPnJlcXVlc3Qg
PSByZXF1ZXN0OworCisgICBFdmFzX09iamVjdCAqYXV0aF9wb3B1cCA9IGVsbV9wb3B1cF9hZGQo
d2luZG93LT5lbG1fd2luZG93KTsKKyAgIGF1dGhfZGF0YS0+cG9wdXAgPSBhdXRoX3BvcHVwOwor
ICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQoYXV0aF9wb3B1cCwgRVZBU19ISU5U
X0VYUEFORCwgRVZBU19ISU5UX0VYUEFORCk7CisgICBlbG1fb2JqZWN0X3BhcnRfdGV4dF9zZXQo
YXV0aF9wb3B1cCwgInRpdGxlLHRleHQiLCAiQXV0aGVudGljYXRpb24gUmVxdWlyZWQiKTsKKwor
ICAgLyogUG9wdXAgQ29udGVudCAqLworICAgRXZhc19PYmplY3QgKnZib3ggPSBlbG1fYm94X2Fk
ZChhdXRoX3BvcHVwKTsKKyAgIGVsbV9ib3hfcGFkZGluZ19zZXQodmJveCwgMCwgNCk7CisgICBl
dmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldCh2Ym94LCBFVkFTX0hJTlRfRVhQQU5ELCBF
VkFTX0hJTlRfRVhQQU5EKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQodmJv
eCwgRVZBU19ISU5UX0ZJTEwsIEVWQVNfSElOVF9GSUxMKTsKKyAgIGVsbV9vYmplY3RfY29udGVu
dF9zZXQoYXV0aF9wb3B1cCwgdmJveCk7CisgICBldmFzX29iamVjdF9zaG93KHZib3gpOworCisg
ICAvKiBBdXRoZW50aWNhdGlvbiBtZXNzYWdlICovCisgICBFdmFzX09iamVjdCAqbGFiZWwgPSBl
bG1fbGFiZWxfYWRkKGF1dGhfcG9wdXApOworICAgZWxtX2xhYmVsX2xpbmVfd3JhcF9zZXQobGFi
ZWwsIEVMTV9XUkFQX1dPUkQpOworICAgRWluYV9TdHJidWYgKmF1dGhfdGV4dCA9IGVpbmFfc3Ry
YnVmX25ldygpOworICAgY29uc3QgY2hhciAqaG9zdCA9IGV3a19hdXRoX3JlcXVlc3RfaG9zdF9n
ZXQocmVxdWVzdCk7CisgICBjb25zdCBjaGFyICpyZWFsbSA9IGV3a19hdXRoX3JlcXVlc3RfcmVh
bG1fZ2V0KHJlcXVlc3QpOworICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50ZihhdXRoX3RleHQs
ICJBIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgYmVpbmcgcmVxdWVzdGVkIGJ5ICVzLiBUaGUg
c2l0ZSBzYXlzOiBcIiVzXCIiLCBob3N0LCByZWFsbSA/IHJlYWxtIDogIiIpOworICAgZWxtX29i
amVjdF90ZXh0X3NldChsYWJlbCwgZWluYV9zdHJidWZfc3RyaW5nX2dldChhdXRoX3RleHQpKTsK
KyAgIGVpbmFfc3RyYnVmX2ZyZWUoYXV0aF90ZXh0KTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGlu
dF93ZWlnaHRfc2V0KGxhYmVsLCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsK
KyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQobGFiZWwsIEVWQVNfSElOVF9GSUxM
LCBFVkFTX0hJTlRfRklMTCk7CisgICBlbG1fYm94X3BhY2tfZW5kKHZib3gsIGxhYmVsKTsKKyAg
IGV2YXNfb2JqZWN0X3Nob3cobGFiZWwpOworCisgICAvKiBDcmVkZW50aWFsIHRhYmxlICovCisg
ICBFdmFzX09iamVjdCAqdGFibGUgPSBlbG1fdGFibGVfYWRkKGF1dGhfcG9wdXApOworICAgZWxt
X3RhYmxlX3BhZGRpbmdfc2V0KHRhYmxlLCAyLCAyKTsKKyAgIGVsbV90YWJsZV9ob21vZ2VuZW91
c19zZXQodGFibGUsIEVJTkFfVFJVRSk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0
X3NldCh0YWJsZSwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19ISU5UX0VYUEFORCk7CisgICBldmFz
X29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KHRhYmxlLCBFVkFTX0hJTlRfRklMTCwgRVZBU19I
SU5UX0ZJTEwpOworICAgZWxtX2JveF9wYWNrX2VuZCh2Ym94LCB0YWJsZSk7CisgICBldmFzX29i
amVjdF9zaG93KHRhYmxlKTsKKworICAgLyogVXNlcm5hbWUgcm93ICovCisgICBFdmFzX09iamVj
dCAqdXNlcm5hbWVfbGFiZWwgPSBlbG1fbGFiZWxfYWRkKGF1dGhfcG9wdXApOworICAgZWxtX29i
amVjdF90ZXh0X3NldCh1c2VybmFtZV9sYWJlbCwgIlVzZXJuYW1lOiIpOworICAgZXZhc19vYmpl
Y3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQodXNlcm5hbWVfbGFiZWwsIEVWQVNfSElOVF9FWFBBTkQs
IEVWQVNfSElOVF9FWFBBTkQpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldCh1
c2VybmFtZV9sYWJlbCwgMSwgRVZBU19ISU5UX0ZJTEwpOworICAgZWxtX3RhYmxlX3BhY2sodGFi
bGUsIHVzZXJuYW1lX2xhYmVsLCAwLCAwLCAxLCAxKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3codXNl
cm5hbWVfbGFiZWwpOworCisgICBFdmFzX09iamVjdCAqdXNlcm5hbWVfZW50cnkgPSBlbG1fZW50
cnlfYWRkKGF1dGhfcG9wdXApOworICAgYXV0aF9kYXRhLT51c2VybmFtZV9lbnRyeSA9IHVzZXJu
YW1lX2VudHJ5OworICAgZWxtX2VudHJ5X3Njcm9sbGFibGVfc2V0KHVzZXJuYW1lX2VudHJ5LCBF
SU5BX1RSVUUpOworICAgZWxtX2VudHJ5X3NpbmdsZV9saW5lX3NldCh1c2VybmFtZV9lbnRyeSwg
RUlOQV9UUlVFKTsKKyAgIGVsbV9lbnRyeV90ZXh0X3N0eWxlX3VzZXJfcHVzaCh1c2VybmFtZV9l
bnRyeSwgIkRFRkFVTFQ9J2ZvbnRfc2l6ZT0xOCciKTsKKyAgIGNvbnN0IGNoYXIgKnN1Z2dlc3Rl
ZF91c2VybmFtZSA9IGV3a19hdXRoX3JlcXVlc3Rfc3VnZ2VzdGVkX3VzZXJuYW1lX2dldChyZXF1
ZXN0KTsKKyAgIGVsbV9lbnRyeV9lbnRyeV9zZXQodXNlcm5hbWVfZW50cnksIHN1Z2dlc3RlZF91
c2VybmFtZSA/IHN1Z2dlc3RlZF91c2VybmFtZSA6ICIiKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVf
aGludF93ZWlnaHRfc2V0KHVzZXJuYW1lX2VudHJ5LCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJ
TlRfRVhQQU5EKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQodXNlcm5hbWVf
ZW50cnksIEVWQVNfSElOVF9GSUxMLCBFVkFTX0hJTlRfRklMTCk7CisgICBlbG1fdGFibGVfcGFj
ayh0YWJsZSwgdXNlcm5hbWVfZW50cnksIDEsIDAsIDIsIDEpOworICAgZWxtX29iamVjdF9mb2N1
c19zZXQodXNlcm5hbWVfZW50cnksIEVJTkFfVFJVRSk7CisgICBldmFzX29iamVjdF9zaG93KHVz
ZXJuYW1lX2VudHJ5KTsKKworICAgLyogUGFzc3dvcmQgcm93ICovCisgICBFdmFzX09iamVjdCAq
cGFzc3dvcmRfbGFiZWwgPSBlbG1fbGFiZWxfYWRkKGF1dGhfcG9wdXApOworICAgZWxtX29iamVj
dF90ZXh0X3NldChwYXNzd29yZF9sYWJlbCwgIlBhc3N3b3JkOiIpOworICAgZXZhc19vYmplY3Rf
c2l6ZV9oaW50X3dlaWdodF9zZXQocGFzc3dvcmRfbGFiZWwsIEVWQVNfSElOVF9FWFBBTkQsIEVW
QVNfSElOVF9FWFBBTkQpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldChwYXNz
d29yZF9sYWJlbCwgMSwgRVZBU19ISU5UX0ZJTEwpOworICAgZWxtX3RhYmxlX3BhY2sodGFibGUs
IHBhc3N3b3JkX2xhYmVsLCAwLCAxLCAxLCAxKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cocGFzc3dv
cmRfbGFiZWwpOworCisgICBFdmFzX09iamVjdCAqcGFzc3dvcmRfZW50cnkgPSBlbG1fZW50cnlf
YWRkKGF1dGhfcG9wdXApOworICAgYXV0aF9kYXRhLT5wYXNzd29yZF9lbnRyeSA9IHBhc3N3b3Jk
X2VudHJ5OworICAgZWxtX2VudHJ5X3Njcm9sbGFibGVfc2V0KHBhc3N3b3JkX2VudHJ5LCBFSU5B
X1RSVUUpOworICAgZWxtX2VudHJ5X3NpbmdsZV9saW5lX3NldChwYXNzd29yZF9lbnRyeSwgRUlO
QV9UUlVFKTsKKyAgIGVsbV9lbnRyeV9wYXNzd29yZF9zZXQocGFzc3dvcmRfZW50cnksIEVJTkFf
VFJVRSk7CisgICBlbG1fZW50cnlfdGV4dF9zdHlsZV91c2VyX3B1c2gocGFzc3dvcmRfZW50cnks
ICJERUZBVUxUPSdmb250X3NpemU9MTgnIik7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2Vp
Z2h0X3NldChwYXNzd29yZF9lbnRyeSwgRVZBU19ISU5UX0VYUEFORCwgRVZBU19ISU5UX0VYUEFO
RCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KHBhc3N3b3JkX2VudHJ5LCBF
VkFTX0hJTlRfRklMTCwgRVZBU19ISU5UX0ZJTEwpOworICAgZWxtX3RhYmxlX3BhY2sodGFibGUs
IHBhc3N3b3JkX2VudHJ5LCAxLCAxLCAyLCAxKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cocGFzc3dv
cmRfZW50cnkpOworCisgICAvKiBQb3B1cCBidXR0b25zICovCisgICBFdmFzX09iamVjdCAqY2Fu
Y2VsX2J1dHRvbiA9IGVsbV9idXR0b25fYWRkKGF1dGhfcG9wdXApOworICAgZWxtX29iamVjdF90
ZXh0X3NldChjYW5jZWxfYnV0dG9uLCAiQ2FuY2VsIik7CisgICBlbG1fb2JqZWN0X3BhcnRfY29u
dGVudF9zZXQoYXV0aF9wb3B1cCwgImJ1dHRvbjEiLCBjYW5jZWxfYnV0dG9uKTsKKyAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChjYW5jZWxfYnV0dG9uLCAiY2xpY2tlZCIsIF9hdXRo
X2NhbmNlbF9jYiwgYXV0aF9kYXRhKTsKKyAgIEV2YXNfT2JqZWN0ICpva19idXR0b24gPSBlbG1f
YnV0dG9uX2FkZChhdXRoX3BvcHVwKTsKKyAgIGVsbV9vYmplY3RfdGV4dF9zZXQob2tfYnV0dG9u
LCAiT0siKTsKKyAgIGVsbV9vYmplY3RfcGFydF9jb250ZW50X3NldChhdXRoX3BvcHVwLCAiYnV0
dG9uMiIsIG9rX2J1dHRvbik7CisgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQob2tf
YnV0dG9uLCAiY2xpY2tlZCIsIF9hdXRoX29rX2NiLCBhdXRoX2RhdGEpOworICAgZXZhc19vYmpl
Y3Rfc2hvdyhhdXRoX3BvcHVwKTsKK30KKworc3RhdGljIHZvaWQKK19zZWFyY2hfdGV4dF9mb3Vu
ZF9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8p
Cit7CisgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9k
YXRhOworCisgICBjb25zdCBpbnQgKm1hdGNoX2NvdW50ID0gKGNvbnN0IGludCAqKShldmVudF9p
bmZvKTsKKworICAgaWYgKCptYXRjaF9jb3VudCkgeworICAgICBFaW5hX1N0cmJ1ZiAqc2VhcmNo
X3RleHQgPSBlaW5hX3N0cmJ1Zl9uZXcoKTsKKyAgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50
ZihzZWFyY2hfdGV4dCwgIiAgJWQgIE1hdGNoZXMgRm91bmQgIiAsICptYXRjaF9jb3VudCk7Cisg
ICAgIGVsbV9vYmplY3RfdGV4dF9zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkX2NvdW50
LCBlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KHNlYXJjaF90ZXh0KSk7CisgICAgIGVpbmFfc3RyYnVm
X2ZyZWUoc2VhcmNoX3RleHQpOworICAgfSBlbHNlCisgICAgIGVsbV9vYmplY3RfdGV4dF9zZXQo
d2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkX2NvdW50LCAiIE5vIE1hdGNoZXMgRm91bmQiKTsK
KworICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIEVJTkFfRkFMU0Up
OworICAgZWxtX29iamVjdF9mb2N1c19zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkX2Nv
dW50LCBFSU5BX0ZBTFNFKTsKKyAgIGVsbV9vYmplY3RfZm9jdXNfc2V0KHdpbmRvdy0+c2VhcmNo
LnNlYXJjaF9maWVsZCwgRUlOQV9UUlVFKTsKK30KKworc3RhdGljIHZvaWQKK190b29sdGlwX3Rl
eHRfc2V0KHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5m
bykKK3sKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2Vy
X2RhdGE7CisgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWV2ZW50X2luZm87
CisKKyAgIGVsbV9vYmplY3RfdG9vbHRpcF90ZXh0X3NldCh3aW5kb3ctPmVsbV93aW5kb3csIG1l
c3NhZ2UpOworICAgd2luZG93LT50b29sdGlwLnRleHRfc2V0ID0gRUlOQV9UUlVFOworICAgd2lu
ZG93X3Rvb2x0aXBfdXBkYXRlKHdpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkCitfdG9vbHRpcF90
ZXh0X3Vuc2V0KHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRf
aW5mbykKK3sKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1
c2VyX2RhdGE7CisKKyAgIHdpbmRvd190b29sdGlwX2hpZGUod2luZG93KTsKKyAgIGVsbV9vYmpl
Y3RfdG9vbHRpcF91bnNldCh3aW5kb3ctPmVsbV93aW5kb3cpOworICAgd2luZG93LT50b29sdGlw
LnRleHRfc2V0ID0gRUlOQV9GQUxTRTsKK30KKworc3RhdGljIHZvaWQKK19uYXZpZ2F0aW9uX3Bv
bGljeV9kZWNpc2lvbl9jYih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQg
KmV2ZW50X2luZm8pCit7CisgICBFd2tfTmF2aWdhdGlvbl9Qb2xpY3lfRGVjaXNpb24gKmRlY2lz
aW9uID0gKEV3a19OYXZpZ2F0aW9uX1BvbGljeV9EZWNpc2lvbiAqKWV2ZW50X2luZm87CisKKyAg
IGlmIChld2tfbmF2aWdhdGlvbl9wb2xpY3lfbW91c2VfYnV0dG9uX2dldChkZWNpc2lvbikgPT0g
RVdLX0VWRU5UX01PVVNFX0JVVFRPTl9NSURETEUpIHsKKyAgICAgQnJvd3Nlcl9XaW5kb3cgKndp
bmRvdyA9IHdpbmRvd19jcmVhdGUoTlVMTCwgMCwgMCk7CisgICAgIGV3a192aWV3X3VybF9zZXQo
d2luZG93LT5ld2tfdmlldywgZXdrX3VybF9yZXF1ZXN0X3VybF9nZXQoZXdrX25hdmlnYXRpb25f
cG9saWN5X3JlcXVlc3RfZ2V0KGRlY2lzaW9uKSkpOworICAgICB3aW5kb3dzID0gZWluYV9saXN0
X2FwcGVuZCh3aW5kb3dzLCB3aW5kb3cpOworICAgICBJTkZPKCJNb3VzZSBtaWRkbGUgYnV0dG9u
IHByZXNzZWQsIG9wZW4gbGluayBpbiBuZXcgd2luZG93Iik7CisKKyAgICAgZXdrX25hdmlnYXRp
b25fcG9saWN5X2RlY2lzaW9uX3JlamVjdChkZWNpc2lvbik7CisgICB9Cit9CisKK3N0YXRpYyB2
b2lkCitfc2VhcmNoX2J1dHRvbl9jbGlja2VkX2NiKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmpl
Y3QgKmhvbWVfYnV0dG9uLCB2b2lkICpldmVudF9pbmZvKQoreworICAgQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKworICAgc2VhcmNoX2JveF9z
aG93KHdpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkCitfaG9tZV9idXR0b25fY2xpY2tlZF9jYih2
b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpob21lX2J1dHRvbiwgdm9pZCAqZXZlbnRfaW5m
bykKK3sKKyAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKil1c2Vy
X2RhdGE7CisKKyAgIGV3a192aWV3X3VybF9zZXQod2luZG93LT5ld2tfdmlldywgREVGQVVMVF9V
UkwpOworfQorCitzdGF0aWMgdm9pZAorX3dpbmRvd19kZWxldGlvbl9jYih2b2lkICp1c2VyX2Rh
dGEsIEV2YXNfT2JqZWN0ICplbG1fd2luZG93LCB2b2lkICpldmVudF9pbmZvKQoreworICAgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKKyAgIGV3
a192aWV3X3RyeV9jbG9zZSh3aW5kb3ctPmV3a192aWV3KTsKK30KKworc3RhdGljIEV2YXNfT2Jq
ZWN0ICoKK19jcmVhdGVfdG9vbGJhcl9idXR0b24oRXZhc19PYmplY3QgKmVsbV93aW5kb3csIGNv
bnN0IGNoYXIgKmljb25fbmFtZSkKK3sKKyAgIEV2YXNfT2JqZWN0ICpidXR0b24gPSBlbG1fYnV0
dG9uX2FkZChlbG1fd2luZG93KTsKKworICAgRXZhc19PYmplY3QgKmljb24gPSBlbG1faWNvbl9h
ZGQoZWxtX3dpbmRvdyk7CisgICBlbG1faWNvbl9zdGFuZGFyZF9zZXQoaWNvbiwgaWNvbl9uYW1l
KTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9tYXhfc2V0KGljb24sIFRPT0xfQkFSX0lDT05f
U0laRSwgVE9PTF9CQVJfSUNPTl9TSVpFKTsKKyAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChpY29u
LCAwLCAyNTUsIDI1NSwgMjU1KTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coaWNvbik7CisgICBlbG1f
b2JqZWN0X3BhcnRfY29udGVudF9zZXQoYnV0dG9uLCAiaWNvbiIsIGljb24pOworICAgZXZhc19v
YmplY3Rfc2l6ZV9oaW50X21pbl9zZXQoYnV0dG9uLCBUT09MX0JBUl9CVVRUT05fU0laRSwgVE9P
TF9CQVJfQlVUVE9OX1NJWkUpOworCisgICByZXR1cm4gYnV0dG9uOworfQorCitzdGF0aWMgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoRXdrX1ZpZXdfQ29uZmlndXJhdGlvbiogY29uZmln
dXJhdGlvbiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgQnJvd3Nlcl9XaW5kb3cgKndp
bmRvdyA9IGNhbGxvYygxLCBzaXplb2YoQnJvd3Nlcl9XaW5kb3cpKTsKKyAgIGlmICghd2luZG93
KSB7CisgICAgIEVSUk9SKCJDb3VsZCBub3QgY3JlYXRlIGJyb3dzZXIgd2luZG93LiIpOworICAg
ICByZXR1cm4gTlVMTDsKKyAgIH0KKworICAgLyogSW5pdGlhbGl6ZSB0b29sdGlwIGluZm9ybWF0
aW9uICovCisgICB3aW5kb3ctPnRvb2x0aXAuc2hvd190aW1lciA9IE5VTEw7CisgICB3aW5kb3ct
PnRvb2x0aXAuYWN0aXZhdGVkID0gRUlOQV9GQUxTRTsKKyAgIHdpbmRvdy0+dG9vbHRpcC50ZXh0
X3NldCA9IEVJTkFfRkFMU0U7CisgICB3aW5kb3ctPnRvb2x0aXAuc2hvd24gPSBFSU5BX0ZBTFNF
OworCisgICAvKiBDcmVhdGUgd2luZG93ICovCisgICB3aW5kb3ctPmVsbV93aW5kb3cgPSBlbG1f
d2luX2FkZChOVUxMLCAibWluaWJyb3dzZXItd2luZG93IiwgRUxNX1dJTl9CQVNJQyk7CisgICBl
bG1fd2luX3RpdGxlX3NldCh3aW5kb3ctPmVsbV93aW5kb3csIEFQUF9OQU1FKTsKKyAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmVsbV93aW5kb3csICJkZWxldGUscmVx
dWVzdCIsIF93aW5kb3dfZGVsZXRpb25fY2IsIHdpbmRvdyk7CisKKyAgIC8qIENyZWF0ZSB3aW5k
b3cgYmFja2dyb3VuZCAqLworICAgRXZhc19PYmplY3QgKmJnID0gZWxtX2JnX2FkZCh3aW5kb3ct
PmVsbV93aW5kb3cpOworICAgZWxtX2JnX2NvbG9yX3NldChiZywgMTkzLCAxOTIsIDE5MSk7Cisg
ICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldChiZywgRVZBU19ISU5UX0VYUEFORCwg
RVZBU19ISU5UX0VYUEFORCk7CisgICBlbG1fd2luX3Jlc2l6ZV9vYmplY3RfYWRkKHdpbmRvdy0+
ZWxtX3dpbmRvdywgYmcpOworICAgZXZhc19vYmplY3Rfc2hvdyhiZyk7CisKKyAgIC8qIENyZWF0
ZSBjb25mb3JtYW50IHdpZGdldC4gKi8KKyAgIEV2YXNfT2JqZWN0ICpjb25mb3JtYW50ID0gZWxt
X2NvbmZvcm1hbnRfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7CisgICBldmFzX29iamVjdF9zaXpl
X2hpbnRfd2VpZ2h0X3NldChjb25mb3JtYW50LCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRf
RVhQQU5EKTsKKyAgIGVsbV93aW5fcmVzaXplX29iamVjdF9hZGQod2luZG93LT5lbG1fd2luZG93
LCBjb25mb3JtYW50KTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coY29uZm9ybWFudCk7CisKKyAgIC8q
IENyZWF0ZSB2ZXJ0aWNhbCBsYXlvdXQgKi8KKyAgIHdpbmRvdy0+dmVydGljYWxfbGF5b3V0ID0g
ZWxtX2JveF9hZGQod2luZG93LT5lbG1fd2luZG93KTsKKyAgIGVsbV9vYmplY3RfY29udGVudF9z
ZXQoY29uZm9ybWFudCwgd2luZG93LT52ZXJ0aWNhbF9sYXlvdXQpOworICAgZWxtX2JveF9wYWRk
aW5nX3NldCh3aW5kb3ctPnZlcnRpY2FsX2xheW91dCwgMCwgMik7CisgICBldmFzX29iamVjdF9z
aXplX2hpbnRfd2VpZ2h0X3NldCh3aW5kb3ctPnZlcnRpY2FsX2xheW91dCwgRVZBU19ISU5UX0VY
UEFORCwgRVZBU19ISU5UX0VYUEFORCk7CisgICBldmFzX29iamVjdF9zaG93KHdpbmRvdy0+dmVy
dGljYWxfbGF5b3V0KTsKKworICAgLyogQ3JlYXRlIGhvcml6b250YWwgbGF5b3V0IGZvciB0b3Ag
YmFyICovCisgICB3aW5kb3ctPmhvcml6b250YWxfbGF5b3V0ID0gZWxtX2JveF9hZGQod2luZG93
LT5lbG1fd2luZG93KTsKKyAgIGVsbV9ib3hfaG9yaXpvbnRhbF9zZXQod2luZG93LT5ob3Jpem9u
dGFsX2xheW91dCwgRUlOQV9UUlVFKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93ZWlnaHRf
c2V0KHdpbmRvdy0+aG9yaXpvbnRhbF9sYXlvdXQsIEVWQVNfSElOVF9FWFBBTkQsIDAuMCk7Cisg
ICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KHdpbmRvdy0+aG9yaXpvbnRhbF9sYXlv
dXQsIEVWQVNfSElOVF9GSUxMLCAwLjApOworICAgZWxtX2JveF9wYWNrX2VuZCh3aW5kb3ctPnZl
cnRpY2FsX2xheW91dCwgd2luZG93LT5ob3Jpem9udGFsX2xheW91dCk7CisgICBldmFzX29iamVj
dF9zaG93KHdpbmRvdy0+aG9yaXpvbnRhbF9sYXlvdXQpOworCisgICAvKiBDcmVhdGUgQmFjayBi
dXR0b24gKi8KKyAgIHdpbmRvdy0+YmFja19idXR0b24gPSBfY3JlYXRlX3Rvb2xiYXJfYnV0dG9u
KHdpbmRvdy0+ZWxtX3dpbmRvdywgImFycm93X2xlZnQiKTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmJhY2tfYnV0dG9uLCAiY2xpY2tlZCIsIF9iYWNrX2J1dHRv
bl9jbGlja2VkX2NiLCB3aW5kb3cpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KHdpbmRvdy0+YmFja19idXR0b24sICJyZXBlYXRlZCIsIF9iYWNrX2J1dHRvbl9sb25ncHJlc3Nf
Y2IsIHdpbmRvdyk7CisgICBlbG1fb2JqZWN0X3Rvb2x0aXBfdGV4dF9zZXQod2luZG93LT5iYWNr
X2J1dHRvbiwgIkNsaWNrIHRvIGdvIGJhY2ssIGxvbmdwcmVzcyB0byBzZWUgc2Vzc2lvbiBoaXN0
b3J5Iik7CisgICBlbG1fb2JqZWN0X3Rvb2x0aXBfd2luZG93X21vZGVfc2V0KHdpbmRvdy0+YmFj
a19idXR0b24sIEVJTkFfVFJVRSk7CisgICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldCh3aW5kb3ct
PmJhY2tfYnV0dG9uLCBFSU5BX1RSVUUpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdo
dF9zZXQod2luZG93LT5iYWNrX2J1dHRvbiwgMC4wLCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAgIGV2
YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQod2luZG93LT5iYWNrX2J1dHRvbiwgMC4wLCAw
LjUpOworICAgZWxtX2JveF9wYWNrX2VuZCh3aW5kb3ctPmhvcml6b250YWxfbGF5b3V0LCB3aW5k
b3ctPmJhY2tfYnV0dG9uKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT5iYWNrX2J1dHRv
bik7CisKKyAgIC8qIENyZWF0ZSBGb3J3YXJkIGJ1dHRvbiAqLworICAgd2luZG93LT5mb3J3YXJk
X2J1dHRvbiA9IF9jcmVhdGVfdG9vbGJhcl9idXR0b24od2luZG93LT5lbG1fd2luZG93LCAiYXJy
b3dfcmlnaHQiKTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmZv
cndhcmRfYnV0dG9uLCAiY2xpY2tlZCIsIF9mb3J3YXJkX2J1dHRvbl9jbGlja2VkX2NiLCB3aW5k
b3cpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+Zm9yd2FyZF9i
dXR0b24sICJyZXBlYXRlZCIsIF9mb3J3YXJkX2J1dHRvbl9sb25ncHJlc3NfY2IsIHdpbmRvdyk7
CisgICBlbG1fb2JqZWN0X3Rvb2x0aXBfdGV4dF9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRvbiwg
IkNsaWNrIHRvIGdvIGZvcndhcmQsIGxvbmdwcmVzcyB0byBzZWUgc2Vzc2lvbiBoaXN0b3J5Iik7
CisgICBlbG1fb2JqZWN0X3Rvb2x0aXBfd2luZG93X21vZGVfc2V0KHdpbmRvdy0+Zm9yd2FyZF9i
dXR0b24sIEVJTkFfVFJVRSk7CisgICBlbG1fb2JqZWN0X2Rpc2FibGVkX3NldCh3aW5kb3ctPmZv
cndhcmRfYnV0dG9uLCBFSU5BX1RSVUUpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdo
dF9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRvbiwgMC4wLCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAg
IGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRvbiwg
MC4wLCAwLjUpOworICAgZWxtX2JveF9wYWNrX2VuZCh3aW5kb3ctPmhvcml6b250YWxfbGF5b3V0
LCB3aW5kb3ctPmZvcndhcmRfYnV0dG9uKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT5m
b3J3YXJkX2J1dHRvbik7CisKKyAgIC8qIENyZWF0ZSBTZWFyY2ggYnV0dG9uICovCisgICBFdmFz
X09iamVjdCAqc2VhcmNoX2J1dHRvbiA9IF9jcmVhdGVfdG9vbGJhcl9idXR0b24od2luZG93LT5l
bG1fd2luZG93LCAidG9vbGJhci9zZWFyY2giKTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2FkZChzZWFyY2hfYnV0dG9uLCAiY2xpY2tlZCIsIF9zZWFyY2hfYnV0dG9uX2NsaWNrZWRf
Y2IsIHdpbmRvdyk7CisgICBlbG1fb2JqZWN0X3Rvb2x0aXBfdGV4dF9zZXQoc2VhcmNoX2J1dHRv
biwgIkZpbmQgdGV4dCIpOworICAgZWxtX29iamVjdF90b29sdGlwX3dpbmRvd19tb2RlX3NldChz
ZWFyY2hfYnV0dG9uLCBFSU5BX1RSVUUpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdo
dF9zZXQoc2VhcmNoX2J1dHRvbiwgMC4wLCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAgIGV2YXNfb2Jq
ZWN0X3NpemVfaGludF9hbGlnbl9zZXQoc2VhcmNoX2J1dHRvbiwgMS4wLCAwLjUpOworICAgZWxt
X2JveF9wYWNrX2VuZCh3aW5kb3ctPmhvcml6b250YWxfbGF5b3V0LCBzZWFyY2hfYnV0dG9uKTsK
KyAgIGV2YXNfb2JqZWN0X3Nob3coc2VhcmNoX2J1dHRvbik7CisKKyAgIC8qIENyZWF0ZSBVUkwg
YmFyICovCisgICB3aW5kb3ctPnVybF9iYXIgPSBlbG1fZW50cnlfYWRkKHdpbmRvdy0+ZWxtX3dp
bmRvdyk7CisgICBlbG1fZW50cnlfc2Nyb2xsYWJsZV9zZXQod2luZG93LT51cmxfYmFyLCBFSU5B
X1RSVUUpOworICAgZWxtX3Njcm9sbGVyX3BvbGljeV9zZXQod2luZG93LT51cmxfYmFyLCBFTE1f
U0NST0xMRVJfUE9MSUNZX09GRiwgRUxNX1NDUk9MTEVSX1BPTElDWV9PRkYpOworICAgZWxtX2Vu
dHJ5X3NpbmdsZV9saW5lX3NldCh3aW5kb3ctPnVybF9iYXIsIEVJTkFfVFJVRSk7CisgICBlbG1f
ZW50cnlfY25wX21vZGVfc2V0KHdpbmRvdy0+dXJsX2JhciwgRUxNX0NOUF9NT0RFX1BMQUlOVEVY
VCk7CisgICBlbG1fZW50cnlfdGV4dF9zdHlsZV91c2VyX3B1c2god2luZG93LT51cmxfYmFyLCAi
REVGQVVMVD0nZm9udF9zaXplPTE4JyIpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
YWRkKHdpbmRvdy0+dXJsX2JhciwgImFjdGl2YXRlZCIsIF91cmxfYmFyX2FjdGl2YXRlZF9jYiwg
d2luZG93KTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPnVybF9i
YXIsICJjbGlja2VkIiwgX3VybF9iYXJfY2xpY2tlZF9jYiwgd2luZG93KTsKKyAgIGV2YXNfb2Jq
ZWN0X3NpemVfaGludF93ZWlnaHRfc2V0KHdpbmRvdy0+dXJsX2JhciwgRVZBU19ISU5UX0VYUEFO
RCwgRVZBU19ISU5UX0VYUEFORCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0
KHdpbmRvdy0+dXJsX2JhciwgRVZBU19ISU5UX0ZJTEwsIEVWQVNfSElOVF9GSUxMKTsKKyAgIGVs
bV9ib3hfcGFja19lbmQod2luZG93LT5ob3Jpem9udGFsX2xheW91dCwgd2luZG93LT51cmxfYmFy
KTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93LT51cmxfYmFyKTsKKworICAgLyogQ3JlYXRl
IFJlZnJlc2ggYnV0dG9uICovCisgICBFdmFzX09iamVjdCAqcmVmcmVzaF9idXR0b24gPSBfY3Jl
YXRlX3Rvb2xiYXJfYnV0dG9uKHdpbmRvdy0+ZWxtX3dpbmRvdywgInJlZnJlc2giKTsKKyAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChyZWZyZXNoX2J1dHRvbiwgImNsaWNrZWQiLCBf
cmVmcmVzaF9idXR0b25fY2xpY2tlZF9jYiwgd2luZG93KTsKKyAgIGVsbV9vYmplY3RfdG9vbHRp
cF90ZXh0X3NldChyZWZyZXNoX2J1dHRvbiwgIlJlbG9hZCBwYWdlIik7CisgICBlbG1fb2JqZWN0
X3Rvb2x0aXBfd2luZG93X21vZGVfc2V0KHJlZnJlc2hfYnV0dG9uLCBFSU5BX1RSVUUpOworICAg
ZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQocmVmcmVzaF9idXR0b24sIDAuMCwgRVZB
U19ISU5UX0VYUEFORCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KHJlZnJl
c2hfYnV0dG9uLCAxLjAsIDAuNSk7CisgICBlbG1fYm94X3BhY2tfZW5kKHdpbmRvdy0+aG9yaXpv
bnRhbF9sYXlvdXQsIHJlZnJlc2hfYnV0dG9uKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cocmVmcmVz
aF9idXR0b24pOworCisgICAvKiBDcmVhdGUgU3RvcCBidXR0b24gKi8KKyAgIEV2YXNfT2JqZWN0
ICpzdG9wX2J1dHRvbiA9IF9jcmVhdGVfdG9vbGJhcl9idXR0b24od2luZG93LT5lbG1fd2luZG93
LCAiY2xvc2UiKTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChzdG9wX2J1dHRv
biwgImNsaWNrZWQiLCBfc3RvcF9idXR0b25fY2xpY2tlZF9jYiwgd2luZG93KTsKKyAgIGVsbV9v
YmplY3RfdG9vbHRpcF90ZXh0X3NldChzdG9wX2J1dHRvbiwgIlN0b3AgcGFnZSBsb2FkIik7Cisg
ICBlbG1fb2JqZWN0X3Rvb2x0aXBfd2luZG93X21vZGVfc2V0KHN0b3BfYnV0dG9uLCBFSU5BX1RS
VUUpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQoc3RvcF9idXR0b24sIDAu
MCwgRVZBU19ISU5UX0VYUEFORCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0
KHN0b3BfYnV0dG9uLCAxLjAsIDAuNSk7CisgICBlbG1fYm94X3BhY2tfZW5kKHdpbmRvdy0+aG9y
aXpvbnRhbF9sYXlvdXQsIHN0b3BfYnV0dG9uKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coc3RvcF9i
dXR0b24pOworCisgICAvKiBDcmVhdGUgSG9tZSBidXR0b24gKi8KKyAgIEV2YXNfT2JqZWN0ICpo
b21lX2J1dHRvbiA9IF9jcmVhdGVfdG9vbGJhcl9idXR0b24od2luZG93LT5lbG1fd2luZG93LCAi
aG9tZSIpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGhvbWVfYnV0dG9uLCAi
Y2xpY2tlZCIsIF9ob21lX2J1dHRvbl9jbGlja2VkX2NiLCB3aW5kb3cpOworICAgZWxtX29iamVj
dF90b29sdGlwX3RleHRfc2V0KGhvbWVfYnV0dG9uLCAiSG9tZSBwYWdlIik7CisgICBlbG1fb2Jq
ZWN0X3Rvb2x0aXBfd2luZG93X21vZGVfc2V0KGhvbWVfYnV0dG9uLCBFSU5BX1RSVUUpOworICAg
ZXZhc19vYmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQoaG9tZV9idXR0b24sIDAuMCwgRVZBU19I
SU5UX0VYUEFORCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KGhvbWVfYnV0
dG9uLCAxLjAsIDAuNSk7CisgICBlbG1fYm94X3BhY2tfZW5kKHdpbmRvdy0+aG9yaXpvbnRhbF9s
YXlvdXQsIGhvbWVfYnV0dG9uKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3coaG9tZV9idXR0b24pOwor
CisgICAvKiBDcmVhdGUgU2VhcmNoIGJhciAqLworICAgd2luZG93LT5zZWFyY2guc2VhcmNoX2Jh
ciA9IGVsbV9ib3hfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7CisgICBlbG1fYm94X2hvcml6b250
YWxfc2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9iYXIsIEVJTkFfVFJVRSk7CisgICBldmFzX29i
amVjdF9zaXplX2hpbnRfbWluX3NldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfYmFyLCBTRUFSQ0hf
RklFTERfU0laRSArIDIgKiBTRUFSQ0hfQlVUVE9OX1NJWkUsIDApOworICAgZXZhc19vYmplY3Rf
c2l6ZV9oaW50X2FsaWduX3NldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfYmFyLCBFVkFTX0hJTlRf
RklMTCwgRVZBU19ISU5UX0ZJTEwpOworICAgZWxtX2JveF9wYWNrX2VuZCh3aW5kb3ctPnZlcnRp
Y2FsX2xheW91dCwgd2luZG93LT5zZWFyY2guc2VhcmNoX2Jhcik7CisKKyAgIC8qIENyZWF0ZSBT
ZWFyY2ggZmllbGQgKi8KKyAgIHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCA9IGVsbV9lbnRy
eV9hZGQod2luZG93LT5lbG1fd2luZG93KTsKKyAgIGVsbV9lbnRyeV9zY3JvbGxhYmxlX3NldCh3
aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQsIEVJTkFfVFJVRSk7CisgICBlbG1fc2Nyb2xsZXJf
cG9saWN5X3NldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGQsIEVMTV9TQ1JPTExFUl9QT0xJ
Q1lfT0ZGLCBFTE1fU0NST0xMRVJfUE9MSUNZX09GRik7CisgICBlbG1fZW50cnlfc2luZ2xlX2xp
bmVfc2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCwgRUlOQV9UUlVFKTsKKyAgIGVsbV9l
bnRyeV9jbnBfbW9kZV9zZXQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCBFTE1fQ05QX01P
REVfUExBSU5URVhUKTsKKyAgIGVsbV9lbnRyeV90ZXh0X3N0eWxlX3VzZXJfcHVzaCh3aW5kb3ct
PnNlYXJjaC5zZWFyY2hfZmllbGQsICJERUZBVUxUPSdmb250X3NpemU9MTQnIik7CisgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCAi
YWN0aXZhdGVkIiwgX3NlYXJjaF9maWVsZF9hY3RpdmF0ZWRfY2IsIHdpbmRvdyk7CisgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCAi
Y2hhbmdlZCIsIF9zZWFyY2hfZmllbGRfYWN0aXZhdGVkX2NiLCB3aW5kb3cpOworICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCwgImFi
b3J0ZWQiLCBfc2VhcmNoX2ZpZWxkX2Fib3J0ZWRfY2IsIHdpbmRvdyk7CisgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkLCAiY2xpY2tl
ZCIsIF9zZWFyY2hfZmllbGRfY2xpY2tlZF9jYiwgd2luZG93KTsKKyAgIGV2YXNfb2JqZWN0X3Np
emVfaGludF93ZWlnaHRfc2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCwgRVZBU19ISU5U
X0VYUEFORCwgRVZBU19ISU5UX0VYUEFORCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxp
Z25fc2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZCwgRVZBU19ISU5UX0ZJTEwsIEVWQVNf
SElOVF9GSUxMKTsKKyAgIGVsbV9ib3hfcGFja19lbmQod2luZG93LT5zZWFyY2guc2VhcmNoX2Jh
ciwgd2luZG93LT5zZWFyY2guc2VhcmNoX2ZpZWxkKTsKKworICAgLyogQ3JlYXRlIFNlYXJjaCBi
YWNrd2FyZCBidXR0b24gKi8KKyAgIHdpbmRvdy0+c2VhcmNoLmJhY2t3YXJkX2J1dHRvbiA9IF9j
cmVhdGVfdG9vbGJhcl9idXR0b24od2luZG93LT5lbG1fd2luZG93LCAiYXJyb3dfdXAiKTsKKyAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPnNlYXJjaC5iYWNrd2FyZF9i
dXR0b24sICJjbGlja2VkIiwgX3NlYXJjaF9iYWNrd2FyZF9idXR0b25fY2xpY2tlZF9jYiwgd2lu
ZG93KTsKKyAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KHdpbmRvdy0+c2VhcmNoLmJhY2t3YXJk
X2J1dHRvbiwgRUlOQV9GQUxTRSk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3Nl
dCh3aW5kb3ctPnNlYXJjaC5iYWNrd2FyZF9idXR0b24sIDAuMCwgRVZBU19ISU5UX0VYUEFORCk7
CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KHdpbmRvdy0+c2VhcmNoLmJhY2t3
YXJkX2J1dHRvbiwgMS4wLCAwLjUpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X21pbl9zZXQo
d2luZG93LT5zZWFyY2guYmFja3dhcmRfYnV0dG9uLCBTRUFSQ0hfQlVUVE9OX1NJWkUsIFNFQVJD
SF9CVVRUT05fU0laRSk7CisgICBlbG1fYm94X3BhY2tfZW5kKHdpbmRvdy0+c2VhcmNoLnNlYXJj
aF9iYXIsIHdpbmRvdy0+c2VhcmNoLmJhY2t3YXJkX2J1dHRvbik7CisKKyAgIC8qIENyZWF0ZSBT
ZWFyY2ggZm9yd2FyZHdhcmQgYnV0dG9uICovCisgICB3aW5kb3ctPnNlYXJjaC5mb3J3YXJkX2J1
dHRvbiA9IF9jcmVhdGVfdG9vbGJhcl9idXR0b24od2luZG93LT5lbG1fd2luZG93LCAiYXJyb3df
ZG93biIpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+c2VhcmNo
LmZvcndhcmRfYnV0dG9uLCAiY2xpY2tlZCIsIF9zZWFyY2hfZm9yd2FyZF9idXR0b25fY2xpY2tl
ZF9jYiwgd2luZG93KTsKKyAgIGVsbV9vYmplY3RfZGlzYWJsZWRfc2V0KHdpbmRvdy0+c2VhcmNo
LmZvcndhcmRfYnV0dG9uLCBFSU5BX0ZBTFNFKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF93
ZWlnaHRfc2V0KHdpbmRvdy0+c2VhcmNoLmZvcndhcmRfYnV0dG9uLCAwLjAsIEVWQVNfSElOVF9F
WFBBTkQpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X2FsaWduX3NldCh3aW5kb3ctPnNlYXJj
aC5mb3J3YXJkX2J1dHRvbiwgMS4wLCAwLjUpOworICAgZXZhc19vYmplY3Rfc2l6ZV9oaW50X21p
bl9zZXQod2luZG93LT5zZWFyY2guZm9yd2FyZF9idXR0b24sIFNFQVJDSF9CVVRUT05fU0laRSwg
U0VBUkNIX0JVVFRPTl9TSVpFKTsKKyAgIGVsbV9ib3hfcGFja19lbmQod2luZG93LT5zZWFyY2gu
c2VhcmNoX2Jhciwgd2luZG93LT5zZWFyY2guZm9yd2FyZF9idXR0b24pOworCisgICAvKiBDcmVh
dGUgU2VhcmNoIGNvdW50IGZpZWxkICovCisgICB3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGRf
Y291bnQgPSBlbG1fbGFiZWxfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7CisgICBldmFzX29iamVj
dF9zaXplX2hpbnRfd2VpZ2h0X3NldCh3aW5kb3ctPnNlYXJjaC5zZWFyY2hfZmllbGRfY291bnQs
IDAuMCwgRVZBU19ISU5UX0VYUEFORCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25f
c2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZF9jb3VudCwgRVZBU19ISU5UX0ZJTEwsIEVW
QVNfSElOVF9GSUxMKTsKKyAgIGVsbV9vYmplY3RfdGV4dF9zZXQod2luZG93LT5zZWFyY2guc2Vh
cmNoX2ZpZWxkX2NvdW50LCAiIik7CisgICBlbG1fYm94X3BhY2tfZW5kKHdpbmRvdy0+c2VhcmNo
LnNlYXJjaF9iYXIsIHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9maWVsZF9jb3VudCk7CisKKyAgIC8q
IENyZWF0ZSBTZWFyY2ggQ2FzZSBTZW5zaXRpdmUgT3B0aW9uIGNoZWNrIGJveCAqLworICAgd2lu
ZG93LT5zZWFyY2guc2VhcmNoX2Nhc2VfY2hlY2tfYm94ID0gZWxtX2NoZWNrX2FkZCh3aW5kb3ct
PmVsbV93aW5kb3cpOworICAgZWxtX29iamVjdF90ZXh0X3NldCh3aW5kb3ctPnNlYXJjaC5zZWFy
Y2hfY2FzZV9jaGVja19ib3gsICJDYXNlIFNlbnNpdGl2ZSIpOworICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9jYXNlX2NoZWNrX2JveCwgImNo
YW5nZWQiLCBfc2VhcmNoX2Nhc2Vfb3B0aW9uX2NoYW5nZWQsIHdpbmRvdyk7CisgICBlbG1fYm94
X3BhY2tfZW5kKHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9iYXIsIHdpbmRvdy0+c2VhcmNoLnNlYXJj
aF9jYXNlX2NoZWNrX2JveCk7CisKKyAgIC8qIENyZWF0ZSBTZWFyY2ggV29yZCBTdGFydCBPcHRp
b24gY2hlY2sgYm94ICovCisgICB3aW5kb3ctPnNlYXJjaC5zZWFyY2hfd29yZF9zdGFydF9jaGVj
a19ib3ggPSBlbG1fY2hlY2tfYWRkKHdpbmRvdy0+ZWxtX3dpbmRvdyk7CisgICBlbG1fb2JqZWN0
X3RleHRfc2V0KHdpbmRvdy0+c2VhcmNoLnNlYXJjaF93b3JkX3N0YXJ0X2NoZWNrX2JveCwgIk9u
bHkgV29yZCBTdGFydCIpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRv
dy0+c2VhcmNoLnNlYXJjaF93b3JkX3N0YXJ0X2NoZWNrX2JveCwgImNoYW5nZWQiLCBfc2VhcmNo
X3dvcmRfc3RhcnRfb3B0aW9uX2NoYW5nZWRfY2IsIHdpbmRvdyk7CisgICBlbG1fYm94X3BhY2tf
ZW5kKHdpbmRvdy0+c2VhcmNoLnNlYXJjaF9iYXIsIHdpbmRvdy0+c2VhcmNoLnNlYXJjaF93b3Jk
X3N0YXJ0X2NoZWNrX2JveCk7CisKKyAgIC8qIENyZWF0ZSBTZWFyY2ggY2xvc2UgYnV0dG9uICov
CisgICB3aW5kb3ctPnNlYXJjaC5jbG9zZV9idXR0b24gPSBfY3JlYXRlX3Rvb2xiYXJfYnV0dG9u
KHdpbmRvdy0+ZWxtX3dpbmRvdywgImNsb3NlIik7CisgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19hZGQod2luZG93LT5zZWFyY2guY2xvc2VfYnV0dG9uLCAiY2xpY2tlZCIsIF9zZWFyY2hf
Y2xvc2VfYnV0dG9uX2NsaWNrZWRfY2IsIHdpbmRvdyk7CisgICBlbG1fb2JqZWN0X2Rpc2FibGVk
X3NldCh3aW5kb3ctPnNlYXJjaC5jbG9zZV9idXR0b24sIEVJTkFfRkFMU0UpOworICAgZXZhc19v
YmplY3Rfc2l6ZV9oaW50X3dlaWdodF9zZXQod2luZG93LT5zZWFyY2guY2xvc2VfYnV0dG9uLCBF
VkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRfRVhQQU5EKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVf
aGludF9hbGlnbl9zZXQod2luZG93LT5zZWFyY2guY2xvc2VfYnV0dG9uLCAxLjAsIDAuNSk7Cisg
ICBldmFzX29iamVjdF9zaXplX2hpbnRfbWluX3NldCh3aW5kb3ctPnNlYXJjaC5jbG9zZV9idXR0
b24sIFNFQVJDSF9CVVRUT05fU0laRSwgU0VBUkNIX0JVVFRPTl9TSVpFKTsKKyAgIGVsbV9ib3hf
cGFja19lbmQod2luZG93LT5zZWFyY2guc2VhcmNoX2Jhciwgd2luZG93LT5zZWFyY2guY2xvc2Vf
YnV0dG9uKTsKKworICAgLyogQ3JlYXRlIGhpc3RvcnkgYm94ICovCisgICB3aW5kb3ctPmhpc3Rv
cnkuaGlzdG9yeV9ib3ggPSBlbG1fYm94X2FkZCh3aW5kb3ctPmVsbV93aW5kb3cpOworICAgZXZh
c19vYmplY3Rfc2l6ZV9oaW50X2FzcGVjdF9zZXQod2luZG93LT5oaXN0b3J5Lmhpc3RvcnlfYm94
LCBFVkFTX0FTUEVDVF9DT05UUk9MX1ZFUlRJQ0FMLCAxLCAxKTsKKyAgIGV2YXNfb2JqZWN0X3Np
emVfaGludF93ZWlnaHRfc2V0KHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2JveCwgRVZBU19ISU5U
X0VYUEFORCAsIEVWQVNfSElOVF9FWFBBTkQpOworCisgICAvKiBDcmVhdGUgaGlzdG9yeSBsaXN0
ICovCisgICB3aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0ID0gZWxtX2dlbmxpc3RfYWRkKHdp
bmRvdy0+ZWxtX3dpbmRvdyk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfd2VpZ2h0X3NldCh3
aW5kb3ctPmhpc3RvcnkuaGlzdG9yeV9saXN0LCBFVkFTX0hJTlRfRVhQQU5ELCBFVkFTX0hJTlRf
RVhQQU5EKTsKKyAgIGV2YXNfb2JqZWN0X3NpemVfaGludF9hbGlnbl9zZXQod2luZG93LT5oaXN0
b3J5Lmhpc3RvcnlfbGlzdCwgRVZBU19ISU5UX0ZJTEwsIEVWQVNfSElOVF9GSUxMKTsKKyAgIGVs
bV93aW5fcmVzaXplX29iamVjdF9hZGQod2luZG93LT5lbG1fd2luZG93LCB3aW5kb3ctPmhpc3Rv
cnkuaGlzdG9yeV9ib3gpOworICAgZWxtX2JveF9wYWNrX2VuZCh3aW5kb3ctPmhpc3RvcnkuaGlz
dG9yeV9ib3gsIHdpbmRvdy0+aGlzdG9yeS5oaXN0b3J5X2xpc3QpOworCisgICAvKiBDcmVhdGUg
ZXdrX3ZpZXcgKi8KKyAgIEV3a19WaWV3X1NtYXJ0X0NsYXNzICpld2tWaWV3Q2xhc3MgPSBtaW5p
QnJvd3NlclZpZXdTbWFydENsYXNzKCk7CisgICBld2tWaWV3Q2xhc3MtPnJ1bl9qYXZhc2NyaXB0
X2FsZXJ0ID0gX2phdmFzY3JpcHRfYWxlcnRfY2I7CisgICBld2tWaWV3Q2xhc3MtPnJ1bl9qYXZh
c2NyaXB0X2NvbmZpcm0gPSBfamF2YXNjcmlwdF9jb25maXJtX2NiOworICAgZXdrVmlld0NsYXNz
LT5ydW5famF2YXNjcmlwdF9wcm9tcHQgPSBfamF2YXNjcmlwdF9wcm9tcHRfY2I7CisgICBld2tW
aWV3Q2xhc3MtPnJ1bl9qYXZhc2NyaXB0X2JlZm9yZV91bmxvYWRfY29uZmlybSA9IF9qYXZhc2Ny
aXB0X2JlZm9yZV91bmxvYWRfY29uZmlybV9jYjsKKyAgIGV3a1ZpZXdDbGFzcy0+d2luZG93X2dl
b21ldHJ5X2dldCA9IF93aW5kb3dfZ2VvbWV0cnlfZ2V0OworICAgZXdrVmlld0NsYXNzLT53aW5k
b3dfZ2VvbWV0cnlfc2V0ID0gX3dpbmRvd19nZW9tZXRyeV9zZXQ7CisgICBld2tWaWV3Q2xhc3Mt
PmZ1bGxzY3JlZW5fZW50ZXIgPSBfZnVsbHNjcmVlbl9lbnRlcl9jYjsKKyAgIGV3a1ZpZXdDbGFz
cy0+ZnVsbHNjcmVlbl9leGl0ID0gX2Z1bGxzY3JlZW5fZXhpdF9jYjsKKyAgIGV3a1ZpZXdDbGFz
cy0+d2luZG93X2NyZWF0ZSA9IF93aW5kb3dfY3JlYXRlX2NiOworICAgZXdrVmlld0NsYXNzLT53
aW5kb3dfY2xvc2UgPSBfd2luZG93X2Nsb3NlX2NiOworICAgZXdrVmlld0NsYXNzLT5wb3B1cF9t
ZW51X3Nob3cgPSBfcG9wdXBfbWVudV9zaG93OworICAgZXdrVmlld0NsYXNzLT5wb3B1cF9tZW51
X2hpZGUgPSBfcG9wdXBfbWVudV9oaWRlOworICAgZXdrVmlld0NsYXNzLT5jb250ZXh0X21lbnVf
c2hvdyA9IF9jb250ZXh0X21lbnVfc2hvdzsKKyAgIGV3a1ZpZXdDbGFzcy0+Y29udGV4dF9tZW51
X2hpZGUgPSBfY29udGV4dF9tZW51X2hpZGU7CisgICBld2tWaWV3Q2xhc3MtPmlucHV0X3BpY2tl
cl9jb2xvcl9yZXF1ZXN0ID0gX2NvbG9yX3BpY2tlcl9yZXF1ZXN0X2NiOworICAgZXdrVmlld0Ns
YXNzLT5pbnB1dF9waWNrZXJfY29sb3JfZGlzbWlzcyA9IF9jb2xvcl9waWNrZXJfZGlzbWlzc19j
YjsKKworICAgRXZhcyAqZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHdpbmRvdy0+ZWxtX3dp
bmRvdyk7CisgICBFdmFzX1NtYXJ0ICpzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZld2tW
aWV3Q2xhc3MtPnNjKTsKKyAgIHdpbmRvdy0+ZXdrX3ZpZXcgPSBld2tfdmlld19hZGRfd2l0aF9j
b25maWd1cmF0aW9uKGV2YXMsIHNtYXJ0LCBjb25maWd1cmF0aW9uKTsKKworICAgRXdrX0NvbnRl
eHQgKmNvbnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldCh3aW5kb3ctPmV3a192aWV3KTsKKyAg
IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fY2hhbmdlX2NhbGxiYWNrX2FkZChld2tfY29udGV4
dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KSwgX2ljb25fY2hhbmdlZF9jYiwgd2luZG93
KTsKKworICAgZXdrX3ZpZXdfdGhlbWVfc2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIERFRkFVTFRfVEhF
TUVfRElSICIvZGVmYXVsdC5lZGoiKTsKKyAgIGlmIChkZXZpY2VfcGl4ZWxfcmF0aW8pCisgICAg
IGV3a192aWV3X2RldmljZV9waXhlbF9yYXRpb19zZXQod2luZG93LT5ld2tfdmlldywgKGZsb2F0
KWRldmljZV9waXhlbF9yYXRpbyk7CisgICBld2tfdmlld191c2VyX2FnZW50X3NldCh3aW5kb3ct
PmV3a192aWV3LCB1c2VyX2FnZW50X3N0cmluZyk7CisgICBld2tfdmlld19sYXlvdXRfZml4ZWRf
c2V0KHdpbmRvdy0+ZXdrX3ZpZXcsIGZpeGVkX2xheW91dF9lbmFibGVkKTsKKworICAgaWYgKHRv
dWNoX2V2ZW50c19lbmFibGVkKSB7CisgICAgIGV3a192aWV3X3RvdWNoX2V2ZW50c19lbmFibGVk
X3NldCh3aW5kb3ctPmV3a192aWV3LCBFSU5BX1RSVUUpOworICAgICBld2tfdmlld19tb3VzZV9l
dmVudHNfZW5hYmxlZF9zZXQod2luZG93LT5ld2tfdmlldywgRUlOQV9GQUxTRSk7CisgICB9CisK
KyAgIGlmIChiYWNrZ3JvdW5kX2NvbG9yX3N0cmluZykgeworICAgICBpbnQgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGE7CisKKyAgICAgaWYgKHNzY2FuZihiYWNrZ3JvdW5kX2NvbG9yX3N0cmluZywg
IiVkOiVkOiVkOiVkIiwgJnJlZCwgJmdyZWVuLCAmYmx1ZSwgJmFscGhhKSkKKyAgICAgICBld2tf
dmlld19iZ19jb2xvcl9zZXQod2luZG93LT5ld2tfdmlldywgcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOworICAgfQorCisgICAvKiBTZXQgdGhlIHpvb20gbGV2ZWwgdG8gZGVmYXVsdCAqLworICAg
d2luZG93LT5jdXJyZW50X3pvb21fbGV2ZWwgPSBERUZBVUxUX1pPT01fTEVWRUw7CisKKyAgIGVs
bV93aW5fZnVsbHNjcmVlbl9zZXQod2luZG93LT5lbG1fd2luZG93LCBmdWxsc2NyZWVuX2VuYWJs
ZWQpOworCisgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmll
dywgImF1dGhlbnRpY2F0aW9uLHJlcXVlc3QiLCBfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYiwg
d2luZG93KTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192
aWV3LCAiZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2IsIHdp
bmRvdyk7CisgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmll
dywgImxvYWQsZXJyb3IiLCBfZXJyb3JfY2IsIHdpbmRvdyk7CisgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImxvYWQscHJvdmlzaW9uYWwsZmFpbGVk
IiwgX2Vycm9yX2NiLCB3aW5kb3cpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KHdpbmRvdy0+ZXdrX3ZpZXcsICJsb2FkLHByb2dyZXNzIiwgX3Byb2dyZXNzX2NiLCB3aW5kb3cp
OworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJ0
aXRsZSxjaGFuZ2VkIiwgX3RpdGxlX2NoYW5nZWRfY2IsIHdpbmRvdyk7CisgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgInVybCxjaGFuZ2VkIiwgX3Vy
bF9jaGFuZ2VkX2NiLCB3aW5kb3cpOworICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KHdpbmRvdy0+ZXdrX3ZpZXcsICJiYWNrLGZvcndhcmQsbGlzdCxjaGFuZ2VkIiwgX2JhY2tfZm9y
d2FyZF9saXN0X2NoYW5nZWRfY2IsIHdpbmRvdyk7CisgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19hZGQod2luZG93LT5ld2tfdmlldywgInRleHQsZm91bmQiLCBfc2VhcmNoX3RleHRfZm91
bmRfY2IsIHdpbmRvdyk7CisgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93
LT5ld2tfdmlldywgInRvb2x0aXAsdGV4dCxzZXQiLCBfdG9vbHRpcF90ZXh0X3NldCwgd2luZG93
KTsKKyAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAi
dG9vbHRpcCx0ZXh0LHVuc2V0IiwgX3Rvb2x0aXBfdGV4dF91bnNldCwgd2luZG93KTsKKyAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAicG9saWN5LGRl
Y2lzaW9uLG5hdmlnYXRpb24iLCBfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fY2IsIHdpbmRv
dyk7CisKKyAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3
LCBFVkFTX0NBTExCQUNLX0tFWV9ET1dOLCBfa2V5X2Rvd25fY2IsIHdpbmRvdyk7CisgICBldmFz
X29iamVjdF9ldmVudF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgRVZBU19DQUxMQkFD
S19NT1VTRV9ET1dOLCBfbW91c2VfZG93bl9jYiwgd2luZG93KTsKKworICAgZXZhc19vYmplY3Rf
c2l6ZV9oaW50X3dlaWdodF9zZXQod2luZG93LT5ld2tfdmlldywgRVZBU19ISU5UX0VYUEFORCwg
RVZBU19ISU5UX0VYUEFORCk7CisgICBldmFzX29iamVjdF9zaXplX2hpbnRfYWxpZ25fc2V0KHdp
bmRvdy0+ZXdrX3ZpZXcsIEVWQVNfSElOVF9GSUxMLCBFVkFTX0hJTlRfRklMTCk7CisgICBlbG1f
Ym94X3BhY2tfYmVmb3JlKHdpbmRvdy0+dmVydGljYWxfbGF5b3V0LCB3aW5kb3ctPmV3a192aWV3
LCB3aW5kb3ctPnNlYXJjaC5zZWFyY2hfYmFyKTsKKyAgIGV2YXNfb2JqZWN0X3Nob3cod2luZG93
LT5ld2tfdmlldyk7CisKKyAgIGV2YXNfb2JqZWN0X3Jlc2l6ZSh3aW5kb3ctPmVsbV93aW5kb3cs
IHdpZHRoID8gd2lkdGggOiB3aW5kb3dfd2lkdGgsIGhlaWdodCA/IGhlaWdodCA6IHdpbmRvd19o
ZWlnaHQpOworICAgZXZhc19vYmplY3Rfc2hvdyh3aW5kb3ctPmVsbV93aW5kb3cpOworICAgc2Vh
cmNoX2JveF9oaWRlKHdpbmRvdyk7CisKKyAgIHZpZXdfZm9jdXNfc2V0KHdpbmRvdywgRUlOQV9U
UlVFKTsKKyAgIC8vIFByZXZlbnQgd2luZG93IGZyb20gc3RlYWxpbmcgd2ViIHZpZXcncyBmb2N1
cyBvbiBzdGFydCB1cC4KKyAgIGVsbV9vYmplY3RfZm9jdXNfYWxsb3dfc2V0KHdpbmRvdy0+ZWxt
X3dpbmRvdywgRUlOQV9GQUxTRSk7CisKKyAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2Fk
ZCh3aW5kb3ctPmV3a192aWV3LCBFVkFTX0NBTExCQUNLX01PVVNFX0lOLCBfbW91c2VfaW5fY2Is
IHdpbmRvdyk7CisgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQod2luZG93LT5ld2tf
dmlldywgRVZBU19DQUxMQkFDS19NT1VTRV9PVVQsIF9tb3VzZV9vdXRfY2IsIHdpbmRvdyk7Cisg
ICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgRVZBU19D
QUxMQkFDS19NT1VTRV9NT1ZFLCBfbW91c2VfbW92ZV9jYiwgd2luZG93KTsKKyAgIGV2YXNfb2Jq
ZWN0X2V2ZW50X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCBFVkFTX0NBTExCQUNLX01P
VVNFX1dIRUVMLCBfbW91c2Vfd2hlZWxfY2IsIHdpbmRvdyk7CisgICBldmFzX29iamVjdF9ldmVu
dF9jYWxsYmFja19hZGQod2luZG93LT5lbG1fd2luZG93LCBFVkFTX0NBTExCQUNLX1JFU0laRSwg
X3dpbmRvd19yZXNpemVfY2IsIHdpbmRvdyk7CisKKyAgIGVsbV9idXR0b25fYXV0b3JlcGVhdF9z
ZXQod2luZG93LT5iYWNrX2J1dHRvbiwgRUlOQV9UUlVFKTsKKyAgIGVsbV9idXR0b25fYXV0b3Jl
cGVhdF9zZXQod2luZG93LT5mb3J3YXJkX2J1dHRvbiwgRUlOQV9UUlVFKTsKKyAgIGVsbV9idXR0
b25fYXV0b3JlcGVhdF9pbml0aWFsX3RpbWVvdXRfc2V0KHdpbmRvdy0+YmFja19idXR0b24sIExP
TkdQUkVTU19JTlRFUlZBTF9TRUNPTkRTKTsKKyAgIGVsbV9idXR0b25fYXV0b3JlcGVhdF9pbml0
aWFsX3RpbWVvdXRfc2V0KHdpbmRvdy0+Zm9yd2FyZF9idXR0b24sIExPTkdQUkVTU19JTlRFUlZB
TF9TRUNPTkRTKTsKKworICAgcmV0dXJuIHdpbmRvdzsKK30KKworc3RhdGljIEV3a19WaWV3X0Nv
bmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24oKQoreworICAgIHN0YXRpYyBFd2tfVmlld19Db25m
aWd1cmF0aW9uKiBkZWZhdWx0X2NvbmZpZ3VyYXRpb24gPSAwOworCisgICAgaWYgKGRlZmF1bHRf
Y29uZmlndXJhdGlvbikKKyAgICAgIHJldHVybiBkZWZhdWx0X2NvbmZpZ3VyYXRpb247CisKKyAg
ICBkZWZhdWx0X2NvbmZpZ3VyYXRpb24gPSBld2tfdmlld19jb25maWd1cmF0aW9uX25ldygpOwor
CisgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGV3a192aWV3X2NvbmZpZ3VyYXRpb25fc2V0
dGluZ3NfZ2V0KGRlZmF1bHRfY29uZmlndXJhdGlvbik7CisgICAgZXdrX3NldHRpbmdzX2ZpbGVf
YWNjZXNzX2Zyb21fZmlsZV91cmxzX2FsbG93ZWRfc2V0KHNldHRpbmdzLCBFSU5BX1RSVUUpOwor
ICAgIGV3a19zZXR0aW5nc19lbmNvZGluZ19kZXRlY3Rvcl9lbmFibGVkX3NldChzZXR0aW5ncywg
ZW5jb2RpbmdfZGV0ZWN0b3JfZW5hYmxlZCk7CisgICAgZXdrX3NldHRpbmdzX2ZyYW1lX2ZsYXR0
ZW5pbmdfZW5hYmxlZF9zZXQoc2V0dGluZ3MsIGZyYW1lX2ZsYXR0ZW5pbmdfZW5hYmxlZCk7Cisg
ICAgZXdrX3NldHRpbmdzX2xvY2FsX3N0b3JhZ2VfZW5hYmxlZF9zZXQoc2V0dGluZ3MsIGxvY2Fs
X3N0b3JhZ2VfZW5hYmxlZCk7CisgICAgZXdrX3NldHRpbmdzX29mZmxpbmVfd2ViX2FwcGxpY2F0
aW9uX2NhY2hlX2VuYWJsZWRfc2V0KHNldHRpbmdzLCBvZmZsaW5lX3dlYl9hcHBsaWNhdGlvbl9j
YWNoZV9lbmFibGVkKTsKKyAgICBJTkZPKCJIVE1MNSBsb2NhbCBzdG9yYWdlIGlzICVzIGZvciB0
aGlzIHZpZXcuIiwgbG9jYWxfc3RvcmFnZV9lbmFibGVkID8gImVuYWJsZWQiIDogImRpc2FibGVk
Iik7CisgICAgZXdrX3NldHRpbmdzX2RldmVsb3Blcl9leHRyYXNfZW5hYmxlZF9zZXQoc2V0dGlu
Z3MsIEVJTkFfVFJVRSk7CisgICAgZXdrX3NldHRpbmdzX3ByZWZlcnJlZF9taW5pbXVtX2NvbnRl
bnRzX3dpZHRoX3NldChzZXR0aW5ncywgMCk7CisgICAgZXdrX3RleHRfY2hlY2tlcl9jb250aW51
b3VzX3NwZWxsX2NoZWNraW5nX2VuYWJsZWRfc2V0KHNwZWxsX2NoZWNraW5nX2VuYWJsZWQpOwor
ICAgIGV3a19zZXR0aW5nc193ZWJfc2VjdXJpdHlfZW5hYmxlZF9zZXQoc2V0dGluZ3MsIHdlYl9z
ZWN1cml0eV9lbmFibGVkKTsKKworICAgIHJldHVybiBkZWZhdWx0X2NvbmZpZ3VyYXRpb247Cit9
CisKK3N0YXRpYyBFd2tfQ29va2llX0FjY2VwdF9Qb2xpY3kKK3BhcnNlX2Nvb2tpZXNfcG9saWN5
KGNvbnN0IGNoYXIgKmlucHV0X3N0cmluZykKK3sKKyAgIGlmICghc3RyY21wKGlucHV0X3N0cmlu
ZywgImFsd2F5cyIpKQorICAgICByZXR1cm4gRVdLX0NPT0tJRV9BQ0NFUFRfUE9MSUNZX0FMV0FZ
UzsKKyAgIGlmICghc3RyY21wKGlucHV0X3N0cmluZywgIm5ldmVyIikpCisgICAgIHJldHVybiBF
V0tfQ09PS0lFX0FDQ0VQVF9QT0xJQ1lfTkVWRVI7CisgICBpZiAoc3RyY21wKGlucHV0X3N0cmlu
ZywgIm5vLXRoaXJkLXBhcnR5IikpCisgICAgIElORk8oIlVucmVjb2duaXplZCB0eXBlIGZvciBj
b29raWVzIHBvbGljeTogJXMuIiwgaW5wdXRfc3RyaW5nKTsKKyAgIHJldHVybiBFV0tfQ09PS0lF
X0FDQ0VQVF9QT0xJQ1lfTk9fVEhJUkRfUEFSVFk7Cit9CisKK3N0YXRpYyB2b2lkCitwYXJzZV93
aW5kb3dfc2l6ZShjb25zdCBjaGFyICppbnB1dF9zdHJpbmcsIGludCAqd2lkdGgsIGludCAqaGVp
Z2h0KQoreworICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heF9sZW5ndGggPSA0OworICAgaW50
IHBhcnNlZF93aWR0aDsKKyAgIGludCBwYXJzZWRfaGVpZ2h0OworICAgY2hhciAqKmFycjsKKyAg
IHVuc2lnbmVkIGVsZW1lbnRzOworCisgICBhcnIgPSBlaW5hX3N0cl9zcGxpdF9mdWxsKGlucHV0
X3N0cmluZywgIngiLCAwLCAmZWxlbWVudHMpOworCisgICBpZiAoZWxlbWVudHMgPT0gMiAmJiAo
c3RybGVuKGFyclswXSkgPD0gbWF4X2xlbmd0aCkgJiYgKHN0cmxlbihhcnJbMV0pIDw9IG1heF9s
ZW5ndGgpKSB7CisgICAgIHBhcnNlZF93aWR0aCA9IGF0b2koYXJyWzBdKTsKKyAgICAgaWYgKHdp
ZHRoICYmIHBhcnNlZF93aWR0aCkKKyAgICAgICAqd2lkdGggPSBwYXJzZWRfd2lkdGg7CisKKyAg
ICAgcGFyc2VkX2hlaWdodCA9IGF0b2koYXJyWzFdKTsKKyAgICAgaWYgKGhlaWdodCAmJiBwYXJz
ZWRfaGVpZ2h0KQorICAgICAgICpoZWlnaHQgPSBwYXJzZWRfaGVpZ2h0OworICAgfQorCisgICBm
cmVlKGFyclswXSk7CisgICBmcmVlKGFycik7Cit9CisKK0VBUElfTUFJTiBpbnQKK2VsbV9tYWlu
KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICBpbnQgYXJncyA9IDE7CisgICB1bnNpZ25l
ZCBjaGFyIHF1aXRPcHRpb24gPSAwOworICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdzsKKyAgIGNo
YXIgKndpbmRvd19zaXplX3N0cmluZyA9IE5VTEw7CisgICBjaGFyICpjb29raWVzX3BvbGljeV9z
dHJpbmcgPSBOVUxMOworCisgICBFY29yZV9HZXRvcHRfVmFsdWUgdmFsdWVzW10gPSB7CisgICAg
IEVDT1JFX0dFVE9QVF9WQUxVRV9TVFIoZXZhc19lbmdpbmVfbmFtZSksCisgICAgIEVDT1JFX0dF
VE9QVF9WQUxVRV9TVFIod2luZG93X3NpemVfc3RyaW5nKSwKKyAgICAgRUNPUkVfR0VUT1BUX1ZB
TFVFX1NUUih1c2VyX2FnZW50X3N0cmluZyksCisgICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9TVFIo
ZXh0ZW5zaW9uc19wYXRoKSwKKyAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0RPVUJMRShkZXZpY2Vf
cGl4ZWxfcmF0aW8pLAorICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTChxdWl0T3B0aW9uKSwK
KyAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0woZW5jb2RpbmdfZGV0ZWN0b3JfZW5hYmxlZCks
CisgICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9TVFIoYmFja2dyb3VuZF9jb2xvcl9zdHJpbmcpLAor
ICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTChmcmFtZV9mbGF0dGVuaW5nX2VuYWJsZWQpLAor
ICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTChsb2NhbF9zdG9yYWdlX2VuYWJsZWQpLAorICAg
ICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTChvZmZsaW5lX3dlYl9hcHBsaWNhdGlvbl9jYWNoZV9l
bmFibGVkKSwKKyAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0woZnVsbHNjcmVlbl9lbmFibGVk
KSwKKyAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0woc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCks
CisgICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9CT09MKHRvdWNoX2V2ZW50c19lbmFibGVkKSwKKyAg
ICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0woZml4ZWRfbGF5b3V0X2VuYWJsZWQpLAorICAgICBF
Q09SRV9HRVRPUFRfVkFMVUVfU1RSKGNvb2tpZXNfcG9saWN5X3N0cmluZyksCisgICAgIEVDT1JF
X0dFVE9QVF9WQUxVRV9CT09MKHdlYl9zZWN1cml0eV9lbmFibGVkKSwKKyAgICAgRUNPUkVfR0VU
T1BUX1ZBTFVFX0JPT0woc2VwYXJhdGVkX3Byb2Nlc3NfZW5hYmxlZCksCisgICAgIEVDT1JFX0dF
VE9QVF9WQUxVRV9CT09MKHF1aXRPcHRpb24pLAorICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9P
TChxdWl0T3B0aW9uKSwKKyAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0wocXVpdE9wdGlvbiks
CisgICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9OT05FCisgICB9OworCisgICBlZnJlZXRfY2FjaGVf
dXBkYXRlID0gMDsKKworICAgaWYgKCFld2tfaW5pdCgpKQorICAgICByZXR1cm4gRVhJVF9GQUlM
VVJFOworCisgICBfbG9nX2RvbWFpbl9pZCA9IGVpbmFfbG9nX2RvbWFpbl9yZWdpc3RlcigibWlu
aWJyb3dzZXIiLCBFSU5BX0NPTE9SX1lFTExPVyk7CisKKyAgIGV3a192aWV3X3NtYXJ0X2NsYXNz
X3NldChtaW5pQnJvd3NlclZpZXdTbWFydENsYXNzKCkpOworCisgICBlY29yZV9hcHBfYXJnc19z
ZXQoYXJnYywgKGNvbnN0IGNoYXIgKiopIGFyZ3YpOworICAgYXJncyA9IGVjb3JlX2dldG9wdF9w
YXJzZSgmb3B0aW9ucywgdmFsdWVzLCBhcmdjLCBhcmd2KTsKKworICAgaWYgKGFyZ3MgPCAwKQor
ICAgICByZXR1cm4gcXVpdChFSU5BX0ZBTFNFLCAiQ291bGQgbm90IHBhcnNlIG9wdGlvbnMuIik7
CisKKyAgIGlmIChxdWl0T3B0aW9uKQorICAgICByZXR1cm4gcXVpdChFSU5BX1RSVUUsIE5VTEwp
OworCisgICBpZiAoZXZhc19lbmdpbmVfbmFtZSkKKyAgICAgZWxtX2NvbmZpZ19hY2NlbF9wcmVm
ZXJlbmNlX3NldChldmFzX2VuZ2luZV9uYW1lKTsKKyAgIGVsc2UgeworICAgICBldmFzX2VuZ2lu
ZV9uYW1lID0gIm9wZW5nbDpkZXB0aDI0OnN0ZW5jaWw4IjsKKyAgICAgZWxtX2NvbmZpZ19hY2Nl
bF9wcmVmZXJlbmNlX3NldChldmFzX2VuZ2luZV9uYW1lKTsKKyAgIH0KKworICAgRXdrX0NvbnRl
eHQgKmNvbnRleHQgPSBld2tfY29udGV4dF9kZWZhdWx0X2dldCgpOworCisgICBpZiAoc2VwYXJh
dGVkX3Byb2Nlc3NfZW5hYmxlZCkKKyAgICAgZXdrX2NvbnRleHRfd2ViX3Byb2Nlc3NfY291bnRf
bGltaXRfc2V0KGNvbnRleHQsIDApOworCisgICAvLyBFbmFibGUgZmF2aWNvbiBkYXRhYmFzZS4K
KyAgIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5X3NldChjb250ZXh0LCBO
VUxMKTsKKworICAgLy8gVXNlIGEgcHJvcGVyIGNhY2hlIG1vZGVsLgorICAgZXdrX2NvbnRleHRf
Y2FjaGVfbW9kZWxfc2V0KGNvbnRleHQsIEVXS19DQUNIRV9NT0RFTF9QUklNQVJZX1dFQkJST1dT
RVIpOworCisgICBpZiAoY29va2llc19wb2xpY3lfc3RyaW5nKSB7CisgICAgIEV3a19Db29raWVf
QWNjZXB0X1BvbGljeSBjb29raWVfcG9saWN5ID0gcGFyc2VfY29va2llc19wb2xpY3koY29va2ll
c19wb2xpY3lfc3RyaW5nKTsKKyAgICAgZXdrX2Nvb2tpZV9tYW5hZ2VyX2FjY2VwdF9wb2xpY3lf
c2V0KGV3a19jb250ZXh0X2Nvb2tpZV9tYW5hZ2VyX2dldChjb250ZXh0KSwgY29va2llX3BvbGlj
eSk7CisKKyAgICAgaWYgKGNvb2tpZV9wb2xpY3kgPT0gRVdLX0NPT0tJRV9BQ0NFUFRfUE9MSUNZ
X0FMV0FZUykgeworICAgICAgIGNvbnN0IGNoYXIgY29va2llX3N0b3JhZ2VfZGlyZWN0b3J5W10g
PSAiL3RtcC9ld2Via2l0Ml9taW5pYnJvd3Nlcl9jb29raWUvIjsKKyAgICAgICBta2Rpcihjb29r
aWVfc3RvcmFnZV9kaXJlY3RvcnksIFNfSVJXWFUpOworICAgICAgIGNoYXIgc3RvcmFnZV9uYW1l
WzY0XTsKKyAgICAgICBzbnByaW50ZihzdG9yYWdlX25hbWUsIHNpemVvZihzdG9yYWdlX25hbWUp
LCAiJXN0eHQtY29va2llIiwgY29va2llX3N0b3JhZ2VfZGlyZWN0b3J5KTsKKyAgICAgICBld2tf
Y29va2llX21hbmFnZXJfcGVyc2lzdGVudF9zdG9yYWdlX3NldChld2tfY29udGV4dF9jb29raWVf
bWFuYWdlcl9nZXQoY29udGV4dCksIHN0b3JhZ2VfbmFtZSwgRVdLX0NPT0tJRV9QRVJTSVNURU5U
X1NUT1JBR0VfVEVYVCk7CisgICAgIH0KKyAgIH0KKworICAgaWYgKHdpbmRvd19zaXplX3N0cmlu
ZykKKyAgICAgcGFyc2Vfd2luZG93X3NpemUod2luZG93X3NpemVfc3RyaW5nLCAmd2luZG93X3dp
ZHRoLCAmd2luZG93X2hlaWdodCk7CisKKyAgIHdpbmRvdyA9IHdpbmRvd19jcmVhdGUoY29uZmln
dXJhdGlvbigpLCAwLCAwKTsKKyAgIGlmICghd2luZG93KQorICAgICByZXR1cm4gcXVpdChFSU5B
X0ZBTFNFLCAiQ291bGQgbm90IGNyZWF0ZSBicm93c2VyIHdpbmRvdy4iKTsKKworICAgLy8gU2V0
IGNhbGxiYWNrcyBmb3IgZG93bmxvYWQgZXZlbnRzLgorICAgZXdrX2NvbnRleHRfZG93bmxvYWRf
Y2FsbGJhY2tzX3NldChjb250ZXh0LCBfZG93bmxvYWRfcmVxdWVzdF9jYiwgX2Rvd25sb2FkX2Zh
aWxlZF9jYiwgMCwgX2Rvd25sb2FkX2ZpbmlzaGVkX2NiLCB3aW5kb3cpOworCisgICBpZiAoYXJn
cyA8IGFyZ2MpIHsKKyAgICAgY2hhciAqdXJsID0gdXJsX2Zyb21fdXNlcl9pbnB1dChhcmd2W2Fy
Z3NdKTsKKyAgICAgdXJsX2xvYWRfZnJvbV91c2VyX2lucHV0KHdpbmRvdy0+ZXdrX3ZpZXcsIHVy
bCk7CisgICAgIGZyZWUodXJsKTsKKyAgIH0gZWxzZQorICAgICBld2tfdmlld191cmxfc2V0KHdp
bmRvdy0+ZXdrX3ZpZXcsIERFRkFVTFRfVVJMKTsKKworICAgd2luZG93cyA9IGVpbmFfbGlzdF9h
cHBlbmQod2luZG93cywgd2luZG93KTsKKworICAgZWxtX3J1bigpOworCisgICByZXR1cm4gcXVp
dChFSU5BX1RSVUUsIE5VTEwpOworfQorRUxNX01BSU4oKQorCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3J1bi1lZmwtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1lZmwtdGVzdHMKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzhkM2Q3Y2VmZjQyMzE2YzhkYjBjYzM2MjQ3Zjg4NWIyNzc4ZjA4NQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWVmbC10ZXN0cwpAQCAtMCwwICsxLDY0IEBACisj
IS91c3IvYmluL3BlcmwgLXcKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIElu
dGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwordXNlIHN0
cmljdDsKK3VzZSBGaW5kQmluOwordXNlIGxpYiAkRmluZEJpbjo6QmluOwordXNlIHdlYmtpdGRp
cnM7CisKK215ICR4dmZiX2Rpc3BsYXkgPSAiOjU1IjsKKworbXkgJHh2ZmJfcGlkID0gZm9yaygp
OworZXhpdCgxKSBpZiBub3QgZGVmaW5lZCAkeHZmYl9waWQ7CisKKyMgVGVsbCBDVGVzdCB0byBk
dW1wIGd0ZXN0IG91dHB1dCBpbiBjYXNlIG9mIGZhaWx1cmUuCiskRU5We0NURVNUX09VVFBVVF9P
Tl9GQUlMVVJFfSA9ICIxIjsKKyRFTlZ7RElTUExBWX0gPSAkeHZmYl9kaXNwbGF5OworCitpZiAo
JHh2ZmJfcGlkID09IDApIHsKKyAgICAjIFN0YXJ0IFh2ZmIKKyAgICBteSBAeHZmYl9hcmdzID0g
KCAiWHZmYiAkeHZmYl9kaXNwbGF5IC1zY3JlZW4gMCA4MDB4NjAweDI0IC1ub2xpc3RlbiB0Y3Ag
PiAvZGV2L251bGwgMj4mMSIgKTsKKyAgICBleGVjKEB4dmZiX2FyZ3MpOworfSBlbHNlIHsKKyAg
ICBzZXRDb25maWd1cmF0aW9uKCk7CisKKyAgICAjIE1hbnVhbGx5IGFkZCB0aGlzIGZvciBqaGJ1
aWxkV3JhcHBlclByZWZpeElmTmVlZGVkKCkuCisgICAgcHVzaChAQVJHViwgIi0tZWZsIik7CisK
KyAgICBteSAkcmV0dXJuQ29kZSA9IGV4aXRTdGF0dXMoZ2VuZXJhdGVCdWlsZFN5c3RlbUZyb21D
TWFrZVByb2plY3QodW5kZWYsIGNtYWtlQmFzZWRQb3J0QXJndW1lbnRzKCkpKTsKKyAgICBleGl0
KCRyZXR1cm5Db2RlKSBpZiAkcmV0dXJuQ29kZTsKKworICAgICRyZXR1cm5Db2RlID0gZXhpdFN0
YXR1cyhidWlsZENNYWtlR2VuZXJhdGVkUHJvamVjdCgidGVzdCIpKTsKKworICAgICMgS2lsbCBY
dmZiCisgICAga2lsbCgxNSwgJHh2ZmJfcGlkKTsKKworICAgIGV4aXQoJHJldHVybkNvZGUpOwor
fQorCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXRlZmwtbGlicyBiL1Rv
b2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdGVmbC1saWJzCm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllMDVhYzBhNTAw
Mjk1MjdkMzI1Y2YxNjg0ZGIyNjVjYTAzYzc1M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3VwZGF0ZS13ZWJraXRlZmwtbGlicwpAQCAtMCwwICsxLDIzIEBACisjIS91c3IvYmlu
L3BlcmwgLXcKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMK
KyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCit1c2Ug
RmluZEJpbjsKK3VzZSBsaWIgJEZpbmRCaW46OkJpbjsKK3VzZSB3ZWJraXRkaXJzOworCitteSAk
c2NyaXB0c0RpciA9IHJlbGF0aXZlU2NyaXB0c0RpcigpOworc3lzdGVtKCJwZXJsIiwgIiRzY3Jp
cHRzRGlyL3VwZGF0ZS13ZWJraXQtbGlicy1qaGJ1aWxkIiwgIi0tZWZsIiwgQEFSR1YpID09IDAg
b3IgZGllICQhOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2VmbC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9lZmwucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGViMzRm
ZjFlMzc4MjBmNDY1MDZmNDM5ZjRjMjI3ODc0OWIwOTVhMgotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9lZmwucHkKQEAgLTAsMCArMSwxNDYgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIi
V2ViS2l0IEVmbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCisKK2lt
cG9ydCBvcworCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHBhdGgKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRl
c3RDb25maWd1cmF0aW9uCitmcm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQgUG9ydAorZnJv
bSB3ZWJraXRweS5wb3J0LnB1bHNlYXVkaW9fc2FuaXRpemVyIGltcG9ydCBQdWxzZUF1ZGlvU2Fu
aXRpemVyCitmcm9tIHdlYmtpdHB5LnBvcnQueG9yZ2RyaXZlciBpbXBvcnQgWG9yZ0RyaXZlcgor
ZnJvbSB3ZWJraXRweS5wb3J0Lnh2ZmJkcml2ZXIgaW1wb3J0IFh2ZmJEcml2ZXIKK2Zyb20gd2Vi
a2l0cHkucG9ydC5saW51eF9nZXRfY3Jhc2hfbG9nIGltcG9ydCBHREJDcmFzaExvZ0dlbmVyYXRv
cgorCisKK2NsYXNzIEVmbFBvcnQoUG9ydCk6CisgICAgcG9ydF9uYW1lID0gJ2VmbCcKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihFZmxQ
b3J0LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi5famhi
dWlsZF93cmFwcGVyID0gW3NlbGYucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdUb29scycsICdqaGJ1
aWxkJywgJ2poYnVpbGQtd3JhcHBlcicpLCAnLS1lZmwnLCAncnVuJ10KKworICAgICAgICBzZWxm
LnNldF9vcHRpb25fZGVmYXVsdCgnd3JhcHBlcicsICcgJy5qb2luKHNlbGYuX2poYnVpbGRfd3Jh
cHBlcikpCisgICAgICAgIHNlbGYud2VicHJvY2Vzc19jbWRfcHJlZml4ID0gc2VsZi5nZXRfb3B0
aW9uKCd3ZWJwcm9jZXNzX2NtZF9wcmVmaXgnKQorCisgICAgICAgIHNlbGYuX3B1bHNlYXVkaW9f
c2FuaXRpemVyID0gUHVsc2VBdWRpb1Nhbml0aXplcigpCisKKyAgICBkZWYgX3BvcnRfZmxhZ19m
b3Jfc2NyaXB0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuICItLWVmbCIKKworICAgIGRlZiBzZXR1
cF90ZXN0X3J1bihzZWxmLCBkZXZpY2VfY2xhc3M9Tm9uZSk6CisgICAgICAgIHN1cGVyKEVmbFBv
cnQsIHNlbGYpLnNldHVwX3Rlc3RfcnVuKGRldmljZV9jbGFzcykKKyAgICAgICAgc2VsZi5fcHVs
c2VhdWRpb19zYW5pdGl6ZXIudW5sb2FkX3B1bHNlYXVkaW9fbW9kdWxlKCkKKworICAgIGRlZiBz
ZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25hbWU9Tm9uZSk6CisgICAgICAg
IGVudiA9IHN1cGVyKEVmbFBvcnQsIHNlbGYpLnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2
ZXJfbmFtZSkKKworICAgICAgICAjIElmIERJU1BMQVkgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMg
dW5zZXQgaW4gdGhlIHN5c3RlbQorICAgICAgICAjIGUuZy4gb24gYnVpbGQgYm90LCByZW1vdmUg
RElTUExBWSB2YXJpYWJsZSBmcm9tIHRoZSBkaWN0aW9uYXJ5CisgICAgICAgIGlmIG5vdCAnRElT
UExBWScgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGRlbCBlbnZbJ0RJU1BMQVknXQorCisg
ICAgICAgIGlmICdBQ0NFU1NJQklMSVRZX0VBSUxfTElCUkFSWV9QQVRIJyBpbiBvcy5lbnZpcm9u
OgorICAgICAgICAgICAgZW52WydBQ0NFU1NJQklMSVRZX0VBSUxfTElCUkFSWV9QQVRIJ10gPSBv
cy5lbnZpcm9uWydBQ0NFU1NJQklMSVRZX0VBSUxfTElCUkFSWV9QQVRIJ10KKworICAgICAgICBl
bnZbJ1RFU1RfUlVOTkVSX0lOSkVDVEVEX0JVTkRMRV9GSUxFTkFNRSddID0gc2VsZi5fYnVpbGRf
cGF0aCgnbGliJywgJ2xpYlRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZS5zbycpCisgICAgICAgIGVu
dlsnVEVTVF9SVU5ORVJfUExVR0lOX1BBVEgnXSA9IHNlbGYuX2J1aWxkX3BhdGgoJ2xpYicsICdw
bHVnaW5zJykKKworICAgICAgICAjIFNpbGVuY2UgR0lPIHdhcm5pbmdzIGFib3V0IHVzaW5nIHRo
ZSAibWVtb3J5IiBHU2V0dGluZ3MgYmFja2VuZC4KKyAgICAgICAgZW52WydHU0VUVElOR1NfQkFD
S0VORCddID0gJ21lbW9yeScKKworICAgICAgICBpZiBzZWxmLndlYnByb2Nlc3NfY21kX3ByZWZp
eDoKKyAgICAgICAgICAgIGVudlsnV0VCX1BST0NFU1NfQ01EX1BSRUZJWCddID0gc2VsZi53ZWJw
cm9jZXNzX2NtZF9wcmVmaXgKKworICAgICAgICByZXR1cm4gZW52CisKKyAgICBkZWYgZGVmYXVs
dF90aW1lb3V0X21zKHNlbGYpOgorICAgICAgICAjIFRlc3RzIHJ1biBjb25zaWRlcmFibHkgc2xv
d2VyIHVuZGVyIGdkYgorICAgICAgICAjIG9yIHZhbGdyaW5kLgorICAgICAgICBpZiBzZWxmLmdl
dF9vcHRpb24oJ3dlYnByb2Nlc3NfY21kX3ByZWZpeCcpOgorICAgICAgICAgICAgcmV0dXJuIDM1
MCAqIDEwMDAKKyAgICAgICAgcmV0dXJuIHN1cGVyKEVmbFBvcnQsIHNlbGYpLmRlZmF1bHRfdGlt
ZW91dF9tcygpCisKKyAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CisgICAgICAgIHN1
cGVyKEVmbFBvcnQsIHNlbGYpLmNsZWFuX3VwX3Rlc3RfcnVuKCkKKyAgICAgICAgc2VsZi5fcHVs
c2VhdWRpb19zYW5pdGl6ZXIucmVzdG9yZV9wdWxzZWF1ZGlvX21vZHVsZSgpCisKKyAgICBkZWYg
X2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4g
W1Rlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2VsZi5fdmVyc2lvbiwgYXJjaGl0ZWN0dXJlPSd4
ODYnLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpIGZvciBidWlsZF90eXBlIGluIHNlbGYuQUxMX0JV
SUxEX1RZUEVTXQorCisgICAgZGVmIF9kcml2ZXJfY2xhc3Moc2VsZik6CisgICAgICAgIGlmIG9z
LmVudmlyb24uZ2V0KCJVU0VfTkFUSVZFX1hESVNQTEFZIik6CisgICAgICAgICAgICByZXR1cm4g
WG9yZ0RyaXZlcgorICAgICAgICByZXR1cm4gWHZmYkRyaXZlcgorCisgICAgZGVmIF9wYXRoX3Rv
X2RyaXZlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2JpbicsIHNl
bGYuZHJpdmVyX25hbWUoKSkKKworICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnYmluJywgJ0ltYWdlRGlmZicpCisKKyAg
ICBkZWYgX2ltYWdlX2RpZmZfY29tbWFuZChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAg
ICByZXR1cm4gc2VsZi5famhidWlsZF93cmFwcGVyICsgc3VwZXIoRWZsUG9ydCwgc2VsZikuX2lt
YWdlX2RpZmZfY29tbWFuZCgqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgX3BhdGhfdG9fd2Vi
Y29yZV9saWJyYXJ5KHNlbGYpOgorICAgICAgICBzdGF0aWNfcGF0aCA9IHNlbGYuX2J1aWxkX3Bh
dGgoJ2xpYicsICdsaWJ3ZWJjb3JlX2VmbC5hJykKKyAgICAgICAgZHluX3BhdGggPSBzZWxmLl9i
dWlsZF9wYXRoKCdsaWInLCAnbGlid2ViY29yZV9lZmwuc28nKQorICAgICAgICByZXR1cm4gc3Rh
dGljX3BhdGggaWYgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc3RhdGljX3BhdGgpIGVsc2UgZHlu
X3BhdGgKKworICAgIGRlZiBfc2VhcmNoX3BhdGhzKHNlbGYpOgorICAgICAgICBzZWFyY2hfcGF0
aHMgPSBbXQorICAgICAgICBzZWFyY2hfcGF0aHMuYXBwZW5kKHNlbGYucG9ydF9uYW1lKQorICAg
ICAgICBzZWFyY2hfcGF0aHMuYXBwZW5kKCd3azInKQorICAgICAgICByZXR1cm4gc2VhcmNoX3Bh
dGhzCisKKyAgICBkZWYgZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgc2VsZi5fc2VhcmNoX3Bh
dGhzKCkpCisKKyAgICBkZWYgX3BvcnRfc3BlY2lmaWNfZXhwZWN0YXRpb25zX2ZpbGVzKHNlbGYp
OgorICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIGRlZmF1bHQg
YWxnb3JpdGhtIGhlcmUuCisgICAgICAgIHJldHVybiBsaXN0KHJldmVyc2VkKFtzZWxmLl9maWxl
c3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgocCksICdUZXN0RXhwZWN0YXRp
b25zJykgZm9yIHAgaW4gc2VsZi5fc2VhcmNoX3BhdGhzKCldKSkKKworICAgIGRlZiBzaG93X3Jl
c3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUpOgorICAgICAgICBzZWxmLl9y
dW5fc2NyaXB0KCJydW4tbWluaWJyb3dzZXIiLCBbcGF0aC5hYnNwYXRoX3RvX3VyaShzZWxmLmhv
c3QucGxhdGZvcm0sIHJlc3VsdHNfZmlsZW5hbWUpXSkKKworICAgIGRlZiBjaGVja19zeXNfZGVw
cyhzZWxmLCBuZWVkc19odHRwKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKEVmbFBvcnQsIHNlbGYp
LmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApIGFuZCBzZWxmLl9kcml2ZXJfY2xhc3MoKS5jaGVj
a19kcml2ZXIoc2VsZikKKworICAgIGRlZiBidWlsZF93ZWJraXRfY29tbWFuZChzZWxmLCBidWls
ZF9zdHlsZT1Ob25lKToKKyAgICAgICAgY29tbWFuZCA9IHN1cGVyKEVmbFBvcnQsIHNlbGYpLmJ1
aWxkX3dlYmtpdF9jb21tYW5kKGJ1aWxkX3N0eWxlKQorICAgICAgICBjb21tYW5kLmV4dGVuZChb
Ii0tZWZsIiwgIi0tdXBkYXRlLWVmbCJdKQorICAgICAgICBjb21tYW5kLmFwcGVuZChzdXBlcihF
ZmxQb3J0LCBzZWxmKS5tYWtlX2FyZ3MoKSkKKyAgICAgICAgcmV0dXJuIGNvbW1hbmQKKworICAg
IGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdl
cl90aGFuKToKKyAgICAgICAgcmV0dXJuIEdEQkNyYXNoTG9nR2VuZXJhdG9yKG5hbWUsIHBpZCwg
bmV3ZXJfdGhhbiwgc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fcGF0aF90b19kcml2ZXIpLmdlbmVy
YXRlX2NyYXNoX2xvZyhzdGRvdXQsIHN0ZGVycikKKworICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9u
c19maWxlX3Bvc2l0aW9uKHNlbGYpOgorICAgICAgICAjIEVGTCBwb3J0IGJhc2VsaW5lIHNlYXJj
aCBwYXRoIGlzIGVmbCAtPiB3azIgLT4gZ2VuZXJpYyAoYXMgZWZsLXdrMiBhbmQgZWZsIGJhc2Vs
aW5lcyBhcmUgbWVyZ2VkKSwgc28gcG9ydCB0ZXN0IGV4cGVjdGF0aW9ucyBmaWxlIGlzIGF0IHRo
aXJkIHRvIGxhc3QgcG9zaXRpb24uCisgICAgICAgIHJldHVybiAyCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZWZsX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2VmbF91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDgyMTU1NGU3YjE1NmFm
ZGQ4NWY4NWRlNzJhNThkMTRjZDhjN2VmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2VmbF91bml0dGVzdC5weQpAQCAtMCwwICsxLDU0IEBACisjIENvcHly
aWdodCAoQykgMjAxMSBQcm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMK
KyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
ZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUKK2Zyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdHB5
LnBvcnQuZWZsIGltcG9ydCBFZmxQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQucHVsc2VhdWRpb19z
YW5pdGl6ZXJfbW9jayBpbXBvcnQgUHVsc2VBdWRpb1Nhbml0aXplck1vY2sKK2Zyb20gd2Via2l0
cHkucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQorCisKK2NsYXNzIEVmbFBvcnRUZXN0KHBvcnRf
dGVzdGNhc2UuUG9ydFRlc3RDYXNlKToKKyAgICBwb3J0X25hbWUgPSAnZWZsJworICAgIHBvcnRf
bWFrZXIgPSBFZmxQb3J0CisKKyAgICAjIEFkZGl0aW9uYWxseSBtb2NrcyBvdXQgdGhlIFB1bHNl
QXVkaW9TYW5pdGl6ZXIgbWV0aG9kcy4KKyAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9u
ZSwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9u
PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgcG9ydCA9IHN1cGVyKEVmbFBvcnRUZXN0LCBzZWxm
KS5tYWtlX3BvcnQoaG9zdCwgcG9ydF9uYW1lLCBvcHRpb25zLCBvc19uYW1lLCBvc192ZXJzaW9u
LCAqKmt3YXJncykKKyAgICAgICAgcG9ydC5fcHVsc2VhdWRpb19zYW5pdGl6ZXIgPSBQdWxzZUF1
ZGlvU2FuaXRpemVyTW9jaygpCisgICAgICAgIHJldHVybiBwb3J0CisKKyAgICBkZWYgdGVzdF9z
aG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQoKQorICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlKHNob3VsZF9sb2c9
VHJ1ZSkKKyAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICJNT0NLIHJ1bl9jb21tYW5kOiBbJ1Rvb2xz
L1NjcmlwdHMvcnVuLW1pbmlicm93c2VyJywgJy0tcmVsZWFzZScsICctLWVmbCcsICdmaWxlOi8v
dGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dFxuIgorICAgICAgICBPdXRwdXRDYXB0dXJl
KCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC5zaG93X3Jlc3VsdHNfaHRtbF9maWxlLCBbInRl
c3QuaHRtbCJdLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCisKKyAgICBkZWYgdGVzdF9n
ZXRfY3Jhc2hfbG9nKHNlbGYpOgorICAgICAgICAjIFRoaXMgZnVuY3Rpb24gdGVzdGVkIGluIGxp
bnV4X2dldF9jcmFzaF9sb2dfdW5pdHRlc3QucHkKKyAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2VmbC9XS1ZpZXdDbGllbnRXZWJQcm9j
ZXNzQ2FsbGJhY2tzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9lZmwv
V0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNrcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZhYmFkNDc4
NTNiYWVhYjYzNTc0ZjFiZmNjYWYxMmI1M2YxZjVhNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9lZmwvV0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0Nh
bGxiYWNrcy5jcHAKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisjaW5jbHVk
ZSAiVGVzdC5oIgorI2luY2x1ZGUgIldLVmlldy5oIgorI2luY2x1ZGUgPFdlYktpdC9XS1JldGFp
blB0ci5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3N0cnVjdCBUZXN0U3RhdGVz
RGF0YSB7CisgICAgVGVzdFN0YXRlc0RhdGEoV0tWaWV3UmVmIHZpZXcsIFdLVVJMUmVmIHVybCkK
KyAgICAgICAgOiB2aWV3KHZpZXcpCisgICAgICAgICwgdXJsKHVybCkKKyAgICAgICAgLCBkaWRG
aW5pc2hMb2FkKGZhbHNlKQorICAgICAgICAsIGRpZENyYXNoKGZhbHNlKQorICAgICAgICAsIGRp
ZFJlbGF1bmNoKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBXS1ZpZXdSZWYgdmlldzsKKyAg
ICBXS1VSTFJlZiB1cmw7CisgICAgYm9vbCBkaWRGaW5pc2hMb2FkOworICAgIGJvb2wgZGlkQ3Jh
c2g7CisgICAgYm9vbCBkaWRSZWxhdW5jaDsKK307CisKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaExv
YWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKK3sKKyAgICBUZXN0U3RhdGVzRGF0YSogc3RhdGVzID0gY29uc3RfY2FzdDxU
ZXN0U3RhdGVzRGF0YSo+KHN0YXRpY19jYXN0PGNvbnN0IFRlc3RTdGF0ZXNEYXRhKj4oY2xpZW50
SW5mbykpOworICAgIHN0YXRlcy0+ZGlkRmluaXNoTG9hZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2
b2lkIHNldFBhZ2VMb2FkZXJDbGllbnQoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisgICAgV0tQYWdlTG9hZGVyQ2xpZW50VjMgbG9hZGVyQ2xpZW50OworICAgIG1l
bXNldCgmbG9hZGVyQ2xpZW50LCAwLCBzaXplb2YobG9hZGVyQ2xpZW50KSk7CisKKyAgICBsb2Fk
ZXJDbGllbnQuYmFzZS52ZXJzaW9uID0gMzsKKyAgICBsb2FkZXJDbGllbnQuYmFzZS5jbGllbnRJ
bmZvID0gY2xpZW50SW5mbzsKKyAgICBsb2FkZXJDbGllbnQuZGlkRmluaXNoTG9hZEZvckZyYW1l
ID0gZGlkRmluaXNoTG9hZEZvckZyYW1lOworCisgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVu
dChwYWdlLCAmbG9hZGVyQ2xpZW50LmJhc2UpOworfQorCit2b2lkIHdlYlByb2Nlc3NDcmFzaGVk
KFdLVmlld1JlZiB2aWV3LCBXS1VSTFJlZiB1cmwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7
CisgICAgVGVzdFN0YXRlc0RhdGEqIHN0YXRlcyA9IGNvbnN0X2Nhc3Q8VGVzdFN0YXRlc0RhdGEq
PihzdGF0aWNfY2FzdDxjb25zdCBUZXN0U3RhdGVzRGF0YSo+KGNsaWVudEluZm8pKTsKKworICAg
IEVYUEVDVF9FUShzdGF0ZXMtPnZpZXcsIHZpZXcpOworICAgIEVYUEVDVF9UUlVFKFdLVVJMSXNF
cXVhbCh1cmwsIHN0YXRlcy0+dXJsKSk7CisKKyAgICBzdGF0ZXMtPmRpZENyYXNoID0gdHJ1ZTsK
K30KKwordm9pZCB3ZWJQcm9jZXNzRGlkUmVsYXVuY2goV0tWaWV3UmVmIHZpZXcsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgVGVzdFN0YXRlc0RhdGEqIHN0YXRlcyA9IGNvbnN0X2Nh
c3Q8VGVzdFN0YXRlc0RhdGEqPihzdGF0aWNfY2FzdDxjb25zdCBUZXN0U3RhdGVzRGF0YSo+KGNs
aWVudEluZm8pKTsKKworICAgIEVYUEVDVF9FUShzdGF0ZXMtPnZpZXcsIHZpZXcpOworCisgICAg
c3RhdGVzLT5kaWRSZWxhdW5jaCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldFZpZXdDbGll
bnQoV0tWaWV3UmVmIHZpZXcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgV0tWaWV3
Q2xpZW50VjAgdmlld0NsaWVudDsKKyAgICBtZW1zZXQoJnZpZXdDbGllbnQsIDAsIHNpemVvZihX
S1ZpZXdDbGllbnRWMCkpOworCisgICAgdmlld0NsaWVudC5iYXNlLnZlcnNpb24gPSAwOworICAg
IHZpZXdDbGllbnQuYmFzZS5jbGllbnRJbmZvID0gY2xpZW50SW5mbzsKKyAgICB2aWV3Q2xpZW50
LndlYlByb2Nlc3NDcmFzaGVkID0gd2ViUHJvY2Vzc0NyYXNoZWQ7CisgICAgdmlld0NsaWVudC53
ZWJQcm9jZXNzRGlkUmVsYXVuY2ggPSB3ZWJQcm9jZXNzRGlkUmVsYXVuY2g7CisKKyAgICBXS1Zp
ZXdTZXRWaWV3Q2xpZW50KHZpZXcsICZ2aWV3Q2xpZW50LmJhc2UpOworfQorCitURVNUKFdlYktp
dDIsIFdLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3MpCit7CisgICAgV0tSZXRhaW5QdHI8
V0tDb250ZXh0UmVmPiBjb250ZXh0ID0gYWRvcHRXSyhVdGlsOjpjcmVhdGVDb250ZXh0Rm9ySW5q
ZWN0ZWRCdW5kbGVUZXN0KCJXS1ZpZXdDbGllbnRXZWJQcm9jZXNzQ2FsbGJhY2tzVGVzdCIpKTsK
KyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsKEFkb3B0V0ssIFV0aWw6OmNyZWF0ZVVSTEZv
clJlc291cmNlKCJzaW1wbGUiLCAiaHRtbCIpKTsKKworICAgIFBsYXRmb3JtV2ViVmlldyB2aWV3
KGNvbnRleHQuZ2V0KCkpOworICAgIFdLVmlld1JlZiB3a1ZpZXcgPSBFV0tWaWV3R2V0V0tWaWV3
KHZpZXcucGxhdGZvcm1WaWV3KCkpOworCisgICAgVGVzdFN0YXRlc0RhdGEgc3RhdGVzID0gVGVz
dFN0YXRlc0RhdGEod2tWaWV3LCB1cmwuZ2V0KCkpOworCisgICAgc2V0UGFnZUxvYWRlckNsaWVu
dCh2aWV3LnBhZ2UoKSwgJnN0YXRlcyk7CisgICAgc2V0Vmlld0NsaWVudCh3a1ZpZXcsICZzdGF0
ZXMpOworCisgICAgV0tQYWdlTG9hZFVSTCh2aWV3LnBhZ2UoKSwgdXJsLmdldCgpKTsKKyAgICBV
dGlsOjpydW4oJnN0YXRlcy5kaWRGaW5pc2hMb2FkKTsKKworICAgIFdLQ29udGV4dFBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShjb250ZXh0LmdldCgpLCBVdGlsOjp0b1dLKCJDcmFzaCIpLmdl
dCgpLCAwKTsKKyAgICBVdGlsOjpydW4oJnN0YXRlcy5kaWRDcmFzaCk7CisKKyAgICBXS1BhZ2VS
ZWxvYWQodmlldy5wYWdlKCkpOworICAgIFV0aWw6OnJ1bigmc3RhdGVzLmRpZFJlbGF1bmNoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2VmbC9XS1ZpZXdDbGllbnRXZWJQcm9jZXNzQ2FsbGJh
Y2tzX0J1bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvZWZsL1dL
Vmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3NfQnVuZGxlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzll
MDk2MTc5ZjgxZTg4ZmRlOTdjMzNiYjk5M2QyZjY1OTIwYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2VmbC9XS1ZpZXdDbGllbnRXZWJQcm9j
ZXNzQ2FsbGJhY2tzX0J1bmRsZS5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcyku
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVU
ZXN0LmgiCisjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKKworY2xhc3MgV0tWaWV3Q2xpZW50V2ViUHJvY2Vzc0NhbGxiYWNrc1Rlc3Qg
OiBwdWJsaWMgSW5qZWN0ZWRCdW5kbGVUZXN0IHsKK3B1YmxpYzoKKyAgICBXS1ZpZXdDbGllbnRX
ZWJQcm9jZXNzQ2FsbGJhY2tzVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcik7CisK
K3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKFdLQnVuZGxlUmVm
LCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KTsKK307CisK
K3N0YXRpYyBJbmplY3RlZEJ1bmRsZVRlc3Q6OlJlZ2lzdGVyPFdLVmlld0NsaWVudFdlYlByb2Nl
c3NDYWxsYmFja3NUZXN0PiByZWdpc3RyYXIoIldLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFj
a3NUZXN0Iik7CisKK1dLVmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3NUZXN0OjpXS1ZpZXdD
bGllbnRXZWJQcm9jZXNzQ2FsbGJhY2tzVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmll
cikKKyAgICA6IEluamVjdGVkQnVuZGxlVGVzdChpZGVudGlmaWVyKQoreworfQorCit2b2lkIFdL
Vmlld0NsaWVudFdlYlByb2Nlc3NDYWxsYmFja3NUZXN0OjpkaWRSZWNlaXZlTWVzc2FnZShXS0J1
bmRsZVJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZikKK3sKKyAgICBpZiAo
IVdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJDcmFzaCIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBTaW11bGF0aW5nIGEgY3Jhc2gKKyAgICBhYm9ydCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvZWZsL1dLVmlld1Njcm9sbFRvLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9lZmwvV0tWaWV3U2Nyb2xsVG8uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI1MWM4OTFiZThmNzc0MzlkYzA1YWI0ZWI5OGY1MTIwMzY2ZjJhNmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvZWZsL1dLVmlld1Njcm9s
bFRvLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1
bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRl
IDxXZWJLaXQvV0tDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+Cisj
aW5jbHVkZSAiVGVzdC5oIgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3N0YXRpYyBi
b29sIGZpbmlzaGVkTG9hZCA9IGZhbHNlOworCitzdGF0aWMgdm9pZCBkaWRGaW5pc2hMb2FkRm9y
RnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqKQorewor
ICAgIGZpbmlzaGVkTG9hZCA9IHRydWU7Cit9CisKK1RFU1QoV2ViS2l0MiwgV0tWaWV3U2Nyb2xs
VG8pCit7CisgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0KEFkb3B0V0ssIFdL
Q29udGV4dENyZWF0ZSgpKTsKKyAgICBQbGF0Zm9ybVdlYlZpZXcgd2ViVmlldyhjb250ZXh0Lmdl
dCgpKTsKKyAgICBXS1JldGFpblB0cjxXS1ZpZXdSZWY+IHZpZXcgPSBFV0tWaWV3R2V0V0tWaWV3
KHdlYlZpZXcucGxhdGZvcm1WaWV3KCkpOworCisgICAgV0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQo
d2ViVmlldy5wYWdlKCksIHRydWUpOworCisgICAgV0tQYWdlTG9hZGVyQ2xpZW50VjAgbG9hZGVy
Q2xpZW50OworICAgIG1lbXNldCgmbG9hZGVyQ2xpZW50LCAwLCBzaXplb2YobG9hZGVyQ2xpZW50
KSk7CisgICAgbG9hZGVyQ2xpZW50LmJhc2UudmVyc2lvbiA9IDA7CisgICAgbG9hZGVyQ2xpZW50
LmRpZEZpbmlzaExvYWRGb3JGcmFtZSA9IGRpZEZpbmlzaExvYWRGb3JGcmFtZTsKKyAgICBXS1Bh
Z2VTZXRQYWdlTG9hZGVyQ2xpZW50KHdlYlZpZXcucGFnZSgpLCAmbG9hZGVyQ2xpZW50LmJhc2Up
OworCisgICAgV0tWaWV3Q2xpZW50VjAgdmlld0NsaWVudDsKKyAgICBtZW1zZXQoJnZpZXdDbGll
bnQsIDAsIHNpemVvZih2aWV3Q2xpZW50KSk7CisgICAgdmlld0NsaWVudC5iYXNlLnZlcnNpb24g
PSAwOworICAgIHZpZXdDbGllbnQuZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbiA9IDA7CisgICAg
V0tWaWV3U2V0Vmlld0NsaWVudCh2aWV3LmdldCgpLCAmdmlld0NsaWVudC5iYXNlKTsKKworICAg
IC8vIExvYWQgcGFnZS4KKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsKEFkb3B0V0ssIFV0
aWw6OmNyZWF0ZVVSTEZvclJlc291cmNlKCJlZmwvc2Nyb2xsVG8iLCAiaHRtbCIpKTsKKyAgICBX
S1BhZ2VMb2FkVVJMKHdlYlZpZXcucGFnZSgpLCB1cmwuZ2V0KCkpOworICAgIFV0aWw6OnJ1bigm
ZmluaXNoZWRMb2FkKTsKKworICAgIFdLUG9pbnQgY3VycmVudFBhZ2VQb3NpdGlvbiA9IFdLVmll
d0dldENvbnRlbnRQb3NpdGlvbih2aWV3LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMTAwLCBjdXJy
ZW50UGFnZVBvc2l0aW9uLngpOworICAgIEVYUEVDVF9FUSgzMDAsIGN1cnJlbnRQYWdlUG9zaXRp
b24ueSk7Cit9CisKK30gLy8gVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyL2VmbC9zY3JvbGxUby5odG1sIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyL2VmbC9zY3JvbGxUby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3Zjg4Zjc1
NDlhYzBlZmUzZjE5ZWVlMDM4N2ExNjE0YjAwMmU3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvZWZsL3Njcm9sbFRvLmh0bWwKQEAgLTAsMCAr
MSw4IEBACis8aHRtbD4KKzxib2R5IHN0eWxlPSJ3aWR0aDoyMDAwcHg7aGVpZ2h0OjIwMDBweDsi
Pgorc2Nyb2xsVG8gVGVzdAorPHNjcmlwdD4KK3dpbmRvdy5zY3JvbGxUbygxMDAsIDMwMCk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvZWZsL0luamVjdGVkQnVuZGxlQ29udHJvbGxlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2VmbC9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyNDQyYmQxNTA0
Mzk3YjlmOTRjMGVlOTEyMTA1MTVlYzg4ZTAzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL2VmbC9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEs
MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlQ29udHJvbGxlci5o
IgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkgeworCit2b2lkIEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXpl
KCkKK3sKKyAgICBXVEZJbnN0YWxsUmVwb3J0QmFja3RyYWNlT25DcmFzaEhvb2soKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9lZmwvUGxhdGZvcm1VdGlsaXRpZXMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwv
UGxhdGZvcm1VdGlsaXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1YzU0ZTFhNzhiMGU4NWI5NzJkODcw
MjVjZDMyYzIyMzFiOGVlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2VmbC9QbGF0Zm9ybVV0aWxpdGllcy5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtVXRpbGl0aWVz
LmgiCisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworbmFtZXNwYWNlIFV0aWwg
eworCit2b2lkIHJ1bihib29sKiBkb25lKQoreworICAgIHdoaWxlICghKmRvbmUpCisgICAgICAg
IGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7Cit9CisKK3ZvaWQgc2xlZXAoZG91YmxlIHNlY29u
ZHMpCit7CisgICAgdXNsZWVwKHNlY29uZHMgKiAxMDAwMDAwKTsKK30KKworV0tVUkxSZWYgY3Jl
YXRlVVJMRm9yUmVzb3VyY2UoY29uc3QgY2hhciogcmVzb3VyY2UsIGNvbnN0IGNoYXIqIGV4dGVu
c2lvbikKK3sKKyAgICBjaGFyIHVybFtQQVRIX01BWF07CisKKyAgICBzbnByaW50Zih1cmwsIHNp
emVvZih1cmwpLCAiZmlsZTovLyVzLyVzLiVzIiwgVEVTVF9XRUJLSVQyX1JFU09VUkNFU19ESVIs
IHJlc291cmNlLCBleHRlbnNpb24pOworCisgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHVybCk7Cit9CisKK1dLU3RyaW5nUmVmIGNyZWF0ZUluamVjdGVkQnVuZGxlUGF0aCgp
Cit7CisgICAgcmV0dXJuIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFRFU1RfSU5KRUNU
RURfQlVORExFX1BBVEgpOworfQorCitXS1VSTFJlZiBVUkxGb3JOb25FeGlzdGVudFJlc291cmNl
KCkKK3sKKyAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZpbGU6Ly8vZG9l
cy1ub3QtZXhpc3QuaHRtbCIpOworfQorCitXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gTUlNRVR5
cGVGb3JXS1VSTFJlc3BvbnNlKFdLVVJMUmVzcG9uc2VSZWYgd2tSZXNwb25zZSkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHdrUmVzcG9uc2UpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgVXRpbAorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
YzcxMzQyOTk0YzJjODY4N2VhM2UxOTY4ODA4MjBkNWYyYjc2MzM0Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcApAQCAtMCwwICsx
LDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImV3
a19tYWluLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtV2ViVmlldy5oIgorI2luY2x1ZGUgIkVXZWJLaXQyLmgiCisjaW5jbHVkZSA8V2ViS2l0L1dL
QVBJQ2FzdC5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2VDb25maWd1cmF0aW9uUmVmLmg+Cisj
aW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLVmlld0Vm
bC5oPgorI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKworZXh0ZXJuIGJvb2wgdXNlWDExV2luZG93
OworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CisKK3N0YXRpYyBFY29yZV9FdmFzKiBjcmVhdGVFY29yZUV2YXMoKQoreworICAgIEVjb3JlX0V2
YXMqIGVjb3JlRXZhczsKKyNpZiBkZWZpbmVkKEhBVkVfRUNPUkVfWCkKKyAgICBlY29yZUV2YXMg
PSBlY29yZV9ldmFzX25ldygib3BlbmdsX3gxMSIsIDAsIDAsIDgwMCwgNjAwLCAwKTsKKyAgICAv
LyBHcmFjZWZ1bCBmYWxsYmFjayB0byBzb2Z0d2FyZSByZW5kZXJpbmcgaWYgZXZhc19nbCBlbmdp
bmUgaXMgbm90IGF2YWlsYWJsZS4KKyAgICBpZiAoIWVjb3JlRXZhcykKKyNlbmRpZgorICAgIGVj
b3JlRXZhcyA9IGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAsIDgwMCwgNjAwLCAwKTsKKworICAgIEFT
U0VSVChlY29yZUV2YXMpOworCisgICAgZWNvcmVfZXZhc19zaG93KGVjb3JlRXZhcyk7CisKKyAg
ICByZXR1cm4gZWNvcmVFdmFzOworfQorCitzdGF0aWMgdm9pZCBvbldlYlByb2Nlc3NDcmFzaGVk
KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBib29sKiBoYW5k
bGVkID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGV2ZW50SW5mbyk7CisgICAgKmhhbmRsZWQgPSB0cnVl
OworfQorCitQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29u
dGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQoreworICAgIG1fd2luZG93ID0g
Y3JlYXRlRWNvcmVFdmFzKCk7CisKKyAgICBXS1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9u
UmVmPiBwYWdlQ29uZmlndXJhdGlvbiA9IGFkb3B0V0soV0tQYWdlQ29uZmlndXJhdGlvbkNyZWF0
ZSgpKTsKKyAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0Q29udGV4dChwYWdlQ29uZmlndXJhdGlv
bi5nZXQoKSwgY29udGV4dFJlZik7CisgICAgV0tQYWdlQ29uZmlndXJhdGlvblNldFBhZ2VHcm91
cChwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgcGFnZUdyb3VwUmVmKTsKKworICAgIG1fdmlldyA9
IEVXS1ZpZXdDcmVhdGUocGFnZUNvbmZpZ3VyYXRpb24uZ2V0KCksIGVjb3JlX2V2YXNfZ2V0KG1f
d2luZG93KSwgLyogc21hcnQgKi8gMCk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
d2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoREVGQVVMVF9U
SEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpKTsKKyAgICBXS1ZpZXdTZXRUaGVtZVBhdGgoRVdLVmll
d0dldFdLVmlldyhtX3ZpZXcpLCB3a1RoZW1lLmdldCgpKTsKKworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZChtX3ZpZXcsICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlByb2Nl
c3NDcmFzaGVkLCAwKTsKKyAgICByZXNpemVUbyg2MDAsIDgwMCk7Cit9CisKK1BsYXRmb3JtV2Vi
Vmlldzo6flBsYXRmb3JtV2ViVmlldygpCit7CisgICAgZXZhc19vYmplY3RfZGVsKG1fdmlldyk7
CisKKyAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOworfQorCit2b2lkIFBsYXRmb3JtV2Vi
Vmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBl
dmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworV0tQYWdlUmVm
IFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdLVmlld0dldFBh
Z2UoRVdLVmlld0dldFdLVmlldyhtX3ZpZXcpKTsKK30KKwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6
OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcygpCit7CisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2Jq
ZWN0X2V2YXNfZ2V0KG1fdmlldyk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywg
dHJ1ZSk7CisgICAgZXZhc19ldmVudF9mZWVkX2tleV9kb3duKGV2YXMsICJzcGFjZSIsICJzcGFj
ZSIsICIgIiwgMCwgMCwgMCk7CisgICAgZXZhc19ldmVudF9mZWVkX2tleV91cChldmFzLCAic3Bh
Y2UiLCAic3BhY2UiLCAiICIsIDAsIDEsIDApOworfQorCit2b2lkIFBsYXRmb3JtV2ViVmlldzo6
c2ltdWxhdGVNb3VzZU1vdmUodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKK3sKKyAgICBFdmFzKiBl
dmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93
KG1fdmlldyk7CisgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwg
MCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2sodW5zaWdu
ZWQgeCwgdW5zaWduZWQgeSkKK3sKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19n
ZXQobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KG1fdmlldyk7CisgICAgZXZhc19ldmVu
dF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CisgICAgZXZhc19ldmVudF9mZWVk
X21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CisgICAgZXZhc19l
dmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOworfQor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2VmbC9tYWluLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL21haW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkwMDJiYzdiNWY4MTFlNDQyMTI3ZDgyZGJkMGU4MjY3MDdhODIxNmEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9tYWluLmNwcApAQCAtMCwwICsx
LDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RzQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworYm9vbCB1c2VYMTFXaW5kb3cgPSBmYWxzZTsKKwor
c3RhdGljIGJvb2wgY2hlY2tGb3JVc2VYMTFXaW5kb3dBcmd1bWVudChpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCit7CisgICAgaW50IGhhc1VzZVgxMVdpbmRvdyA9IDA7CisKKyAgICBzdGF0aWMgY29u
c3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKyAgICAgICAgeyJ1c2VYMTFXaW5kb3ciLCBub19hcmd1
bWVudCwgJmhhc1VzZVgxMVdpbmRvdywgMX0sCisgICAgICAgIHswLCAwLCAwLCAwfQorICAgIH07
CisKKyAgICB3aGlsZSAoZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIiIsIG9wdGlvbnMsIDApICE9
IC0xKSB7IH0KKworICAgIHJldHVybiBoYXNVc2VYMTFXaW5kb3c7Cit9CisKK2ludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBXVEZJbnN0YWxsUmVwb3J0QmFja3RyYWNlT25D
cmFzaEhvb2soKTsKKyAgICBzZXRlbnYoIldFQktJVF9FWEVDX1BBVEgiLCBXRUJLSVRfRVhFQ19Q
QVRILCBmYWxzZSk7CisKKyAgICBpZiAoIWV3a19pbml0KCkpCisgICAgICAgIHJldHVybiBFWElU
X0ZBSUxVUkU7CisKKyAgICB1c2VYMTFXaW5kb3cgPSBjaGVja0ZvclVzZVgxMVdpbmRvd0FyZ3Vt
ZW50KGFyZ2MsIGFyZ3YpOworCisgICAgaW50IHJldHVybkNvZGUgPSBUZXN0V2ViS2l0QVBJOjpU
ZXN0c0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJ1bihhcmdjLCBhcmd2KSA/IEVYSVRfU1VDQ0VT
UyA6IEVYSVRfRkFJTFVSRTsKKworICAgIGV3a19zaHV0ZG93bigpOworCisgICAgcmV0dXJuIHJl
dHVybkNvZGU7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL2VmbC9BY3RpdmF0ZUZvbnRzRWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvZWZsL0FjdGl2YXRlRm9udHNFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3ODVm
Nzc5OWI3MDQ5YjE0NGMzY2I5N2M1ZWY5OWYzNTM0OTNhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9BY3RpdmF0ZUZvbnRzRWZs
LmNwcApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjdGl2YXRlRm9udHMu
aCIKKworI2luY2x1ZGUgIkZvbnRNYW5hZ2VtZW50LmgiCisKK25hbWVzcGFjZSBXVFIgeworCit2
b2lkIGFjdGl2YXRlRm9udHMoKQoreworICAgIGFkZEZvbnRzVG9FbnZpcm9ubWVudCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvZWZsL0ZvbnRNYW5hZ2VtZW50LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL0ZvbnRNYW5hZ2VtZW50LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
ZmYzZjA4MWU5OGE5M2ZhMWM5NGUxMWE1M2YxMDFlZDFiYTIyMDcyCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwvRm9udE1hbmFnZW1l
bnQuY3BwCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZV
U0lPTiBFbWJlZGRlZCBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVj
dHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZvbnRNYW5hZ2VtZW50LmgiCisKKyNpbmNsdWRlIDxFY29yZV9GaWxlLmg+CisjaW5jbHVkZSA8
Y3N0ZGlvPgorI2luY2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZpZy5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorCitzdGF0aWMgQ1N0cmluZyBidWlsZFBhdGgoY29uc3Qg
Y2hhciogYmFzZSwgY29uc3QgY2hhciogZmlyc3QsIC4uLikKK3sKKyAgICB2YV9saXN0IGFwOwor
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoYmFzZSk7CisKKyAg
ICBpZiAoY29uc3QgY2hhciogY3VycmVudCA9IGZpcnN0KSB7CisgICAgICAgIHZhX3N0YXJ0KGFw
LCBmaXJzdCk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY3VycmVudCk7CisgICAgICAgIH0gd2hpbGUgKChj
dXJyZW50ID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyKikpKTsKKyAgICAgICAgdmFfZW5kKGFwKTsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCkudXRmOCgpOworfQorCitzdGF0
aWMgVmVjdG9yPENTdHJpbmc+IGdldENvcmVGb250RmlsZXMoKQoreworICAgIFZlY3RvcjxDU3Ry
aW5nPiBmb250RmlsZVBhdGhzOworCisgICAgLy8gQWhlbSBpcyB1c2VkIGJ5IG1hbnkgbGF5b3V0
IHRlc3RzLgorICAgIGZvbnRGaWxlUGF0aHMuYXBwZW5kKENTdHJpbmcoRk9OVFNfQ09ORl9ESVIg
Ii9BSEVNX19fXy5UVEYiKSk7CisgICAgLy8gQSBmb250IHdpdGggbm8gdmFsaWQgRm9udGNvbmZp
ZyBlbmNvZGluZyB0byB0ZXN0IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NzQ1MgorICAgIGZvbnRGaWxlUGF0aHMuYXBwZW5kKENTdHJpbmcoRk9OVFNfQ09ORl9ESVIg
Ii9Gb250V2l0aE5vVmFsaWRFbmNvZGluZy5mb24iKSk7CisKKyAgICBmb3IgKGludCBpID0gMTsg
aSA8PSA5OyBpKyspIHsKKyAgICAgICAgY2hhciBmb250UGF0aFtFSU5BX1BBVEhfTUFYXTsKKyAg
ICAgICAgc25wcmludGYoZm9udFBhdGgsIEVJTkFfUEFUSF9NQVggLSAxLCBGT05UU19DT05GX0RJ
UiAiLy4uLy4uL2ZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIlaTAwLnR0ZiIsIGkpOworICAgICAg
ICBmb250RmlsZVBhdGhzLmFwcGVuZChDU3RyaW5nKGZvbnRQYXRoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIGZvbnRGaWxlUGF0aHM7Cit9CisKK3N0YXRpYyB2b2lkIGFkZEZvbnREaXJlY3Rvcnko
Y29uc3QgQ1N0cmluZyYgZm9udERpcmVjdG9yeSwgRmNDb25maWcqIGNvbmZpZykKK3sKKyAgICBj
b25zdCBjaGFyKiBmb250UGF0aCA9IGZvbnREaXJlY3RvcnkuZGF0YSgpOworICAgIGlmICghZm9u
dFBhdGggfHwgIUZjQ29uZmlnQXBwRm9udEFkZERpcihjb25maWcsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgRmNDaGFyOCo+KGZvbnRQYXRoKSkpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291
bGQgbm90IGFkZCBmb250IGRpcmVjdG9yeSAlcyFcbiIsIGZvbnRQYXRoKTsKK30KKworc3RhdGlj
IHZvaWQgYWRkRm9udEZpbGVzKGNvbnN0IFZlY3RvcjxDU3RyaW5nPiYgZm9udEZpbGVzLCBGY0Nv
bmZpZyogY29uZmlnKQoreworICAgIFZlY3RvcjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQs
IGVuZCA9IGZvbnRGaWxlcy5lbmQoKTsKKyAgICBmb3IgKGl0ID0gZm9udEZpbGVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBjaGFyKiBmaWxlUGF0aCA9ICgqaXQp
LmRhdGEoKTsKKyAgICAgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGNvbmZpZywgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZmlsZVBhdGgpKSkKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ291bGQgbm90IGxvYWQgZm9udCBhdCAlcyFcbiIsIGZpbGVQYXRoKTsK
KyAgICB9Cit9CisKK3N0YXRpYyBDU3RyaW5nIGdldEN1c3RvbUJ1aWxkRGlyKCkKK3sKKyAgICBp
ZiAoY29uc3QgY2hhciogdXNlckNob3NlbkJ1aWxkRGlyID0gZ2V0ZW52KCJXRUJLSVRfT1VUUFVU
RElSIikpIHsKKyAgICAgICAgaWYgKGVjb3JlX2ZpbGVfaXNfZGlyKHVzZXJDaG9zZW5CdWlsZERp
cikpCisgICAgICAgICAgICByZXR1cm4gdXNlckNob3NlbkJ1aWxkRGlyOworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIldFQktJVF9PVVRQVVRESVIgc2V0IHRvICclcycsIGJ1dCBwYXRoIGRvZXNu
J3QgZXhpc3QuXG4iLCB1c2VyQ2hvc2VuQnVpbGREaXIpOworICAgIH0KKworICAgIHJldHVybiBD
U3RyaW5nKCk7Cit9CisKK3N0YXRpYyBDU3RyaW5nIGdldFBsYXRmb3JtRm9udHNQYXRoKCkKK3sK
KyAgICBDU3RyaW5nIGN1c3RvbUJ1aWxkRGlyID0gZ2V0Q3VzdG9tQnVpbGREaXIoKTsKKyAgICBp
ZiAoIWN1c3RvbUJ1aWxkRGlyLmlzTnVsbCgpKSB7CisgICAgICAgIENTdHJpbmcgZm9udHNQYXRo
ID0gYnVpbGRQYXRoKGN1c3RvbUJ1aWxkRGlyLmRhdGEoKSwgIkRlcGVuZGVuY2llc0VGTCIsICJS
b290IiwgIndlYmtpdGd0ay10ZXN0LWZvbnRzIiwgMCk7CisgICAgICAgIGlmICghZWNvcmVfZmls
ZV9leGlzdHMoZm9udHNQYXRoLmRhdGEoKSkpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IldFQktJVF9PVVRQVVRESVIgc2V0IHRvICclcycsIGJ1dCBjb3VsZCBub3QgbG9jYWwgdGVzdCBm
b250cy5cbiIsIGN1c3RvbUJ1aWxkRGlyLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmb250c1Bh
dGg7CisgICAgfQorCisgICAgQ1N0cmluZyBmb250c1BhdGggPSBDU3RyaW5nKERPV05MT0FERURf
Rk9OVFNfRElSKTsKKyAgICBpZiAoZWNvcmVfZmlsZV9leGlzdHMoZm9udHNQYXRoLmRhdGEoKSkp
CisgICAgICAgIHJldHVybiBmb250c1BhdGg7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxk
IG5vdCBsb2NhdGUgdGVzdHMgZm9udHMsIHRyeSBzZXR0aW5nIFdFQktJVF9PVVRQVVRESVIuXG4i
KTsKKyAgICByZXR1cm4gQ1N0cmluZygpOworfQorCit2b2lkIGFkZEZvbnRzVG9FbnZpcm9ubWVu
dCgpCit7CisgICAgRmNJbml0KCk7CisKKyAgICAvLyBMb2FkIG91ciBjb25maWd1cmF0aW9uIGZp
bGUsIHdoaWNoIHNldHMgdXAgcHJvcGVyIGFsaWFzZXMgZm9yIGZhbWlseQorICAgIC8vIG5hbWVz
IGxpa2Ugc2Fucywgc2VyaWYgYW5kIG1vbm9zcGFjZS4KKyAgICBGY0NvbmZpZyogY29uZmlnID0g
RmNDb25maWdDcmVhdGUoKTsKKyAgICBjb25zdCBjaGFyKiBmb250Q29uZmlnRmlsZW5hbWUgPSBG
T05UU19DT05GX0RJUiAiL2ZvbnRzLmNvbmYiOworICAgIGlmICghRmNDb25maWdQYXJzZUFuZExv
YWQoY29uZmlnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihmb250Q29uZmlnRmls
ZW5hbWUpLCB0cnVlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGxvYWQg
Zm9udCBjb25maWd1cmF0aW9uIGZpbGUgZnJvbTogJXNcbiIsIGZvbnRDb25maWdGaWxlbmFtZSk7
CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgYWRkRm9udEZpbGVzKGdldENvcmVGb250
RmlsZXMoKSwgY29uZmlnKTsKKyAgICBhZGRGb250RGlyZWN0b3J5KGdldFBsYXRmb3JtRm9udHNQ
YXRoKCksIGNvbmZpZyk7CisKKyAgICBpZiAoIUZjQ29uZmlnU2V0Q3VycmVudChjb25maWcpKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IHNldCB0aGUgY3VycmVudCBmb250
IGNvbmZpZ3VyYXRpb24hXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9Cit9CisKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL0ZvbnRNYW5h
Z2VtZW50LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9Gb250
TWFuYWdlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0OTc1MTNhZWRjMTM5OWY0NmZjMGI5MWRkNGY0Mjg1
NTdkNzQxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2VmbC9Gb250TWFuYWdlbWVudC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZvbnRN
YW5hZ2VtZW50X2gKKyNkZWZpbmUgRm9udE1hbmFnZW1lbnRfaAorCit2b2lkIGFkZEZvbnRzVG9F
bnZpcm9ubWVudCgpOworCisjZW5kaWYgLy8gRm9udE1hbmFnZW1lbnRfaApkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwvSW5qZWN0ZWRCdW5kbGVF
ZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwvSW5qZWN0
ZWRCdW5kbGVFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExOTgzMjA5NTVlMjU4N2JhMjM0MjkyMzQyNWM3
ZjIxMTcxM2MzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2VmbC9JbmplY3RlZEJ1bmRsZUVmbC5jcHAKQEAgLTAsMCArMSwzMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgorCisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBs
YXRmb3JtSW5pdGlhbGl6ZShXS1R5cGVSZWYpCit7CisgICAgV1RGSW5zdGFsbFJlcG9ydEJhY2t0
cmFjZU9uQ3Jhc2hIb29rKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwvVGVzdFJ1bm5lckVmbC5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9UZXN0UnVubmVy
RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45OTYzMThiNWNkNDUyMjI4NjJhOGNhNmQwOTBlYTg2MmZlNGE2
NGJkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9lZmwvVGVzdFJ1bm5lckVmbC5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0UnVubmVyLmgiCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgorI2lu
Y2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3BhcXVlSlNTdHJpbmcu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0VmbEluc3BlY3RvclV0aWxpdGllcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitz
dGF0aWMgRWluYV9Cb29sIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyQ2FsbGJhY2sodm9pZCopCit7
CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+d2FpdFRvRHVt
cFdhdGNoZG9nVGltZXJGaXJlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBUZXN0
UnVubmVyOjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworICAgIG1fd2FpdFRvRHVtcFdhdGNoZG9n
VGltZXIgPSAwOworfQorCit2b2lkIFRlc3RSdW5uZXI6OmludmFsaWRhdGVXYWl0VG9EdW1wV2F0
Y2hkb2dUaW1lcigpCit7CisgICAgaWYgKCFtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBlY29yZV90aW1lcl9kZWwobV93YWl0VG9EdW1wV2F0Y2hkb2dU
aW1lcik7CisgICAgbV93YWl0VG9EdW1wV2F0Y2hkb2dUaW1lciA9IDA7Cit9CisKK3ZvaWQgVGVz
dFJ1bm5lcjo6aW5pdGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQoKQorewor
ICAgIGlmIChtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3dhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyID0gZWNvcmVfdGltZXJfbG9vcF9hZGQobV90aW1l
b3V0IC8gMTAwMC4wLCB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckNhbGxiYWNrLCAwKTsKK30KKwor
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFRlc3RSdW5uZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2Uo
SlNTdHJpbmdSZWYgdXJsKQoreworICAgIFN0cmluZyByZXF1ZXN0ZWRVcmwodXJsLT5jaGFyYWN0
ZXJzKCksIHVybC0+bGVuZ3RoKCkpOworICAgIFN0cmluZyByZXNvdXJjZVJvb3Q7CisgICAgU3Ry
aW5nIHJlcXVlc3RlZFJvb3Q7CisKKyAgICBpZiAocmVxdWVzdGVkVXJsLmZpbmQoIkxheW91dFRl
c3RzIikgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgLy8gSWYgdGhlIFVSTCBjb250YWlucyBMYXlv
dXRUZXN0cyB3ZSBuZWVkIHRvIHJlbWFwIHRoYXQgdG8KKyAgICAgICAgLy8gTE9DQUxfUkVTT1VS
Q0VfUk9PVCB3aGljaCBpcyB0aGUgcGF0aCBvZiB0aGUgTGF5b3V0VGVzdHMgZGlyZWN0b3J5Cisg
ICAgICAgIC8vIHdpdGhpbiB0aGUgV2ViS2l0IHNvdXJjZSB0cmVlLgorICAgICAgICByZXF1ZXN0
ZWRSb290ID0gIi90bXAvTGF5b3V0VGVzdHMiOworICAgICAgICByZXNvdXJjZVJvb3QgPSBnZXRl
bnYoIkxPQ0FMX1JFU09VUkNFX1JPT1QiKTsKKyAgICB9IGVsc2UgaWYgKHJlcXVlc3RlZFVybC5m
aW5kKCJ0bXAiKSAhPSBub3RGb3VuZCkgeworICAgICAgICAvLyBJZiB0aGUgVVJMIGlzIGEgY2hp
bGQgb2YgL3RtcCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gYmUgYSBjaGlsZAorICAgICAgICAv
LyBEVU1QUkVOREVSVFJFRV9URU1QIHJlcGxhY2UgdG1wIHdpdGggRFVNUFJFTkRFUlRSRUVfVEVN
UAorICAgICAgICByZXF1ZXN0ZWRSb290ID0gIi90bXAiOworICAgICAgICByZXNvdXJjZVJvb3Qg
PSBnZXRlbnYoIkRVTVBSRU5ERVJUUkVFX1RFTVAiKTsKKyAgICB9CisKKyAgICBzaXplX3QgaW5k
ZXhPZlJvb3RTdGFydCA9IHJlcXVlc3RlZFVybC5yZXZlcnNlRmluZChyZXF1ZXN0ZWRSb290KTsK
KyAgICBzaXplX3QgaW5kZXhPZlNlcGFyYXRvckFmdGVyUm9vdCA9IGluZGV4T2ZSb290U3RhcnQg
KyByZXF1ZXN0ZWRSb290Lmxlbmd0aCgpOworICAgIFN0cmluZyBmdWxsUGF0aFRvVXJsID0gImZp
bGU6Ly8iICsgcmVzb3VyY2VSb290ICsgcmVxdWVzdGVkVXJsLnN1YnN0cmluZyhpbmRleE9mU2Vw
YXJhdG9yQWZ0ZXJSb290KTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhmdWxsUGF0aFRvVXJsLnV0ZjgoKS5kYXRhKCkpOworfQorCitKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gVGVzdFJ1bm5lcjo6aW5zcGVjdG9yVGVzdFN0dWJVUkwoKQoreworICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgiZmlsZTovLyIpOworICAgIGJ1
aWxkZXIuYXBwZW5kKFdlYkNvcmU6Omluc3BlY3RvclJlc291cmNlUGF0aCgpKTsKKyAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIi9UZXN0U3R1Yi5odG1sIik7CisKKyAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZlZjAyOWI5MTEwZWNi
MjA5YTM0NDE3MjY5YzZiZDYxY2VjYTdjMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBAIC0wLDAgKzEsNTcyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2Vr
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRXZlbnRTZW5kZXJQcm94eS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJUZXN0Q29u
dHJvbGxlci5oIgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdUUiB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBtb2RpZmllck5hbWVz
W10gPSB7ICJTaGlmdCIsICJDb250cm9sIiwgIkFsdCIsICJNZXRhIiB9OworCitlbnVtIFdUUkV2
ZW50VHlwZSB7CisgICAgV1RSRXZlbnRUeXBlTm9uZSA9IDAsCisgICAgV1RSRXZlbnRUeXBlTW91
c2VEb3duLAorICAgIFdUUkV2ZW50VHlwZU1vdXNlVXAsCisgICAgV1RSRXZlbnRUeXBlTW91c2VN
b3ZlLAorICAgIFdUUkV2ZW50VHlwZU1vdXNlU2Nyb2xsQnksCisgICAgV1RSRXZlbnRUeXBlTGVh
cEZvcndhcmQKK307CisKK2VudW0gRXZhc01vdXNlQnV0dG9uIHsKKyAgICBFdmFzTW91c2VCdXR0
b25Ob25lID0gMCwKKyAgICBFdmFzTW91c2VCdXR0b25MZWZ0LAorICAgIEV2YXNNb3VzZUJ1dHRv
bk1pZGRsZSwKKyAgICBFdmFzTW91c2VCdXR0b25SaWdodAorfTsKKworLy8gS2V5IGV2ZW50IGxv
Y2F0aW9uIGNvZGUgZGVmaW5lZCBpbiBET00gTGV2ZWwgMy4KK2VudW0gS2V5TG9jYXRpb25Db2Rl
IHsKKyAgICBET01LZXlMb2NhdGlvblN0YW5kYXJkICAgICAgPSAweDAwLAorICAgIERPTUtleUxv
Y2F0aW9uTGVmdCAgICAgICAgICA9IDB4MDEsCisgICAgRE9NS2V5TG9jYXRpb25SaWdodCAgICAg
ICAgID0gMHgwMiwKKyAgICBET01LZXlMb2NhdGlvbk51bXBhZCAgICAgICAgPSAweDAzCit9Owor
CitzdHJ1Y3QgV1RSRXZlbnQgeworICAgIFdUUkV2ZW50VHlwZSBldmVudFR5cGU7CisgICAgdW5z
aWduZWQgZGVsYXk7CisgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnM7CisgICAgaW50IGJ1
dHRvbjsKKyAgICBpbnQgaG9yaXpvbnRhbDsKKyAgICBpbnQgdmVydGljYWw7CisKKyAgICBXVFJF
dmVudCgpCisgICAgICAgIDogZXZlbnRUeXBlKFdUUkV2ZW50VHlwZU5vbmUpCisgICAgICAgICwg
ZGVsYXkoMCkKKyAgICAgICAgLCBtb2RpZmllcnMoMCkKKyAgICAgICAgLCBidXR0b24oLTEpCisg
ICAgICAgICwgaG9yaXpvbnRhbCgtMSkKKyAgICAgICAgLCB2ZXJ0aWNhbCgtMSkKKyAgICB7Cisg
ICAgfQorCisgICAgV1RSRXZlbnQoV1RSRXZlbnRUeXBlIGV2ZW50VHlwZSwgdW5zaWduZWQgZGVs
YXksIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCBpbnQgYnV0dG9uKQorICAgICAgICA6IGV2
ZW50VHlwZShldmVudFR5cGUpCisgICAgICAgICwgZGVsYXkoZGVsYXkpCisgICAgICAgICwgbW9k
aWZpZXJzKG1vZGlmaWVycykKKyAgICAgICAgLCBidXR0b24oYnV0dG9uKQorICAgICAgICAsIGhv
cml6b250YWwoLTEpCisgICAgICAgICwgdmVydGljYWwoLTEpCisgICAgeworICAgIH0KK307CisK
K3N0cnVjdCBLZXlFdmVudEluZm8gOiBwdWJsaWMgUmVmQ291bnRlZDxLZXlFdmVudEluZm8+IHsK
KyAgICBLZXlFdmVudEluZm8oY29uc3QgQ1N0cmluZyYga2V5TmFtZSwgY29uc3QgQ1N0cmluZyYg
a2V5U3RyaW5nKQorICAgICAgICA6IGtleU5hbWUoa2V5TmFtZSkKKyAgICAgICAgLCBrZXlTdHJp
bmcoa2V5U3RyaW5nKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBDU3RyaW5nIGtleU5hbWU7
CisgICAgY29uc3QgQ1N0cmluZyBrZXlTdHJpbmc7Cit9OworCitzdGF0aWMgdW5zaWduZWQgZXZh
c01vdXNlQnV0dG9uKHVuc2lnbmVkIGJ1dHRvbikKK3sKKyAgICAvLyBUaGUgY29tbW9uIGNhc2Ug
aW52b2x2ZXMgY29udmVydGluZyBmcm9tIGEgV0tFdmVudE1vdXNlQnV0dG9uICh3aGljaAorICAg
IC8vIHN0YXJ0cyBhdCAtMSkgdG8gYW4gRXZhc01vdXNlQnV0dG9uICh3aGljaCBhIHN0YXJ0cyBh
dCAwKS4gVGhlIHNwZWNpYWwKKyAgICAvLyBjYXNlIGZvciBidXR0b24gMyBleGlzdHMgYmVjYXVz
ZSBvZiBmYXN0L2V2ZW50cy9tb3VzZS1jbGljay1ldmVudHMuaHRtbCwKKyAgICAvLyB3aGljaCB0
ZXN0cyB3aGV0aGVyIGEgNHRoIG1vdXNlIGJ1dHRvbiBiZWhhdmVzIGFzIHRoZSBtaWRkbGUgb25l
LgorICAgIGlmIChidXR0b24gPD0ga1dLRXZlbnRNb3VzZUJ1dHRvblJpZ2h0QnV0dG9uKQorICAg
ICAgICByZXR1cm4gYnV0dG9uICsgMTsKKyAgICBpZiAoYnV0dG9uID09IGtXS0V2ZW50TW91c2VC
dXR0b25SaWdodEJ1dHRvbiArIDEpCisgICAgICAgIHJldHVybiBFdmFzTW91c2VCdXR0b25NaWRk
bGU7CisgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbk5vbmU7Cit9CisKK3N0YXRpYyB2b2lkIHNl
dEV2YXNNb2RpZmllcnMoRXZhcyogZXZhcywgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIG1vZGlmaWVyID0gMDsgbW9kaWZpZXIgPCAoc2l6ZW9mKG1v
ZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7ICsrbW9kaWZpZXIpIHsKKyAgICAgICAgaWYg
KHdrTW9kaWZpZXJzICYgKDEgPDwgbW9kaWZpZXIpKQorICAgICAgICAgICAgZXZhc19rZXlfbW9k
aWZpZXJfb24oZXZhcywgbW9kaWZpZXJOYW1lc1ttb2RpZmllcl0pOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBldmFzX2tleV9tb2RpZmllcl9vZmYoZXZhcywgbW9kaWZpZXJOYW1lc1ttb2Rp
Zmllcl0pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hNb3VzZURvd25FdmVudChF
dmFzKiBldmFzLCB1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMs
IGludCBjbGlja0NvdW50KQoreworICAgIEV2YXNfQnV0dG9uX0ZsYWdzIGJ1dHRvbkZsYWdzID0g
RVZBU19CVVRUT05fTk9ORTsKKyAgICBpZiAoY2xpY2tDb3VudCA9PSAzKQorICAgICAgICBidXR0
b25GbGFncyA9IEVWQVNfQlVUVE9OX1RSSVBMRV9DTElDSzsKKyAgICBlbHNlIGlmIChjbGlja0Nv
dW50ID09IDIpCisgICAgICAgIGJ1dHRvbkZsYWdzID0gRVZBU19CVVRUT05fRE9VQkxFX0NMSUNL
OworCisgICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCB3a01vZGlmaWVycyk7CisgICAgZXZhc19l
dmVudF9mZWVkX21vdXNlX2Rvd24oZXZhcywgYnV0dG9uLCBidXR0b25GbGFncywgMCwgMCk7Cisg
ICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hN
b3VzZVVwRXZlbnQoRXZhcyogZXZhcywgdW5zaWduZWQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJz
IHdrTW9kaWZpZXJzKQoreworICAgIHNldEV2YXNNb2RpZmllcnMoZXZhcywgd2tNb2RpZmllcnMp
OworICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV91cChldmFzLCBidXR0b24sIEVWQVNfQlVUVE9O
X05PTkUsIDAsIDApOworICAgIHNldEV2YXNNb2RpZmllcnMoZXZhcywgMCk7Cit9CisKK3N0YXRp
YyB2b2lkIGRpc3BhdGNoTW91c2VNb3ZlRXZlbnQoRXZhcyogZXZhcywgaW50IHgsIGludCB5KQor
eworICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOworfQor
CitzdGF0aWMgdm9pZCBkaXNwYXRjaE1vdXNlU2Nyb2xsQnlFdmVudChFdmFzKiBldmFzLCBpbnQg
aG9yaXpvbnRhbCwgaW50IHZlcnRpY2FsKQoreworICAgIGlmIChob3Jpem9udGFsKQorICAgICAg
ICBldmFzX2V2ZW50X2ZlZWRfbW91c2Vfd2hlZWwoZXZhcywgMSwgaG9yaXpvbnRhbCwgMCwgMCk7
CisKKyAgICBpZiAodmVydGljYWwpCisgICAgICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93aGVl
bChldmFzLCAwLCB2ZXJ0aWNhbCwgMCwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBSZWZQdHI8S2V5
RXZlbnRJbmZvPiBrZXlQYWROYW1lKFdLU3RyaW5nUmVmIGtleVJlZikKK3sKKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJsZWZ0QXJyb3ciKSkKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0xlZnQiLCAiIikpOworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInJpZ2h0QXJyb3ciKSkKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX1JpZ2h0IiwgIiIpKTsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJ1cEFycm93Iikp
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9VcCIsICIiKSk7
CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiZG93bkFycm93
IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9Eb3duIiwg
IiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJwYWdl
VXAiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX1ByaW9y
IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJw
YWdlRG93biIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1Bf
TmV4dCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVm
LCAiaG9tZSIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1Bf
SG9tZSIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVm
LCAiZW5kIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9F
bmQiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwg
Imluc2VydCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1Bf
SW5zZXJ0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlS
ZWYsICJkZWxldGUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8o
IktQX0RlbGV0ZSIsICIiKSk7CisKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IFdLU3RyaW5nR2V0
TWF4aW11bVVURjhDU3RyaW5nU2l6ZShrZXlSZWYpOworICAgIGF1dG8gYnVmZmVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxjaGFyW10+KGJ1ZmZlclNpemUpOworICAgIFdLU3RyaW5nR2V0VVRGOENTdHJp
bmcoa2V5UmVmLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgS2V5RXZlbnRJbmZvKGJ1ZmZlci5nZXQoKSwgYnVmZmVyLmdldCgpKSk7Cit9CisKK3N0
YXRpYyBjb25zdCBSZWZQdHI8S2V5RXZlbnRJbmZvPiBrZXlOYW1lKFdLU3RyaW5nUmVmIGtleVJl
ZikKK3sKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJsZWZ0
QXJyb3ciKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkxlZnQi
LCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInJp
Z2h0QXJyb3ciKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlJp
Z2h0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYs
ICJ1cEFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJV
cCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAi
ZG93bkFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJE
b3duIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYs
ICJwYWdlVXAiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlBy
aW9yIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYs
ICJwYWdlRG93biIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygi
TmV4dCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVm
LCAiaG9tZSIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiSG9t
ZSIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAi
ZW5kIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJFbmQiLCAi
IikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImluc2Vy
dCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiSW5zZXJ0Iiwg
IiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJkZWxl
dGUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkRlbGV0ZSIs
ICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicHJp
bnRTY3JlZW4iKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlBy
aW50IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYs
ICJtZW51IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJNZW51
IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJs
ZWZ0Q29udHJvbCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygi
Q29udHJvbF9MIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhr
ZXlSZWYsICJyaWdodENvbnRyb2wiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlF
dmVudEluZm8oIkNvbnRyb2xfUiIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAibGVmdFNoaWZ0IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgS2V5RXZlbnRJbmZvKCJTaGlmdF9MIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXlSZWYsICJyaWdodFNoaWZ0IikpCisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgS2V5RXZlbnRJbmZvKCJTaGlmdF9SIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJsZWZ0QWx0IikpCisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJBbHRfTCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicmlnaHRBbHQiKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkFsdF9SIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMSIpKQorICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjEiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkYyIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgS2V5RXZlbnRJbmZvKCJGMiIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAiRjMiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlF
dmVudEluZm8oIkYzIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhrZXlSZWYsICJGNCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5m
bygiRjQiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJl
ZiwgIkY1IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGNSIs
ICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjYi
KSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkY2IiwgIiIpKTsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGNyIpKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjciLCAiIikpOworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkY4IikpCisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGOCIsICIiKSk7CisgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjkiKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkY5IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMTAiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBLZXlFdmVudEluZm8oIkYxMCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoa2V5UmVmLCAiRjExIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
S2V5RXZlbnRJbmZvKCJGMTEiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKGtleVJlZiwgIkYxMiIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2
ZW50SW5mbygiRjEyIiwgIiIpKTsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0gV0tTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGtleVJlZik7CisgICAgYXV0byBidWZmZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPGNoYXJbXT4oYnVmZmVyU2l6ZSk7CisgICAgV0tTdHJpbmdHZXRVVEY4Q1N0
cmluZyhrZXlSZWYsIGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAgY2hhciBjaGFyQ29k
ZSA9IGJ1ZmZlci5nZXQoKVswXTsKKworICAgIGlmIChjaGFyQ29kZSA9PSAnXG4nIHx8IGNoYXJD
b2RlID09ICdccicpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJS
ZXR1cm4iLCAiXHIiKSk7CisgICAgaWYgKGNoYXJDb2RlID09ICdcdCcpCisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJUYWIiLCAiXHQiKSk7CisgICAgaWYgKGNoYXJD
b2RlID09ICdceDgnKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygi
QmFja1NwYWNlIiwgIlx4OCIpKTsKKyAgICBpZiAoY2hhckNvZGUgPT0gJyAnKQorICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygic3BhY2UiLCAiICIpKTsKKworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKGJ1ZmZlci5nZXQoKSwgYnVmZmVyLmdldCgp
KSk7Cit9CisKK0V2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVzdENvbnRyb2xs
ZXIqIHRlc3RDb250cm9sbGVyKQorICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0Q29udHJvbGxl
cikKKyAgICAsIG1fdGltZSgwKQorICAgICwgbV9sZWZ0TW91c2VCdXR0b25Eb3duKGZhbHNlKQor
ICAgICwgbV9jbGlja0NvdW50KDApCisgICAgLCBtX2NsaWNrVGltZSgwKQorICAgICwgbV9jbGlj
a0J1dHRvbihrV0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b24pCisgICAgLCBtX21vdXNlQnV0dG9u
KGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbikKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQor
ICAgICwgbV90b3VjaFBvaW50cygwKQorI2VuZGlmCit7Cit9CisKK0V2ZW50U2VuZGVyUHJveHk6
On5FdmVudFNlbmRlclByb3h5KCkKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNs
ZWFyVG91Y2hQb2ludHMoKTsKKyNlbmRpZgorfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVw
ZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKK3sKKyAgICBpZiAobV90aW1lIC0g
bV9jbGlja1RpbWUgPCAxICYmIG1fcG9zaXRpb24gPT0gbV9jbGlja1Bvc2l0aW9uICYmIGJ1dHRv
biA9PSBtX2NsaWNrQnV0dG9uKSB7CisgICAgICAgICsrbV9jbGlja0NvdW50OworICAgICAgICBt
X2NsaWNrVGltZSA9IG1fdGltZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2xp
Y2tDb3VudCA9IDE7CisgICAgbV9jbGlja1RpbWUgPSBtX3RpbWU7CisgICAgbV9jbGlja1Bvc2l0
aW9uID0gbV9wb3NpdGlvbjsKKyAgICBtX2NsaWNrQnV0dG9uID0gYnV0dG9uOworfQorCit2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OmRpc3BhdGNoRXZlbnQoY29uc3QgV1RSRXZlbnQmIGV2ZW50KQor
eworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisKKyAgICBpZiAoZXZlbnQuZXZlbnRU
eXBlID09IFdUUkV2ZW50VHlwZU1vdXNlRG93bikKKyAgICAgICAgZGlzcGF0Y2hNb3VzZURvd25F
dmVudChldmFzLCBldmVudC5idXR0b24sIGV2ZW50Lm1vZGlmaWVycywgbV9jbGlja0NvdW50KTsK
KyAgICBlbHNlIGlmIChldmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VVcCkKKyAg
ICAgICAgZGlzcGF0Y2hNb3VzZVVwRXZlbnQoZXZhcywgZXZlbnQuYnV0dG9uLCBldmVudC5tb2Rp
ZmllcnMpOworICAgIGVsc2UgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3Vz
ZU1vdmUpCisgICAgICAgIGRpc3BhdGNoTW91c2VNb3ZlRXZlbnQoZXZhcywgc3RhdGljX2Nhc3Q8
aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkpOworICAg
IGVsc2UgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZVNjcm9sbEJ5KQor
ICAgICAgICBkaXNwYXRjaE1vdXNlU2Nyb2xsQnlFdmVudChldmFzLCBldmVudC5ob3Jpem9udGFs
LCBldmVudC52ZXJ0aWNhbCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVwbGF5U2F2
ZWRFdmVudHMoKQoreworICAgIHdoaWxlICghbV9ldmVudFF1ZXVlLmlzRW1wdHkoKSkgeworICAg
ICAgICBXVFJFdmVudCBldmVudCA9IG1fZXZlbnRRdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAg
aWYgKGV2ZW50LmRlbGF5KQorICAgICAgICAgICAgdXNsZWVwKGV2ZW50LmRlbGF5ICogMTAwMCk7
CisKKyAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgfQorfQorCit2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OnNlbmRPclF1ZXVlRXZlbnQoY29uc3QgV1RSRXZlbnQmIGV2ZW50KQorewor
ICAgIGlmIChtX2V2ZW50UXVldWUuaXNFbXB0eSgpIHx8ICFtX2V2ZW50UXVldWUubGFzdCgpLmRl
bGF5KSB7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9ldmVudFF1ZXVlLmFwcGVuZChldmVudCk7CisgICAgcmVwbGF5U2F2ZWRF
dmVudHMoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24odW5zaWduZWQg
YnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIGlmIChtX21vdXNl
QnV0dG9uID09IGJ1dHRvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tb3VzZUJ1dHRvbiA9
IGJ1dHRvbjsKKyAgICB1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGJ1dHRvbik7CisKKyAgICBz
ZW5kT3JRdWV1ZUV2ZW50KFdUUkV2ZW50KFdUUkV2ZW50VHlwZU1vdXNlRG93biwgMCwgd2tNb2Rp
ZmllcnMsIGV2YXNNb3VzZUJ1dHRvbihidXR0b24pKSk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6bW91c2VVcCh1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmll
cnMpCit7CisgICAgc2VuZE9yUXVldWVFdmVudChXVFJFdmVudChXVFJFdmVudFR5cGVNb3VzZVVw
LCAwLCB3a01vZGlmaWVycywgZXZhc01vdXNlQnV0dG9uKGJ1dHRvbikpKTsKKworICAgIGlmICht
X21vdXNlQnV0dG9uID09IGJ1dHRvbikKKyAgICAgICAgbV9tb3VzZUJ1dHRvbiA9IGtXS0V2ZW50
TW91c2VCdXR0b25Ob0J1dHRvbjsKKworICAgIG1fY2xpY2tQb3NpdGlvbiA9IG1fcG9zaXRpb247
CisgICAgbV9jbGlja1RpbWUgPSBjdXJyZW50RXZlbnRUaW1lKCk7Cit9CisKK3ZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8oZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIG1fcG9z
aXRpb24ueCA9IHg7CisgICAgbV9wb3NpdGlvbi55ID0geTsKKworICAgIHNlbmRPclF1ZXVlRXZl
bnQoV1RSRXZlbnQoV1RSRXZlbnRUeXBlTW91c2VNb3ZlLCAwLCAwLCBrV0tFdmVudE1vdXNlQnV0
dG9uTm9CdXR0b24pKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5
KGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwpCit7CisgICAgV1RSRXZlbnQgZXZlbnQoV1RS
RXZlbnRUeXBlTW91c2VTY3JvbGxCeSwgMCwgMCwga1dLRXZlbnRNb3VzZUJ1dHRvbk5vQnV0dG9u
KTsKKyAgICAvLyBXZSBuZWVkIHRvIGludmVydCBzY3JvbGxpbmcgdmFsdWVzIHNpbmNlIGluIEVG
TCBuZWdhdGl2ZSB6IHZhbHVlIG1lYW5zIHRoYXQKKyAgICAvLyBjYW52YXMgaXMgc2Nyb2xsaW5n
IGRvd24KKyAgICBldmVudC5ob3Jpem9udGFsID0gLWhvcml6b250YWw7CisgICAgZXZlbnQudmVy
dGljYWwgPSAtdmVydGljYWw7CisgICAgc2VuZE9yUXVldWVFdmVudChldmVudCk7Cit9CisKK3Zv
aWQgRXZlbnRTZW5kZXJQcm94eTo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50IGhvcml6b250
YWwsIGludCB2ZXJ0aWNhbCwgYm9vbCBwYWdlZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21l
bnR1bVBoYXNlcyhpbnQgeCwgaW50IHksIGludCAvKnBoYXNlKi8sIGludCAvKm1vbWVudHVtKi8p
Cit7CisgICAgLy8gRUZMIGRvZXMgbm90IGhhdmUgdGhlIGNvbmNlcHQgb2Ygd2hlZWwgZ2VzdHVy
ZSBwaGFzZXMgb3IgbW9tZW50dW0uIEp1c3QgcmVsYXkgdG8KKyAgICAvLyB0aGUgbW91c2Ugd2hl
ZWwgaGFuZGxlci4KKyAgICBtb3VzZVNjcm9sbEJ5KHgsIHkpOworfQorCit2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnN3aXBlR2VzdHVyZVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKGludCwgaW50
LCBpbnQsIGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCit7CisgICAgaWYgKG1fZXZl
bnRRdWV1ZS5pc0VtcHR5KCkpCisgICAgICAgIG1fZXZlbnRRdWV1ZS5hcHBlbmQoV1RSRXZlbnQo
V1RSRXZlbnRUeXBlTGVhcEZvcndhcmQsIG1pbGxpc2Vjb25kcywgMCwga1dLRXZlbnRNb3VzZUJ1
dHRvbk5vQnV0dG9uKSk7CisKKyAgICBtX3RpbWUgKz0gbWlsbGlzZWNvbmRzIC8gMTAwMC4wOwor
fQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmtleURvd24oV0tTdHJpbmdSZWYga2V5UmVmLCBX
S0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzLCB1bnNpZ25lZCBsb2NhdGlvbikKK3sKKyAgICBj
b25zdCBSZWZQdHI8S2V5RXZlbnRJbmZvPiBrZXlFdmVudEluZm8gPSAobG9jYXRpb24gPT0gRE9N
S2V5TG9jYXRpb25OdW1wYWQpID8ga2V5UGFkTmFtZShrZXlSZWYpIDoga2V5TmFtZShrZXlSZWYp
OworICAgIGlmICgha2V5RXZlbnRJbmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBj
aGFyKiBrZXlOYW1lID0ga2V5RXZlbnRJbmZvLT5rZXlOYW1lLmRhdGEoKTsKKyAgICBjb25zdCBj
aGFyKiBrZXlTdHJpbmcgPSBrZXlFdmVudEluZm8tPmtleVN0cmluZy5kYXRhKCk7CisKKyAgICAv
LyBFbmZvcmNlICdTaGlmdCcgbW9kaWZpZXIgZm9yIGNhcHMuCisgICAgaWYgKChzdHJsZW4oa2V5
TmFtZSkgPT0gMSkgJiYgKGtleU5hbWVbMF0gPj0gJ0EnICYmIGtleU5hbWVbMF0gPD0gJ1onKSkK
KyAgICAgICAgd2tNb2RpZmllcnMgfD0ga1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleTsKKworICAg
IEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWlu
V2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisKKyAgICBpbnQgZXZlbnRJbmRleCA9IDA7Cisg
ICAgLy8gTWltaWMgdGhlIGVtYWNzIGN0cmwtbyBiaW5kaW5nIGJ5IGluc2VydGluZyBhIHBhcmFn
cmFwaAorICAgIC8vIHNlcGFyYXRvciBhbmQgdGhlbiBwdXR0aW5nIHRoZSBjdXJzb3IgYmFjayB0
byBpdHMgb3JpZ2luYWwKKyAgICAvLyBwb3NpdGlvbi4gQWxsb3dzIHVzIHRvIHBhc3MgZW1hY3Mt
Y3RybC1vLmh0bWwKKyAgICBpZiAoKHdrTW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNDb250
cm9sS2V5KSAmJiAhc3RyY21wKGtleU5hbWUsICJvIikpIHsKKyAgICAgICAgc2V0RXZhc01vZGlm
aWVycyhldmFzLCAwKTsKKyAgICAgICAgZXZhc19ldmVudF9mZWVkX2tleV9kb3duKGV2YXMsICJS
ZXR1cm4iLCAiUmV0dXJuIiwgIlxyIiwgMCwgZXZlbnRJbmRleCsrLCAwKTsKKyAgICAgICAgZXZh
c19ldmVudF9mZWVkX2tleV91cChldmFzLCAiUmV0dXJuIiwgIlJldHVybiIsICJcciIsIDAsIGV2
ZW50SW5kZXgrKywgMCk7CisgICAgICAgIHdrTW9kaWZpZXJzID0gMDsKKyAgICAgICAga2V5TmFt
ZSA9ICJMZWZ0IjsKKyAgICAgICAga2V5U3RyaW5nID0gMDsKKyAgICB9CisKKyAgICBzZXRFdmFz
TW9kaWZpZXJzKGV2YXMsIHdrTW9kaWZpZXJzKTsKKyAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rv
d24oZXZhcywga2V5TmFtZSwga2V5TmFtZSwga2V5U3RyaW5nLCAwLCBldmVudEluZGV4KyssIDAp
OworICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfdXAoZXZhcywga2V5TmFtZSwga2V5TmFtZSwga2V5
U3RyaW5nLCAwLCBldmVudEluZGV4KyssIDApOworICAgIHNldEV2YXNNb2RpZmllcnMoZXZhcywg
MCk7Cit9CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQordm9pZCBFdmVudFNlbmRlclByb3h5
OjpzZW5kVG91Y2hFdmVudChFd2tfVG91Y2hfRXZlbnRfVHlwZSBldmVudFR5cGUpCit7CisgICAg
QVNTRVJUKG1fdG91Y2hQb2ludHMpOworCisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rl
c3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICBld2tfdmll
d19mZWVkX3RvdWNoX2V2ZW50KGV3a1ZpZXcsIGV2ZW50VHlwZSwgbV90b3VjaFBvaW50cywgZXZh
c19rZXlfbW9kaWZpZXJfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpKSk7CisKKyAg
ICBFaW5hX0xpc3QqIGxpc3Q7CisgICAgRWluYV9MaXN0KiBsaXN0TmV4dDsKKyAgICB2b2lkKiBk
YXRhOworICAgIEVJTkFfTElTVF9GT1JFQUNIX1NBRkUobV90b3VjaFBvaW50cywgbGlzdCwgbGlz
dE5leHQsIGRhdGEpIHsKKyAgICAgICAgIEV3a19Ub3VjaF9Qb2ludCogdG91Y2hQb2ludCA9IHN0
YXRpY19jYXN0PEV3a19Ub3VjaF9Qb2ludCo+KGRhdGEpOworICAgICAgICAgQVNTRVJUKHRvdWNo
UG9pbnQpOworCisgICAgICAgICBpZiAoKHRvdWNoUG9pbnQtPnN0YXRlID09IEVWQVNfVE9VQ0hf
UE9JTlRfVVApIHx8ICh0b3VjaFBvaW50LT5zdGF0ZSA9PSBFVkFTX1RPVUNIX1BPSU5UX0NBTkNF
TCkpIHsKKyAgICAgICAgICAgICBkZWxldGUgdG91Y2hQb2ludDsKKyAgICAgICAgICAgICBtX3Rv
dWNoUG9pbnRzID0gZWluYV9saXN0X3JlbW92ZV9saXN0KG1fdG91Y2hQb2ludHMsIGxpc3QpOwor
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgdG91Y2hQb2ludC0+c3RhdGUgPSBFVkFTX1RP
VUNIX1BPSU5UX1NUSUxMOworICAgICB9Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6YWRk
VG91Y2hQb2ludChpbnQgeCwgaW50IHkpCit7CisgICAgaW50IGlkID0gMDsKKyAgICBpZiAobV90
b3VjaFBvaW50cykgeworICAgICAgICBFaW5hX0xpc3QqIGxhc3QgPSBlaW5hX2xpc3RfbGFzdCht
X3RvdWNoUG9pbnRzKTsKKyAgICAgICAgRXdrX1RvdWNoX1BvaW50KiB0b3VjaFBvaW50ID0gc3Rh
dGljX2Nhc3Q8RXdrX1RvdWNoX1BvaW50Kj4oZWluYV9saXN0X2RhdGFfZ2V0KGxhc3QpKTsKKyAg
ICAgICAgQVNTRVJUKHRvdWNoUG9pbnQpOworCisgICAgICAgIGlkID0gdG91Y2hQb2ludC0+aWQg
KyAxOworICAgIH0KKworICAgIEV3a19Ub3VjaF9Qb2ludCogdG91Y2hQb2ludCA9IG5ldyBFd2tf
VG91Y2hfUG9pbnQ7CisgICAgdG91Y2hQb2ludC0+aWQgPSBpZDsKKyAgICB0b3VjaFBvaW50LT54
ID0geDsKKyAgICB0b3VjaFBvaW50LT55ID0geTsKKyAgICB0b3VjaFBvaW50LT5zdGF0ZSA9IEVW
QVNfVE9VQ0hfUE9JTlRfRE9XTjsKKworICAgIG1fdG91Y2hQb2ludHMgPSBlaW5hX2xpc3RfYXBw
ZW5kKG1fdG91Y2hQb2ludHMsIHRvdWNoUG9pbnQpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCit7CisgICAgQVNT
RVJUKGluZGV4ID49IDAgJiYgaW5kZXggPCBlaW5hX2xpc3RfY291bnQobV90b3VjaFBvaW50cykp
OworCisgICAgRXdrX1RvdWNoX1BvaW50KiB0b3VjaFBvaW50ID0gc3RhdGljX2Nhc3Q8RXdrX1Rv
dWNoX1BvaW50Kj4oZWluYV9saXN0X250aChtX3RvdWNoUG9pbnRzLCBpbmRleCkpOworICAgIEFT
U0VSVCh0b3VjaFBvaW50KTsKKworICAgIHRvdWNoUG9pbnQtPnggPSB4OworICAgIHRvdWNoUG9p
bnQtPnkgPSB5OworICAgIHRvdWNoUG9pbnQtPnN0YXRlID0gRVZBU19UT1VDSF9QT0lOVF9NT1ZF
OworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIoV0tFdmVudE1v
ZGlmaWVycyBtb2RpZmllciwgYm9vbCBlbmFibGUpCit7CisgICAgRXZhc19PYmplY3QqIGV3a1Zp
ZXcgPSBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IChzaXplb2YobW9kaWZpZXJOYW1l
cykgLyBzaXplb2YoY2hhciopKTsgKytpbmRleCkgeworICAgICAgICBpZiAobW9kaWZpZXIgJiAo
MSA8PCBpbmRleCkpIHsKKyAgICAgICAgICAgIGlmIChlbmFibGUpCisgICAgICAgICAgICAgICAg
ZXZhc19rZXlfbW9kaWZpZXJfb24oZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmlldyksIG1vZGlm
aWVyTmFtZXNbaW5kZXhdKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBldmFz
X2tleV9tb2RpZmllcl9vZmYoZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmlldyksIG1vZGlmaWVy
TmFtZXNbaW5kZXhdKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBFdmVudFNlbmRlclBy
b3h5Ojp0b3VjaFN0YXJ0KCkKK3sKKyAgICBzZW5kVG91Y2hFdmVudChFV0tfVE9VQ0hfU1RBUlQp
OworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoTW92ZSgpCit7CisgICAgc2VuZFRv
dWNoRXZlbnQoRVdLX1RPVUNIX01PVkUpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRv
dWNoRW5kKCkKK3sKKyAgICBzZW5kVG91Y2hFdmVudChFV0tfVE9VQ0hfRU5EKTsKK30KKwordm9p
ZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaENhbmNlbCgpCit7CisgICAgc2VuZFRvdWNoRXZlbnQo
RVdLX1RPVUNIX0NBTkNFTCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6Y2xlYXJUb3Vj
aFBvaW50cygpCit7CisgICAgdm9pZCogZGF0YSA9IDA7CisgICAgRUlOQV9MSVNUX0ZSRUUobV90
b3VjaFBvaW50cywgZGF0YSkKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PEV3a19Ub3VjaF9Q
b2ludCo+KGRhdGEpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlbGVhc2VUb3VjaFBv
aW50KGludCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBpbmRleCA8IGVpbmFf
bGlzdF9jb3VudChtX3RvdWNoUG9pbnRzKSk7CisKKyAgICBFd2tfVG91Y2hfUG9pbnQqIHRvdWNo
UG9pbnQgPSBzdGF0aWNfY2FzdDxFd2tfVG91Y2hfUG9pbnQqPihlaW5hX2xpc3RfbnRoKG1fdG91
Y2hQb2ludHMsIGluZGV4KSk7CisgICAgQVNTRVJUKHRvdWNoUG9pbnQpOworCisgICAgdG91Y2hQ
b2ludC0+c3RhdGUgPSBFVkFTX1RPVUNIX1BPSU5UX1VQOworfQorCit2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQoreworICAgIEFTU0VSVChpbmRleCA+
PSAwICYmIGluZGV4IDwgZWluYV9saXN0X2NvdW50KG1fdG91Y2hQb2ludHMpKTsKKworICAgIEV3
a19Ub3VjaF9Qb2ludCogdG91Y2hQb2ludCA9IHN0YXRpY19jYXN0PEV3a19Ub3VjaF9Qb2ludCo+
KGVpbmFfbGlzdF9udGgobV90b3VjaFBvaW50cywgaW5kZXgpKTsKKyAgICBBU1NFUlQodG91Y2hQ
b2ludCk7CisKKyAgICB0b3VjaFBvaW50LT5zdGF0ZSA9IEVWQVNfVE9VQ0hfUE9JTlRfQ0FOQ0VM
OworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoUG9pbnRSYWRpdXMoaW50IHJh
ZGl1c1gsIGludCByYWRpdXNZKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNlbmRp
ZgorCit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdl
YlZpZXdFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3
RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYmUyZWNiYWM0N2U0NjVmODExOGU0OWUxMWYzMjBjMTNjNTY3
OTYyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZv
cm1XZWJWaWV3RWZsLmNwcApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJld2tfdmlld19wcml2YXRlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisK
KyNpbmNsdWRlICJFV2ViS2l0Mi5oIgorI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLSW1hZ2VDYWlyby5o
PgorI2luY2x1ZGUgPFdlYktpdC9XS1ZpZXdFZmwuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV1RSIHsKKworc3RhdGljIEVjb3Jl
X0V2YXMqIGluaXRFY29yZUV2YXMoKQoreworICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IDA7
CisjaWYgZGVmaW5lZChIQVZFX0VDT1JFX1gpCisgICAgY29uc3QgY2hhciogZW5naW5lID0gIm9w
ZW5nbF94MTEiOworICAgIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfbmV3KGVuZ2luZSwgMCwgMCwg
ODAwLCA2MDAsIDApOworICAgIC8vIEdyYWNlZnVsIGZhbGxiYWNrIHRvIHNvZnR3YXJlIHJlbmRl
cmluZyBpZiBldmFzX2dsIGVuZ2luZSBpcyBub3QgYXZhaWxhYmxlLgorICAgIGlmICghZWNvcmVF
dmFzKQorI2VuZGlmCisgICAgZWNvcmVFdmFzID0gZWNvcmVfZXZhc19uZXcoMCwgMCwgMCwgODAw
LCA2MDAsIDApOworCisgICAgaWYgKCFlY29yZUV2YXMpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgZWNvcmVfZXZhc190aXRsZV9zZXQoZWNvcmVFdmFzLCAiRUZMIFdlYktpdFRlc3RSdW5uZXIi
KTsKKyAgICBlY29yZV9ldmFzX3Nob3coZWNvcmVFdmFzKTsKKworICAgIHJldHVybiBlY29yZUV2
YXM7Cit9CisKK1BsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLUGFnZUNvbmZpZ3Vy
YXRpb25SZWYgY29uZmlndXJhdGlvbiwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCisgICAg
OiBtX29wdGlvbnMob3B0aW9ucykKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXNl
Rml4ZWRMYXlvdXRLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVz
ZUZpeGVkTGF5b3V0IikpOworICAgIG1fdXNpbmdGaXhlZExheW91dCA9IG9wdGlvbnMudXNlRml4
ZWRMYXlvdXQ7CisKKyAgICBtX3dpbmRvdyA9IGluaXRFY29yZUV2YXMoKTsKKworICAgIG1fdmll
dyA9IEVXS1ZpZXdDcmVhdGUoY29uZmlndXJhdGlvbiwgZWNvcmVfZXZhc19nZXQobV93aW5kb3cp
LCAvKiBzbWFydCAqLyAwKTsKKworICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KFdLVmlld0dl
dFBhZ2UoRVdLVmlld0dldFdLVmlldyhtX3ZpZXcpKSwgbV91c2luZ0ZpeGVkTGF5b3V0KTsKKwor
ICAgIGlmIChtX3VzaW5nRml4ZWRMYXlvdXQpCisgICAgICAgIHJlc2l6ZVRvKDgwMCwgNjAwKTsK
KworICAgIGV3a192aWV3X3RoZW1lX3NldChtX3ZpZXcsIERFRkFVTFRfVEhFTUVfRElSICIvZGVm
YXVsdC5lZGoiKTsKKyAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7CisgICAgZXZhc19vYmplY3Rf
c2hvdyhtX3ZpZXcpOworfQorCitQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQor
eworICAgIGV2YXNfb2JqZWN0X2RlbChtX3ZpZXcpOworCisgICAgZWNvcmVfZXZhc19mcmVlKG1f
d2luZG93KTsKK30KKwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0lzS2V5KGJvb2wg
aXNLZXkpCit7CisgICAgbV93aW5kb3dJc0tleSA9IGlzS2V5OworfQorCit2b2lkIFBsYXRmb3Jt
V2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgV2ViVmll
d1NpemluZ01vZGUpCit7CisgICAgLy8gRklYTUU6IERvbid0IHdlIG5lZWQgdG8gcmVzaXplIHRo
ZSB3aW5kb3cgdG9vPworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIHdpZHRoLCBoZWln
aHQpOworfQorCitXS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkKK3sKKyAgICByZXR1
cm4gV0tWaWV3R2V0UGFnZShFV0tWaWV3R2V0V0tWaWV3KG1fdmlldykpOworfQorCit2b2lkIFBs
YXRmb3JtV2ViVmlldzo6Zm9jdXMoKQoreworICAgIC8vIEluIGEgZmV3IGNhc2VzLCBhbiBpZnJh
bWUgbWlnaHQgcmVjZWl2ZSBmb2N1cyBmcm9tIEphdmFTY3JpcHQgYW5kIEV2YXMgaXMgbm90IGF3
YXJlIG9mIGl0IGF0IGFsbAorICAgIC8vIChXZWJDb3JlU3VwcG9ydDo6Zm9jdXNlZEZyYW1lQ2hh
bmdlZCgpIGRvZXMgbm90IGVtaXQgYW55IG5vdGlmaWNhdGlvbikuIFdlIHRoZW4gbWFudWFsbHkg
cmVtb3ZlIHRoZQorICAgIC8vIGZvY3VzIGZyb20gdGhlIHZpZXcgdG8gbWFrZSB0aGUgY2FsbCBn
aXZlIGZvY3VzIHRvIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCguLi4sIHRydWUpIHRvIGJlIGVmZmVj
dGZ1bC4KKyAgICBpZiAoV0tQYWdlR2V0Rm9jdXNlZEZyYW1lKHBhZ2UoKSkgIT0gV0tQYWdlR2V0
TWFpbkZyYW1lKHBhZ2UoKSkpCisgICAgICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3ZpZXcs
IGZhbHNlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3LCB0cnVlKTsKK30KKwor
V0tSZWN0IFBsYXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUoKQoreworICAgIGludCB4LCB5LCB3
aWR0aCwgaGVpZ2h0OworCisgICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChtX3dp
bmRvdywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgcmV0dXJuIFdLUmVjdE1ha2Uo
eCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5k
b3dGcmFtZShXS1JlY3QgZnJhbWUsIFdlYlZpZXdTaXppbmdNb2RlKQoreworICAgIGVjb3JlX2V2
YXNfbW92ZV9yZXNpemUobV93aW5kb3csIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwg
ZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShtX3ZpZXcsIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKK30KKwor
dm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmFkZENocm9tZUlucHV0RmllbGQoKQoreworfQorCit2b2lk
IFBsYXRmb3JtV2ViVmlldzo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCit7Cit9CisKK3ZvaWQg
UGxhdGZvcm1XZWJWaWV3OjphZGRUb1dpbmRvdygpCit7Cit9CisKK3ZvaWQgUGxhdGZvcm1XZWJW
aWV3OjpyZW1vdmVGcm9tV2luZG93KCkKK3sKK30KKwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6Om1h
a2VXZWJWaWV3Rmlyc3RSZXNwb25kZXIoKQoreworfQorCit2b2lkIFBsYXRmb3JtV2ViVmlldzo6
Y2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZChmbG9hdCkKK3sKK30KKworV0tSZXRhaW5QdHI8V0tJ
bWFnZVJlZj4gUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKCkKK3sKKyAgICBp
bnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldCht
X3dpbmRvdywgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBBU1NFUlQod2lkdGggPiAwICYm
IGhlaWdodCA+IDApOworCisgICAgcmV0dXJuIGFkb3B0V0soV0tWaWV3Q3JlYXRlU25hcHNob3Qo
RVdLVmlld0dldFdLVmlldyhtX3ZpZXcpKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1XZWJWaWV3Ojp2
aWV3U3VwcG9ydHNPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorewor
ICAgIGlmIChtX29wdGlvbnMudXNlRml4ZWRMYXlvdXQgIT0gb3B0aW9ucy51c2VGaXhlZExheW91
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
UGxhdGZvcm1XZWJWaWV3OjpkaWRJbml0aWFsaXplQ2xpZW50cygpCit7Cit9CisKK3ZvaWQgUGxh
dGZvcm1XZWJWaWV3OjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKGJvb2wpCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdUUgorCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2VmbC9UZXN0Q29udHJvbGxlckVmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9U
ZXN0Q29udHJvbGxlckVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVmNDI3Y2EzMjBiNjRmMzQ4YWM0Njlh
YTNlZmJlZDUyNzhkMWI3YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZWZsL1Rlc3RDb250cm9sbGVyRWZsLmNwcApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3
LmgiCisjaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKKyNpbmNsdWRlIDxFY29yZS5oPgorI2lu
Y2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
I2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV1RSIHsKKworc3RhdGljIEVjb3Jl
X1RpbWVyKiB0aW1lciA9IDA7CisKK3N0YXRpYyBFaW5hX0Jvb2wgdGltZXJGaXJlZCh2b2lkKikK
K3sKKyAgICB0aW1lciA9IDA7CisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICByZXR1
cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpub3Rp
ZnlEb25lKCkKK3sKKyAgICBpZiAoIXRpbWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBlY29y
ZV90aW1lcl9kZWwodGltZXIpOworICAgIHRpbWVyID0gMDsKKyAgICBlY29yZV9tYWluX2xvb3Bf
cXVpdCgpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemUoKQor
eworICAgIGNvbnN0IGNoYXIqIGlzRGVidWdnaW5nID0gZ2V0ZW52KCJXRUJfUFJPQ0VTU19DTURf
UFJFRklYIik7CisgICAgaWYgKGlzRGVidWdnaW5nICYmICppc0RlYnVnZ2luZykgeworICAgICAg
ICBtX3VzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyID0gZmFsc2U7CisgICAgICAgIG1fZm9yY2VO
b1RpbWVvdXQgPSB0cnVlOworICAgIH0KK30KKworV0tQcmVmZXJlbmNlc1JlZiBUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1QcmVmZXJlbmNlcygpCit7CisgICAgcmV0dXJuIFdLUGFnZUdyb3VwR2V0
UHJlZmVyZW5jZXMobV9wYWdlR3JvdXAuZ2V0KCkpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9ybURlc3Ryb3koKQoreworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bVJ1blVudGlsKGJvb2wmIGNvbmRpdGlvbiwgZG91YmxlIHRpbWVvdXQpCit7CisgICAgaWYgKHRp
bWVvdXQgPD0gMCkgeworICAgICAgICAvLyBOZXZlciB0aW1lb3V0IGlmIHdlIGFyZSBkZWJ1Z2dp
bmcgb3Igbm90IG1lYW50IHRvIHRpbWVvdXQuCisgICAgICAgIHdoaWxlICghY29uZGl0aW9uKQor
ICAgICAgICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKKworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIHRpbWVyID0gZWNvcmVfdGltZXJfbG9vcF9hZGQodGltZW91dCwgdGltZXJG
aXJlZCwgMCk7CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7Cit9CisKK3N0YXRpYyBjb25z
dCBjaGFyKiBnZXRFbnZpcm9ubWVudFZhcmlhYmxlT3JFeGl0KGNvbnN0IGNoYXIqIHZhcmlhYmxl
TmFtZSkKK3sKKyAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudih2YXJpYWJsZU5hbWUpOwor
ICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBlbnZpcm9ubWVu
dCB2YXJpYWJsZSBub3QgZm91bmRcbiIsIHZhcmlhYmxlTmFtZSk7CisgICAgICAgIGV4aXQoMCk7
CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpp
bml0aWFsaXplSW5qZWN0ZWRCdW5kbGVQYXRoKCkKK3sKKyAgICBjb25zdCBjaGFyKiBidW5kbGVQ
YXRoID0gZ2V0RW52aXJvbm1lbnRWYXJpYWJsZU9yRXhpdCgiVEVTVF9SVU5ORVJfSU5KRUNURURf
QlVORExFX0ZJTEVOQU1FIik7CisgICAgbV9pbmplY3RlZEJ1bmRsZVBhdGguYWRvcHQoV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVuZGxlUGF0aCkpOworfQorCit2b2lkIFRlc3RDb250
cm9sbGVyOjppbml0aWFsaXplVGVzdFBsdWdpbkRpcmVjdG9yeSgpCit7CisgICAgY29uc3QgY2hh
ciogcGx1Z2luUGF0aCA9IGdldEVudmlyb25tZW50VmFyaWFibGVPckV4aXQoIlRFU1RfUlVOTkVS
X1BMVUdJTl9QQVRIIik7CisgICAgbV90ZXN0UGx1Z2luRGlyZWN0b3J5LmFkb3B0KFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHBsdWdpblBhdGgpKTsKK30KKwordm9pZCBUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgVGVzdENvbnRy
b2xsZXI6OnNldEhpZGRlbihib29sIGhpZGRlbikKK3sKKyAgICBQbGF0Zm9ybVdLVmlldyB2aWV3
ID0gbWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CisKKyAgICBpZiAoIXZpZXcpIHsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogdmlldyBpcyBudWxsLlxuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaGlkZGVuKQorICAgICAgICBldmFzX29iamVjdF9o
aWRlKHZpZXcpOworICAgIGVsc2UKKyAgICAgICAgZXZhc19vYmplY3Rfc2hvdyh2aWV3KTsKK30K
Kwordm9pZCBUZXN0Q29udHJvbGxlcjo6cnVuTW9kYWwoUGxhdGZvcm1XZWJWaWV3KikKK3sKKyAg
ICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgdGhpcyB0byB0ZXN0IHNob3dNb2RhbERpYWxv
Zy4KK30KKworY29uc3QgY2hhciogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtTGlicmFyeVBhdGhG
b3JUZXN0aW5nKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgcGF0aENvbnRh
aW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0cmluZykK
K3sKKyAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIoKSk7CisgICAgcmV0dXJuIHBhdGgu
Y29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4KK30KKworc3RhdGljIGJv
b2wgc2hvdWxkVXNlRml4ZWRMYXlvdXQoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKHBhdGhDb250YWlucyhwYXRo
T3JVUkwsICJzdGlja3kvIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN0aWNreVxcIikp
CisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JU
ZXN0KFRlc3RPcHRpb25zJiB0ZXN0T3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCkgY29uc3QKK3sKKyAgICB0ZXN0T3B0aW9ucy51c2VGaXhlZExheW91dCB8PSBzaG91bGRVc2VG
aXhlZExheW91dChwYXRoT3JVUkwpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bUNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJikKK3sKKyAgICBXS1Bh
Z2VTZXRBcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQobWFpbldlYlZpZXcoKS0+cGFnZSgpLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0VGVzdFJ1bm5lckVGTCIpKTsKK30K
Kwordm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFByZWZlcmVuY2VzVG9Db25zaXN0
ZW50VmFsdWVzKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2VmbC9tYWluLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
ZWZsL21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiNTA2NjliYzA0ZDYyODBhOTQxZDQ4YjcyZjI0Mjk2
NzFmYjhlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9t
YWluLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRVdlYktpdDIu
aCIKKyNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZmRlZiBIQVZFX0VDT1JFX1gKKyNpbmNsdWRl
IDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hleHQuaD4KKworc3RhdGlj
IGludCBkdW1teUV4dGVuc2lvbkVycm9ySGFuZGxlcihEaXNwbGF5KiwgX1hjb25zdCBjaGFyKiwg
X1hjb25zdCBjaGFyKikKK3sKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCitpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgV1RGSW5zdGFsbFJlcG9ydEJhY2t0cmFjZU9u
Q3Jhc2hIb29rKCk7CisKKyNpZmRlZiBIQVZFX0VDT1JFX1gKKyAgICBYU2V0RXh0ZW5zaW9uRXJy
b3JIYW5kbGVyKGR1bW15RXh0ZW5zaW9uRXJyb3JIYW5kbGVyKTsKKyNlbmRpZgorCisgICAgaWYg
KCFld2tfaW5pdCgpKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHsKKyAgICAgICAgLy8gVGVz
dCBjb250cm9sbGVyIGhhcyBvd24gcHRyIGNvbnRhaW5pbmcgV2ViVmlldyBhbmQgV2ViVmlldyBt
dXN0IGJlIGRlbGV0ZWQKKyAgICAgICAgLy8gYmVmb3JlIGl0cyBldmFzIG9iamVjdCBpcyBkZWxl
dGVkLiBDYWxsIG9mIGV3a19zaHV0ZG93bigpIGxlYWRzIHRvIGV2YXMgb2JqZWN0cyBkZWxldGlv
bi4KKworICAgICAgICBXVFI6OlRlc3RDb250cm9sbGVyIGNvbnRyb2xsZXIoYXJnYywgY29uc3Rf
Y2FzdDxjb25zdCBjaGFyKio+KGFyZ3YpKTsKKyAgICB9CisKKyAgICBld2tfc2h1dGRvd24oKTsK
KworICAgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9lZmwvaW5zdGFsbC1kZXBl
bmRlbmNpZXMgYi9Ub29scy9lZmwvaW5zdGFsbC1kZXBlbmRlbmNpZXMKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzIw
MzhjYzk5MDE1OWJkYzNjZjIzOGY3ZjBhY2JjMjQzMGY0YWZhMwotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL2VmbC9pbnN0YWxsLWRlcGVuZGVuY2llcwpAQCAtMCwwICsxLDEzNSBAQAorIyEvYmlu
L2Jhc2gKKworIyBUaGlzIHNjcmlwdCBuZWVkcyB0byBiZSBydW4gd2l0aCByb290IHJpZ2h0cy4K
K2lmIFsgJFVJRCAtbmUgMCBdOyB0aGVuCisgICAgc3VkbyAkMAorICAgIGV4aXQgMAorZmkKKwor
ZnVuY3Rpb24gcHJpbnROb3RTdXBwb3J0ZWRNZXNzYWdlQW5kRXhpdCgpIHsKKyAgICBlY2hvCisg
ICAgZWNobyAiQ3VycmVudGx5IHRoaXMgc2NyaXB0IG9ubHkgd29ya3MgZm9yIGRpc3RyaWJ1dGlv
bnMgc3VwcG9ydGluZyBhcHQtZ2V0LiIKKyAgICBlY2hvICJQbGVhc2UgYWRkIHN1cHBvcnQgZm9y
IHlvdXIgZGlzdHJpYnV0aW9uLiIKKyAgICBlY2hvCisgICAgZXhpdCAxCit9CisKK2Z1bmN0aW9u
IGNoZWNrQ21ha2VWZXJzaW9uKCkgeworICAgIENNQUtFX1ZFUlNJT049YGNtYWtlIC0tdmVyc2lv
bmAKKworICAgIFZFUlNJT049YGVjaG8gIiRDTUFLRV9WRVJTSU9OIiB8IGF3ayAne3NwbGl0KCQz
LG51bSwiLiIpOworICAgIGlmICghKG51bVsxXT4yIHx8IG51bVsyXT44IHx8IG51bVszXT49MTAp
KQorICAgICAgICBwcmludGYgJDN9J2AKKworICAgIGlmIFsgLW4gIiR7VkVSU0lPTn0iIF07IHRo
ZW4KKyAgICAgICAgZWNobyAiV2FybmluZzogQ01ha2UgdmVyc2lvbiBkZXRlY3RlZCAoJHtWRVJT
SU9OfSkgaXMgbG93ZXIgdGhlbiAyLjguMTAuIgorICAgICAgICBlY2hvICIgIFRoaXMgd2lsbCBw
cm9iYWJseSBjYXVzZSBlcnJvcnMsIGFzIG9sZGVyIHZlcnNpb24gZGlkbid0IHN1cHBvcnQgQ01B
S0VfTklOSkFfRk9SQ0VfUkVTUE9OU0VfRklMRSwiCisgICAgICAgIGVjaG8gIiAgd2hpY2ggaXMg
bmVlZGVkIG5vdyBmb3IgYnVpbGRpbmcuIChsb29rIGF0OiBodHRwczovL2xpc3RzLndlYmtpdC5v
cmcvcGlwZXJtYWlsL3dlYmtpdC1ndGsvMjAxNC1NYXJjaC8wMDE4MDkuaHRtbCApIgorICAgICAg
ICBlY2hvICIiCisKKyAgICAgICAgaWYgWyAtZiAiL2V0Yy9pc3N1ZSIgXTsgdGhlbgorICAgICAg
ICAgICAgdWJ1bnR1X3ZlcnNpb249YGNhdCAvZXRjL2lzc3VlYAorICAgICAgICAgICAgaWYgW1sg
JHVidW50dV92ZXJzaW9uID09ICpVYnVudHVcIDEyLjA0KiBdXTsgdGhlbgorICAgICAgICAgICAg
ICAgIGVjaG8gIiAgRm9yIFVidW50dSAxMi4wNCBvciAxMi4xMCBZb3UgbWlnaHQgY29uc2lkZXIg
YWRkaW5nIHBwYSBmcm9tIGh0dHBzOi8vbGF1bmNocGFkLm5ldC9+a2FsYWtyaXMvK2FyY2hpdmUv
dWJ1bnR1L2NtYWtlIgorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICBmaQorfQorCitm
dW5jdGlvbiBjaGVja0luc3RhbGxlciB7CisgICAgIyBhcHQtZ2V0IC0gRGViaWFuIGJhc2VkIGRp
c3RyaWJ1dGlvbnMKKyAgICBhcHQtZ2V0IC0tdmVyc2lvbiAmPiAvZGV2L251bGwKKyAgICBpZiBb
ICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgaW5zdGFsbERlcGVuZGVuY2llc1dpdGhBcHQKKyAg
ICAgICAgY2hlY2tDbWFrZVZlcnNpb247CisgICAgICAgIGV4aXQgMAorICAgIGZpCisKKyAgICBw
cmludE5vdFN1cHBvcnRlZE1lc3NhZ2VBbmRFeGl0Cit9CisKKyMgSWYgdGhlIHBhY2thZ2UgJDEg
aXMgYXZhaWxhYmxlLCBwcmludHMgaXQuIE90aGVyd2lzZSBwcmludHMgJDIuCisjIFVzZWZ1bCBm
b3IgaGFuZGxpbmcgd2hlbiBhIHBhY2thZ2UgaXMgcmVuYW1lZCBvbiBuZXcgdmVyc2lvbnMgb2Yg
RGViaWFuL1VidW50dS4KK2Z1bmN0aW9uIGFwdElmRWxzZSB7CisgICAgaWYgYXB0LWNhY2hlIHNo
b3cgJDEgJj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAkMQorICAgIGVsc2UKKyAgICAg
ICAgZWNobyAkMgorICAgIGZpCit9CisKK2Z1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRo
QXB0IHsKKyAgICAjIFRoZXNlIGFyZSBkZXBlbmRlbmNpZXMgbmVjZXNzYXJ5IGZvciBidWlsZGlu
ZyBXZWJLaXRFRkwuCisgICAgYXB0LWdldCBpbnN0YWxsIFwKKyAgICAgICAgYmlzb24gXAorICAg
ICAgICBjbWFrZSBcCisgICAgICAgIGRveHlnZW4gXAorICAgICAgICBmbGV4IFwKKyAgICAgICAg
ZysrIFwKKyAgICAgICAgZ2VvY2x1ZS0yLjAgXAorICAgICAgICBncGVyZiBcCisgICAgICAgIGd0
ay1kb2MtdG9vbHMgXAorICAgICAgICBsaWJhdGsxLjAtZGV2IFwKKyAgICAgICAgbGliZGJ1cy0x
LWRldiBcCisgICAgICAgIGxpYmVkaXQtZGV2IFwKKyAgICAgICAgbGliZW5jaGFudC1kZXYgXAor
ICAgICAgICBsaWJlc3BlYWstZGV2IFwKKyAgICAgICAgbGliZmFhZC1kZXYgXAorICAgICAgICBs
aWJmZmktZGV2IFwKKyAgICAgICAgbGliZnJlZXR5cGU2LWRldiBcCisgICAgICAgICQoYXB0SWZF
bHNlIGxpYmdjcnlwdDIwLWRldiBsaWJnY3J5cHQxMS1kZXYpIFwKKyAgICAgICAgJChhcHRJZkVs
c2UgbGliZ2VvY2x1ZS0yLWRldiBsaWJnZW9jbHVlLWRldikgXAorICAgICAgICBsaWJnaWYtZGV2
IFwKKyAgICAgICAgbGliZ2wxLW1lc2EtZGV2IFwKKyAgICAgICAgbGliZ3BnLWVycm9yLWRldiBc
CisgICAgICAgIGxpYmh5cGhlbi1kZXYgXAorICAgICAgICBsaWJpY3UtZGV2IFwKKyAgICAgICAg
bGlianBlZy1kZXYgXAorICAgICAgICBsaWJqc29uLWdsaWItZGV2IFwKKyAgICAgICAgbGlibHVh
NS4xLTAtZGV2IFwKKyAgICAgICAgbGlibHVhaml0LTUuMS1kZXYgXAorICAgICAgICBsaWJtcGcx
MjMtZGV2IFwKKyAgICAgICAgbGlib3JjLTAuNC1kZXYgXAorICAgICAgICBsaWJvc21lc2E2LWRl
diBcCisgICAgICAgIGxpYnAxMS1raXQtZGV2IFwKKyAgICAgICAgJChhcHRJZkVsc2UgbGlicG5n
LWRldiBsaWJwbmcxMi1kZXYpIFwKKyAgICAgICAgbGlicG9wcGxlci1jcHAtZGV2IFwKKyAgICAg
ICAgbGlicHVsc2UtZGV2IFwKKyAgICAgICAgbGlicmF3LWRldiBcCisgICAgICAgIGxpYnJzdmcy
LWRldiBcCisgICAgICAgIGxpYnNwZWN0cmUtZGV2IFwKKyAgICAgICAgbGlic3FsaXRlMy1kZXYg
XAorICAgICAgICBsaWJzc2wtZGV2IFwKKyAgICAgICAgbGlidGhlb3JhLWRldiBcCisgICAgICAg
IGxpYnRpZmY1LWRldiBcCisgICAgICAgIGxpYnVkZXYtZGV2IFwKKyAgICAgICAgbGlidm9yYmlz
LWRldiBcCisgICAgICAgIGxpYndlYnAtZGV2IFwKKyAgICAgICAgbGlieGNvbXBvc2l0ZS1kZXYg
XAorICAgICAgICBsaWJ4Y3Vyc29yLWRldiBcCisgICAgICAgIGxpYnhpbmVyYW1hLWRldiBcCisg
ICAgICAgIGxpYnhyYW5kci1kZXYgXAorICAgICAgICBsaWJ4cmVuZGVyLWRldiBcCisgICAgICAg
IGxpYnhzcy1kZXYgXAorICAgICAgICBsaWJ4dC1kZXYgXAorICAgICAgICBsaWJ4dHN0LWRldiBc
CisgICAgICAgIG5pbmphLWJ1aWxkIFwKKyAgICAgICAgcmFnZWwgXAorICAgICAgICBydWJ5IFwK
KyAgICAgICAgc3VidmVyc2lvbiBcCisgICAgICAgIHgxMXByb3RvLXByaW50LWRldgorCisgICAg
IyBUaGVzZSBhcmUgZGVwZW5kZW5jaWVzIG5lY2Vzc2FyeSBmb3IgYnVpbGRpbmcgV2ViS2l0RUZM
IGFuZCBub3QgYXZhaWxhYmxlIG9uIEFSTTY0LgorICAgIGFwdC1nZXQgaW5zdGFsbCBcCisgICAg
ICAgIGx1YWppdAorCisgICAgIyBUaGVzZSBhcmUgZGVwZW5kZW5jaWVzIG5lY2Vzc2FyeSBmb3Ig
cnVubmluZyB0ZXN0cy4KKyAgICBhcHQtZ2V0IGluc3RhbGwgXAorICAgICAgICBhcGFjaGUyIFwK
KyAgICAgICAgJChhcHRJZkVsc2UgbGliYXBhY2hlMi1tb2QtcGhwNy4wIGxpYmFwYWNoZTItbW9k
LXBocDUpIFwKKyAgICAgICAgbGlicnVieSBcCisgICAgICAgIHh2ZmIKK30KKworY2hlY2tJbnN0
YWxsZXIKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvZWZsL2poYnVpbGQtb3B0aW9uYWwubW9kdWxlcyBi
L1Rvb2xzL2VmbC9qaGJ1aWxkLW9wdGlvbmFsLm1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZlMzczMjQx
MmQ3M2E3YWUxNWY0NTk5YTg5MjM4MmRlZGNhMDg3NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L2VmbC9qaGJ1aWxkLW9wdGlvbmFsLm1vZHVsZXMKQEAgLTAsMCArMSwzMiBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgbW9kdWxlc2V0IFNZU1RFTSAibW9kdWxlc2V0LmR0ZCI+
Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJtb2R1bGVzZXQueHNsIj8+
Cis8bW9kdWxlc2V0PgorCisgIDxyZXBvc2l0b3J5IHR5cGU9InRhcmJhbGwiIG5hbWU9ImZ0cC5n
bm9tZS5vcmciCisgICAgICBocmVmPSJodHRwOi8vZnRwLmdub21lLm9yZyIvPgorCisgIDxhdXRv
dG9vbHMgaWQ9ImF0LXNwaTItY29yZSIKKyAgICAgICAgICBhdXRvZ2VuYXJncz0iLS1kaXNhYmxl
LWludHJvc3BlY3Rpb24iPgorICAgIDxicmFuY2ggbW9kdWxlPSJwdWIvR05PTUUvc291cmNlcy9h
dC1zcGkyLWNvcmUvMi4xMC9hdC1zcGkyLWNvcmUtMi4xMC4wLnRhci54eiIgdmVyc2lvbj0iMi4x
MC4wIgorICAgICAgICAgIHJlcG89ImZ0cC5nbm9tZS5vcmciCisgICAgICAgICAgaGFzaD0ic2hh
MjU2Ojk2NDE1NWM3NTc0MjIwYTAwZTExZTFjMGQ5MWYyZDMwMTdlZDYwMzkyMGViMTMzM2ZmOWNi
ZGI2YTIyNzQ0ZGIiPgorICAgIDwvYnJhbmNoPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICA8
ZGVwIHBhY2thZ2U9ImdsaWIiLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgPC9hdXRvdG9vbHM+
CisKKyAgPGF1dG90b29scyBpZD0iYXQtc3BpMi1hdGsiPgorICAgIDxicmFuY2ggbW9kdWxlPSJw
dWIvR05PTUUvc291cmNlcy9hdC1zcGkyLWF0ay8yLjEwL2F0LXNwaTItYXRrLTIuMTAuMC50YXIu
eHoiIHZlcnNpb249IjIuMTAuMCIKKyAgICAgICAgICAgIHJlcG89ImZ0cC5nbm9tZS5vcmciCisg
ICAgICAgICAgICBoYXNoPSJzaGEyNTY6ZGVhN2ZmMmY5YmM5YmJkYjAzNTExMTI2MTZkNzM4ZGU3
MThiNTU3MzljZDI1MTFhZmVjYWM1MTYwNGMzMWE5NCI+CisgICAgPC9icmFuY2g+CisgICAgPGRl
cGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZ2xpYiIvPgorICAgICAgPGRlcCBwYWNr
YWdlPSJhdGsiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0iYXQtc3BpMi1jb3JlIi8+CisgICAgPC9k
ZXBlbmRlbmNpZXM+CisgIDwvYXV0b3Rvb2xzPgorCis8L21vZHVsZXNldD4KZGlmZiAtLWdpdCBh
L1Rvb2xzL2VmbC9qaGJ1aWxkLm1vZHVsZXMgYi9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM5ZTk5NDJjZDJjZjE4ZmZhOGFmYjdmYWEwZDcyN2ZjMGVkMjU2MWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9lZmwvamhidWlsZC5tb2R1bGVzCkBAIC0wLDAgKzEsMzE3IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBtb2R1bGVzZXQgU1lTVEVNICJtb2R1
bGVzZXQuZHRkIj4KKzw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9Im1vZHVs
ZXNldC54c2wiPz4KKzxtb2R1bGVzZXQ+CisKKyAgPG1ldGFtb2R1bGUgaWQ9IndlYmtpdGVmbC10
ZXN0aW5nLWRlcGVuZGVuY2llcyI+CisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFj
a2FnZT0iY2Fpcm8iLz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZm9udHMiLz4KKyAgICAgIDxkZXAg
cGFja2FnZT0iZGljdHMiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZm9udGNvbmZpZyIvPgorICAg
ICAgPGRlcCBwYWNrYWdlPSJmcmVldHlwZTYiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0iaGFyZmJ1
enoiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZ2xpYiIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJn
bGliLW5ldHdvcmtpbmciLz4KKyAgICAgIDxkZXAgcGFja2FnZT0ibGlic291cCIvPgorICAgICAg
PGRlcCBwYWNrYWdlPSJlZmwiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0ibGlieG1sMiIvPgorICAg
ICAgPGRlcCBwYWNrYWdlPSJsaWJ4c2x0Ii8+CisgICAgICA8ZGVwIHBhY2thZ2U9ImdzdHJlYW1l
ciIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lucy1iYXNlIi8+CisgICAgICA8ZGVw
IHBhY2thZ2U9ImdzdC1wbHVnaW5zLWdvb2QiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LXBs
dWdpbnMtYmFkIi8+CisgICAgICA8ZGVwIHBhY2thZ2U9ImdzdC1saWJhdiIvPgorICAgICAgPGRl
cCBwYWNrYWdlPSJhdGsiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0ib3BlbndlYnJ0YyIvPgorICAg
IDwvZGVwZW5kZW5jaWVzPgorICA8L21ldGFtb2R1bGU+CisKKyAgPGluY2x1ZGUgaHJlZj0iamhi
dWlsZC1vcHRpb25hbC5tb2R1bGVzIi8+CisKKyAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIg
bmFtZT0iZ2l0aHViLmNvbSIKKyAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbSIvPgorICA8
cmVwb3NpdG9yeSB0eXBlPSJ0YXJiYWxsIiBuYW1lPSJzb3VyY2V3YXJlLm9yZyIKKyAgICAgIGhy
ZWY9ImZ0cDovL3NvdXJjZXdhcmUub3JnIi8+CisgIDxyZXBvc2l0b3J5IHR5cGU9InRhcmJhbGwi
IG5hbWU9ImZ0cC5nbm9tZS5vcmciCisgICAgICBocmVmPSJodHRwOi8vZnRwLmdub21lLm9yZyIv
PgorICA8cmVwb3NpdG9yeSB0eXBlPSJnaXQiIG5hbWU9ImdpdC5nbm9tZS5vcmciCisgICAgICBo
cmVmPSJnaXQ6Ly9naXQuZ25vbWUub3JnLyIvPgorICA8cmVwb3NpdG9yeSB0eXBlPSJ0YXJiYWxs
IiBuYW1lPSJjYWlyb2dyYXBoaWNzLm9yZyIKKyAgICAgIGhyZWY9Imh0dHA6Ly9jYWlyb2dyYXBo
aWNzLm9yZyIvPgorICA8cmVwb3NpdG9yeSB0eXBlPSJ0YXJiYWxsIiBuYW1lPSJmcmVlZGVza3Rv
cC5vcmciCisgICAgICBocmVmPSJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZyIvPgorICA8cmVw
b3NpdG9yeSB0eXBlPSJ0YXJiYWxsIiBuYW1lPSJuaWNlLmZyZWVkZXNrdG9wLm9yZyIKKyAgICAg
IGhyZWY9Imh0dHA6Ly9uaWNlLmZyZWVkZXNrdG9wLm9yZy8iLz4KKyAgPHJlcG9zaXRvcnkgdHlw
ZT0idGFyYmFsbCIgbmFtZT0iZW5saWdodGVubWVudC5mciIKKyAgICAgIGhyZWY9Imh0dHA6Ly9n
aXQuZW5saWdodGVubWVudC5mci9jZ2l0LmNnaS9zdm4vIi8+CisgIDxyZXBvc2l0b3J5IHR5cGU9
InRhcmJhbGwiIG5hbWU9InhtbHNvZnQub3JnIgorICAgICAgaHJlZj0iZnRwOi8veG1sc29mdC5v
cmciLz4KKyAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZG93bmxvYWQuZW5saWdo
dGVubWVudC5vcmciCisgICAgICBocmVmPSJodHRwOi8vZG93bmxvYWQuZW5saWdodGVubWVudC5v
cmciLz4KKyAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZ3N0cmVhbWVyIgorICAg
ICAgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyIvPgorCisgIDxh
dXRvdG9vbHMgaWQ9ImNhaXJvIiBhdXRvZ2VuLXNoPSJjb25maWd1cmUiCisgICAgICAgICAgICAg
bWFrZWFyZ3M9IkNGTEFHUz0nLWZuby1sdG8nIENYWEZMQUdTPSctZm5vLWx0bycgTERGTEFHUz0n
LWZuby1sdG8nIj4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJmb250
Y29uZmlnIi8+CisgICAgICA8ZGVwIHBhY2thZ2U9InBpeG1hbiIvPgorICAgIDwvZGVwZW5kZW5j
aWVzPgorICAgIDxicmFuY2ggbW9kdWxlPSJyZWxlYXNlcy9jYWlyby0xLjE0LjIudGFyLnh6IiB2
ZXJzaW9uPSIxLjE0LjIiCisgICAgICAgICAgICByZXBvPSJjYWlyb2dyYXBoaWNzLm9yZyIKKyAg
ICAgICAgICAgIGhhc2g9InNoYTI1NjpjOTE5ZDk5OWRkYjFiYmJlY2Q0YmJlNjUyOTljYTJhYmQy
MDc5YzdlMTNkMjI0NTc3ODk1YWZhNzAwNWVjY2ViIgorICAgICAgICAgICAgbWQ1c3VtPSJlMWNk
ZmFmMWM2Yzk5NWM0ZDRjNTRlMDcyMTViMDExOCI+CisgICAgPC9icmFuY2g+CisgIDwvYXV0b3Rv
b2xzPgorCisgIDwhLS0gRklYTUU6IFBpeG1hbiAwLjMyLjYgaXNuJ3QgYnVpbGRhYmxlIHdpdGgg
Q2xhbmcsIGJ1dCBkaXNhYmxlLW1teCBvcHRpb24gZml4ZXMKKyAgICAgICAgICAgICAgdGhlIGJ1
aWxkLiBUaGlzIHdvcmthcm91bmQgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGUgb3JpZ2luYWwgYnVn
IGlzIGZpeGVkLgorICAgICAgICAgICAgICBEZXRhaWxzIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDQxIC0tPgorICA8YXV0b3Rv
b2xzIGlkPSJwaXhtYW4iIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSIKKyAgICAgICAgICAgICBhdXRv
Z2VuYXJncz0iLS1lbmFibGUtZ3RrPW5vIC0tZGlzYWJsZS1hcm0taXdtbXh0IC0tZGlzYWJsZS1t
bXgiPgorICAgIDxicmFuY2ggbW9kdWxlPSJyZWxlYXNlcy9waXhtYW4tMC4zMi42LnRhci5neiIg
dmVyc2lvbj0iMC4zMi42IgorICAgICAgICAgICAgcmVwbz0iY2Fpcm9ncmFwaGljcy5vcmciCisg
ICAgICAgICAgICBoYXNoPSJzaGEyNTY6M2RmZWQxM2I4MDYwZWFkYWJmMGE0OTQ1YzcwNDViNzc5
M2NjN2UzZTkxMGU3NDhhOGJiMGYwZGMzZTc5NDkwNCIKKyAgICAgICAgICAgIG1kNXN1bT0iM2Ez
MDg1OTcxOWE0MWJkMGY1Y2NjZmZiZmVmZGQ0YzIiPgorICAgIDwvYnJhbmNoPgorICA8L2F1dG90
b29scz4KKworICA8YXV0b3Rvb2xzIGlkPSJmb250cyIgc3VwcG9ydHMtbm9uLXNyY2Rpci1idWls
ZHM9Im5vIgorICAgICAgICAgICAgIHNraXAtYXV0b2dlbj0idHJ1ZSI+CisgICAgPGJyYW5jaCBt
b2R1bGU9Im1yb2JpbnNvbi93ZWJraXRndGstdGVzdC1mb250cy9hcmNoaXZlLzAuMC41LnRhci5n
eiIgdmVyc2lvbj0iMC4wLjUiCisgICAgICAgICAgICBjaGVja291dGRpcj0id2Via2l0Z3RrLXRl
c3QtZm9udHMiCisgICAgICAgICAgICByZXBvPSJnaXRodWIuY29tIgorICAgICAgICAgICAgaGFz
aD0ic2hhMjU2OjM2OWFlYTllMThhYTFhMjM0NDAwOTc2YzBhODEzNWI5NzA5ODA1Y2U0YjY1YTNi
NDc0YThkMGVlMGUyOThmMzQiCisgICAgICAgICAgICBtZDVzdW09IjM5ODAyYjQ4NWY1MTM4NDI3
MjRlNmNmZDI2NTMzNWJiIiBzaXplPSIyMjU5Mjg0NyI+CisgICAgPC9icmFuY2g+CisgIDwvYXV0
b3Rvb2xzPgorCisgIDxhdXRvdG9vbHMgaWQ9ImRpY3RzIiBzdXBwb3J0cy1ub24tc3JjZGlyLWJ1
aWxkcz0ibm8iCisgICAgICAgICAgICAgc2tpcC1hdXRvZ2VuPSJ0cnVlIj4KKyAgICA8YnJhbmNo
IG1vZHVsZT0ibXJvYmluc29uL3dlYmtpdGd0ay10ZXN0LWRpY3RzL2FyY2hpdmUvMC4wLjEuemlw
IiB2ZXJzaW9uPSIwLjAuMSIKKyAgICAgICAgICAgIGNoZWNrb3V0ZGlyPSJ3ZWJraXRndGstdGVz
dC1kaWN0cyIKKyAgICAgICAgICAgIHJlcG89ImdpdGh1Yi5jb20iCisgICAgICAgICAgICBoYXNo
PSJzaGEyNTY6NmNmYzk0YTc4NDZhMGQ4Zjc2YTdhNzMzZjcyOWU4MTA5YzZlMWQwZmJjOWUwZTg1
ODdlYjVjM2VmOTg4OGMyNCIKKyAgICAgICAgICAgIG1kNXN1bT0iNmJkOGQzMmMxNTczMDVmYzY5
OTMyZWE4ZDEzNDg3MjMiIHNpemU9Ijk5Mjk5Ij4KKyAgICA8L2JyYW5jaD4KKyAgPC9hdXRvdG9v
bHM+CisKKyAgPGF1dG90b29scyBpZD0ibGliZmZpIiBhdXRvZ2VuLXNoPSJjb25maWd1cmUiPgor
ICAgIDxicmFuY2ggbW9kdWxlPSIvcHViL2xpYmZmaS9saWJmZmktMy4xLnRhci5neiIgdmVyc2lv
bj0iMy4xIgorICAgICAgICAgICAgIHJlcG89InNvdXJjZXdhcmUub3JnIgorICAgICAgICAgICAg
IGhhc2g9InNoYTI1Njo5N2ZlZWVhZGNhNWUyMTg3MGZhNDQzM2JjOTUzZDFiM2FmM2Y2OThkNWRm
OGE0MjhmNjhiNzNjZDYwYWVmNmViIgorICAgICAgICAgICAgIG1kNXN1bT0iZjU4OThiMjliYmZk
NzA1MDI4MzFhMjEyZDkyNDlkMTAiLz4KKyAgPC9hdXRvdG9vbHM+CisKKyAgPCEtLSBGSVhNRTog
T3JpZ2luYWwgZG93bmxvYWQgdXJsIGRvZXNuJ3Qgd29yayBpbiBLb3JlYS4gU28sIEJ1ZyAxMzMz
MDMgY2hhbmdlcyB0aGUgdXJsIGZvciBub3cuCisgICAgICAgICAgICAgT3JpZ2luYWwgZG93bmxv
YWQgdXJsOiBodHRwOi8vZG93bmxvYWQuc2F2YW5uYWguZ251Lm9yZy9yZWxlYXNlcy9mcmVldHlw
ZS9mcmVldHlwZS0yLjQuMTEudGFyLmJ6MiAtLT4KKyAgPHRhcmJhbGwgaWQ9ImZyZWV0eXBlNiI+
CisgICAgPHNvdXJjZSBocmVmPSJnaXRodWIuY29tL3NoaXZhbWlkb3cvZnJlZXR5cGUvcmF3L21h
c3Rlci9mcmVldHlwZS0yLjQuMTEudGFyLmJ6MiIgdmVyc2lvbj0iMi40LjExIgorICAgICAgICAg
ICAgaGFzaD0ic2hhMjU2OmVmOWQwYmNiNjQ2NDdkOWU1MTI1ZGM3NTM0ZDdjYTM3MWM5ODMxMGZl
Yzg3Njc3YzQxMGYzOTdmNzFmZmJlM2YiCisgICAgICAgICAgICBtZDVzdW09ImI5MzQzNTQ4ODk0
MjQ4NmM4ZDBjYTIyZThmNzY4MDM0IiAvPgorICA8L3RhcmJhbGw+CisKKyAgPGF1dG90b29scyBp
ZD0iZ2xpYiIKKyAgICAgICAgICAgICBhdXRvZ2VuLXNoPSJjb25maWd1cmUiCisgICAgICAgICAg
ICAgYXV0b2dlbmFyZ3M9Ii0tZGlzYWJsZS1kdHJhY2UiPgorICAgIDxkZXBlbmRlbmNpZXM+Cisg
ICAgICA8ZGVwIHBhY2thZ2U9ImxpYmZmaSIvPgorICAgIDwvZGVwZW5kZW5jaWVzPgorICAgIDxi
cmFuY2ggbW9kdWxlPSIvcHViL0dOT01FL3NvdXJjZXMvZ2xpYi8yLjQxL2dsaWItMi40MS4yLnRh
ci54eiIgdmVyc2lvbj0iMi40MS4yIgorICAgICAgICAgICAgcmVwbz0iZnRwLmdub21lLm9yZyIK
KyAgICAgICAgICAgIGhhc2g9InNoYTI1NjpkYTFmNzI1ODY1NWYwZTE5NmI5MzA0Y2I5NTE1Nzg0
NjM0ZjM3OTc0Mzc5MjNlMjM2YmIzNDY2MzQ4ODExYzk2IgorICAgICAgICAgICAgbWQ1c3VtPSI5
NjM2ZjYwZTk5Yjk4ZmQwZmRiNTIzOWY5MDVhYzAwOCIvPgorICA8L2F1dG90b29scz4KKworICA8
YXV0b3Rvb2xzIGlkPSJnbGliLW5ldHdvcmtpbmciPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAg
ICA8ZGVwIHBhY2thZ2U9ImdsaWIiLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgICA8YnJhbmNo
IG1vZHVsZT0iL3B1Yi9HTk9NRS9zb3VyY2VzL2dsaWItbmV0d29ya2luZy8yLjQxL2dsaWItbmV0
d29ya2luZy0yLjQxLjQudGFyLnh6IiB2ZXJzaW9uPSIyLjQxLjQiCisgICAgICAgICAgICByZXBv
PSJmdHAuZ25vbWUub3JnIgorICAgICAgICAgICAgaGFzaD0ic2hhMjU2OjkzMGFkNjE4ODY1ZGNm
ODE3NjVkMGY0OGNiNmYxM2UyMmQ3NjIwM2VmYTU5ZDMwNjA0YWVkMDM4NGNlODBmZDciCisgICAg
ICAgICAgICBtZDVzdW09ImY4OGUxNjMzMjJjMDgzNGY5NzgxZDYyMjQ3NzFhYjJlIi8+CisgIDwv
YXV0b3Rvb2xzPgorCisgIDxhdXRvdG9vbHMgaWQ9ImxpYnNvdXAiCisgICAgICAgICAgICAgYXV0
b2dlbmFyZ3M9Ii0td2l0aG91dC1nbm9tZSAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiI+CisgICAg
PGRlcGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZ2xpYi1uZXR3b3JraW5nIi8+Cisg
ICAgICA8ZGVwIHBhY2thZ2U9ImxpYnhtbDIiLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgICA8
YnJhbmNoIG1vZHVsZT0iL3B1Yi9nbm9tZS9zb3VyY2VzL2xpYnNvdXAvMi41MC9saWJzb3VwLTIu
NTAuMC50YXIueHoiIHZlcnNpb249IjIuNTAuMCIKKyAgICAgICAgICAgIHJlcG89ImZ0cC5nbm9t
ZS5vcmciCisgICAgICAgICAgICBoYXNoPSJzaGEyNTY6MWUwMTM2NWFjNGFmMzgxNzE4N2VhODQ3
ZjlkMzU4OGMyN2VlZTAxZmM1MTlhNWE3Y2IyMTJiYjc4YjBmNjY3YiI+CisgICAgPC9icmFuY2g+
CisgIDwvYXV0b3Rvb2xzPgorCisgIDxhdXRvdG9vbHMgaWQ9ImZvbnRjb25maWciCisgICAgICAg
ICAgICAgYXV0b2dlbi1zaD0iY29uZmlndXJlIgorICAgICAgICAgICAgIGF1dG9nZW5hcmdzPSIt
LWVuYWJsZS1saWJ4bWwyIj4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdl
PSJmcmVldHlwZTYiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0ibGlieG1sMiIvPgorICAgIDwvZGVw
ZW5kZW5jaWVzPgorICAgIDxicmFuY2ggbW9kdWxlPSJzb2Z0d2FyZS9mb250Y29uZmlnL3JlbGVh
c2UvZm9udGNvbmZpZy0yLjExLjEudGFyLmd6IiB2ZXJzaW9uPSIyLjExLjEiCisgICAgICAgICAg
ICByZXBvPSJmcmVlZGVza3RvcC5vcmciCisgICAgICAgICAgICBoYXNoPSJzaGEyNTY6YjZiMDY2
YzdkY2UzZjQzNmZkYzBkZmJhZTlkMzYxMjJiMzgwOTRmNGY1M2JkOGRmZmQ0NWUxOTViMDU0MGQ4
ZCIKKyAgICAgICAgICAgIG1kNXN1bT0iZTc1ZTMwM2I0Zjc3NTZjMmIxNjIwM2E1N2FjODdlYmEi
Lz4KKyAgPC9hdXRvdG9vbHM+CisKKyAgPGF1dG90b29scyBpZD0iaGFyZmJ1enoiIGF1dG9nZW4t
c2g9ImNvbmZpZ3VyZSI+CisgICAgPGJyYW5jaCBtb2R1bGU9InNvZnR3YXJlL2hhcmZidXp6L3Jl
bGVhc2UvaGFyZmJ1enotMC45LjM1LnRhci5iejIiIHZlcnNpb249IjAuOS4zNSIKKyAgICAgICAg
ICAgY2hlY2tvdXRkaXI9ImhhcmZidXp6LTAuOS4zNSIKKyAgICAgICAgICAgcmVwbz0iZnJlZWRl
c2t0b3Aub3JnIgorICAgICAgICAgICBoYXNoPSJzaGEyNTY6MGFhMWE4YWJhNmY1MDIzMjFjZjZm
ZWYzYzlkMmM3M2RkZTQ4Mzg5YzVlZDFkMzYxNWE3NjkxOTQ0YzJhMDZlZCI+CisgICAgPC9icmFu
Y2g+CisgIDwvYXV0b3Rvb2xzPgorCisgIDxhdXRvdG9vbHMgaWQ9ImVmbCIgYXV0b2dlbi1zaD0i
Y29uZmlndXJlIgorICAgICAgICAgICAgIGF1dG9nZW5hcmdzPSItLWRpc2FibGUtZnJpYmlkaSAt
LWRpc2FibGUtYXVkaW8gLS1kaXNhYmxlLWxpYm1vdW50IC0tZGlzYWJsZS1waHlzaWNzIC0tZW5h
YmxlLWktcmVhbGx5LWtub3ctd2hhdC1pLWFtLWRvaW5nLWFuZC10aGF0LXRoaXMtd2lsbC1wcm9i
YWJseS1icmVhay10aGluZ3MtYW5kLWktd2lsbC1maXgtdGhlbS1teXNlbGYtYW5kLXNlbmQtcGF0
Y2hlcy1hYmIiPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICA8ZGVwIHBhY2thZ2U9ImZvbnRj
b25maWciLz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZ3N0cmVhbWVyIi8+CisgICAgICA8ZGVwIHBh
Y2thZ2U9ImdzdC1wbHVnaW5zLWJhc2UiLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgICA8YnJh
bmNoIG1vZHVsZT0icmVsL2xpYnMvZWZsL2VmbC0xLjE4LjQudGFyLmd6IiB2ZXJzaW9uPSIxLjE4
LjQiCisgICAgICAgICAgICByZXBvPSJkb3dubG9hZC5lbmxpZ2h0ZW5tZW50Lm9yZyIKKyAgICAg
ICAgICAgIGhhc2g9InNoYTI1NjpkMTk2NjllZWNlNzcwY2MwOTczMzU2OGM3ZGZlZjk4NzBkYWEw
ZjhiOWY2MTNhYjc2YWQxNGIyZjVkZTIwMDQwIj4KKyAgICA8L2JyYW5jaD4KKyAgPC9hdXRvdG9v
bHM+CisKKyAgPGF1dG90b29scyBpZD0ibGlieG1sMiIKKyAgICAgICAgICAgICBhdXRvZ2VuLXNo
PSJjb25maWd1cmUiCisgICAgICAgICAgICAgYXV0b2dlbmFyZ3M9Ii0td2l0aG91dC1weXRob24i
PgorICAgIDxicmFuY2ggbW9kdWxlPSIvbGlieG1sMi9saWJ4bWwyLTIuOS4xLnRhci5neiIgdmVy
c2lvbj0iMi45LjEiCisgICAgICAgICAgICByZXBvPSJ4bWxzb2Z0Lm9yZyIKKyAgICAgICAgICAg
IGhhc2g9InNoYTI1NjpmZDNjNjRjYjY2ZjJjNGVhMjdlOTM0ZDI3NTkwNGQ5MmNlYzQ5NGE4ZTg0
MDU2MTM3ODBjYmM4YTcxNjgwZmRiIgorICAgICAgICAgICAgbWQ1c3VtPSI5YzBjZmVmMjg1ZDVj
NGE1YzgwZDAwOTA0ZGRhYjM4MCIvPgorICA8L2F1dG90b29scz4KKworICA8YXV0b3Rvb2xzIGlk
PSJsaWJ4c2x0Ij4KKyAgICA8YnJhbmNoIG1vZHVsZT0iL2xpYnhzbHQvbGlieHNsdC0xLjEuMjku
dGFyLmd6IiB2ZXJzaW9uPSIxLjEuMjkiCisgICAgICAgICAgICByZXBvPSJ4bWxzb2Z0Lm9yZyIK
KyAgICAgICAgICAgIGhhc2g9InNoYTI1NjpiNTk3NmUzODU3ODM3ZTc2MTdiMjlmMjI0OWViYjVl
ZWFjMzRlMjQ5MjA4ZDMxZjFmYmY3YTZiYTdhNDA5MGNlIi8+CisgICAgPGRlcGVuZGVuY2llcz4K
KyAgICAgIDxkZXAgcGFja2FnZT0ibGlieG1sMiIvPgorICAgIDwvZGVwZW5kZW5jaWVzPgorICA8
L2F1dG90b29scz4KKworICA8YXV0b3Rvb2xzIGlkPSJvcmMiIGF1dG9nZW5hcmdzPSItLWRpc2Fi
bGUtZ3RrLWRvYyIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4KKyAgICA8YnJhbmNoIG1vZHVsZT0i
b3JjL29yYy0wLjQuMTcudGFyLmd6IiB2ZXJzaW9uPSIwLjQuMTciCisgICAgICAgICAgICByZXBv
PSJnc3RyZWFtZXIiCisgICAgICAgICAgICBoYXNoPSJzaGEyNTY6NGZjN2NjYTQ4YzU5ZmZmMjNh
ZmVlNzhmYjY0MmNkYmRlMDAxZjU2NDAxYzhmNDdiOTVhMTY1NzhkMWQ1ZDdlOCIKKyAgICAgICAg
ICAgIG1kNXN1bT0iYWYxYmYzZGFiOWU2OWYzYzM2ZjM4OTI4NWUyYTEyYTEiLz4KKyAgPC9hdXRv
dG9vbHM+CisKKyAgPGF1dG90b29scyBpZD0iZ3N0cmVhbWVyIiBhdXRvZ2VuYXJncz0iLS1kaXNh
YmxlLWd0ay1kb2MiIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSI+CisgICAgPGRlcGVuZGVuY2llcz4K
KyAgICAgIDxkZXAgcGFja2FnZT0ib3JjIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgPGJy
YW5jaCBtb2R1bGU9ImdzdHJlYW1lci9nc3RyZWFtZXItMS44LjAudGFyLnh6IiB2ZXJzaW9uPSIx
LjguMCIKKyAgICAgICAgICAgIHJlcG89ImdzdHJlYW1lciIKKyAgICAgICAgICAgIGhhc2g9InNo
YTI1Njo5NDdhMzE0YTIxMmI1ZDk0OTg1ZDg5YjQzNDQwZGJlNjZiNjk2ZTEyYmJkZjlhMmY3ODk2
N2I5OGQ3NGFiZWRjIgorICAgICAgICAgICAgbWQ1c3VtPSI2ODQ2ZDcyODllYzMyM2MzOGM0OWI4
MTgxNzFlOTU1YSIvPgorICA8L2F1dG90b29scz4KKworICA8YXV0b3Rvb2xzIGlkPSJnc3QtcGx1
Z2lucy1iYXNlIgorICAgICAgICAgICAgIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSIKKyAgICAgICAg
ICAgICBhdXRvZ2VuYXJncz0iLS1kaXNhYmxlLWV4YW1wbGVzIC0tZGlzYWJsZS1ndGstZG9jIj4K
KyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJnc3RyZWFtZXIiLz4KKyAg
ICA8L2RlcGVuZGVuY2llcz4KKyAgICA8YnJhbmNoIG1vZHVsZT0iZ3N0LXBsdWdpbnMtYmFzZS9n
c3QtcGx1Z2lucy1iYXNlLTEuOC4wLnRhci54eiIgdmVyc2lvbj0iMS44LjAiCisgICAgICAgICAg
ICByZXBvPSJnc3RyZWFtZXIiCisgICAgICAgICAgICBoYXNoPSJzaGEyNTY6YWJjMGFjYzFkMTVi
NGI5Yzk3YzY1Y2Q5Njg5YmQ2NDAwMDgxODUzYjk5ODBlYTQyOGQzYzg1NzJkZDc5MTUyMiIKKyAg
ICAgICAgICAgIG1kNXN1bT0iMjBjYzgyMzE2MDkzMTgzMTBmMmE1NWY2NGM4NmNiYjQiPgorICAg
IDwvYnJhbmNoPgorICA8L2F1dG90b29scz4KKworICA8YXV0b3Rvb2xzIGlkPSJnc3QtcGx1Z2lu
cy1nb29kIiBhdXRvZ2VuYXJncz0iLS1kaXNhYmxlLWV4YW1wbGVzIC0tZGlzYWJsZS1zb3VwIC0t
ZGlzYWJsZS1ndGstZG9jIiBhdXRvZ2VuLXNoPSJjb25maWd1cmUiPgorICAgIDxkZXBlbmRlbmNp
ZXM+CisgICAgICA8ZGVwIHBhY2thZ2U9ImdzdC1wbHVnaW5zLWJhc2UiLz4KKyAgICA8L2RlcGVu
ZGVuY2llcz4KKyAgICA8YnJhbmNoIG1vZHVsZT0iZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lu
cy1nb29kLTEuOC4wLnRhci54eiIgdmVyc2lvbj0iMS44LjAiCisgICAgICAgICAgICByZXBvPSJn
c3RyZWFtZXIiCisgICAgICAgICAgICBoYXNoPSJzaGEyNTY6YzIwYzEzNGQ0N2RiYzIzOGQ5MjE3
MDdhM2I2NmRhNzA5YzJiNGRkODlmOWQyNjdjZWMxM2QxZGRmMTZlOWY0ZCIKKyAgICAgICAgICAg
IG1kNXN1bT0iOTFlZDQ2NDljN2MyZTQzYTYxZjczMWQxNDRmNmY2ZDAiPgorICAgICAgPHBhdGNo
IGZpbGU9ImdzdC1wbHVnaW5zLWdvb2QtdXNlLXRoZS10ZmR0LWRlY29kZS10aW1lLnBhdGNoIiBz
dHJpcD0iMSIvPgorICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWdvb2QtUmV2ZXJ0LXF0
ZGVtdXgtZXhwb3NlLXN0cmVhbXMtd2l0aC1maXJzdC1tb29mLWZvci1mci5wYXRjaCIgc3RyaXA9
IjEiLz4KKyAgICA8L2JyYW5jaD4KKyAgPC9hdXRvdG9vbHM+CisKKyAgPGF1dG90b29scyBpZD0i
Z3N0LXBsdWdpbnMtYmFkIiBhdXRvZ2VuYXJncz0iLS1kaXNhYmxlLWV4YW1wbGVzIC0tZGlzYWJs
ZS1ndGstZG9jIj4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJnc3Qt
cGx1Z2lucy1iYXNlIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgPGJyYW5jaCBtb2R1bGU9
ImdzdC1wbHVnaW5zLWJhZC9nc3QtcGx1Z2lucy1iYWQtMS44LjAudGFyLnh6IiB2ZXJzaW9uPSIx
LjguMCIKKyAgICAgICAgICAgIHJlcG89ImdzdHJlYW1lciIKKyAgICAgICAgICAgIGhhc2g9InNo
YTI1NjoxMTYzNzZkZDEwODUwODI0MjJlMGIyMWIwZWNkM2QxY2IzNDVjNDY5YzU4ZTMyNDYzMTY3
ZDQ2NzVmNGNhOTBlIgorICAgICAgICAgICAgbWQ1c3VtPSIxYzJkNzk3YmI5NmE4MWU5ZWY1NzBj
N2EwYTM3MjAzZSI+CisgICAgPC9icmFuY2g+CisgIDwvYXV0b3Rvb2xzPgorCisgIDxhdXRvdG9v
bHMgaWQ9ImdzdC1saWJhdiIgYXV0b2dlbmFyZ3M9Ii0td2l0aC1saWJhdi1leHRyYS1jb25maWd1
cmU9Jy0tZGlzYWJsZS15YXNtJyAtLWRpc2FibGUtZ3RrLWRvYyIgYXV0b2dlbi1zaD0iY29uZmln
dXJlIj4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lu
cy1iYXNlIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgPGJyYW5jaCBtb2R1bGU9ImdzdC1s
aWJhdi9nc3QtbGliYXYtMS44LjAudGFyLnh6IiB2ZXJzaW9uPSIxLjguMCIKKyAgICAgICAgICAg
IHJlcG89ImdzdHJlYW1lciIKKyAgICAgICAgICAgIGhhc2g9InNoYTI1Njo1YTFjZTI4ODc2YWVl
OTNjYjRmM2QwOTBmMGU4MDc5MTVhNWQ5YmMxMzI1ZTM0ODBkZDMwMmI4NWFlYjQyOTFjIgorICAg
ICAgICAgICAgbWQ1c3VtPSIzNjE2MzhmYTQ1NDY2YzUwNTBiY2RlNmJmZTEwZmE0NiI+CisgICAg
ICA8cGF0Y2ggZmlsZT0iZ3N0LWxpYmF2LnBhdGNoIiBzdHJpcD0iMSIvPgorICAgIDwvYnJhbmNo
PgorICA8L2F1dG90b29scz4KKworICA8YXV0b3Rvb2xzIGlkPSJhdGsiCisgICAgICAgICAgICAg
YXV0b2dlbi1zaD0iY29uZmlndXJlIgorICAgICAgICAgICAgIGF1dG9nZW5hcmdzPSItLWRpc2Fi
bGUtaW50cm9zcGVjdGlvbiI+CisgICAgPGJyYW5jaCBtb2R1bGU9InB1Yi9HTk9NRS9zb3VyY2Vz
L2F0ay8yLjE1L2F0ay0yLjE1LjIudGFyLnh6IiB2ZXJzaW9uPSIyLjE1LjIiCisgICAgICAgICAg
ICByZXBvPSJmdHAuZ25vbWUub3JnIgorICAgICAgICAgICAgaGFzaD0ic2hhMjU2OjE3OWQxNTQy
NGI4YWEzYTU3MjY5MDNmMGRhNDU4ZGU2OGUwNTg1ZGZkOWQ0NTFjNmRjZmNkYjZiN2I1MDljYmUi
Lz4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwIHBhY2thZ2U9ImdsaWIiLz4KKyAg
ICA8L2RlcGVuZGVuY2llcz4KKyAgPC9hdXRvdG9vbHM+CisKKyAgPGF1dG90b29scyBpZD0ibGli
dXNyc2N0cCIgc3VwcG9ydHMtbm9uLXNyY2Rpci1idWlsZHM9Im5vIiBhdXRvZ2VuLXNoPSIuL2Jv
b3RzdHJhcDsgLi9jb25maWd1cmUgLS1kaXNhYmxlLXdhcm5pbmdzLWFzLWVycm9ycyI+CisgICAg
PGJyYW5jaCByZXBvPSJnaXRodWIuY29tIiBtb2R1bGU9InNjdHBsYWIvdXNyc2N0cC9hcmNoaXZl
LzA3OGZmMzI1MmY3MzMyN2UwYWMxMWQ2ZmQ1ZWZmNjIwMTFmNjY0NmUudGFyLmd6IiB2ZXJzaW9u
PSIwNzhmZjMyNTJmNzMzMjdlMGFjMTFkNmZkNWVmZjYyMDExZjY2NDZlIiBjaGVja291dGRpcj0i
bGlidXNyc2N0cCIKKyAgICAgICAgICAgIGhhc2g9InNoYTI1NjoxNzU5Mzg4ODdkYzc1NTRlMDAw
MTUyMDU1YzgxOGJkZDE1ZGQwZTRjY2M5NGVmOTNlMzhlOWY5NTJlYTgyZWRjIiBzaXplPSI2NDg5
MjUiPgorICAgIDwvYnJhbmNoPgorICA8L2F1dG90b29scz4KKworICA8YXV0b3Rvb2xzIGlkPSJn
c3QtcGx1Z2lucy1vcGVud2VicnRjIiBzdXBwb3J0cy1wYXJhbGxlbC1idWlsZHM9Im5vIiBzdXBw
b3J0cy1ub24tc3JjZGlyLWJ1aWxkcz0ibm8iIGF1dG9nZW4tc2g9Ii4vYXV0b2dlbi5zaDsgLi9j
b25maWd1cmUiPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICA8ZGVwIHBhY2thZ2U9ImdzdC1w
bHVnaW5zLWJhc2UiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0ibGlidXNyc2N0cCIvPgorICAgIDwv
ZGVwZW5kZW5jaWVzPgorICAgPGJyYW5jaCByZXBvPSJnaXRodWIuY29tIiBtb2R1bGU9IkVyaWNz
c29uUmVzZWFyY2gvb3BlbndlYnJ0Yy1nc3QtcGx1Z2lucy9hcmNoaXZlL2UzNTliNjc0ODRhZjkw
ZjQxNmVhMzVlMzAxMjA1ZDJiNTNjNzdhMTQudGFyLmd6IiBjaGVja291dGRpcj0iZ3N0LXBsdWdp
bnMtb3BlbndlYnJ0YyIgdmVyc2lvbj0iZ3N0LXBsdWdpbnMtb3BlbndlYnJ0Yy0yMDE1MDMxNyIK
KyAgICAgICAgICAgaGFzaD0ic2hhMjU2OmE0NTY0MjVlZmI4OGRlMzljMTZhNGY4YWM0MjE0YWFm
NTMxNTdmOWRmMTMyM2YwOGRlMzc1Yzc3ZjIyN2I2YjciCisgICAgICAgICAgIG1kNXN1bT0iODI3
ZjEzNjM0ZmZhODNjY2NmMWE2MzEyZWZmYmNlYWEiIHNpemU9IjkyODgzIj4KKyAgICAgIDxwYXRj
aCBmaWxlPSJvcGVud2VicnRjLWdzdC1wbHVnaW5zLWNsYW5nLXdhcm5pbmctZml4LnBhdGNoIiBz
dHJpcD0iMSIvPgorICAgPC9icmFuY2g+CisgIDwvYXV0b3Rvb2xzPgorCisgIDxhdXRvdG9vbHMg
aWQ9ImxpYm5pY2UiIHN1cHBvcnRzLW5vbi1zcmNkaXItYnVpbGRzPSJubyI+CisgICAgPGRlcGVu
ZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZ3N0cmVhbWVyIi8+CisgICAgPC9kZXBlbmRl
bmNpZXM+CisgICAgPGJyYW5jaCByZXBvPSJuaWNlLmZyZWVkZXNrdG9wLm9yZyIgbW9kdWxlPSJy
ZWxlYXNlcy9saWJuaWNlLTAuMS4xMy50YXIuZ3oiIGNoZWNrb3V0ZGlyPSJsaWJuaWNlIiB2ZXJz
aW9uPSIwLjEuMTMiCisgICAgICAgICAgICBoYXNoPSJzaGEyNTY6NjExMTJkOWYzYmU5MzNhODI3
YzgzNjVmMjA1NTE1NjM5NTNhZjY3MTgwNTc5MjhmNTFmNDg3YmZlODg0MTllMSIKKyAgICAgICAg
ICAgIG1kNXN1bT0iMzIyNmZhZWFmNDhhOTE1MGFkYTAwZGEyZTI4NjU5NTkiIHNpemU9IjkxMjM3
NCI+CisgICAgPC9icmFuY2g+CisgIDwvYXV0b3Rvb2xzPgorCisgIDxhdXRvdG9vbHMgaWQ9Im9w
ZW53ZWJydGMiIGF1dG9nZW5hcmdzPSItLWVuYWJsZS1icmlkZ2U9bm8gLS1lbmFibGUtb3dyLWdz
dD15ZXMiPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICA8ZGVwIHBhY2thZ2U9ImdzdC1wbHVn
aW5zLW9wZW53ZWJydGMiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0ibGlibmljZSIvPgorICAgICA8
L2RlcGVuZGVuY2llcz4KKyAgICA8YnJhbmNoIHJlcG89ImdpdGh1Yi5jb20iIG1vZHVsZT0iRXJp
Y3Nzb25SZXNlYXJjaC9vcGVud2VicnRjL2FyY2hpdmUvZjUxMWVhMWZhNzlhMzNmYTNkNTJiZmQx
YzA5NjljMjgwODRhZWIzNS50YXIuZ3oiIGNoZWNrb3V0ZGlyPSJvcGVud2VicnRjIiB2ZXJzaW9u
PSJmNTExZWExZmE3OWEzM2ZhM2Q1MmJmZDFjMDk2OWMyODA4NGFlYjM1IgorICAgICAgICAgICAg
aGFzaD0ic2hhMjU2OmFmODBiODA1MTJiNWY1YTZiODJiNGNmNDNhZmEyOGRhOWM5NGM4NjgwMGY2
ZmFkZDEwNzYyMzYxMDc5ZmI1ZTMiCisgICAgICAgICAgICBtZDVzdW09IjQ1NTVkMjA4MjFhZjhm
NTMzNGY3NGI0ZjAzMjdmMTc4IiBzaXplPSIyOTYxNDMiPgorICAgIDwvYnJhbmNoPgorICA8L2F1
dG90b29scz4KKworPC9tb2R1bGVzZXQ+CmRpZmYgLS1naXQgYS9Ub29scy9lZmwvamhidWlsZHJj
IGIvVG9vbHMvZWZsL2poYnVpbGRyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDRiMzkzZjY0NzdhYWM4NGJkNzE3
YWQ1N2I5OThlZmI3M2M3MmRlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZWZsL2poYnVpbGRy
YwpAQCAtMCwwICsxLDMwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCisjIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlv
bgorIworIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisjIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKworaW1wb3J0IHN5cworaW1wb3J0IHBsYXRmb3JtCisKK3N5cy5wYXRoLmluc2VydCgwLCBv
cy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgIi4uL2poYnVpbGQiKSApCitp
bXBvcnQgamhidWlsZHJjX2NvbW1vbgorCitqaGJ1aWxkcmNfY29tbW9uLmluaXQoZ2xvYmFscygp
LCAiZWZsIikgCisKK2FkZHBhdGgoJ1hER19EQVRBX0RJUlMnLCAnL3Vzci9zaGFyZScpCithZGRw
YXRoKCdYREdfQ09ORklHX0RJUlMnLCAnL2V0Yy94ZGcnKQorCitwYXJ0aWFsX2J1aWxkID0gRmFs
c2UKZGlmZiAtLWdpdCBhL1Rvb2xzL2VmbC9wYXRjaGVzL2V2YXMtZml4LWJ1aWxkLXdpdGgtZ2lm
bGliNS5wYXRjaCBiL1Rvb2xzL2VmbC9wYXRjaGVzL2V2YXMtZml4LWJ1aWxkLXdpdGgtZ2lmbGli
NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yMDNmYmRkZDBkNTg2OWFlYTNmOGVjNjc5Nzc2MDg2NGI0YmVi
N2RmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZWZsL3BhdGNoZXMvZXZhcy1maXgtYnVpbGQt
d2l0aC1naWZsaWI1LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK1BhdGNoIGZyb20gRG91ZyBOZXdn
YXJkLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly9waGFiLmVubGlnaHRlbm1lbnQub3JnL0QyMDAKKwor
ZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL2xvYWRlcnMvZ2lmL2V2YXNfaW1hZ2VfbG9hZF9naWYu
YyBiL3NyYy9tb2R1bGVzL2xvYWRlcnMvZ2lmL2V2YXNfaW1hZ2VfbG9hZF9naWYuYworaW5kZXgg
MThhNmUyMy4uNmI2ZWYzZCAxMDA2NDQKKy0tLSBhL3NyYy9tb2R1bGVzL2xvYWRlcnMvZ2lmL2V2
YXNfaW1hZ2VfbG9hZF9naWYuYworKysrIGIvc3JjL21vZHVsZXMvbG9hZGVycy9naWYvZXZhc19p
bWFnZV9sb2FkX2dpZi5jCitAQCAtNzAwLDcgKzcwMCwxMSBAQCBldmFzX2ltYWdlX2xvYWRfZmls
ZV9oZWFkX2dpZihJbWFnZV9FbnRyeSAqaWUsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIg
KmtleQorICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgICB9CisgCisrI2lmIEdJRkxJ
Ql9NQUpPUiA+PSA1CisrICAgZ2lmID0gREdpZk9wZW5GaWxlSGFuZGxlKGZkLCBOVUxMKTsKKysj
ZWxzZQorICAgIGdpZiA9IERHaWZPcGVuRmlsZUhhbmRsZShmZCk7CisrI2VuZGlmCisgICAgaWYg
KCFnaWYpCisgICAgICB7CisgICAgICAgICBpZiAoZmQpIGNsb3NlKGZkKTsKK0BAIC04MzgsNyAr
ODQyLDExIEBAIGV2YXNfaW1hZ2VfbG9hZF9zcGVjaWZpY19mcmFtZShJbWFnZV9FbnRyeSAqaWUs
IGNvbnN0IGNoYXIgKmZpbGUsIGludCBmcmFtZV9pbmRlCisgICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKKyAgICAgIH0KKyAKKysjaWYgR0lGTElCX01BSk9SID49IDUKKysgICBnaWYgPSBER2lm
T3BlbkZpbGVIYW5kbGUoZmQsIE5VTEwpOworKyNlbHNlCisgICAgZ2lmID0gREdpZk9wZW5GaWxl
SGFuZGxlKGZkKTsKKysjZW5kaWYKKyAgICBpZiAoIWdpZikKKyAgICAgIHsKKyAgICAgICAgIGlm
IChmZCkgY2xvc2UoZmQpOworQEAgLTkyNyw3ICs5MzUsMTEgQEAgZXZhc19pbWFnZV9sb2FkX2Zp
bGVfZGF0YV9naWYoSW1hZ2VfRW50cnkgKmllLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFy
ICprZXkKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICAgICAgICAg
ICAgICB9CisgCisrI2lmIEdJRkxJQl9NQUpPUiA+PSA1CisrICAgICAgICAgICAgIGdpZiA9IERH
aWZPcGVuRmlsZUhhbmRsZShmZCwgTlVMTCk7CisrI2Vsc2UKKyAgICAgICAgICAgICAgZ2lmID0g
REdpZk9wZW5GaWxlSGFuZGxlKGZkKTsKKysjZW5kaWYKKyAgICAgICAgICAgICAgaWYgKCFnaWYp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIGlmIChmZCkgY2xvc2UoZmQp
OworQEAgLTEwMDAsNyArMTAxMiwxMSBAQCBldmFzX2ltYWdlX2xvYWRfZnJhbWVfZHVyYXRpb25f
Z2lmKEltYWdlX0VudHJ5ICppZSwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgaW50CisgI2VuZGlm
CisgICAgaWYgKGZkIDwgMCkgcmV0dXJuIC0xOworIAorKyNpZiBHSUZMSUJfTUFKT1IgPj01Cisr
ICAgZ2lmID0gREdpZk9wZW5GaWxlSGFuZGxlKGZkLCBOVUxMKTsKKysjZWxzZQorICAgIGdpZiA9
IERHaWZPcGVuRmlsZUhhbmRsZShmZCk7CisrI2VuZGlmCisgICAgaWYgKCFnaWYpCisgICAgICB7
CisgICAgICAgICBpZiAoZmQpIGNsb3NlKGZkKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL2VmbC9wYXRj
aGVzL2ZvbnRjb25maWctQy0xMS1yZXF1aXJlcy1hLXNwYWNlLWJldHdlZW4tbGl0ZXJhbC1hbmQt
aWRlbnRpZmllci5wYXRjaCBiL1Rvb2xzL2VmbC9wYXRjaGVzL2ZvbnRjb25maWctQy0xMS1yZXF1
aXJlcy1hLXNwYWNlLWJldHdlZW4tbGl0ZXJhbC1hbmQtaWRlbnRpZmllci5wYXRjaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iNGUwYTU0MWRiYzQ5MThjODBlZmJmYWJlNzI1M2IyODE4MDkxMjlmCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvZWZsL3BhdGNoZXMvZm9udGNvbmZpZy1DLTExLXJlcXVpcmVzLWEtc3Bh
Y2UtYmV0d2Vlbi1saXRlcmFsLWFuZC1pZGVudGlmaWVyLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAK
K0Zyb20gNzA2OWQ3MTdlOTgyYWRjZjhlMWQzMDBjYmQxMGVlYzYzMjJhNjVjOSBNb24gU2VwIDE3
IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFraXJhIFRBR09IIDxha2lyYUB0YWdvaC5vcmc+CitEYXRl
OiBTdW4sIDIyIEFwciAyMDEyIDIxOjQwOjQ0ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIEMrKzEx
IHJlcXVpcmVzIGEgc3BhY2UgYmV0d2VlbiBsaXRlcmFsIGFuZCBpZGVudGlmaWVyCisKK1JlcG9y
dGVkIGJ5IEJ1Z2FuaW5pCistLS0KKyBmb250Y29uZmlnL2ZvbnRjb25maWcuaCB8IDYgKysrLS0t
CisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlm
ZiAtLWdpdCBhL2ZvbnRjb25maWcvZm9udGNvbmZpZy5oIGIvZm9udGNvbmZpZy9mb250Y29uZmln
LmgKK2luZGV4IDBlMmNhNTAuLmIyN2NjYjUgMTAwNjQ0CistLS0gYS9mb250Y29uZmlnL2ZvbnRj
b25maWcuaAorKysrIGIvZm9udGNvbmZpZy9mb250Y29uZmlnLmgKK0BAIC0xMTIsOSArMTEyLDkg
QEAgdHlwZWRlZiBpbnQJCUZjQm9vbDsKKyAjZGVmaW5lIEZDX0RFQ09SQVRJVkUJICAgICJkZWNv
cmF0aXZlIgkvKiBCb29sIC0gdHJ1ZSBpZiBzdHlsZSBpcyBhIGRlY29yYXRpdmUgdmFyaWFudCAq
LworICNkZWZpbmUgRkNfTENEX0ZJTFRFUgkgICAgImxjZGZpbHRlciIJCS8qIEludCAqLworIAor
LSNkZWZpbmUgRkNfQ0FDSEVfU1VGRklYCQkgICAgIi5jYWNoZS0iRkNfQ0FDSEVfVkVSU0lPTgor
LSNkZWZpbmUgRkNfRElSX0NBQ0hFX0ZJTEUJICAgICJmb250cy5jYWNoZS0iRkNfQ0FDSEVfVkVS
U0lPTgorLSNkZWZpbmUgRkNfVVNFUl9DQUNIRV9GSUxFCSAgICAiLmZvbnRzLmNhY2hlLSJGQ19D
QUNIRV9WRVJTSU9OCisrI2RlZmluZSBGQ19DQUNIRV9TVUZGSVgJCSAgICAiLmNhY2hlLSIgRkNf
Q0FDSEVfVkVSU0lPTgorKyNkZWZpbmUgRkNfRElSX0NBQ0hFX0ZJTEUJICAgICJmb250cy5jYWNo
ZS0iIEZDX0NBQ0hFX1ZFUlNJT04KKysjZGVmaW5lIEZDX1VTRVJfQ0FDSEVfRklMRQkgICAgIi5m
b250cy5jYWNoZS0iIEZDX0NBQ0hFX1ZFUlNJT04KKyAKKyAvKiBBZGp1c3Qgb3V0bGluZSByYXN0
ZXJpemVyICovCisgI2RlZmluZSBGQ19DSEFSX1dJRFRICSAgICAiY2hhcndpZHRoIgkvKiBJbnQg
Ki8KKy0tIAorMS44LjMuMgorCmRpZmYgLS1naXQgYS9Ub29scy9lZmwvcGF0Y2hlcy9nc3QtbGli
YXYucGF0Y2ggYi9Ub29scy9lZmwvcGF0Y2hlcy9nc3QtbGliYXYucGF0Y2gKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzVlYzk5ZWZlYWIyOGZhM2RiZjYzMzVhZTczNWFlMzU3ZDZiNzUzNgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL2VmbC9wYXRjaGVzL2dzdC1saWJhdi5wYXRjaApAQCAtMCwwICsxLDIwIEBACist
LS0gYS9nc3QtbGlicy9leHQvbGliYXYvbGliYXZjb2RlYy9hcm0vdmlkZW9kc3BfYXJtdjV0ZS5T
CisrKysgYi9nc3QtbGlicy9leHQvbGliYXYvbGliYXZjb2RlYy9hcm0vdmlkZW9kc3BfYXJtdjV0
ZS5TCitAQCAtMjcsNiArMjcsNyBAQAorICAgICAgICAgc3VicyAgICAgICAgICAgIHIyLCAgcjIs
ICAjMQorICAgICAgICAgcGxkICAgICAgICAgICAgIFtyMF0KKyAgICAgICAgIGFkZCAgICAgICAg
ICAgICByMCwgIHIwLCAgcjEKKysgICAgICAgIGl0ICAgICAgICAgICAgICBuZQorICAgICAgICAg
Ym5lICAgICAgICAgICAgIDFiCisgICAgICAgICBieCAgICAgICAgICAgICAgbHIKKworLS0tIGEv
Z3N0LWxpYnMvZXh0L2xpYmF2L2xpYnN3cmVzYW1wbGUvYXJtL2F1ZGlvX2NvbnZlcnRfbmVvbi5T
CisrKysgYi9nc3QtbGlicy9leHQvbGliYXYvbGlic3dyZXNhbXBsZS9hcm0vYXVkaW9fY29udmVy
dF9uZW9uLlMKK0BAIC0xMzQsNiArMTM0LDcgQEAgZnVuY3Rpb24gc3dyaV9vbGRhcGlfY29udl9m
bHRwX3RvX3MxNl9uY2hfbmVvbiwgZXhwb3J0PTEKKyAgICAgICAgIGl0dCAgICAgICAgICAgICBs
dAorICAgICAgICAgbGRybHQgICAgICAgICAgIHIxLCAgW3IxXQorICAgICAgICAgYmx0ICAgICAg
ICAgICAgIFgoc3dyaV9vbGRhcGlfY29udl9mbHRfdG9fczE2X25lb24pCisrICAgICAgICBpdCAg
ICAgICAgICAgICAgZXEKKyAgICAgICAgIGJlcSAgICAgICAgICAgICBYKHN3cmlfb2xkYXBpX2Nv
bnZfZmx0cF90b19zMTZfMmNoX25lb24pCisgCisgICAgICAgICBwdXNoICAgICAgICAgICAge3I0
LXI4LCBscn0KZGlmZiAtLWdpdCBhL1Rvb2xzL2VmbC9wYXRjaGVzL2dzdC1wbHVnaW5zLWJhc2Ut
cnRwLXJ0Y3BidWZmZXItZml4LXR5cG8taW4tZW51bS5wYXRjaCBiL1Rvb2xzL2VmbC9wYXRjaGVz
L2dzdC1wbHVnaW5zLWJhc2UtcnRwLXJ0Y3BidWZmZXItZml4LXR5cG8taW4tZW51bS5wYXRjaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lM2RkYjcyMzgxYjM2ZjRjZGNlODdkZjQ4MDI4ZDdhYTNmZWZhZjIyCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvZWZsL3BhdGNoZXMvZ3N0LXBsdWdpbnMtYmFzZS1ydHAtcnRj
cGJ1ZmZlci1maXgtdHlwby1pbi1lbnVtLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gZGZj
MzRjNTg0MTFmNTBiMzdiMmUxMzAwNTYwYWU4YTBiNmE5YTdkNCBNb24gU2VwIDE3IDAwOjAwOjAw
IDIwMDEKK0Zyb206ID0/VVRGLTg/cT9UaW0tUGhpbGlwcD0yME09QzM9QkNsbGVyPz0gPHRpbUBj
ZW50cmljdWxhci5jb20+CitEYXRlOiBUdWUsIDcgQXByIDIwMTUgMTY6NDM6NTkgKzAxMDAKK1N1
YmplY3Q6IFtQQVRDSF0gcnRwOiBydGNwYnVmZmVyOiBmaXggdHlwbyBpbiBlbnVtCisKK2FuZCBp
biBkb2NzLiBTcG90dGVkIGJ5IFJvYiBTd2Fpbi4KKy0tLQorIGdzdC1saWJzL2dzdC9ydHAvZ3N0
cnRjcGJ1ZmZlci5oIHwgNyArKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygr
KSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9ydHAvZ3N0cnRj
cGJ1ZmZlci5oIGIvZ3N0LWxpYnMvZ3N0L3J0cC9nc3RydGNwYnVmZmVyLmgKK2luZGV4IGI1ZmY0
YTEuLjQ3Mzc4Y2YgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvcnRwL2dzdHJ0Y3BidWZmZXIu
aAorKysrIGIvZ3N0LWxpYnMvZ3N0L3J0cC9nc3RydGNwYnVmZmVyLmgKK0BAIC01OSw2ICs1OSw5
IEBAIHR5cGVkZWYgZW51bQorICAgR1NUX1JUQ1BfVFlQRV9QU0ZCICAgID0gMjA2CisgfSBHc3RS
VENQVHlwZTsKKyAKKysvKiBGSVhNRSAyLjA6IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGRlZmlu
ZSBmb3IgZW51bSB0eXBvICovCisrI2RlZmluZSBHU1RfUlRDUF9SVFBGQl9UWVBFX1JDVFBfU1Jf
UkVRIEdTVF9SVENQX1JUUEZCX1RZUEVfUlRDUF9TUl9SRVEKKysKKyAvKioKKyAgKiBHc3RSVENQ
RkJUeXBlOgorICAqIEBHU1RfUlRDUF9GQl9UWVBFX0lOVkFMSUQ6IEludmFsaWQgdHlwZQorQEAg
LTY2LDcgKzY5LDcgQEAgdHlwZWRlZiBlbnVtCisgICogQEdTVF9SVENQX1JUUEZCX1RZUEVfVE1N
QlI6IFRlbXBvcmFyeSBNYXhpbXVtIE1lZGlhIFN0cmVhbSBCaXQgUmF0ZSBSZXF1ZXN0CisgICog
QEdTVF9SVENQX1JUUEZCX1RZUEVfVE1NQk46IFRlbXBvcmFyeSBNYXhpbXVtIE1lZGlhIFN0cmVh
bSBCaXQgUmF0ZQorICAqICAgIE5vdGlmaWNhdGlvbgorLSAqIEBHU1RfUlRDUF9SVFBGQl9UWVBF
X1JUQ1BfU1JfU0VROiBSZXF1ZXN0IGFuIFNSIHBhY2tldCBmb3IgZWFybHkKKysgKiBAR1NUX1JU
Q1BfUlRQRkJfVFlQRV9SVENQX1NSX1JFUTogUmVxdWVzdCBhbiBTUiBwYWNrZXQgZm9yIGVhcmx5
CisgICogICAgc3luY2hyb25pemF0aW9uCisgICogQEdTVF9SVENQX1BTRkJfVFlQRV9QTEk6IFBp
Y3R1cmUgTG9zcyBJbmRpY2F0aW9uCisgICogQEdTVF9SVENQX1BTRkJfVFlQRV9TTEk6IFNsaWNl
IExvc3MgSW5kaWNhdGlvbgorQEAgLTg5LDcgKzkyLDcgQEAgdHlwZWRlZiBlbnVtCisgICBHU1Rf
UlRDUF9SVFBGQl9UWVBFX1RNTUJSICAgICAgID0gMywKKyAgIEdTVF9SVENQX1JUUEZCX1RZUEVf
VE1NQk4gICAgICAgPSA0LAorICAgLyogUlRQRkIgdHlwZXMgYXNzaWduZWQgaW4gUkZDIDYwNTEg
Ki8KKy0gIEdTVF9SVENQX1JUUEZCX1RZUEVfUkNUUF9TUl9SRVEgPSA1LAorKyAgR1NUX1JUQ1Bf
UlRQRkJfVFlQRV9SVENQX1NSX1JFUSA9IDUsCisgICAvKiBQU0ZCIHR5cGVzICovCisgICBHU1Rf
UlRDUF9QU0ZCX1RZUEVfUExJICAgICAgICAgID0gMSwKKyAgIEdTVF9SVENQX1BTRkJfVFlQRV9T
TEkgICAgICAgICAgPSAyLAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9Ub29scy9lZmwvcGF0
Y2hlcy9nc3QtcGx1Z2lucy1nb29kLVJldmVydC1xdGRlbXV4LWV4cG9zZS1zdHJlYW1zLXdpdGgt
Zmlyc3QtbW9vZi1mb3ItZnIucGF0Y2ggYi9Ub29scy9lZmwvcGF0Y2hlcy9nc3QtcGx1Z2lucy1n
b29kLVJldmVydC1xdGRlbXV4LWV4cG9zZS1zdHJlYW1zLXdpdGgtZmlyc3QtbW9vZi1mb3ItZnIu
cGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2E2MGRiNDc3MmIyNzczYTIxY2QwMTM0MDRiNGJkZWViMTBkNmYx
MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2VmbC9wYXRjaGVzL2dzdC1wbHVnaW5zLWdvb2Qt
UmV2ZXJ0LXF0ZGVtdXgtZXhwb3NlLXN0cmVhbXMtd2l0aC1maXJzdC1tb29mLWZvci1mci5wYXRj
aApAQCAtMCwwICsxLDEzMyBAQAorRnJvbSAxYTgxYmQ5MGQ0YTNlNTlkNjY2OWEwYmJmYTQ1NmYx
ZWQ0ZTVkYjQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWGFiaWVyIFJvZHJpZ3Vl
eiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+CitEYXRlOiBUaHUsIDcgQXByIDIwMTYgMTM6
NTc6MTYgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJxdGRlbXV4OiBleHBvc2Ugc3Ry
ZWFtcyB3aXRoIGZpcnN0IG1vb2YgZm9yCisgZnJhZ21lbnRlZCBmb3JtYXQiCisKK1RoaXMgcmV2
ZXJ0cyBjb21taXQgZDhiYjY2ODdlYTI1MTU3MGMzMzEwMzgyNzlhNDNkNDQ4MTY3ZDZhZC4KKy0t
LQorIGdzdC9pc29tcDQvcXRkZW11eC5jIHwgNTQgKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGdzdC9pc29tcDQvcXRkZW11eC5oIHwgIDEgLQor
IDIgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCisKK2Rp
ZmYgLS1naXQgYS9nc3QvaXNvbXA0L3F0ZGVtdXguYyBiL2dzdC9pc29tcDQvcXRkZW11eC5jCitp
bmRleCAzOWJlMTYzLi45NjM2YjRiIDEwMDY0NAorLS0tIGEvZ3N0L2lzb21wNC9xdGRlbXV4LmMK
KysrKyBiL2dzdC9pc29tcDQvcXRkZW11eC5jCitAQCAtNjA5LDcgKzYwOSw2IEBAIGdzdF9xdGRl
bXV4X2luaXQgKEdzdFFURGVtdXggKiBxdGRlbXV4KQorICAgcXRkZW11eC0+c3RhdGUgPSBRVERF
TVVYX1NUQVRFX0lOSVRJQUw7CisgICBxdGRlbXV4LT5wdWxsYmFzZWQgPSBGQUxTRTsKKyAgIHF0
ZGVtdXgtPnBvc3RlZF9yZWRpcmVjdCA9IEZBTFNFOworLSAgcXRkZW11eC0+cGVuZGluZ19jb25m
aWd1cmUgPSBGQUxTRTsKKyAgIHF0ZGVtdXgtPm5lZWRlZGJ5dGVzID0gMTY7CisgICBxdGRlbXV4
LT50b2Ryb3AgPSAwOworICAgcXRkZW11eC0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsK
K0BAIC0yMDQ5LDcgKzIwNDgsNiBAQCBnc3RfcXRkZW11eF9yZXNldCAoR3N0UVREZW11eCAqIHF0
ZGVtdXgsIGdib29sZWFuIGhhcmQpCisgICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZxdGRlbXV4LT5t
ZWRpYV9jYXBzLCBOVUxMKTsKKyAgICAgcXRkZW11eC0+dGltZXNjYWxlID0gMDsKKyAgICAgcXRk
ZW11eC0+Z290X21vb3YgPSBGQUxTRTsKKy0gICAgcXRkZW11eC0+cGVuZGluZ19jb25maWd1cmUg
PSBGQUxTRTsKKyAgIH0gZWxzZSBpZiAocXRkZW11eC0+bXNzX21vZGUpIHsKKyAgICAgZ3N0X2Zs
b3dfY29tYmluZXJfcmVzZXQgKHF0ZGVtdXgtPmZsb3djb21iaW5lcik7CisgICAgIGZvciAobiA9
IDA7IG4gPCBxdGRlbXV4LT5uX3N0cmVhbXM7IG4rKykKK0BAIC02MTA0LDcgKzYxMDIsNiBAQCBn
c3RfcXRkZW11eF9wcm9jZXNzX2FkYXB0ZXIgKEdzdFFURGVtdXggKiBkZW11eCwgZ2Jvb2xlYW4g
Zm9yY2UpCisgICAgICAgICAgICAgJmZvdXJjYyk7CisgICAgICAgICBpZiAoZm91cmNjID09IEZP
VVJDQ19tb292KSB7CisgICAgICAgICAgIGdpbnQgbjsKKy0gICAgICAgICAgZ2Jvb2xlYW4gZ290
X3NhbXBsZXMgPSBGQUxTRTsKKyAKKyAgICAgICAgICAgLyogaW4gdXN1YWwgZnJhZ21lbnRlZCBz
ZXR1cCB3ZSBjb3VsZCB0cnkgdG8gc2NhbiBmb3IgbW9yZQorICAgICAgICAgICAgKiBhbmQgZW5k
IHVwIGF0IHRoZSB0aGUgbW9vdiAoYWZ0ZXIgbWRhdCkgYWdhaW4gKi8KK0BAIC02MTM2LDI3ICs2
MTMzLDE5IEBAIGdzdF9xdGRlbXV4X3Byb2Nlc3NfYWRhcHRlciAoR3N0UVREZW11eCAqIGRlbXV4
LCBnYm9vbGVhbiBmb3JjZSkKKyAgICAgICAgICAgICBxdGRlbXV4X25vZGVfZHVtcCAoZGVtdXgs
IGRlbXV4LT5tb292X25vZGUpOworICAgICAgICAgICAgIHF0ZGVtdXhfcGFyc2VfdHJlZSAoZGVt
dXgpOworICAgICAgICAgICAgIHF0ZGVtdXhfcHJlcGFyZV9zdHJlYW1zIChkZW11eCk7CisrICAg
ICAgICAgICAgaWYgKCFkZW11eC0+Z290X21vb3YpCisrICAgICAgICAgICAgICBxdGRlbXV4X2V4
cG9zZV9zdHJlYW1zIChkZW11eCk7CisrICAgICAgICAgICAgZWxzZSB7CisgCistICAgICAgICAg
ICAgZm9yIChuID0gMDsgbiA8IGRlbXV4LT5uX3N0cmVhbXM7IG4rKykgeworLSAgICAgICAgICAg
ICAgUXREZW11eFN0cmVhbSAqc3RyZWFtID0gZGVtdXgtPnN0cmVhbXNbbl07CistICAgICAgICAg
ICAgICBnb3Rfc2FtcGxlcyB8PSBzdHJlYW0tPnN0YmxfaW5kZXggPj0gMDsKKy0gICAgICAgICAg
ICB9CistICAgICAgICAgICAgaWYgKCFkZW11eC0+ZnJhZ21lbnRlZCB8fCBnb3Rfc2FtcGxlcykg
eworLSAgICAgICAgICAgICAgaWYgKCFkZW11eC0+Z290X21vb3YpIHsKKy0gICAgICAgICAgICAg
ICAgcXRkZW11eF9leHBvc2Vfc3RyZWFtcyAoZGVtdXgpOworLSAgICAgICAgICAgICAgfSBlbHNl
IHsKKy0gICAgICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IGRlbXV4LT5uX3N0cmVhbXM7IG4r
KykgeworLSAgICAgICAgICAgICAgICAgIFF0RGVtdXhTdHJlYW0gKnN0cmVhbSA9IGRlbXV4LT5z
dHJlYW1zW25dOworLSAgICAgICAgICAgICAgICAgIGdzdF9xdGRlbXV4X2NvbmZpZ3VyZV9zdHJl
YW0gKGRlbXV4LCBzdHJlYW0pOworLSAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBm
b3IgKG4gPSAwOyBuIDwgZGVtdXgtPm5fc3RyZWFtczsgbisrKSB7CisrICAgICAgICAgICAgICAg
IFF0RGVtdXhTdHJlYW0gKnN0cmVhbSA9IGRlbXV4LT5zdHJlYW1zW25dOworKworKyAgICAgICAg
ICAgICAgICBnc3RfcXRkZW11eF9jb25maWd1cmVfc3RyZWFtIChkZW11eCwgc3RyZWFtKTsKKyAg
ICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgIGdzdF9xdGRlbXV4X2NoZWNrX3NlbmRfcGVu
ZGluZ19zZWdtZW50IChkZW11eCk7CistICAgICAgICAgICAgICBkZW11eC0+cGVuZGluZ19jb25m
aWd1cmUgPSBGQUxTRTsKKy0gICAgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgICAgZGVt
dXgtPnBlbmRpbmdfY29uZmlndXJlID0gVFJVRTsKKyAgICAgICAgICAgICB9CisgCisgICAgICAg
ICAgICAgZGVtdXgtPmdvdF9tb292ID0gVFJVRTsKKysgICAgICAgICAgICBnc3RfcXRkZW11eF9j
aGVja19zZW5kX3BlbmRpbmdfc2VnbWVudCAoZGVtdXgpOworIAorICAgICAgICAgICAgIC8qIGZy
YWdtZW50ZWQgc3RyZWFtcyBoZWFkZXJzIHNob3VsZG4ndCBjb250YWluIGVkdHMgYXRvbXMgKi8K
KyAgICAgICAgICAgICBpZiAoIWRlbXV4LT5mcmFnbWVudGVkKSB7CitAQCAtNjE3NSw3ICs2MTY0
LDYgQEAgZ3N0X3F0ZGVtdXhfcHJvY2Vzc19hZGFwdGVyIChHc3RRVERlbXV4ICogZGVtdXgsIGdi
b29sZWFuIGZvcmNlKQorICAgICAgICAgICAgIGd1aW50NjQgZGlzdCA9IDA7CisgICAgICAgICAg
ICAgR3N0Q2xvY2tUaW1lIHByZXZfcHRzOworICAgICAgICAgICAgIGd1aW50NjQgcHJldl9vZmZz
ZXQ7CistICAgICAgICAgICAgZ2ludCBuOworIAorICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QgKGRlbXV4LCAiUGFyc2luZyBbbW9vZl0iKTsKKyAKK0BAIC02MjA5LDI1ICs2MTk3LDE1IEBA
IGdzdF9xdGRlbXV4X3Byb2Nlc3NfYWRhcHRlciAoR3N0UVREZW11eCAqIGRlbXV4LCBnYm9vbGVh
biBmb3JjZSkKKyAgICAgICAgICAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOworICAgICAgICAg
ICAgICAgZ290byBkb25lOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAvKiBpbiBNU1Mg
d2UgbmVlZCB0byBleHBvc2UgdGhlIHBhZHMgYWZ0ZXIgdGhlIGZpcnN0IG1vb2YgYXMgd2Ugd29u
J3QgZ2V0IGEgbW9vdiAKKy0gICAgICAgICAgICAgKiBBbHNvLCBmcmFnbWVudGVkIGZvcm1hdCBu
ZWVkIHRvIGJlIGV4cG9zZWQgaWYgYSBtb292IGhhdmUgbm8gdmFsaWQgc2FtcGxlIGRhdGEgKi8K
Ky0gICAgICAgICAgICBpZiAoZGVtdXgtPm1zc19tb2RlIHx8IGRlbXV4LT5wZW5kaW5nX2NvbmZp
Z3VyZSkgeworLSAgICAgICAgICAgICAgaWYgKCFkZW11eC0+ZXhwb3NlZCkgeworLSAgICAgICAg
ICAgICAgICBpZiAoIWRlbXV4LT5wZW5kaW5nX25ld3NlZ21lbnQpIHsKKy0gICAgICAgICAgICAg
ICAgICBHc3RTZWdtZW50IHNlZ21lbnQ7CistICAgICAgICAgICAgICAgICAgZ3N0X3NlZ21lbnRf
aW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CistICAgICAgICAgICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVCAoZGVtdXgsICJuZXcgcGVuZGluZ19uZXdzZWdtZW50Iik7CistICAgICAg
ICAgICAgICAgICAgZGVtdXgtPnBlbmRpbmdfbmV3c2VnbWVudCA9IGdzdF9ldmVudF9uZXdfc2Vn
bWVudCAoJnNlZ21lbnQpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIHF0
ZGVtdXhfZXhwb3NlX3N0cmVhbXMgKGRlbXV4KTsKKy0gICAgICAgICAgICAgIH0gZWxzZSB7Cist
ICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBkZW11eC0+bl9zdHJlYW1zOyBuKyspIHsK
Ky0gICAgICAgICAgICAgICAgICBRdERlbXV4U3RyZWFtICpzdHJlYW0gPSBkZW11eC0+c3RyZWFt
c1tuXTsKKy0gICAgICAgICAgICAgICAgICBnc3RfcXRkZW11eF9jb25maWd1cmVfc3RyZWFtIChk
ZW11eCwgc3RyZWFtKTsKKy0gICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIC8qIGluIE1T
UyB3ZSBuZWVkIHRvIGV4cG9zZSB0aGUgcGFkcyBhZnRlciB0aGUgZmlyc3QgbW9vZiBhcyB3ZSB3
b24ndCBnZXQgYSBtb292ICovCisrICAgICAgICAgICAgaWYgKGRlbXV4LT5tc3NfbW9kZSAmJiAh
ZGVtdXgtPmV4cG9zZWQpIHsKKysgICAgICAgICAgICAgIGlmICghZGVtdXgtPnBlbmRpbmdfbmV3
c2VnbWVudCkgeworKyAgICAgICAgICAgICAgICBHc3RTZWdtZW50IHNlZ21lbnQ7CisrICAgICAg
ICAgICAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwor
KyAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIm5ldyBwZW5kaW5nX25l
d3NlZ21lbnQiKTsKKysgICAgICAgICAgICAgICAgZGVtdXgtPnBlbmRpbmdfbmV3c2VnbWVudCA9
IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOworICAgICAgICAgICAgICAgfQorLSAg
ICAgICAgICAgICAgZ3N0X3F0ZGVtdXhfY2hlY2tfc2VuZF9wZW5kaW5nX3NlZ21lbnQgKGRlbXV4
KTsKKy0gICAgICAgICAgICAgIGRlbXV4LT5wZW5kaW5nX2NvbmZpZ3VyZSA9IEZBTFNFOworKyAg
ICAgICAgICAgICAgcXRkZW11eF9leHBvc2Vfc3RyZWFtcyAoZGVtdXgpOworICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChk
ZW11eCwgIkRpc2NhcmRpbmcgW21vb2ZdIik7CitkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9xdGRl
bXV4LmggYi9nc3QvaXNvbXA0L3F0ZGVtdXguaAoraW5kZXggNjA2MTIxNS4uZWNmMGM2MyAxMDA2
NDQKKy0tLSBhL2dzdC9pc29tcDQvcXRkZW11eC5oCisrKysgYi9nc3QvaXNvbXA0L3F0ZGVtdXgu
aAorQEAgLTg5LDcgKzg5LDYgQEAgc3RydWN0IF9Hc3RRVERlbXV4IHsKKyAgIGdib29sZWFuIHBv
c3RlZF9yZWRpcmVjdDsKKyAKKyAgIC8qIHB1c2ggYmFzZWQgdmFyaWFibGVzICovCistICBnYm9v
bGVhbiBwZW5kaW5nX2NvbmZpZ3VyZTsKKyAgIGd1aW50IG5lZWRlZGJ5dGVzOworICAgZ3VpbnQg
dG9kcm9wOworICAgR3N0QWRhcHRlciAqYWRhcHRlcjsKKy0tIAorMi44LjAucmMzCisKZGlmZiAt
LWdpdCBhL1Rvb2xzL2VmbC9wYXRjaGVzL2dzdC1wbHVnaW5zLWdvb2QtdXNlLXRoZS10ZmR0LWRl
Y29kZS10aW1lLnBhdGNoIGIvVG9vbHMvZWZsL3BhdGNoZXMvZ3N0LXBsdWdpbnMtZ29vZC11c2Ut
dGhlLXRmZHQtZGVjb2RlLXRpbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWU5ZGQ5N2Y3OTE2ZjA4NzM3
OWUwOGZjNjhhYTBkYTIxMjk1OGM3NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2VmbC9wYXRj
aGVzL2dzdC1wbHVnaW5zLWdvb2QtdXNlLXRoZS10ZmR0LWRlY29kZS10aW1lLnBhdGNoCkBAIC0w
LDAgKzEsMTQ2IEBACitGcm9tIDQ2ZDNlMGZhYTkyMjY0MzA5NGE1ZTQ2YTMyZTRmODJmNzc0YWU3
NzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/RW5yaXF1ZT0yME9j
YT1DMz1CMWE9MjBHb256PUMzPUExbGV6Pz0gPGVvY2FuaGFAaWdhbGlhLmNvbT4KK0RhdGU6IFR1
ZSwgMTAgTm92IDIwMTUgMTM6MDk6MDAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gVXNlIHRoZSB0
ZmR0IGRlY29kZSB0aW1lIHdoZW4gaXQncyBzaWduaWZpY2FudGx5IGRpZmZlcmVudAorIHRoYW4g
dGhlIHRpbWUgaW4gdGhlIGxhc3Qgc2FtcGxlIGlmIGFsd2F5cy1ob25vci10ZmR0IGlzIGVuYWJs
ZWQKKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDIzMAor
LS0tCisgZ3N0L2lzb21wNC9xdGRlbXV4LmMgfCA3MiArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZ3N0L2lzb21wNC9xdGRlbXV4LmggfCAgMSAr
CisgMiBmaWxlcyBjaGFuZ2VkLCA3MyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nc3Qv
aXNvbXA0L3F0ZGVtdXguYyBiL2dzdC9pc29tcDQvcXRkZW11eC5jCitpbmRleCA4ODA1OTVlLi5k
OGI1NGYwIDEwMDY0NAorLS0tIGEvZ3N0L2lzb21wNC9xdGRlbXV4LmMKKysrKyBiL2dzdC9pc29t
cDQvcXRkZW11eC5jCitAQCAtNTM1LDYgKzUzNSwxMSBAQCBzdGF0aWMgdm9pZCBnc3RfcXRkZW11
eF9hcHBlbmRfcHJvdGVjdGlvbl9zeXN0ZW1faWQgKEdzdFFURGVtdXggKiBxdGRlbXV4LAorICAg
ICBjb25zdCBnY2hhciAqIGlkKTsKKyBzdGF0aWMgdm9pZCBxdGRlbXV4X2dzdF9zdHJ1Y3R1cmVf
ZnJlZSAoR3N0U3RydWN0dXJlICogZ3N0c3RydWN0dXJlKTsKKyAKKytzdGF0aWMgdm9pZCBnc3Rf
cXRkZW11eF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisr
ICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogc3BlYyk7Cisrc3RhdGljIHZv
aWQgZ3N0X3F0ZGVtdXhfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9w
X2lkLAorKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHNwZWMpOworKworIHN0YXRp
YyB2b2lkCisgZ3N0X3F0ZGVtdXhfY2xhc3NfaW5pdCAoR3N0UVREZW11eENsYXNzICoga2xhc3Mp
CisgeworQEAgLTU0Niw4ICs1NTEsMjEgQEAgZ3N0X3F0ZGVtdXhfY2xhc3NfaW5pdCAoR3N0UVRE
ZW11eENsYXNzICoga2xhc3MpCisgCisgICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVl
a19wYXJlbnQgKGtsYXNzKTsKKyAKKysgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdz
dF9xdGRlbXV4X3NldF9wcm9wZXJ0eTsKKysgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9
IGdzdF9xdGRlbXV4X2dldF9wcm9wZXJ0eTsKKysKKyAgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2Ug
PSBnc3RfcXRkZW11eF9kaXNwb3NlOworIAorKyAvKioKKysgICAqIEdzdFF0RGVtdXg6OmFsd2F5
cy1ob25vci10ZmR0OgorKyAgICoKKysgICAqIFJlcXVlc3RzIHRoZSBkZW11eGVyIHRvIHJlc3Bl
Y3Qgd2hhdCB0aGUgVEZEVCBhdG9tIHNheXMgaW4gb3JkZXIgdG8gcHJvZHVjZSBwcmVzZW50YXRp
b24gdGltZXN0YW1wcy4gRGVmYXVsdHMgdG8gRkFMU0UuCisrICAgKi8KKysgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUxXQVlTX0hPTk9SX1RG
RFQsCisrICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJhbHdheXMtaG9ub3ItdGZkdCIsICJB
bHdheXMgaG9ub3IgVEZEVCIsCisrICAgICAgICAgICJXaGVuIGVuYWJsZWQsIFRGRFQgYXRvbSB3
aWxsIGFsd2F5cyBiZSByZXNwZWN0ZWQgaW4gb3JkZXIgdG8gcHJvZHVjZSBwcmVzZW50YXRpb24g
dGltZXN0YW1wcyIsCisrICAgICAgICAgIEZBTFNFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFS
QU1fU1RBVElDX1NUUklOR1MpKTsKKysKKyAgIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0
ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXRkZW11eF9jaGFuZ2Vfc3RhdGUpOworICNpZiAw
CisgICBnc3RlbGVtZW50X2NsYXNzLT5zZXRfaW5kZXggPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0
X3F0ZGVtdXhfc2V0X2luZGV4KTsKK0BAIC02MTEsNiArNjI5LDcgQEAgZ3N0X3F0ZGVtdXhfaW5p
dCAoR3N0UVREZW11eCAqIHF0ZGVtdXgpCisgICBxdGRlbXV4LT5jZW5jX2F1eF9pbmZvX3NpemVz
ID0gTlVMTDsKKyAgIHF0ZGVtdXgtPmNlbmNfYXV4X3NhbXBsZV9jb3VudCA9IDA7CisgICBxdGRl
bXV4LT5wcm90ZWN0aW9uX3N5c3RlbV9pZHMgPSBOVUxMOworKyAgcXRkZW11eC0+YWx3YXlzX2hv
bm9yX3RmZHQgPSBGQUxTRTsKKyAgIGdfcXVldWVfaW5pdCAoJnF0ZGVtdXgtPnByb3RlY3Rpb25f
ZXZlbnRfcXVldWUpOworICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnF0ZGVtdXgtPnNlZ21lbnQsIEdT
VF9GT1JNQVRfVElNRSk7CisgICBxdGRlbXV4LT5mbG93Y29tYmluZXIgPSBnc3RfZmxvd19jb21i
aW5lcl9uZXcgKCk7CitAQCAtNjM5LDYgKzY1OCw0MiBAQCBnc3RfcXRkZW11eF9kaXNwb3NlIChH
T2JqZWN0ICogb2JqZWN0KQorIH0KKyAKKyBzdGF0aWMgdm9pZAorK2dzdF9xdGRlbXV4X3NldF9w
cm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKysgICAgY29uc3QgR1Zh
bHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKKyt7CisrICBHc3RRVERlbXV4ICpxdGRl
bXV4ID0gR1NUX1FUREVNVVggKG9iamVjdCk7CisrCisrICBzd2l0Y2ggKHByb3BfaWQpIHsKKysg
ICAgY2FzZSBQUk9QX0FMV0FZU19IT05PUl9URkRUOgorKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAo
cXRkZW11eCk7CisrICAgICAgcXRkZW11eC0+YWx3YXlzX2hvbm9yX3RmZHQgPSBnX3ZhbHVlX2dl
dF9ib29sZWFuICh2YWx1ZSk7CisrICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0ZGVtdXgpOwor
KyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisrICAgICAgYnJlYWs7Cisr
ICB9CisrfQorKworK3N0YXRpYyB2b2lkCisrZ3N0X3F0ZGVtdXhfZ2V0X3Byb3BlcnR5IChHT2Jq
ZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKKysgICAgR1BhcmFt
U3BlYyAqIHBzcGVjKQorK3sKKysgIEdzdFFURGVtdXggKnF0ZGVtdXggPSBHU1RfUVRERU1VWCAo
b2JqZWN0KTsKKysKKysgIHN3aXRjaCAocHJvcF9pZCkgeworKyAgICBjYXNlIFBST1BfQUxXQVlT
X0hPTk9SX1RGRFQ6CisrICAgICAgR1NUX09CSkVDVF9MT0NLIChxdGRlbXV4KTsKKysgICAgICBn
X3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcXRkZW11eC0+YWx3YXlzX2hvbm9yX3RmZHQpOwor
KyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChxdGRlbXV4KTsKKysgICAgICBicmVhazsKKysgICAg
ZGVmYXVsdDoKKysgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVj
dCwgcHJvcF9pZCwgcHNwZWMpOworKyAgICAgIGJyZWFrOworKyAgfQorK30KKysKKytzdGF0aWMg
dm9pZAorIGdzdF9xdGRlbXV4X3Bvc3Rfbm9fcGxheWFibGVfc3RyZWFtX2Vycm9yIChHc3RRVERl
bXV4ICogcXRkZW11eCkKKyB7CisgICBpZiAocXRkZW11eC0+cG9zdGVkX3JlZGlyZWN0KSB7CitA
QCAtMjk5NSw2ICszMDUwLDE2IEBAIHF0ZGVtdXhfcGFyc2VfdHJ1biAoR3N0UVREZW11eCAqIHF0
ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiB0cnVuLAorICAgICAgICAgICBzdHJlYW0tPnNhbXBsZXNb
c3RyZWFtLT5uX3NhbXBsZXMgLSAxXS50aW1lc3RhbXAgKworICAgICAgICAgICBzdHJlYW0tPnNh
bXBsZXNbc3RyZWFtLT5uX3NhbXBsZXMgLSAxXS5kdXJhdGlvbjsKKyAKKysgICAgICAvKiBJZiB3
ZSdyZSBhbHdheXMgaG9ub3JpbmcgVEZEVCBhbmQgdGhlcmUncyBhIHNpZ25pZmljYXRpdmUgZGlm
ZmVyZW5jZQorKyAgICAgICAqIGJldHdlZW4gdGhlIGRlY29kZV90cyBhbmQgdGhlIHRpbWVzdGFt
cCwgcHJlZmVyIGRlY29kZV90cyAqLworKyAgICAgIGlmIChxdGRlbXV4LT5hbHdheXNfaG9ub3Jf
dGZkdCA9PSBUUlVFCisrICAgICAgICAgICYmIGFicyAoZGVjb2RlX3RzIC0gdGltZXN0YW1wKSA+
CisrICAgICAgICAgIHN0cmVhbS0+c2FtcGxlc1tzdHJlYW0tPm5fc2FtcGxlcyAtIDFdLmR1cmF0
aW9uKSB7CisrICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsCisrICAgICAgICAgICAg
ImRlY29kZV90cyBpcyBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBmcm9tIHRpbWVzdGFtcCwgdXNp
bmcgZGVjb2RlX3RzIik7CisrICAgICAgICB0aW1lc3RhbXAgPSBkZWNvZGVfdHM7CisrICAgICAg
fQorKworICAgICAgIGdzdF90cyA9IFFUU1RSRUFNVElNRV9UT19HU1RUSU1FIChzdHJlYW0sIHRp
bWVzdGFtcCk7CisgICAgICAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAiZmlyc3Qgc2FtcGxl
IHRzICUiIEdTVF9USU1FX0ZPUk1BVAorICAgICAgICAgICAiIChleHRlbmRzIHByZXZpb3VzIHNh
bXBsZXMpIiwgR1NUX1RJTUVfQVJHUyAoZ3N0X3RzKSk7CitkaWZmIC0tZ2l0IGEvZ3N0L2lzb21w
NC9xdGRlbXV4LmggYi9nc3QvaXNvbXA0L3F0ZGVtdXguaAoraW5kZXggNTNiZDA3MS4uZWNmMGM2
MyAxMDA2NDQKKy0tLSBhL2dzdC9pc29tcDQvcXRkZW11eC5oCisrKysgYi9nc3QvaXNvbXA0L3F0
ZGVtdXguaAorQEAgLTE1NCwxMiArMTU0LDIwIEBAIHN0cnVjdCBfR3N0UVREZW11eCB7CisgICBn
dWludDggKmNlbmNfYXV4X2luZm9fc2l6ZXM7CisgICBndWludDMyIGNlbmNfYXV4X3NhbXBsZV9j
b3VudDsKKyAKKysgIGdib29sZWFuIGFsd2F5c19ob25vcl90ZmR0OworIH07CisgCisgc3RydWN0
IF9Hc3RRVERlbXV4Q2xhc3MgeworICAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKKyB9
OworIAorKy8qIHByb3BzICovCisrZW51bQorK3sKKysgIFBST1BfMCwKKysgIFBST1BfQUxXQVlT
X0hPTk9SX1RGRFQKKyt9OworKworIEdUeXBlIGdzdF9xdGRlbXV4X2dldF90eXBlICh2b2lkKTsK
KyAKKyBHX0VORF9ERUNMUworLS0gCisyLjYuMQorCmRpZmYgLS1naXQgYS9Ub29scy9lZmwvcGF0
Y2hlcy9vcGVud2VicnRjLWdzdC1wbHVnaW5zLWNsYW5nLXdhcm5pbmctZml4LnBhdGNoIGIvVG9v
bHMvZWZsL3BhdGNoZXMvb3BlbndlYnJ0Yy1nc3QtcGx1Z2lucy1jbGFuZy13YXJuaW5nLWZpeC5w
YXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hMjZiYTdlOTkyMDVjY2QzODdjYjEwZjcwNzIzZTY1MjkxZTNmYWQ1
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZWZsL3BhdGNoZXMvb3BlbndlYnJ0Yy1nc3QtcGx1
Z2lucy1jbGFuZy13YXJuaW5nLWZpeC5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC0tZ2l0
IGEvZ3N0L3ZpZGVvcmVwYWlyL01ha2VmaWxlLmFtIGIvZ3N0L3ZpZGVvcmVwYWlyL01ha2VmaWxl
LmFtCitpbmRleCAzNDQ4N2I1Li4zNGMzODg3IDEwMDY0NAorLS0tIGEvZ3N0L3ZpZGVvcmVwYWly
L01ha2VmaWxlLmFtCisrKysgYi9nc3QvdmlkZW9yZXBhaXIvTWFrZWZpbGUuYW0KK0BAIC0xNyw3
ICsxNyw3IEBAIHBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHZpZGVvcmVwYWlyLmxhCisgbGli
Z3N0dmlkZW9yZXBhaXJfbGFfU09VUkNFUyA9IGdzdHZpZGVvcmVwYWlyLmMKKyAKKyAjIGNvbXBp
bGVyIGFuZCBsaW5rZXIgZmxhZ3MgdXNlZCB0byBjb21waWxlIHRoaXMgcGx1Z2luLCBzZXQgaW4g
Y29uZmlndXJlLmFjCistbGliZ3N0dmlkZW9yZXBhaXJfbGFfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdT
KSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAtV2FsbCAtV2V4dHJhIC1XZXJyb3IKKytsaWJn
c3R2aWRlb3JlcGFpcl9sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpICQoR1NUX1BMVUdJTlNfQkFT
RV9DRkxBR1MpIC1XYWxsIC1XZXh0cmEKKyBsaWJnc3R2aWRlb3JlcGFpcl9sYV9MSUJBREQgPSAk
KEdTVF9MSUJTKSAtbGdzdHZpZGVvLTEuMAorIGxpYmdzdHZpZGVvcmVwYWlyX2xhX0xERkxBR1Mg
PSAkKEdTVF9QTFVHSU5fTERGTEFHUykKKyBpZiAhR1NUX1BMVUdJTl9CVUlMRF9TVEFUSUMK
</data>

          </attachment>
      

    </bug>

</bugzilla>