<?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>129264</bug_id>
          
          <creation_ts>2014-02-24 12:22:05 -0800</creation_ts>
          <short_desc>Move non-API files in the API/ios directory out to UIProcess/ios</short_desc>
          <delta_ts>2014-02-24 12:26:24 -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>528+ (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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>983995</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 12:22:05 -0800</bug_when>
    <thetext>Move non-API files in the API/ios directory out to UIProcess/ios</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983998</commentid>
    <comment_count>1</comment_count>
      <attachid>225082</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 12:23:29 -0800</bug_when>
    <thetext>Created attachment 225082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983999</commentid>
    <comment_count>2</comment_count>
      <attachid>225082</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-02-24 12:24:12 -0800</bug_when>
    <thetext>Comment on attachment 225082
Patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984000</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-24 12:25:13 -0800</bug_when>
    <thetext>Attachment 225082 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/ios/WKContentViewInternal.h:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984001</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 12:26:24 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/164599</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225082</attachid>
            <date>2014-02-24 12:23:29 -0800</date>
            <delta_ts>2014-02-24 12:24:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129264-20140224122326.patch</filename>
            <type>text/plain</type>
            <size>369697</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZmI1Y2E0MmZkNGQ0NmUy
YzcwODBhMWI0ODNlNDJhYmVhMWI3ZGFkYS4uODJlZDA0YTk3MzczZTQ4MjdkNTM1M2JjMDIwZWNj
ZDZmM2ZkZWM2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI1IEBACiAyMDE0LTAyLTI0ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIE1vdmUgbm9uLUFQ
SSBmaWxlcyBpbiB0aGUgQVBJL2lvcyBkaXJlY3Rvcnkgb3V0IHRvIFVJUHJvY2Vzcy9pb3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTI2NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0uCisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS0FjdGlvblNoZWV0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2lvcy9XS0FjdGlvblNoZWV0LmguCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Fj
dGlvblNoZWV0Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9p
b3MvV0tBY3Rpb25TaGVldC5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcm5hbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9p
b3MvV0tDb250ZW50Vmlld0ludGVybmFsLmguCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0dl
b2xvY2F0aW9uUHJvdmlkZXJJT1MuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tJbnRlcmFjdGlvblZpZXcuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3LmguCisg
ICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0ludGVyYWN0aW9uVmlldy5tbTogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tTY3JvbGxWaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS1Njcm9sbFZpZXcuaC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvaW9zL1dLU2Nyb2xsVmlldy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvaW9zL1dLU2Nyb2xsVmlldy5tbS4KKyAgICAgICAgKiBXZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKzIwMTQtMDItMjQgIFNpbW9uIEZyYXNlciAgPHNp
bW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAgUmVuYW1lIFBhZ2VDbGllbnRJbXBsSU9T
OjptX3ZpZXcgdG8gbV9jb250ZW50VmlldwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MTI0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiNTIyMWM0ZTk4YTkyOTUyZTZlZWM2YjFjNzZkYjU4MjljNDNkM2QzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGFnZUNsaWVudEltcGxJT1Nf
aAotI2RlZmluZSBQYWdlQ2xpZW50SW1wbElPU19oCi0KLSNpbXBvcnQgIlBhZ2VDbGllbnQuaCIK
LSNpbXBvcnQgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKLSNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotQGNsYXNzIFdLQ29udGVudFZpZXc7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
ICAgIAotY2xhc3MgUGFnZUNsaWVudEltcGwgOiBwdWJsaWMgUGFnZUNsaWVudAotI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKLSAgICAsIHB1YmxpYyBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5
Q2xpZW50Ci0jZW5kaWYKLSAgICB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUGFnZUNsaWVudElt
cGwoV0tDb250ZW50VmlldyAqKTsKLSAgICB2aXJ0dWFsIH5QYWdlQ2xpZW50SW1wbCgpOwotICAg
IAotcHJpdmF0ZToKLSAgICAvLyBQYWdlQ2xpZW50Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9w
dHI8RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGxheVZpZXcoKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgY2FuU2Nyb2xsVmlldygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBX
ZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGlz
Vmlld1dpbmRvd0FjdGl2ZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdGb2N1
c2VkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGlzVmlld1Zpc2libGUoKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3SW5XaW5kb3coKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgcHJvY2Vzc0RpZEV4aXQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVsYXVuY2hQcm9jZXNzKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VDbG9zZWQo
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlZmVyZW5jZXNEaWRDaGFuZ2UoKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY2lkZVBvbGljeUZvckdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViRnJhbWVQcm94eSYsIFdlYlNlY3VyaXR5T3Jp
Z2luJiwgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5Jikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25z
dCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBX
ZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckFsbEVkaXRDb21tYW5kcygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVk
byhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgYWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlblJlY2VpdmVkKGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBpbnRlcnByZXRL
ZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgVmVjdG9yPFdlYkNvcmU6Oktl
eXByZXNzQ29tbWFuZD4mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZXhlY3V0ZVNhdmVk
Q29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3Rvcikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpZW50
UG9zaXRpb24sIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UsIGJvb2wgaXNM
aW5rRHJhZykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNlY3VyZUlucHV0U3Rh
dGUoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXRTZWN1cmVJbnB1dFN0YXRlKCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2Fy
ZGVkQ29tcG9zaXRpb24oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFrZUZpcnN0UmVz
cG9uZGVyKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVy
dFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQg
c2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9uZVdpdGhLZXlFdmVudChj
b25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpIG92ZXJy
aWRlOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdmlydHVhbCB2b2lkIGRvbmVXaXRo
VG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRs
ZWQpIG92ZXJyaWRlOwotI2VuZGlmCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVu
dVByb3h5PiBjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gY3JlYXRlQ29udGV4dE1l
bnVQcm94eShXZWJQYWdlUHJveHkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rmlu
ZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQsIGJvb2wg
YW5pbWF0ZSkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdSb290TGF5ZXIoQ0FMYXllciAqcm9vdExheWVyKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIENBTGF5ZXIgKmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKSBjb25zdCBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIExheWVySG9zdGluZ01vZGUgdmlld0xheWVySG9zdGluZ01v
ZGUoKSBvdmVycmlkZSB7IHJldHVybiBMYXllckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3M7IH0K
LQotICAgIHZpcnR1YWwgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHRha2VWaWV3U25hcHNob3QoKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgd2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNv
cmUoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckN1c3RvbVN3aXBlVmlld3MoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBk
aWRHZXRUYXBIaWdobGlnaHRHZW9tZXRyaWVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImIGNvbG9yLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRRdWFkPiYgaGln
aGxpZ2h0ZWRRdWFkcywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGJvdHRvbVJpZ2h0
UmFkaXVzKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMYXllclRyZWUo
Y29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKSBvdmVycmlkZTsKLQotICAgIHZpcnR1
YWwgdm9pZCBzdGFydEFzc2lzdGluZ05vZGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGJvb2wg
aGFzTmV4dEZvY3VzYWJsZSwgYm9vbCBoYXNQcmV2aW91c0ZvY3VzYWJsZSkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHN0b3BBc3Npc3RpbmdOb2RlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIHNlbGVjdGlvbkRpZENoYW5nZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBp
bnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCBpc0No
YXJFdmVudCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uSW5mb3JtYXRpb25E
aWRDaGFuZ2UoY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2F2ZUltYWdlVG9MaWJyYXJ5KFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRv
dWNoKHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBmbGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwg
ZmxvYXQgc2hyaW5rVGhyZXNob2xkKTsKLQotICAgIC8vIEF1eGlsaWFyeSBDbGllbnQgQ3JlYXRp
b24KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgdmlydWFsIFdlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHlDbGllbnQmIGZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSBvdmVycmlk
ZTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIC8vIFdlYkZ1bGxT
Y3JlZW5NYW5hZ2VyUHJveHlDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VGdWxsU2NyZWVu
TWFuYWdlcigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBpc0Z1bGxTY3JlZW4oKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGV4aXRGdWxsU2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGJlZ2FuRW50ZXJGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFt
ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGJlZ2FuRXhpdEZ1bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5p
dGlhbEZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbEZyYW1lKSBvdmVycmlkZTsK
LSNlbmRpZgotCi0gICAgV0tDb250ZW50VmlldyAqbV9jb250ZW50VmlldzsKLX07Ci19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBhZ2VDbGllbnRJbXBsSU9TX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1t
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZjUxMDdmMTQ3YWY3MmNkMTc1YWUzMGQy
Yjc0OWZjOTg2MTZmZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1Mu
bW0KKysrIC9kZXYvbnVsbApAQCAtMSw0MDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGFnZUNsaWVudEltcGxJT1MuaCIKLQotI2ltcG9y
dCAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgotI2ltcG9ydCAiSW50ZXJhY3Rpb25JbmZvcm1h
dGlvbkF0UG9zaXRpb24uaCIKLSNpbXBvcnQgIldLQ29udGVudFZpZXdJbnRlcm5hbC5oIgotI2lt
cG9ydCAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgotI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQcm94
eS5oIgotI2ltcG9ydCA8VUlLaXQvVUlJbWFnZVBpY2tlckNvbnRyb2xsZXJfUHJpdmF0ZS5oPgot
I2ltcG9ydCA8VUlLaXQvVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3Jt
U2NyZWVuLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgotCi1AaW50ZXJmYWNl
IFVJVmlldyAoSVBJKQotLSAoVUlTY3JvbGxWaWV3ICopX3Njcm9sbGVyOwotQGVuZAotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBhZ2VDbGllbnRJ
bXBsOjpQYWdlQ2xpZW50SW1wbChXS0NvbnRlbnRWaWV3ICp2aWV3KQotICAgIDogbV9jb250ZW50
Vmlldyh2aWV3KQotewotfQotCi1QYWdlQ2xpZW50SW1wbDo6flBhZ2VDbGllbnRJbXBsKCkKLXsK
LX0KLQotc3RkOjp1bmlxdWVfcHRyPERyYXdpbmdBcmVhUHJveHk+IFBhZ2VDbGllbnRJbXBsOjpj
cmVhdGVEcmF3aW5nQXJlYVByb3h5KCkKLXsKLSAgICByZXR1cm4gW21fY29udGVudFZpZXcgX2Ny
ZWF0ZURyYXdpbmdBcmVhUHJveHldOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRWaWV3
TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpc3BsYXlWaWV3KCkKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2Nyb2xsVmll
dyhjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6OmNhblNjcm9sbFZpZXcoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1JbnRTaXplIFBhZ2VD
bGllbnRJbXBsOjp2aWV3U2l6ZSgpCi17Ci0gICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsZXIg
PSBbbV9jb250ZW50VmlldyBfc2Nyb2xsZXJdKQotICAgICAgICByZXR1cm4gSW50U2l6ZShzY3Jv
bGxlci5ib3VuZHMuc2l6ZSk7Ci0KLSAgICByZXR1cm4gSW50U2l6ZShtX2NvbnRlbnRWaWV3LmJv
dW5kcy5zaXplKTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3V2luZG93QWN0aXZl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdGb2N1c2VkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNp
YmxlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdJbldpbmRvdygpCi17Ci0gICAgcmV0dXJuIFttX2Nv
bnRlbnRWaWV3IHdpbmRvd107Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRF
eGl0KCkKLXsKLSAgICBbbV9jb250ZW50VmlldyBfcHJvY2Vzc0RpZEV4aXRdOwotfQotCi12b2lk
IFBhZ2VDbGllbnRJbXBsOjpkaWRSZWxhdW5jaFByb2Nlc3MoKQotewotICAgIFttX2NvbnRlbnRW
aWV3IF9kaWRSZWxhdW5jaFByb2Nlc3NdOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpwYWdl
Q2xvc2VkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJ
bXBsOjpwcmVmZXJlbmNlc0RpZENoYW5nZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6dG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFBhZ2VDbGll
bnRJbXBsOjpkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYkZy
YW1lUHJveHkmIGZyYW1lLCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0UHJveHkmIHJlcXVlc3QpCi17Ci0gICAgW21fY29udGVudFZpZXcgX2Rl
Y2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46b3JpZ2luIGZyYW1lOmZy
YW1lIHJlcXVlc3Q6cmVxdWVzdF07Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGFnZUNs
aWVudEltcGw6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoKQotewotICAgIFttX2NvbnRlbnRW
aWV3IF9kaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lXTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJv
b2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVnaXN0
ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJv
eHk6OlVuZG9PclJlZG8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYWdl
Q2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6OmNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhZ2VDbGll
bnRJbXBsOjphY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFBhZ2VD
bGllbnRJbXBsOjppbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50
JiwgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBhZ2VDbGllbnRJbXBsOjppbnRlcnByZXRLZXlF
dmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgYm9vbCBpc0NoYXJFdmVu
dCkKLXsKLSAgICByZXR1cm4gW21fY29udGVudFZpZXcgX2ludGVycHJldEtleUV2ZW50OmV2ZW50
Lm5hdGl2ZUV2ZW50KCkgaXNDaGFyRXZlbnQ6aXNDaGFyRXZlbnRdOwotfQotCi12b2lkIFBhZ2VD
bGllbnRJbXBsOjpwb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlKGNvbnN0IEludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uJiBpbmZvKQotewotICAgIFttX2NvbnRlbnRWaWV3IF9wb3Np
dGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOmluZm9dOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpzYXZlSW1hZ2VUb0xpYnJhcnkoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGltYWdlQnVmZmVy
KQotewotICAgIFJldGFpblB0cjxOU0RhdGE+IGltYWdlRGF0YSA9IGltYWdlQnVmZmVyLT5jcmVh
dGVOU0RhdGEoKTsKLSAgICBVSUltYWdlRGF0YVdyaXRlVG9TYXZlZFBob3Rvc0FsYnVtKGltYWdl
RGF0YS5nZXQoKSwgbmlsLCBOVUxMLCBOVUxMKTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6
ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6c2V0RHJhZ0ltYWdlKGNvbnN0IEludFBvaW50JiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRt
YXA+LCBib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVu
dEltcGw6OnNlbGVjdGlvbkRpZENoYW5nZSgpCi17Ci0gICAgW21fY29udGVudFZpZXcgX3NlbGVj
dGlvbkNoYW5nZWRdOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVTZWN1cmVJbnB1
dFN0YXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJ
bXBsOjpyZXNldFNlY3VyZUlucHV0U3RhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6Om5vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVk
Q29tcG9zaXRpb24oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGFnZUNs
aWVudEltcGw6Om1ha2VGaXJzdFJlc3BvbmRlcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
RmxvYXRSZWN0KCk7Ci19Ci0KLUZsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvVXNl
clNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLX0KLQotSW50UG9pbnQgUGFnZUNsaWVudEltcGw6OnNj
cmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KQotewotICAgIHJldHVybiBJbnRQ
b2ludChbbV9jb250ZW50VmlldyBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXSk7Ci19
Ci0KLUludFJlY3QgUGFnZUNsaWVudEltcGw6OnJvb3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbbV9jb250ZW50VmlldyBj
b252ZXJ0UmVjdDpyZWN0IHRvVmlldzpuaWxdKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLXZv
aWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3Vj
aEV2ZW50JiBuYXRpdmVXZWJ0b3VjaEV2ZW50LCBib29sIGV2ZW50SGFuZGxlZCkKLXsKLSAgICBb
bV9jb250ZW50VmlldyBfd2ViVG91Y2hFdmVudDpuYXRpdmVXZWJ0b3VjaEV2ZW50IHByZXZlbnRz
TmF0aXZlR2VzdHVyZXM6ZXZlbnRIYW5kbGVkXTsKLX0KLSNlbmRpZgotCi1QYXNzUmVmUHRyPFdl
YlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2Vi
UGFnZVByb3h5KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1QYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVD
b250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RmluZEluZGljYXRv
cihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sLCBib29sKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKLXsK
LX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjp1
cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikK
LXsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jv
b3RMYXllcihDQUxheWVyICpyb290TGF5ZXIpCi17Ci0gICAgW21fY29udGVudFZpZXcgX3NldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXI6cm9vdExheWVyXTsKLX0KLQotQ0FMYXllciAq
UGFnZUNsaWVudEltcGw6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFp
blB0cjxDR0ltYWdlUmVmPiBQYWdlQ2xpZW50SW1wbDo6dGFrZVZpZXdTbmFwc2hvdCgpCi17Ci0g
ICAgcmV0dXJuIFttX2NvbnRlbnRWaWV3IF90YWtlVmlld1NuYXBzaG90XTsKLX0KLQotdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6d2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoY29uc3QgTmF0
aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJDdXN0b21Td2lwZVZpZXdzKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRHZXRUYXBIaWdobGln
aHRHZW9tZXRyaWVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNv
bG9yLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRRdWFkPiYgaGlnaGxpZ2h0ZWRRdWFkcywg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGJvdHRvbUxlZnRS
YWRpdXMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQotewotICAg
IFttX2NvbnRlbnRWaWV3IF9kaWRHZXRUYXBIaWdobGlnaHRGb3JSZXF1ZXN0OnJlcXVlc3RJRCBj
b2xvcjpjb2xvciBxdWFkczpoaWdobGlnaHRlZFF1YWRzIHRvcExlZnRSYWRpdXM6dG9wTGVmdFJh
ZGl1cyB0b3BSaWdodFJhZGl1czp0b3BSaWdodFJhZGl1cyBib3R0b21MZWZ0UmFkaXVzOmJvdHRv
bUxlZnRSYWRpdXMgYm90dG9tUmlnaHRSYWRpdXM6Ym90dG9tUmlnaHRSYWRpdXNdOwotfQotCi12
b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDb21taXRMYXllclRyZWUoY29uc3QgUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24mIGxheWVyVHJlZVRyYW5zYWN0aW9uKQotewotICAgIFttX2NvbnRlbnRW
aWV3IF9kaWRDb21taXRMYXllclRyZWU6bGF5ZXJUcmVlVHJhbnNhY3Rpb25dOwotfQotCi12b2lk
IFBhZ2VDbGllbnRJbXBsOjpzdGFydEFzc2lzdGluZ05vZGUoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIGJvb2wsIGJvb2wpCi17Ci0gICAgW21fY29udGVudFZpZXcgX3N0YXJ0QXNzaXN0aW5nTm9k
ZV07Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnN0b3BBc3Npc3RpbmdOb2RlKCkKLXsKLSAg
ICBbbV9jb250ZW50VmlldyBfc3RvcEFzc2lzdGluZ05vZGVdOwotfQotCi12b2lkIFBhZ2VDbGll
bnRJbXBsOjpkaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaCh1aW50MzJfdCB0b3VjaCwg
dWludDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJlc2hvbGQsIGZsb2F0IHNocmlua1RocmVzaG9s
ZCkKLXsKLSAgICBbbV9jb250ZW50VmlldyBfZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91
Y2g6KFdLU2VsZWN0aW9uVG91Y2gpdG91Y2ggd2l0aEZsYWdzOihXS1NlbGVjdGlvbkZsYWdzKWZs
YWdzIGdyb3dUaHJlc2hvbGQ6Z3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6c2hyaW5rVGhy
ZXNob2xkXTsKLX0KLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLQotV2ViRnVsbFNjcmVl
bk1hbmFnZXJQcm94eUNsaWVudCYgUGFnZUNsaWVudEltcGw6OmZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHlDbGllbnQoKQotewotICAgIHJldHVybiAqdGhpczsKLX0KLQotLy8gV2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eUNsaWVudAotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpjbG9zZUZ1bGxTY3JlZW5N
YW5hZ2VyKCkKLXsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNGdWxsU2NyZWVuKCkKLXsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmVudGVyRnVsbFNj
cmVlbigpCi17Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmV4aXRGdWxsU2NyZWVuKCkKLXsK
LX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6YmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFJlY3QmKQotewotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpiZWdh
bkV4aXRGdWxsU2NyZWVuKGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JikKLXsKLX0KLQot
I2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNo
ZWV0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNoZWV0LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5Zjc0MWY4ODFkZDNhNWUxNWVlMGRhMGFj
M2E3MjlkOWNhNzMwZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tBY3Rpb25TaGVldC5oCisr
KyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPFVJS2l0
L1VJQWN0aW9uU2hlZXQuaD4KLSNpbXBvcnQgPFVJS2l0L1VJUG9wb3ZlckNvbnRyb2xsZXIuaD4K
LSNpbXBvcnQgPFdlYktpdDIvV0tEZWNsYXJhdGlvblNwZWNpZmllcnMuaD4KLQotQHByb3RvY29s
IFdLQWN0aW9uU2hlZXREZWxlZ2F0ZTsKLUBjbGFzcyBXS0ludGVyYWN0aW9uVmlldzsKLQotQGlu
dGVyZmFjZSBXS0FjdGlvblNoZWV0IDogVUlBY3Rpb25TaGVldAotCi1AcHJvcGVydHkgKG5vbmF0
b21pYywgYXNzaWduKSBpZCA8V0tBY3Rpb25TaGVldERlbGVnYXRlPiBzaGVldERlbGVnYXRlOwot
QHByb3BlcnR5IChub25hdG9taWMpIFVJUG9wb3ZlckFycm93RGlyZWN0aW9uIGFycm93RGlyZWN0
aW9uczsKLS0gKGlkKWluaXRXaXRoVmlldzooV0tJbnRlcmFjdGlvblZpZXcgKil2aWV3OwotLSAo
dm9pZClkb25lV2l0aFNoZWV0OwotLSAoQk9PTClwcmVzZW50U2hlZXQ7Ci0tIChCT09MKXByZXNl
bnRTaGVldEZyb21SZWN0OihDR1JlY3QpcHJlc2VudGF0aW9uUmVjdDsKLS0gKHZvaWQpdXBkYXRl
U2hlZXRQb3NpdGlvbjsKLUBlbmQKLQotCi1AcHJvdG9jb2wgV0tBY3Rpb25TaGVldERlbGVnYXRl
PFVJQWN0aW9uU2hlZXREZWxlZ2F0ZT4KLUByZXF1aXJlZAotLSAoVUlWaWV3ICopaG9zdFZpZXdG
b3JTaGVldDsKLS0gKENHUmVjdClpbml0aWFsUHJlc2VudGF0aW9uUmVjdEluSG9zdFZpZXdGb3JT
aGVldDsKLS0gKENHUmVjdClwcmVzZW50YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0OwotQGVu
ZAotCi0vLyBFbGVtZW50cyB0byBkZXNjcmliZSBhY3Rpb24gc2hlZXQgY29udGVudC4KLQotV0tf
RVhQT1JUIEBpbnRlcmZhY2UgV0tFbGVtZW50QWN0aW9uSW5mbyA6IE5TT2JqZWN0Ci0KLS0gKFdL
RWxlbWVudEFjdGlvbkluZm8gKilpbml0V2l0aEluZm86KE5TVVJMICopdXJsIGxvY2F0aW9uOihD
R1BvaW50KWxvY2F0aW9uIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHJlY3Q6KENHUmVjdClyZWN0
OwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1BvaW50IGludGVyYWN0aW9uTG9j
YXRpb247Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVVJMICp1cmw7Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICp0aXRsZTsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IGJvdW5kaW5nUmVjdDsKLUBlbmQKLQotdHlwZWRl
ZiB2b2lkICheV0tFbGVtZW50QWN0aW9uSGFuZGxlcikoV0tFbGVtZW50QWN0aW9uSW5mbyAqKTsK
LXR5cGVkZWYgdm9pZCAoXldLRWxlbWVudEFjdGlvbkhhbmRsZXJJbnRlcm5hbCkoV0tJbnRlcmFj
dGlvblZpZXcgKiwgV0tFbGVtZW50QWN0aW9uSW5mbyAqKTsKLQotdHlwZWRlZiBlbnVtIHsKLSAg
ICBXS0VsZW1lbnRBY3Rpb25UeXBlQ3VzdG9tID0gMCwKLSAgICBXS0VsZW1lbnRBY3Rpb25UeXBl
T3BlbiwKLSAgICBXS0VsZW1lbnRBY3Rpb25UeXBlQ29weSwKLSAgICBXS0VsZW1lbnRBY3Rpb25U
eXBlU2F2ZUltYWdlLAotICAgIFdLRWxlbWVudEFjdGlvblR5cGVBZGRUb1JlYWRpbmdMaXN0LAot
fSBXS0VsZW1lbnRBY3Rpb25UeXBlOwotCi1XS19FWFBPUlQgQGludGVyZmFjZSBXS0VsZW1lbnRB
Y3Rpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS0VsZW1l
bnRBY3Rpb25UeXBlIHR5cGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3Ry
aW5nKiB0aXRsZTsKLQotKyAoV0tFbGVtZW50QWN0aW9uICopY3VzdG9tRWxlbWVudEFjdGlvbldp
dGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSBhY3Rpb25IYW5kbGVyOihXS0VsZW1lbnRBY3Rpb25I
YW5kbGVyKWhhbmRsZXI7Ci0rIChXS0VsZW1lbnRBY3Rpb24gKilzdGFuZGFyZEVsZW1lbnRBY3Rp
b25XaXRoVHlwZTooV0tFbGVtZW50QWN0aW9uVHlwZSl0eXBlOwotKyAoV0tFbGVtZW50QWN0aW9u
ICopc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6KFdLRWxlbWVudEFjdGlvblR5cGUpdHlw
ZSBjdXN0b21UaXRsZTooTlNTdHJpbmcgKil0aXRsZTsKLS0gKHZvaWQpcnVuQWN0aW9uV2l0aEVs
ZW1lbnRJbmZvOihXS0VsZW1lbnRBY3Rpb25JbmZvICopaW5mbyB2aWV3OihXS0ludGVyYWN0aW9u
VmlldyAqKXZpZXc7Ci0KLUBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvaW9zL1dLQWN0aW9uU2hlZXQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2lvcy9XS0FjdGlvblNoZWV0Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2E2
MjUyZTNiMjc5OWIwYTNhMWY4MjllODA1Yzg2YWI1NDkzOTAzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
aW9zL1dLQWN0aW9uU2hlZXQubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyOTggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tBY3Rpb25TaGVldC5oIgot
Ci0jaW1wb3J0ICJXS0dlc3R1cmVUeXBlcy5oIgotI2ltcG9ydCAiV0tJbnRlcmFjdGlvblZpZXcu
aCIKLSNpbXBvcnQgPFNhZmFyaVNlcnZpY2VzL1NTUmVhZGluZ0xpc3QuaD4KLSNpbXBvcnQgPFVJ
S2l0L1VJQWN0aW9uU2hlZXRfUHJpdmF0ZS5oPgotI2ltcG9ydCA8VUlLaXQvVUlWaWV3Lmg+Ci0j
aW1wb3J0IDxVSUtpdC9VSVdpbmRvd19Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0xvY2Fs
aXplZFN0cmluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KLSNpbXBvcnQg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1TT0ZU
X0xJTktfRlJBTUVXT1JLKFNhZmFyaVNlcnZpY2VzKTsKLVNPRlRfTElOS19DTEFTUyhTYWZhcmlT
ZXJ2aWNlcywgU1NSZWFkaW5nTGlzdCk7Ci0KLUBpbnRlcmZhY2UgV0tFbGVtZW50QWN0aW9uKFBy
aXZhdGUpCi0tICh2b2lkKV9ydW5BY3Rpb25XaXRoRWxlbWVudDooTlNVUkwgKil0YXJnZXRVUkwg
ZG9jdW1lbnRWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcgaW50ZXJhY3Rpb25Mb2NhdGlv
bjooQ0dQb2ludClpbnRlcmFjdGlvbkxvY2F0aW9uOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
V0tBY3Rpb25TaGVldCB7Ci0gICAgaWQ8V0tBY3Rpb25TaGVldERlbGVnYXRlPiBfc2hlZXREZWxl
Z2F0ZTsKLSAgICBpZDxVSUFjdGlvblNoZWV0RGVsZWdhdGU+IF9kZWxlZ2F0ZVdoaWxlUm90YXRp
bmc7Ci0gICAgV0tJbnRlcmFjdGlvblZpZXcgKl92aWV3OwotICAgIFVJUG9wb3ZlckFycm93RGly
ZWN0aW9uIF9hcnJvd0RpcmVjdGlvbnM7Ci0gICAgQk9PTCBfaXNSb3RhdGluZzsKLX0KLQotLSAo
aWQpaW5pdFdpdGhWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcKLXsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IF9hcnJvd0RpcmVjdGlvbnMgPSBVSVBvcG92ZXJBcnJvd0RpcmVjdGlvbkFueTsKLSAgICBfdmll
dyA9IHZpZXc7Ci0KLSAgICBpZiAoVUlfVVNFUl9JTlRFUkZBQ0VfSURJT00oKSAhPSBVSVVzZXJJ
bnRlcmZhY2VJZGlvbVBob25lKSB7Ci0gICAgICAgIC8vIE9ubHkgaVBhZHMgc3VwcG9ydCBwb3Bv
dmVycyB0aGF0IHJvdGF0ZS4gVUlBY3Rpb25TaGVldHMgYWN0dWFsbHkgYmxvY2sgcm90YXRpb24g
b24gaVBob25lL2lQb2QgVG91Y2gKLSAgICAgICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKmNlbnRl
ciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKLSAgICAgICAgW2NlbnRl
ciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aWxsUm90YXRlKSBuYW1lOlVJ
V2luZG93V2lsbFJvdGF0ZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICAgICAgW2NlbnRl
ciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihkaWRSb3RhdGUpIG5hbWU6VUlX
aW5kb3dEaWRSb3RhdGVOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgfQotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07Ci0gICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsKLQotICAgIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gU2hlZXQgcHJlc2VudGF0aW9uIGNv
ZGUKLQotLSAoQk9PTClwcmVzZW50U2hlZXQKLXsKLSAgICAvLyBDYWxjdWxhdGUgdGhlIHByZXNl
bnRhdGlvbiByZWN0IGp1c3QgYmVmb3JlIHNob3dpbmcuCi0gICAgQ0dSZWN0IHByZXNlbnRhdGlv
blJlY3QgPSBDR1JlY3RaZXJvOwotICAgIGlmIChVSV9VU0VSX0lOVEVSRkFDRV9JRElPTSgpICE9
IFVJVXNlckludGVyZmFjZUlkaW9tUGhvbmUpIHsKLSAgICAgICAgcHJlc2VudGF0aW9uUmVjdCA9
IFtfc2hlZXREZWxlZ2F0ZSBpbml0aWFsUHJlc2VudGF0aW9uUmVjdEluSG9zdFZpZXdGb3JTaGVl
dF07Ci0gICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KHByZXNlbnRhdGlvblJlY3QpKQotICAgICAg
ICAgICAgcmV0dXJuIE5POwotICAgIH0KLQotICAgIHJldHVybiBbc2VsZiBwcmVzZW50U2hlZXRG
cm9tUmVjdDpwcmVzZW50YXRpb25SZWN0XTsKLX0KLQotLSAoQk9PTClwcmVzZW50U2hlZXRGcm9t
UmVjdDooQ0dSZWN0KXByZXNlbnRhdGlvblJlY3QKLXsKLSAgICBVSVZpZXcgKnZpZXcgPSBbX3No
ZWV0RGVsZWdhdGUgaG9zdFZpZXdGb3JTaGVldF07Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICBy
ZXR1cm4gTk87Ci0KLSAgICBpZiAoVUlfVVNFUl9JTlRFUkZBQ0VfSURJT00oKSAhPSBVSVVzZXJJ
bnRlcmZhY2VJZGlvbVBob25lKSB7Ci0gICAgICAgIFtzZWxmIHByZXNlbnRGcm9tUmVjdDpwcmVz
ZW50YXRpb25SZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgIGluVmlldzp2aWV3Ci0gICAgICAg
ICAgICAgICAgICAgIGRpcmVjdGlvbjpfYXJyb3dEaXJlY3Rpb25zCi0gICAgYWxsb3dJbnRlcmFj
dGlvbldpdGhWaWV3czpuaWwKLSAgICAgICAgICAgICAgYmFja2dyb3VuZFN0eWxlOlVJUG9wb3Zl
ckJhY2tncm91bmRTdHlsZURlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOllF
U107Ci0gICAgfSBlbHNlCi0gICAgICAgIFtzZWxmIHNob3dJblZpZXc6dmlld107IAotCi0gICAg
cmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZClkb25lV2l0aFNoZWV0Ci17Ci0gICAgX2RlbGVnYXRl
V2hpbGVSb3RhdGluZyA9IG5pbDsKLQotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZv
cm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoZGlkUm90YXRlKSBv
YmplY3Q6bmlsXTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gUm90YXRpb24gaGFuZGxpbmcgY29kZQot
Ci0tICh2b2lkKXdpbGxSb3RhdGUKLXsKLSAgICBBU1NFUlQoVUlfVVNFUl9JTlRFUkZBQ0VfSURJ
T00oKSAhPSBVSVVzZXJJbnRlcmZhY2VJZGlvbVBob25lKTsKLQotICAgIGlmIChfaXNSb3RhdGlu
ZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2xlYXIgdGhlIGRlbGVnYXRlIHNvIHRoYXQg
dGhlIG1ldGhvZDoKLSAgICAvLyAtICh2b2lkKWFjdGlvblNoZWV0OihVSUFjdGlvblNoZWV0ICop
YWN0aW9uU2hlZXQgZGlkRGlzbWlzc1dpdGhCdXR0b25JbmRleDooTlNJbnRlZ2VyKWJ1dHRvbklu
ZGV4Ci0gICAgLy8gaXMgbm90IGNhbGxlZCB3aGVuIHRoZSBBY3Rpb25TaGVldCBpcyBkaXNtaXNz
ZWQgYmVsb3cuIERlbGVnYXRlIGlzIHJlLWluc3RhdGVkIGFmdGVyIHJvdGF0aW9uLgotICAgIF9k
ZWxlZ2F0ZVdoaWxlUm90YXRpbmcgPSBbc2VsZiBkZWxlZ2F0ZV07Ci0gICAgc2VsZi5kZWxlZ2F0
ZSA9IG5pbDsKLSAgICBfaXNSb3RhdGluZyA9IFlFUzsKLQotICAgIFtzZWxmIGRpc21pc3NXaXRo
Q2xpY2tlZEJ1dHRvbkluZGV4OltzZWxmIGNhbmNlbEJ1dHRvbkluZGV4XSBhbmltYXRlZDpOT107
Ci19Ci0KLS0gKHZvaWQpdXBkYXRlU2hlZXRQb3NpdGlvbgotewotICAgIEFTU0VSVChVSV9VU0VS
X0lOVEVSRkFDRV9JRElPTSgpICE9IFVJVXNlckludGVyZmFjZUlkaW9tUGhvbmUpOwotCi0gICAg
aWYgKCFfaXNSb3RhdGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2lzUm90YXRpbmcgPSBO
TzsKLSAgICAKLSAgICBDR1JlY3QgcHJlc2VudGF0aW9uUmVjdCA9IFtfc2hlZXREZWxlZ2F0ZSBw
cmVzZW50YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0XTsKLSAgICBpZiAoIUNHUmVjdElzRW1w
dHkocHJlc2VudGF0aW9uUmVjdCkpIHsKLSAgICAgICAgLy8gUmUtcHJlc2VudCB0aGUgcG9wb3Zl
ciBvbmx5IGlmIHdlIGFyZSBzdGlsbCBwb2ludGluZyB0byBjb250ZW50IG9uc2NyZWVuLgotICAg
ICAgICBDR1JlY3QgaW50ZXJzZWN0aW9uID0gQ0dSZWN0SW50ZXJzZWN0aW9uKFtbX3NoZWV0RGVs
ZWdhdGUgaG9zdFZpZXdGb3JTaGVldF0gYm91bmRzXSwgcHJlc2VudGF0aW9uUmVjdCk7Ci0gICAg
ICAgIGlmICghQ0dSZWN0SXNFbXB0eShpbnRlcnNlY3Rpb24pKSB7Ci0gICAgICAgICAgICBzZWxm
LmRlbGVnYXRlID0gX2RlbGVnYXRlV2hpbGVSb3RhdGluZzsKLSAgICAgICAgICAgIFtzZWxmIHBy
ZXNlbnRTaGVldEZyb21SZWN0OmludGVyc2VjdGlvbl07Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gQ2FuY2VsIHRoZSBzaGVldCBhcyB0aGVyZSBp
cyBlaXRoZXIgbm8gdmlldyBvciB0aGUgY29udGVudCBoYXMgbm93IG1vdmVkIG9mZiBzY3JlZW4u
Ci0gICAgW19kZWxlZ2F0ZVdoaWxlUm90YXRpbmcgYWN0aW9uU2hlZXQ6c2VsZiBjbGlja2VkQnV0
dG9uQXRJbmRleDpbc2VsZiBjYW5jZWxCdXR0b25JbmRleF1dOwotfQotCi0tICh2b2lkKWRpZFJv
dGF0ZQotewotICAgIEFTU0VSVChVSV9VU0VSX0lOVEVSRkFDRV9JRElPTSgpICE9IFVJVXNlcklu
dGVyZmFjZUlkaW9tUGhvbmUpOwotCi0gICAgW192aWV3IF91cGRhdGVQb3NpdGlvbkluZm9ybWF0
aW9uXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tFbGVtZW50QWN0aW9uSW5mbyAg
ewotICAgIENHUG9pbnQgX2ludGVyYWN0aW9uTG9jYXRpb247Ci0gICAgTlNVUkwgKl91cmw7Ci0g
ICAgTlNTdHJpbmcgKl90aXRsZTsKLSAgICBDR1JlY3QgX2JvdW5kaW5nUmVjdDsKLSAgICBDR0lt
YWdlUmVmIF9zbmFwc2hvdDsKLX0KLQotLSAoV0tFbGVtZW50QWN0aW9uSW5mbyAqKSBpbml0V2l0
aEluZm86KE5TVVJMICopdXJsIGxvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uIHRpdGxlOihOU1N0
cmluZyAqKXRpdGxlIHJlY3Q6KENHUmVjdClyZWN0Ci17Ci0gICAgX3VybCA9IFt1cmwgY29weV07
Ci0gICAgX2ludGVyYWN0aW9uTG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgICBfdGl0bGUgPSBbdGl0
bGUgY29weV07Ci0gICAgX2JvdW5kaW5nUmVjdCA9IHJlY3Q7Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW190aXRsZSByZWxlYXNlXTsKLSAgICBbX3Vy
bCByZWxlYXNlXTsKLSAgICAKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFdLRWxlbWVudEFjdGlvbiAgewotICAgIE5TU3RyaW5nICpfdGl0bGU7Ci0g
ICAgV0tFbGVtZW50QWN0aW9uSGFuZGxlckludGVybmFsIF9hY3Rpb25IYW5kbGVyOwotICAgIFdL
RWxlbWVudEFjdGlvblR5cGUgX3R5cGU7Ci19Ci0KLS0gKGlkKWluaXRXaXRoVGl0bGU6KE5TU3Ry
aW5nICopdGl0bGUgYWN0aW9uSGFuZGxlcjooV0tFbGVtZW50QWN0aW9uSGFuZGxlckludGVybmFs
KWhhbmRsZXIgdHlwZTooV0tFbGVtZW50QWN0aW9uVHlwZSl0eXBlCi17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgX3RpdGxlID0gW3Rp
dGxlIGNvcHldOwotICAgIF90eXBlID0gdHlwZTsKLSAgICBfYWN0aW9uSGFuZGxlciA9IEJsb2Nr
X2NvcHkoaGFuZGxlcik7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwot
ewotICAgIFtfdGl0bGUgcmVsZWFzZV07Ci0gICAgW19hY3Rpb25IYW5kbGVyIHJlbGVhc2VdOwot
ICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotKyAoV0tFbGVtZW50QWN0aW9uICopY3VzdG9tRWxl
bWVudEFjdGlvbldpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSBhY3Rpb25IYW5kbGVyOihXS0Vs
ZW1lbnRBY3Rpb25IYW5kbGVyKWhhbmRsZXIKLXsKLSAgICByZXR1cm4gW1tbc2VsZiBhbGxvY10g
aW5pdFdpdGhUaXRsZTp0aXRsZQotICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25IYW5k
bGVyOl4oV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcsIFdLRWxlbWVudEFjdGlvbkluZm8gKmFjdGlv
bkluZm8pIHsgaGFuZGxlcihhY3Rpb25JbmZvKTsgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlOldLRWxlbWVudEFjdGlvblR5cGVDdXN0b21dIGF1dG9yZWxlYXNlXTsK
LX0KLQotc3RhdGljIHZvaWQgY29weUVsZW1lbnQoV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcpCi17
Ci0gICAgW3ZpZXcgX3BlcmZvcm1BY3Rpb246V2ViS2l0OjpXS1NoZWV0QWN0aW9uQ29weV07Ci19
Ci0KLXN0YXRpYyB2b2lkIHNhdmVJbWFnZShXS0ludGVyYWN0aW9uVmlldyAqdmlldykKLXsKLSAg
ICBbdmlldyBfcGVyZm9ybUFjdGlvbjpXZWJLaXQ6OldLU2hlZXRBY3Rpb25TYXZlSW1hZ2VdOwot
fQotCi1zdGF0aWMgdm9pZCBhZGRUb1JlYWRpbmdMaXN0KE5TVVJMICp0YXJnZXRVUkwsIE5TU3Ry
aW5nICp0aXRsZSkKLXsKLSAgICBpZiAoIXRpdGxlIHx8IFt0aXRsZSBsZW5ndGhdID09IDApCi0g
ICAgICAgIHRpdGxlID0gW3RhcmdldFVSTCBhYnNvbHV0ZVN0cmluZ107Ci0KLSAgICBbW2dldFNT
UmVhZGluZ0xpc3RDbGFzcygpIGRlZmF1bHRSZWFkaW5nTGlzdF0gYWRkUmVhZGluZ0xpc3RJdGVt
V2l0aFVSTDp0YXJnZXRVUkwgdGl0bGU6dGl0bGUgcHJldmlld1RleHQ6bmlsIGVycm9yOm5pbF07
Ci19Ci0KLSsgKFdLRWxlbWVudEFjdGlvbiAqKXN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBl
OihXS0VsZW1lbnRBY3Rpb25UeXBlKXR5cGUgY3VzdG9tVGl0bGU6KE5TU3RyaW5nICopY3VzdG9t
VGl0bGUKLXsKLSAgICBOU1N0cmluZyAqdGl0bGU7Ci0gICAgV0tFbGVtZW50QWN0aW9uSGFuZGxl
ckludGVybmFsIGhhbmRsZXI7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBXS0VsZW1l
bnRBY3Rpb25UeXBlQ29weToKLSAgICAgICAgdGl0bGUgPSBXRUJfVUlfU1RSSU5HX0tFWSgiQ29w
eSIsICJDb3B5IEFjdGlvblNoZWV0IExpbmsiLCAiVGl0bGUgZm9yIENvcHkgTGluayBvciBJbWFn
ZSBhY3Rpb24gYnV0dG9uIik7Ci0gICAgICAgIGhhbmRsZXIgPSBeKFdLSW50ZXJhY3Rpb25WaWV3
ICp2aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICphY3Rpb25JbmZvKSB7Ci0gICAgICAgICAgICBj
b3B5RWxlbWVudCh2aWV3KTsKLSAgICAgICAgfTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
S0VsZW1lbnRBY3Rpb25UeXBlT3BlbjoKLSAgICAgICAgdGl0bGUgPSBXRUJfVUlfU1RSSU5HX0tF
WSgiT3BlbiIsICJPcGVuIEFjdGlvblNoZWV0IExpbmsiLCAiVGl0bGUgZm9yIE9wZW4gTGluayBh
Y3Rpb24gYnV0dG9uIik7Ci0gICAgICAgIGhhbmRsZXIgPSBeKFdLSW50ZXJhY3Rpb25WaWV3ICp2
aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICphY3Rpb25JbmZvKSB7Ci0gICAgICAgICAgICBbdmll
dyBfYXR0ZW1wdENsaWNrQXRMb2NhdGlvbjphY3Rpb25JbmZvLmludGVyYWN0aW9uTG9jYXRpb25d
OwotICAgICAgICB9OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdLRWxlbWVudEFjdGlvblR5
cGVTYXZlSW1hZ2U6Ci0gICAgICAgIHRpdGxlID0gV0VCX1VJX1NUUklOR19LRVkoIlNhdmUgSW1h
Z2UiLCAiU2F2ZSBJbWFnZSIsICJUaXRsZSBmb3IgU2F2ZSBJbWFnZSBhY3Rpb24gYnV0dG9uIik7
Ci0gICAgICAgIGhhbmRsZXIgPSBeKFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3LCBXS0VsZW1lbnRB
Y3Rpb25JbmZvICphY3Rpb25JbmZvKSB7Ci0gICAgICAgICAgICBzYXZlSW1hZ2Uodmlldyk7Ci0g
ICAgICAgIH07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0tFbGVtZW50QWN0aW9uVHlwZUFk
ZFRvUmVhZGluZ0xpc3Q6Ci0gICAgICAgIHRpdGxlID0gV0VCX1VJX1NUUklORygiQWRkIHRvIFJl
YWRpbmcgTGlzdCIsICJUaXRsZSBmb3IgQWRkIHRvIFJlYWRpbmcgTGlzdCBhY3Rpb24gYnV0dG9u
Iik7Ci0gICAgICAgIGhhbmRsZXIgPSBeKFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3LCBXS0VsZW1l
bnRBY3Rpb25JbmZvICphY3Rpb25JbmZvKSB7Ci0gICAgICAgICAgICBhZGRUb1JlYWRpbmdMaXN0
KGFjdGlvbkluZm8udXJsLCBhY3Rpb25JbmZvLnRpdGxlKTsKLSAgICAgICAgfTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxp
ZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIlRoZXJlIGlzIG5vIHN0YW5kYXJkIHdlYiBlbGVt
ZW50IGFjdGlvbiBvZiB0eXBlICVkLiIsIHR5cGVdOwotICAgICAgICByZXR1cm4gbmlsOwotICAg
IH0KLSAgICByZXR1cm4gW1tbV0tFbGVtZW50QWN0aW9uIGFsbG9jXSBpbml0V2l0aFRpdGxlOihj
dXN0b21UaXRsZSA/IGN1c3RvbVRpdGxlIDogdGl0bGUpIGFjdGlvbkhhbmRsZXI6aGFuZGxlciB0
eXBlOnR5cGVdIGF1dG9yZWxlYXNlXTsKLX0KLQotKyAoV0tFbGVtZW50QWN0aW9uICopc3RhbmRh
cmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6KFdLRWxlbWVudEFjdGlvblR5cGUpdHlwZQotewotICAg
IHJldHVybiBbc2VsZiBzdGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTp0eXBlIGN1c3RvbVRp
dGxlOm5pbF07Ci19Ci0KLS0gKHZvaWQpcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOihXS0VsZW1l
bnRBY3Rpb25JbmZvICopaW5mbyB2aWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcKLXsKLSAg
ICBfYWN0aW9uSGFuZGxlcih2aWV3LCBpbmZvKTsKLX0KLUBlbmQKLQotCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNjcxMTBmN2VjYzZhNWYxYThiMjgz
NjNiNjU5NDkwNWM3NzIzMGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tBY3Rpb25TaGVldEFz
c2lzdGFudC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bXBvcnQgIldLQWN0aW9uU2hlZXQuaCIKLQotI2ltcG9ydCA8VUlLaXQvVUlBY3Rpb25TaGVldC5o
PgotI2ltcG9ydCA8VUlLaXQvVUlQb3BvdmVyQ29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViS2l0
Mi9XS0RlY2xhcmF0aW9uU3BlY2lmaWVycy5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgot
Ci1AcHJvdG9jb2wgV0tBY3Rpb25TaGVldERlbGVnYXRlOwotQGNsYXNzIFdLSW50ZXJhY3Rpb25W
aWV3OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlBhZ2VQcm94eTsKLX0KLQotQGlu
dGVyZmFjZSBXS0FjdGlvblNoZWV0QXNzaXN0YW50IDogTlNPYmplY3QgPFdLQWN0aW9uU2hlZXRE
ZWxlZ2F0ZT4KLQotLSAoaWQpaW5pdFdpdGhWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXc7
Ci0tICh2b2lkKXNldFBhZ2U6KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KXBhZ2U7
Ci0tICh2b2lkKXNob3dMaW5rU2hlZXQ7Ci0tICh2b2lkKXNob3dJbWFnZVNoZWV0OwotLSAodm9p
ZClzaG93RGF0YURldGVjdG9yc1NoZWV0OwotLSAodm9pZCljbGVhbnVwU2hlZXQ7Ci0tICh2b2lk
KXVwZGF0ZVNoZWV0UG9zaXRpb247Ci1AZW5kCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjhiMzQ1NWI0NWE4MDNiYjQ4NjliYTlhZjdlZDkxNWNl
ZGY1MDAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0K
KysrIC9kZXYvbnVsbApAQCAtMSwzNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oIgotCi0jaW1wb3J0ICJX
S0FjdGlvblNoZWV0LmgiCi0jaW1wb3J0ICJXS0ludGVyYWN0aW9uVmlldy5oIgotI2ltcG9ydCAi
V2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0IDxUQ0MvVENDLmg+Ci0jaW1wb3J0IDxEYXRhRGV0ZWN0
b3JzVUkvREREZXRlY3Rpb25Db250cm9sbGVyLmg+Ci0jaW1wb3J0IDxTYWZhcmlTZXJ2aWNlcy9T
U1JlYWRpbmdMaXN0Lmg+Ci0jaW1wb3J0IDxVSUtpdC9VSUFjdGlvblNoZWV0X1ByaXZhdGUuaD4K
LSNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgotI2ltcG9ydCA8VUlLaXQvVUlWaWV3Q29udHJvbGxl
cl9Qcml2YXRlLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSVdpbmRvd19Qcml2YXRlLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtp
bmcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU5TVVJMRXh0cmFzLmg+Ci0jaW1wb3J0IDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotU09GVF9MSU5LX0ZSQU1FV09SSyhTYWZhcmlTZXJ2aWNl
cykKLVNPRlRfTElOS19DTEFTUyhTYWZhcmlTZXJ2aWNlcywgU1NSZWFkaW5nTGlzdCkKLQotU09G
VF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFRDQykKLVNPRlRfTElOSyhUQ0MsIFRDQ0FjY2Vzc1By
ZWZsaWdodCwgVENDQWNjZXNzUHJlZmxpZ2h0UmVzdWx0LCAoQ0ZTdHJpbmdSZWYgc2VydmljZSwg
Q0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpLCAoc2VydmljZSwgb3B0aW9ucykpCi1TT0ZUX0xJTktf
Q09OU1RBTlQoVENDLCBrVENDU2VydmljZVBob3RvcywgQ0ZTdHJpbmdSZWYpCi0KLVNPRlRfTElO
S19QUklWQVRFX0ZSQU1FV09SSyhEYXRhRGV0ZWN0b3JzVUkpCi1TT0ZUX0xJTktfQ0xBU1MoRGF0
YURldGVjdG9yc1VJLCBERERldGVjdGlvbkNvbnRyb2xsZXIpCi0KLUBpbnRlcmZhY2UgV0tFbGVt
ZW50QWN0aW9uKFByaXZhdGUpCi0tICh2b2lkKV9ydW5BY3Rpb25XaXRoRWxlbWVudDooTlNVUkwg
Kil0YXJnZXRVUkwgZG9jdW1lbnRWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcgaW50ZXJh
Y3Rpb25Mb2NhdGlvbjooQ0dQb2ludClpbnRlcmFjdGlvbkxvY2F0aW9uOwotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gV0tBY3Rpb25TaGVldEFzc2lzdGFudCB7Ci0gICAgUmV0YWluUHRyPFdLQWN0
aW9uU2hlZXQ+IF9pbnRlcmFjdGlvblNoZWV0OwotICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQ
cm94eT4gX3BhZ2U7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IF9lbGVtZW50QWN0aW9uczsKLSAg
ICBXS0ludGVyYWN0aW9uVmlldyAqX3ZpZXc7Ci19Ci0KLS0gKGlkKWluaXRXaXRoVmlldzooV0tJ
bnRlcmFjdGlvblZpZXcgKil2aWV3Ci17Ci0gICAgX3ZpZXcgPSB2aWV3OwotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc2VsZiBjbGVhbnVwU2hlZXRdOwot
ICAgIF9wYWdlID0gbnVsbHB0cjsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQp
c2V0UGFnZTooUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4pcGFnZQotewotICAgIF9w
YWdlID0gcGFnZTsKLX0KLQotLSAoVUlWaWV3ICopc3VwZXJ2aWV3Rm9yU2hlZXQKLXsKLSAgICBV
SVZpZXcgKnZpZXcgPSBbX3ZpZXcgd2luZG93XTsKLQotICAgIC8vIEZJWE1FOiBXZWJLaXQgaGFz
IGEgZGVsZWdhdGUgdG8gcmV0cmlldmUgdGhlIHN1cGVydmlldyBmb3IgdGhlIGltYWdlIHNoZWV0
IChzdXBlcnZpZXdGb3JJbWFnZVNoZWV0Rm9yV2ViVmlldykKLSAgICAvLyBEbyB3ZSBuZWVkIGl0
IGluIFdLMj8KLQotICAgIC8vIEZpbmQgdGhlIHRvcCBtb3N0IHZpZXcgd2l0aCBhIHZpZXcgY29u
dHJvbGxlcgotICAgIFVJVmlld0NvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBuaWw7Ci0gICAgVUlW
aWV3ICpjdXJyZW50VmlldyA9IF92aWV3OwotICAgIHdoaWxlIChjdXJyZW50VmlldykgewotICAg
ICAgICBVSVZpZXdDb250cm9sbGVyICphQ29udHJvbGxlciA9IFtVSVZpZXdDb250cm9sbGVyIHZp
ZXdDb250cm9sbGVyRm9yVmlldzpjdXJyZW50Vmlld107Ci0gICAgICAgIGlmIChhQ29udHJvbGxl
cikKLSAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBhQ29udHJvbGxlcjsKLQotICAgICAgICBjdXJy
ZW50VmlldyA9IFtjdXJyZW50VmlldyBzdXBlcnZpZXddOwotICAgIH0KLSAgICBpZiAoY29udHJv
bGxlcikKLSAgICAgICAgdmlldyA9IGNvbnRyb2xsZXIudmlldzsKLQotICAgIHJldHVybiB2aWV3
OwotfQotCi0tIChDR1JlY3QpX3ByZXNlbnRhdGlvblJlY3RGb3JTaGVldEdpdmVuUG9pbnQ6KENH
UG9pbnQpcG9pbnQgaW5Ib3N0VmlldzooVUlWaWV3ICopaG9zdFZpZXcKLXsKLSAgICBDR1BvaW50
IHByZXNlbnRhdGlvblBvaW50ID0gW2hvc3RWaWV3IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmll
dzpfdmlld107Ci0gICAgQ0dSZWN0IHByZXNlbnRhdGlvblJlY3QgPSBDR1JlY3RNYWtlKHByZXNl
bnRhdGlvblBvaW50LngsIHByZXNlbnRhdGlvblBvaW50LnksIDEuMCwgMS4wKTsKLQotICAgIHJl
dHVybiBDR1JlY3RJbnNldChwcmVzZW50YXRpb25SZWN0LCAtMjIuMCwgLTIyLjApOwotfQotCi0t
IChVSVZpZXcgKilob3N0Vmlld0ZvclNoZWV0Ci17Ci0gICAgcmV0dXJuIFtzZWxmIHN1cGVydmll
d0ZvclNoZWV0XTsKLX0KLQotLSAoQ0dSZWN0KWluaXRpYWxQcmVzZW50YXRpb25SZWN0SW5Ib3N0
Vmlld0ZvclNoZWV0Ci17Ci0gICAgVUlWaWV3ICp2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3Rm9yU2hl
ZXRdOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIENHUmVjdFplcm87Ci0KLSAgICBy
ZXR1cm4gW3NlbGYgX3ByZXNlbnRhdGlvblJlY3RGb3JTaGVldEdpdmVuUG9pbnQ6X3ZpZXcucG9z
aXRpb25JbmZvcm1hdGlvbi5wb2ludCBpbkhvc3RWaWV3OnZpZXddOwotCi19Ci0KLS0gKENHUmVj
dClwcmVzZW50YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0Ci17Ci0gICAgVUlWaWV3ICp2aWV3
ID0gW3NlbGYgc3VwZXJ2aWV3Rm9yU2hlZXRdOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0
dXJuIENHUmVjdFplcm87Ci0KLSAgICBDR1JlY3QgYm91bmRpbmdSZWN0ID0gX3ZpZXcucG9zaXRp
b25JbmZvcm1hdGlvbi5ib3VuZHM7Ci0gICAgQ0dQb2ludCBmcm9tUG9pbnQgPSBfdmlldy5wb3Np
dGlvbkluZm9ybWF0aW9uLnBvaW50OwotCi0gICAgLy8gRklYTUU6IFdlIG11c3QgYWRqdXN0IG91
ciBwcmVzZW50YXRpb24gcG9pbnQgdG8gdGFrZSBpbnRvIGFjY291bnQgYSBjaGFuZ2UgaW4gZG9j
dW1lbnQgc2NhbGUuCi0KLSAgICAvLyBUZXN0IHRvIHNlZSBpZiB3ZSBhcmUgc3RpbGwgd2l0aGlu
IHRoZSB0YXJnZXQgbm9kZSBhcyBpdCBtYXkgaGF2ZSBtb3ZlZCBhZnRlciByb3RhdGlvbi4KLSAg
ICBpZiAoIUNHUmVjdENvbnRhaW5zUG9pbnQoYm91bmRpbmdSZWN0LCBmcm9tUG9pbnQpKQotICAg
ICAgICBmcm9tUG9pbnQgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKGJvdW5kaW5nUmVjdCks
IENHUmVjdEdldE1pZFkoYm91bmRpbmdSZWN0KSk7Ci0KLSAgICByZXR1cm4gW3NlbGYgX3ByZXNl
bnRhdGlvblJlY3RGb3JTaGVldEdpdmVuUG9pbnQ6ZnJvbVBvaW50IGluSG9zdFZpZXc6dmlld107
Ci19Ci0KLS0gKEJPT0wpcHJlc2VudFNoZWV0Ci17Ci0gICAgLy8gQ2FsY3VsYXRlIHRoZSBwcmVz
ZW50YXRpb24gcmVjdCBqdXN0IGJlZm9yZSBzaG93aW5nLgotICAgIENHUmVjdCBwcmVzZW50YXRp
b25SZWN0ID0gQ0dSZWN0WmVybzsKLSAgICBpZiAoVUlfVVNFUl9JTlRFUkZBQ0VfSURJT00oKSAh
PSBVSVVzZXJJbnRlcmZhY2VJZGlvbVBob25lKSB7Ci0gICAgICAgIHByZXNlbnRhdGlvblJlY3Qg
PSBbc2VsZiBpbml0aWFsUHJlc2VudGF0aW9uUmVjdEluSG9zdFZpZXdGb3JTaGVldF07Ci0gICAg
ICAgIGlmIChDR1JlY3RJc0VtcHR5KHByZXNlbnRhdGlvblJlY3QpKQotICAgICAgICAgICAgcmV0
dXJuIE5POwotICAgIH0KLQotICAgIHJldHVybiBbX2ludGVyYWN0aW9uU2hlZXQgcHJlc2VudFNo
ZWV0RnJvbVJlY3Q6cHJlc2VudGF0aW9uUmVjdF07Ci19Ci0KLS0gKHZvaWQpYWN0aW9uU2hlZXQ6
KFVJQWN0aW9uU2hlZXQgKilhY3Rpb25TaGVldCBjbGlja2VkQnV0dG9uQXRJbmRleDooTlNJbnRl
Z2VyKWJ1dHRvbkluZGV4Ci17Ci0gICAgQVNTRVJUKGFjdGlvblNoZWV0ID09IF9pbnRlcmFjdGlv
blNoZWV0KTsKLSAgICBpZiAoYWN0aW9uU2hlZXQgIT0gX2ludGVyYWN0aW9uU2hlZXQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChfZWxlbWVudEFjdGlvbnMgJiYgYnV0dG9uSW5kZXggPCAo
TlNJbnRlZ2VyKVtfZWxlbWVudEFjdGlvbnMgY291bnRdKSB7Ci0gICAgICAgIFdLRWxlbWVudEFj
dGlvbkluZm8qIGFjdGlvbkluZm8gPSBbW1dLRWxlbWVudEFjdGlvbkluZm8gYWxsb2NdIGluaXRX
aXRoSW5mbzpbTlNVUkwgVVJMV2l0aFN0cmluZzpfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLnVy
bF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOl92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24u
cG9pbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOl92aWV3LnBvc2l0aW9uSW5mb3JtYXRp
b24udGl0bGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0Ol92aWV3LnBvc2l0aW9uSW5mb3Jt
YXRpb24uYm91bmRzXTsKLSAgICAgICAgW1tfZWxlbWVudEFjdGlvbnMgb2JqZWN0QXRJbmRleDpi
dXR0b25JbmRleF0gcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOmFjdGlvbkluZm8gdmlldzpfdmll
d107Ci0gICAgICAgIFthY3Rpb25JbmZvIHJlbGVhc2VdOwotICAgIH0KLQotICAgIFtzZWxmIGNs
ZWFudXBTaGVldF07Ci19Ci0KLS0gKHZvaWQpdXBkYXRlU2hlZXRQb3NpdGlvbgotewotICAgIFtf
aW50ZXJhY3Rpb25TaGVldCB1cGRhdGVTaGVldFBvc2l0aW9uXTsKLX0KLQotLSAodm9pZClfY3Jl
YXRlU2hlZXRXaXRoRWxlbWVudEFjdGlvbnM6KE5TQXJyYXkgKilhY3Rpb25zIHNob3dMaW5rVGl0
bGU6KEJPT0wpc2hvd0xpbmtUaXRsZQotewotICAgIEFTU0VSVCghX2ludGVyYWN0aW9uU2hlZXQp
OwotCi0gICAgTlNVUkwgKnRhcmdldFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOl92aWV3LnBv
c2l0aW9uSW5mb3JtYXRpb24udXJsXTsKLSAgICBOU1N0cmluZyAqdXJsU2NoZW1lID0gW3Rhcmdl
dFVSTCBzY2hlbWVdOwotICAgIEJPT0wgaXNKYXZhU2NyaXB0VVJMID0gW3VybFNjaGVtZSBsZW5n
dGhdICYmIFt1cmxTY2hlbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImphdmFzY3JpcHQiXSA9
PSBOU09yZGVyZWRTYW1lOwotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgaWYgSmF2YXNj
cmlwdCBpcyBlbmFibGVkIGluIHRoZSBwcmVmZXJlbmNlcy4KLQotICAgIF9pbnRlcmFjdGlvblNo
ZWV0ID0gYWRvcHROUyhbW1dLQWN0aW9uU2hlZXQgYWxsb2NdIGluaXRXaXRoVmlldzpfdmlld10p
OwotICAgIF9pbnRlcmFjdGlvblNoZWV0LmdldCgpLnNoZWV0RGVsZWdhdGUgPSBzZWxmOwotICAg
IF9pbnRlcmFjdGlvblNoZWV0LmdldCgpLmFjdGlvblNoZWV0U3R5bGUgPSBVSUFjdGlvblNoZWV0
U3R5bGVBdXRvbWF0aWM7Ci0gICAgX2ludGVyYWN0aW9uU2hlZXQuZ2V0KCkuZGVsZWdhdGUgPSBz
ZWxmOwotCi0gICAgTlNTdHJpbmcgKnRpdGxlU3RyaW5nID0gbmlsOwotICAgIEJPT0wgdGl0bGVJ
c1VSTCA9IE5POwotICAgIGlmIChzaG93TGlua1RpdGxlKSB7Ci0gICAgICAgIGlmIChpc0phdmFT
Y3JpcHRVUkwpCi0gICAgICAgICAgICB0aXRsZVN0cmluZyA9IFdFQl9VSV9TVFJJTkdfS0VZKCJK
YXZhU2NyaXB0IiwgIkphdmFTY3JpcHQgQWN0aW9uIFNoZWV0IFRpdGxlIiwgIlRpdGxlIGZvciBh
Y3Rpb24gc2hlZXQgZm9yIEphdmFTY3JpcHQgbGluayIpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIHRpdGxlU3RyaW5nID0gV2ViQ29yZTo6dXNlclZpc2libGVTdHJpbmcodGFyZ2V0VVJM
KTsKLSAgICAgICAgICAgIHRpdGxlSXNVUkwgPSBZRVM7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UK
LSAgICAgICAgdGl0bGVTdHJpbmcgPSBfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLnRpdGxlOwot
Ci0gICAgaWYgKFt0aXRsZVN0cmluZyBsZW5ndGhdKSB7Ci0gICAgICAgIFtfaW50ZXJhY3Rpb25T
aGVldCBzZXRUaXRsZTp0aXRsZVN0cmluZ107Ci0gICAgICAgIGlmICh0aXRsZUlzVVJMKSB7Ci0g
ICAgICAgICAgICBbW19pbnRlcmFjdGlvblNoZWV0IF90aXRsZUxhYmVsXSBzZXRMaW5lQnJlYWtN
b2RlOk5TTGluZUJyZWFrQnlUcnVuY2F0aW5nTWlkZGxlXTsKLSAgICAgICAgICAgIFtfaW50ZXJh
Y3Rpb25TaGVldCBzZXRUaXRsZU1heExpbmVDb3VudDoyXTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBbW19pbnRlcmFjdGlvblNoZWV0IF90aXRsZUxhYmVsXSBzZXRMaW5lQnJlYWtNb2Rl
Ok5TTGluZUJyZWFrQnlUcnVuY2F0aW5nVGFpbF07Ci0gICAgfQotCi0gICAgX2VsZW1lbnRBY3Rp
b25zID0gYWRvcHROUyhbYWN0aW9ucyBjb3B5XSk7Ci0gICAgZm9yIChXS0VsZW1lbnRBY3Rpb24g
KmFjdGlvbiBpbiBfZWxlbWVudEFjdGlvbnMuZ2V0KCkpCi0gICAgICAgIFtfaW50ZXJhY3Rpb25T
aGVldCBhZGRCdXR0b25XaXRoVGl0bGU6W2FjdGlvbiB0aXRsZV1dOwotCi0gICAgW19pbnRlcmFj
dGlvblNoZWV0IHNldENhbmNlbEJ1dHRvbkluZGV4OltfaW50ZXJhY3Rpb25TaGVldCBhZGRCdXR0
b25XaXRoVGl0bGU6V0VCX1VJX1NUUklOR19LRVkoIkNhbmNlbCIsICJDYW5jZWwgYnV0dG9uIGxh
YmVsIGluIGJ1dHRvbiBiYXIiLCAiVGl0bGUgZm9yIENhbmNlbCBidXR0b24gbGFiZWwgaW4gYnV0
dG9uIGJhciIpXV07Ci0gICAgX3BhZ2UtPnN0YXJ0SW50ZXJhY3Rpb25XaXRoRWxlbWVudEF0UG9z
aXRpb24oX3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi5wb2ludCk7Ci19Ci0KLS0gKHZvaWQpc2hv
d0ltYWdlU2hlZXQKLXsKLSAgICBBU1NFUlQoIV9pbnRlcmFjdGlvblNoZWV0KTsKLQotICAgIE5T
VVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpfdmlldy5wb3NpdGlvbkluZm9y
bWF0aW9uLnVybF07Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmFjdGlvbnMgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXldOwotICAgIGlmICghX3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi51cmwuaXNFbXB0
eSgpKQotICAgICAgICBbYWN0aW9ucyBhZGRPYmplY3Q6W1dLRWxlbWVudEFjdGlvbiBzdGFuZGFy
ZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTpXS0VsZW1lbnRBY3Rpb25UeXBlT3Blbl1dOwotICAgIGlm
IChbZ2V0U1NSZWFkaW5nTGlzdENsYXNzKCkgc3VwcG9ydHNVUkw6dGFyZ2V0VVJMXSkKLSAgICAg
ICAgW2FjdGlvbnMgYWRkT2JqZWN0OltXS0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVtZW50QWN0
aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0aW9uVHlwZUFkZFRvUmVhZGluZ0xpc3RdXTsKLSAgICBp
ZiAoVENDQWNjZXNzUHJlZmxpZ2h0KGdldGtUQ0NTZXJ2aWNlUGhvdG9zKCksIE5VTEwpICE9IGtU
Q0NBY2Nlc3NQcmVmbGlnaHREZW5pZWQpCi0gICAgICAgIFthY3Rpb25zIGFkZE9iamVjdDpbV0tF
bGVtZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBlOldLRWxlbWVudEFjdGlv
blR5cGVTYXZlSW1hZ2VdXTsKLSAgICBpZiAoIVtbdGFyZ2V0VVJMIHNjaGVtZV0gbGVuZ3RoXSB8
fCBbW3RhcmdldFVSTCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJqYXZhc2NyaXB0
Il0gIT0gTlNPcmRlcmVkU2FtZSkKLSAgICAgICAgW2FjdGlvbnMgYWRkT2JqZWN0OltXS0VsZW1l
bnRBY3Rpb24gc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0aW9uVHlw
ZUNvcHldXTsKLQotICAgIC8vIEZJWE1FOiBBZGQgY2FsbCB0byBkZWxlZ2F0ZSB0byBhZGQgY3Vz
dG9tIGFjdGlvbnMuCi0KLSAgICBbc2VsZiBfY3JlYXRlU2hlZXRXaXRoRWxlbWVudEFjdGlvbnM6
YWN0aW9ucyBzaG93TGlua1RpdGxlOllFU107Ci0gICAgaWYgKCFfaW50ZXJhY3Rpb25TaGVldCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFbX2ludGVyYWN0aW9uU2hlZXQgcHJlc2VudFNo
ZWV0XSkKLSAgICAgICAgW3NlbGYgYWN0aW9uU2hlZXQ6X2ludGVyYWN0aW9uU2hlZXQuZ2V0KCkg
Y2xpY2tlZEJ1dHRvbkF0SW5kZXg6W19pbnRlcmFjdGlvblNoZWV0IGNhbmNlbEJ1dHRvbkluZGV4
XV07Ci19Ci0KLS0gKHZvaWQpc2hvd0xpbmtTaGVldAotewotICAgIEFTU0VSVCghX2ludGVyYWN0
aW9uU2hlZXQpOwotICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpf
dmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLnVybF07Ci0gICAgaWYgKCF0YXJnZXRVUkwpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIE5TTXV0YWJsZUFycmF5ICphY3Rpb25zID0gW05TTXV0YWJsZUFy
cmF5IGFycmF5XTsKLSAgICBbYWN0aW9ucyBhZGRPYmplY3Q6W1dLRWxlbWVudEFjdGlvbiBzdGFu
ZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTpXS0VsZW1lbnRBY3Rpb25UeXBlT3Blbl1dOwotICAg
IGlmIChbZ2V0U1NSZWFkaW5nTGlzdENsYXNzKCkgc3VwcG9ydHNVUkw6dGFyZ2V0VVJMXSkKLSAg
ICAgICAgW2FjdGlvbnMgYWRkT2JqZWN0OltXS0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVtZW50
QWN0aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0aW9uVHlwZUFkZFRvUmVhZGluZ0xpc3RdXTsKLSAg
ICBpZiAoIVtbdGFyZ2V0VVJMIHNjaGVtZV0gbGVuZ3RoXSB8fCBbW3RhcmdldFVSTCBzY2hlbWVd
IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJqYXZhc2NyaXB0Il0gIT0gTlNPcmRlcmVkU2FtZSkK
LSAgICAgICAgW2FjdGlvbnMgYWRkT2JqZWN0OltXS0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVt
ZW50QWN0aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0aW9uVHlwZUNvcHldXTsKLQotICAgIC8vIEZJ
WE1FOiBBZGQgY2FsbCB0byBkZWxlZ2F0ZSB0byBhZGQgY3VzdG9tIGFjdGlvbnMuCi0KLSAgICBb
c2VsZiBfY3JlYXRlU2hlZXRXaXRoRWxlbWVudEFjdGlvbnM6YWN0aW9ucyBzaG93TGlua1RpdGxl
OllFU107Ci0gICAgaWYgKCFfaW50ZXJhY3Rpb25TaGVldCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFbX2ludGVyYWN0aW9uU2hlZXQgcHJlc2VudFNoZWV0XSkKLSAgICAgICAgW3NlbGYg
YWN0aW9uU2hlZXQ6X2ludGVyYWN0aW9uU2hlZXQuZ2V0KCkgY2xpY2tlZEJ1dHRvbkF0SW5kZXg6
W19pbnRlcmFjdGlvblNoZWV0IGNhbmNlbEJ1dHRvbkluZGV4XV07Ci19Ci0KLS0gKHZvaWQpc2hv
d0RhdGFEZXRlY3RvcnNTaGVldAotewotICAgIEFTU0VSVCghX2ludGVyYWN0aW9uU2hlZXQpOwot
ICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpfdmlldy5wb3NpdGlv
bkluZm9ybWF0aW9uLnVybF07Ci0gICAgaWYgKCF0YXJnZXRVUkwpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghW1tnZXRERERldGVjdGlvbkNvbnRyb2xsZXJDbGFzcygpIHRhcEFuZEhvbGRT
Y2hlbWVzXSBjb250YWluc09iamVjdDpbdGFyZ2V0VVJMIHNjaGVtZV1dKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkLgotICAgIC8vIFdl
IG5lZWQgYSBkaWZmZXJlbnQgQVBJIGZvciBERERlY3RlY3Rpb25Db250cm9sbGVyIHRoYXQgZG9l
c24ndCB0YWtlIERPTU5vZGUgYW5kIFdlYkZyYW1lIG9iamVjdHMuCi0gICAgLy8gTlNBcnJheSAq
ZGF0YURldGVjdG9yc0FjdGlvbnMgPSBbW2dldERERGV0ZWN0aW9uQ29udHJvbGxlckNsYXNzKCkg
c2hhcmVkQ29udHJvbGxlcl0gYWN0aW9uc0ZvckRPTU5vZGU6X2ludGVyYWN0aW9uLmVsZW1lbnQg
Zm9yRnJhbWU6W193ZWJWaWV3IG1haW5GcmFtZV1dOwotICAgIE5TQXJyYXkgKmRhdGFEZXRlY3Rv
cnNBY3Rpb25zID0gbmlsOwotCi0gICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
IHdpbGwgYWx3YXlzIGJlIHRydWUgZm9yIG5vdywgc2luY2UgdGhlcmUgYXJlIG5vIHZpYWJsZSBj
YWxscyB0byByZXRyaWV2ZQotICAgIC8vIGRhdGEgZGV0ZWN0b3IgYWN0aW9ucy4KLSAgICBpZiAo
W2RhdGFEZXRlY3RvcnNBY3Rpb25zIGNvdW50XSA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBOU011dGFibGVBcnJheSAqZWxlbWVudEFjdGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXld
OwotICAgIGZvciAoTlNVSW50ZWdlciBhY3Rpb25OdW1iZXIgPSAwOyBhY3Rpb25OdW1iZXIgPCBb
ZGF0YURldGVjdG9yc0FjdGlvbnMgY291bnRdOyBhY3Rpb25OdW1iZXIrKykgewotICAgICAgICBE
REFjdGlvbiAqYWN0aW9uID0gW2RhdGFEZXRlY3RvcnNBY3Rpb25zIG9iamVjdEF0SW5kZXg6YWN0
aW9uTnVtYmVyXTsKLSAgICAgICAgW2VsZW1lbnRBY3Rpb25zIGFkZE9iamVjdDpbV0tFbGVtZW50
QWN0aW9uIGN1c3RvbUVsZW1lbnRBY3Rpb25XaXRoVGl0bGU6W2FjdGlvbiBsb2NhbGl6ZWROYW1l
XSBhY3Rpb25IYW5kbGVyOl4oV0tFbGVtZW50QWN0aW9uSW5mbyAqYWN0aW9uSW5mbykgewotICAg
ICAgICAgICAgVUlQb3BvdmVyQ29udHJvbGxlciAqcG9wb3ZlckNvbnRyb2xsZXIgPSBuaWw7Ci0g
ICAgICAgICAgICBpZiAoVUlfVVNFUl9JTlRFUkZBQ0VfSURJT00oKSAhPSBVSVVzZXJJbnRlcmZh
Y2VJZGlvbVBob25lKSB7Ci0gICAgICAgICAgICAgICAgW19pbnRlcmFjdGlvblNoZWV0IHNldFVz
ZXJJbnRlcmFjdGlvbkVuYWJsZWQ6Tk9dOwotICAgICAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS8xMTAxNTc1MT4gQWN0aW9uIHNoZWV0IGJlY29tZXMgYmxhY2sgaWYgYSBidXR0b24gaXMg
Y2xpY2tlZCB0d2ljZSBvbiBpUGFkCi0gICAgICAgICAgICAgICAgLy8gcHJldmVudCBhbnkgZnVy
dGhlciB0YXAgb24gdGhlIHNoZWV0IHdoaWxlIEREIGlzIGxvYWRpbmcgaXRzIHZpZXcgY29udHJv
bGxlciwgb3RoZXJ3aXNlIFVJQWN0aW9uU2hlZXQgZ29lcyBhbW9rCi0KLSAgICAgICAgICAgICAg
ICBwb3BvdmVyQ29udHJvbGxlciA9IFtfaW50ZXJhY3Rpb25TaGVldCBfcmVsaW5xdWlzaFBvcG92
ZXJDb250cm9sbGVyXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgW1tnZXRERERldGVj
dGlvbkNvbnRyb2xsZXJDbGFzcygpIHNoYXJlZENvbnRyb2xsZXJdIHBlcmZvcm1BY3Rpb246YWN0
aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluVmlldzpbc2VsZiBzdXBlcnZpZXdGb3JTaGVldF0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFBv
cG92ZXJDb250cm9sbGVyOnBvcG92ZXJDb250cm9sbGVyCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25EZWxlZ2F0ZTpz
ZWxmXTsKLSAgICAgICAgfV1dOwotICAgIH0KLQotICAgIFtzZWxmIF9jcmVhdGVTaGVldFdpdGhF
bGVtZW50QWN0aW9uczplbGVtZW50QWN0aW9ucyBzaG93TGlua1RpdGxlOk5PXTsKLSAgICBpZiAo
IV9pbnRlcmFjdGlvblNoZWV0KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgaW1wbGlj
aXQgc2Vjb25kIGJ1dHRvbiBpcyAiY2FuY2VsIiwgd2hpY2ggaXMgc3dhbGxvd2VkIGJ5IHRoZSBw
b3BvdmVyIGF0IHByZXNlbnRhdGlvbiB0aW1lLgotICAgIGlmIChfaW50ZXJhY3Rpb25TaGVldC5n
ZXQoKS5udW1iZXJPZkJ1dHRvbnMgPD0gMikKLSAgICAgICAgX2ludGVyYWN0aW9uU2hlZXQuZ2V0
KCkuYXJyb3dEaXJlY3Rpb25zID0gVUlQb3BvdmVyQXJyb3dEaXJlY3Rpb25VcCB8IFVJUG9wb3Zl
ckFycm93RGlyZWN0aW9uRG93bjsKLQotICAgIGlmICghW19pbnRlcmFjdGlvblNoZWV0IHByZXNl
bnRTaGVldF0pCi0gICAgICAgIFtzZWxmIGFjdGlvblNoZWV0Ol9pbnRlcmFjdGlvblNoZWV0Lmdl
dCgpIGNsaWNrZWRCdXR0b25BdEluZGV4OltfaW50ZXJhY3Rpb25TaGVldCBjYW5jZWxCdXR0b25J
bmRleF1dOwotfQotCi0tICh2b2lkKWNsZWFudXBTaGVldAotewotICAgIF9wYWdlLT5zdG9wSW50
ZXJhY3Rpb24oKTsKLQotICAgIFtfaW50ZXJhY3Rpb25TaGVldCBkb25lV2l0aFNoZWV0XTsKLSAg
ICBbX2ludGVyYWN0aW9uU2hlZXQgc2V0U2hlZXREZWxlZ2F0ZTpuaWxdOwotICAgIFtfaW50ZXJh
Y3Rpb25TaGVldCBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIF9pbnRlcmFjdGlvblNoZWV0ID0gbmls
OwotCi0gICAgX2VsZW1lbnRBY3Rpb25zID0gbmlsOwotfQotCi1AZW5kCi0KLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlldy5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlldy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0NWFkOGNmMjM2YThlOTM2MmUzOWU3MjRjNjMxM2EzMWQwZDhh
NzdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXcuaAorKysgL2Rldi9udWxs
CkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJXS0Jhc2UuaCIKLSNpbXBv
cnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5oIgotI2ltcG9ydCAiV0tCcm93c2luZ0Nv
bnRleHRHcm91cC5oIgotI2ltcG9ydCAiV0tQcm9jZXNzR3JvdXAuaCIKLSNpbXBvcnQgPFVJS2l0
L1VJS2l0Lmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBjbGFzcyBXS0NvbnRlbnRW
aWV3OwotQGNsYXNzIFdLV2ViVmlld0NvbmZpZ3VyYXRpb247Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247Ci1jbGFzcyBXZWJDb250ZXh0Owot
c3RydWN0IFdlYlBhZ2VDb25maWd1cmF0aW9uOwotfQotCi1AcHJvdG9jb2wgV0tDb250ZW50Vmll
d0RlbGVnYXRlIDxOU09iamVjdD4KLS0gKHZvaWQpY29udGVudFZpZXdEaWRDb21taXRMb2FkRm9y
TWFpbkZyYW1lOihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXc7Ci0tICh2b2lkKWNvbnRlbnRW
aWV3OihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXcgZGlkQ29tbWl0TGF5ZXJUcmVlOihjb25z
dCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFuc2FjdGlv
bjsKLQotLy8gRklYTUU6IFRoaXMgZG9lc24ndCBiZWxvbmcgaW4gYSAnZGVsZWdhdGUnLgotLSAo
UmV0YWluUHRyPENHSW1hZ2VSZWY+KXRha2VWaWV3U25hcHNob3RGb3JDb250ZW50VmlldzooV0tD
b250ZW50VmlldyAqKWNvbnRlbnRWaWV3OwotQGVuZAotCi1XS19BUElfQ0xBU1MKLUBpbnRlcmZh
Y2UgV0tDb250ZW50VmlldyA6IFVJVmlldwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqYnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
cjsKLQotQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaWQgPFdLQ29udGVudFZpZXdEZWxl
Z2F0ZT4gZGVsZWdhdGU7Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tQYWdl
UmVmIF9wYWdlUmVmOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGlzQXNz
aXN0aW5nTm9kZTsKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFt
ZSBjb250ZXh0OihXZWJLaXQ6OldlYkNvbnRleHQmKWNvbnRleHQgY29uZmlndXJhdGlvbjooV2Vi
S2l0OjpXZWJQYWdlQ29uZmlndXJhdGlvbil3ZWJQYWdlQ29uZmlndXJhdGlvbjsKLQotLSAodm9p
ZClzZXRNaW5pbXVtU2l6ZTooQ0dTaXplKXNpemU7Ci0tICh2b2lkKXNldE1pbmltdW1MYXlvdXRT
aXplOihDR1NpemUpc2l6ZTsKLS0gKHZvaWQpZGlkVXBkYXRlVmlzaWJsZVJlY3Q6KENHUmVjdCl2
aXNpYmxlUmVjdCB1bm9ic2N1cmVkUmVjdDooQ0dSZWN0KXVub2JzY3VyZWRSZWN0IHNjYWxlOihD
R0Zsb2F0KXNjYWxlOwotCi0tICh2b2lkKWRpZEZpbmlzaFNjcm9sbGluZzsKLS0gKHZvaWQpZGlk
Wm9vbVRvU2NhbGU6KENHRmxvYXQpc2NhbGU7Ci0tICh2b2lkKXdpbGxTdGFydFpvb21PclNjcm9s
bDsKLS0gKHZvaWQpd2lsbFN0YXJ0VXNlclRyaWdnZXJlZFNjcm9sbDsKLS0gKHZvaWQpd2lsbFN0
YXJ0VXNlclRyaWdnZXJlZFpvb207Ci0KLUBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3YTIxMzg5MjRmMzVhYjA5Y2FjYWRjNDg5OWY5NjkyMjJmMzEyZGE5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXcubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tDb250ZW50
Vmlld0ludGVybmFsLmgiCi0KLSNpbXBvcnQgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uLmgiCi0jaW1wb3J0ICJQYWdlQ2xpZW50SW1wbElPUy5oIgotI2ltcG9ydCAiUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgotI2ltcG9ydCAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eS5oIgotI2ltcG9ydCAiV2ViS2l0MkluaXRpYWxpemUuaCIKLSNpbXBvcnQgIldL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFsLmgiCi0jaW1wb3J0ICJXS0Jyb3dzaW5n
Q29udGV4dEdyb3VwUHJpdmF0ZS5oIgotI2ltcG9ydCAiV0tHZW9sb2NhdGlvblByb3ZpZGVySU9T
LmgiCi0jaW1wb3J0ICJXS0ludGVyYWN0aW9uVmlldy5oIgotI2ltcG9ydCAiV0tQcmVmZXJlbmNl
c0ludGVybmFsLmgiCi0jaW1wb3J0ICJXS1Byb2Nlc3NHcm91cFByaXZhdGUuaCIKLSNpbXBvcnQg
IldLUHJvY2Vzc0NsYXNzSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRp
b24uaCIKLSNpbXBvcnQgIldlYkNvbnRleHQuaCIKLSNpbXBvcnQgIldlYkZyYW1lUHJveHkuaCIK
LSNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgotI2ltcG9ydCAiV2ViU3lzdGVtSW50ZXJmYWNlLmgi
Ci0jaW1wb3J0IDxVSUtpdC9VSVdpbmRvd19Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Zp
ZXdwb3J0QXJndW1lbnRzLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0Uo
SU9TVVJGQUNFKQotI2ltcG9ydCA8SU9TdXJmYWNlL0lPU3VyZmFjZS5oPgotI2VuZGlmCi0KLSNp
ZiBfX2hhc19pbmNsdWRlKDxRdWFydHpDb3JlL1F1YXJ0ekNvcmVQcml2YXRlLmg+KQotI2ltcG9y
dCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPgotI2VuZGlmCi0KLUBpbnRlcmZhY2Ug
Q0FMYXllciAoRGV0YWlscykKLUBwcm9wZXJ0eSBCT09MIGhpdFRlc3RzQXNPcGFxdWU7Ci1AZW5k
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQot
QGltcGxlbWVudGF0aW9uIFdLQ29udGVudFZpZXcgewotICAgIHN0ZDo6dW5pcXVlX3B0cjxQYWdl
Q2xpZW50SW1wbD4gX3BhZ2VDbGllbnQ7Ci0gICAgUmV0YWluUHRyPFdLQnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlcj4gX2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI7Ci0KLSAgICBSZXRhaW5QdHI8
VUlWaWV3PiBfcm9vdENvbnRlbnRWaWV3OwotICAgIFJldGFpblB0cjxXS0ludGVyYWN0aW9uVmll
dz4gX2ludGVyYWN0aW9uVmlldzsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6
KENHUmVjdClmcmFtZSBjb250ZXh0OihXZWJLaXQ6OldlYkNvbnRleHQmKWNvbnRleHQgY29uZmln
dXJhdGlvbjooV2ViS2l0OjpXZWJQYWdlQ29uZmlndXJhdGlvbil3ZWJQYWdlQ29uZmlndXJhdGlv
bgotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgSW5pdGlhbGl6ZVdlYktpdDIoKTsKLQotICAgIF9wYWdl
Q2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxQYWdlQ2xpZW50SW1wbD4oc2VsZik7Ci0KLSAgICBf
cGFnZSA9IGNvbnRleHQuY3JlYXRlV2ViUGFnZSgqX3BhZ2VDbGllbnQsIHN0ZDo6bW92ZSh3ZWJQ
YWdlQ29uZmlndXJhdGlvbikpOwotICAgIF9wYWdlLT5pbml0aWFsaXplV2ViUGFnZSgpOwotICAg
IF9wYWdlLT5zZXRJbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3RvcihbVUlTY3JlZW4gbWFpblNjcmVl
bl0uc2NhbGUpOwotICAgIF9wYWdlLT5zZXRVc2VGaXhlZExheW91dCh0cnVlKTsKLSAgICBfcGFn
ZS0+c2V0RGVsZWdhdGVzU2Nyb2xsaW5nKHRydWUpOwotCi0gICAgV2ViQ29udGV4dDo6c3RhdGlz
dGljcygpLndrVmlld0NvdW50Kys7Ci0KLSAgICBfcm9vdENvbnRlbnRWaWV3ID0gYWRvcHROUyhb
W1VJVmlldyBhbGxvY10gaW5pdF0pOwotICAgIFtfcm9vdENvbnRlbnRWaWV3IGxheWVyXS5tYXNr
c1RvQm91bmRzID0gTk87Ci0gICAgW19yb290Q29udGVudFZpZXcgc2V0VXNlckludGVyYWN0aW9u
RW5hYmxlZDpOT107Ci0KLSAgICBbc2VsZiBhZGRTdWJ2aWV3Ol9yb290Q29udGVudFZpZXcuZ2V0
KCldOwotCi0gICAgX2ludGVyYWN0aW9uVmlldyA9IGFkb3B0TlMoW1tXS0ludGVyYWN0aW9uVmll
dyBhbGxvY10gaW5pdF0pOwotICAgIFtfaW50ZXJhY3Rpb25WaWV3IHNldFBhZ2U6X3BhZ2VdOwot
ICAgIFtzZWxmIGFkZFN1YnZpZXc6X2ludGVyYWN0aW9uVmlldy5nZXQoKV07Ci0KLSAgICBzZWxm
LmxheWVyLmhpdFRlc3RzQXNPcGFxdWUgPSBZRVM7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgX3BhZ2UtPmNsb3NlKCk7Ci0KLSAgICBXZWJDb250ZXh0
OjpzdGF0aXN0aWNzKCkud2tWaWV3Q291bnQtLTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0K
LQotLSAodm9pZCl3aWxsTW92ZVRvV2luZG93OihVSVdpbmRvdyAqKW5ld1dpbmRvdwotewotICAg
IE5TTm90aWZpY2F0aW9uQ2VudGVyICpkZWZhdWx0Q2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFVJV2luZG93ICp3aW5kb3cgPSBzZWxmLndpbmRvdzsK
LQotICAgIGlmICh3aW5kb3cpCi0gICAgICAgIFtkZWZhdWx0Q2VudGVyIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpVSVdpbmRvd0RpZE1vdmVUb1NjcmVlbk5vdGlmaWNhdGlvbiBvYmplY3Q6d2lu
ZG93XTsKLQotICAgIGlmIChuZXdXaW5kb3cpCi0gICAgICAgIFtkZWZhdWx0Q2VudGVyIGFkZE9i
c2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93aW5kb3dEaWRNb3ZlVG9TY3JlZW5Ob3Rp
ZmljYXRpb246KSBuYW1lOlVJV2luZG93RGlkTW92ZVRvU2NyZWVuTm90aWZpY2F0aW9uIG9iamVj
dDpuZXdXaW5kb3ddOwotfQotCi0tICh2b2lkKWRpZE1vdmVUb1dpbmRvdwotewotICAgIGlmIChz
ZWxmLndpbmRvdykKLSAgICAgICAgW3NlbGYgX3VwZGF0ZUZvclNjcmVlbjpzZWxmLndpbmRvdy5z
Y3JlZW5dOwotICAgIF9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoVmlld1N0YXRlOjpJc0luV2lu
ZG93KTsKLX0KLQotLSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopYnJvd3NpbmdDb250
ZXh0Q29udHJvbGxlcgotewotICAgIGlmICghX2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIpCi0g
ICAgICAgIF9icm93c2luZ0NvbnRleHRDb250cm9sbGVyID0gW1tXS0Jyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXIgYWxsb2NdIF9pbml0V2l0aFBhZ2VSZWY6dG9BUEkoX3BhZ2UuZ2V0KCkpXTsKLQot
ICAgIHJldHVybiBfYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5nZXQoKTsKLX0KLQotLSAoV0tQ
YWdlUmVmKV9wYWdlUmVmCi17Ci0gICAgcmV0dXJuIHRvQVBJKF9wYWdlLmdldCgpKTsKLX0KLQot
LSAoQk9PTClpc0Fzc2lzdGluZ05vZGUKLXsKLSAgICByZXR1cm4gW19pbnRlcmFjdGlvblZpZXcg
aXNFZGl0YWJsZV07Ci19Ci0KLS0gKHZvaWQpZGlkVXBkYXRlVmlzaWJsZVJlY3Q6KENHUmVjdCl2
aXNpYmxlUmVjdCB1bm9ic2N1cmVkUmVjdDooQ0dSZWN0KXVub2JzY3VyZWRSZWN0IHNjYWxlOihD
R0Zsb2F0KXNjYWxlCi17Ci0gICAgX3BhZ2UtPnNldFVub2JzY3VyZWRDb250ZW50UmVjdCh1bm9i
c2N1cmVkUmVjdCk7Ci0gICAgX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKS0+c2Ny
b2xsUG9zaXRpb25DaGFuZ2VkVmlhRGVsZWdhdGVkU2Nyb2xsaW5nKF9wYWdlLT5zY3JvbGxpbmdD
b29yZGluYXRvclByb3h5KCktPnJvb3RTY3JvbGxpbmdOb2RlSUQoKSwgcm91bmRlZEludFBvaW50
KHVub2JzY3VyZWRSZWN0Lm9yaWdpbikpOwotCi0gICAgaWYgKGF1dG8gZHJhd2luZ0FyZWEgPSBf
cGFnZS0+ZHJhd2luZ0FyZWEoKSkgewotICAgICAgICBGbG9hdFJlY3QgZXhwb3NlZFJlY3QgPSB2
aXNpYmxlUmVjdDsKLSAgICAgICAgZXhwb3NlZFJlY3Quc2NhbGUoc2NhbGUpOwotICAgICAgICBk
cmF3aW5nQXJlYS0+c2V0RXhwb3NlZFJlY3QoZXhwb3NlZFJlY3QpOwotICAgIH0KLQotICAgIFtz
ZWxmIF91cGRhdGVGaXhlZFBvc2l0aW9uUmVjdF07Ci19Ci0KLS0gKHZvaWQpc2V0TWluaW11bVNp
emU6KENHU2l6ZSlzaXplCi17Ci0gICAgX3BhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFNpemUoSW50
U2l6ZShzaXplKSwgSW50U2l6ZSgpLCBJbnRTaXplKCkpOwotfQotCi0tIChGbG9hdFJlY3QpZml4
ZWRQb3NpdGlvblJlY3RGcm9tRXhwb3NlZFJlY3Q6KEZsb2F0UmVjdClleHBvc2VkUmVjdCBzY2Fs
ZTooZmxvYXQpc2NhbGUKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbW9kaWZ5IHRoZSBy
ZWN0IGJhc2VkIG9uIHRoZSBzY2FsZS4KLSAgICBVTlVTRURfUEFSQU0oc2NhbGUpOwotICAgIHJl
dHVybiBleHBvc2VkUmVjdDsKLX0KLQotLSAodm9pZClfdXBkYXRlRml4ZWRQb3NpdGlvblJlY3QK
LXsKLSAgICBhdXRvIGRyYXdpbmdBcmVhID0gX3BhZ2UtPmRyYXdpbmdBcmVhKCk7Ci0gICAgaWYg
KCFkcmF3aW5nQXJlYSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZsb2F0UmVjdCBmaXhlZFBvc1Jl
Y3QgPSBbc2VsZiBmaXhlZFBvc2l0aW9uUmVjdEZyb21FeHBvc2VkUmVjdDpfcGFnZS0+dW5vYnNj
dXJlZENvbnRlbnRSZWN0KCkgc2NhbGU6X3BhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpXTsKLSAgICBk
cmF3aW5nQXJlYS0+c2V0Q3VzdG9tRml4ZWRQb3NpdGlvblJlY3QoZml4ZWRQb3NSZWN0KTsKLX0K
LQotLSAodm9pZClzZXRNaW5pbXVtTGF5b3V0U2l6ZTooQ0dTaXplKXNpemUKLXsKLSAgICBfcGFn
ZS0+c2V0Vmlld3BvcnRDb25maWd1cmF0aW9uTWluaW11bUxheW91dFNpemUoSW50U2l6ZShDR0Nl
aWxpbmcoc2l6ZS53aWR0aCksIENHQ2VpbGluZyhzaXplLmhlaWdodCkpKTsKLX0KLQotLSAodm9p
ZClkaWRGaW5pc2hTY3JvbGxpbmcKLXsKLSAgICBbc2VsZiBfdXBkYXRlRml4ZWRQb3NpdGlvblJl
Y3RdOwotICAgIFtfaW50ZXJhY3Rpb25WaWV3IF9kaWRFbmRTY3JvbGxpbmdPclpvb21pbmddOwot
fQotCi0tICh2b2lkKXdpbGxTdGFydFpvb21PclNjcm9sbAotewotICAgIFtfaW50ZXJhY3Rpb25W
aWV3IF93aWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmddOwotfQotCi0tICh2b2lkKXdpbGxTdGFy
dFVzZXJUcmlnZ2VyZWRTY3JvbGwKLXsKLSAgICBbX2ludGVyYWN0aW9uVmlldyBfd2lsbFN0YXJ0
VXNlclRyaWdnZXJlZFNjcm9sbGluZ09yWm9vbWluZ107Ci19Ci0KLS0gKHZvaWQpd2lsbFN0YXJ0
VXNlclRyaWdnZXJlZFpvb20KLXsKLSAgICBbX2ludGVyYWN0aW9uVmlldyBfd2lsbFN0YXJ0VXNl
clRyaWdnZXJlZFNjcm9sbGluZ09yWm9vbWluZ107Ci0gICAgX3BhZ2UtPndpbGxTdGFydFVzZXJU
cmlnZ2VyZWRab29taW5nKCk7Ci19Ci0KLS0gKHZvaWQpZGlkWm9vbVRvU2NhbGU6KENHRmxvYXQp
c2NhbGUKLXsKLSAgICBfcGFnZS0+ZGlkRmluaXNoWm9vbWluZyhzY2FsZSk7Ci0gICAgW19pbnRl
cmFjdGlvblZpZXcgX2RpZEVuZFNjcm9sbGluZ09yWm9vbWluZ107Ci19Ci0KLSNwcmFnbWEgbWFy
ayBJbnRlcm5hbAotCi0tICh2b2lkKV93aW5kb3dEaWRNb3ZlVG9TY3JlZW5Ob3RpZmljYXRpb246
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgQVNTRVJUKG5vdGlmaWNhdGlv
bi5vYmplY3QgPT0gc2VsZi53aW5kb3cpOwotCi0gICAgVUlTY3JlZW4gKnNjcmVlbiA9IG5vdGlm
aWNhdGlvbi51c2VySW5mb1tVSVdpbmRvd05ld1NjcmVlblVzZXJJbmZvS2V5XTsKLSAgICBbc2Vs
ZiBfdXBkYXRlRm9yU2NyZWVuOnNjcmVlbl07Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZUZvclNjcmVl
bjooVUlTY3JlZW4gKilzY3JlZW4KLXsKLSAgICBBU1NFUlQoc2NyZWVuKTsKLSAgICBfcGFnZS0+
c2V0SW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3Ioc2NyZWVuLnNjYWxlKTsKLX0KLQotI3ByYWdt
YSBtYXJrIFBhZ2VDbGllbnRJbXBsIG1ldGhvZHMKLQotLSAoc3RkOjp1bmlxdWVfcHRyPERyYXdp
bmdBcmVhUHJveHk+KV9jcmVhdGVEcmF3aW5nQXJlYVByb3h5Ci17Ci0gICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eT4oX3BhZ2UuZ2V0KCkp
OwotfQotCi0tICh2b2lkKV9wcm9jZXNzRGlkRXhpdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCi19Ci0KLS0gKHZvaWQpX2RpZFJlbGF1bmNoUHJvY2VzcwotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCi19Ci0KLS0gKHZvaWQpX2RpZENvbW1pdExvYWRGb3JNYWluRnJhbWUKLXsKLSAg
ICBpZiAoW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbnRlbnRWaWV3
RGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZTopXSkKLSAgICAgICAgW19kZWxlZ2F0ZSBjb250ZW50
Vmlld0RpZENvbW1pdExvYWRGb3JNYWluRnJhbWU6c2VsZl07Ci0gICAgW19pbnRlcmFjdGlvblZp
ZXcgX3N0b3BBc3Npc3RpbmdOb2RlXTsKLX0KLQotLSAodm9pZClfZGlkQ29tbWl0TGF5ZXJUcmVl
Oihjb25zdCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFu
c2FjdGlvbgotewotICAgIENHU2l6ZSBjb250ZW50c1NpemUgPSBsYXllclRyZWVUcmFuc2FjdGlv
bi5jb250ZW50c1NpemUoKTsKLQotICAgIFtzZWxmIHNldEJvdW5kczp7Q0dQb2ludFplcm8sIGNv
bnRlbnRzU2l6ZX1dOwotICAgIFtfaW50ZXJhY3Rpb25WaWV3IHNldEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgY29udGVudHNTaXplLndpZHRoLCBjb250ZW50c1NpemUuaGVpZ2h0KV07Ci0gICAgW19y
b290Q29udGVudFZpZXcgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCBjb250ZW50c1NpemUud2lk
dGgsIGNvbnRlbnRzU2l6ZS5oZWlnaHQpXTsKLQotICAgIGlmIChbX2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoY29udGVudFZpZXc6ZGlkQ29tbWl0TGF5ZXJUcmVlOildKQot
ICAgICAgICBbX2RlbGVnYXRlIGNvbnRlbnRWaWV3OnNlbGYgZGlkQ29tbWl0TGF5ZXJUcmVlOmxh
eWVyVHJlZVRyYW5zYWN0aW9uXTsKLX0KLQotLSAodm9pZClfd2ViVG91Y2hFdmVudDooY29uc3Qg
V2ViS2l0OjpOYXRpdmVXZWJUb3VjaEV2ZW50Jil0b3VjaEV2ZW50IHByZXZlbnRzTmF0aXZlR2Vz
dHVyZXM6KEJPT0wpcHJldmVudHNOYXRpdmVHZXN0dXJlCi17Ci0gICAgW19pbnRlcmFjdGlvblZp
ZXcgX3dlYlRvdWNoRXZlbnQ6dG91Y2hFdmVudCBwcmV2ZW50c05hdGl2ZUdlc3R1cmVzOnByZXZl
bnRzTmF0aXZlR2VzdHVyZV07Ci19Ci0KLS0gKHZvaWQpX2RpZEdldFRhcEhpZ2hsaWdodEZvclJl
cXVlc3Q6KHVpbnQ2NF90KXJlcXVlc3RJRCBjb2xvcjooY29uc3QgQ29sb3ImKWNvbG9yIHF1YWRz
Oihjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYpaGlnaGxpZ2h0ZWRRdWFkcyB0b3BMZWZ0UmFkaXVz
Oihjb25zdCBJbnRTaXplJil0b3BMZWZ0UmFkaXVzIHRvcFJpZ2h0UmFkaXVzOihjb25zdCBJbnRT
aXplJil0b3BSaWdodFJhZGl1cyBib3R0b21MZWZ0UmFkaXVzOihjb25zdCBJbnRTaXplJilib3R0
b21MZWZ0UmFkaXVzIGJvdHRvbVJpZ2h0UmFkaXVzOihjb25zdCBJbnRTaXplJilib3R0b21SaWdo
dFJhZGl1cwotewotICAgIFtfaW50ZXJhY3Rpb25WaWV3IF9kaWRHZXRUYXBIaWdobGlnaHRGb3JS
ZXF1ZXN0OnJlcXVlc3RJRCBjb2xvcjpjb2xvciBxdWFkczpoaWdobGlnaHRlZFF1YWRzIHRvcExl
ZnRSYWRpdXM6dG9wTGVmdFJhZGl1cyB0b3BSaWdodFJhZGl1czp0b3BSaWdodFJhZGl1cyBib3R0
b21MZWZ0UmFkaXVzOmJvdHRvbUxlZnRSYWRpdXMgYm90dG9tUmlnaHRSYWRpdXM6Ym90dG9tUmln
aHRSYWRpdXNdOwotfQotCi0tICh2b2lkKV9zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExh
eWVyOihDQUxheWVyICopcm9vdExheWVyCi17Ci0gICAgW1tfcm9vdENvbnRlbnRWaWV3IGxheWVy
XSBzZXRTdWJsYXllcnM6QFtyb290TGF5ZXJdXTsKLX0KLQotLy8gRklYTUU6IGNoYW5nZSB0aGUg
bmFtZS4gTGVhdmUgaXQgZm9yIG5vdyB0byBtYWtlIGl0IGVhc2llciB0byByZWZlciB0byB0aGUg
VUlLaXQgaW1wbGVtZW50YXRpb24uCi0tICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGUKLXsKLSAg
ICBbX2ludGVyYWN0aW9uVmlldyBfc3RhcnRBc3Npc3RpbmdOb2RlXTsKLX0KLQotLSAodm9pZClf
c3RvcEFzc2lzdGluZ05vZGUKLXsKLSAgICBbX2ludGVyYWN0aW9uVmlldyBfc3RvcEFzc2lzdGlu
Z05vZGVdOwotfQotCi0tICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkCi17Ci0gICAgW19pbnRlcmFj
dGlvblZpZXcgX3NlbGVjdGlvbkNoYW5nZWRdOwotfQotCi0tICh2b2lkKV9kaWRVcGRhdGVCbG9j
a1NlbGVjdGlvbldpdGhUb3VjaDooV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCB3aXRoRmxhZ3M6KFdL
U2VsZWN0aW9uRmxhZ3MpZmxhZ3MgZ3Jvd1RocmVzaG9sZDooQ0dGbG9hdClncm93VGhyZXNob2xk
IHNocmlua1RocmVzaG9sZDooQ0dGbG9hdClzaHJpbmtUaHJlc2hvbGQKLXsKLSAgICBbX2ludGVy
YWN0aW9uVmlldyBfZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2g6dG91Y2ggd2l0aEZs
YWdzOmZsYWdzIGdyb3dUaHJlc2hvbGQ6Z3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6c2hy
aW5rVGhyZXNob2xkXTsKLX0KLQotLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdlYklPU0V2
ZW50ICopdGhlRXZlbnQgaXNDaGFyRXZlbnQ6KEJPT0wpaXNDaGFyRXZlbnQKLXsKLSAgICByZXR1
cm4gW19pbnRlcmFjdGlvblZpZXcgX2ludGVycHJldEtleUV2ZW50OnRoZUV2ZW50IGlzQ2hhckV2
ZW50OmlzQ2hhckV2ZW50XTsKLX0KLQotLSAodm9pZClfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENo
YW5nZTooY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKWluZm8KLXsKLSAg
ICBbX2ludGVyYWN0aW9uVmlldyBfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZTppbmZvXTsK
LX0KLQotLSAodm9pZClfZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdp
bjooV2ViU2VjdXJpdHlPcmlnaW4mKW9yaWdpbiBmcmFtZTooV2ViRnJhbWVQcm94eSYpZnJhbWUg
cmVxdWVzdDooR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5JilwZXJtaXNzaW9uUmVx
dWVzdAotewotICAgIC8vIEZJWE1FOiBUaGUgbGluZSBiZWxvdyBpcyBjb21tZW50ZWQgb3V0IHNp
bmNlIHdyYXBwZXIoV2ViQ29udGV4dCYpIG5vdyByZXR1cm5zIGEgV0tQcm9jZXNzQ2xhc3MuCi0g
ICAgLy8gQXMgcGFydCBvZiB0aGUgbmV3IEFQSSB3ZSBzaG91bGQgZmlndXJlIG91dCB3aGVyZSBn
ZW9sb2NhdGlvbiBmaXRzIGluLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzE1ODg1NTQ0Pi4KLSAgICAv
LyBbW3dyYXBwZXIoX3BhZ2UtPnByb2Nlc3MoKS5jb250ZXh0KCkpIF9nZW9sb2NhdGlvblByb3Zp
ZGVyXSBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOnRvQVBJKCZv
cmlnaW4pIGZyYW1lOnRvQVBJKCZmcmFtZSkgcmVxdWVzdDp0b0FQSSgmcGVybWlzc2lvblJlcXVl
c3QpIHdpbmRvdzpbc2VsZiB3aW5kb3ddXTsKLX0KLQotLSAoUmV0YWluUHRyPENHSW1hZ2VSZWY+
KV90YWtlVmlld1NuYXBzaG90Ci17Ci0gICAgcmV0dXJuIFtfZGVsZWdhdGUgdGFrZVZpZXdTbmFw
c2hvdEZvckNvbnRlbnRWaWV3OnNlbGZdOwotfQotCi1AZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJuYWwuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXdJbnRlcm5hbC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjExOGM1ZDYzMDBiYTQ3NGNjZDBlODk4NDZlYzlj
NDQxZWMzMDRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXdJbnRlcm5hbC5o
CisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgIldLQ29udGVudFZpZXcuaCIKLSNpbXBvcnQgIldLR2VzdHVyZVR5cGVzLmgiCi0jaW1wb3J0
IDx3dGYvRm9yd2FyZC5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDb2xvcjsKLWNsYXNzIEZs
b2F0UXVhZDsKLWNsYXNzIEludFNpemU7Ci1zdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHM7Ci19Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgRHJhd2luZ0FyZWFQcm94eTsKLWNsYXNzIEdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eTsKLWNsYXNzIExheWVyVHJlZUNvbnRleHQ7Ci1j
bGFzcyBOYXRpdmVXZWJUb3VjaEV2ZW50OwotY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b247Ci1jbGFzcyBXZWJGcmFtZVByb3h5OwotY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2Vi
U2VjdXJpdHlPcmlnaW47Ci1zdHJ1Y3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb247
Ci19Ci0KLUBjbGFzcyBXZWJJT1NFdmVudDsKLQotQGludGVyZmFjZSBXS0NvbnRlbnRWaWV3ICgp
IHsKLUBwYWNrYWdlCi0gICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBfcGFnZTsKLX0K
LQotLSAoc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eT4pX2NyZWF0ZURy
YXdpbmdBcmVhUHJveHk7Ci0tICh2b2lkKV9wcm9jZXNzRGlkRXhpdDsKLS0gKHZvaWQpX2RpZFJl
bGF1bmNoUHJvY2VzczsKLS0gKHZvaWQpX3NldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5
ZXI6KENBTGF5ZXIgKilyb290TGF5ZXI7Ci0KLS0gKHZvaWQpX2RpZENvbW1pdExvYWRGb3JNYWlu
RnJhbWU7Ci0tICh2b2lkKV9kaWRDb21taXRMYXllclRyZWU6KGNvbnN0IFdlYktpdDo6UmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb24mKWxheWVyVHJlZVRyYW5zYWN0aW9uOwotCi0tICh2b2lkKV93
ZWJUb3VjaEV2ZW50Oihjb25zdCBXZWJLaXQ6Ok5hdGl2ZVdlYlRvdWNoRXZlbnQmKXRvdWNoRXZl
bnQgcHJldmVudHNOYXRpdmVHZXN0dXJlczooQk9PTClwcmV2ZW50c0RlZmF1bHQ7Ci0tICh2b2lk
KV9kaWRHZXRUYXBIaWdobGlnaHRGb3JSZXF1ZXN0Oih1aW50NjRfdClyZXF1ZXN0SUQgY29sb3I6
KGNvbnN0IFdlYkNvcmU6OkNvbG9yJiljb2xvciBxdWFkczooY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkZsb2F0UXVhZD4mKWhpZ2hsaWdodGVkUXVhZHMgdG9wTGVmdFJhZGl1czooY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpdG9wTGVmdFJhZGl1cyB0b3BSaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpdG9wUmlnaHRSYWRpdXMgYm90dG9tTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpYm90dG9tTGVmdFJhZGl1cyBib3R0b21SaWdodFJhZGl1czooY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpYm90dG9tUmlnaHRSYWRpdXM7Ci0KLS0gKHZvaWQpX3N0YXJ0QXNzaXN0aW5n
Tm9kZTsKLS0gKHZvaWQpX3N0b3BBc3Npc3RpbmdOb2RlOwotLSAodm9pZClfc2VsZWN0aW9uQ2hh
bmdlZDsKLS0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihXZWJJT1NFdmVudCAqKXRoZUV2ZW50
IGlzQ2hhckV2ZW50OihCT09MKWlzQ2hhckV2ZW50OwotLSAodm9pZClfcG9zaXRpb25JbmZvcm1h
dGlvbkRpZENoYW5nZTooY29uc3QgV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3Np
dGlvbiYpaW5mbzsKLS0gKHZvaWQpX2RlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZy
b21PcmlnaW46KFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4mKW9yaWdpbiBmcmFtZTooV2ViS2l0
OjpXZWJGcmFtZVByb3h5JilmcmFtZSByZXF1ZXN0OihXZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RQcm94eSYpcGVybWlzc2lvblJlcXVlc3Q7Ci0tICh2b2lkKV9kaWRVcGRhdGVC
bG9ja1NlbGVjdGlvbldpdGhUb3VjaDooV2ViS2l0OjpXS1NlbGVjdGlvblRvdWNoKXRvdWNoIHdp
dGhGbGFnczooV2ViS2l0OjpXS1NlbGVjdGlvbkZsYWdzKWZsYWdzIGdyb3dUaHJlc2hvbGQ6KENH
RmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6KENHRmxvYXQpc2hyaW5rVGhyZXNo
b2xkOwotCi0tIChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4pX3Rha2VWaWV3U25hcHNob3Q7Ci0KLUBl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLR2VvbG9j
YXRpb25Qcm92aWRlcklPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tH
ZW9sb2NhdGlvblByb3ZpZGVySU9TLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRh
MjE2YTA0Yzg4ZjYyMzQ3ZjdjNDg0ZTU3ZGRlNzBmYTY5NjA3NmQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU09iamVjdC5oPgotI2lt
cG9ydCA8V2ViS2l0Mi9XS0Jhc2UuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJD
b250ZXh0OwotfQotCi1AY2xhc3MgVUlXaW5kb3c7Ci0KLUBpbnRlcmZhY2UgV0tHZW9sb2NhdGlv
blByb3ZpZGVySU9TIDogTlNPYmplY3QKLS0oaWQpaW5pdFdpdGhDb250ZXh0OihXZWJLaXQ6Oldl
YkNvbnRleHQqKWNvbnRleHQ7Ci0tKHZvaWQpZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1
ZXN0RnJvbU9yaWdpbjooV0tTZWN1cml0eU9yaWdpblJlZilvcmlnaW4gZnJhbWU6KFdLRnJhbWVS
ZWYpZnJhbWUgcmVxdWVzdDooV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmKXBlcm1p
c3Npb25SZXF1ZXN0IHdpbmRvdzooVUlXaW5kb3cqKXdpbmRvdzsKLUBlbmQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklP
Uy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLR2VvbG9jYXRpb25Qcm92
aWRlcklPUy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEyNTBkYThiMTUxNmMw
MTcxMWEyNTk2ZDg5MGJmMjc3MWFkMTkwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0dlb2xv
Y2F0aW9uUHJvdmlkZXJJT1MubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyODIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tHZW9sb2NhdGlvblByb3Zp
ZGVySU9TLmgiCi0KLSNpbXBvcnQgIkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5o
IgotI2ltcG9ydCAiV2ViQ29udGV4dC5oIgotI2ltcG9ydCAiV2ViR2VvbG9jYXRpb25NYW5hZ2Vy
UHJveHkuaCIKLSNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luLmgiCi0jaW1wb3J0IDxXZWJHZW9s
b2NhdGlvblBvc2l0aW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dlb2xvY2F0aW9uUG9zaXRpb24u
aD4KLSNpbXBvcnQgPFdlYktpdDIvV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Lmg+Ci0j
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bXBvcnQgPHd0Zi9SZWZQdHIuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQg
PHd0Zi9IYXNoU2V0Lmg+Ci0KLS8vIEZJWE1FOiBSZW1vdmUgdXNlIG9mIFdlYktpdDEgZnJvbSBX
ZWJLaXQyCi0jaW1wb3J0IDxXZWJLaXQvV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRl
ci5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0j
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9u
cyIKLQotQGludGVyZmFjZSBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MgKCkKLS0odm9pZClfc3Rh
cnRVcGRhdGluZzsKLS0odm9pZClfc3RvcFVwZGF0aW5nOwotLSh2b2lkKV9zZXRFbmFibGVIaWdo
QWNjdXJhY3k6KEJPT0wpZW5hYmxlOwotQGVuZAotCi1AaW50ZXJmYWNlIFdLR2VvbG9jYXRpb25Q
cm92aWRlcklPUyAoV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25VcGRhdGVMaXN0ZW5lcikgPFdl
Ykdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uVXBkYXRlTGlzdGVuZXI+Ci1AZW5kCi0KLUBpbnRlcmZh
Y2UgV0tXZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5lciA6IE5TT2JqZWN0PFdlYkFsbG93RGVueVBv
bGljeUxpc3RlbmVyPgotLSAoaWQpaW5pdFdpdGhQcm92aWRlcjooV0tHZW9sb2NhdGlvblByb3Zp
ZGVySU9TKilwcm92aWRlciBwZXJtaXNzaW9uUmVxdWVzdFByb3h5OihQYXNzUmVmUHRyPEdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eT4pcGVybWlzc2lvblJlcXVlc3RQcm94eTsKLS0g
KHZvaWQpZGVueU9ubHlUaGlzUmVxdWVzdCBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVDsKLUBlbmQK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci12b2lkIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVx
dWVzdEZyb21PcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZywgaWQ8V2ViQWxsb3dEZW55UG9saWN5TGlzdGVuZXI+LCBVSVdpbmRvdyopOwotfTsK
LQotc3RhdGljIHZvaWQgc3RhcnRVcGRhdGluZ0NhbGxiYWNrKFdLR2VvbG9jYXRpb25NYW5hZ2Vy
UmVmIGdlb2xvY2F0aW9uTWFuYWdlciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBX
S0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MgKmdlb2xvY2F0aW9uUHJvdmlkZXIgPSByZWludGVycHJl
dF9jYXN0PFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVu
dEluZm8pKTsKLSAgICBBU1NFUlQoW2dlb2xvY2F0aW9uUHJvdmlkZXIgaXNLaW5kT2ZDbGFzczpb
V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TIGNsYXNzXV0pOwotICAgIFtnZW9sb2NhdGlvblByb3Zp
ZGVyIF9zdGFydFVwZGF0aW5nXTsKLX0KLQotc3RhdGljIHZvaWQgc3RvcFVwZGF0aW5nQ2FsbGJh
Y2soV0tHZW9sb2NhdGlvbk1hbmFnZXJSZWYgZ2VvbG9jYXRpb25NYW5hZ2VyLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQotewotICAgIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyAqZ2VvbG9jYXRp
b25Qcm92aWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TKj4o
Y29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwotICAgIEFTU0VSVChbZ2VvbG9jYXRpb25Q
cm92aWRlciBpc0tpbmRPZkNsYXNzOltXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MgY2xhc3NdXSk7
Ci0gICAgW2dlb2xvY2F0aW9uUHJvdmlkZXIgX3N0b3BVcGRhdGluZ107Ci19Ci0KLXN0YXRpYyB2
b2lkIHNldEVuYWJsZUhpZ2hBY2N1cmFjeShXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBnZW9sb2Nh
dGlvbk1hbmFnZXIsIGJvb2wgZW5hYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAg
IFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyAqZ2VvbG9jYXRpb25Qcm92aWRlciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xp
ZW50SW5mbykpOwotICAgIEFTU0VSVChbZ2VvbG9jYXRpb25Qcm92aWRlciBpc0tpbmRPZkNsYXNz
OltXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MgY2xhc3NdXSk7Ci0gICAgW2dlb2xvY2F0aW9uUHJv
dmlkZXIgX3NldEVuYWJsZUhpZ2hBY2N1cmFjeTplbmFibGVdOwotfQotCi1zdHJ1Y3QgR2VvbG9j
YXRpb25SZXF1ZXN0RGF0YSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiBv
cmlnaW47Ci0gICAgUmVmUHRyPFdlYkZyYW1lUHJveHk+IGZyYW1lOwotICAgIFJlZlB0cjxHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHk+IHBlcm1pc3Npb25SZXF1ZXN0OwotICAgIFJl
dGFpblB0cjxVSVdpbmRvdz4gd2luZG93OwotfTsKLQotQGltcGxlbWVudGF0aW9uIFdLR2VvbG9j
YXRpb25Qcm92aWRlcklPUyB7Ci0gICAgUmVmUHRyPFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5
PiBfZ2VvbG9jYXRpb25NYW5hZ2VyOwotICAgIFJldGFpblB0cjxXZWJHZW9sb2NhdGlvbkNvcmVM
b2NhdGlvblByb3ZpZGVyPiBfY29yZUxvY2F0aW9uUHJvdmlkZXI7Ci0gICAgQk9PTCBfaXNXZWJD
b3JlR2VvbG9jYXRpb25BY3RpdmU7Ci0gICAgUmVmUHRyPFdlYkdlb2xvY2F0aW9uUG9zaXRpb24+
IF9sYXN0QWN0aXZlUG9zaXRpb247Ci0gICAgVmVjdG9yPEdlb2xvY2F0aW9uUmVxdWVzdERhdGE+
IF9yZXF1ZXN0c1dhaXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydDsKLSAgICBIYXNoU2V0PHZvaWQq
PiBfcmVxdWVzdHNJbldhcm1VcDsKLX0KLQotLSh2b2lkKV9zdG9wVXBkYXRpbmdJZlBvc3NpYmxl
Ci17Ci0gICAgaWYgKF9pc1dlYkNvcmVHZW9sb2NhdGlvbkFjdGl2ZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKF9yZXF1ZXN0c1dhaXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydC5pc0VtcHR5
KCkgJiYgX3JlcXVlc3RzSW5XYXJtVXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFtfY29yZUxvY2F0
aW9uUHJvdmlkZXIgc3RvcF07Ci0gICAgICAgIF9sYXN0QWN0aXZlUG9zaXRpb24uY2xlYXIoKTsK
LSAgICB9Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFdLR2VvbG9jYXRpb25Qcm92aWRlciBjYWxsYmFj
a3MgaW1wbGVtZW50YXRpb24uCi0tKHZvaWQpX3N0YXJ0VXBkYXRpbmcKLXsKLSAgICBfaXNXZWJD
b3JlR2VvbG9jYXRpb25BY3RpdmUgPSBZRVM7Ci0gICAgW19jb3JlTG9jYXRpb25Qcm92aWRlciBz
dGFydF07Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIHRoZSBsYXN0IHBvc2l0aW9uLCBpdCBpcyBmcm9t
IHRoZSBpbml0aWFsaXphdGlvbiBvciB3YXJtIHVwLiBJdCBpcyB0aGUgbGFzdCBrbm93bgotICAg
IC8vIGdvb2QgcG9zaXRpb24gc28gd2UgY2FuIHJldHVybiBpdCBkaXJlY3RseS4KLSAgICBpZiAo
X2xhc3RBY3RpdmVQb3NpdGlvbikKLSAgICAgICAgX2dlb2xvY2F0aW9uTWFuYWdlci0+cHJvdmlk
ZXJEaWRDaGFuZ2VQb3NpdGlvbihfbGFzdEFjdGl2ZVBvc2l0aW9uLmdldCgpKTsKLX0KLQotLSh2
b2lkKV9zdG9wVXBkYXRpbmcKLXsKLSAgICBfaXNXZWJDb3JlR2VvbG9jYXRpb25BY3RpdmUgPSBO
TzsKLSAgICBbc2VsZiBfc3RvcFVwZGF0aW5nSWZQb3NzaWJsZV07Ci19Ci0KLS0odm9pZClfc2V0
RW5hYmxlSGlnaEFjY3VyYWN5OihCT09MKWVuYWJsZUhpZ2hBY2N1cmFjeQotewotICAgIFtfY29y
ZUxvY2F0aW9uUHJvdmlkZXIgc2V0RW5hYmxlSGlnaEFjY3VyYWN5OmVuYWJsZUhpZ2hBY2N1cmFj
eV07Ci19Ci0KLSNwcmFnbWEgbWFyayAtIFB1YmxpYyBBUEkgaW1wbGVtZW50YXRpb24uCi0KLS0o
aWQpaW5pdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIFtzZWxmIHJlbGVhc2Vd
OwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0oaWQpaW5pdFdpdGhDb250ZXh0OihXZWJDb250ZXh0
Kiljb250ZXh0Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgX2dlb2xvY2F0aW9uTWFuYWdlciA9IGNvbnRleHQtPnN1
cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7Ci0gICAgV0tHZW9sb2NhdGlv
blByb3ZpZGVyIHByb3ZpZGVyQ2FsbGJhY2sgPSB7Ci0gICAgICAgIGtXS0dlb2xvY2F0aW9uUHJv
dmlkZXJDdXJyZW50VmVyc2lvbiwKLSAgICAgICAgc2VsZiwKLSAgICAgICAgc3RhcnRVcGRhdGlu
Z0NhbGxiYWNrLAotICAgICAgICBzdG9wVXBkYXRpbmdDYWxsYmFjaywKLSAgICAgICAgc2V0RW5h
YmxlSGlnaEFjY3VyYWN5Ci0gICAgfTsKLSAgICBfZ2VvbG9jYXRpb25NYW5hZ2VyLT5pbml0aWFs
aXplUHJvdmlkZXIocmVpbnRlcnByZXRfY2FzdDxXS0dlb2xvY2F0aW9uUHJvdmlkZXJCYXNlKj4o
JnByb3ZpZGVyQ2FsbGJhY2spKTsKLSAgICBfY29yZUxvY2F0aW9uUHJvdmlkZXIgPSBhZG9wdE5T
KFtbV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlciBhbGxvY10gaW5pdFdpdGhMaXN0
ZW5lcjpzZWxmXSk7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0odm9pZClkZWNpZGVQb2xpY3lG
b3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOihXS1NlY3VyaXR5T3JpZ2luUmVmKW9yaWdp
biBmcmFtZTooV0tGcmFtZVJlZilmcmFtZSByZXF1ZXN0OihXS0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RSZWYpcGVybWlzc2lvblJlcXVlc3Qgd2luZG93OihVSVdpbmRvdyopd2luZG93Ci17
Ci0gICAgR2VvbG9jYXRpb25SZXF1ZXN0RGF0YSBnZW9sb2NhdGlvblJlcXVlc3REYXRhOwotICAg
IGdlb2xvY2F0aW9uUmVxdWVzdERhdGEub3JpZ2luID0gdG9JbXBsKG9yaWdpbiktPnNlY3VyaXR5
T3JpZ2luKCk7Ci0gICAgZ2VvbG9jYXRpb25SZXF1ZXN0RGF0YS5mcmFtZSA9IHRvSW1wbChmcmFt
ZSk7Ci0gICAgZ2VvbG9jYXRpb25SZXF1ZXN0RGF0YS5wZXJtaXNzaW9uUmVxdWVzdCA9IHRvSW1w
bChwZXJtaXNzaW9uUmVxdWVzdCk7Ci0gICAgZ2VvbG9jYXRpb25SZXF1ZXN0RGF0YS53aW5kb3cg
PSB3aW5kb3c7Ci0gICAgX3JlcXVlc3RzV2FpdGluZ0ZvckNvcmVMb2NhdGlvblN0YXJ0LmFwcGVu
ZChnZW9sb2NhdGlvblJlcXVlc3REYXRhKTsKLSAgICBbX2NvcmVMb2NhdGlvblByb3ZpZGVyIHN0
YXJ0XTsKLX0KLUBlbmQKLQotI3ByYWdtYSBtYXJrIC0gV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRp
b25VcGRhdGVMaXN0ZW5lciBpbXBsZW1lbnRhdGlvbi4KLQotQGltcGxlbWVudGF0aW9uIFdLR2Vv
bG9jYXRpb25Qcm92aWRlcklPUyAoV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25VcGRhdGVMaXN0
ZW5lcikKLS0gKHZvaWQpZ2VvbG9jYXRpb25EZWxlZ2F0ZVN0YXJ0ZWQKLXsKLSAgICBWZWN0b3I8
R2VvbG9jYXRpb25SZXF1ZXN0RGF0YT4gcmVxdWVzdHM7Ci0gICAgcmVxdWVzdHMuc3dhcChfcmVx
dWVzdHNXYWl0aW5nRm9yQ29yZUxvY2F0aW9uU3RhcnQpOwotICAgIEhhc2hTZXQ8dm9pZCo+IGxh
dGVzdFJlcXVlc3RzRm9yV2FybXVwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVxdWVz
dHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFBy
b3h5KiBwZXJtaXNzaW9uUmVxdWVzdCA9IHJlcXVlc3RzW2ldLnBlcm1pc3Npb25SZXF1ZXN0Lmdl
dCgpOwotICAgICAgICBsYXRlc3RSZXF1ZXN0c0Zvcldhcm11cC5hZGQocGVybWlzc2lvblJlcXVl
c3QpOwotICAgICAgICBfcmVxdWVzdHNJbldhcm1VcC5hZGQocGVybWlzc2lvblJlcXVlc3QpOwot
ICAgIH0KLQotICAgIC8vIFN0YXJ0IHRoZSB3YXJtdXAgcGVyaW9kIGluIHdoaWNoIHdlIGtlZXAg
Q29yZUxvY2F0aW9uIHJ1bm5pbmcgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHVzZXIgcmVzcG9uc2Uu
Ci0gICAgY29uc3QgaW50NjRfdCB3YXJtVXBUaW1lb3V0SW50ZXJ2YWwgPSAyMCAqIE5TRUNfUEVS
X1NFQzsKLSAgICBkaXNwYXRjaF90aW1lX3Qgd2hlbiA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hf
VElNRV9OT1csIHdhcm1VcFRpbWVvdXRJbnRlcnZhbCk7Ci0gICAgZGlzcGF0Y2hfYWZ0ZXIod2hl
biwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgSGFzaFNldDx2b2lkKj46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxhdGVzdFJlcXVlc3RzRm9yV2FybXVwLmVuZCgpOwotICAg
ICAgICBmb3IgKEhhc2hTZXQ8dm9pZCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxhdGVzdFJlcXVl
c3RzRm9yV2FybXVwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIF9yZXF1
ZXN0c0luV2FybVVwLnJlbW92ZSgqaXQpOwotICAgICAgICBbc2VsZiBfc3RvcFVwZGF0aW5nSWZQ
b3NzaWJsZV07Ci0gICAgfSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcXVlc3Rz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJldGFpblB0cjxXS1dlYkFsbG93RGVueVBvbGljeUxp
c3RlbmVyPiBwb2xpY3lMaXN0ZW5lciA9IGFkb3B0TlMoW1tXS1dlYkFsbG93RGVueVBvbGljeUxp
c3RlbmVyIGFsbG9jXSBpbml0V2l0aFByb3ZpZGVyOnNlbGYgcGVybWlzc2lvblJlcXVlc3RQcm94
eTpyZXF1ZXN0c1tpXS5wZXJtaXNzaW9uUmVxdWVzdC5nZXQoKV0pOwotICAgICAgICBkZWNpZGVQ
b2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luKHJlcXVlc3RzW2ldLm9yaWdpbi5n
ZXQoKSwgcmVxdWVzdHNbaV0uZnJhbWUtPnVybCgpLCBwb2xpY3lMaXN0ZW5lci5nZXQoKSwgcmVx
dWVzdHNbaV0ud2luZG93LmdldCgpKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpZ2VvbG9jYXRpb25E
ZWxlZ2F0ZVVuYWJsZVRvU3RhcnQKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IF9yZXF1
ZXN0c1dhaXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydC5zaXplKCk7ICsraSkKLSAgICAgICAgX3Jl
cXVlc3RzV2FpdGluZ0ZvckNvcmVMb2NhdGlvblN0YXJ0W2ldLnBlcm1pc3Npb25SZXF1ZXN0LT5k
ZW55KCk7Ci0gICAgX3JlcXVlc3RzV2FpdGluZ0ZvckNvcmVMb2NhdGlvblN0YXJ0LmNsZWFyKCk7
Ci0gICAgW3NlbGYgX3N0b3BVcGRhdGluZ0lmUG9zc2libGVdOwotfQotCi0tICh2b2lkKXBvc2l0
aW9uQ2hhbmdlZDooV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbiopcG9zaXRpb24KLXsKLSAg
ICBfbGFzdEFjdGl2ZVBvc2l0aW9uID0gV2ViR2VvbG9jYXRpb25Qb3NpdGlvbjo6Y3JlYXRlKHBv
c2l0aW9uLT50aW1lc3RhbXAoKSwgcG9zaXRpb24tPmxhdGl0dWRlKCksIHBvc2l0aW9uLT5sb25n
aXR1ZGUoKSwgcG9zaXRpb24tPmFjY3VyYWN5KCksIHBvc2l0aW9uLT5jYW5Qcm92aWRlQWx0aXR1
ZGUoKSwgcG9zaXRpb24tPmFsdGl0dWRlKCksIHBvc2l0aW9uLT5jYW5Qcm92aWRlQWx0aXR1ZGVB
Y2N1cmFjeSgpLCBwb3NpdGlvbi0+YWx0aXR1ZGVBY2N1cmFjeSgpLCBwb3NpdGlvbi0+Y2FuUHJv
dmlkZUhlYWRpbmcoKSwgcG9zaXRpb24tPmhlYWRpbmcoKSwgcG9zaXRpb24tPmNhblByb3ZpZGVT
cGVlZCgpLCBwb3NpdGlvbi0+c3BlZWQoKSk7Ci0gICAgX2dlb2xvY2F0aW9uTWFuYWdlci0+cHJv
dmlkZXJEaWRDaGFuZ2VQb3NpdGlvbihfbGFzdEFjdGl2ZVBvc2l0aW9uLmdldCgpKTsKLX0KLQot
LSAodm9pZCllcnJvck9jY3VycmVkOihOU1N0cmluZyAqKWVycm9yTWVzc2FnZQotewotICAgIF9n
ZW9sb2NhdGlvbk1hbmFnZXItPnByb3ZpZGVyRGlkRmFpbFRvRGV0ZXJtaW5lUG9zaXRpb24oZXJy
b3JNZXNzYWdlKTsKLX0KLQotLSAodm9pZClyZXNldEdlb2xvY2F0aW9uCi17Ci0gICAgX2dlb2xv
Y2F0aW9uTWFuYWdlci0+cmVzZXRQZXJtaXNzaW9ucygpOwotfQotCi0jcHJhZ21hIG1hcmsgLSBN
ZXRob2RzIGZvciB1ZGF0aW5nIHRoZSBzdGF0ZSBXS1dlYkFsbG93RGVueVBvbGljeUxpc3RlbmVy
Ci0tICh2b2lkKXBlcm1pc3Npb25EZW5pZWQ6KEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQ
cm94eSopcGVybWlzc2lvblJlcXVlc3RQcm94eQotewotICAgIF9yZXF1ZXN0c0luV2FybVVwLnJl
bW92ZShwZXJtaXNzaW9uUmVxdWVzdFByb3h5KTsKLSAgICBbc2VsZiBfc3RvcFVwZGF0aW5nSWZQ
b3NzaWJsZV07Ci19Ci0KLUBlbmQKLQotIyBwcmFnbWEgbWFyayAtIEltcGxlbWVudGF0aW9uIG9m
IFdLV2ViQWxsb3dEZW55UG9saWN5TGlzdGVuZXIKLUBpbXBsZW1lbnRhdGlvbiBXS1dlYkFsbG93
RGVueVBvbGljeUxpc3RlbmVyIHsKLSAgICBSZXRhaW5QdHI8V0tHZW9sb2NhdGlvblByb3ZpZGVy
SU9TPiBfcHJvdmlkZXI7Ci0gICAgUmVmUHRyPEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQ
cm94eT4gX3Blcm1pc3Npb25SZXF1ZXN0UHJveHk7Ci19Ci0KLS0gKGlkKWluaXRXaXRoUHJvdmlk
ZXI6KFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyopcHJvdmlkZXIgcGVybWlzc2lvblJlcXVlc3RQ
cm94eTooUGFzc1JlZlB0cjxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHk+KXBlcm1p
c3Npb25SZXF1ZXN0UHJveHkKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICgh
c2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIF9wcm92aWRlciA9IHByb3ZpZGVyOwot
ICAgIF9wZXJtaXNzaW9uUmVxdWVzdFByb3h5ID0gcGVybWlzc2lvblJlcXVlc3RQcm94eTsKLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClhbGxvdwotewotICAgIF9wZXJtaXNzaW9uUmVx
dWVzdFByb3h5LT5hbGxvdygpOwotfQotCi0tICh2b2lkKWRlbnkKLXsKLSAgICBbX3Byb3ZpZGVy
IHBlcm1pc3Npb25EZW5pZWQ6X3Blcm1pc3Npb25SZXF1ZXN0UHJveHkuZ2V0KCldOwotICAgIF9w
ZXJtaXNzaW9uUmVxdWVzdFByb3h5LT5kZW55KCk7Ci19Ci0KLS0gKHZvaWQpZGVueU9ubHlUaGlz
UmVxdWVzdAotewotICAgIC8vIFRoZSBtZXRob2QgZGVueU9ubHlUaGlzUmVxdWVzdCBpcyBpQWQg
c3BlY2lmaWMgZm9yIFdlYktpdDEuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLS0g
KEJPT0wpc2hvdWxkQ2xlYXJDYWNoZQotewotICAgIHJldHVybiBOTzsKLX0KLUBlbmQKLQotI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2lu
Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tHZW9sb2NhdGlvblByb3Zp
ZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxZjRkMjU1ODljY2MwYTk0NWRmMTZkYmQyZmVlYjU2M2E0OTgzOWRjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbQor
KysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIldLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oIgotCi0jaW1wb3J0IDxG
b3VuZGF0aW9uL05TVVJMLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSVdlYkdlb2xvY2F0aW9uUG9saWN5
RGVjaWRlci5oPgotI2ltcG9ydCA8VUlLaXQvVUlXaW5kb3cuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
U2VjdXJpdHlPcmlnaW4uaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi0vLyBGSVhNRTogUmVtb3ZlIHVzZSBvZiBXZWJLaXQxIGZy
b20gV2ViS2l0MgotI2ltcG9ydCA8V2ViS2l0L1dlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyLmg+
Ci0jaW1wb3J0IDxXZWJLaXQvV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmg+Ci0KLUBpbnRlcmZh
Y2UgV2ViU2VjdXJpdHlPcmlnaW4gKFdlYkludGVybmFsKQotLSAoaWQpX2luaXRXaXRoV2ViQ29y
ZVNlY3VyaXR5T3JpZ2luOihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiAqKW9yaWdpbjsKLUBlbmQK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25S
ZXF1ZXN0RnJvbU9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nLCBpZDxXZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5lcj4sIFVJV2luZG93KiB3aW5k
b3cpOwotCi12b2lkIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW4o
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcs
IGlkPFdlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyPiBsaXN0ZW5lciwgVUlXaW5kb3cqIHdpbmRv
dykKLXsKLSAgICBSZXRhaW5QdHI8V2ViU2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0g
YWRvcHROUyhbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJp
dHlPcmlnaW46b3JpZ2luXSk7Ci0gICAgUmV0YWluUHRyPE5TVVJMPiByZXF1ZXN0VXJsID0gYWRv
cHROUyhbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmluZzp1cmxTdHJpbmddKTsKLSAgICBbW1VJ
V2ViR2VvbG9jYXRpb25Qb2xpY3lEZWNpZGVyIHNoYXJlZFBvbGljeURlY2lkZXJdIGRlY2lkZVBv
bGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46c2VjdXJpdHlPcmlnaW4uZ2V0KCkg
cmVxdWVzdGluZ1VSTDpyZXF1ZXN0VXJsLmdldCgpIHdpbmRvdzp3aW5kb3cgbGlzdGVuZXI6bGlz
dGVuZXJdOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2NmY3YWVhM2Q5NWRiNTQ1NTI5OWJkZjNlYmM1ZmY5OGFhYTI1Nzhk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJXS0dlc3R1cmVU
eXBlcy5oIgotI2ltcG9ydCA8VUlLaXQvVUlXZWJGb3JtQWNjZXNzb3J5Lmg+Ci0jaW1wb3J0IDxV
SUtpdC9VSVRleHRJbnB1dF9Qcml2YXRlLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KLSNp
bXBvcnQgPFVJS2l0L1VJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplci5oPgotI2ltcG9y
dCA8VUlLaXQvVUlXS1NlbGVjdGlvbkFzc2lzdGFudC5oPgotI2ltcG9ydCA8VUlLaXQvVUlXS1Rl
eHRJbnRlcmFjdGlvbkFzc2lzdGFudC5oPgotI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KLSNpbXBv
cnQgPHd0Zi9WZWN0b3IuaD4KLQotQGNsYXNzIFVJV2ViU2Nyb2xsVmlldzsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotY2xhc3MgQ29sb3I7Ci1jbGFzcyBGbG9hdFF1YWQ7Ci1jbGFzcyBJbnRTaXpl
OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIE5hdGl2ZVdlYlRvdWNoRXZlbnQ7Ci1j
bGFzcyBXZWJQYWdlUHJveHk7Ci1zdHJ1Y3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b247Ci19Ci0KLUBjbGFzcyBXZWJJT1NFdmVudDsKLQotQGludGVyZmFjZSBXS0ludGVyYWN0aW9u
VmlldyA6IFVJVmlldzxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJV2ViVG91Y2hFdmVu
dHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVRleHRJbnB1dFByaXZhdGUsIFVJV2ViRm9y
bUFjY2Vzc29yeURlbGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25WaWV3UHJvdG9jb2w+Ci0KLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBpc0VkaXRhYmxlOwotCi0tICh2b2lkKXNl
dFNjcm9sbFZpZXc6KFVJV2ViU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXc7Ci0tICh2b2lkKXNldFBh
Z2U6KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KXBhZ2U7Ci0KLS0gKHZvaWQpX3dl
YlRvdWNoRXZlbnQ6KGNvbnN0IFdlYktpdDo6TmF0aXZlV2ViVG91Y2hFdmVudCYpdG91Y2hFdmVu
dCBwcmV2ZW50c05hdGl2ZUdlc3R1cmVzOihCT09MKXByZXZlbnRzRGVmYXVsdDsKLS0gKHZvaWQp
X2RpZEdldFRhcEhpZ2hsaWdodEZvclJlcXVlc3Q6KHVpbnQ2NF90KXJlcXVlc3RJRCBjb2xvcjoo
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKWNvbG9yIHF1YWRzOihjb25zdCBWZWN0b3I8V2ViQ29yZTo6
RmxvYXRRdWFkPiYpaGlnaGxpZ2h0ZWRRdWFkcyB0b3BMZWZ0UmFkaXVzOihjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJil0b3BMZWZ0UmFkaXVzIHRvcFJpZ2h0UmFkaXVzOihjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJil0b3BSaWdodFJhZGl1cyBib3R0b21MZWZ0UmFkaXVzOihjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJilib3R0b21MZWZ0UmFkaXVzIGJvdHRvbVJpZ2h0UmFkaXVzOihjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJilib3R0b21SaWdodFJhZGl1czsKLQotLSAodm9pZClfc3RhcnRBc3Npc3RpbmdO
b2RlOwotLSAodm9pZClfc3RvcEFzc2lzdGluZ05vZGU7Ci0tICh2b2lkKV9zZWxlY3Rpb25DaGFu
Z2VkOwotLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdlYklPU0V2ZW50ICopdGhlRXZlbnQg
aXNDaGFyRXZlbnQ6KEJPT0wpaXNDaGFyRXZlbnQ7Ci0tICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0
aW9uRGlkQ2hhbmdlOihjb25zdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uJilpbmZvOwotLSAodm9pZClfYXR0ZW1wdENsaWNrQXRMb2NhdGlvbjooQ0dQb2ludClsb2Nh
dGlvbjsKLS0gKHZvaWQpX3VwZGF0ZVBvc2l0aW9uSW5mb3JtYXRpb247Ci0tICh2b2lkKV9wZXJm
b3JtQWN0aW9uOihXZWJLaXQ6OldLU2hlZXRBY3Rpb25zKWFjdGlvbjsKLS0gKHZvaWQpX3dpbGxT
dGFydFNjcm9sbGluZ09yWm9vbWluZzsKLS0gKHZvaWQpX3dpbGxTdGFydFVzZXJUcmlnZ2VyZWRT
Y3JvbGxpbmdPclpvb21pbmc7Ci0tICh2b2lkKV9kaWRFbmRTY3JvbGxpbmdPclpvb21pbmc7Ci0t
ICh2b2lkKV9kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaDooV2ViS2l0OjpXS1NlbGVj
dGlvblRvdWNoKXRvdWNoIHdpdGhGbGFnczooV2ViS2l0OjpXS1NlbGVjdGlvbkZsYWdzKWZsYWdz
IGdyb3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6KENH
RmxvYXQpc2hyaW5rVGhyZXNob2xkOwotQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBX
ZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIHBvc2l0aW9uSW5mb3JtYXRp
b247Ci1AZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9X
S0ludGVyYWN0aW9uVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dL
SW50ZXJhY3Rpb25WaWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2U2ZmZl
MDJmMDc5ZTJjNThlYTAwYzIzMDMyNjNiMzMxNDJmMTAyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9z
L1dLSW50ZXJhY3Rpb25WaWV3Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjAyMyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXS0ludGVyYWN0
aW9uVmlldy5oIgotCi0jaW1wb3J0ICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5o
IgotI2ltcG9ydCAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgotI2ltcG9ydCAiTmF0aXZlV2Vi
VG91Y2hFdmVudC5oIgotI2ltcG9ydCAiV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oIgotI2ltcG9y
dCAiV0tCYXNlLmgiCi0jaW1wb3J0ICJXS0dlc3R1cmVUeXBlcy5oIgotI2ltcG9ydCAiV2ViRXZl
bnQuaCIKLSNpbXBvcnQgIldlYklPU0V2ZW50RmFjdG9yeS5oIgotI2ltcG9ydCAiV2ViUGFnZU1l
c3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbXBvcnQgPERhdGFEZXRl
Y3RvcnNVSS9ERERldGVjdGlvbkNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFVJS2l0L1VJRm9udF9Q
cml2YXRlLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25pemVyX1ByaXZhdGUuaD4K
LSNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRJbXBsLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSUxvbmdQ
cmVzc0dlc3R1cmVSZWNvZ25pemVyX1ByaXZhdGUuaD4KLSNpbXBvcnQgPFVJS2l0L1VJVGFwR2Vz
dHVyZVJlY29nbml6ZXJfUHJpdmF0ZS5oPgotI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW50ZXJhY3Rp
b25Bc3Npc3RhbnRfUHJpdmF0ZS5oPgotI2ltcG9ydCA8VUlLaXQvVUlXZWJEb2N1bWVudFZpZXcu
aD4KLSNpbXBvcnQgPFVJS2l0L1VJV2ViU2Nyb2xsVmlldy5oPgotI2ltcG9ydCA8VUlLaXQvX1VJ
SGlnaGxpZ2h0Vmlldy5oPgotI2ltcG9ydCA8VUlLaXQvX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNz
R2VzdHVyZVJlY29nbml6ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvRmxvYXRRdWFkLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkV2
ZW50Lmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViU2VsZWN0aW9uUmVjdC5oPgotI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLVNPRlRfTElO
S19QUklWQVRFX0ZSQU1FV09SSyhEYXRhRGV0ZWN0b3JzVUkpCi1TT0ZUX0xJTktfQ0xBU1MoRGF0
YURldGVjdG9yc1VJLCBERERldGVjdGlvbkNvbnRyb2xsZXIpCi0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotc3RhdGljIGNvbnN0IGZsb2F0IGhp
Z2hsaWdodERlbGF5ID0gMC4xMjsKLXN0YXRpYyBjb25zdCBmbG9hdCB0YXBBbmRIb2xkRGVsYXkg
ID0gMC43NTsKLQotQGludGVyZmFjZSBXS1RleHRSYW5nZSA6IFVJVGV4dFJhbmdlIHsKLSAgICBD
R1JlY3QgX3N0YXJ0UmVjdDsKLSAgICBDR1JlY3QgX2VuZFJlY3Q7Ci0gICAgQk9PTCBfaXNOb25l
OwotICAgIEJPT0wgX2lzUmFuZ2U7Ci0gICAgQk9PTCBfaXNFZGl0YWJsZTsKLSAgICBOU0FycmF5
ICpfc2VsZWN0aW9uUmVjdHM7Ci0gICAgTlNVSW50ZWdlciBfc2VsZWN0ZWRUZXh0TGVuZ3RoOwot
fQotQHByb3BlcnR5IChub25hdG9taWMpIENHUmVjdCBzdGFydFJlY3Q7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYykgQ0dSZWN0IGVuZFJlY3Q7Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBpc05v
bmU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBpc1JhbmdlOwotQHByb3BlcnR5IChub25h
dG9taWMpIEJPT0wgaXNFZGl0YWJsZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1VJbnRlZ2Vy
IHNlbGVjdGVkVGV4dExlbmd0aDsKLUBwcm9wZXJ0eSAoY29weSwgbm9uYXRvbWljKSBOU0FycmF5
ICpzZWxlY3Rpb25SZWN0czsKLQotKyAoV0tUZXh0UmFuZ2UgKil0ZXh0UmFuZ2VXaXRoU3RhdGU6
KEJPT0wpaXNOb25lIGlzUmFuZ2U6KEJPT0wpaXNSYW5nZSBpc0VkaXRhYmxlOihCT09MKWlzRWRp
dGFibGUgc3RhcnRSZWN0OihDR1JlY3Qpc3RhcnRSZWN0IGVuZFJlY3Q6KENHUmVjdCllbmRSZWN0
IHNlbGVjdGlvblJlY3RzOihOU0FycmF5ICopc2VsZWN0aW9uUmVjdHMgc2VsZWN0ZWRUZXh0TGVu
Z3RoOihOU1VJbnRlZ2VyKXNlbGVjdGVkVGV4dExlbmd0aDsKLQotQGVuZAotCi1AaW50ZXJmYWNl
IFdLVGV4dFBvc2l0aW9uIDogVUlUZXh0UG9zaXRpb24gewotICAgIENHUmVjdCBfcG9zaXRpb25S
ZWN0OwotfQotCi1AcHJvcGVydHkgKG5vbmF0b21pYykgQ0dSZWN0IHBvc2l0aW9uUmVjdDsKLQot
KyAoV0tUZXh0UG9zaXRpb24gKil0ZXh0UG9zaXRpb25XaXRoUmVjdDooQ0dSZWN0KXBvc2l0aW9u
UmVjdDsKLQotQGVuZAotCi1AaW50ZXJmYWNlIFdLVGV4dFNlbGVjdGlvblJlY3QgOiBVSVRleHRT
ZWxlY3Rpb25SZWN0Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFdlYlNlbGVjdGlv
blJlY3QgKndlYlJlY3Q7Ci0KLSsgKE5TQXJyYXkgKil0ZXh0U2VsZWN0aW9uUmVjdHNXaXRoV2Vi
UmVjdHM6KE5TQXJyYXkgKil3ZWJSZWN0czsKLQotQGVuZAotCi1AaW50ZXJmYWNlIFdLQXV0b2Nv
cnJlY3Rpb25SZWN0cyA6IFVJV0tBdXRvY29ycmVjdGlvblJlY3RzIHsKLSAgICBDR1JlY3QgX2Zp
cnN0UmVjdDsKLSAgICBDR1JlY3QgX2xhc3RSZWN0OwotfQotKyAoV0tBdXRvY29ycmVjdGlvblJl
Y3RzICopYXV0b2NvcnJlY3Rpb25SZWN0c1dpdGhSZWN0czooQ0dSZWN0KWZpcnN0UmVjdCBsYXN0
UmVjdDooQ0dSZWN0KWxhc3RSZWN0OwotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV0tBdXRvY29ycmVj
dGlvbkNvbnRleHQgOiBVSVdLQXV0b2NvcnJlY3Rpb25Db250ZXh0IHsKLSAgICBOU1N0cmluZyAq
X2NvbnRleHRCZWZvcmVTZWxlY3Rpb247Ci0gICAgTlNTdHJpbmcgKl9zZWxlY3RlZFRleHQ7Ci0g
ICAgTlNTdHJpbmcgKl9tYXJrZWRUZXh0OwotICAgIE5TU3RyaW5nICpfY29udGV4dEFmdGVyU2Vs
ZWN0aW9uOwotICAgIE5TUmFuZ2UgX3JhbmdlSW5NYXJrZWRUZXh0OwotfQotCi0rIChXS0F1dG9j
b3JyZWN0aW9uQ29udGV4dCAqKWF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGhEYXRhOihOU1N0cmlu
ZyAqKWJlZm9yZVRleHQgbWFya2VkVGV4dDooTlNTdHJpbmcgKiltYXJrZWRUZXh0IHNlbGVjdGVk
VGV4dDooTlNTdHJpbmcgKilzZWxlY3RlZFRleHQgYWZ0ZXJUZXh0OihOU1N0cmluZyAqKWFmdGVy
VGV4dCBzZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0OihOU1JhbmdlKXJhbmdlOwotQGVuZAotCi1A
aW50ZXJmYWNlIFVJVGV4dEludGVyYWN0aW9uQXNzaXN0YW50IChVSVRleHRJbnRlcmFjdGlvbkFz
c2lzdGFudF9JbnRlcm5hbCkKLS8vIEZJWE1FOiB0aGlzIG5lZWRzIHRvIGJlIG1vdmVkIGZyb20g
dGhlIGludGVybmFsIGhlYWRlciB0byB0aGUgcHJpdmF0ZS4KLS0gKGlkKWluaXRXaXRoVmlldzoo
VUlSZXNwb25kZXIgPFVJVGV4dElucHV0PiAqKXZpZXc7Ci0tICh2b2lkKXNlbGVjdFdvcmQ7Ci1A
ZW5kCi0KLXR5cGVkZWYgdm9pZCAoXlVJV0tBdXRvY29ycmVjdGlvbkNvbXBsZXRpb25IYW5kbGVy
KShVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHNGb3JJbnB1dCk7Ci10eXBlZGVmIHZvaWQg
KF5VSVdLQXV0b2NvcnJlY3Rpb25Db250ZXh0SGFuZGxlcikoVUlXS0F1dG9jb3JyZWN0aW9uQ29u
dGV4dCAqYXV0b2NvcnJlY3Rpb25Db250ZXh0KTsKLQotc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25E
YXRhewotICAgIFN0cmluZyBmb250TmFtZTsKLSAgICBDR0Zsb2F0IGZvbnRTaXplOwotICAgIHVp
bnQ2NF90IGZvbnRUcmFpdHM7Ci0gICAgQ0dSZWN0IHRleHRGaXJzdFJlY3Q7Ci0gICAgQ0dSZWN0
IHRleHRMYXN0UmVjdDsKLSAgICBVSVdLQXV0b2NvcnJlY3Rpb25Db21wbGV0aW9uSGFuZGxlciBh
dXRvY29ycmVjdGlvbkhhbmRsZXI7Ci0gICAgVUlXS0F1dG9jb3JyZWN0aW9uQ29udGV4dEhhbmRs
ZXIgYXV0b2NvcnJlY3Rpb25Db250ZXh0SGFuZGxlcjsKLX07Ci0KLUBpbnRlcmZhY2UgV0tJbnRl
cmFjdGlvblZpZXcgKFByaXZhdGUpCi1AcHJvcGVydHkgKHJlYWRvbmx5LCBub25hdG9taWMpIFdL
QXV0b0NvcnJlY3Rpb25EYXRhICphdXRvY29ycmVjdGlvbkRhdGE7Ci1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBXS0ludGVyYWN0aW9uVmlldyB7Ci0gICAgUmV0YWluUHRyPFVJV2ViVG91Y2hFdmVu
dHNHZXN0dXJlUmVjb2duaXplcj4gX3RvdWNoRXZlbnRHZXN0dXJlUmVjb2duaXplcjsKLSAgICBC
T09MIF9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25vdXNseTsKLSAgICB1bnNpZ25lZCBfbmF0
aXZlV2ViVG91Y2hFdmVudFVuaXF1ZUlkQmVpbmdTZW50U3luY2hyb25vdXNseTsKLQotICAgIFJl
dGFpblB0cjxVSVRhcEdlc3R1cmVSZWNvZ25pemVyPiBfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6
ZXI7Ci0gICAgUmV0YWluUHRyPF9VSVdlYkhpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25p
emVyPiBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI7Ci0gICAgUmV0YWluUHRy
PFVJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI+IF9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXpl
cjsKLSAgICBSZXRhaW5QdHI8VUlUYXBHZXN0dXJlUmVjb2duaXplcj4gX2RvdWJsZVRhcEdlc3R1
cmVSZWNvZ25pemVyOwotICAgIFJldGFpblB0cjxVSVRhcEdlc3R1cmVSZWNvZ25pemVyPiBfdHdv
RmluZ2VyRG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXI7Ci0gICAgUmV0YWluUHRyPFVJUGFuR2Vz
dHVyZVJlY29nbml6ZXI+IF90d29GaW5nZXJQYW5HZXN0dXJlUmVjb2duaXplcjsKLQotICAgIFJl
dGFpblB0cjxVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50PiBfdGV4dFNlbGVjdGlvbkFzc2lz
dGFudDsKLSAgICBSZXRhaW5QdHI8VUlXS1NlbGVjdGlvbkFzc2lzdGFudD4gX3dlYlNlbGVjdGlv
bkFzc2lzdGFudDsKLQotICAgIFVJVGV4dElucHV0VHJhaXRzICpfdHJhaXRzOwotICAgIEJPT0wg
X2lzRWRpdGFibGU7Ci0gICAgVUlXZWJGb3JtQWNjZXNzb3J5ICpfYWNjZXNzb3J5OwotICAgIGlk
IDxVSVRleHRJbnB1dERlbGVnYXRlPiBfaW5wdXREZWxlZ2F0ZTsKLSAgICBCT09MIF9zaG93aW5n
VGV4dFN0eWxlT3B0aW9uczsKLQotICAgIF9fd2VhayBVSVdlYlNjcm9sbFZpZXcgKl9zY3JvbGxW
aWV3OwotICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IF9wYWdlOwotCi0gICAgUmV0YWluUHRyPF9V
SUhpZ2hsaWdodFZpZXc+IF9oaWdobGlnaHRWaWV3OwotICAgIHVpbnQ2NF90IF9sYXRlc3RUYXBI
aWdobGlnaHRJRDsKLSAgICBCT09MIF9pc1RhcEhpZ2hsaWdodElEVmFsaWQ7Ci0gICAgV0tBdXRv
Q29ycmVjdGlvbkRhdGEgX2F1dG9jb3JyZWN0aW9uRGF0YTsKLSAgICBSZXRhaW5QdHI8TlNTdHJp
bmc+IF9tYXJrZWRUZXh0OwotICAgIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIF9w
b3NpdGlvbkluZm9ybWF0aW9uOwotICAgIEJPT0wgX2hhc1ZhbGlkUG9zaXRpb25JbmZvcm1hdGlv
bjsKLSAgICBSZXRhaW5QdHI8V0tBY3Rpb25TaGVldEFzc2lzdGFudD4gX2FjdGlvblNoZWV0QXNz
aXN0YW50OwotfQotCi1Ac3ludGhlc2l6ZSBpbnB1dERlbGVnYXRlID0gX2lucHV0RGVsZWdhdGU7
Ci0KLS0gKGlkKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZQotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV07Ci0gICAgaWYgKHNlbGYpIHsKLSAgICAgICAgX3RvdWNo
RXZlbnRHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSVdlYlRvdWNoRXZlbnRzR2VzdHVy
ZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihf
d2ViVG91Y2hFdmVudHNSZWNvZ25pemVkOikgdG91Y2hEZWxlZ2F0ZTpzZWxmXSk7Ci0gICAgICAg
IFtfdG91Y2hFdmVudEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOwotICAgICAg
ICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfdG91Y2hFdmVudEdlc3R1cmVSZWNvZ25pemVy
LmdldCgpXTsKLQotICAgICAgICBfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5T
KFtbVUlUYXBHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rp
b246QHNlbGVjdG9yKF9zaW5nbGVUYXBSZWNvZ25pemVkOildKTsKLSAgICAgICAgW19zaW5nbGVU
YXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW3NlbGYgYWRk
R2VzdHVyZVJlY29nbml6ZXI6X3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKLQot
ICAgICAgICBfZG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlUYXBHZXN0
dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9y
KF9kb3VibGVUYXBSZWNvZ25pemVkOildKTsKLSAgICAgICAgW19kb3VibGVUYXBHZXN0dXJlUmVj
b2duaXplciBzZXROdW1iZXJPZlRhcHNSZXF1aXJlZDoyXTsKLSAgICAgICAgW19kb3VibGVUYXBH
ZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW3NlbGYgYWRkR2Vz
dHVyZVJlY29nbml6ZXI6X2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKLSAgICAg
ICAgW19zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciByZXF1aXJlT3RoZXJHZXN0dXJlVG9GYWls
Ol9kb3VibGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07Ci0KLSAgICAgICAgX2hpZ2hsaWdo
dExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW19VSVdlYkhpZ2hsaWdodExv
bmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlv
bjpAc2VsZWN0b3IoX2hpZ2hsaWdodExvbmdQcmVzc1JlY29nbml6ZWQ6KV0pOwotICAgICAgICBb
X2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGF5OmhpZ2hsaWdodERl
bGF5XTsKLSAgICAgICAgW19oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBzZXRE
ZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2hpZ2hs
aWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKLQotICAgICAgICBfbG9uZ1By
ZXNzR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlMb25nUHJlc3NHZXN0dXJlUmVjb2du
aXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9sb25nUHJl
c3NSZWNvZ25pemVkOildKTsKLSAgICAgICAgW19sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBz
ZXREZWxheTp0YXBBbmRIb2xkRGVsYXldOwotICAgICAgICBbX2xvbmdQcmVzc0dlc3R1cmVSZWNv
Z25pemVyIHNldERlbGVnYXRlOnNlbGZdOwotICAgICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2du
aXplcjpfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwotCi0gICAgICAgIF90d29G
aW5nZXJQYW5HZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSVBhbkdlc3R1cmVSZWNvZ25p
emVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3R3b0Zpbmdl
clBhblJlY29nbml6ZWQ6KV0pOwotICAgICAgICBbX3R3b0ZpbmdlclBhbkdlc3R1cmVSZWNvZ25p
emVyIHNldE1pbmltdW1OdW1iZXJPZlRvdWNoZXM6Ml07Ci0gICAgICAgIFtfdHdvRmluZ2VyUGFu
R2VzdHVyZVJlY29nbml6ZXIgc2V0TWF4aW11bU51bWJlck9mVG91Y2hlczoyXTsKLSAgICAgICAg
W190d29GaW5nZXJQYW5HZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICAg
ICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X3R3b0ZpbmdlclBhbkdlc3R1cmVSZWNvZ25p
emVyLmdldCgpXTsKLQotICAgICAgICBbc2VsZiBzZXRVc2VySW50ZXJhY3Rpb25FbmFibGVkOllF
U107Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2Jz
ZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3Jlc2V0U2hvd2luZ1RleHRTdHlsZTopIG5h
bWU6VUlNZW51Q29udHJvbGxlckRpZEhpZGVNZW51Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwot
ICAgICAgICBfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMgPSBOTzsKLSAgICB9Ci0KLSAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gd2UgZ2V0IG5vdGlmaWVkIHRoYXQgbG9h
ZGluZyBoYXMgY29tcGxldGVkLgotICAgIFtzZWxmIHVzZVNlbGVjdGlvbkFzc2lzdGFudFdpdGhN
b2RlOlVJV2ViU2VsZWN0aW9uTW9kZVdlYl07Ci0KLSAgICBfYWN0aW9uU2hlZXRBc3Npc3RhbnQg
PSBhZG9wdE5TKFtbV0tBY3Rpb25TaGVldEFzc2lzdGFudCBhbGxvY10gaW5pdFdpdGhWaWV3OnNl
bGZdKTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgX3dl
YlNlbGVjdGlvbkFzc2lzdGFudCA9IG5pbDsKLSAgICBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCA9
IG5pbDsKLSAgICBfYWN0aW9uU2hlZXRBc3Npc3RhbnQgPSBuaWw7Ci0gICAgW190b3VjaEV2ZW50
R2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbX3NpbmdsZVRhcEdlc3R1
cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW19kb3VibGVUYXBHZXN0dXJlUmVj
b2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFtfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVy
ZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbX2xvbmdQcmVzc0dlc3R1cmVSZWNv
Z25pemVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW190d29GaW5nZXJQYW5HZXN0dXJlUmVjb2du
aXplciBzZXREZWxlZ2F0ZTpuaWxdOwotCi0gICAgW19hY2Nlc3NvcnkgcmVsZWFzZV07Ci0gICAg
W3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldFNjcm9sbFZpZXc6KFVJV2ViU2Nyb2xs
VmlldyAqKXNjcm9sbFZpZXcKLXsKLSAgICBfc2Nyb2xsVmlldyA9IHNjcm9sbFZpZXc7Ci19Ci0K
LS0gKHZvaWQpc2V0UGFnZTooUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4pcGFnZQot
ewotICAgIF9wYWdlID0gcGFnZTsKLSAgICBbX2FjdGlvblNoZWV0QXNzaXN0YW50IHNldFBhZ2U6
X3BhZ2VdOwotfQotCi0tIChCT09MKWlzRWRpdGFibGUKLXsKLSAgICByZXR1cm4gX2lzRWRpdGFi
bGU7Ci19Ci0KLS0gKEJPT0wpY2FuQmVjb21lRmlyc3RSZXNwb25kZXIKLXsKLSAgICAvLyBXZSBt
aWdodCB3YW50IHRvIHJldHVybiBzb21ldGhpbmcgZWxzZQotICAgIC8vIGlmIHdlIGRlY2lkZSB0
byBlbmFibGUvZGlzYWJsZSBpbnRlcmFjdGlvbiBwcm9ncmFtbWF0aWNhbGx5LgotICAgIHJldHVy
biBZRVM7Ci19Ci0KLS0gKEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKLXsKLSAgICAvLyBGSVhN
RTogTWF5YmUgd2Ugc2hvdWxkIGNhbGwgcmVzaWduRmlyc3RSZXNwb25kZXIgb24gdGhlIHN1cGVy
Y2xhc3MKLSAgICAvLyBhbmQgZG8gbm90aGluZyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIE5PLgot
ICAgIF9wYWdlLT5ibHVyQXNzaXN0ZWROb2RlKCk7Ci0gICAgW3NlbGYgX2NhbmNlbEludGVyYWN0
aW9uXTsKLSAgICBbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCByZXNpZ25lZEZpcnN0UmVzcG9uZGVy
XTsKLQotICAgIHJldHVybiBbc3VwZXIgcmVzaWduRmlyc3RSZXNwb25kZXJdOwotfQotCi0tICh2
b2lkKV93ZWJUb3VjaEV2ZW50c1JlY29nbml6ZWQ6KFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVj
b2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCi17Ci0gICAgTmF0aXZlV2ViVG91Y2hFdmVudCBu
YXRpdmVXZWJUb3VjaEV2ZW50KGdlc3R1cmVSZWNvZ25pemVyKTsKLQotICAgIGlmIChuYXRpdmVX
ZWJUb3VjaEV2ZW50LnR5cGUoKSA9PSBXZWJLaXQ6OldlYkV2ZW50OjpUb3VjaFN0YXJ0KQotICAg
ICAgICBfY2FuU2VuZFRvdWNoRXZlbnRzQXN5bmNocm9ub3VzbHkgPSBOTzsKLQotICAgIGlmICgh
X2NhblNlbmRUb3VjaEV2ZW50c0FzeW5jaHJvbm91c2x5KQotICAgICAgICBfbmF0aXZlV2ViVG91
Y2hFdmVudFVuaXF1ZUlkQmVpbmdTZW50U3luY2hyb25vdXNseSA9IG5hdGl2ZVdlYlRvdWNoRXZl
bnQudW5pcXVlSWQoKTsKLQotICAgIF9wYWdlLT5zZXRTaG91bGRTZW5kRXZlbnRzU3luY2hyb25v
dXNseSghX2NhblNlbmRUb3VjaEV2ZW50c0FzeW5jaHJvbm91c2x5KTsKLSAgICBfcGFnZS0+aGFu
ZGxlVG91Y2hFdmVudChuYXRpdmVXZWJUb3VjaEV2ZW50KTsKLSAgICBfcGFnZS0+c2V0U2hvdWxk
U2VuZEV2ZW50c1N5bmNocm9ub3VzbHkoZmFsc2UpOwotfQotCi1zdGF0aWMgRmxvYXRRdWFkIGlu
ZmxhdGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQgaW5mbGF0ZVNpemUpCi17Ci0g
ICAgLy8gV2Ugc29ydCB0aGUgb3V0cHV0IHBvaW50cyBsaWtlIHRoaXMgKGFzIGV4cGVjdGVkIGJ5
IHRoZSBoaWdobGlnaHQgdmlldyk6Ci0gICAgLy8gIHAyLS0tLS0tcDMKLSAgICAvLyAgfCAgICAg
ICB8Ci0gICAgLy8gIHAxLS0tLS0tcDQKLQotICAgIC8vIDEpIFNvcnQgdGhlIHBvaW50cyBob3Jp
em9udGFsbHkuCi0gICAgRmxvYXRQb2ludCBwb2ludHNbNF0gPSB7IHF1YWQucDEoKSwgcXVhZC5w
NCgpLCBxdWFkLnAyKCksIHF1YWQucDMoKSB9OwotICAgIGlmIChwb2ludHNbMF0ueCgpID4gcG9p
bnRzWzFdLngoKSkKLSAgICAgICAgc3RkOjpzd2FwKHBvaW50c1swXSwgcG9pbnRzWzFdKTsKLSAg
ICBpZiAocG9pbnRzWzJdLngoKSA+IHBvaW50c1szXS54KCkpCi0gICAgICAgIHN0ZDo6c3dhcChw
b2ludHNbMl0sIHBvaW50c1szXSk7Ci0KLSAgICBpZiAocG9pbnRzWzBdLngoKSA+IHBvaW50c1sy
XS54KCkpCi0gICAgICAgIHN0ZDo6c3dhcChwb2ludHNbMF0sIHBvaW50c1syXSk7Ci0gICAgaWYg
KHBvaW50c1sxXS54KCkgPiBwb2ludHNbM10ueCgpKQotICAgICAgICBzdGQ6OnN3YXAocG9pbnRz
WzFdLCBwb2ludHNbM10pOwotCi0gICAgaWYgKHBvaW50c1sxXS54KCkgPiBwb2ludHNbMl0ueCgp
KQotICAgICAgICBzdGQ6OnN3YXAocG9pbnRzWzFdLCBwb2ludHNbMl0pOwotCi0gICAgLy8gMikg
U3dhcCB0aGVtIHZlcnRpY2FsbHkgdG8gaGF2ZSB0aGUgb3V0cHV0IHBvaW50cyBbcDIsIHAxLCBw
MywgcDRdLgotICAgIGlmIChwb2ludHNbMV0ueSgpIDwgcG9pbnRzWzBdLnkoKSkKLSAgICAgICAg
c3RkOjpzd2FwKHBvaW50c1swXSwgcG9pbnRzWzFdKTsKLSAgICBpZiAocG9pbnRzWzNdLnkoKSA8
IHBvaW50c1syXS55KCkpCi0gICAgICAgIHN0ZDo6c3dhcChwb2ludHNbMl0sIHBvaW50c1szXSk7
Ci0KLSAgICAvLyAzKSBBZGp1c3QgdGhlIHBvc2l0aW9ucy4KLSAgICBwb2ludHNbMF0ubW92ZSgt
aW5mbGF0ZVNpemUsIC1pbmZsYXRlU2l6ZSk7Ci0gICAgcG9pbnRzWzFdLm1vdmUoLWluZmxhdGVT
aXplLCBpbmZsYXRlU2l6ZSk7Ci0gICAgcG9pbnRzWzJdLm1vdmUoaW5mbGF0ZVNpemUsIC1pbmZs
YXRlU2l6ZSk7Ci0gICAgcG9pbnRzWzNdLm1vdmUoaW5mbGF0ZVNpemUsIGluZmxhdGVTaXplKTsK
LQotICAgIHJldHVybiBGbG9hdFF1YWQocG9pbnRzWzFdLCBwb2ludHNbMF0sIHBvaW50c1syXSwg
cG9pbnRzWzNdKTsKLX0KLQotLSAodm9pZClfd2ViVG91Y2hFdmVudDooY29uc3QgV2ViS2l0OjpO
YXRpdmVXZWJUb3VjaEV2ZW50Jil0b3VjaEV2ZW50IHByZXZlbnRzTmF0aXZlR2VzdHVyZXM6KEJP
T0wpcHJldmVudHNOYXRpdmVHZXN0dXJlCi17Ci0gICAgaWYgKHByZXZlbnRzTmF0aXZlR2VzdHVy
ZSkgewotICAgICAgICAvLyBJZiB3ZSBhcmUgZGlzcGF0Y2hpbmcgZXZlbnRzIHN5bmNocm9ub3Vz
bHkgYW5kIHRoZSBldmVudCBjb21pbmcgYmFjayBpcyBub3QgdGhlIG9uZSB3ZSBhcmUgc2VuZGlu
ZywgaXQgaXMgYSBjYWxsYmFjawotICAgICAgICAvLyBmcm9tIGFuIGV2ZW50IHNlbnQgYXN5bmNo
cm9ub3VzbHkgcHJpb3IgdG8gdGhlIHN5bmNocm9ub3VzIGV2ZW50LiBJbiB0aGF0IGNhc2UsIGl0
IHNob3VsZCBub3QgdXNlIHRoYXQgaW5mb3JtYXRpb24KLSAgICAgICAgLy8gdG8gdXBkYXRlIFVJ
V2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplci4KLSAgICAgICAgaWYgKCFfY2FuU2VuZFRv
dWNoRXZlbnRzQXN5bmNocm9ub3VzbHkgJiYgX25hdGl2ZVdlYlRvdWNoRXZlbnRVbmlxdWVJZEJl
aW5nU2VudFN5bmNocm9ub3VzbHkgIT0gdG91Y2hFdmVudC51bmlxdWVJZCgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIF9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25vdXNseSA9
IFlFUzsKLSAgICAgICAgW190b3VjaEV2ZW50R2VzdHVyZVJlY29nbml6ZXIgc2V0RGVmYXVsdFBy
ZXZlbnRlZDpZRVNdOwotICAgIH0KLX0KLQotLSAodm9pZClfZGlkR2V0VGFwSGlnaGxpZ2h0Rm9y
UmVxdWVzdDoodWludDY0X3QpcmVxdWVzdElEIGNvbG9yOihjb25zdCBXZWJDb3JlOjpDb2xvciYp
Y29sb3IgcXVhZHM6KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+JiloaWdobGlnaHRl
ZFF1YWRzIHRvcExlZnRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKXRvcExlZnRSYWRp
dXMgdG9wUmlnaHRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKXRvcFJpZ2h0UmFkaXVz
IGJvdHRvbUxlZnRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKWJvdHRvbUxlZnRSYWRp
dXMgYm90dG9tUmlnaHRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKWJvdHRvbVJpZ2h0
UmFkaXVzCi17Ci0gICAgaWYgKCFfaXNUYXBIaWdobGlnaHRJRFZhbGlkIHx8IF9sYXRlc3RUYXBI
aWdobGlnaHRJRCAhPSByZXF1ZXN0SUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IENH
RmxvYXQgVUlXZWJWaWV3TWluaW11bUhpZ2hsaWdodFJhZGl1cyA9IDIuMDsKLSAgICBpZiAoIV9o
aWdobGlnaHRWaWV3KSB7Ci0gICAgICAgIF9oaWdobGlnaHRWaWV3ID0gYWRvcHROUyhbW19VSUhp
Z2hsaWdodFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVyb10pOwotICAgICAgICBb
X2hpZ2hsaWdodFZpZXcgc2V0T3BhcXVlOk5PXTsKLSAgICAgICAgW19oaWdobGlnaHRWaWV3IHNl
dENvcm5lclJhZGl1czpVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzXTsKLSAgICB9Ci0g
ICAgW3NlbGYgYWRkU3VidmlldzpfaGlnaGxpZ2h0Vmlldy5nZXQoKV07Ci0KLSAgICBSZXRhaW5Q
dHI8VUlDb2xvcj4gaGlnaGxpZ2h0VUlLaXRDb2xvciA9IGFkb3B0TlMoW1tVSUNvbG9yIGFsbG9j
XSBpbml0V2l0aFJlZDooY29sb3IucmVkKCkgLyAyNTUuMCkgZ3JlZW46KGNvbG9yLmdyZWVuKCkg
LyAyNTUuMCkgYmx1ZTooY29sb3IuYmx1ZSgpIC8gMjU1LjApIGFscGhhOihjb2xvci5hbHBoYSgp
IC8gMjU1LjApXSk7Ci0gICAgW19oaWdobGlnaHRWaWV3IHNldENvbG9yOmhpZ2hsaWdodFVJS2l0
Q29sb3IuZ2V0KCldOwotCi0gICAgYm9vbCBhbGxIaWdobGlnaHRSZWN0c0FyZVJlY3RpbGluZWFy
ID0gdHJ1ZTsKLSAgICBjb25zdCBzaXplX3QgcXVhZENvdW50ID0gaGlnaGxpZ2h0ZWRRdWFkcy5z
aXplKCk7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiByZWN0cyA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzdGF0aWNfY2FzdDxjb25zdCBO
U1VJbnRlZ2VyPihxdWFkQ291bnQpXSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFk
Q291bnQ7ICsraSkgewotICAgICAgICBjb25zdCBGbG9hdFF1YWQmIHF1YWQgPSBoaWdobGlnaHRl
ZFF1YWRzW2ldOwotICAgICAgICBpZiAocXVhZC5pc1JlY3RpbGluZWFyKCkpIHsKLSAgICAgICAg
ICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0SW5zZXQocXVhZC5ib3VuZGluZ0JveCgpLCAtVUlXZWJW
aWV3TWluaW11bUhpZ2hsaWdodFJhZGl1cywgLVVJV2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRp
dXMpOwotICAgICAgICAgICAgW3JlY3RzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1Jl
Y3Q6cmVjdF1dOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWxsSGlnaGxpZ2h0UmVj
dHNBcmVSZWN0aWxpbmVhciA9IGZhbHNlOwotICAgICAgICAgICAgcmVjdHMuY2xlYXIoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlYktp
dDEgdXNlcyB0aGUgdmlzaWJsZVJlY3QuIFVzaW5nIHRoZSB3aG9sZSBmcmFtZSBmcm9tIHRoZSBw
YWdlIHNlZW1zIG92ZXJraWxsLgotICAgIENHUmVjdCBib3VuZGFyeVJlY3QgPSBbc2VsZiBmcmFt
ZV07Ci0gICAgaWYgKGFsbEhpZ2hsaWdodFJlY3RzQXJlUmVjdGlsaW5lYXIpCi0gICAgICAgIFtf
aGlnaGxpZ2h0VmlldyBzZXRGcmFtZXM6cmVjdHMuZ2V0KCkgYm91bmRhcnlSZWN0OmJvdW5kYXJ5
UmVjdF07Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcXVh
ZHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3Rh
dGljX2Nhc3Q8Y29uc3QgTlNVSW50ZWdlcj4ocXVhZENvdW50KV0pOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHF1YWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBGbG9h
dFF1YWQmIHF1YWQgPSBoaWdobGlnaHRlZFF1YWRzW2ldOwotICAgICAgICAgICAgRmxvYXRRdWFk
IGV4dGVuZGVkUXVhZCA9IGluZmxhdGVRdWFkKHF1YWQsIFVJV2ViVmlld01pbmltdW1IaWdobGln
aHRSYWRpdXMpOwotICAgICAgICAgICAgW3F1YWRzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdp
dGhDR1BvaW50OmV4dGVuZGVkUXVhZC5wMSgpXV07Ci0gICAgICAgICAgICBbcXVhZHMgYWRkT2Jq
ZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUG9pbnQ6ZXh0ZW5kZWRRdWFkLnAyKCldXTsKLSAgICAg
ICAgICAgIFtxdWFkcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpleHRlbmRl
ZFF1YWQucDMoKV1dOwotICAgICAgICAgICAgW3F1YWRzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1
ZVdpdGhDR1BvaW50OmV4dGVuZGVkUXVhZC5wNCgpXV07Ci0gICAgICAgIH0KLSAgICAgICAgW19o
aWdobGlnaHRWaWV3IHNldFF1YWRzOnF1YWRzLmdldCgpIGJvdW5kYXJ5UmVjdDpib3VuZGFyeVJl
Y3RdOwotICAgIH0KLQotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gYm9yZGVyUmFkaWkg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6NF0pOwot
ICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dTaXplOkNHU2l6
ZU1ha2UodG9wTGVmdFJhZGl1cy53aWR0aCgpICsgVUlXZWJWaWV3TWluaW11bUhpZ2hsaWdodFJh
ZGl1cywgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSArIFVJV2ViVmlld01pbmltdW1IaWdobGlnaHRS
YWRpdXMpXV07Ci0gICAgW2JvcmRlclJhZGlpIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhD
R1NpemU6Q0dTaXplTWFrZSh0b3BSaWdodFJhZGl1cy53aWR0aCgpICsgVUlXZWJWaWV3TWluaW11
bUhpZ2hsaWdodFJhZGl1cywgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkgKyBVSVdlYlZpZXdNaW5p
bXVtSGlnaGxpZ2h0UmFkaXVzKV1dOwotICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6W05TVmFs
dWUgdmFsdWVXaXRoQ0dTaXplOkNHU2l6ZU1ha2UoYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpICsg
VUlXZWJWaWV3TWluaW11bUhpZ2hsaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQo
KSArIFVJV2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRpdXMpXV07Ci0gICAgW2JvcmRlclJhZGlp
IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1NpemU6Q0dTaXplTWFrZShib3R0b21SaWdo
dFJhZGl1cy53aWR0aCgpICsgVUlXZWJWaWV3TWluaW11bUhpZ2hsaWdodFJhZGl1cywgYm90dG9t
UmlnaHRSYWRpdXMuaGVpZ2h0KCkgKyBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzKV1d
OwotICAgIFtfaGlnaGxpZ2h0VmlldyBzZXRDb3JuZXJSYWRpaTpib3JkZXJSYWRpaS5nZXQoKV07
Ci19Ci0KLS0gKHZvaWQpX2NhbmNlbExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyCi17Ci0gICAg
W19oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBjYW5jZWxdOwotfQotCi0tICh2
b2lkKV9kaWRTY3JvbGwKLXsKLSAgICBbc2VsZiBfY2FuY2VsTG9uZ1ByZXNzR2VzdHVyZVJlY29n
bml6ZXJdOwotICAgIFtzZWxmIF9jYW5jZWxJbnRlcmFjdGlvbl07Ci19Ci0KLS0gKEJPT0wpX3Jl
cXVpcmVzS2V5Ym9hcmRSZXNldE9uUmVsb2FkCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAo
Qk9PTClnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKXByZXZlbnRpbmdH
ZXN0dXJlUmVjb2duaXplciBjYW5QcmV2ZW50R2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJl
Y29nbml6ZXIgKilwcmV2ZW50ZWRHZXN0dXJlUmVjb2duaXplcgotewotICAgIC8vIEEgbG9uZy1w
cmVzcyBnZXN0dXJlIGNhbiBub3QgYmUgcmVjb2duaXplZCB3aGlsZSBwYW5uaW5nLCBidXQgYSBw
YW4gY2FuIGJlIHJlY29nbml6ZWQKLSAgICAvLyBkdXJpbmcgYSBsb25nLXByZXNzIGdlc3R1cmUu
Ci0gICAgQk9PTCBzaG91bGROb3RQcmV2ZW50UGFuR2VzdHVyZSA9IHByZXZlbnRpbmdHZXN0dXJl
UmVjb2duaXplciA9PSBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgfHwgcHJl
dmVudGluZ0dlc3R1cmVSZWNvZ25pemVyID09IF9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcjsK
LSAgICByZXR1cm4gIShzaG91bGROb3RQcmV2ZW50UGFuR2VzdHVyZSAmJiBbcHJldmVudGVkR2Vz
dHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpOU0NsYXNzRnJvbVN0cmluZyhAIlVJU2Nyb2xs
Vmlld1Bhbkdlc3R1cmVSZWNvZ25pemVyIildKTsKLX0KLQotLSAoQk9PTClnZXN0dXJlUmVjb2du
aXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKXByZXZlbnRlZEdlc3R1cmVSZWNvZ25pemVyIGNh
bkJlUHJldmVudGVkQnlHZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKXBy
ZXZlbnRpbmdHZXN0dXJlUmVjb2duaXplciB7Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGhpZ2hs
aWdodCB0byBiZSBwcmV2ZW50ZWQgYnkgYSBzZWxlY3Rpb24gZ2VzdHVyZS4gUHJlc3MtYW5kLWhv
bGQgb24gYSBsaW5rIHNob3VsZCBoaWdobGlnaHQgdGhlIGxpbmssIG5vdCBzZWxlY3QgaXQuCi0g
ICAgaWYgKChwcmV2ZW50aW5nR2VzdHVyZVJlY29nbml6ZXIgPT0gX3RleHRTZWxlY3Rpb25Bc3Np
c3RhbnQuZ2V0KCkubG91cGVHZXN0dXJlIHx8IFtfd2ViU2VsZWN0aW9uQXNzaXN0YW50IGlzU2Vs
ZWN0aW9uR2VzdHVyZVJlY29nbml6ZXI6cHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyXSkKLSAg
ICAgICAgJiYgKHByZXZlbnRlZEdlc3R1cmVSZWNvZ25pemVyID09IF9oaWdobGlnaHRMb25nUHJl
c3NHZXN0dXJlUmVjb2duaXplciB8fCBwcmV2ZW50ZWRHZXN0dXJlUmVjb2duaXplciA9PSBfbG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXIpKSB7Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICB9Ci0K
LSAgICByZXR1cm4gWUVTOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTYW1lUGFpcihVSUdl
c3R1cmVSZWNvZ25pemVyICphLCBVSUdlc3R1cmVSZWNvZ25pemVyICpiLCBVSUdlc3R1cmVSZWNv
Z25pemVyICp4LCBVSUdlc3R1cmVSZWNvZ25pemVyICp5KQotewotICAgIHJldHVybiAoYSA9PSB4
ICYmIGIgPT0geSkgfHwgKGIgPT0geCAmJiBhID09IHkpOwotfQotCi0tIChCT09MKWdlc3R1cmVS
ZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxk
UmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJl
Y29nbml6ZXIqKW90aGVyR2VzdHVyZVJlY29nbml6ZXIKLXsKLSAgICBpZiAoaXNTYW1lUGFpcihn
ZXN0dXJlUmVjb2duaXplciwgb3RoZXJHZXN0dXJlUmVjb2duaXplciwgX2hpZ2hsaWdodExvbmdQ
cmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpLCBfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIu
Z2V0KCkpKQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgaWYgKGlzU2FtZVBhaXIoZ2VzdHVy
ZVJlY29nbml6ZXIsIG90aGVyR2VzdHVyZVJlY29nbml6ZXIsIF9oaWdobGlnaHRMb25nUHJlc3NH
ZXN0dXJlUmVjb2duaXplci5nZXQoKSwgX3dlYlNlbGVjdGlvbkFzc2lzdGFudC5nZXQoKS5zZWxl
Y3Rpb25Mb25nUHJlc3NSZWNvZ25pemVyKSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLQotICAgIGlm
IChpc1NhbWVQYWlyKGdlc3R1cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1cmVSZWNvZ25pemVyLCBf
c2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCksIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50
LmdldCgpLnNpbmdsZVRhcEdlc3R1cmUpKQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgcmV0
dXJuIE5POwotfQotCi0tICh2b2lkKV9zaG93SW1hZ2VTaGVldAotewotICAgIFtfYWN0aW9uU2hl
ZXRBc3Npc3RhbnQgc2hvd0ltYWdlU2hlZXRdOwotfQotCi0tICh2b2lkKV9zaG93TGlua1NoZWV0
Ci17Ci0gICAgW19hY3Rpb25TaGVldEFzc2lzdGFudCBzaG93TGlua1NoZWV0XTsKLX0KLQotLSAo
dm9pZClfc2hvd0RhdGFEZXRlY3RvcnNTaGVldAotewotICAgIFtfYWN0aW9uU2hlZXRBc3Npc3Rh
bnQgc2hvd0RhdGFEZXRlY3RvcnNTaGVldF07Ci19Ci0KLS0gKFNFTClfYWN0aW9uRm9yTG9uZ1By
ZXNzCi17Ci0gICAgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1l
ID09ICJJTUciKQotICAgICAgICByZXR1cm4gQHNlbGVjdG9yKF9zaG93SW1hZ2VTaGVldCk7Ci0g
ICAgZWxzZSBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uY2xpY2thYmxlRWxlbWVudE5hbWUgPT0g
IkEiKSB7Ci0gICAgICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpf
cG9zaXRpb25JbmZvcm1hdGlvbi51cmxdOwotICAgICAgICBpZiAoW1tnZXRERERldGVjdGlvbkNv
bnRyb2xsZXJDbGFzcygpIHRhcEFuZEhvbGRTY2hlbWVzXSBjb250YWluc09iamVjdDpbdGFyZ2V0
VVJMIHNjaGVtZV1dKQotICAgICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihfc2hvd0RhdGFEZXRl
Y3RvcnNTaGVldCk7Ci0gICAgICAgIHJldHVybiBAc2VsZWN0b3IoX3Nob3dMaW5rU2hlZXQpOwot
ICAgIH0KLSAgICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKWVuc3VyZVBvc2l0aW9uSW5mb3Jt
YXRpb25Jc1VwVG9EYXRlOihDR1BvaW50KXBvaW50Ci17Ci0gICAgaWYgKCFfaGFzVmFsaWRQb3Np
dGlvbkluZm9ybWF0aW9uIHx8IHJvdW5kZWRJbnRQb2ludChwb2ludCkgIT0gX3Bvc2l0aW9uSW5m
b3JtYXRpb24ucG9pbnQpIHsKLSAgICAgICAgX3BhZ2UtPmdldFBvc2l0aW9uSW5mb3JtYXRpb24o
cm91bmRlZEludFBvaW50KHBvaW50KSwgX3Bvc2l0aW9uSW5mb3JtYXRpb24pOwotICAgICAgICBf
aGFzVmFsaWRQb3NpdGlvbkluZm9ybWF0aW9uID0gWUVTOwotICAgIH0KLX0KLQotLSAodm9pZClf
dXBkYXRlUG9zaXRpb25JbmZvcm1hdGlvbgotewotICAgIF9oYXNWYWxpZFBvc2l0aW9uSW5mb3Jt
YXRpb24gPSBOTzsKLSAgICBfcGFnZS0+cmVxdWVzdFBvc2l0aW9uSW5mb3JtYXRpb24oX3Bvc2l0
aW9uSW5mb3JtYXRpb24ucG9pbnQpOwotfQotCi0tIChCT09MKWdlc3R1cmVSZWNvZ25pemVyU2hv
dWxkQmVnaW46KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgotewotICAg
IENHUG9pbnQgcG9pbnQgPSBbZ2VzdHVyZVJlY29nbml6ZXIgbG9jYXRpb25JblZpZXc6c2VsZl07
Ci0KLSAgICBpZiAoZ2VzdHVyZVJlY29nbml6ZXIgPT0gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1
cmVSZWNvZ25pemVyCi0gICAgICAgIHx8IGdlc3R1cmVSZWNvZ25pemVyID09IF9kb3VibGVUYXBH
ZXN0dXJlUmVjb2duaXplcgotICAgICAgICB8fCBnZXN0dXJlUmVjb2duaXplciA9PSBfdHdvRmlu
Z2VyRG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXIKLSAgICAgICAgfHwgZ2VzdHVyZVJlY29nbml6
ZXIgPT0gX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyKSB7Ci0KLSAgICAgICAgaWYgKF90ZXh0
U2VsZWN0aW9uQXNzaXN0YW50KSB7Ci0gICAgICAgICAgICAvLyBSZXF1ZXN0IGluZm9ybWF0aW9u
IGFib3V0IHRoZSBwb3NpdGlvbiB3aXRoIHN5bmMgbWVzc2FnZS4KLSAgICAgICAgICAgIC8vIElm
IHRoZSBhc3Npc3RlZCBub2RlIGlzIHRoZSBzYW1lLCBwcmV2ZW50IHRoZSBnZXN0dXJlLgotICAg
ICAgICAgICAgX3BhZ2UtPmdldFBvc2l0aW9uSW5mb3JtYXRpb24ocm91bmRlZEludFBvaW50KHBv
aW50KSwgX3Bvc2l0aW9uSW5mb3JtYXRpb24pOwotICAgICAgICAgICAgX2hhc1ZhbGlkUG9zaXRp
b25JbmZvcm1hdGlvbiA9IFlFUzsKLSAgICAgICAgICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlv
bi5ub2RlQXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBO
TzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChnZXN0dXJlUmVjb2duaXplciA9PSBfaGln
aGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIpIHsKLSAgICAgICAgaWYgKF90ZXh0U2Vs
ZWN0aW9uQXNzaXN0YW50KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGlmZmVyZW50IG5v
ZGUgdGhhbiB0aGUgYXNzaXN0ZWQgb25lLgotICAgICAgICAgICAgLy8gUHJldmVudCB0aGUgZ2Vz
dHVyZSBpZiB0aGVyZSBpcyBubyBub2RlLgotICAgICAgICAgICAgLy8gQWxsb3cgdGhlIGdlc3R1
cmUgaWYgaXQgaXMgYSBub2RlIHRoYXQgd2FudHMgaGlnaGxpZ2h0IG9yIGlmIHRoZXJlIGlzIGFu
IGFjdGlvbiBmb3IgaXQuCi0gICAgICAgICAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24uY2xp
Y2thYmxlRWxlbWVudE5hbWUuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5POwot
ICAgICAgICAgICAgcmV0dXJuIFtzZWxmIF9hY3Rpb25Gb3JMb25nUHJlc3NdICE9IG5pbDsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgbm8gaWRlYSBhYm91
dCB3aGF0IGlzIGF0IHRoZSBsb2NhdGlvbi4KLSAgICAgICAgICAgIC8vIFNlbmQgYW5kIGFzeW5j
IG1lc3NhZ2UgdG8gZmluZCBvdXQuCi0gICAgICAgICAgICBfaGFzVmFsaWRQb3NpdGlvbkluZm9y
bWF0aW9uID0gTk87Ci0gICAgICAgICAgICBfcGFnZS0+cmVxdWVzdFBvc2l0aW9uSW5mb3JtYXRp
b24ocm91bmRlZEludFBvaW50KHBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gWUVTOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGdlc3R1cmVSZWNvZ25pemVyID09IF9sb25nUHJlc3NH
ZXN0dXJlUmVjb2duaXplcikgewotICAgICAgICAvLyBVc2UgdGhlIGluZm9ybWF0aW9uIHJldHJp
ZXZlZCB3aXRoIG9uZSBvZiB0aGUgcHJldmlvdXMgY2FsbHMKLSAgICAgICAgLy8gdG8gZ2VzdHVy
ZVJlY29nbml6ZXJTaG91bGRCZWdpbi4KLSAgICAgICAgLy8gRm9yY2UgYSBzeW5jIGNhbGwgaWYg
bm90IHJlYWR5IHlldC4KLSAgICAgICAgW3NlbGYgZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbklz
VXBUb0RhdGU6cG9pbnRdOwotCi0gICAgICAgIGlmIChfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCkg
ewotICAgICAgICAgICAgLy8gUHJldmVudCB0aGUgZ2VzdHVyZSBpZiBpdCBpcyB0aGUgc2FtZSBu
b2RlLgotICAgICAgICAgICAgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLm5vZGVBdFBvc2l0aW9u
SXNBc3Npc3RlZE5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gUHJldmVudCB0aGUgZ2VzdHVyZSBpZiB0aGVyZSBpcyBubyBh
Y3Rpb24gZm9yIHRoZSBub2RlLgotICAgICAgICAgICAgcmV0dXJuIFtzZWxmIF9hY3Rpb25Gb3JM
b25nUHJlc3NdICE9IG5pbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChnZXN0dXJlUmVj
b2duaXplciA9PSBfdHdvRmluZ2VyUGFuR2VzdHVyZVJlY29nbml6ZXIpIHsKLSAgICAgICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gWUVTOwotfQotCi0tICh2b2lkKV9j
YW5jZWxJbnRlcmFjdGlvbgotewotICAgIF9pc1RhcEhpZ2hsaWdodElEVmFsaWQgPSBOTzsKLSAg
ICBbX2hpZ2hsaWdodFZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci19Ci0KLS0gKEJPT0wpaGFz
U2VsZWN0YWJsZVBvc2l0aW9uQXRQb2ludDooQ0dQb2ludClwb2ludAotewotICAgIFtzZWxmIGVu
c3VyZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1VwVG9EYXRlOnBvaW50XTsKLSAgICAvLyBGSVhNRTog
VGhpcyBjaGVjayBuZWVkcyB0byBiZSBleHRlbmRlZCB0byBpbmNsdWRlIG90aGVyIGVsZW1lbnRz
LgotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHJlamVjdCBwb3NpdGlvbnMgdGhhdCB3aWxsIGxl
YWQgdG8gYSB2ZXJ5IGxhcmdlIHNlbGVjdGlvbi4KLSAgICByZXR1cm4gX3Bvc2l0aW9uSW5mb3Jt
YXRpb24uY2xpY2thYmxlRWxlbWVudE5hbWUgIT0gIklNRyIgJiYgX3Bvc2l0aW9uSW5mb3JtYXRp
b24uY2xpY2thYmxlRWxlbWVudE5hbWUgIT0gIkEiICYmICFfcG9zaXRpb25JbmZvcm1hdGlvbi5z
ZWxlY3Rpb25SZWN0cy5pc0VtcHR5KCk7Ci19Ci0KLS0gKEJPT0wpcG9pbnRJc0luQXNzaXN0ZWRO
b2RlOihDR1BvaW50KXBvaW50Ci17Ci0gICAgW3NlbGYgZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlv
bklzVXBUb0RhdGU6cG9pbnRdOwotICAgIHJldHVybiBfcG9zaXRpb25JbmZvcm1hdGlvbi5ub2Rl
QXRQb3NpdGlvbklzQXNzaXN0ZWROb2RlOwotfQotCi0tIChOU0FycmF5ICopd2ViU2VsZWN0aW9u
UmVjdHMKLXsKLSAgICB1bnNpZ25lZCBzaXplID0gX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0
aW9uUmVjdHMuc2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIE5TTXV0YWJsZUFycmF5ICp3ZWJSZWN0cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhD
YXBhY2l0eTpzaXplXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7
Ci0gICAgICAgIGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvblJlY3QmIGNvcmVSZWN0ID0gX3BhZ2Ut
PmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uUmVjdHNbaV07Ci0gICAgICAgIFdlYlNlbGVjdGlvblJl
Y3QgKndlYlJlY3QgPSBbV2ViU2VsZWN0aW9uUmVjdCBzZWxlY3Rpb25SZWN0XTsKLSAgICAgICAg
d2ViUmVjdC5yZWN0ID0gY29yZVJlY3QucmVjdCgpOwotICAgICAgICB3ZWJSZWN0LndyaXRpbmdE
aXJlY3Rpb24gPSBjb3JlUmVjdC5kaXJlY3Rpb24oKSA9PSBMVFIgPyBXS1dyaXRpbmdEaXJlY3Rp
b25MZWZ0VG9SaWdodCA6IFdLV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwotICAgICAgICB3
ZWJSZWN0LmlzTGluZUJyZWFrID0gY29yZVJlY3QuaXNMaW5lQnJlYWsoKTsKLSAgICAgICAgd2Vi
UmVjdC5pc0ZpcnN0T25MaW5lID0gY29yZVJlY3QuaXNGaXJzdE9uTGluZSgpOwotICAgICAgICB3
ZWJSZWN0LmlzTGFzdE9uTGluZSA9IGNvcmVSZWN0LmlzTGFzdE9uTGluZSgpOwotICAgICAgICB3
ZWJSZWN0LmNvbnRhaW5zU3RhcnQgPSBjb3JlUmVjdC5jb250YWluc1N0YXJ0KCk7Ci0gICAgICAg
IHdlYlJlY3QuY29udGFpbnNFbmQgPSBjb3JlUmVjdC5jb250YWluc0VuZCgpOwotICAgICAgICB3
ZWJSZWN0LmlzSW5GaXhlZFBvc2l0aW9uID0gY29yZVJlY3QuaXNJbkZpeGVkUG9zaXRpb24oKTsK
LSAgICAgICAgd2ViUmVjdC5pc0hvcml6b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsK
LSAgICAgICAgW3dlYlJlY3RzIGFkZE9iamVjdDp3ZWJSZWN0XTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gd2ViUmVjdHM7Ci19Ci0KLS0gKHZvaWQpX2hpZ2hsaWdodExvbmdQcmVzc1JlY29nbml6ZWQ6
KFVJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgotewotICAg
IEFTU0VSVChnZXN0dXJlUmVjb2duaXplciA9PSBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJl
Y29nbml6ZXIpOwotCi0gICAgc3dpdGNoIChbZ2VzdHVyZVJlY29nbml6ZXIgc3RhdGVdKSB7Ci0g
ICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbjoKLSAgICAgICAgX3BhZ2UtPnRh
cEhpZ2hsaWdodEF0UG9zaXRpb24oW2dlc3R1cmVSZWNvZ25pemVyIHN0YXJ0UG9pbnRdLCBfbGF0
ZXN0VGFwSGlnaGxpZ2h0SUQpOwotICAgICAgICBfaXNUYXBIaWdobGlnaHRJRFZhbGlkID0gWUVT
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVk
OgotICAgICAgICBpZiAoIV9wb3NpdGlvbkluZm9ybWF0aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1l
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFtzZWxmIF9hdHRlbXB0Q2xpY2tBdExvY2F0aW9uOltn
ZXN0dXJlUmVjb2duaXplciBzdGFydFBvaW50XV07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VUlHZXN0dXJlUmVjb2duaXplclN0YXRlQ2FuY2VsbGVkOgotICAgICAgICBbc2VsZiBfY2FuY2Vs
SW50ZXJhY3Rpb25dOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpX2xvbmdQcmVzc1JlY29nbml6ZWQ6KFVJTG9uZ1ByZXNz
R2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgotewotICAgIEFTU0VSVChnZXN0
dXJlUmVjb2duaXplciA9PSBfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIpOwotCi0gICAgaWYg
KFtnZXN0dXJlUmVjb2duaXplciBzdGF0ZV0gPT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVn
YW4pIHsKLSAgICAgICAgU0VMIGFjdGlvbiA9IFtzZWxmIF9hY3Rpb25Gb3JMb25nUHJlc3NdOwot
ICAgICAgICBpZiAoYWN0aW9uKQotICAgICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOmFj
dGlvbl07Ci0gICAgfQotfQotCi0tICh2b2lkKV9zaW5nbGVUYXBSZWNvZ25pemVkOihVSVRhcEdl
c3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKLXsKLSAgICBBU1NFUlQoZ2VzdHVy
ZVJlY29nbml6ZXIgPT0gX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyKTsKLQotICAgIGlmIChf
d2ViU2VsZWN0aW9uQXNzaXN0YW50ICYmICFbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCBzaG91bGRI
YW5kbGVTaW5nbGVUYXBBdFBvaW50Omdlc3R1cmVSZWNvZ25pemVyLmxvY2F0aW9uXSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgY2xlYXJTZWxlY3Rpb25d
OwotCi0gICAgW3NlbGYgX2F0dGVtcHRDbGlja0F0TG9jYXRpb246W2dlc3R1cmVSZWNvZ25pemVy
IGxvY2F0aW9uXV07Ci19Ci0KLS0gKHZvaWQpX2RvdWJsZVRhcFJlY29nbml6ZWQ6KFVJVGFwR2Vz
dHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgotewotICAgIC8vIEZJWE1FOiBBZGQg
aW1wbGVtZW50YXRpb24uCi19Ci0KLS0gKHZvaWQpX3R3b0ZpbmdlckRvdWJsZVRhcFJlY29nbml6
ZWQ6KFVJVGFwR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgotewotICAgIC8v
IEZJWE1FOiBBZGQgaW1wbGVtZW50YXRpb24uCi19Ci0KLS0gKHZvaWQpX3R3b0ZpbmdlclBhblJl
Y29nbml6ZWQ6KFVJUGFuR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgotewot
ICAgIC8vIEZJWE1FOiBBZGQgaW1wbGVtZW50YXRpb24uCi19Ci0KLS0gKHZvaWQpX2F0dGVtcHRD
bGlja0F0TG9jYXRpb246KENHUG9pbnQpbG9jYXRpb24KLXsKLSAgICAvLyBGSVhNRTogSWRlYWxs
eSwgd2Ugc2hvdWxkIGFsd2F5cyBwcm92aWRlIHNvbWUgdmlzdWFsIGZlZWRiYWNrIG9uIGNsaWNr
LiBJZiBhIHNob3J0IHRhcCBkaWQgbm90IHRyaWdnZXIgdGhlCi0gICAgLy8gdGFwIGhpZ2hsaWdo
dCwgd2Ugc2hvdWxkIHNob3cgb25lIGJhc2VkIG9uIGEgdGltZXIgaWYgd2UgY29tbWl0IHRoZSBz
eW50aGV0aWMgbW91c2UgZXZlbnRzLgotICAgIFtzZWxmIF9jYW5jZWxJbnRlcmFjdGlvbl07Ci0K
LSAgICBpZiAoIVtzZWxmIGlzRmlyc3RSZXNwb25kZXJdKQotICAgICAgICBbc2VsZiBiZWNvbWVG
aXJzdFJlc3BvbmRlcl07Ci0KLSAgICBfcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkhhbmRsZVRhcChJbnRQb2ludChsb2NhdGlvbikpLCBfcGFnZS0+cGFnZUlEKCkpOwot
fQotCi0tICh2b2lkKXVzZVNlbGVjdGlvbkFzc2lzdGFudFdpdGhNb2RlOihVSVdlYlNlbGVjdGlv
bk1vZGUpc2VsZWN0aW9uTW9kZQotewotICAgIGlmIChzZWxlY3Rpb25Nb2RlID09IFVJV2ViU2Vs
ZWN0aW9uTW9kZVdlYikgewotICAgICAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpIHsK
LSAgICAgICAgICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCBkZWFjdGl2YXRlU2VsZWN0aW9u
XTsKLSAgICAgICAgICAgIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50ID0gbmlsOwotICAgICAgICB9
Ci0gICAgICAgIGlmICghX3dlYlNlbGVjdGlvbkFzc2lzdGFudCkKLSAgICAgICAgICAgIF93ZWJT
ZWxlY3Rpb25Bc3Npc3RhbnQgPSBhZG9wdE5TKFtbVUlXS1NlbGVjdGlvbkFzc2lzdGFudCBhbGxv
Y10gaW5pdFdpdGhWaWV3OnNlbGZdKTsKLSAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbk1vZGUgPT0g
VUlXZWJTZWxlY3Rpb25Nb2RlVGV4dE9ubHkpIHsKLSAgICAgICAgaWYgKF93ZWJTZWxlY3Rpb25B
c3Npc3RhbnQpCi0gICAgICAgICAgICBfd2ViU2VsZWN0aW9uQXNzaXN0YW50ID0gbmlsOwotCi0g
ICAgICAgIGlmICghX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpCi0gICAgICAgICAgICBfdGV4dFNl
bGVjdGlvbkFzc2lzdGFudCA9IGFkb3B0TlMoW1tVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50
IGFsbG9jXSBpbml0V2l0aFZpZXc6c2VsZl0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IC8vIFJlc2V0IHRoZSBnZXN0dXJlIHJlY29nbml6ZXJzIGluIGNhc2UgZWRpdGliaWxpdHkgaGFz
IGNoYW5nZWQuCi0gICAgICAgICAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgc2V0R2VzdHVy
ZVJlY29nbml6ZXJzXTsKLSAgICAgICAgfQotCi0gICAgICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lz
dGFudCBhY3RpdmF0ZVNlbGVjdGlvbl07Ci0gICAgfQotfQotCi0tICh2b2lkKWNsZWFyU2VsZWN0
aW9uCi17Ci0gICAgX3BhZ2UtPmNsZWFyU2VsZWN0aW9uKCk7Ci19Ci0KLS0gKHZvaWQpX3Bvc2l0
aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6KGNvbnN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uJilpbmZvCi17Ci0gICAgX3Bvc2l0aW9uSW5mb3JtYXRpb24gPSBpbmZvOwotICAgIF9o
YXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb24gPSBZRVM7Ci0gICAgaWYgKF9hY3Rpb25TaGVldEFz
c2lzdGFudCkKLSAgICAgICAgW19hY3Rpb25TaGVldEFzc2lzdGFudCB1cGRhdGVTaGVldFBvc2l0
aW9uXTsKLX0KLQotLSAodm9pZClfd2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nCi17Ci0gICAg
W193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgd2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nUGFnZV07
Ci0gICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IHdpbGxTdGFydFNjcm9sbGluZ092ZXJmbG93
XTsKLX0KLQotLSAodm9pZClfd2lsbFN0YXJ0VXNlclRyaWdnZXJlZFNjcm9sbGluZ09yWm9vbWlu
ZwotewotICAgIF9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25vdXNseSA9IFlFUzsKLX0KLQot
LSAodm9pZClfZGlkRW5kU2Nyb2xsaW5nT3Jab29taW5nCi17Ci0gICAgW193ZWJTZWxlY3Rpb25B
c3Npc3RhbnQgZGlkRW5kU2Nyb2xsaW5nT3Jab29taW5nUGFnZV07Ci0gICAgW190ZXh0U2VsZWN0
aW9uQXNzaXN0YW50IGRpZEVuZFNjcm9sbGluZ092ZXJmbG93XTsKLX0KLQotLSAoVUlWaWV3ICop
aW5wdXRBY2Nlc3NvcnlWaWV3Ci17Ci0gICAgaWYgKCFfaXNFZGl0YWJsZSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAKLSAgICBpZiAoIV9hY2Nlc3NvcnkpIHsKLSAgICAgICAgX2FjY2Vzc29y
eSA9IFtbVUlXZWJGb3JtQWNjZXNzb3J5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgX2FjY2Vzc29y
eS5kZWxlZ2F0ZSA9IHNlbGY7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBfYWNjZXNzb3J5Owot
fQotCi0tIChOU0FycmF5ICopc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzRm9yQ3VycmVudFNlbGVj
dGlvbgotewotICAgIGlmIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc05vbmUpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgc3RhdGljIE5TTXV0YWJsZUFycmF5ICpyaWNo
VHlwZXMgPSBuaWw7Ci0gICAgc3RhdGljIE5TTXV0YWJsZUFycmF5ICpwbGFpblRleHRUeXBlcyA9
IG5pbDsKLSAgICBpZiAoIXBsYWluVGV4dFR5cGVzKSB7Ci0gICAgICAgIHBsYWluVGV4dFR5cGVz
ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgICAgIC8vIEZJWE1FOiBzaG91
bGQgYWRkIFtwbGFpblRleHRUeXBlcyBhZGRPYmplY3Q6KGlkKWtVVFR5cGVVUkxdOwotICAgICAg
ICAvLyB3aGVuIHdlIGZpZ3VyZSBvdXQgaG93IHRvIHNoYXJlIHRoaXMgdHlwZSBiZXR3ZWVuIFdl
YkNvcmUgYW5kIFdlYktpdDIKLSAgICAgICAgW3BsYWluVGV4dFR5cGVzIGFkZE9iamVjdHNGcm9t
QXJyYXk6VUlQYXN0ZWJvYXJkVHlwZUxpc3RTdHJpbmddOwotCi0gICAgICAgIHJpY2hUeXBlcyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgICAgICAvLyBGSVhNRTogc2hvdWxk
IGFkZCBbcmljaFR5cGVzIGFkZE9iamVjdDooUGFzdGVib2FyZFR5cGVzOjpXZWJBcmNoaXZlUGJv
YXJkVHlwZSldOwotICAgICAgICAvLyB3aGVuIHdlIGZpZ3VyZSBvdXQgaG93IHRvIHNoYXJlIHRo
aXMgdHlwZSBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktpdDIKLSAgICAgICAgW3JpY2hUeXBlcyBh
ZGRPYmplY3RzRnJvbUFycmF5OlVJUGFzdGVib2FyZFR5cGVMaXN0SW1hZ2VdOwotICAgICAgICBb
cmljaFR5cGVzIGFkZE9iamVjdHNGcm9tQXJyYXk6cGxhaW5UZXh0VHlwZXNdOwotICAgIH0KLQot
ICAgIHJldHVybiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUp
ID8gcmljaFR5cGVzIDogcGxhaW5UZXh0VHlwZXM7Ci19Ci0KLS0gKHZvaWQpX2FkZFNob3J0Y3V0
OihpZClzZW5kZXIKLXsKLSAgICAvLyBGSVhNRTogVG8gYmUgaW1wbGVtZW50ZWQuCi19Ci0KLS0g
KHZvaWQpX3Byb21wdEZvclJlcGxhY2U6KGlkKXNlbmRlcgotewotICAgIC8vIEZJWE1FOiBUbyBi
ZSBpbXBsZW1lbnRlZC4KLX0KLQotLSAodm9pZClyZXBsYWNlOihpZClzZW5kZXIKLXsKLSAgICAv
LyBGSVhNRTogVG8gYmUgaW1wbGVtZW50ZWQuCi19Ci0KLS0gKEJPT0wpY2FuUGVyZm9ybUFjdGlv
bjooU0VMKWFjdGlvbiB3aXRoU2VuZGVyOihpZClzZW5kZXIKLXsKLSAgICBCT09MIGhhc1dlYlNl
bGVjdGlvbiA9IF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgJiYgIUNHUmVjdElzRW1wdHkoX3dlYlNl
bGVjdGlvbkFzc2lzdGFudC5nZXQoKS5zZWxlY3Rpb25GcmFtZSk7Ci0KLSAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3Rvcihfc2hvd1RleHRTdHlsZU9wdGlvbnM6KSkKLSAgICAgICAgcmV0dXJuIF9w
YWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlICYmIF9wYWdlLT5lZGl0
b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UgJiYgIV9zaG93aW5nVGV4dFN0eWxlT3B0aW9uczsK
LSAgICBpZiAoX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zKQotICAgICAgICByZXR1cm4gKGFjdGlv
biA9PSBAc2VsZWN0b3IodG9nZ2xlQm9sZGZhY2U6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHRv
Z2dsZUl0YWxpY3M6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZVVuZGVybGluZTopKTsK
LSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjdXQ6KSkKLSAgICAgICAgcmV0dXJuICFfcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCAmJiBfcGFnZS0+ZWRpdG9yU3RhdGUo
KS5pc0NvbnRlbnRFZGl0YWJsZSAmJiBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1Jh
bmdlOwotICAgIAotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlOikpIHsKLSAgICAg
ICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSB8fCAhX3BhZ2UtPmVk
aXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpCi0gICAgICAgICAgICByZXR1cm4gTk87Ci0g
ICAgICAgIFVJUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtVSVBhc3RlYm9hcmQgZ2VuZXJhbFBh
c3RlYm9hcmRdOwotICAgICAgICBOU0FycmF5ICp0eXBlcyA9IFtzZWxmIHN1cHBvcnRlZFBhc3Rl
Ym9hcmRUeXBlc0ZvckN1cnJlbnRTZWxlY3Rpb25dOwotICAgICAgICBOU0luZGV4U2V0ICppbmRp
Y2VzID0gW05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXhlc0luUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgW3Bhc3RlYm9hcmQgbnVtYmVyT2ZJdGVtc10pXTsKLSAgICAgICAgcmV0dXJuIFtwYXN0ZWJv
YXJkIGNvbnRhaW5zUGFzdGVib2FyZFR5cGVzOnR5cGVzIGluSXRlbVNldDppbmRpY2VzXTsKLSAg
ICB9Ci0KLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihjb3B5OikpIHsKLSAgICAgICAgaWYg
KF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkKQotICAgICAgICAgICAgcmV0
dXJuIE5POwotICAgICAgICByZXR1cm4gaGFzV2ViU2VsZWN0aW9uIHx8IF9wYWdlLT5lZGl0b3JT
dGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2U7Ci0gICAgfQotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2Vs
ZWN0b3IoX2RlZmluZTopKSB7Ci0gICAgICAgIGlmIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0lu
UGFzc3dvcmRGaWVsZCB8fCAhKGhhc1dlYlNlbGVjdGlvbiB8fCBfcGFnZS0+ZWRpdG9yU3RhdGUo
KS5zZWxlY3Rpb25Jc1JhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBOTzsKLQotICAgICAgICBO
U1VJbnRlZ2VyIHRleHRMZW5ndGggPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3RlZFRleHRM
ZW5ndGg7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgY2FsbGluZyBVSVJlZmVyZW5j
ZUxpYnJhcnlWaWV3Q29udHJvbGxlciB0byBjaGVjayBpZiB0aGUgbGVuZ3RoIGlzCi0gICAgICAg
IC8vIGFjY2VwdGFibGUsIGJ1dCB0aGUgaW50ZXJmYWNlIHRha2VzIGEgc3RyaW5nLgotICAgICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vMTUyNTQ0MDY+Ci0gICAgICAgIGlmICghdGV4dExlbmd0aCB8
fCB0ZXh0TGVuZ3RoID4gMjAwKQotICAgICAgICAgICAgcmV0dXJuIE5POwotCi0gICAgICAgIHJl
dHVybiBZRVM7Ci0gICAgfQotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2FkZFNob3J0
Y3V0OikpIHsKLSAgICAgICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZp
ZWxkIHx8ICEoaGFzV2ViU2VsZWN0aW9uIHx8IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlv
bklzUmFuZ2UpKQotICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICAvLyBGSVhNRTogbmVl
ZCB0byBpbXBsZW1lbnQsIHJldHVybmluZyBOTyBhbHdheXMgZm9yIG5vdy4KLSAgICAgICAgcmV0
dXJuIE5POwotICAgIH0KLQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9wcm9tcHRGb3JS
ZXBsYWNlOikpIHsKLSAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8gaW1wbGVtZW50Ci0gICAgICAg
IHJldHVybiBOTzsKLSAgICB9Ci0KLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihzZWxlY3Q6
KSkgewotICAgICAgICAvLyBEaXNhYmxlIHNlbGVjdCBpbiBwYXNzd29yZCBmaWVsZHMgc28gdGhh
dCB5b3UgY2FuJ3Qgc2VlIHdvcmQgYm91bmRhcmllcy4KLSAgICAgICAgcmV0dXJuICFfcGFnZS0+
ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCAmJiBbc2VsZiBoYXNDb250ZW50XSAmJiAh
X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNOb25lICYmICFfcGFnZS0+ZWRpdG9yU3Rh
dGUoKS5zZWxlY3Rpb25Jc1JhbmdlOwotICAgIH0KLQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKHNlbGVjdEFsbDopKSB7Ci0gICAgICAgIGlmIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxl
Y3Rpb25Jc05vbmUgfHwgIVtzZWxmIGhhc0NvbnRlbnRdKQotICAgICAgICAgICAgcmV0dXJuIE5P
OwotICAgICAgICBpZiAoIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UpCi0g
ICAgICAgICAgICByZXR1cm4gWUVTOwotICAgICAgICAvLyBFbmFibGUgc2VsZWN0QWxsIGZvciBu
b24tZWRpdGFibGUgdGV4dCwgd2hlcmUgdGhlIHVzZXIgY2FuJ3QgYWNjZXNzCi0gICAgICAgIC8v
IHRoaXMgY29tbWFuZCB2aWEgbG9uZy1wcmVzcyB0byBnZXQgYSBjYXJldC4KLSAgICAgICAgaWYg
KF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKQotICAgICAgICAgICAgcmV0
dXJuIE5POwotICAgICAgICAvLyBEb24ndCBhdHRlbXB0IHNlbGVjdEFsbCB3aXRoIGdlbmVyYWwg
d2ViIGNvbnRlbnQuCi0gICAgICAgIGlmIChoYXNXZWJTZWxlY3Rpb24pCi0gICAgICAgICAgICBy
ZXR1cm4gTk87Ci0gICAgICAgIC8vIEZJWE1FOiBPbmx5IGVuYWJsZSBpZiB0aGUgc2VsZWN0aW9u
IGRvZXNuJ3QgYWxyZWFkeSBzcGFuIHRoZSBlbnRpcmUgZG9jdW1lbnQuCi0gICAgICAgIHJldHVy
biBZRVM7Ci0gICAgfQotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocmVwbGFjZTopKQot
ICAgICAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUgJiYg
IV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkOwotCi0gICAgcmV0dXJuIFtz
dXBlciBjYW5QZXJmb3JtQWN0aW9uOmFjdGlvbiB3aXRoU2VuZGVyOnNlbmRlcl07Ci19Ci0KLS0g
KHZvaWQpX3Jlc2V0U2hvd2luZ1RleHRTdHlsZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRp
b24KLXsKLSAgICBfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMgPSBOTzsKLSAgICBbX3RleHRTZWxl
Y3Rpb25Bc3Npc3RhbnQgaGlkZVRleHRTdHlsZU9wdGlvbnNdOwotfQotCi0tICh2b2lkKV9wZXJm
b3JtQWN0aW9uOihXS1NoZWV0QWN0aW9ucylhY3Rpb24KLXsKLSAgICBfcGFnZS0+cGVyZm9ybUFj
dGlvbk9uRWxlbWVudCgodWludDMyX3QpYWN0aW9uKTsKLX0KLQotLSAodm9pZCljb3B5OihpZClz
ZW5kZXIKLXsKLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0ZXJhbCgiY29w
eSIpKTsKLX0KLQotLSAodm9pZCljdXQ6KGlkKXNlbmRlcgotewotICAgIFtzZWxmLmlucHV0RGVs
ZWdhdGUgdGV4dFdpbGxDaGFuZ2U6c2VsZl07Ci0KLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21t
YW5kKEFTQ0lJTGl0ZXJhbCgiY3V0IikpOwotCi0gICAgW3NlbGYuaW5wdXREZWxlZ2F0ZSB0ZXh0
RGlkQ2hhbmdlOnNlbGZdOwotfQotCi0tICh2b2lkKXBhc3RlOihpZClzZW5kZXIKLXsKLSAgICBb
c2VsZi5pbnB1dERlbGVnYXRlIHRleHRXaWxsQ2hhbmdlOnNlbGZdOwotICAgIAotICAgIF9wYWdl
LT5leGVjdXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJwYXN0ZSIpKTsKLSAgICAKLSAgICBb
c2VsZi5pbnB1dERlbGVnYXRlIHRleHREaWRDaGFuZ2U6c2VsZl07Ci19Ci0KLS0gKHZvaWQpc2Vs
ZWN0OihpZClzZW5kZXIKLXsKLSAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgc2VsZWN0V29y
ZF07Ci0gICAgLy8gV2UgY2Fubm90IHVzZSBzZWxlY3RXb3JkIGNvbW1hbmQsIGJlY2F1c2Ugd2Ug
d2FudCB0byBiZSBhYmxlIHRvIHNlbGVjdCB0aGUgd29yZCBldmVuIHdoZW4gaXQgaXMgdGhlIGxh
c3QgaW4gdGhlIHBhcmFncmFwaC4KLSAgICBfcGFnZS0+ZXh0ZW5kU2VsZWN0aW9uKFdvcmRHcmFu
dWxhcml0eSk7Ci19Ci0KLS0gKHZvaWQpc2VsZWN0QWxsOihpZClzZW5kZXIKLXsKLSAgICBbX3Rl
eHRTZWxlY3Rpb25Bc3Npc3RhbnQgc2VsZWN0QWxsOnNlbmRlcl07Ci0gICAgX3BhZ2UtPmV4ZWN1
dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVyYWwoInNlbGVjdEFsbCIpKTsKLX0KLQotLSAodm9pZCl0
b2dnbGVCb2xkZmFjZTooaWQpc2VuZGVyCi17Ci0gICAgaWYgKCFfcGFnZS0+ZWRpdG9yU3RhdGUo
KS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX3BhZ2Ut
PmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVyYWwoInRvZ2dsZUJvbGQiKSk7Ci19Ci0KLS0g
KHZvaWQpdG9nZ2xlSXRhbGljczooaWQpc2VuZGVyCi17Ci0gICAgaWYgKCFfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
X3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVyYWwoInRvZ2dsZUl0YWxpYyIpKTsK
LX0KLQotLSAodm9pZCl0b2dnbGVVbmRlcmxpbmU6KGlkKXNlbmRlcgotewotICAgIGlmICghX3Bh
Z2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJ0b2dnbGVV
bmRlcmxpbmUiKSk7Ci19Ci0KLS0gKHZvaWQpX3Nob3dUZXh0U3R5bGVPcHRpb25zOihpZClzZW5k
ZXIKLXsKLSAgICBfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMgPSBZRVM7Ci0gICAgW190ZXh0U2Vs
ZWN0aW9uQXNzaXN0YW50IHNob3dUZXh0U3R5bGVPcHRpb25zXTsKLX0KLQotLSAodm9pZClfc2hv
d0RpY3Rpb25hcnk6KE5TU3RyaW5nICopdGV4dAotewotICAgIENHUmVjdCBwcmVzZW50YXRpb25S
ZWN0ID0gX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uUmVjdHNbMF0ucmVjdCgpOwotICAg
IGlmIChfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCkKLSAgICAgICAgW190ZXh0U2VsZWN0aW9uQXNz
aXN0YW50IHNob3dEaWN0aW9uYXJ5Rm9yOnRleHQgZnJvbVJlY3Q6cHJlc2VudGF0aW9uUmVjdF07
Ci0gICAgZWxzZQotICAgICAgICBbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCBzaG93RGljdGlvbmFy
eUZvcjp0ZXh0IGZyb21SZWN0OnByZXNlbnRhdGlvblJlY3RdOwotfQotCi0tICh2b2lkKV9kZWZp
bmU6KGlkKXNlbmRlcgotewotICAgIF9wYWdlLT5nZXRTZWxlY3Rpb25PckNvbnRlbnRzQXNTdHJp
bmcoU3RyaW5nQ2FsbGJhY2s6OmNyZWF0ZShbc2VsZl0oYm9vbCBlcnJvciwgU3RyaW5nSW1wbCog
c3RyaW5nKSB7Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKCFzdHJpbmcpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgTlNTdHJpbmcg
KmNvbnZlcnRlZFN0cmluZyA9ICpzdHJpbmc7Ci0gICAgICAgIFtzZWxmIF9zaG93RGljdGlvbmFy
eTpjb252ZXJ0ZWRTdHJpbmddOwotICAgIH0pKTsKLX0KLQotLy8gVUlXS0ludGVyYWN0aW9uVmll
d1Byb3RvY29sCi0KLXN0YXRpYyBpbmxpbmUgV0tHZXN0dXJlVHlwZSB0b1dLR2VzdHVyZVR5cGUo
VUlXS0dlc3R1cmVUeXBlIGdlc3R1cmVUeXBlKQotewotICAgIHN3aXRjaCAoZ2VzdHVyZVR5cGUp
IHsKLSAgICBjYXNlIFVJV0tHZXN0dXJlTG91cGU6Ci0gICAgICAgIHJldHVybiBXS0dlc3R1cmVM
b3VwZTsKLSAgICBjYXNlIFVJV0tHZXN0dXJlT25lRmluZ2VyVGFwOgotICAgICAgICByZXR1cm4g
V0tHZXN0dXJlT25lRmluZ2VyVGFwOwotICAgIGNhc2UgVUlXS0dlc3R1cmVUYXBBbmRBSGFsZjoK
LSAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVRhcEFuZEFIYWxmOwotICAgIGNhc2UgVUlXS0dlc3R1
cmVEb3VibGVUYXA6Ci0gICAgICAgIHJldHVybiBXS0dlc3R1cmVEb3VibGVUYXA7Ci0gICAgY2Fz
ZSBVSVdLR2VzdHVyZVRhcEFuZEhhbGY6Ci0gICAgICAgIHJldHVybiBXS0dlc3R1cmVUYXBBbmRI
YWxmOwotICAgIGNhc2UgVUlXS0dlc3R1cmVEb3VibGVUYXBJblVuZWRpdGFibGU6Ci0gICAgICAg
IHJldHVybiBXS0dlc3R1cmVEb3VibGVUYXBJblVuZWRpdGFibGU7Ci0gICAgY2FzZSBVSVdLR2Vz
dHVyZU9uZUZpbmdlclRhcEluVW5lZGl0YWJsZToKLSAgICAgICAgcmV0dXJuIFdLR2VzdHVyZU9u
ZUZpbmdlclRhcEluVW5lZGl0YWJsZTsKLSAgICBjYXNlIFVJV0tHZXN0dXJlT25lRmluZ2VyVGFw
U2VsZWN0c0FsbDoKLSAgICAgICAgcmV0dXJuIFdLR2VzdHVyZU9uZUZpbmdlclRhcFNlbGVjdHNB
bGw7Ci0gICAgY2FzZSBVSVdLR2VzdHVyZU9uZUZpbmdlckRvdWJsZVRhcDoKLSAgICAgICAgcmV0
dXJuIFdLR2VzdHVyZU9uZUZpbmdlckRvdWJsZVRhcDsKLSAgICBjYXNlIFVJV0tHZXN0dXJlT25l
RmluZ2VyVHJpcGxlVGFwOgotICAgICAgICByZXR1cm4gV0tHZXN0dXJlT25lRmluZ2VyVHJpcGxl
VGFwOwotICAgIGNhc2UgVUlXS0dlc3R1cmVUd29GaW5nZXJTaW5nbGVUYXA6Ci0gICAgICAgIHJl
dHVybiBXS0dlc3R1cmVUd29GaW5nZXJTaW5nbGVUYXA7Ci0gICAgY2FzZSBVSVdLR2VzdHVyZVR3
b0ZpbmdlclJhbmdlZFNlbGVjdEdlc3R1cmU6Ci0gICAgICAgIHJldHVybiBXS0dlc3R1cmVUd29G
aW5nZXJSYW5nZWRTZWxlY3RHZXN0dXJlOwotICAgIGNhc2UgVUlXS0dlc3R1cmVUYXBPbkxpbmtX
aXRoR2VzdHVyZToKLSAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVRhcE9uTGlua1dpdGhHZXN0dXJl
OwotICAgIGNhc2UgVUlXS0dlc3R1cmVNYWtlV2ViU2VsZWN0aW9uOgotICAgICAgICByZXR1cm4g
V0tHZXN0dXJlTWFrZVdlYlNlbGVjdGlvbjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIFdLR2VzdHVyZUxvdXBlOwotfQotCi1zdGF0aWMgaW5saW5lIFVJV0tH
ZXN0dXJlVHlwZSB0b1VJV0tHZXN0dXJlVHlwZShXS0dlc3R1cmVUeXBlIGdlc3R1cmVUeXBlKQot
ewotICAgIHN3aXRjaCAoZ2VzdHVyZVR5cGUpIHsKLSAgICBjYXNlIFdLR2VzdHVyZUxvdXBlOgot
ICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVMb3VwZTsKLSAgICBjYXNlIFdLR2VzdHVyZU9uZUZp
bmdlclRhcDoKLSAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlT25lRmluZ2VyVGFwOwotICAgIGNh
c2UgV0tHZXN0dXJlVGFwQW5kQUhhbGY6Ci0gICAgICAgIHJldHVybiBVSVdLR2VzdHVyZVRhcEFu
ZEFIYWxmOwotICAgIGNhc2UgV0tHZXN0dXJlRG91YmxlVGFwOgotICAgICAgICByZXR1cm4gVUlX
S0dlc3R1cmVEb3VibGVUYXA7Ci0gICAgY2FzZSBXS0dlc3R1cmVUYXBBbmRIYWxmOgotICAgICAg
ICByZXR1cm4gVUlXS0dlc3R1cmVUYXBBbmRIYWxmOwotICAgIGNhc2UgV0tHZXN0dXJlRG91Ymxl
VGFwSW5VbmVkaXRhYmxlOgotICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVEb3VibGVUYXBJblVu
ZWRpdGFibGU7Ci0gICAgY2FzZSBXS0dlc3R1cmVPbmVGaW5nZXJUYXBJblVuZWRpdGFibGU6Ci0g
ICAgICAgIHJldHVybiBVSVdLR2VzdHVyZU9uZUZpbmdlclRhcEluVW5lZGl0YWJsZTsKLSAgICBj
YXNlIFdLR2VzdHVyZU9uZUZpbmdlclRhcFNlbGVjdHNBbGw6Ci0gICAgICAgIHJldHVybiBVSVdL
R2VzdHVyZU9uZUZpbmdlclRhcFNlbGVjdHNBbGw7Ci0gICAgY2FzZSBXS0dlc3R1cmVPbmVGaW5n
ZXJEb3VibGVUYXA6Ci0gICAgICAgIHJldHVybiBVSVdLR2VzdHVyZU9uZUZpbmdlckRvdWJsZVRh
cDsKLSAgICBjYXNlIFdLR2VzdHVyZU9uZUZpbmdlclRyaXBsZVRhcDoKLSAgICAgICAgcmV0dXJu
IFVJV0tHZXN0dXJlT25lRmluZ2VyVHJpcGxlVGFwOwotICAgIGNhc2UgV0tHZXN0dXJlVHdvRmlu
Z2VyU2luZ2xlVGFwOgotICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVUd29GaW5nZXJTaW5nbGVU
YXA7Ci0gICAgY2FzZSBXS0dlc3R1cmVUd29GaW5nZXJSYW5nZWRTZWxlY3RHZXN0dXJlOgotICAg
ICAgICByZXR1cm4gVUlXS0dlc3R1cmVUd29GaW5nZXJSYW5nZWRTZWxlY3RHZXN0dXJlOwotICAg
IGNhc2UgV0tHZXN0dXJlVGFwT25MaW5rV2l0aEdlc3R1cmU6Ci0gICAgICAgIHJldHVybiBVSVdL
R2VzdHVyZVRhcE9uTGlua1dpdGhHZXN0dXJlOwotICAgIGNhc2UgV0tHZXN0dXJlTWFrZVdlYlNl
bGVjdGlvbjoKLSAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlTWFrZVdlYlNlbGVjdGlvbjsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgV0tTZWxlY3Rpb25Ub3VjaCB0b1dLU2VsZWN0aW9uVG91
Y2goVUlXS1NlbGVjdGlvblRvdWNoIHRvdWNoKQotewotICAgIHN3aXRjaCAodG91Y2gpIHsKLSAg
ICBjYXNlIFVJV0tTZWxlY3Rpb25Ub3VjaFN0YXJ0ZWQ6Ci0gICAgICAgIHJldHVybiBXS1NlbGVj
dGlvblRvdWNoU3RhcnRlZDsKLSAgICBjYXNlIFVJV0tTZWxlY3Rpb25Ub3VjaE1vdmVkOgotICAg
ICAgICByZXR1cm4gV0tTZWxlY3Rpb25Ub3VjaE1vdmVkOwotICAgIGNhc2UgVUlXS1NlbGVjdGlv
blRvdWNoRW5kZWQ6Ci0gICAgICAgIHJldHVybiBXS1NlbGVjdGlvblRvdWNoRW5kZWQ7Ci0gICAg
Y2FzZSBVSVdLU2VsZWN0aW9uVG91Y2hFbmRlZE1vdmluZ0ZvcndhcmQ6Ci0gICAgICAgIHJldHVy
biBXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdGb3J3YXJkOwotICAgIGNhc2UgVUlXS1NlbGVj
dGlvblRvdWNoRW5kZWRNb3ZpbmdCYWNrd2FyZDoKLSAgICAgICAgcmV0dXJuIFdLU2VsZWN0aW9u
VG91Y2hFbmRlZE1vdmluZ0JhY2t3YXJkOwotICAgIGNhc2UgVUlXS1NlbGVjdGlvblRvdWNoRW5k
ZWROb3RNb3Zpbmc6Ci0gICAgICAgIHJldHVybiBXS1NlbGVjdGlvblRvdWNoRW5kZWROb3RNb3Zp
bmc7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBXS1NlbGVj
dGlvblRvdWNoRW5kZWQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVUlXS1NlbGVjdGlvblRvdWNoIHRv
VUlXS1NlbGVjdGlvblRvdWNoKFdLU2VsZWN0aW9uVG91Y2ggdG91Y2gpCi17Ci0gICAgc3dpdGNo
ICh0b3VjaCkgewotICAgIGNhc2UgV0tTZWxlY3Rpb25Ub3VjaFN0YXJ0ZWQ6Ci0gICAgICAgIHJl
dHVybiBVSVdLU2VsZWN0aW9uVG91Y2hTdGFydGVkOwotICAgIGNhc2UgV0tTZWxlY3Rpb25Ub3Vj
aE1vdmVkOgotICAgICAgICByZXR1cm4gVUlXS1NlbGVjdGlvblRvdWNoTW92ZWQ7Ci0gICAgY2Fz
ZSBXS1NlbGVjdGlvblRvdWNoRW5kZWQ6Ci0gICAgICAgIHJldHVybiBVSVdLU2VsZWN0aW9uVG91
Y2hFbmRlZDsKLSAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hFbmRlZE1vdmluZ0ZvcndhcmQ6Ci0g
ICAgICAgIHJldHVybiBVSVdLU2VsZWN0aW9uVG91Y2hFbmRlZE1vdmluZ0ZvcndhcmQ7Ci0gICAg
Y2FzZSBXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdCYWNrd2FyZDoKLSAgICAgICAgcmV0dXJu
IFVJV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTW92aW5nQmFja3dhcmQ7Ci0gICAgY2FzZSBXS1NlbGVj
dGlvblRvdWNoRW5kZWROb3RNb3Zpbmc6Ci0gICAgICAgIHJldHVybiBVSVdLU2VsZWN0aW9uVG91
Y2hFbmRlZE5vdE1vdmluZzsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgV0tHZXN0dXJlUmVj
b2duaXplclN0YXRlIHRvV0tHZXN0dXJlUmVjb2duaXplclN0YXRlKFVJR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZSBzdGF0ZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBVSUdlc3R1
cmVSZWNvZ25pemVyU3RhdGVQb3NzaWJsZToKLSAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZVBvc3NpYmxlOwotICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVn
YW46Ci0gICAgICAgIHJldHVybiBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbjsKLSAgICBj
YXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNoYW5nZWQ6Ci0gICAgICAgIHJldHVybiBXS0dl
c3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkOwotICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXpl
clN0YXRlQ2FuY2VsbGVkOgotICAgICAgICByZXR1cm4gV0tHZXN0dXJlUmVjb2duaXplclN0YXRl
Q2FuY2VsbGVkOwotICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWQ6Ci0gICAg
ICAgIHJldHVybiBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZDsKLSAgICBjYXNlIFVJR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZUZhaWxlZDoKLSAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZUZhaWxlZDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVUlHZXN0dXJlUmVj
b2duaXplclN0YXRlIHRvVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKFdLR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZSBzdGF0ZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBXS0dlc3R1
cmVSZWNvZ25pemVyU3RhdGVQb3NzaWJsZToKLSAgICAgICAgcmV0dXJuIFVJR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZVBvc3NpYmxlOwotICAgIGNhc2UgV0tHZXN0dXJlUmVjb2duaXplclN0YXRlQmVn
YW46Ci0gICAgICAgIHJldHVybiBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbjsKLSAgICBj
YXNlIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNoYW5nZWQ6Ci0gICAgICAgIHJldHVybiBVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkOwotICAgIGNhc2UgV0tHZXN0dXJlUmVjb2duaXpl
clN0YXRlQ2FuY2VsbGVkOgotICAgICAgICByZXR1cm4gVUlHZXN0dXJlUmVjb2duaXplclN0YXRl
Q2FuY2VsbGVkOwotICAgIGNhc2UgV0tHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWQ6Ci0gICAg
ICAgIHJldHVybiBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZDsKLSAgICBjYXNlIFdLR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZUZhaWxlZDoKLSAgICAgICAgcmV0dXJuIFVJR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZUZhaWxlZDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVUlXS1NlbGVjdGlv
bkZsYWdzIHRvVUlXS1NlbGVjdGlvbkZsYWdzKFdLU2VsZWN0aW9uRmxhZ3MgZmxhZykKLXsKLSAg
ICBzd2l0Y2ggKGZsYWcpIHsKLSAgICBjYXNlIFdLTm9uZToKLSAgICAgICAgcmV0dXJuIFVJV0tO
b25lOwotICAgIGNhc2UgV0tXb3JkSXNOZWFyVGFwOgotICAgICAgICByZXR1cm4gVUlXS1dvcmRJ
c05lYXJUYXA7Ci0gICAgY2FzZSBXS0lzQmxvY2tTZWxlY3Rpb246Ci0gICAgICAgIHJldHVybiBV
SVdLSXNCbG9ja1NlbGVjdGlvbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgV0tIYW5kbGVQ
b3NpdGlvbiB0b1dLSGFuZGxlUG9zaXRpb24oVUlXS0hhbmRsZVBvc2l0aW9uIHBvc2l0aW9uKQot
ewotICAgIHN3aXRjaCAocG9zaXRpb24pIHsKLSAgICBjYXNlIFVJV0tIYW5kbGVUb3A6Ci0gICAg
ICAgIHJldHVybiBXS0hhbmRsZVRvcDsKLSAgICBjYXNlIFVJV0tIYW5kbGVSaWdodDoKLSAgICAg
ICAgcmV0dXJuIFdLSGFuZGxlUmlnaHQ7Ci0gICAgY2FzZSBVSVdLSGFuZGxlQm90dG9tOgotICAg
ICAgICByZXR1cm4gV0tIYW5kbGVCb3R0b207Ci0gICAgY2FzZSBVSVdLSGFuZGxlTGVmdDoKLSAg
ICAgICAgcmV0dXJuIFdLSGFuZGxlTGVmdDsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbGVj
dGlvbkNoYW5nZWRXaXRoR2VzdHVyZShib29sIGVycm9yLCBXS0ludGVyYWN0aW9uVmlldyAqdmll
dywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwg
dWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncykKLXsKLSAgICBpZiAoZXJyb3Ip
IHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKFt2aWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0pCi0gICAgICAgIFsoVUlXS1Nl
bGVjdGlvbkFzc2lzdGFudCAqKVt2aWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0gc2VsZWN0aW9u
Q2hhbmdlZFdpdGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6dG9VSVdLR2Vz
dHVyZVR5cGUoKFdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUpIHdpdGhTdGF0ZTp0b1VJR2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZShzdGF0aWNfY2FzdDxXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdl
c3R1cmVTdGF0ZSkpIHdpdGhGbGFnczoodG9VSVdLU2VsZWN0aW9uRmxhZ3MoKFdLU2VsZWN0aW9u
RmxhZ3MpZmxhZ3MpKV07Ci0gICAgZWxzZQotICAgICAgICBbKFVJV0tUZXh0SW50ZXJhY3Rpb25B
c3Npc3RhbnQgKilbdmlldyBpbnRlcmFjdGlvbkFzc2lzdGFudF0gc2VsZWN0aW9uQ2hhbmdlZFdp
dGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6dG9VSVdLR2VzdHVyZVR5cGUo
KFdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUpIHdpdGhTdGF0ZTp0b1VJR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZShzdGF0aWNfY2FzdDxXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdlc3R1cmVTdGF0
ZSkpIHdpdGhGbGFnczoodG9VSVdLU2VsZWN0aW9uRmxhZ3MoKFdLU2VsZWN0aW9uRmxhZ3MpZmxh
Z3MpKV07Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2goYm9vbCBl
cnJvciwgV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
b2ludCwgdWludDMyX3QgdG91Y2gpCi17Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChbdmlldyB3
ZWJTZWxlY3Rpb25Bc3Npc3RhbnRdKQotICAgICAgICBbKFVJV0tTZWxlY3Rpb25Bc3Npc3RhbnQg
KilbdmlldyB3ZWJTZWxlY3Rpb25Bc3Npc3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2hB
dDooQ0dQb2ludClwb2ludCB3aXRoU2VsZWN0aW9uVG91Y2g6dG9VSVdLU2VsZWN0aW9uVG91Y2go
KFdLU2VsZWN0aW9uVG91Y2gpdG91Y2gpXTsKLSAgICBlbHNlCi0gICAgICAgIFsoVUlXS1RleHRJ
bnRlcmFjdGlvbkFzc2lzdGFudCAqKVt2aWV3IGludGVyYWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rp
b25DaGFuZ2VkV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOnRv
VUlXS1NlbGVjdGlvblRvdWNoKChXS1NlbGVjdGlvblRvdWNoKXRvdWNoKV07Ci19Ci0KLS0gKHZv
aWQpX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoOihXZWJLaXQ6OldLU2VsZWN0aW9u
VG91Y2gpdG91Y2ggd2l0aEZsYWdzOihXZWJLaXQ6OldLU2VsZWN0aW9uRmxhZ3MpZmxhZ3MgZ3Jv
d1RocmVzaG9sZDooQ0dGbG9hdClncm93VGhyZXNob2xkIHNocmlua1RocmVzaG9sZDooQ0dGbG9h
dClzaHJpbmtUaHJlc2hvbGQKLXsKLSAgICBbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCBibG9ja1Nl
bGVjdGlvbkNoYW5nZWRXaXRoVG91Y2g6dG9VSVdLU2VsZWN0aW9uVG91Y2goKFdLU2VsZWN0aW9u
VG91Y2gpdG91Y2gpIHdpdGhGbGFnczp0b1VJV0tTZWxlY3Rpb25GbGFncygoV0tTZWxlY3Rpb25G
bGFncylmbGFncykgZ3Jvd1RocmVzaG9sZDpncm93VGhyZXNob2xkIHNocmlua1RocmVzaG9sZDpz
aHJpbmtUaHJlc2hvbGRdOwotfQotCi0tICh2b2lkKWNoYW5nZVNlbGVjdGlvbldpdGhHZXN0dXJl
QXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6KFVJV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlw
ZSB3aXRoU3RhdGU6KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSlzdGF0ZQotewotICAgIF9wYWdl
LT5zZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIENoYXJhY3Rlckdy
YW51bGFyaXR5LCB0b1dLR2VzdHVyZVR5cGUoZ2VzdHVyZVR5cGUpLCB0b1dLR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZShzdGF0ZSksIEdlc3R1cmVDYWxsYmFjazo6Y3JlYXRlKFtzZWxmXShib29sIGVy
cm9yLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVUeXBl
LCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzKSB7Ci0gICAgICAgIHNlbGVj
dGlvbkNoYW5nZWRXaXRoR2VzdHVyZShlcnJvciwgc2VsZiwgcG9pbnQsIGdlc3R1cmVUeXBlLCBn
ZXN0dXJlU3RhdGUsIGZsYWdzKTsKLSAgICB9KSk7Ci19Ci0KLS0gKHZvaWQpY2hhbmdlU2VsZWN0
aW9uV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOihVSVdLU2Vs
ZWN0aW9uVG91Y2gpdG91Y2ggYmFzZUlzU3RhcnQ6KEJPT0wpYmFzZUlzU3RhcnQKLXsKLSAgICBf
cGFnZS0+dXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQp
LCB0b1dLU2VsZWN0aW9uVG91Y2godG91Y2gpLCBiYXNlSXNTdGFydCwgVG91Y2hlc0NhbGxiYWNr
OjpjcmVhdGUoW3NlbGZdKGJvb2wgZXJyb3IsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2lu
dCwgdWludDMyX3QgdG91Y2gpIHsKLSAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaChl
cnJvciwgc2VsZiwgcG9pbnQsIHRvdWNoKTsKLSAgICB9KSk7Ci19Ci0KLS0gKHZvaWQpY2hhbmdl
U2VsZWN0aW9uV2l0aFRvdWNoZXNGcm9tOihDR1BvaW50KWZyb20gdG86KENHUG9pbnQpdG8gd2l0
aEdlc3R1cmU6KFVJV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSB3aXRoU3RhdGU6KFVJR2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZSlnZXN0dXJlU3RhdGUKLXsKLSAgICBfcGFnZS0+c2VsZWN0V2l0aFR3
b1RvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQoZnJvbSksIFdlYkNvcmU6OkludFBvaW50KHRvKSwg
dG9XS0dlc3R1cmVUeXBlKGdlc3R1cmVUeXBlKSwgdG9XS0dlc3R1cmVSZWNvZ25pemVyU3RhdGUo
Z2VzdHVyZVN0YXRlKSwgR2VzdHVyZUNhbGxiYWNrOjpjcmVhdGUoW3NlbGZdKGJvb2wgZXJyb3Is
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVp
bnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3MpIHsKLSAgICAgICAgc2VsZWN0aW9u
Q2hhbmdlZFdpdGhHZXN0dXJlKGVycm9yLCBzZWxmLCBwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1
cmVTdGF0ZSwgZmxhZ3MpOwotICAgIH0pKTsKLX0KLQotLSAodm9pZCljaGFuZ2VCbG9ja1NlbGVj
dGlvbldpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3VjaDooVUlXS1Nl
bGVjdGlvblRvdWNoKXRvdWNoIGZvckhhbmRsZTooVUlXS0hhbmRsZVBvc2l0aW9uKWhhbmRsZQot
ewotICAgIF9wYWdlLT51cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaChXZWJDb3JlOjpJbnRQ
b2ludChwb2ludCksIHRvV0tTZWxlY3Rpb25Ub3VjaCh0b3VjaCksIHRvV0tIYW5kbGVQb3NpdGlv
bihoYW5kbGUpKTsKLX0KLQotLSAoV0tBdXRvQ29ycmVjdGlvbkRhdGEgKilhdXRvY29ycmVjdGlv
bkRhdGEKLXsKLSAgICByZXR1cm4gJl9hdXRvY29ycmVjdGlvbkRhdGE7Ci19Ci0KLS8vIFRoZSBj
b21wbGV0aW9uIGhhbmRsZXIgY2FuIHBhc3MgbmlsIGlmIGlucHV0IGRvZXMgbm90IG1hdGNoIHRo
ZSBhY3R1YWwgdGV4dCBwcmVjZWRpbmcgdGhlIGluc2VydGlvbiBwb2ludC4KLS0gKHZvaWQpcmVx
dWVzdEF1dG9jb3JyZWN0aW9uUmVjdHNGb3JTdHJpbmc6KE5TU3RyaW5nICopaW5wdXQgd2l0aENv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHNG
b3JJbnB1dCkpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBpZiAoIWlucHV0IHx8ICFbaW5wdXQg
bGVuZ3RoXSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIF9hdXRvY29ycmVjdGlvbkRhdGEuYXV0b2NvcnJlY3Rpb25IYW5kbGVy
ID0gW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldOwotICAgIF9wYWdlLT5yZXF1ZXN0QXV0b2NvcnJl
Y3Rpb25EYXRhKGlucHV0LCBBdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjazo6Y3JlYXRlKFtzZWxm
LCBjb21wbGV0aW9uSGFuZGxlcl0oYm9vbCwgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3Rz
LCBjb25zdCBTdHJpbmcmIGZvbnROYW1lLCBkb3VibGUgZm9udFNpemUsIHVpbnQ2NF90IHRyYWl0
cykgewotICAgICAgICBDR1JlY3QgZmlyc3RSZWN0ID0gQ0dSZWN0WmVybzsKLSAgICAgICAgQ0dS
ZWN0IGxhc3RSZWN0ID0gQ0dSZWN0WmVybzsKLSAgICAgICAgaWYgKHJlY3RzLnNpemUoKSkgewot
ICAgICAgICAgICAgZmlyc3RSZWN0ID0gcmVjdHNbMF07Ci0gICAgICAgICAgICBsYXN0UmVjdCA9
IHJlY3RzW3JlY3RzLnNpemUoKSAtIDFdOwotICAgICAgICB9Ci0KLSAgICAgICAgV0tBdXRvQ29y
cmVjdGlvbkRhdGEgKmF1dG9jb3JyZWN0aW9uRGF0YSA9IHNlbGYuYXV0b2NvcnJlY3Rpb25EYXRh
OwotICAgICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmZvbnROYW1lID0gZm9udE5hbWU7Ci0gICAg
ICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+Zm9udFNpemUgPSBmb250U2l6ZTsKLSAgICAgICAgYXV0
b2NvcnJlY3Rpb25EYXRhLT5mb250VHJhaXRzID0gdHJhaXRzOwotICAgICAgICBhdXRvY29ycmVj
dGlvbkRhdGEtPnRleHRGaXJzdFJlY3QgPSBmaXJzdFJlY3Q7Ci0gICAgICAgIGF1dG9jb3JyZWN0
aW9uRGF0YS0+dGV4dExhc3RSZWN0ID0gbGFzdFJlY3Q7Ci0KLSAgICAgICAgYXV0b2NvcnJlY3Rp
b25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIocmVjdHMuc2l6ZSgpID8gW1dLQXV0b2NvcnJl
Y3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOmZpcnN0UmVjdCBsYXN0UmVj
dDpsYXN0UmVjdF0gOiBuaWwpOwotICAgICAgICBbYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29y
cmVjdGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+YXV0
b2NvcnJlY3Rpb25IYW5kbGVyID0gbmlsOwotICAgIH0pKTsKLX0KLQotLSAoQ0dSZWN0KXRleHRG
aXJzdFJlY3QKLXsKLSAgICByZXR1cm4gKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0
aW9uKSA/IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmZpcnN0TWFya2VkUmVjdCA6IF9hdXRvY29ycmVj
dGlvbkRhdGEudGV4dEZpcnN0UmVjdDsKLX0KLQotLSAoQ0dSZWN0KXRleHRMYXN0UmVjdAotewot
ICAgIHJldHVybiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb24pID8gX3BhZ2Ut
PmVkaXRvclN0YXRlKCkubGFzdE1hcmtlZFJlY3QgOiBfYXV0b2NvcnJlY3Rpb25EYXRhLnRleHRM
YXN0UmVjdDsKLX0KLQotLy8gVGhlIGNvbXBsZXRpb24gaGFuZGxlciBzaG91bGQgcGFzcyB0aGUg
cmVjdCBvZiB0aGUgY29ycmVjdGlvbiB0ZXh0IGFmdGVyIHJlcGxhY2luZyB0aGUgaW5wdXQgdGV4
dCwgb3IgbmlsIGlmIHRoZSByZXBsYWNlbWVudCBjb3VsZCBub3QgYmUgcGVyZm9ybWVkLgotLSAo
dm9pZClhcHBseUF1dG9jb3JyZWN0aW9uOihOU1N0cmluZyAqKWNvcnJlY3Rpb24gdG9TdHJpbmc6
KE5TU3RyaW5nICopaW5wdXQgd2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShVSVdLQXV0
b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHNGb3JDb3JyZWN0aW9uKSljb21wbGV0aW9uSGFuZGxlcgot
ewotICAgIF9hdXRvY29ycmVjdGlvbkRhdGEuYXV0b2NvcnJlY3Rpb25IYW5kbGVyID0gW2NvbXBs
ZXRpb25IYW5kbGVyIGNvcHldOwotICAgIF9wYWdlLT5hcHBseUF1dG9jb3JyZWN0aW9uKGNvcnJl
Y3Rpb24sIGlucHV0LCBTdHJpbmdDYWxsYmFjazo6Y3JlYXRlKFtzZWxmXShib29sIC8qZXJyb3Iq
LywgU3RyaW5nSW1wbCogc3RyaW5nKSB7Ci0gICAgICAgIFdLQXV0b0NvcnJlY3Rpb25EYXRhICph
dXRvY29ycmVjdGlvbkRhdGEgPSBzZWxmLmF1dG9jb3JyZWN0aW9uRGF0YTsKLQotICAgICAgICBh
dXRvY29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uSGFuZGxlcihzdHJpbmcgPyBbV0tBdXRv
Y29ycmVjdGlvblJlY3RzIGF1dG9jb3JyZWN0aW9uUmVjdHNXaXRoUmVjdHM6YXV0b2NvcnJlY3Rp
b25EYXRhLT50ZXh0Rmlyc3RSZWN0IGxhc3RSZWN0OmF1dG9jb3JyZWN0aW9uRGF0YS0+dGV4dExh
c3RSZWN0XSA6IG5pbCk7Ci0gICAgICAgIFthdXRvY29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0
aW9uSGFuZGxlciByZWxlYXNlXTsKLSAgICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29y
cmVjdGlvbkhhbmRsZXIgPSBuaWw7Ci0gICAgfSkpOwotfQotCi0tICh2b2lkKXJlcXVlc3RBdXRv
Y29ycmVjdGlvbkNvbnRleHRXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFVJV0tBdXRv
Y29ycmVjdGlvbkNvbnRleHQgKmF1dG9jb3JyZWN0aW9uQ29udGV4dCkpY29tcGxldGlvbkhhbmRs
ZXIKLXsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBzeW5jaHJvbm91cyBjYWxsIGFzIHNvb24g
YXMgS2V5Ym9hcmQgcmVtb3ZlcyBsb2NraW5nIG9mIHRoZSBtYWluIHRocmVhZC4KLSAgICBjb25z
dCBib29sIHVzZVN5bmNSZXF1ZXN0ID0gdHJ1ZTsKLQotICAgIGlmICh1c2VTeW5jUmVxdWVzdCkg
ewotICAgICAgICBTdHJpbmcgYmVmb3JlVGV4dDsKLSAgICAgICAgU3RyaW5nIG1hcmtlZFRleHQ7
Ci0gICAgICAgIFN0cmluZyBzZWxlY3RlZFRleHQ7Ci0gICAgICAgIFN0cmluZyBhZnRlclRleHQ7
Ci0gICAgICAgIHVpbnQ2NF90IGxvY2F0aW9uOwotICAgICAgICB1aW50NjRfdCBsZW5ndGg7Ci0g
ICAgICAgIF9wYWdlLT5nZXRBdXRvY29ycmVjdGlvbkNvbnRleHQoYmVmb3JlVGV4dCwgbWFya2Vk
VGV4dCwgc2VsZWN0ZWRUZXh0LCBhZnRlclRleHQsIGxvY2F0aW9uLCBsZW5ndGgpOwotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihbV0tBdXRvY29ycmVjdGlvbkNvbnRleHQgYXV0b2NvcnJlY3Rp
b25Db250ZXh0V2l0aERhdGE6YmVmb3JlVGV4dCBtYXJrZWRUZXh0Om1hcmtlZFRleHQgc2VsZWN0
ZWRUZXh0OnNlbGVjdGVkVGV4dCBhZnRlclRleHQ6YWZ0ZXJUZXh0IHNlbGVjdGVkUmFuZ2VJbk1h
cmtlZFRleHQ6TlNNYWtlUmFuZ2UobG9jYXRpb24sIGxlbmd0aCldKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLmF1dG9jb3JyZWN0aW9uQ29udGV4dEhhbmRsZXIg
PSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07Ci0gICAgICAgIF9wYWdlLT5yZXF1ZXN0QXV0b2Nv
cnJlY3Rpb25Db250ZXh0KEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrOjpjcmVhdGUoW3Nl
bGYsIGNvbXBsZXRpb25IYW5kbGVyXShib29sIC8qZXJyb3IqLywgY29uc3QgU3RyaW5nJiBiZWZv
cmVUZXh0LCBjb25zdCBTdHJpbmcmIG1hcmtlZFRleHQsIGNvbnN0IFN0cmluZyYgc2VsZWN0ZWRU
ZXh0LCBjb25zdCBTdHJpbmcmIGFmdGVyVGV4dCwgdWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90
IGxlbmd0aCkgewotICAgICAgICAgICAgV0tBdXRvQ29ycmVjdGlvbkRhdGEgKmF1dG9jb3JyZWN0
aW9uRGF0YSA9IHNlbGYuYXV0b2NvcnJlY3Rpb25EYXRhOwotICAgICAgICAgICAgYXV0b2NvcnJl
Y3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkNvbnRleHRIYW5kbGVyKFtXS0F1dG9jb3JyZWN0aW9u
Q29udGV4dCBhdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoRGF0YTpiZWZvcmVUZXh0IG1hcmtlZFRl
eHQ6bWFya2VkVGV4dCBzZWxlY3RlZFRleHQ6c2VsZWN0ZWRUZXh0IGFmdGVyVGV4dDphZnRlclRl
eHQgc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dDpOU01ha2VSYW5nZShsb2NhdGlvbiwgbGVuZ3Ro
KV0pOwotICAgICAgICB9KSk7Ci0gICAgfQotfQotCi0vLyBVSVdlYkZvcm1BY2Nlc3NvcnlEZWxl
Z2F0ZQotLSAodm9pZClhY2Nlc3NvcnlEb25lCi17Ci0gICAgW3NlbGYgcmVzaWduRmlyc3RSZXNw
b25kZXJdOwotfQotCi0tICh2b2lkKWFjY2Vzc29yeVRhYjooQk9PTClpc05leHQKLXsKLX0KLQot
LSAodm9pZClhY2Nlc3NvcnlBdXRvRmlsbAotewotfQotCi0tICh2b2lkKWFjY2Vzc29yeUNsZWFy
Ci17Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZUFjY2Vzc29yeQotewotICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIGluaXRpYWxpemUgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgV2ViUHJvY2Vzcy4KLSAgICBf
YWNjZXNzb3J5Lm5leHRFbmFibGVkID0gWUVTOwotICAgIF9hY2Nlc3NvcnkucHJldmlvdXNFbmFi
bGVkID0gWUVTOwotICAgIAotICAgIFtfYWNjZXNzb3J5IHNldENsZWFyVmlzaWJsZTpOT107Ci0K
LSAgICAvLyBGSVhNRTogaGlkZSBvciBzaG93IHRoZSBBdXRvRmlsbCBidXR0b24gYXMgbmVlZGVk
LgotfQotCi0vLyBLZXlib2FyZCBpbnRlcmFjdGlvbgotLy8gVUlUZXh0SW5wdXQgcHJvdG9jb2wg
aW1wbGVtZW50YXRpb24KLQotLSAoTlNTdHJpbmcgKil0ZXh0SW5SYW5nZTooVUlUZXh0UmFuZ2Ug
KilyYW5nZQotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpcmVwbGFjZVJhbmdlOihV
SVRleHRSYW5nZSAqKXJhbmdlIHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKLXsKLX0KLQotLSAo
VUlUZXh0UmFuZ2UgKilzZWxlY3RlZFRleHRSYW5nZQotewotICAgIHJldHVybiBbV0tUZXh0UmFu
Z2UgdGV4dFJhbmdlV2l0aFN0YXRlOl9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9u
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JhbmdlOl9wYWdlLT5lZGl0
b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXNFZGl0YWJsZTpfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRSZWN0Ol9wYWdlLT5lZGl0b3JTdGF0
ZSgpLmNhcmV0UmVjdEF0U3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kUmVjdDpfcGFnZS0+ZWRpdG9yU3RhdGUoKS5jYXJldFJlY3RBdEVuZAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdGlvblJlY3RzOltzZWxmIHdlYlNlbGVjdGlvblJlY3RzXQot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRUZXh0TGVuZ3RoOl9wYWdlLT5lZGl0b3JT
dGF0ZSgpLnNlbGVjdGVkVGV4dExlbmd0aF07Ci19Ci0KLS0gKENHUmVjdCljYXJldFJlY3RGb3JQ
b3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbgotewotICAgIHJldHVybiAoKFdLVGV4
dFBvc2l0aW9uICopcG9zaXRpb24pLnBvc2l0aW9uUmVjdDsKLX0KLQotLSAoTlNBcnJheSAqKXNl
bGVjdGlvblJlY3RzRm9yUmFuZ2U6KFVJVGV4dFJhbmdlICopcmFuZ2UKLXsKLSAgICByZXR1cm4g
W1dLVGV4dFNlbGVjdGlvblJlY3QgdGV4dFNlbGVjdGlvblJlY3RzV2l0aFdlYlJlY3RzOigoV0tU
ZXh0UmFuZ2UgKilyYW5nZSkuc2VsZWN0aW9uUmVjdHNdOwotfQotCi0tICh2b2lkKXNldFNlbGVj
dGVkVGV4dFJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlCi17Ci19Ci0KLS0gKEJPT0wpaGFzTWFy
a2VkVGV4dAotewotICAgIHJldHVybiBbX21hcmtlZFRleHQgbGVuZ3RoXTsKLX0KLQotLSAoTlNT
dHJpbmcgKiltYXJrZWRUZXh0Ci17Ci0gICAgcmV0dXJuIF9tYXJrZWRUZXh0LmdldCgpOwotfQot
Ci0tIChVSVRleHRSYW5nZSAqKW1hcmtlZFRleHRSYW5nZQotewotICAgIHJldHVybiBuaWw7Ci19
Ci0KLS0gKE5TRGljdGlvbmFyeSAqKW1hcmtlZFRleHRTdHlsZQotewotICAgIHJldHVybiBuaWw7
Ci19Ci0KLS0gKHZvaWQpc2V0TWFya2VkVGV4dFN0eWxlOihOU0RpY3Rpb25hcnkgKilzdHlsZURp
Y3Rpb25hcnkKLXsKLX0KLQotLSAodm9pZClzZXRNYXJrZWRUZXh0OihOU1N0cmluZyAqKW1hcmtl
ZFRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdlCi17Ci0gICAgX21hcmtl
ZFRleHQgPSBtYXJrZWRUZXh0OwotICAgIF9wYWdlLT5zZXRDb21wb3NpdGlvbihtYXJrZWRUZXh0
LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+KCksIHNlbGVjdGVkUmFuZ2Uu
bG9jYXRpb24sIHNlbGVjdGVkUmFuZ2UubGVuZ3RoLCAwLCAwKTsKLX0KLQotLSAodm9pZCl1bm1h
cmtUZXh0Ci17Ci0gICAgX21hcmtlZFRleHQgPSBuaWw7Ci0gICAgX3BhZ2UtPmNvbmZpcm1Db21w
b3NpdGlvbigpOwotfQotCi0tIChVSVRleHRQb3NpdGlvbiAqKWJlZ2lubmluZ09mRG9jdW1lbnQK
LXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChVSVRleHRQb3NpdGlvbiAqKWVuZE9mRG9jdW1l
bnQKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChVSVRleHRSYW5nZSAqKXRleHRSYW5nZUZy
b21Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilmcm9tUG9zaXRpb24gdG9Qb3NpdGlvbjooVUlU
ZXh0UG9zaXRpb24gKil0b1Bvc2l0aW9uCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoVUlU
ZXh0UG9zaXRpb24gKilwb3NpdGlvbkZyb21Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3Np
dGlvbiBvZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0t
IChVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9uRnJvbVBvc2l0aW9uOihVSVRleHRQb3NpdGlvbiAq
KXBvc2l0aW9uIGluRGlyZWN0aW9uOihVSVRleHRMYXlvdXREaXJlY3Rpb24pZGlyZWN0aW9uIG9m
ZnNldDooTlNJbnRlZ2VyKW9mZnNldAotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKE5TQ29t
cGFyaXNvblJlc3VsdCljb21wYXJlUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb24g
dG9Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilvdGhlcgotewotICAgIHJldHVybiBOU09yZGVy
ZWRTYW1lOwotfQotCi0tIChOU0ludGVnZXIpb2Zmc2V0RnJvbVBvc2l0aW9uOihVSVRleHRQb3Np
dGlvbiAqKWZyb20gdG9Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKil0b1Bvc2l0aW9uCi17Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLS0gKGlkIDxVSVRleHRJbnB1dFRva2VuaXplcj4pdG9rZW5pemVy
Ci17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbldp
dGhpblJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlIGZhcnRoZXN0SW5EaXJlY3Rpb246KFVJVGV4
dExheW91dERpcmVjdGlvbilkaXJlY3Rpb24KLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChV
SVRleHRSYW5nZSAqKWNoYXJhY3RlclJhbmdlQnlFeHRlbmRpbmdQb3NpdGlvbjooVUlUZXh0UG9z
aXRpb24gKilwb3NpdGlvbiBpbkRpcmVjdGlvbjooVUlUZXh0TGF5b3V0RGlyZWN0aW9uKWRpcmVj
dGlvbgotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKFVJVGV4dFdyaXRpbmdEaXJlY3Rpb24p
YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JQb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3NpdGlv
biBpbkRpcmVjdGlvbjooVUlUZXh0U3RvcmFnZURpcmVjdGlvbilkaXJlY3Rpb24KLXsKLSAgICBy
ZXR1cm4gVUlUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OwotfQotCi0tICh2b2lkKXNl
dEJhc2VXcml0aW5nRGlyZWN0aW9uOihVSVRleHRXcml0aW5nRGlyZWN0aW9uKXdyaXRpbmdEaXJl
Y3Rpb24gZm9yUmFuZ2U6KFVJVGV4dFJhbmdlICopcmFuZ2UKLXsKLX0KLQotLSAoQ0dSZWN0KWZp
cnN0UmVjdEZvclJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlCi17Ci0gICAgcmV0dXJuIENHUmVj
dFplcm87Ci19Ci0KLS8qIEhpdCB0ZXN0aW5nLiAqLwotLSAoVUlUZXh0UG9zaXRpb24gKiljbG9z
ZXN0UG9zaXRpb25Ub1BvaW50OihDR1BvaW50KXBvaW50Ci17Ci0gICAgcmV0dXJuIG5pbDsKLX0K
LQotLSAoVUlUZXh0UG9zaXRpb24gKiljbG9zZXN0UG9zaXRpb25Ub1BvaW50OihDR1BvaW50KXBv
aW50IHdpdGhpblJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlCi17Ci0gICAgcmV0dXJuIG5pbDsK
LX0KLQotLSAoVUlUZXh0UmFuZ2UgKiljaGFyYWN0ZXJSYW5nZUF0UG9pbnQ6KENHUG9pbnQpcG9p
bnQKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKWRlbGV0ZUJhY2t3YXJkCi17Ci0g
ICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVyYWwoImRlbGV0ZUJhY2t3YXJk
IikpOwotfQotCi0vLyBJbnNlcnRzIHRoZSBnaXZlbiBzdHJpbmcsIHJlcGxhY2luZyBhbnkgc2Vs
ZWN0ZWQgb3IgbWFya2VkIHRleHQuCi0tICh2b2lkKWluc2VydFRleHQ6KE5TU3RyaW5nICopYVN0
cmluZ1ZhbHVlCi17Ci0gICAgX3BhZ2UtPmluc2VydFRleHQoYVN0cmluZ1ZhbHVlLCBOU05vdEZv
dW5kLCAwKTsKLX0KLQotLSAoQk9PTCloYXNUZXh0Ci17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQot
Ly8gZW5kIG9mIFVJVGV4dElucHV0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCi0KLS8vIFVJVGV4
dElucHV0UHJpdmF0ZSBwcm90b2NvbAotLy8gRGlyZWN0IGFjY2VzcyB0byB0aGUgKHByaXZhdGUp
IFVJVGV4dElucHV0VHJhaXRzIG9iamVjdC4KLS0gKFVJVGV4dElucHV0VHJhaXRzICopdGV4dElu
cHV0VHJhaXRzCi17Ci0gICAgaWYgKCFfdHJhaXRzKQotICAgICAgICBfdHJhaXRzID0gW1tVSVRl
eHRJbnB1dFRyYWl0cyBhbGxvY10gaW5pdF07Ci0gICAgcmV0dXJuIF90cmFpdHM7Ci19Ci0KLS0g
KFVJVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICopaW50ZXJhY3Rpb25Bc3Npc3RhbnQKLXsKLSAg
ICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB3ZSdyZSBpbiBVSVdl
YlNlbGVjdGlvbk1vZGVUZXh0T25seSBob3dldmVyIGl0IGlzCi0gICAgLy8gcG9zc2libGUgdGhh
dCBpdCBjYW4gYmUgY2FsbGVkIHdoaWxlIHdlIGFyZSB0cmFuc2l0aW9uaW5nIGJldHdlZW4gbW9k
ZXMuCi0gICAgLy8gYXNzZXJ0KCFfd2ViU2VsZWN0aW9uQXNzaXN0YW50KTsKLQotICAgIGlmICgh
X3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpCi0gICAgICAgIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50
ID0gW1tVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50IGFsbG9jXSBpbml0V2l0aFZpZXc6c2Vs
Zl07Ci0KLSAgICByZXR1cm4gX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQuZ2V0KCk7Ci19Ci0KLS0g
KFVJV2ViU2VsZWN0aW9uQXNzaXN0YW50ICopd2ViU2VsZWN0aW9uQXNzaXN0YW50Ci17Ci0gICAg
cmV0dXJuIF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQuZ2V0KCk7Ci19Ci0KLQotLy8gTlNSYW5nZSBz
dXBwb3J0LiAgV291bGQgbGlrZSB0byBkZXByZWNhdGUgdG8gdGhlIGV4dGVudCBwb3NzaWJsZSwg
YWx0aG91Z2ggc29tZSBzdXBwb3J0Ci0vLyAoaS5lLiBzZWxlY3Rpb25SYW5nZSkgaGFzIHNoaXBw
ZWQgYXMgQVBJLgotLSAoTlNSYW5nZSlzZWxlY3Rpb25SYW5nZQotewotICAgIHJldHVybiBOU01h
a2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLX0KLQotLSAoQ0dSZWN0KXJlY3RGb3JOU1JhbmdlOihO
U1JhbmdlKXJhbmdlCi17Ci0gICAgcmV0dXJuIENHUmVjdFplcm87Ci19Ci0KLS0gKE5TUmFuZ2Up
X21hcmtlZFRleHROU1JhbmdlCi17Ci0gICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQs
IDApOwotfQotCi0vLyBET00gcmFuZ2Ugc3VwcG9ydC4KLS0gKERPTVJhbmdlICopc2VsZWN0ZWRE
T01SYW5nZQotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpc2V0U2VsZWN0ZWRET01S
YW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eURvd25zdHJlYW06KEJPT0wpYWZmaW5pdHlE
b3duc3RyZWFtCi17Ci19Ci0KLS8vIE1vZGlmeSB0ZXh0IHdpdGhvdXQgc3RhcnRpbmcgYSBuZXcg
dW5kbyBncm91cGluZy4KLS0gKHZvaWQpcmVwbGFjZVJhbmdlV2l0aFRleHRXaXRob3V0Q2xvc2lu
Z1R5cGluZzooVUlUZXh0UmFuZ2UgKilyYW5nZSByZXBsYWNlbWVudFRleHQ6KE5TU3RyaW5nICop
dGV4dAotewotfQotCi0vLyBDYXJldCByZWN0IHN1cHBvcnQuICBTaG91bGRuJ3QgYmUgbmVjZXNz
YXJ5LCBidXQgZmlyc3RSZWN0Rm9yUmFuZ2UgZG9lc24ndCBvZmZlciBwcmVjaXNlbHkKLS8vIHRo
ZSBzYW1lIGZ1bmN0aW9uYWxpdHkuCi0tIChDR1JlY3QpcmVjdENvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbgotewotICAgIHJldHVybiBDR1JlY3RaZXJvOwotfQotCi0vLyBXZWIgZXZlbnRzLgotLSAo
Qk9PTClyZXF1aXJlc0tleUV2ZW50cwotewotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKHZvaWQp
aGFuZGxlS2V5V2ViRXZlbnQ6KFdlYklPU0V2ZW50ICopdGhlRXZlbnQKLXsKLSAgICBfcGFnZS0+
aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHRoZUV2ZW50KSk7Ci19
Ci0KLS0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihXZWJJT1NFdmVudCAqKWV2ZW50IGlzQ2hh
ckV2ZW50OihCT09MKWlzQ2hhckV2ZW50Ci17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtX
ZWJFbnRlcktleSA9IDB4MDAwMzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQga1dlYkJhY2tz
cGFjZUtleSA9IDB4MDAwODsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQga1dlYlJldHVybktl
eSA9IDB4MDAwRDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQga1dlYkRlbGV0ZUtleSA9IDB4
MDA3RjsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQga1dlYkxlZnRBcnJvd0tleSA9IDB4MDBB
QzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQga1dlYlVwQXJyb3dLZXkgPSAweDAwQUQ7Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJSaWdodEFycm93S2V5ID0gMHgwMEFFOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrV2ViRG93bkFycm93S2V5ID0gMHgwMEFGOwotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBrV2ViRGVsZXRlRm9yd2FyZEtleSA9IDB4RjcyODsKLQotICAg
IGlmICghX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUgJiYgZXZlbnQuaXNU
YWJLZXkpCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIEJPT0wgc2hpZnQgPSBldmVudC5tb2Rp
ZmllckZsYWdzICYgV2ViRXZlbnRGbGFnTWFza1NoaWZ0OwotCi0gICAgc3dpdGNoIChldmVudC5j
aGFyYWN0ZXJTZXQpIHsKLSAgICBjYXNlIFdlYkV2ZW50Q2hhcmFjdGVyU2V0U3ltYm9sOiB7Ci0g
ICAgICAgIFN0cmluZyBjb21tYW5kOwotICAgICAgICBOU1N0cmluZyAqY2hhcmFjdGVycyA9IFtl
dmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdOwotICAgICAgICBpZiAoW2NoYXJhY3Rl
cnMgbGVuZ3RoXSA9PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN3aXRjaCAoW2No
YXJhY3RlcnMgY2hhcmFjdGVyQXRJbmRleDowXSkgewotICAgICAgICBjYXNlIGtXZWJMZWZ0QXJy
b3dLZXk6Ci0gICAgICAgICAgICBjb21tYW5kID0gc2hpZnQgPyBBU0NJSUxpdGVyYWwoIm1vdmVM
ZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uIikgOiAgQVNDSUlMaXRlcmFsKCJtb3ZlTGVmdCIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBrV2ViVXBBcnJvd0tleToKLSAgICAgICAg
ICAgIGNvbW1hbmQgPSBzaGlmdCA/IEFTQ0lJTGl0ZXJhbCgibW92ZVVwQW5kTW9kaWZ5U2VsZWN0
aW9uIikgOiAgQVNDSUlMaXRlcmFsKCJtb3ZlVXAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2Uga1dlYlJpZ2h0QXJyb3dLZXk6Ci0gICAgICAgICAgICBjb21tYW5kID0gc2hp
ZnQgPyBBU0NJSUxpdGVyYWwoIm1vdmVSaWdodEFuZE1vZGlmeVNlbGVjdGlvbiIpIDogIEFTQ0lJ
TGl0ZXJhbCgibW92ZVJpZ2h0Iik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IGtXZWJEb3duQXJyb3dLZXk6Ci0gICAgICAgICAgICBjb21tYW5kID0gc2hpZnQgPyBBU0NJSUxp
dGVyYWwoIm1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIikgOiAgQVNDSUlMaXRlcmFsKCJtb3Zl
RG93biIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFjb21t
YW5kLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChj
b21tYW5kKTsKLSAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgV2ViRXZlbnRDaGFyYWN0ZXJTZXRBU0NJSToKLSAgICBjYXNl
IFdlYkV2ZW50Q2hhcmFjdGVyU2V0VW5pY29kZTogewotICAgICAgICBOU1N0cmluZyAqY2hhcmFj
dGVycyA9IFtldmVudCBjaGFyYWN0ZXJzXTsKLSAgICAgICAgaWYgKFtjaGFyYWN0ZXJzIGxlbmd0
aF0gPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzd2l0Y2ggKFtjaGFyYWN0ZXJz
IGNoYXJhY3RlckF0SW5kZXg6MF0pIHsKLSAgICAgICAgY2FzZSBrV2ViQmFja3NwYWNlS2V5Ogot
ICAgICAgICBjYXNlIGtXZWJEZWxldGVLZXk6Ci0gICAgICAgICAgICBbW1VJS2V5Ym9hcmRJbXBs
IHNoYXJlZEluc3RhbmNlXSBkZWxldGVGcm9tSW5wdXRdOwotICAgICAgICAgICAgcmV0dXJuIFlF
UzsKLQotICAgICAgICBjYXNlIGtXZWJFbnRlcktleToKLSAgICAgICAgY2FzZSBrV2ViUmV0dXJu
S2V5OgotICAgICAgICAgICAgaWYgKGlzQ2hhckV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgLy8g
TWFwIFxyIGZyb20gSFcga2V5Ym9hcmQgdG8gXG4gdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIHRo
ZSBzb2Z0IGtleWJvYXJkLgotICAgICAgICAgICAgICAgIFtbVUlLZXlib2FyZEltcGwgc2hhcmVk
SW5zdGFuY2VdIGFkZElucHV0U3RyaW5nOkAiXG4iIHdpdGhGbGFnczowXTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gWUVTOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIE5POwot
Ci0gICAgICAgIGNhc2Uga1dlYkRlbGV0ZUZvcndhcmRLZXk6Ci0gICAgICAgICAgICBfcGFnZS0+
ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0ZXJhbCgiZGVsZXRlRm9yd2FyZCIpKTsKLSAgICAg
ICAgICAgIHJldHVybiBZRVM7Ci0KLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgaWYg
KGlzQ2hhckV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgW1tVSUtleWJvYXJkSW1wbCBzaGFyZWRJ
bnN0YW5jZV0gYWRkSW5wdXRTdHJpbmc6ZXZlbnQuY2hhcmFjdGVycyB3aXRoRmxhZ3M6ZXZlbnQu
a2V5Ym9hcmRGbGFnc107Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gTk87Ci19Ci0KLS8vIFNldHMgYSBidWZmZXIgdG8gbWFrZSByb29tIGZvciBhdXRv
Y29ycmVjdGlvbiB2aWV3cwotLSAodm9pZClzZXRCb3R0b21CdWZmZXJIZWlnaHQ6KENHRmxvYXQp
Ym90dG9tQnVmZmVyCi17Ci19Ci0KLS0gKFVJVmlldyAqKWF1dG9tYXRpY2FsbHlTZWxlY3RlZE92
ZXJsYXkKLXsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoVUlUZXh0R3JhbnVsYXJpdHkpc2Vs
ZWN0aW9uR3JhbnVsYXJpdHkKLXsKLSAgICByZXR1cm4gVUlUZXh0R3JhbnVsYXJpdHlDaGFyYWN0
ZXI7Ci19Ci0KLS0gKHZvaWQpaW5zZXJ0RGljdGF0aW9uUmVzdWx0OihOU0FycmF5ICopZGljdGF0
aW9uUmVzdWx0IHdpdGhDb3JyZWN0aW9uSWRlbnRpZmllcjooaWQpY29ycmVjdGlvbklkZW50aWZp
ZXIKLXsKLX0KLQotLy8gU2hvdWxkIHJldHVybiBhbiBhcnJheSBvZiBOU0RpY3Rpb25hcnkgb2Jq
ZWN0cyB0aGF0IGtleS92YWx1ZSBwYXJpZXMgZm9yIHRoZSBmaW5hbCB0ZXh0LCBjb3JyZWN0aW9u
IGlkZW50aWZpZXIgYW5kCi0vLyBhbHRlcm5hdGl2ZSBzZWxlY3Rpb24gY291bnRzIHVzaW5nIHRo
ZSBrZXlzIGRlZmluZWQgYXQgdGhlIHRvcCBvZiB0aGlzIGhlYWRlci4KLS0gKE5TQXJyYXkgKilt
ZXRhZGF0YURpY3Rpb25hcmllc0ZvckRpY3RhdGlvblJlc3VsdHMKLXsKLSAgICByZXR1cm4gbmls
OwotfQotCi0vLyBSZXR1cm5zIHRoZSBkaWN0YXRpb24gcmVzdWx0IGJvdW5kYXJpZXMgZnJvbSBw
b3NpdGlvbiBzbyB0aGF0IHRleHQgdGhhdCB3YXMgbm90IGRpY3RhdGVkIGNhbiBiZSBleGNsdWRl
ZCBmcm9tIGxvZ2dpbmcuCi0vLyBJZiB0aGVzZSBhcmUgbm90IGltcGxlbWVudGVkLCBubyB0ZXh0
IHdpbGwgYmUgbG9nZ2VkLgotLSAoVUlUZXh0UG9zaXRpb24gKilwcmV2aW91c1VucGVydHVyYmVk
RGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9z
aXRpb24KLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChVSVRleHRQb3NpdGlvbiAqKW5leHRV
bnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOihVSVRleHRQb3Np
dGlvbiAqKXBvc2l0aW9uCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLy8gVGhlIGNhbiBhbGwg
YmUgKGFuZCBoYXZlIGJlZW4pIHRyaXZpYWxseSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBVSVRl
eHRJbnB1dC4gIERlcHJlY2F0ZSBhbmQgcmVtb3ZlLgotLSAodm9pZCltb3ZlQmFja3dhcmQ6KHVu
c2lnbmVkKWNvdW50Ci17Ci19Ci0KLS0gKHZvaWQpbW92ZUZvcndhcmQ6KHVuc2lnbmVkKWNvdW50
Ci17Ci19Ci0KLS0gKHVuaWNoYXIpY2hhcmFjdGVyQmVmb3JlQ2FyZXRTZWxlY3Rpb24KLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotLSAoTlNTdHJpbmcgKil3b3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0
aW9uCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoRE9NUmFuZ2UgKil3b3JkUmFuZ2VDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb24KLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKXNl
dE1hcmtlZFRleHQ6KE5TU3RyaW5nICopdGV4dAotewotfQotCi0tIChCT09MKWhhc0NvbnRlbnQK
LXsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tICh2b2lkKXNlbGVjdEFsbAotewotfQotCi0tIChV
SUNvbG9yICopdGV4dENvbG9yRm9yQ2FyZXRTZWxlY3Rpb24KLXsKLSAgICByZXR1cm4gW1VJQ29s
b3IgYmxhY2tDb2xvcl07Ci19Ci0KLS0gKFVJRm9udCAqKWZvbnRGb3JDYXJldFNlbGVjdGlvbgot
ewotICAgIENHRmxvYXQgem9vbVNjYWxlID0gMS4wOyAgICAvLyBGSVhNRTogcmV0cmlldmUgdGhl
IGFjdHVhbCBkb2N1bWVudCBzY2FsZSBmYWN0b3IuCi0gICAgQ0dGbG9hdCBzY2FsZWRTaXplID0g
X2F1dG9jb3JyZWN0aW9uRGF0YS5mb250U2l6ZTsKLSAgICBpZiAoQ0dGQWJzKHpvb21TY2FsZSAt
IDEuMCkgPiBGTFRfRVBTSUxPTikKLSAgICAgICAgc2NhbGVkU2l6ZSAqPSB6b29tU2NhbGU7Ci0g
ICAgcmV0dXJuIFtVSUZvbnQgZm9udFdpdGhGYW1pbHlOYW1lOl9hdXRvY29ycmVjdGlvbkRhdGEu
Zm9udE5hbWUgdHJhaXRzOihVSUZvbnRUcmFpdClfYXV0b2NvcnJlY3Rpb25EYXRhLmZvbnRUcmFp
dHMgc2l6ZTpzY2FsZWRTaXplXTsKLX0KLQotLSAoQk9PTCloYXNTZWxlY3Rpb24KLXsKLSAgICBy
ZXR1cm4gTk87Ci19Ci0KLS0gKEJPT0wpaXNQb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3Np
dGlvbiBhdEJvdW5kYXJ5OihVSVRleHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVjdGlv
bjooVUlUZXh0RGlyZWN0aW9uKWRpcmVjdGlvbgotewotICAgIHJldHVybiBOTzsKLX0KLQotLSAo
VUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbkZyb21Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilw
b3NpdGlvbiB0b0JvdW5kYXJ5OihVSVRleHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVj
dGlvbjooVUlUZXh0RGlyZWN0aW9uKWRpcmVjdGlvbgotewotICAgIHJldHVybiBuaWw7Ci19Ci0K
LS0gKEJPT0wpaXNQb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbiB3aXRoaW5UZXh0
VW5pdDooVUlUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkgaW5EaXJlY3Rpb246KFVJVGV4dERp
cmVjdGlvbilkaXJlY3Rpb24KLXsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKFVJVGV4dFJhbmdl
ICopcmFuZ2VFbmNsb3NpbmdQb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbiB3aXRo
R3JhbnVsYXJpdHk6KFVJVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGluRGlyZWN0aW9uOihV
SVRleHREaXJlY3Rpb24pZGlyZWN0aW9uCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9p
ZCl0YWtlVHJhaXRzRnJvbTooVUlUZXh0SW5wdXRUcmFpdHMgKil0cmFpdHMKLXsKLSAgICBbW3Nl
bGYgdGV4dElucHV0VHJhaXRzXSB0YWtlVHJhaXRzRnJvbTp0cmFpdHNdOwotfQotCi0vLyBGSVhN
RTogSSB3YW50IHRvIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGVzZSBmdW5jdGlvbnMsIGJ1dCBJJ20g
bGVhdmluZyBpdCBmb3Igbm93Ci0vLyB0byBtYWtlIGl0IGVhc2llciB0byBsb29rIHVwIHRoZSBj
b3JyZXNwb25kaW5nIGZ1bmN0aW9ucyBpbiBVSUtpdC4KLQotLSAodm9pZClfc3RhcnRBc3Npc3Rp
bmdLZXlib2FyZAotewotICAgIFtzZWxmIHVzZVNlbGVjdGlvbkFzc2lzdGFudFdpdGhNb2RlOlVJ
V2ViU2VsZWN0aW9uTW9kZVRleHRPbmx5XTsKLX0KLQotLSAodm9pZClfc3RvcEFzc2lzdGluZ0tl
eWJvYXJkCi17Ci0gICAgW3NlbGYgdXNlU2VsZWN0aW9uQXNzaXN0YW50V2l0aE1vZGU6VUlXZWJT
ZWxlY3Rpb25Nb2RlV2ViXTsKLX0KLQotLSAodm9pZClfc3RhcnRBc3Npc3RpbmdOb2RlCi17Ci0g
ICAgX2lzRWRpdGFibGUgPSBZRVM7Ci0gICAgaWYgKCFbc2VsZiBpc0ZpcnN0UmVzcG9uZGVyXSkK
LSAgICAgICAgW3NlbGYgYmVjb21lRmlyc3RSZXNwb25kZXJdOwotCi0gICAgW3NlbGYgX3N0YXJ0
QXNzaXN0aW5nS2V5Ym9hcmRdOwotICAgIFtzZWxmIHJlbG9hZElucHV0Vmlld3NdOwotICAgIFtz
ZWxmIF91cGRhdGVBY2Nlc3NvcnldOwotfQotCi0tICh2b2lkKV9zdG9wQXNzaXN0aW5nTm9kZQot
ewotICAgIF9pc0VkaXRhYmxlID0gTk87Ci0KLSAgICBbc2VsZiBfc3RvcEFzc2lzdGluZ0tleWJv
YXJkXTsKLSAgICBbc2VsZiByZWxvYWRJbnB1dFZpZXdzXTsKLSAgICBbc2VsZiBfdXBkYXRlQWNj
ZXNzb3J5XTsKLX0KLQotLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZAotewotICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBkbyBpZiB0aGUgc2VsZWN0aW9uIGlzIGNo
YW5nZWQgYnkgSmF2YXNjcmlwdC4KLSAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpIHsK
LSAgICAgICAgX21hcmtlZFRleHQgPSAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRp
b24pID8gX3BhZ2UtPmVkaXRvclN0YXRlKCkubWFya2VkVGV4dCA6IFN0cmluZygpOwotICAgICAg
ICBpZiAoIV9zaG93aW5nVGV4dFN0eWxlT3B0aW9ucykKLSAgICAgICAgICAgIFtfdGV4dFNlbGVj
dGlvbkFzc2lzdGFudCBzZWxlY3Rpb25DaGFuZ2VkXTsKLSAgICB9IGVsc2UKLSAgICAgICAgW193
ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgc2VsZWN0aW9uQ2hhbmdlZF07Ci19Ci0KLSNwcmFnbWEgbWFy
ayAtIEltcGxlbWVudGF0aW9uIG9mIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRl
bGVnYXRlLgotCi0tIChCT09MKXNob3VsZElnbm9yZVdlYlRvdWNoCi17Ci0gICAgcmV0dXJuIE5P
OwotfQotCi0tIChCT09MKWlzQW55VG91Y2hPdmVyQWN0aXZlQXJlYTooTlNTZXQgKil0b3VjaGVz
Ci17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotQGVuZAotCi0vLyBVSVRleHRSYW5nZSwgVUlUZXh0
UG9zaXRpb24gYW5kIFVJVGV4dFNlbGVjdGlvblJlY3QgaW1wbGVtZW50YXRpb25zIGZvciBXSzIK
LQotQGltcGxlbWVudGF0aW9uIFdLVGV4dFJhbmdlIChVSVRleHRJbnB1dEFkZGl0aW9ucykKLQot
LSAoQk9PTClfaXNDYXJldAotewotICAgIHJldHVybiBzZWxmLmVtcHR5OwotfQotCi0tIChCT09M
KV9pc1JhbmdlZAotewotICAgIHJldHVybiAhc2VsZi5lbXB0eTsKLX0KLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gV0tUZXh0UmFuZ2UKLQotKyhXS1RleHRSYW5nZSAqKXRleHRSYW5nZVdpdGhT
dGF0ZTooQk9PTClpc05vbmUgaXNSYW5nZTooQk9PTClpc1JhbmdlIGlzRWRpdGFibGU6KEJPT0wp
aXNFZGl0YWJsZSBzdGFydFJlY3Q6KENHUmVjdClzdGFydFJlY3QgZW5kUmVjdDooQ0dSZWN0KWVu
ZFJlY3Qgc2VsZWN0aW9uUmVjdHM6KE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0cyBzZWxlY3RlZFRl
eHRMZW5ndGg6KE5TVUludGVnZXIpc2VsZWN0ZWRUZXh0TGVuZ3RoCi17Ci0gICAgV0tUZXh0UmFu
Z2UgKnJhbmdlID0gW1tXS1RleHRSYW5nZSBhbGxvY10gaW5pdF07Ci0gICAgcmFuZ2UuaXNOb25l
ID0gaXNOb25lOwotICAgIHJhbmdlLmlzUmFuZ2UgPSBpc1JhbmdlOwotICAgIHJhbmdlLmlzRWRp
dGFibGUgPSBpc0VkaXRhYmxlOwotICAgIHJhbmdlLnN0YXJ0UmVjdCA9IHN0YXJ0UmVjdDsKLSAg
ICByYW5nZS5lbmRSZWN0ID0gZW5kUmVjdDsKLSAgICByYW5nZS5zZWxlY3RlZFRleHRMZW5ndGgg
PSBzZWxlY3RlZFRleHRMZW5ndGg7Ci0gICAgcmFuZ2Uuc2VsZWN0aW9uUmVjdHMgPSBzZWxlY3Rp
b25SZWN0czsKLSAgICByZXR1cm4gW3JhbmdlIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAodm9pZClk
ZWFsbG9jCi17Ci0gICAgW3NlbGYuc2VsZWN0aW9uUmVjdHMgcmVsZWFzZV07Ci0gICAgW3N1cGVy
IGRlYWxsb2NdOwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCi17Ci0gICAgcmV0dXJu
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAoJXApIC0gc3RhcnQ6JUAsIGVuZDolQCIs
IFtzZWxmIGNsYXNzXSwgc2VsZiwgTlNTdHJpbmdGcm9tQ0dSZWN0KHNlbGYuc3RhcnRSZWN0KSwg
TlNTdHJpbmdGcm9tQ0dSZWN0KHNlbGYuZW5kUmVjdCldOwotfQotCi0tIChXS1RleHRQb3NpdGlv
biAqKXN0YXJ0Ci17Ci0gICAgV0tUZXh0UG9zaXRpb24gKnBvcyA9IFtXS1RleHRQb3NpdGlvbiB0
ZXh0UG9zaXRpb25XaXRoUmVjdDpzZWxmLnN0YXJ0UmVjdF07Ci0gICAgcmV0dXJuIHBvczsKLX0K
LQotLSAoVUlUZXh0UG9zaXRpb24gKillbmQKLXsKLSAgICBXS1RleHRQb3NpdGlvbiAqcG9zID0g
W1dLVGV4dFBvc2l0aW9uIHRleHRQb3NpdGlvbldpdGhSZWN0OnNlbGYuZW5kUmVjdF07Ci0gICAg
cmV0dXJuIHBvczsKLX0KLQotLSAoQk9PTClpc0VtcHR5Ci17Ci0gICAgcmV0dXJuICFzZWxmLmlz
UmFuZ2U7Ci19Ci0KLS8vIEZJWE1FOiBPdmVycmlkaW5nIGlzRXF1YWw6IHdpdGhvdXQgb3ZlcnJp
ZGluZyBoYXNoIHdpbGwgY2F1c2UgdHJvdWJsZSBpZiB0aGlzIGV2ZXIgZ29lcyBpbnRvIGFuIE5T
U2V0IG9yIGlzIHRoZSBrZXkgaW4gYW4gTlNEaWN0aW9uYXJ5LAotLy8gc2luY2UgdHdvIGVxdWFs
IGl0ZW1zIGNvdWxkIGhhdmUgZGlmZmVyZW50IGhhc2hlcy4KLS0gKEJPT0wpaXNFcXVhbDooaWQp
b3RoZXIKLXsKLSAgICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNzOltXS1RleHRSYW5nZSBjbGFz
c11dKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICBXS1RleHRSYW5nZSAqb3RoZXJSYW5nZSA9
IChXS1RleHRSYW5nZSAqKW90aGVyOwotCi0gICAgaWYgKHNlbGYgPT0gb3RoZXIpCi0gICAgICAg
IHJldHVybiBZRVM7Ci0KLSAgICAvLyBGSVhNRTogUHJvYmFibHkgaW5jb3JyZWN0IGZvciBlcXVh
bGl0eSB0byBpZ25vcmUgc28gbXVjaCBvZiB0aGUgb2JqZWN0IHN0YXRlLgotICAgIC8vIEl0IGln
bm9yZXMgaXNOb25lLCBpc0VkaXRhYmxlLCBzZWxlY3RlZFRleHRMZW5ndGgsIGFuZCBzZWxlY3Rp
b25SZWN0cy4KLQotICAgIGlmIChzZWxmLmlzUmFuZ2UpIHsKLSAgICAgICAgaWYgKCFvdGhlclJh
bmdlLmlzUmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIHJldHVybiBDR1Jl
Y3RFcXVhbFRvUmVjdChzZWxmLnN0YXJ0UmVjdCwgb3RoZXJSYW5nZS5zdGFydFJlY3QpICYmIENH
UmVjdEVxdWFsVG9SZWN0KHNlbGYuZW5kUmVjdCwgb3RoZXJSYW5nZS5lbmRSZWN0KTsKLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAob3RoZXJSYW5nZS5pc1JhbmdlKQotICAgICAgICAgICAgcmV0
dXJuIE5POwotICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBpc05vbmUgaGVy
ZT8KLSAgICAgICAgcmV0dXJuIENHUmVjdEVxdWFsVG9SZWN0KHNlbGYuc3RhcnRSZWN0LCBvdGhl
clJhbmdlLnN0YXJ0UmVjdCk7Ci0gICAgfQotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
S1RleHRQb3NpdGlvbgotCi1Ac3ludGhlc2l6ZSBwb3NpdGlvblJlY3QgPSBfcG9zaXRpb25SZWN0
OwotCi0rIChXS1RleHRQb3NpdGlvbiAqKXRleHRQb3NpdGlvbldpdGhSZWN0OihDR1JlY3QpcG9z
aXRpb25SZWN0Ci17Ci0gICAgV0tUZXh0UG9zaXRpb24gKnBvcyA9W1tXS1RleHRQb3NpdGlvbiBh
bGxvY10gaW5pdF07Ci0gICAgcG9zLnBvc2l0aW9uUmVjdCA9IHBvc2l0aW9uUmVjdDsKLSAgICBy
ZXR1cm4gW3BvcyBhdXRvcmVsZWFzZV07Ci19Ci0KLS8vIEZJWE1FOiBPdmVycmlkaW5nIGlzRXF1
YWw6IHdpdGhvdXQgb3ZlcnJpZGluZyBoYXNoIHdpbGwgY2F1c2UgdHJvdWJsZSBpZiB0aGlzIGV2
ZXIgZ29lcyBpbnRvIGEgTlNTZXQgb3IgaXMgdGhlIGtleSBpbiBhbiBOU0RpY3Rpb25hcnksCi0v
LyBzaW5jZSB0d28gZXF1YWwgaXRlbXMgY291bGQgaGF2ZSBkaWZmZXJlbnQgaGFzaGVzLgotLSAo
Qk9PTClpc0VxdWFsOihpZClvdGhlcgotewotICAgIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6
W1dLVGV4dFBvc2l0aW9uIGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIHJldHVy
biBDR1JlY3RFcXVhbFRvUmVjdChzZWxmLnBvc2l0aW9uUmVjdCwgKChXS1RleHRQb3NpdGlvbiAq
KW90aGVyKS5wb3NpdGlvblJlY3QpOwotfQotCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCi17
Ci0gICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPFdLVGV4dFBvc2l0aW9u
OiAlcCwgeyVAfT4iLCBzZWxmLCBOU1N0cmluZ0Zyb21DR1JlY3Qoc2VsZi5wb3NpdGlvblJlY3Qp
XTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tUZXh0U2VsZWN0aW9uUmVjdAotCi0t
IChpZClpbml0V2l0aFdlYlJlY3Q6KFdlYlNlbGVjdGlvblJlY3QgKil3UmVjdAotewotICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKHNlbGYpCi0gICAgICAgIHNlbGYud2ViUmVjdCA9
IHdSZWN0OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAg
IHNlbGYud2ViUmVjdCA9IG5pbDsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS8vIEZJWE1F
OiB3ZSBhcmUgdXNpbmcgdGhpcyBpbXBsZW1lbnRhdGlvbiBmb3Igbm93Ci0vLyB0aGF0IHVzZXMg
V2ViU2VsZWN0aW9uUmVjdCwgYnV0IHdlIHdhbnQgdG8gcHJvdmlkZSBvdXIgb3duCi0vLyBiYXNl
ZCBvbiBXZWJDb3JlOjpTZWxlY3Rpb25SZWN0LgotCi0rIChOU0FycmF5ICopdGV4dFNlbGVjdGlv
blJlY3RzV2l0aFdlYlJlY3RzOihOU0FycmF5ICopd2ViUmVjdHMKLXsKLSAgICBOU011dGFibGVB
cnJheSAqYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6d2ViUmVjdHMu
Y291bnRdOwotICAgIGZvciAoV2ViU2VsZWN0aW9uUmVjdCAqd2ViUmVjdCBpbiB3ZWJSZWN0cykg
ewotICAgICAgICBSZXRhaW5QdHI8V0tUZXh0U2VsZWN0aW9uUmVjdD4gcmVjdCA9IGFkb3B0TlMo
W1tXS1RleHRTZWxlY3Rpb25SZWN0IGFsbG9jXSBpbml0V2l0aFdlYlJlY3Q6d2ViUmVjdF0pOwot
ICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OnJlY3QuZ2V0KCldOwotICAgIH0KLSAgICByZXR1cm4g
YXJyYXk7Ci19Ci0KLS0gKENHUmVjdClyZWN0Ci17Ci0gICAgcmV0dXJuIF93ZWJSZWN0LnJlY3Q7
Ci19Ci0KLS0gKFVJVGV4dFdyaXRpbmdEaXJlY3Rpb24pd3JpdGluZ0RpcmVjdGlvbgotewotICAg
IHJldHVybiAoVUlUZXh0V3JpdGluZ0RpcmVjdGlvbilfd2ViUmVjdC53cml0aW5nRGlyZWN0aW9u
OwotfQotCi0tIChVSVRleHRSYW5nZSAqKXJhbmdlCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQot
LSAoQk9PTCljb250YWluc1N0YXJ0Ci17Ci0gICAgcmV0dXJuIF93ZWJSZWN0LmNvbnRhaW5zU3Rh
cnQ7Ci19Ci0KLS0gKEJPT0wpY29udGFpbnNFbmQKLXsKLSAgICByZXR1cm4gX3dlYlJlY3QuY29u
dGFpbnNFbmQ7Ci19Ci0KLS0gKEJPT0wpaXNWZXJ0aWNhbAotewotICAgIHJldHVybiAhX3dlYlJl
Y3QuaXNIb3Jpem9udGFsOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0F1dG9jb3Jy
ZWN0aW9uUmVjdHMKLQotKyAoV0tBdXRvY29ycmVjdGlvblJlY3RzICopYXV0b2NvcnJlY3Rpb25S
ZWN0c1dpdGhSZWN0czooQ0dSZWN0KWZpcnN0UmVjdCBsYXN0UmVjdDooQ0dSZWN0KWxhc3RSZWN0
Ci17Ci0gICAgV0tBdXRvY29ycmVjdGlvblJlY3RzICpyZWN0cyA9W1tXS0F1dG9jb3JyZWN0aW9u
UmVjdHMgYWxsb2NdIGluaXRdOwotICAgIHJlY3RzLmZpcnN0UmVjdCA9IGZpcnN0UmVjdDsKLSAg
ICByZWN0cy5sYXN0UmVjdCA9IGxhc3RSZWN0OwotICAgIHJldHVybiBbcmVjdHMgYXV0b3JlbGVh
c2VdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0F1dG9jb3JyZWN0aW9uQ29udGV4
dAotCi0rIChXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCAqKWF1dG9jb3JyZWN0aW9uQ29udGV4dFdp
dGhEYXRhOihOU1N0cmluZyAqKWJlZm9yZVRleHQgbWFya2VkVGV4dDooTlNTdHJpbmcgKiltYXJr
ZWRUZXh0IHNlbGVjdGVkVGV4dDooTlNTdHJpbmcgKilzZWxlY3RlZFRleHQgYWZ0ZXJUZXh0OihO
U1N0cmluZyAqKWFmdGVyVGV4dCBzZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0OihOU1JhbmdlKXJh
bmdlCi17Ci0gICAgV0tBdXRvY29ycmVjdGlvbkNvbnRleHQgKmNvbnRleHQgPSBbW1dLQXV0b2Nv
cnJlY3Rpb25Db250ZXh0IGFsbG9jXSBpbml0XTsKLQotICAgIGlmIChbYmVmb3JlVGV4dCBsZW5n
dGhdKQotICAgICAgICBjb250ZXh0LmNvbnRleHRCZWZvcmVTZWxlY3Rpb24gPSBbYmVmb3JlVGV4
dCBjb3B5XTsKLSAgICBpZiAoW3NlbGVjdGVkVGV4dCBsZW5ndGhdKQotICAgICAgICBjb250ZXh0
LnNlbGVjdGVkVGV4dCA9IFtzZWxlY3RlZFRleHQgY29weV07Ci0gICAgaWYgKFttYXJrZWRUZXh0
IGxlbmd0aF0pCi0gICAgICAgIGNvbnRleHQubWFya2VkVGV4dCA9IFttYXJrZWRUZXh0IGNvcHld
OwotICAgIGlmIChbYWZ0ZXJUZXh0IGxlbmd0aF0pCi0gICAgICAgIGNvbnRleHQuY29udGV4dEFm
dGVyU2VsZWN0aW9uID0gW2FmdGVyVGV4dCBjb3B5XTsKLSAgICBjb250ZXh0LnJhbmdlSW5NYXJr
ZWRUZXh0ID0gcmFuZ2U7Ci0gICAgcmV0dXJuIFtjb250ZXh0IGF1dG9yZWxlYXNlXTsKLX0KLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3NlbGYuY29udGV4dEJlZm9yZVNlbGVjdGlvbiByZWxl
YXNlXTsKLSAgICBbc2VsZi5tYXJrZWRUZXh0IHJlbGVhc2VdOwotICAgIFtzZWxmLnNlbGVjdGVk
VGV4dCByZWxlYXNlXTsKLSAgICBbc2VsZi5jb250ZXh0QWZ0ZXJTZWxlY3Rpb24gcmVsZWFzZV07
Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLU2Nyb2xsVmlldy5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9pb3MvV0tTY3JvbGxWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ3NzQwZWQ3NWRmMmUyZTc0MGQ2ZDdlMjNjN2EyY2EyNDllYjc1NGMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9pb3MvV0tTY3JvbGxWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCA8VUlLaXQvVUlXZWJTY3JvbGxWaWV3Lmg+Ci0KLUBp
bnRlcmZhY2UgV0tTY3JvbGxWaWV3IDogVUlXZWJTY3JvbGxWaWV3Ci0KLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCBhc3NpZ24pIGlkIDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4gaW50ZXJuYWxEZWxlZ2F0
ZTsKLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3Mv
V0tTY3JvbGxWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tTY3Jv
bGxWaWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzRiZjAxODAyNTU4ZTRj
NzM5OGU2NzJkM2NkZGZiNjUzYmZmNzdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLU2Nyb2xs
Vmlldy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXS1Njcm9sbFZpZXcuaCIKLQotQGludGVyZmFjZSBX
S1Njcm9sbFZpZXdEZWxlZ2F0ZUZvcndhcmRlciA6IE5TT2JqZWN0IDxVSVNjcm9sbFZpZXdEZWxl
Z2F0ZT4KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZXJuYWxEZWxlZ2F0ZTooaWQgPFVJ
U2Nyb2xsVmlld0RlbGVnYXRlPilpbnRlcm5hbERlbGVnYXRlIGV4dGVybmFsRGVsZWdhdGU6KGlk
IDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4pZXh0ZXJuYWxEZWxlZ2F0ZTsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gV0tTY3JvbGxWaWV3RGVsZWdhdGVGb3J3YXJkZXIgewotICAgIGlkIDxVSVNj
cm9sbFZpZXdEZWxlZ2F0ZT4gX2ludGVybmFsRGVsZWdhdGU7Ci0gICAgaWQgPFVJU2Nyb2xsVmll
d0RlbGVnYXRlPiBfZXh0ZXJuYWxEZWxlZ2F0ZTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoSW50ZXJuYWxEZWxlZ2F0ZTooaWQgPFVJU2Nyb2xsVmlld0RlbGVnYXRlPilpbnRlcm5hbERl
bGVnYXRlIGV4dGVybmFsRGVsZWdhdGU6KGlkIDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4pZXh0ZXJu
YWxEZWxlZ2F0ZQotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIF9pbnRlcm5hbERlbGVnYXRlID0gaW50ZXJuYWxEZWxl
Z2F0ZTsKLSAgICBfZXh0ZXJuYWxEZWxlZ2F0ZSA9IGV4dGVybmFsRGVsZWdhdGU7Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKE5TTWV0aG9kU2lnbmF0dXJlICopbWV0aG9kU2lnbmF0dXJlRm9y
U2VsZWN0b3I6KFNFTClhU2VsZWN0b3IKLXsKLSAgICBOU01ldGhvZFNpZ25hdHVyZSAqc2lnbmF0
dXJlID0gW3N1cGVyIG1ldGhvZFNpZ25hdHVyZUZvclNlbGVjdG9yOmFTZWxlY3Rvcl07Ci0gICAg
aWYgKCFzaWduYXR1cmUpCi0gICAgICAgIHNpZ25hdHVyZSA9IFsoTlNPYmplY3QgKilfaW50ZXJu
YWxEZWxlZ2F0ZSBtZXRob2RTaWduYXR1cmVGb3JTZWxlY3RvcjphU2VsZWN0b3JdOwotICAgIGlm
ICghc2lnbmF0dXJlKQotICAgICAgICBzaWduYXR1cmUgPSBbKE5TT2JqZWN0ICopX2V4dGVybmFs
RGVsZWdhdGUgbWV0aG9kU2lnbmF0dXJlRm9yU2VsZWN0b3I6YVNlbGVjdG9yXTsKLSAgICByZXR1
cm4gc2lnbmF0dXJlOwotfQotCi0tIChCT09MKXJlc3BvbmRzVG9TZWxlY3RvcjooU0VMKWFTZWxl
Y3RvcgotewotICAgIHJldHVybiBbc3VwZXIgcmVzcG9uZHNUb1NlbGVjdG9yOmFTZWxlY3Rvcl0g
fHwgW19pbnRlcm5hbERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjphU2VsZWN0b3JdIHx8IFtf
ZXh0ZXJuYWxEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6YVNlbGVjdG9yXTsKLX0KLQotLSAo
dm9pZClmb3J3YXJkSW52b2NhdGlvbjooTlNJbnZvY2F0aW9uICopYW5JbnZvY2F0aW9uCi17Ci0g
ICAgQk9PTCBtZXNzYWdlSGFuZGxlZCA9IE5POwotICAgIGlmIChbX2ludGVybmFsRGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOlthbkludm9jYXRpb24gc2VsZWN0b3JdXSkgewotICAgICAgICBb
YW5JbnZvY2F0aW9uIGludm9rZVdpdGhUYXJnZXQ6X2ludGVybmFsRGVsZWdhdGVdOwotICAgICAg
ICBtZXNzYWdlSGFuZGxlZCA9IFlFUzsKLSAgICB9Ci0gICAgaWYgKFtfZXh0ZXJuYWxEZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6W2FuSW52b2NhdGlvbiBzZWxlY3Rvcl1dKSB7Ci0gICAgICAg
IFthbkludm9jYXRpb24gaW52b2tlV2l0aFRhcmdldDpfZXh0ZXJuYWxEZWxlZ2F0ZV07Ci0gICAg
ICAgIG1lc3NhZ2VIYW5kbGVkID0gWUVTOwotICAgIH0KLSAgICBpZiAoIW1lc3NhZ2VIYW5kbGVk
KQotICAgICAgICBbc3VwZXIgZm9yd2FyZEludm9jYXRpb246YW5JbnZvY2F0aW9uXTsKLX0KLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tTY3JvbGxWaWV3IHsKLSAgICBpZCA8VUlTY3JvbGxW
aWV3RGVsZWdhdGU+IF9leHRlcm5hbERlbGVnYXRlOwotICAgIFdLU2Nyb2xsVmlld0RlbGVnYXRl
Rm9yd2FyZGVyICpfZGVsZWdhdGVGb3J3YXJkZXI7Ci19Ci0KLS0gKEJPT0wpdG91Y2hlc1Nob3Vs
ZENhbmNlbEluQ29udGVudFZpZXc6KFVJVmlldyAqKWNvbnRlbnRWaWV3Ci17Ci0gICAgcmV0dXJu
IE5POwotfQotCi0tICh2b2lkKXNldEludGVybmFsRGVsZWdhdGU6KGlkIDxVSVNjcm9sbFZpZXdE
ZWxlZ2F0ZT4paW50ZXJuYWxEZWxlZ2F0ZQotewotICAgIGlmIChpbnRlcm5hbERlbGVnYXRlID09
IF9pbnRlcm5hbERlbGVnYXRlKQotICAgICAgICByZXR1cm47Ci0gICAgX2ludGVybmFsRGVsZWdh
dGUgPSBpbnRlcm5hbERlbGVnYXRlOwotICAgIFtzZWxmIF91cGRhdGVEZWxlZ2F0ZV07Ci19Ci0K
LS0gKHZvaWQpc2V0RGVsZWdhdGU6KGlkIDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4pZGVsZWdhdGUK
LXsKLSAgICBpZiAoX2V4dGVybmFsRGVsZWdhdGUgPT0gZGVsZWdhdGUpCi0gICAgICAgIHJldHVy
bjsKLSAgICBfZXh0ZXJuYWxEZWxlZ2F0ZSA9IGRlbGVnYXRlOwotICAgIFtzZWxmIF91cGRhdGVE
ZWxlZ2F0ZV07Ci19Ci0KLS0gKGlkIDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4pZGVsZWdhdGUKLXsK
LSAgICByZXR1cm4gX2V4dGVybmFsRGVsZWdhdGU7Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZURlbGVn
YXRlCi17Ci0gICAgV0tTY3JvbGxWaWV3RGVsZWdhdGVGb3J3YXJkZXIgKm9sZEZvcndhcmRlciA9
IF9kZWxlZ2F0ZUZvcndhcmRlcjsKLSAgICBfZGVsZWdhdGVGb3J3YXJkZXIgPSBuaWw7Ci0gICAg
aWYgKCFfZXh0ZXJuYWxEZWxlZ2F0ZSkKLSAgICAgICAgW3N1cGVyIHNldERlbGVnYXRlOl9pbnRl
cm5hbERlbGVnYXRlXTsKLSAgICBlbHNlIGlmICghX2ludGVybmFsRGVsZWdhdGUpCi0gICAgICAg
IFtzdXBlciBzZXREZWxlZ2F0ZTpfZXh0ZXJuYWxEZWxlZ2F0ZV07Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIF9kZWxlZ2F0ZUZvcndhcmRlciA9IFtbV0tTY3JvbGxWaWV3RGVsZWdhdGVGb3J3YXJkZXIg
YWxsb2NdIGluaXRXaXRoSW50ZXJuYWxEZWxlZ2F0ZTpfaW50ZXJuYWxEZWxlZ2F0ZSBleHRlcm5h
bERlbGVnYXRlOl9leHRlcm5hbERlbGVnYXRlXTsKLSAgICAgICAgW3N1cGVyIHNldERlbGVnYXRl
Ol9kZWxlZ2F0ZUZvcndhcmRlcl07Ci0gICAgfQotICAgIFtvbGRGb3J3YXJkZXIgcmVsZWFzZV07
Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZGVsZWdhdGVGb3J3YXJkZXIgcmVsZWFz
ZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NDRlMGIz
MWM4Y2JlYzA2NGIwNTUwYTc1ZDkzYTQzZmEwMTMwNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCkBAIC0wLDAgKzEs
MTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlQ2xpZW50SW1wbElPU19oCisj
ZGVmaW5lIFBhZ2VDbGllbnRJbXBsSU9TX2gKKworI2ltcG9ydCAiUGFnZUNsaWVudC5oIgorI2lt
cG9ydCAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgorCitAY2xhc3MgV0tDb250ZW50VmlldzsKKworbmFtZXNwYWNlIFdlYktpdCB7CisgICAg
CitjbGFzcyBQYWdlQ2xpZW50SW1wbCA6IHB1YmxpYyBQYWdlQ2xpZW50CisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorICAgICwgcHVibGljIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGll
bnQKKyNlbmRpZgorICAgIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBQYWdlQ2xpZW50SW1wbChX
S0NvbnRlbnRWaWV3ICopOworICAgIHZpcnR1YWwgflBhZ2VDbGllbnRJbXBsKCk7CisgICAgCitw
cml2YXRlOgorICAgIC8vIFBhZ2VDbGllbnQKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxE
cmF3aW5nQXJlYVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5VmlldygpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgYm9vbCBjYW5TY3JvbGxWaWV3KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OkludFNpemUgdmlld1NpemUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3
V2luZG93QWN0aXZlKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzVmlld0ZvY3VzZWQo
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3VmlzaWJsZSgpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdJbldpbmRvdygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBwcm9jZXNzRGlkRXhpdCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxh
dW5jaFByb2Nlc3MoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZUNsb3NlZCgpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwcmVmZXJlbmNlc0RpZENoYW5nZSgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjaWRlUG9saWN5Rm9yR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJGcmFtZVByb3h5JiwgV2ViU2VjdXJpdHlPcmlnaW4m
LCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZSgpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdl
YkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBh
Z2VQcm94eTo6VW5kb09yUmVkbykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxs
RWRpdENvbW1hbmRzKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGNhblVuZG9SZWRvKFdl
YlBhZ2VQcm94eTo6VW5kb09yUmVkbykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBhY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGludGVycHJldEtleUV2
ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJl
c3NDb21tYW5kPiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBleGVjdXRlU2F2ZWRDb21t
YW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGllbnRQb3Np
dGlvbiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSwgYm9vbCBpc0xpbmtE
cmFnKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSgp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXNldFNlY3VyZUlucHV0U3RhdGUoKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRD
b21wb3NpdGlvbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBtYWtlRmlyc3RSZXNwb25k
ZXIoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9E
ZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3Jl
ZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCkgb3ZlcnJpZGU7
CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICB2aXJ0dWFsIHZvaWQgZG9uZVdpdGhUb3Vj
aEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCkg
b3ZlcnJpZGU7CisjZW5kaWYKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJv
eHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVBy
b3h5KFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaW5kSW5k
aWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCwgYm9vbCBhbmlt
YXRlKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ1Jvb3RMYXllcihDQUxheWVyICopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgQ0FMYXll
ciAqYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgTGF5ZXJIb3N0aW5nTW9kZSB2aWV3TGF5ZXJIb3N0aW5nTW9kZSgpIG92ZXJyaWRl
IHsgcmV0dXJuIExheWVySG9zdGluZ01vZGU6Ok91dE9mUHJvY2VzczsgfQorCisgICAgdmlydHVh
bCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gdGFrZVZpZXdTbmFwc2hvdCgpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCB3aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRp
dmVXZWJXaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ3VzdG9t
U3dpcGVWaWV3cygpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGRpZEdldFRhcEhpZ2hs
aWdodEdlb21ldHJpZXModWludDY0X3QgcmVxdWVzdElELCBjb25zdCBXZWJDb3JlOjpDb2xvciYs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+JiBoaWdobGlnaHRlZFF1YWRzLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiB0b3BSaWdodFJhZGl1cywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYm90dG9tTGVmdFJhZGl1
cywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpIG92ZXJyaWRlOwor
CisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdExheWVyVHJlZShjb25zdCBSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbiYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0QXNzaXN0
aW5nTm9kZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgYm9vbCBoYXNOZXh0Rm9jdXNhYmxlLCBi
b29sIGhhc1ByZXZpb3VzRm9jdXNhYmxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rv
cEFzc2lzdGluZ05vZGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uRGlk
Q2hhbmdlKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGludGVycHJldEtleUV2ZW50KGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIGlzQ2hhckV2ZW50KSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZShjb25zdCBJbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCBzYXZlSW1h
Z2VUb0xpYnJhcnkoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+KTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2godWludDMyX3QgdG91Y2gs
IHVpbnQzMl90IGZsYWdzLCBmbG9hdCBncm93VGhyZXNob2xkLCBmbG9hdCBzaHJpbmtUaHJlc2hv
bGQpOworCisgICAgLy8gQXV4aWxpYXJ5IENsaWVudCBDcmVhdGlvbgorI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKKyAgICB2aXJ1YWwgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCYg
ZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpIG92ZXJyaWRlOworI2VuZGlmCisKKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgLy8gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNs
aWVudAorICAgIHZpcnR1YWwgdm9pZCBjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIGlzRnVsbFNjcmVlbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBlbnRlckZ1bGxTY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1
bGxTY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnYW5FbnRlckZ1bGxTY3Jl
ZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBmaW5hbEZyYW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnYW5FeGl0
RnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICBXS0Nv
bnRlbnRWaWV3ICptX2NvbnRlbnRWaWV3OworfTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gUGFnZUNsaWVudEltcGxJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODVmNTEwN2YxNDdhZjcy
Y2QxNzVhZTMwZDJiNzQ5ZmM5ODYxNmZkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTAsMCArMSw0MDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBhZ2VDbGll
bnRJbXBsSU9TLmgiCisKKyNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbXBv
cnQgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCisjaW1wb3J0ICJXS0NvbnRl
bnRWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkNvbnRleHRNZW51UHJveHkuaCIKKyNpbXBv
cnQgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKKyNpbXBvcnQgPFVJS2l0L1VJSW1hZ2VQaWNrZXJD
b250cm9sbGVyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJV2ViVG91Y2hFdmVudHNHZXN0
dXJlUmVjb2duaXplci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRC
dWZmZXIuaD4KKworQGludGVyZmFjZSBVSVZpZXcgKElQSSkKKy0gKFVJU2Nyb2xsVmlldyAqKV9z
Y3JvbGxlcjsKK0BlbmQKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwoV0tDb250ZW50VmlldyAq
dmlldykKKyAgICA6IG1fY29udGVudFZpZXcodmlldykKK3sKK30KKworUGFnZUNsaWVudEltcGw6
On5QYWdlQ2xpZW50SW1wbCgpCit7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYVBy
b3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCit7CisgICAgcmV0
dXJuIFttX2NvbnRlbnRWaWV3IF9jcmVhdGVEcmF3aW5nQXJlYVByb3h5XTsKK30KKwordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpk
aXNwbGF5VmlldygpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OnNjcm9sbFZpZXcoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmKQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjpj
YW5TY3JvbGxWaWV3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworSW50U2l6ZSBQYWdlQ2xpZW50SW1wbDo6dmlld1NpemUoKQoreworICAgIGlmIChV
SVNjcm9sbFZpZXcgKnNjcm9sbGVyID0gW21fY29udGVudFZpZXcgX3Njcm9sbGVyXSkKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoc2Nyb2xsZXIuYm91bmRzLnNpemUpOworCisgICAgcmV0dXJuIElu
dFNpemUobV9jb250ZW50Vmlldy5ib3VuZHMuc2l6ZSk7Cit9CisKK2Jvb2wgUGFnZUNsaWVudElt
cGw6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWdl
Q2xpZW50SW1wbDo6aXNWaWV3VmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3co
KQoreworICAgIHJldHVybiBbbV9jb250ZW50VmlldyB3aW5kb3ddOworfQorCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjpwcm9jZXNzRGlkRXhpdCgpCit7CisgICAgW21fY29udGVudFZpZXcgX3Byb2Nl
c3NEaWRFeGl0XTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVuY2hQcm9jZXNz
KCkKK3sKKyAgICBbbV9jb250ZW50VmlldyBfZGlkUmVsYXVuY2hQcm9jZXNzXTsKK30KKwordm9p
ZCBQYWdlQ2xpZW50SW1wbDo6cGFnZUNsb3NlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cHJlZmVyZW5jZXNEaWRDaGFuZ2UoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnRvb2xUaXBDaGFu
Z2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdChXZWJGcmFtZVByb3h5JiBmcmFtZSwgV2ViU2VjdXJpdHlPcmlnaW4m
IG9yaWdpbiwgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5JiByZXF1ZXN0KQorewor
ICAgIFttX2NvbnRlbnRWaWV3IF9kZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9t
T3JpZ2luOm9yaWdpbiBmcmFtZTpmcmFtZSByZXF1ZXN0OnJlcXVlc3RdOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1l
KCkKK3sKKyAgICBbbV9jb250ZW50VmlldyBfZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZV07Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1cnNvckhp
ZGRlblVudGlsTW91c2VNb3Zlcyhib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBW
aWV3cG9ydEF0dHJpYnV0ZXMmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29t
bWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyQWxsRWRpdENvbW1hbmRzKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjpjYW5V
bmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmV4ZWN1dGVV
bmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6YWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tl
blJlY2VpdmVkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3Qg
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+JikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQYWdlQ2xp
ZW50SW1wbDo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYg
ZXZlbnQsIGJvb2wgaXNDaGFyRXZlbnQpCit7CisgICAgcmV0dXJuIFttX2NvbnRlbnRWaWV3IF9p
bnRlcnByZXRLZXlFdmVudDpldmVudC5uYXRpdmVFdmVudCgpIGlzQ2hhckV2ZW50OmlzQ2hhckV2
ZW50XTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cG9zaXRpb25JbmZvcm1hdGlvbkRpZENo
YW5nZShjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYgaW5mbykKK3sKKyAg
ICBbbV9jb250ZW50VmlldyBfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZTppbmZvXTsKK30K
Kwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2F2ZUltYWdlVG9MaWJyYXJ5KFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBpbWFnZUJ1ZmZlcikKK3sKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBpbWFnZURh
dGEgPSBpbWFnZUJ1ZmZlci0+Y3JlYXRlTlNEYXRhKCk7CisgICAgVUlJbWFnZURhdGFXcml0ZVRv
U2F2ZWRQaG90b3NBbGJ1bShpbWFnZURhdGEuZ2V0KCksIG5pbCwgTlVMTCwgTlVMTCk7Cit9CisK
K2Jvb2wgUGFnZUNsaWVudEltcGw6OmV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0
IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldERyYWdJbWFnZShjb25zdCBJbnRQb2ludCYsIFBh
c3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZWxlY3Rpb25EaWRDaGFuZ2UoKQoreworICAg
IFttX2NvbnRlbnRWaWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsKK30KKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVzZXRTZWN1cmVJbnB1dFN0YXRlKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpub3RpZnlJbnB1
dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjptYWtlRmlyc3RSZXNwb25kZXIoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29u
dmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCitGbG9hdFJlY3QgUGFnZUNs
aWVudEltcGw6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK0ludFBv
aW50IFBhZ2VDbGllbnRJbXBsOjpzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBwb2lu
dCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQoW21fY29udGVudFZpZXcgY29udmVydFBvaW50OnBv
aW50IGZyb21WaWV3Om5pbF0pOworfQorCitJbnRSZWN0IFBhZ2VDbGllbnRJbXBsOjpyb290Vmll
d1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QoW21fY29udGVudFZpZXcgY29udmVydFJlY3Q6cmVjdCB0b1ZpZXc6bmlsXSk7Cit9CisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudCYsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZl
bnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgbmF0aXZlV2VidG91Y2hFdmVudCwgYm9vbCBl
dmVudEhhbmRsZWQpCit7CisgICAgW21fY29udGVudFZpZXcgX3dlYlRvdWNoRXZlbnQ6bmF0aXZl
V2VidG91Y2hFdmVudCBwcmV2ZW50c05hdGl2ZUdlc3R1cmVzOmV2ZW50SGFuZGxlZF07Cit9Cisj
ZW5kaWYKKworUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNy
ZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBQ
YWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OnNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCwg
Ym9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQm
IGxheWVyVHJlZUNvbnRleHQpCit7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmV4aXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29u
c3QgTGF5ZXJUcmVlQ29udGV4dCYpCit7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoQ0FMYXllciAqcm9vdExheWVyKQoreworICAg
IFttX2NvbnRlbnRWaWV3IF9zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyOnJvb3RM
YXllcl07Cit9CisKK0NBTGF5ZXIgKlBhZ2VDbGllbnRJbXBsOjphY2NlbGVyYXRlZENvbXBvc2l0
aW5nUm9vdExheWVyKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBudWxscHRyOworfQorCitSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gUGFnZUNsaWVudEltcGw6OnRh
a2VWaWV3U25hcHNob3QoKQoreworICAgIHJldHVybiBbbV9jb250ZW50VmlldyBfdGFrZVZpZXdT
bmFwc2hvdF07Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OndoZWVsRXZlbnRXYXNOb3RIYW5k
bGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyQ3VzdG9tU3dp
cGVWaWV3cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6ZGlkR2V0VGFwSGlnaGxpZ2h0R2VvbWV0cmllcyh1aW50NjRfdCByZXF1ZXN0SUQsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvciwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UXVh
ZD4mIGhpZ2hsaWdodGVkUXVhZHMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRvcExlZnRSYWRp
dXMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBib3R0
b21SaWdodFJhZGl1cykKK3sKKyAgICBbbV9jb250ZW50VmlldyBfZGlkR2V0VGFwSGlnaGxpZ2h0
Rm9yUmVxdWVzdDpyZXF1ZXN0SUQgY29sb3I6Y29sb3IgcXVhZHM6aGlnaGxpZ2h0ZWRRdWFkcyB0
b3BMZWZ0UmFkaXVzOnRvcExlZnRSYWRpdXMgdG9wUmlnaHRSYWRpdXM6dG9wUmlnaHRSYWRpdXMg
Ym90dG9tTGVmdFJhZGl1czpib3R0b21MZWZ0UmFkaXVzIGJvdHRvbVJpZ2h0UmFkaXVzOmJvdHRv
bVJpZ2h0UmFkaXVzXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ29tbWl0TGF5ZXJU
cmVlKGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiBsYXllclRyZWVUcmFuc2FjdGlv
bikKK3sKKyAgICBbbV9jb250ZW50VmlldyBfZGlkQ29tbWl0TGF5ZXJUcmVlOmxheWVyVHJlZVRy
YW5zYWN0aW9uXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c3RhcnRBc3Npc3RpbmdOb2Rl
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBib29sLCBib29sKQoreworICAgIFttX2NvbnRlbnRW
aWV3IF9zdGFydEFzc2lzdGluZ05vZGVdOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzdG9w
QXNzaXN0aW5nTm9kZSgpCit7CisgICAgW21fY29udGVudFZpZXcgX3N0b3BBc3Npc3RpbmdOb2Rl
XTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRo
VG91Y2godWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGZsYWdzLCBmbG9hdCBncm93VGhyZXNob2xk
LCBmbG9hdCBzaHJpbmtUaHJlc2hvbGQpCit7CisgICAgW21fY29udGVudFZpZXcgX2RpZFVwZGF0
ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoOihXS1NlbGVjdGlvblRvdWNoKXRvdWNoIHdpdGhGbGFn
czooV0tTZWxlY3Rpb25GbGFncylmbGFncyBncm93VGhyZXNob2xkOmdyb3dUaHJlc2hvbGQgc2hy
aW5rVGhyZXNob2xkOnNocmlua1RocmVzaG9sZF07Cit9CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCisKK1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIFBhZ2VDbGllbnRJbXBs
OjpmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkKK3sKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKKy8vIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQKKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6Y2xvc2VGdWxsU2NyZWVuTWFuYWdlcigpCit7Cit9CisKK2Jvb2wgUGFnZUNsaWVudElt
cGw6OmlzRnVsbFNjcmVlbigpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjplbnRlckZ1bGxTY3JlZW4oKQoreworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpleGl0RnVsbFNjcmVlbigpCit7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmJlZ2FuRW50
ZXJGdWxsU2NyZWVuKGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JikKK3sKK30KKwordm9p
ZCBQYWdlQ2xpZW50SW1wbDo6YmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBJbnRSZWN0JiwgY29u
c3QgSW50UmVjdCYpCit7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9XS0FjdGlvblNoZWV0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
QWN0aW9uU2hlZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OWY3NDFmODgxZGQzYTVlMTVlZTBkYTBhYzNhNzI5
ZDljYTczMGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XS0FjdGlvblNoZWV0LmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
PFVJS2l0L1VJQWN0aW9uU2hlZXQuaD4KKyNpbXBvcnQgPFVJS2l0L1VJUG9wb3ZlckNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tEZWNsYXJhdGlvblNwZWNpZmllcnMuaD4KKworQHBy
b3RvY29sIFdLQWN0aW9uU2hlZXREZWxlZ2F0ZTsKK0BjbGFzcyBXS0ludGVyYWN0aW9uVmlldzsK
KworQGludGVyZmFjZSBXS0FjdGlvblNoZWV0IDogVUlBY3Rpb25TaGVldAorCitAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBpZCA8V0tBY3Rpb25TaGVldERlbGVnYXRlPiBzaGVldERlbGVn
YXRlOworQHByb3BlcnR5IChub25hdG9taWMpIFVJUG9wb3ZlckFycm93RGlyZWN0aW9uIGFycm93
RGlyZWN0aW9uczsKKy0gKGlkKWluaXRXaXRoVmlldzooV0tJbnRlcmFjdGlvblZpZXcgKil2aWV3
OworLSAodm9pZClkb25lV2l0aFNoZWV0OworLSAoQk9PTClwcmVzZW50U2hlZXQ7CistIChCT09M
KXByZXNlbnRTaGVldEZyb21SZWN0OihDR1JlY3QpcHJlc2VudGF0aW9uUmVjdDsKKy0gKHZvaWQp
dXBkYXRlU2hlZXRQb3NpdGlvbjsKK0BlbmQKKworCitAcHJvdG9jb2wgV0tBY3Rpb25TaGVldERl
bGVnYXRlPFVJQWN0aW9uU2hlZXREZWxlZ2F0ZT4KK0ByZXF1aXJlZAorLSAoVUlWaWV3ICopaG9z
dFZpZXdGb3JTaGVldDsKKy0gKENHUmVjdClpbml0aWFsUHJlc2VudGF0aW9uUmVjdEluSG9zdFZp
ZXdGb3JTaGVldDsKKy0gKENHUmVjdClwcmVzZW50YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0
OworQGVuZAorCisvLyBFbGVtZW50cyB0byBkZXNjcmliZSBhY3Rpb24gc2hlZXQgY29udGVudC4K
KworV0tfRVhQT1JUIEBpbnRlcmZhY2UgV0tFbGVtZW50QWN0aW9uSW5mbyA6IE5TT2JqZWN0CisK
Ky0gKFdLRWxlbWVudEFjdGlvbkluZm8gKilpbml0V2l0aEluZm86KE5TVVJMICopdXJsIGxvY2F0
aW9uOihDR1BvaW50KWxvY2F0aW9uIHRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHJlY3Q6KENHUmVj
dClyZWN0OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1BvaW50IGludGVyYWN0
aW9uTG9jYXRpb247CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVVJMICp1cmw7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICp0aXRsZTsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IGJvdW5kaW5nUmVjdDsKK0BlbmQKKwor
dHlwZWRlZiB2b2lkICheV0tFbGVtZW50QWN0aW9uSGFuZGxlcikoV0tFbGVtZW50QWN0aW9uSW5m
byAqKTsKK3R5cGVkZWYgdm9pZCAoXldLRWxlbWVudEFjdGlvbkhhbmRsZXJJbnRlcm5hbCkoV0tJ
bnRlcmFjdGlvblZpZXcgKiwgV0tFbGVtZW50QWN0aW9uSW5mbyAqKTsKKwordHlwZWRlZiBlbnVt
IHsKKyAgICBXS0VsZW1lbnRBY3Rpb25UeXBlQ3VzdG9tID0gMCwKKyAgICBXS0VsZW1lbnRBY3Rp
b25UeXBlT3BlbiwKKyAgICBXS0VsZW1lbnRBY3Rpb25UeXBlQ29weSwKKyAgICBXS0VsZW1lbnRB
Y3Rpb25UeXBlU2F2ZUltYWdlLAorICAgIFdLRWxlbWVudEFjdGlvblR5cGVBZGRUb1JlYWRpbmdM
aXN0LAorfSBXS0VsZW1lbnRBY3Rpb25UeXBlOworCitXS19FWFBPUlQgQGludGVyZmFjZSBXS0Vs
ZW1lbnRBY3Rpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBX
S0VsZW1lbnRBY3Rpb25UeXBlIHR5cGU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TU3RyaW5nKiB0aXRsZTsKKworKyAoV0tFbGVtZW50QWN0aW9uICopY3VzdG9tRWxlbWVudEFj
dGlvbldpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSBhY3Rpb25IYW5kbGVyOihXS0VsZW1lbnRB
Y3Rpb25IYW5kbGVyKWhhbmRsZXI7CisrIChXS0VsZW1lbnRBY3Rpb24gKilzdGFuZGFyZEVsZW1l
bnRBY3Rpb25XaXRoVHlwZTooV0tFbGVtZW50QWN0aW9uVHlwZSl0eXBlOworKyAoV0tFbGVtZW50
QWN0aW9uICopc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6KFdLRWxlbWVudEFjdGlvblR5
cGUpdHlwZSBjdXN0b21UaXRsZTooTlNTdHJpbmcgKil0aXRsZTsKKy0gKHZvaWQpcnVuQWN0aW9u
V2l0aEVsZW1lbnRJbmZvOihXS0VsZW1lbnRBY3Rpb25JbmZvICopaW5mbyB2aWV3OihXS0ludGVy
YWN0aW9uVmlldyAqKXZpZXc7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tBY3Rpb25TaGVldC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wY2E2MjUyZTNiMjc5OWIwYTNhMWY4Mjll
ODA1Yzg2YWI1NDkzOTAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9XS0FjdGlvblNoZWV0Lm1tCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS0FjdGlvblNoZWV0LmgiCisKKyNpbXBvcnQg
IldLR2VzdHVyZVR5cGVzLmgiCisjaW1wb3J0ICJXS0ludGVyYWN0aW9uVmlldy5oIgorI2ltcG9y
dCA8U2FmYXJpU2VydmljZXMvU1NSZWFkaW5nTGlzdC5oPgorI2ltcG9ydCA8VUlLaXQvVUlBY3Rp
b25TaGVldF9Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KKyNpbXBvcnQgPFVJ
S2l0L1VJV2luZG93X1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5n
cy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK1NPRlRfTElOS19GUkFN
RVdPUksoU2FmYXJpU2VydmljZXMpOworU09GVF9MSU5LX0NMQVNTKFNhZmFyaVNlcnZpY2VzLCBT
U1JlYWRpbmdMaXN0KTsKKworQGludGVyZmFjZSBXS0VsZW1lbnRBY3Rpb24oUHJpdmF0ZSkKKy0g
KHZvaWQpX3J1bkFjdGlvbldpdGhFbGVtZW50OihOU1VSTCAqKXRhcmdldFVSTCBkb2N1bWVudFZp
ZXc6KFdLSW50ZXJhY3Rpb25WaWV3ICopdmlldyBpbnRlcmFjdGlvbkxvY2F0aW9uOihDR1BvaW50
KWludGVyYWN0aW9uTG9jYXRpb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0FjdGlvblNo
ZWV0IHsKKyAgICBpZDxXS0FjdGlvblNoZWV0RGVsZWdhdGU+IF9zaGVldERlbGVnYXRlOworICAg
IGlkPFVJQWN0aW9uU2hlZXREZWxlZ2F0ZT4gX2RlbGVnYXRlV2hpbGVSb3RhdGluZzsKKyAgICBX
S0ludGVyYWN0aW9uVmlldyAqX3ZpZXc7CisgICAgVUlQb3BvdmVyQXJyb3dEaXJlY3Rpb24gX2Fy
cm93RGlyZWN0aW9uczsKKyAgICBCT09MIF9pc1JvdGF0aW5nOworfQorCistIChpZClpbml0V2l0
aFZpZXc6KFdLSW50ZXJhY3Rpb25WaWV3ICopdmlldworeworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2Fycm93RGly
ZWN0aW9ucyA9IFVJUG9wb3ZlckFycm93RGlyZWN0aW9uQW55OworICAgIF92aWV3ID0gdmlldzsK
KworICAgIGlmIChVSV9VU0VSX0lOVEVSRkFDRV9JRElPTSgpICE9IFVJVXNlckludGVyZmFjZUlk
aW9tUGhvbmUpIHsKKyAgICAgICAgLy8gT25seSBpUGFkcyBzdXBwb3J0IHBvcG92ZXJzIHRoYXQg
cm90YXRlLiBVSUFjdGlvblNoZWV0cyBhY3R1YWxseSBibG9jayByb3RhdGlvbiBvbiBpUGhvbmUv
aVBvZCBUb3VjaAorICAgICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqY2VudGVyID0gW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOworICAgICAgICBbY2VudGVyIGFkZE9ic2Vy
dmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbGxSb3RhdGUpIG5hbWU6VUlXaW5kb3dXaWxs
Um90YXRlTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBbY2VudGVyIGFkZE9ic2Vy
dmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGRpZFJvdGF0ZSkgbmFtZTpVSVdpbmRvd0RpZFJv
dGF0ZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICB9CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJl
dmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGZdOworCisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCisjcHJhZ21hIG1hcmsgLSBTaGVldCBwcmVzZW50YXRpb24gY29kZQorCistIChC
T09MKXByZXNlbnRTaGVldAoreworICAgIC8vIENhbGN1bGF0ZSB0aGUgcHJlc2VudGF0aW9uIHJl
Y3QganVzdCBiZWZvcmUgc2hvd2luZy4KKyAgICBDR1JlY3QgcHJlc2VudGF0aW9uUmVjdCA9IENH
UmVjdFplcm87CisgICAgaWYgKFVJX1VTRVJfSU5URVJGQUNFX0lESU9NKCkgIT0gVUlVc2VySW50
ZXJmYWNlSWRpb21QaG9uZSkgeworICAgICAgICBwcmVzZW50YXRpb25SZWN0ID0gW19zaGVldERl
bGVnYXRlIGluaXRpYWxQcmVzZW50YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0XTsKKyAgICAg
ICAgaWYgKENHUmVjdElzRW1wdHkocHJlc2VudGF0aW9uUmVjdCkpCisgICAgICAgICAgICByZXR1
cm4gTk87CisgICAgfQorCisgICAgcmV0dXJuIFtzZWxmIHByZXNlbnRTaGVldEZyb21SZWN0OnBy
ZXNlbnRhdGlvblJlY3RdOworfQorCistIChCT09MKXByZXNlbnRTaGVldEZyb21SZWN0OihDR1Jl
Y3QpcHJlc2VudGF0aW9uUmVjdAoreworICAgIFVJVmlldyAqdmlldyA9IFtfc2hlZXREZWxlZ2F0
ZSBob3N0Vmlld0ZvclNoZWV0XTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBOTzsK
KworICAgIGlmIChVSV9VU0VSX0lOVEVSRkFDRV9JRElPTSgpICE9IFVJVXNlckludGVyZmFjZUlk
aW9tUGhvbmUpIHsKKyAgICAgICAgW3NlbGYgcHJlc2VudEZyb21SZWN0OnByZXNlbnRhdGlvblJl
Y3QKKyAgICAgICAgICAgICAgICAgICAgICAgaW5WaWV3OnZpZXcKKyAgICAgICAgICAgICAgICAg
ICAgZGlyZWN0aW9uOl9hcnJvd0RpcmVjdGlvbnMKKyAgICBhbGxvd0ludGVyYWN0aW9uV2l0aFZp
ZXdzOm5pbAorICAgICAgICAgICAgICBiYWNrZ3JvdW5kU3R5bGU6VUlQb3BvdmVyQmFja2dyb3Vu
ZFN0eWxlRGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6WUVTXTsKKyAgICB9
IGVsc2UKKyAgICAgICAgW3NlbGYgc2hvd0luVmlldzp2aWV3XTsgCisKKyAgICByZXR1cm4gWUVT
OworfQorCistICh2b2lkKWRvbmVXaXRoU2hlZXQKK3sKKyAgICBfZGVsZWdhdGVXaGlsZVJvdGF0
aW5nID0gbmlsOworCisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3Rz
V2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihkaWRSb3RhdGUpIG9iamVjdDpuaWxd
OworfQorCisjcHJhZ21hIG1hcmsgLSBSb3RhdGlvbiBoYW5kbGluZyBjb2RlCisKKy0gKHZvaWQp
d2lsbFJvdGF0ZQoreworICAgIEFTU0VSVChVSV9VU0VSX0lOVEVSRkFDRV9JRElPTSgpICE9IFVJ
VXNlckludGVyZmFjZUlkaW9tUGhvbmUpOworCisgICAgaWYgKF9pc1JvdGF0aW5nKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBDbGVhciB0aGUgZGVsZWdhdGUgc28gdGhhdCB0aGUgbWV0aG9k
OgorICAgIC8vIC0gKHZvaWQpYWN0aW9uU2hlZXQ6KFVJQWN0aW9uU2hlZXQgKilhY3Rpb25TaGVl
dCBkaWREaXNtaXNzV2l0aEJ1dHRvbkluZGV4OihOU0ludGVnZXIpYnV0dG9uSW5kZXgKKyAgICAv
LyBpcyBub3QgY2FsbGVkIHdoZW4gdGhlIEFjdGlvblNoZWV0IGlzIGRpc21pc3NlZCBiZWxvdy4g
RGVsZWdhdGUgaXMgcmUtaW5zdGF0ZWQgYWZ0ZXIgcm90YXRpb24uCisgICAgX2RlbGVnYXRlV2hp
bGVSb3RhdGluZyA9IFtzZWxmIGRlbGVnYXRlXTsKKyAgICBzZWxmLmRlbGVnYXRlID0gbmlsOwor
ICAgIF9pc1JvdGF0aW5nID0gWUVTOworCisgICAgW3NlbGYgZGlzbWlzc1dpdGhDbGlja2VkQnV0
dG9uSW5kZXg6W3NlbGYgY2FuY2VsQnV0dG9uSW5kZXhdIGFuaW1hdGVkOk5PXTsKK30KKworLSAo
dm9pZCl1cGRhdGVTaGVldFBvc2l0aW9uCit7CisgICAgQVNTRVJUKFVJX1VTRVJfSU5URVJGQUNF
X0lESU9NKCkgIT0gVUlVc2VySW50ZXJmYWNlSWRpb21QaG9uZSk7CisKKyAgICBpZiAoIV9pc1Jv
dGF0aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBfaXNSb3RhdGluZyA9IE5POworICAgIAor
ICAgIENHUmVjdCBwcmVzZW50YXRpb25SZWN0ID0gW19zaGVldERlbGVnYXRlIHByZXNlbnRhdGlv
blJlY3RJbkhvc3RWaWV3Rm9yU2hlZXRdOworICAgIGlmICghQ0dSZWN0SXNFbXB0eShwcmVzZW50
YXRpb25SZWN0KSkgeworICAgICAgICAvLyBSZS1wcmVzZW50IHRoZSBwb3BvdmVyIG9ubHkgaWYg
d2UgYXJlIHN0aWxsIHBvaW50aW5nIHRvIGNvbnRlbnQgb25zY3JlZW4uCisgICAgICAgIENHUmVj
dCBpbnRlcnNlY3Rpb24gPSBDR1JlY3RJbnRlcnNlY3Rpb24oW1tfc2hlZXREZWxlZ2F0ZSBob3N0
Vmlld0ZvclNoZWV0XSBib3VuZHNdLCBwcmVzZW50YXRpb25SZWN0KTsKKyAgICAgICAgaWYgKCFD
R1JlY3RJc0VtcHR5KGludGVyc2VjdGlvbikpIHsKKyAgICAgICAgICAgIHNlbGYuZGVsZWdhdGUg
PSBfZGVsZWdhdGVXaGlsZVJvdGF0aW5nOworICAgICAgICAgICAgW3NlbGYgcHJlc2VudFNoZWV0
RnJvbVJlY3Q6aW50ZXJzZWN0aW9uXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAvLyBDYW5jZWwgdGhlIHNoZWV0IGFzIHRoZXJlIGlzIGVpdGhlciBu
byB2aWV3IG9yIHRoZSBjb250ZW50IGhhcyBub3cgbW92ZWQgb2ZmIHNjcmVlbi4KKyAgICBbX2Rl
bGVnYXRlV2hpbGVSb3RhdGluZyBhY3Rpb25TaGVldDpzZWxmIGNsaWNrZWRCdXR0b25BdEluZGV4
OltzZWxmIGNhbmNlbEJ1dHRvbkluZGV4XV07Cit9CisKKy0gKHZvaWQpZGlkUm90YXRlCit7Cisg
ICAgQVNTRVJUKFVJX1VTRVJfSU5URVJGQUNFX0lESU9NKCkgIT0gVUlVc2VySW50ZXJmYWNlSWRp
b21QaG9uZSk7CisKKyAgICBbX3ZpZXcgX3VwZGF0ZVBvc2l0aW9uSW5mb3JtYXRpb25dOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0VsZW1lbnRBY3Rpb25JbmZvICB7CisgICAgQ0dQ
b2ludCBfaW50ZXJhY3Rpb25Mb2NhdGlvbjsKKyAgICBOU1VSTCAqX3VybDsKKyAgICBOU1N0cmlu
ZyAqX3RpdGxlOworICAgIENHUmVjdCBfYm91bmRpbmdSZWN0OworICAgIENHSW1hZ2VSZWYgX3Nu
YXBzaG90OworfQorCistIChXS0VsZW1lbnRBY3Rpb25JbmZvICopIGluaXRXaXRoSW5mbzooTlNV
UkwgKil1cmwgbG9jYXRpb246KENHUG9pbnQpbG9jYXRpb24gdGl0bGU6KE5TU3RyaW5nICopdGl0
bGUgcmVjdDooQ0dSZWN0KXJlY3QKK3sKKyAgICBfdXJsID0gW3VybCBjb3B5XTsKKyAgICBfaW50
ZXJhY3Rpb25Mb2NhdGlvbiA9IGxvY2F0aW9uOworICAgIF90aXRsZSA9IFt0aXRsZSBjb3B5XTsK
KyAgICBfYm91bmRpbmdSZWN0ID0gcmVjdDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBbX3RpdGxlIHJlbGVhc2VdOworICAgIFtfdXJsIHJlbGVhc2Vd
OworICAgIAorICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gV0tFbGVtZW50QWN0aW9uICB7CisgICAgTlNTdHJpbmcgKl90aXRsZTsKKyAgICBXS0VsZW1l
bnRBY3Rpb25IYW5kbGVySW50ZXJuYWwgX2FjdGlvbkhhbmRsZXI7CisgICAgV0tFbGVtZW50QWN0
aW9uVHlwZSBfdHlwZTsKK30KKworLSAoaWQpaW5pdFdpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRs
ZSBhY3Rpb25IYW5kbGVyOihXS0VsZW1lbnRBY3Rpb25IYW5kbGVySW50ZXJuYWwpaGFuZGxlciB0
eXBlOihXS0VsZW1lbnRBY3Rpb25UeXBlKXR5cGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfdGl0bGUgPSBbdGl0bGUgY29weV07
CisgICAgX3R5cGUgPSB0eXBlOworICAgIF9hY3Rpb25IYW5kbGVyID0gQmxvY2tfY29weShoYW5k
bGVyKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW190
aXRsZSByZWxlYXNlXTsKKyAgICBbX2FjdGlvbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW3N1cGVy
IGRlYWxsb2NdOworfQorCisrIChXS0VsZW1lbnRBY3Rpb24gKiljdXN0b21FbGVtZW50QWN0aW9u
V2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIGFjdGlvbkhhbmRsZXI6KFdLRWxlbWVudEFjdGlv
bkhhbmRsZXIpaGFuZGxlcgoreworICAgIHJldHVybiBbW1tzZWxmIGFsbG9jXSBpbml0V2l0aFRp
dGxlOnRpdGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkhhbmRsZXI6XihXS0lu
dGVyYWN0aW9uVmlldyAqdmlldywgV0tFbGVtZW50QWN0aW9uSW5mbyAqYWN0aW9uSW5mbykgeyBo
YW5kbGVyKGFjdGlvbkluZm8pOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGU6V0tFbGVtZW50QWN0aW9uVHlwZUN1c3RvbV0gYXV0b3JlbGVhc2VdOworfQorCitzdGF0
aWMgdm9pZCBjb3B5RWxlbWVudChXS0ludGVyYWN0aW9uVmlldyAqdmlldykKK3sKKyAgICBbdmll
dyBfcGVyZm9ybUFjdGlvbjpXZWJLaXQ6OldLU2hlZXRBY3Rpb25Db3B5XTsKK30KKworc3RhdGlj
IHZvaWQgc2F2ZUltYWdlKFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3KQoreworICAgIFt2aWV3IF9w
ZXJmb3JtQWN0aW9uOldlYktpdDo6V0tTaGVldEFjdGlvblNhdmVJbWFnZV07Cit9CisKK3N0YXRp
YyB2b2lkIGFkZFRvUmVhZGluZ0xpc3QoTlNVUkwgKnRhcmdldFVSTCwgTlNTdHJpbmcgKnRpdGxl
KQoreworICAgIGlmICghdGl0bGUgfHwgW3RpdGxlIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgdGl0
bGUgPSBbdGFyZ2V0VVJMIGFic29sdXRlU3RyaW5nXTsKKworICAgIFtbZ2V0U1NSZWFkaW5nTGlz
dENsYXNzKCkgZGVmYXVsdFJlYWRpbmdMaXN0XSBhZGRSZWFkaW5nTGlzdEl0ZW1XaXRoVVJMOnRh
cmdldFVSTCB0aXRsZTp0aXRsZSBwcmV2aWV3VGV4dDpuaWwgZXJyb3I6bmlsXTsKK30KKworKyAo
V0tFbGVtZW50QWN0aW9uICopc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6KFdLRWxlbWVu
dEFjdGlvblR5cGUpdHlwZSBjdXN0b21UaXRsZTooTlNTdHJpbmcgKiljdXN0b21UaXRsZQorewor
ICAgIE5TU3RyaW5nICp0aXRsZTsKKyAgICBXS0VsZW1lbnRBY3Rpb25IYW5kbGVySW50ZXJuYWwg
aGFuZGxlcjsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFdLRWxlbWVudEFjdGlvblR5
cGVDb3B5OgorICAgICAgICB0aXRsZSA9IFdFQl9VSV9TVFJJTkdfS0VZKCJDb3B5IiwgIkNvcHkg
QWN0aW9uU2hlZXQgTGluayIsICJUaXRsZSBmb3IgQ29weSBMaW5rIG9yIEltYWdlIGFjdGlvbiBi
dXR0b24iKTsKKyAgICAgICAgaGFuZGxlciA9IF4oV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcsIFdL
RWxlbWVudEFjdGlvbkluZm8gKmFjdGlvbkluZm8pIHsKKyAgICAgICAgICAgIGNvcHlFbGVtZW50
KHZpZXcpOworICAgICAgICB9OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdLRWxlbWVudEFj
dGlvblR5cGVPcGVuOgorICAgICAgICB0aXRsZSA9IFdFQl9VSV9TVFJJTkdfS0VZKCJPcGVuIiwg
Ik9wZW4gQWN0aW9uU2hlZXQgTGluayIsICJUaXRsZSBmb3IgT3BlbiBMaW5rIGFjdGlvbiBidXR0
b24iKTsKKyAgICAgICAgaGFuZGxlciA9IF4oV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcsIFdLRWxl
bWVudEFjdGlvbkluZm8gKmFjdGlvbkluZm8pIHsKKyAgICAgICAgICAgIFt2aWV3IF9hdHRlbXB0
Q2xpY2tBdExvY2F0aW9uOmFjdGlvbkluZm8uaW50ZXJhY3Rpb25Mb2NhdGlvbl07CisgICAgICAg
IH07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0tFbGVtZW50QWN0aW9uVHlwZVNhdmVJbWFn
ZToKKyAgICAgICAgdGl0bGUgPSBXRUJfVUlfU1RSSU5HX0tFWSgiU2F2ZSBJbWFnZSIsICJTYXZl
IEltYWdlIiwgIlRpdGxlIGZvciBTYXZlIEltYWdlIGFjdGlvbiBidXR0b24iKTsKKyAgICAgICAg
aGFuZGxlciA9IF4oV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcsIFdLRWxlbWVudEFjdGlvbkluZm8g
KmFjdGlvbkluZm8pIHsKKyAgICAgICAgICAgIHNhdmVJbWFnZSh2aWV3KTsKKyAgICAgICAgfTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXS0VsZW1lbnRBY3Rpb25UeXBlQWRkVG9SZWFkaW5n
TGlzdDoKKyAgICAgICAgdGl0bGUgPSBXRUJfVUlfU1RSSU5HKCJBZGQgdG8gUmVhZGluZyBMaXN0
IiwgIlRpdGxlIGZvciBBZGQgdG8gUmVhZGluZyBMaXN0IGFjdGlvbiBidXR0b24iKTsKKyAgICAg
ICAgaGFuZGxlciA9IF4oV0tJbnRlcmFjdGlvblZpZXcgKnZpZXcsIFdLRWxlbWVudEFjdGlvbklu
Zm8gKmFjdGlvbkluZm8pIHsKKyAgICAgICAgICAgIGFkZFRvUmVhZGluZ0xpc3QoYWN0aW9uSW5m
by51cmwsIGFjdGlvbkluZm8udGl0bGUpOworICAgICAgICB9OworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRF
eGNlcHRpb24gZm9ybWF0OkAiVGhlcmUgaXMgbm8gc3RhbmRhcmQgd2ViIGVsZW1lbnQgYWN0aW9u
IG9mIHR5cGUgJWQuIiwgdHlwZV07CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIHJl
dHVybiBbW1tXS0VsZW1lbnRBY3Rpb24gYWxsb2NdIGluaXRXaXRoVGl0bGU6KGN1c3RvbVRpdGxl
ID8gY3VzdG9tVGl0bGUgOiB0aXRsZSkgYWN0aW9uSGFuZGxlcjpoYW5kbGVyIHR5cGU6dHlwZV0g
YXV0b3JlbGVhc2VdOworfQorCisrIChXS0VsZW1lbnRBY3Rpb24gKilzdGFuZGFyZEVsZW1lbnRB
Y3Rpb25XaXRoVHlwZTooV0tFbGVtZW50QWN0aW9uVHlwZSl0eXBlCit7CisgICAgcmV0dXJuIFtz
ZWxmIHN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBlOnR5cGUgY3VzdG9tVGl0bGU6bmlsXTsK
K30KKworLSAodm9pZClydW5BY3Rpb25XaXRoRWxlbWVudEluZm86KFdLRWxlbWVudEFjdGlvbklu
Zm8gKilpbmZvIHZpZXc6KFdLSW50ZXJhY3Rpb25WaWV3ICopdmlldworeworICAgIF9hY3Rpb25I
YW5kbGVyKHZpZXcsIGluZm8pOworfQorQGVuZAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Y2
NzExMGY3ZWNjNmE1ZjFhOGIyODM2M2I2NTk0OTA1Yzc3MjMwYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oCkBA
IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJXS0FjdGlvblNoZWV0LmgiCisK
KyNpbXBvcnQgPFVJS2l0L1VJQWN0aW9uU2hlZXQuaD4KKyNpbXBvcnQgPFVJS2l0L1VJUG9wb3Zl
ckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tEZWNsYXJhdGlvblNwZWNpZmllcnMu
aD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFdLQWN0aW9uU2hlZXRE
ZWxlZ2F0ZTsKK0BjbGFzcyBXS0ludGVyYWN0aW9uVmlldzsKKworbmFtZXNwYWNlIFdlYktpdCB7
CitjbGFzcyBXZWJQYWdlUHJveHk7Cit9CisKK0BpbnRlcmZhY2UgV0tBY3Rpb25TaGVldEFzc2lz
dGFudCA6IE5TT2JqZWN0IDxXS0FjdGlvblNoZWV0RGVsZWdhdGU+CisKKy0gKGlkKWluaXRXaXRo
VmlldzooV0tJbnRlcmFjdGlvblZpZXcgKil2aWV3OworLSAodm9pZClzZXRQYWdlOihQYXNzUmVm
UHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PilwYWdlOworLSAodm9pZClzaG93TGlua1NoZWV0Owor
LSAodm9pZClzaG93SW1hZ2VTaGVldDsKKy0gKHZvaWQpc2hvd0RhdGFEZXRlY3RvcnNTaGVldDsK
Ky0gKHZvaWQpY2xlYW51cFNoZWV0OworLSAodm9pZCl1cGRhdGVTaGVldFBvc2l0aW9uOworQGVu
ZAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hl
ZXRBc3Npc3RhbnQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hl
ZXRBc3Npc3RhbnQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDI4YjM0NTViNDVhODAzYmI0ODY5YmE5YWY3ZWQ5
MTVjZWRmNTAwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tBY3Rpb25TaGVldEFzc2lzdGFudC5o
IgorCisjaW1wb3J0ICJXS0FjdGlvblNoZWV0LmgiCisjaW1wb3J0ICJXS0ludGVyYWN0aW9uVmll
dy5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0IDxUQ0MvVENDLmg+CisjaW1w
b3J0IDxEYXRhRGV0ZWN0b3JzVUkvREREZXRlY3Rpb25Db250cm9sbGVyLmg+CisjaW1wb3J0IDxT
YWZhcmlTZXJ2aWNlcy9TU1JlYWRpbmdMaXN0Lmg+CisjaW1wb3J0IDxVSUtpdC9VSUFjdGlvblNo
ZWV0X1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgorI2ltcG9ydCA8VUlLaXQv
VUlWaWV3Q29udHJvbGxlcl9Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVdpbmRvd19Qcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU5TVVJMRXh0cmFz
Lmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworU09GVF9MSU5LX0ZSQU1FV09S
SyhTYWZhcmlTZXJ2aWNlcykKK1NPRlRfTElOS19DTEFTUyhTYWZhcmlTZXJ2aWNlcywgU1NSZWFk
aW5nTGlzdCkKKworU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFRDQykKK1NPRlRfTElOSyhU
Q0MsIFRDQ0FjY2Vzc1ByZWZsaWdodCwgVENDQWNjZXNzUHJlZmxpZ2h0UmVzdWx0LCAoQ0ZTdHJp
bmdSZWYgc2VydmljZSwgQ0ZEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpLCAoc2VydmljZSwgb3B0aW9u
cykpCitTT0ZUX0xJTktfQ09OU1RBTlQoVENDLCBrVENDU2VydmljZVBob3RvcywgQ0ZTdHJpbmdS
ZWYpCisKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SSyhEYXRhRGV0ZWN0b3JzVUkpCitTT0ZU
X0xJTktfQ0xBU1MoRGF0YURldGVjdG9yc1VJLCBERERldGVjdGlvbkNvbnRyb2xsZXIpCisKK0Bp
bnRlcmZhY2UgV0tFbGVtZW50QWN0aW9uKFByaXZhdGUpCistICh2b2lkKV9ydW5BY3Rpb25XaXRo
RWxlbWVudDooTlNVUkwgKil0YXJnZXRVUkwgZG9jdW1lbnRWaWV3OihXS0ludGVyYWN0aW9uVmll
dyAqKXZpZXcgaW50ZXJhY3Rpb25Mb2NhdGlvbjooQ0dQb2ludClpbnRlcmFjdGlvbkxvY2F0aW9u
OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tBY3Rpb25TaGVldEFzc2lzdGFudCB7CisgICAg
UmV0YWluUHRyPFdLQWN0aW9uU2hlZXQ+IF9pbnRlcmFjdGlvblNoZWV0OworICAgIFJlZlB0cjxX
ZWJLaXQ6OldlYlBhZ2VQcm94eT4gX3BhZ2U7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9lbGVt
ZW50QWN0aW9uczsKKyAgICBXS0ludGVyYWN0aW9uVmlldyAqX3ZpZXc7Cit9CisKKy0gKGlkKWlu
aXRXaXRoVmlldzooV0tJbnRlcmFjdGlvblZpZXcgKil2aWV3Cit7CisgICAgX3ZpZXcgPSB2aWV3
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc2VsZiBj
bGVhbnVwU2hlZXRdOworICAgIF9wYWdlID0gbnVsbHB0cjsKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKKy0gKHZvaWQpc2V0UGFnZTooUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4p
cGFnZQoreworICAgIF9wYWdlID0gcGFnZTsKK30KKworLSAoVUlWaWV3ICopc3VwZXJ2aWV3Rm9y
U2hlZXQKK3sKKyAgICBVSVZpZXcgKnZpZXcgPSBbX3ZpZXcgd2luZG93XTsKKworICAgIC8vIEZJ
WE1FOiBXZWJLaXQgaGFzIGEgZGVsZWdhdGUgdG8gcmV0cmlldmUgdGhlIHN1cGVydmlldyBmb3Ig
dGhlIGltYWdlIHNoZWV0IChzdXBlcnZpZXdGb3JJbWFnZVNoZWV0Rm9yV2ViVmlldykKKyAgICAv
LyBEbyB3ZSBuZWVkIGl0IGluIFdLMj8KKworICAgIC8vIEZpbmQgdGhlIHRvcCBtb3N0IHZpZXcg
d2l0aCBhIHZpZXcgY29udHJvbGxlcgorICAgIFVJVmlld0NvbnRyb2xsZXIgKmNvbnRyb2xsZXIg
PSBuaWw7CisgICAgVUlWaWV3ICpjdXJyZW50VmlldyA9IF92aWV3OworICAgIHdoaWxlIChjdXJy
ZW50VmlldykgeworICAgICAgICBVSVZpZXdDb250cm9sbGVyICphQ29udHJvbGxlciA9IFtVSVZp
ZXdDb250cm9sbGVyIHZpZXdDb250cm9sbGVyRm9yVmlldzpjdXJyZW50Vmlld107CisgICAgICAg
IGlmIChhQ29udHJvbGxlcikKKyAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBhQ29udHJvbGxlcjsK
KworICAgICAgICBjdXJyZW50VmlldyA9IFtjdXJyZW50VmlldyBzdXBlcnZpZXddOworICAgIH0K
KyAgICBpZiAoY29udHJvbGxlcikKKyAgICAgICAgdmlldyA9IGNvbnRyb2xsZXIudmlldzsKKwor
ICAgIHJldHVybiB2aWV3OworfQorCistIChDR1JlY3QpX3ByZXNlbnRhdGlvblJlY3RGb3JTaGVl
dEdpdmVuUG9pbnQ6KENHUG9pbnQpcG9pbnQgaW5Ib3N0VmlldzooVUlWaWV3ICopaG9zdFZpZXcK
K3sKKyAgICBDR1BvaW50IHByZXNlbnRhdGlvblBvaW50ID0gW2hvc3RWaWV3IGNvbnZlcnRQb2lu
dDpwb2ludCBmcm9tVmlldzpfdmlld107CisgICAgQ0dSZWN0IHByZXNlbnRhdGlvblJlY3QgPSBD
R1JlY3RNYWtlKHByZXNlbnRhdGlvblBvaW50LngsIHByZXNlbnRhdGlvblBvaW50LnksIDEuMCwg
MS4wKTsKKworICAgIHJldHVybiBDR1JlY3RJbnNldChwcmVzZW50YXRpb25SZWN0LCAtMjIuMCwg
LTIyLjApOworfQorCistIChVSVZpZXcgKilob3N0Vmlld0ZvclNoZWV0Cit7CisgICAgcmV0dXJu
IFtzZWxmIHN1cGVydmlld0ZvclNoZWV0XTsKK30KKworLSAoQ0dSZWN0KWluaXRpYWxQcmVzZW50
YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0Cit7CisgICAgVUlWaWV3ICp2aWV3ID0gW3NlbGYg
c3VwZXJ2aWV3Rm9yU2hlZXRdOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIENHUmVj
dFplcm87CisKKyAgICByZXR1cm4gW3NlbGYgX3ByZXNlbnRhdGlvblJlY3RGb3JTaGVldEdpdmVu
UG9pbnQ6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi5wb2ludCBpbkhvc3RWaWV3OnZpZXddOwor
Cit9CisKKy0gKENHUmVjdClwcmVzZW50YXRpb25SZWN0SW5Ib3N0Vmlld0ZvclNoZWV0Cit7Cisg
ICAgVUlWaWV3ICp2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3Rm9yU2hlZXRdOworICAgIGlmICghdmll
dykKKyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisKKyAgICBDR1JlY3QgYm91bmRpbmdSZWN0
ID0gX3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi5ib3VuZHM7CisgICAgQ0dQb2ludCBmcm9tUG9p
bnQgPSBfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLnBvaW50OworCisgICAgLy8gRklYTUU6IFdl
IG11c3QgYWRqdXN0IG91ciBwcmVzZW50YXRpb24gcG9pbnQgdG8gdGFrZSBpbnRvIGFjY291bnQg
YSBjaGFuZ2UgaW4gZG9jdW1lbnQgc2NhbGUuCisKKyAgICAvLyBUZXN0IHRvIHNlZSBpZiB3ZSBh
cmUgc3RpbGwgd2l0aGluIHRoZSB0YXJnZXQgbm9kZSBhcyBpdCBtYXkgaGF2ZSBtb3ZlZCBhZnRl
ciByb3RhdGlvbi4KKyAgICBpZiAoIUNHUmVjdENvbnRhaW5zUG9pbnQoYm91bmRpbmdSZWN0LCBm
cm9tUG9pbnQpKQorICAgICAgICBmcm9tUG9pbnQgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRY
KGJvdW5kaW5nUmVjdCksIENHUmVjdEdldE1pZFkoYm91bmRpbmdSZWN0KSk7CisKKyAgICByZXR1
cm4gW3NlbGYgX3ByZXNlbnRhdGlvblJlY3RGb3JTaGVldEdpdmVuUG9pbnQ6ZnJvbVBvaW50IGlu
SG9zdFZpZXc6dmlld107Cit9CisKKy0gKEJPT0wpcHJlc2VudFNoZWV0Cit7CisgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBwcmVzZW50YXRpb24gcmVjdCBqdXN0IGJlZm9yZSBzaG93aW5nLgorICAgIENH
UmVjdCBwcmVzZW50YXRpb25SZWN0ID0gQ0dSZWN0WmVybzsKKyAgICBpZiAoVUlfVVNFUl9JTlRF
UkZBQ0VfSURJT00oKSAhPSBVSVVzZXJJbnRlcmZhY2VJZGlvbVBob25lKSB7CisgICAgICAgIHBy
ZXNlbnRhdGlvblJlY3QgPSBbc2VsZiBpbml0aWFsUHJlc2VudGF0aW9uUmVjdEluSG9zdFZpZXdG
b3JTaGVldF07CisgICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KHByZXNlbnRhdGlvblJlY3QpKQor
ICAgICAgICAgICAgcmV0dXJuIE5POworICAgIH0KKworICAgIHJldHVybiBbX2ludGVyYWN0aW9u
U2hlZXQgcHJlc2VudFNoZWV0RnJvbVJlY3Q6cHJlc2VudGF0aW9uUmVjdF07Cit9CisKKy0gKHZv
aWQpYWN0aW9uU2hlZXQ6KFVJQWN0aW9uU2hlZXQgKilhY3Rpb25TaGVldCBjbGlja2VkQnV0dG9u
QXRJbmRleDooTlNJbnRlZ2VyKWJ1dHRvbkluZGV4Cit7CisgICAgQVNTRVJUKGFjdGlvblNoZWV0
ID09IF9pbnRlcmFjdGlvblNoZWV0KTsKKyAgICBpZiAoYWN0aW9uU2hlZXQgIT0gX2ludGVyYWN0
aW9uU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfZWxlbWVudEFjdGlvbnMgJiYg
YnV0dG9uSW5kZXggPCAoTlNJbnRlZ2VyKVtfZWxlbWVudEFjdGlvbnMgY291bnRdKSB7CisgICAg
ICAgIFdLRWxlbWVudEFjdGlvbkluZm8qIGFjdGlvbkluZm8gPSBbW1dLRWxlbWVudEFjdGlvbklu
Zm8gYWxsb2NdIGluaXRXaXRoSW5mbzpbTlNVUkwgVVJMV2l0aFN0cmluZzpfdmlldy5wb3NpdGlv
bkluZm9ybWF0aW9uLnVybF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOl92aWV3LnBvc2l0
aW9uSW5mb3JtYXRpb24ucG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOl92aWV3LnBv
c2l0aW9uSW5mb3JtYXRpb24udGl0bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0Ol92aWV3
LnBvc2l0aW9uSW5mb3JtYXRpb24uYm91bmRzXTsKKyAgICAgICAgW1tfZWxlbWVudEFjdGlvbnMg
b2JqZWN0QXRJbmRleDpidXR0b25JbmRleF0gcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOmFjdGlv
bkluZm8gdmlldzpfdmlld107CisgICAgICAgIFthY3Rpb25JbmZvIHJlbGVhc2VdOworICAgIH0K
KworICAgIFtzZWxmIGNsZWFudXBTaGVldF07Cit9CisKKy0gKHZvaWQpdXBkYXRlU2hlZXRQb3Np
dGlvbgoreworICAgIFtfaW50ZXJhY3Rpb25TaGVldCB1cGRhdGVTaGVldFBvc2l0aW9uXTsKK30K
KworLSAodm9pZClfY3JlYXRlU2hlZXRXaXRoRWxlbWVudEFjdGlvbnM6KE5TQXJyYXkgKilhY3Rp
b25zIHNob3dMaW5rVGl0bGU6KEJPT0wpc2hvd0xpbmtUaXRsZQoreworICAgIEFTU0VSVCghX2lu
dGVyYWN0aW9uU2hlZXQpOworCisgICAgTlNVUkwgKnRhcmdldFVSTCA9IFtOU1VSTCBVUkxXaXRo
U3RyaW5nOl92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24udXJsXTsKKyAgICBOU1N0cmluZyAqdXJs
U2NoZW1lID0gW3RhcmdldFVSTCBzY2hlbWVdOworICAgIEJPT0wgaXNKYXZhU2NyaXB0VVJMID0g
W3VybFNjaGVtZSBsZW5ndGhdICYmIFt1cmxTY2hlbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpA
ImphdmFzY3JpcHQiXSA9PSBOU09yZGVyZWRTYW1lOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
Y2hlY2sgaWYgSmF2YXNjcmlwdCBpcyBlbmFibGVkIGluIHRoZSBwcmVmZXJlbmNlcy4KKworICAg
IF9pbnRlcmFjdGlvblNoZWV0ID0gYWRvcHROUyhbW1dLQWN0aW9uU2hlZXQgYWxsb2NdIGluaXRX
aXRoVmlldzpfdmlld10pOworICAgIF9pbnRlcmFjdGlvblNoZWV0LmdldCgpLnNoZWV0RGVsZWdh
dGUgPSBzZWxmOworICAgIF9pbnRlcmFjdGlvblNoZWV0LmdldCgpLmFjdGlvblNoZWV0U3R5bGUg
PSBVSUFjdGlvblNoZWV0U3R5bGVBdXRvbWF0aWM7CisgICAgX2ludGVyYWN0aW9uU2hlZXQuZ2V0
KCkuZGVsZWdhdGUgPSBzZWxmOworCisgICAgTlNTdHJpbmcgKnRpdGxlU3RyaW5nID0gbmlsOwor
ICAgIEJPT0wgdGl0bGVJc1VSTCA9IE5POworICAgIGlmIChzaG93TGlua1RpdGxlKSB7CisgICAg
ICAgIGlmIChpc0phdmFTY3JpcHRVUkwpCisgICAgICAgICAgICB0aXRsZVN0cmluZyA9IFdFQl9V
SV9TVFJJTkdfS0VZKCJKYXZhU2NyaXB0IiwgIkphdmFTY3JpcHQgQWN0aW9uIFNoZWV0IFRpdGxl
IiwgIlRpdGxlIGZvciBhY3Rpb24gc2hlZXQgZm9yIEphdmFTY3JpcHQgbGluayIpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHRpdGxlU3RyaW5nID0gV2ViQ29yZTo6dXNlclZpc2libGVT
dHJpbmcodGFyZ2V0VVJMKTsKKyAgICAgICAgICAgIHRpdGxlSXNVUkwgPSBZRVM7CisgICAgICAg
IH0KKyAgICB9IGVsc2UKKyAgICAgICAgdGl0bGVTdHJpbmcgPSBfdmlldy5wb3NpdGlvbkluZm9y
bWF0aW9uLnRpdGxlOworCisgICAgaWYgKFt0aXRsZVN0cmluZyBsZW5ndGhdKSB7CisgICAgICAg
IFtfaW50ZXJhY3Rpb25TaGVldCBzZXRUaXRsZTp0aXRsZVN0cmluZ107CisgICAgICAgIGlmICh0
aXRsZUlzVVJMKSB7CisgICAgICAgICAgICBbW19pbnRlcmFjdGlvblNoZWV0IF90aXRsZUxhYmVs
XSBzZXRMaW5lQnJlYWtNb2RlOk5TTGluZUJyZWFrQnlUcnVuY2F0aW5nTWlkZGxlXTsKKyAgICAg
ICAgICAgIFtfaW50ZXJhY3Rpb25TaGVldCBzZXRUaXRsZU1heExpbmVDb3VudDoyXTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBbW19pbnRlcmFjdGlvblNoZWV0IF90aXRsZUxhYmVsXSBz
ZXRMaW5lQnJlYWtNb2RlOk5TTGluZUJyZWFrQnlUcnVuY2F0aW5nVGFpbF07CisgICAgfQorCisg
ICAgX2VsZW1lbnRBY3Rpb25zID0gYWRvcHROUyhbYWN0aW9ucyBjb3B5XSk7CisgICAgZm9yIChX
S0VsZW1lbnRBY3Rpb24gKmFjdGlvbiBpbiBfZWxlbWVudEFjdGlvbnMuZ2V0KCkpCisgICAgICAg
IFtfaW50ZXJhY3Rpb25TaGVldCBhZGRCdXR0b25XaXRoVGl0bGU6W2FjdGlvbiB0aXRsZV1dOwor
CisgICAgW19pbnRlcmFjdGlvblNoZWV0IHNldENhbmNlbEJ1dHRvbkluZGV4OltfaW50ZXJhY3Rp
b25TaGVldCBhZGRCdXR0b25XaXRoVGl0bGU6V0VCX1VJX1NUUklOR19LRVkoIkNhbmNlbCIsICJD
YW5jZWwgYnV0dG9uIGxhYmVsIGluIGJ1dHRvbiBiYXIiLCAiVGl0bGUgZm9yIENhbmNlbCBidXR0
b24gbGFiZWwgaW4gYnV0dG9uIGJhciIpXV07CisgICAgX3BhZ2UtPnN0YXJ0SW50ZXJhY3Rpb25X
aXRoRWxlbWVudEF0UG9zaXRpb24oX3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi5wb2ludCk7Cit9
CisKKy0gKHZvaWQpc2hvd0ltYWdlU2hlZXQKK3sKKyAgICBBU1NFUlQoIV9pbnRlcmFjdGlvblNo
ZWV0KTsKKworICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpfdmll
dy5wb3NpdGlvbkluZm9ybWF0aW9uLnVybF07CisgICAgTlNNdXRhYmxlQXJyYXkgKmFjdGlvbnMg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgIGlmICghX3ZpZXcucG9zaXRpb25JbmZvcm1h
dGlvbi51cmwuaXNFbXB0eSgpKQorICAgICAgICBbYWN0aW9ucyBhZGRPYmplY3Q6W1dLRWxlbWVu
dEFjdGlvbiBzdGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTpXS0VsZW1lbnRBY3Rpb25UeXBl
T3Blbl1dOworICAgIGlmIChbZ2V0U1NSZWFkaW5nTGlzdENsYXNzKCkgc3VwcG9ydHNVUkw6dGFy
Z2V0VVJMXSkKKyAgICAgICAgW2FjdGlvbnMgYWRkT2JqZWN0OltXS0VsZW1lbnRBY3Rpb24gc3Rh
bmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0aW9uVHlwZUFkZFRvUmVhZGlu
Z0xpc3RdXTsKKyAgICBpZiAoVENDQWNjZXNzUHJlZmxpZ2h0KGdldGtUQ0NTZXJ2aWNlUGhvdG9z
KCksIE5VTEwpICE9IGtUQ0NBY2Nlc3NQcmVmbGlnaHREZW5pZWQpCisgICAgICAgIFthY3Rpb25z
IGFkZE9iamVjdDpbV0tFbGVtZW50QWN0aW9uIHN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBl
OldLRWxlbWVudEFjdGlvblR5cGVTYXZlSW1hZ2VdXTsKKyAgICBpZiAoIVtbdGFyZ2V0VVJMIHNj
aGVtZV0gbGVuZ3RoXSB8fCBbW3RhcmdldFVSTCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBh
cmU6QCJqYXZhc2NyaXB0Il0gIT0gTlNPcmRlcmVkU2FtZSkKKyAgICAgICAgW2FjdGlvbnMgYWRk
T2JqZWN0OltXS0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6V0tF
bGVtZW50QWN0aW9uVHlwZUNvcHldXTsKKworICAgIC8vIEZJWE1FOiBBZGQgY2FsbCB0byBkZWxl
Z2F0ZSB0byBhZGQgY3VzdG9tIGFjdGlvbnMuCisKKyAgICBbc2VsZiBfY3JlYXRlU2hlZXRXaXRo
RWxlbWVudEFjdGlvbnM6YWN0aW9ucyBzaG93TGlua1RpdGxlOllFU107CisgICAgaWYgKCFfaW50
ZXJhY3Rpb25TaGVldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFbX2ludGVyYWN0aW9u
U2hlZXQgcHJlc2VudFNoZWV0XSkKKyAgICAgICAgW3NlbGYgYWN0aW9uU2hlZXQ6X2ludGVyYWN0
aW9uU2hlZXQuZ2V0KCkgY2xpY2tlZEJ1dHRvbkF0SW5kZXg6W19pbnRlcmFjdGlvblNoZWV0IGNh
bmNlbEJ1dHRvbkluZGV4XV07Cit9CisKKy0gKHZvaWQpc2hvd0xpbmtTaGVldAoreworICAgIEFT
U0VSVCghX2ludGVyYWN0aW9uU2hlZXQpOworICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwg
VVJMV2l0aFN0cmluZzpfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLnVybF07CisgICAgaWYgKCF0
YXJnZXRVUkwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TTXV0YWJsZUFycmF5ICphY3Rpb25z
ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICBbYWN0aW9ucyBhZGRPYmplY3Q6W1dLRWxl
bWVudEFjdGlvbiBzdGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTpXS0VsZW1lbnRBY3Rpb25U
eXBlT3Blbl1dOworICAgIGlmIChbZ2V0U1NSZWFkaW5nTGlzdENsYXNzKCkgc3VwcG9ydHNVUkw6
dGFyZ2V0VVJMXSkKKyAgICAgICAgW2FjdGlvbnMgYWRkT2JqZWN0OltXS0VsZW1lbnRBY3Rpb24g
c3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0aW9uVHlwZUFkZFRvUmVh
ZGluZ0xpc3RdXTsKKyAgICBpZiAoIVtbdGFyZ2V0VVJMIHNjaGVtZV0gbGVuZ3RoXSB8fCBbW3Rh
cmdldFVSTCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJqYXZhc2NyaXB0Il0gIT0g
TlNPcmRlcmVkU2FtZSkKKyAgICAgICAgW2FjdGlvbnMgYWRkT2JqZWN0OltXS0VsZW1lbnRBY3Rp
b24gc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0aW9uVHlwZUNvcHld
XTsKKworICAgIC8vIEZJWE1FOiBBZGQgY2FsbCB0byBkZWxlZ2F0ZSB0byBhZGQgY3VzdG9tIGFj
dGlvbnMuCisKKyAgICBbc2VsZiBfY3JlYXRlU2hlZXRXaXRoRWxlbWVudEFjdGlvbnM6YWN0aW9u
cyBzaG93TGlua1RpdGxlOllFU107CisgICAgaWYgKCFfaW50ZXJhY3Rpb25TaGVldCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFbX2ludGVyYWN0aW9uU2hlZXQgcHJlc2VudFNoZWV0XSkK
KyAgICAgICAgW3NlbGYgYWN0aW9uU2hlZXQ6X2ludGVyYWN0aW9uU2hlZXQuZ2V0KCkgY2xpY2tl
ZEJ1dHRvbkF0SW5kZXg6W19pbnRlcmFjdGlvblNoZWV0IGNhbmNlbEJ1dHRvbkluZGV4XV07Cit9
CisKKy0gKHZvaWQpc2hvd0RhdGFEZXRlY3RvcnNTaGVldAoreworICAgIEFTU0VSVCghX2ludGVy
YWN0aW9uU2hlZXQpOworICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmlu
Zzpfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLnVybF07CisgICAgaWYgKCF0YXJnZXRVUkwpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghW1tnZXRERERldGVjdGlvbkNvbnRyb2xsZXJDbGFz
cygpIHRhcEFuZEhvbGRTY2hlbWVzXSBjb250YWluc09iamVjdDpbdGFyZ2V0VVJMIHNjaGVtZV1d
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBjaGFu
Z2VkLgorICAgIC8vIFdlIG5lZWQgYSBkaWZmZXJlbnQgQVBJIGZvciBERERlY3RlY3Rpb25Db250
cm9sbGVyIHRoYXQgZG9lc24ndCB0YWtlIERPTU5vZGUgYW5kIFdlYkZyYW1lIG9iamVjdHMuCisg
ICAgLy8gTlNBcnJheSAqZGF0YURldGVjdG9yc0FjdGlvbnMgPSBbW2dldERERGV0ZWN0aW9uQ29u
dHJvbGxlckNsYXNzKCkgc2hhcmVkQ29udHJvbGxlcl0gYWN0aW9uc0ZvckRPTU5vZGU6X2ludGVy
YWN0aW9uLmVsZW1lbnQgZm9yRnJhbWU6W193ZWJWaWV3IG1haW5GcmFtZV1dOworICAgIE5TQXJy
YXkgKmRhdGFEZXRlY3RvcnNBY3Rpb25zID0gbmlsOworCisgICAgLy8gRklYTUU6IFRoZSBmb2xs
b3dpbmcgY29uZGl0aW9uIHdpbGwgYWx3YXlzIGJlIHRydWUgZm9yIG5vdywgc2luY2UgdGhlcmUg
YXJlIG5vIHZpYWJsZSBjYWxscyB0byByZXRyaWV2ZQorICAgIC8vIGRhdGEgZGV0ZWN0b3IgYWN0
aW9ucy4KKyAgICBpZiAoW2RhdGFEZXRlY3RvcnNBY3Rpb25zIGNvdW50XSA9PSAwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBOU011dGFibGVBcnJheSAqZWxlbWVudEFjdGlvbnMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXldOworICAgIGZvciAoTlNVSW50ZWdlciBhY3Rpb25OdW1iZXIgPSAwOyBh
Y3Rpb25OdW1iZXIgPCBbZGF0YURldGVjdG9yc0FjdGlvbnMgY291bnRdOyBhY3Rpb25OdW1iZXIr
KykgeworICAgICAgICBEREFjdGlvbiAqYWN0aW9uID0gW2RhdGFEZXRlY3RvcnNBY3Rpb25zIG9i
amVjdEF0SW5kZXg6YWN0aW9uTnVtYmVyXTsKKyAgICAgICAgW2VsZW1lbnRBY3Rpb25zIGFkZE9i
amVjdDpbV0tFbGVtZW50QWN0aW9uIGN1c3RvbUVsZW1lbnRBY3Rpb25XaXRoVGl0bGU6W2FjdGlv
biBsb2NhbGl6ZWROYW1lXSBhY3Rpb25IYW5kbGVyOl4oV0tFbGVtZW50QWN0aW9uSW5mbyAqYWN0
aW9uSW5mbykgeworICAgICAgICAgICAgVUlQb3BvdmVyQ29udHJvbGxlciAqcG9wb3ZlckNvbnRy
b2xsZXIgPSBuaWw7CisgICAgICAgICAgICBpZiAoVUlfVVNFUl9JTlRFUkZBQ0VfSURJT00oKSAh
PSBVSVVzZXJJbnRlcmZhY2VJZGlvbVBob25lKSB7CisgICAgICAgICAgICAgICAgW19pbnRlcmFj
dGlvblNoZWV0IHNldFVzZXJJbnRlcmFjdGlvbkVuYWJsZWQ6Tk9dOworICAgICAgICAgICAgICAg
IC8vIDxyZGFyOi8vcHJvYmxlbS8xMTAxNTc1MT4gQWN0aW9uIHNoZWV0IGJlY29tZXMgYmxhY2sg
aWYgYSBidXR0b24gaXMgY2xpY2tlZCB0d2ljZSBvbiBpUGFkCisgICAgICAgICAgICAgICAgLy8g
cHJldmVudCBhbnkgZnVydGhlciB0YXAgb24gdGhlIHNoZWV0IHdoaWxlIEREIGlzIGxvYWRpbmcg
aXRzIHZpZXcgY29udHJvbGxlciwgb3RoZXJ3aXNlIFVJQWN0aW9uU2hlZXQgZ29lcyBhbW9rCisK
KyAgICAgICAgICAgICAgICBwb3BvdmVyQ29udHJvbGxlciA9IFtfaW50ZXJhY3Rpb25TaGVldCBf
cmVsaW5xdWlzaFBvcG92ZXJDb250cm9sbGVyXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgW1tnZXRERERldGVjdGlvbkNvbnRyb2xsZXJDbGFzcygpIHNoYXJlZENvbnRyb2xsZXJdIHBl
cmZvcm1BY3Rpb246YWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluVmlldzpbc2VsZiBzdXBlcnZpZXdG
b3JTaGVldF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2l0aFBvcG92ZXJDb250cm9sbGVyOnBvcG92ZXJDb250cm9sbGVyCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJh
Y3Rpb25EZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgfV1dOworICAgIH0KKworICAgIFtzZWxmIF9j
cmVhdGVTaGVldFdpdGhFbGVtZW50QWN0aW9uczplbGVtZW50QWN0aW9ucyBzaG93TGlua1RpdGxl
Ok5PXTsKKyAgICBpZiAoIV9pbnRlcmFjdGlvblNoZWV0KQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBUaGUgaW1wbGljaXQgc2Vjb25kIGJ1dHRvbiBpcyAiY2FuY2VsIiwgd2hpY2ggaXMgc3dh
bGxvd2VkIGJ5IHRoZSBwb3BvdmVyIGF0IHByZXNlbnRhdGlvbiB0aW1lLgorICAgIGlmIChfaW50
ZXJhY3Rpb25TaGVldC5nZXQoKS5udW1iZXJPZkJ1dHRvbnMgPD0gMikKKyAgICAgICAgX2ludGVy
YWN0aW9uU2hlZXQuZ2V0KCkuYXJyb3dEaXJlY3Rpb25zID0gVUlQb3BvdmVyQXJyb3dEaXJlY3Rp
b25VcCB8IFVJUG9wb3ZlckFycm93RGlyZWN0aW9uRG93bjsKKworICAgIGlmICghW19pbnRlcmFj
dGlvblNoZWV0IHByZXNlbnRTaGVldF0pCisgICAgICAgIFtzZWxmIGFjdGlvblNoZWV0Ol9pbnRl
cmFjdGlvblNoZWV0LmdldCgpIGNsaWNrZWRCdXR0b25BdEluZGV4OltfaW50ZXJhY3Rpb25TaGVl
dCBjYW5jZWxCdXR0b25JbmRleF1dOworfQorCistICh2b2lkKWNsZWFudXBTaGVldAoreworICAg
IF9wYWdlLT5zdG9wSW50ZXJhY3Rpb24oKTsKKworICAgIFtfaW50ZXJhY3Rpb25TaGVldCBkb25l
V2l0aFNoZWV0XTsKKyAgICBbX2ludGVyYWN0aW9uU2hlZXQgc2V0U2hlZXREZWxlZ2F0ZTpuaWxd
OworICAgIFtfaW50ZXJhY3Rpb25TaGVldCBzZXREZWxlZ2F0ZTpuaWxdOworICAgIF9pbnRlcmFj
dGlvblNoZWV0ID0gbmlsOworCisgICAgX2VsZW1lbnRBY3Rpb25zID0gbmlsOworfQorCitAZW5k
CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40NWFkOGNmMjM2YThlOTM2MmUzOWU3MjRjNjMxM2EzMWQwZDhhNzdkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3LmgK
QEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldLQmFzZS5oIgorI2ltcG9y
dCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLmgiCisjaW1wb3J0ICJXS0Jyb3dzaW5nQ29u
dGV4dEdyb3VwLmgiCisjaW1wb3J0ICJXS1Byb2Nlc3NHcm91cC5oIgorI2ltcG9ydCA8VUlLaXQv
VUlLaXQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGNsYXNzIFdLQ29udGVudFZp
ZXc7CitAY2xhc3MgV0tXZWJWaWV3Q29uZmlndXJhdGlvbjsKKworbmFtZXNwYWNlIFdlYktpdCB7
CitjbGFzcyBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjsKK2NsYXNzIFdlYkNvbnRleHQ7Citz
dHJ1Y3QgV2ViUGFnZUNvbmZpZ3VyYXRpb247Cit9CisKK0Bwcm90b2NvbCBXS0NvbnRlbnRWaWV3
RGVsZWdhdGUgPE5TT2JqZWN0PgorLSAodm9pZCljb250ZW50Vmlld0RpZENvbW1pdExvYWRGb3JN
YWluRnJhbWU6KFdLQ29udGVudFZpZXcgKiljb250ZW50VmlldzsKKy0gKHZvaWQpY29udGVudFZp
ZXc6KFdLQ29udGVudFZpZXcgKiljb250ZW50VmlldyBkaWRDb21taXRMYXllclRyZWU6KGNvbnN0
IFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKWxheWVyVHJlZVRyYW5zYWN0aW9u
OworCisvLyBGSVhNRTogVGhpcyBkb2Vzbid0IGJlbG9uZyBpbiBhICdkZWxlZ2F0ZScuCistIChS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4pdGFrZVZpZXdTbmFwc2hvdEZvckNvbnRlbnRWaWV3OihXS0Nv
bnRlbnRWaWV3ICopY29udGVudFZpZXc7CitAZW5kCisKK1dLX0FQSV9DTEFTUworQGludGVyZmFj
ZSBXS0NvbnRlbnRWaWV3IDogVUlWaWV3CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHRDb250cm9sbGVy
OworCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpZCA8V0tDb250ZW50Vmlld0RlbGVn
YXRlPiBkZWxlZ2F0ZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1BhZ2VS
ZWYgX3BhZ2VSZWY7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgaXNBc3Np
c3RpbmdOb2RlOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1l
IGNvbnRleHQ6KFdlYktpdDo6V2ViQ29udGV4dCYpY29udGV4dCBjb25maWd1cmF0aW9uOihXZWJL
aXQ6OldlYlBhZ2VDb25maWd1cmF0aW9uKXdlYlBhZ2VDb25maWd1cmF0aW9uOworCistICh2b2lk
KXNldE1pbmltdW1TaXplOihDR1NpemUpc2l6ZTsKKy0gKHZvaWQpc2V0TWluaW11bUxheW91dFNp
emU6KENHU2l6ZSlzaXplOworLSAodm9pZClkaWRVcGRhdGVWaXNpYmxlUmVjdDooQ0dSZWN0KXZp
c2libGVSZWN0IHVub2JzY3VyZWRSZWN0OihDR1JlY3QpdW5vYnNjdXJlZFJlY3Qgc2NhbGU6KENH
RmxvYXQpc2NhbGU7CisKKy0gKHZvaWQpZGlkRmluaXNoU2Nyb2xsaW5nOworLSAodm9pZClkaWRa
b29tVG9TY2FsZTooQ0dGbG9hdClzY2FsZTsKKy0gKHZvaWQpd2lsbFN0YXJ0Wm9vbU9yU2Nyb2xs
OworLSAodm9pZCl3aWxsU3RhcnRVc2VyVHJpZ2dlcmVkU2Nyb2xsOworLSAodm9pZCl3aWxsU3Rh
cnRVc2VyVHJpZ2dlcmVkWm9vbTsKKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhMjEzODkyNGYzNWFiMDljYWNhZGM0
ODk5Zjk2OTIyMmYzMTJkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KQEAgLTAsMCArMSwzMjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLQ29udGVudFZpZXdJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIgorI2ltcG9ydCAi
UGFnZUNsaWVudEltcGxJT1MuaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkuaCIKKyNpbXBvcnQgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCIKKyNp
bXBvcnQgIldlYktpdDJJbml0aWFsaXplLmgiCisjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRHcm91cFByaXZh
dGUuaCIKKyNpbXBvcnQgIldLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oIgorI2ltcG9ydCAiV0tJ
bnRlcmFjdGlvblZpZXcuaCIKKyNpbXBvcnQgIldLUHJlZmVyZW5jZXNJbnRlcm5hbC5oIgorI2lt
cG9ydCAiV0tQcm9jZXNzR3JvdXBQcml2YXRlLmgiCisjaW1wb3J0ICJXS1Byb2Nlc3NDbGFzc0lu
dGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uLmgiCisjaW1wb3J0ICJX
ZWJDb250ZXh0LmgiCisjaW1wb3J0ICJXZWJGcmFtZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQYWdl
R3JvdXAuaCIKKyNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCA8VUlLaXQv
VUlXaW5kb3dfUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5o
PgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgVVNFKElPU1VSRkFDRSkKKyNpbXBv
cnQgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KKyNlbmRpZgorCisjaWYgX19oYXNfaW5jbHVkZSg8
UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPikKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVh
cnR6Q29yZVByaXZhdGUuaD4KKyNlbmRpZgorCitAaW50ZXJmYWNlIENBTGF5ZXIgKERldGFpbHMp
CitAcHJvcGVydHkgQk9PTCBoaXRUZXN0c0FzT3BhcXVlOworQGVuZAorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0BpbXBsZW1lbnRhdGlvbiBX
S0NvbnRlbnRWaWV3IHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFnZUNsaWVudEltcGw+IF9wYWdl
Q2xpZW50OworICAgIFJldGFpblB0cjxXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI+IF9icm93
c2luZ0NvbnRleHRDb250cm9sbGVyOworCisgICAgUmV0YWluUHRyPFVJVmlldz4gX3Jvb3RDb250
ZW50VmlldzsKKyAgICBSZXRhaW5QdHI8V0tJbnRlcmFjdGlvblZpZXc+IF9pbnRlcmFjdGlvblZp
ZXc7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUgY29u
dGV4dDooV2ViS2l0OjpXZWJDb250ZXh0Jiljb250ZXh0IGNvbmZpZ3VyYXRpb246KFdlYktpdDo6
V2ViUGFnZUNvbmZpZ3VyYXRpb24pd2ViUGFnZUNvbmZpZ3VyYXRpb24KK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIEluaXRpYWxpemVXZWJLaXQyKCk7CisKKyAgICBfcGFnZUNsaWVudCA9IHN0ZDo6bWFr
ZV91bmlxdWU8UGFnZUNsaWVudEltcGw+KHNlbGYpOworCisgICAgX3BhZ2UgPSBjb250ZXh0LmNy
ZWF0ZVdlYlBhZ2UoKl9wYWdlQ2xpZW50LCBzdGQ6Om1vdmUod2ViUGFnZUNvbmZpZ3VyYXRpb24p
KTsKKyAgICBfcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBfcGFnZS0+c2V0SW50cmlu
c2ljRGV2aWNlU2NhbGVGYWN0b3IoW1VJU2NyZWVuIG1haW5TY3JlZW5dLnNjYWxlKTsKKyAgICBf
cGFnZS0+c2V0VXNlRml4ZWRMYXlvdXQodHJ1ZSk7CisgICAgX3BhZ2UtPnNldERlbGVnYXRlc1Nj
cm9sbGluZyh0cnVlKTsKKworICAgIFdlYkNvbnRleHQ6OnN0YXRpc3RpY3MoKS53a1ZpZXdDb3Vu
dCsrOworCisgICAgX3Jvb3RDb250ZW50VmlldyA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGlu
aXRdKTsKKyAgICBbX3Jvb3RDb250ZW50VmlldyBsYXllcl0ubWFza3NUb0JvdW5kcyA9IE5POwor
ICAgIFtfcm9vdENvbnRlbnRWaWV3IHNldFVzZXJJbnRlcmFjdGlvbkVuYWJsZWQ6Tk9dOworCisg
ICAgW3NlbGYgYWRkU3Vidmlldzpfcm9vdENvbnRlbnRWaWV3LmdldCgpXTsKKworICAgIF9pbnRl
cmFjdGlvblZpZXcgPSBhZG9wdE5TKFtbV0tJbnRlcmFjdGlvblZpZXcgYWxsb2NdIGluaXRdKTsK
KyAgICBbX2ludGVyYWN0aW9uVmlldyBzZXRQYWdlOl9wYWdlXTsKKyAgICBbc2VsZiBhZGRTdWJ2
aWV3Ol9pbnRlcmFjdGlvblZpZXcuZ2V0KCldOworCisgICAgc2VsZi5sYXllci5oaXRUZXN0c0Fz
T3BhcXVlID0gWUVTOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIF9wYWdlLT5jbG9zZSgpOworCisgICAgV2ViQ29udGV4dDo6c3RhdGlzdGljcygpLndr
Vmlld0NvdW50LS07CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpd2lsbE1v
dmVUb1dpbmRvdzooVUlXaW5kb3cgKiluZXdXaW5kb3cKK3sKKyAgICBOU05vdGlmaWNhdGlvbkNl
bnRlciAqZGVmYXVsdENlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVy
XTsKKyAgICBVSVdpbmRvdyAqd2luZG93ID0gc2VsZi53aW5kb3c7CisKKyAgICBpZiAod2luZG93
KQorICAgICAgICBbZGVmYXVsdENlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6VUlXaW5k
b3dEaWRNb3ZlVG9TY3JlZW5Ob3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107CisKKyAgICBpZiAo
bmV3V2luZG93KQorICAgICAgICBbZGVmYXVsdENlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVj
dG9yOkBzZWxlY3Rvcihfd2luZG93RGlkTW92ZVRvU2NyZWVuTm90aWZpY2F0aW9uOikgbmFtZTpV
SVdpbmRvd0RpZE1vdmVUb1NjcmVlbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmV3V2luZG93XTsKK30K
KworLSAodm9pZClkaWRNb3ZlVG9XaW5kb3cKK3sKKyAgICBpZiAoc2VsZi53aW5kb3cpCisgICAg
ICAgIFtzZWxmIF91cGRhdGVGb3JTY3JlZW46c2VsZi53aW5kb3cuc2NyZWVuXTsKKyAgICBfcGFn
ZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFZpZXdTdGF0ZTo6SXNJbldpbmRvdyk7Cit9CisKKy0gKFdL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKWJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIKK3sK
KyAgICBpZiAoIV9icm93c2luZ0NvbnRleHRDb250cm9sbGVyKQorICAgICAgICBfYnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlciA9IFtbV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIGFsbG9jXSBf
aW5pdFdpdGhQYWdlUmVmOnRvQVBJKF9wYWdlLmdldCgpKV07CisKKyAgICByZXR1cm4gX2Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIuZ2V0KCk7Cit9CisKKy0gKFdLUGFnZVJlZilfcGFnZVJlZgor
eworICAgIHJldHVybiB0b0FQSShfcGFnZS5nZXQoKSk7Cit9CisKKy0gKEJPT0wpaXNBc3Npc3Rp
bmdOb2RlCit7CisgICAgcmV0dXJuIFtfaW50ZXJhY3Rpb25WaWV3IGlzRWRpdGFibGVdOworfQor
CistICh2b2lkKWRpZFVwZGF0ZVZpc2libGVSZWN0OihDR1JlY3QpdmlzaWJsZVJlY3QgdW5vYnNj
dXJlZFJlY3Q6KENHUmVjdCl1bm9ic2N1cmVkUmVjdCBzY2FsZTooQ0dGbG9hdClzY2FsZQorewor
ICAgIF9wYWdlLT5zZXRVbm9ic2N1cmVkQ29udGVudFJlY3QodW5vYnNjdXJlZFJlY3QpOworICAg
IF9wYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCktPnNjcm9sbFBvc2l0aW9uQ2hhbmdl
ZFZpYURlbGVnYXRlZFNjcm9sbGluZyhfcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSgp
LT5yb290U2Nyb2xsaW5nTm9kZUlEKCksIHJvdW5kZWRJbnRQb2ludCh1bm9ic2N1cmVkUmVjdC5v
cmlnaW4pKTsKKworICAgIGlmIChhdXRvIGRyYXdpbmdBcmVhID0gX3BhZ2UtPmRyYXdpbmdBcmVh
KCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGV4cG9zZWRSZWN0ID0gdmlzaWJsZVJlY3Q7CisgICAg
ICAgIGV4cG9zZWRSZWN0LnNjYWxlKHNjYWxlKTsKKyAgICAgICAgZHJhd2luZ0FyZWEtPnNldEV4
cG9zZWRSZWN0KGV4cG9zZWRSZWN0KTsKKyAgICB9CisKKyAgICBbc2VsZiBfdXBkYXRlRml4ZWRQ
b3NpdGlvblJlY3RdOworfQorCistICh2b2lkKXNldE1pbmltdW1TaXplOihDR1NpemUpc2l6ZQor
eworICAgIF9wYWdlLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKEludFNpemUoc2l6ZSksIEludFNp
emUoKSwgSW50U2l6ZSgpKTsKK30KKworLSAoRmxvYXRSZWN0KWZpeGVkUG9zaXRpb25SZWN0RnJv
bUV4cG9zZWRSZWN0OihGbG9hdFJlY3QpZXhwb3NlZFJlY3Qgc2NhbGU6KGZsb2F0KXNjYWxlCit7
CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG1vZGlmeSB0aGUgcmVjdCBiYXNlZCBvbiB0aGUg
c2NhbGUuCisgICAgVU5VU0VEX1BBUkFNKHNjYWxlKTsKKyAgICByZXR1cm4gZXhwb3NlZFJlY3Q7
Cit9CisKKy0gKHZvaWQpX3VwZGF0ZUZpeGVkUG9zaXRpb25SZWN0Cit7CisgICAgYXV0byBkcmF3
aW5nQXJlYSA9IF9wYWdlLT5kcmF3aW5nQXJlYSgpOworICAgIGlmICghZHJhd2luZ0FyZWEpCisg
ICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgZml4ZWRQb3NSZWN0ID0gW3NlbGYgZml4ZWRQ
b3NpdGlvblJlY3RGcm9tRXhwb3NlZFJlY3Q6X3BhZ2UtPnVub2JzY3VyZWRDb250ZW50UmVjdCgp
IHNjYWxlOl9wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKV07CisgICAgZHJhd2luZ0FyZWEtPnNldEN1
c3RvbUZpeGVkUG9zaXRpb25SZWN0KGZpeGVkUG9zUmVjdCk7Cit9CisKKy0gKHZvaWQpc2V0TWlu
aW11bUxheW91dFNpemU6KENHU2l6ZSlzaXplCit7CisgICAgX3BhZ2UtPnNldFZpZXdwb3J0Q29u
ZmlndXJhdGlvbk1pbmltdW1MYXlvdXRTaXplKEludFNpemUoQ0dDZWlsaW5nKHNpemUud2lkdGgp
LCBDR0NlaWxpbmcoc2l6ZS5oZWlnaHQpKSk7Cit9CisKKy0gKHZvaWQpZGlkRmluaXNoU2Nyb2xs
aW5nCit7CisgICAgW3NlbGYgX3VwZGF0ZUZpeGVkUG9zaXRpb25SZWN0XTsKKyAgICBbX2ludGVy
YWN0aW9uVmlldyBfZGlkRW5kU2Nyb2xsaW5nT3Jab29taW5nXTsKK30KKworLSAodm9pZCl3aWxs
U3RhcnRab29tT3JTY3JvbGwKK3sKKyAgICBbX2ludGVyYWN0aW9uVmlldyBfd2lsbFN0YXJ0U2Ny
b2xsaW5nT3Jab29taW5nXTsKK30KKworLSAodm9pZCl3aWxsU3RhcnRVc2VyVHJpZ2dlcmVkU2Ny
b2xsCit7CisgICAgW19pbnRlcmFjdGlvblZpZXcgX3dpbGxTdGFydFVzZXJUcmlnZ2VyZWRTY3Jv
bGxpbmdPclpvb21pbmddOworfQorCistICh2b2lkKXdpbGxTdGFydFVzZXJUcmlnZ2VyZWRab29t
Cit7CisgICAgW19pbnRlcmFjdGlvblZpZXcgX3dpbGxTdGFydFVzZXJUcmlnZ2VyZWRTY3JvbGxp
bmdPclpvb21pbmddOworICAgIF9wYWdlLT53aWxsU3RhcnRVc2VyVHJpZ2dlcmVkWm9vbWluZygp
OworfQorCistICh2b2lkKWRpZFpvb21Ub1NjYWxlOihDR0Zsb2F0KXNjYWxlCit7CisgICAgX3Bh
Z2UtPmRpZEZpbmlzaFpvb21pbmcoc2NhbGUpOworICAgIFtfaW50ZXJhY3Rpb25WaWV3IF9kaWRF
bmRTY3JvbGxpbmdPclpvb21pbmddOworfQorCisjcHJhZ21hIG1hcmsgSW50ZXJuYWwKKworLSAo
dm9pZClfd2luZG93RGlkTW92ZVRvU2NyZWVuTm90aWZpY2F0aW9uOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbgoreworICAgIEFTU0VSVChub3RpZmljYXRpb24ub2JqZWN0ID09IHNlbGYu
d2luZG93KTsKKworICAgIFVJU2NyZWVuICpzY3JlZW4gPSBub3RpZmljYXRpb24udXNlckluZm9b
VUlXaW5kb3dOZXdTY3JlZW5Vc2VySW5mb0tleV07CisgICAgW3NlbGYgX3VwZGF0ZUZvclNjcmVl
bjpzY3JlZW5dOworfQorCistICh2b2lkKV91cGRhdGVGb3JTY3JlZW46KFVJU2NyZWVuICopc2Ny
ZWVuCit7CisgICAgQVNTRVJUKHNjcmVlbik7CisgICAgX3BhZ2UtPnNldEludHJpbnNpY0Rldmlj
ZVNjYWxlRmFjdG9yKHNjcmVlbi5zY2FsZSk7Cit9CisKKyNwcmFnbWEgbWFyayBQYWdlQ2xpZW50
SW1wbCBtZXRob2RzCisKKy0gKHN0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYVByb3h5PilfY3Jl
YXRlRHJhd2luZ0FyZWFQcm94eQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KF9wYWdlLmdldCgpKTsKK30KKworLSAodm9pZClf
cHJvY2Vzc0RpZEV4aXQKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCistICh2b2lk
KV9kaWRSZWxhdW5jaFByb2Nlc3MKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCist
ICh2b2lkKV9kaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lCit7CisgICAgaWYgKFtfZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb250ZW50Vmlld0RpZENvbW1pdExvYWRGb3JN
YWluRnJhbWU6KV0pCisgICAgICAgIFtfZGVsZWdhdGUgY29udGVudFZpZXdEaWRDb21taXRMb2Fk
Rm9yTWFpbkZyYW1lOnNlbGZdOworICAgIFtfaW50ZXJhY3Rpb25WaWV3IF9zdG9wQXNzaXN0aW5n
Tm9kZV07Cit9CisKKy0gKHZvaWQpX2RpZENvbW1pdExheWVyVHJlZTooY29uc3QgV2ViS2l0OjpS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpbGF5ZXJUcmVlVHJhbnNhY3Rpb24KK3sKKyAgICBD
R1NpemUgY29udGVudHNTaXplID0gbGF5ZXJUcmVlVHJhbnNhY3Rpb24uY29udGVudHNTaXplKCk7
CisKKyAgICBbc2VsZiBzZXRCb3VuZHM6e0NHUG9pbnRaZXJvLCBjb250ZW50c1NpemV9XTsKKyAg
ICBbX2ludGVyYWN0aW9uVmlldyBzZXRGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIGNvbnRlbnRzU2l6
ZS53aWR0aCwgY29udGVudHNTaXplLmhlaWdodCldOworICAgIFtfcm9vdENvbnRlbnRWaWV3IHNl
dEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgY29udGVudHNTaXplLndpZHRoLCBjb250ZW50c1NpemUu
aGVpZ2h0KV07CisKKyAgICBpZiAoW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKGNvbnRlbnRWaWV3OmRpZENvbW1pdExheWVyVHJlZTopXSkKKyAgICAgICAgW19kZWxlZ2F0
ZSBjb250ZW50VmlldzpzZWxmIGRpZENvbW1pdExheWVyVHJlZTpsYXllclRyZWVUcmFuc2FjdGlv
bl07Cit9CisKKy0gKHZvaWQpX3dlYlRvdWNoRXZlbnQ6KGNvbnN0IFdlYktpdDo6TmF0aXZlV2Vi
VG91Y2hFdmVudCYpdG91Y2hFdmVudCBwcmV2ZW50c05hdGl2ZUdlc3R1cmVzOihCT09MKXByZXZl
bnRzTmF0aXZlR2VzdHVyZQoreworICAgIFtfaW50ZXJhY3Rpb25WaWV3IF93ZWJUb3VjaEV2ZW50
OnRvdWNoRXZlbnQgcHJldmVudHNOYXRpdmVHZXN0dXJlczpwcmV2ZW50c05hdGl2ZUdlc3R1cmVd
OworfQorCistICh2b2lkKV9kaWRHZXRUYXBIaWdobGlnaHRGb3JSZXF1ZXN0Oih1aW50NjRfdCly
ZXF1ZXN0SUQgY29sb3I6KGNvbnN0IENvbG9yJiljb2xvciBxdWFkczooY29uc3QgVmVjdG9yPEZs
b2F0UXVhZD4mKWhpZ2hsaWdodGVkUXVhZHMgdG9wTGVmdFJhZGl1czooY29uc3QgSW50U2l6ZSYp
dG9wTGVmdFJhZGl1cyB0b3BSaWdodFJhZGl1czooY29uc3QgSW50U2l6ZSYpdG9wUmlnaHRSYWRp
dXMgYm90dG9tTGVmdFJhZGl1czooY29uc3QgSW50U2l6ZSYpYm90dG9tTGVmdFJhZGl1cyBib3R0
b21SaWdodFJhZGl1czooY29uc3QgSW50U2l6ZSYpYm90dG9tUmlnaHRSYWRpdXMKK3sKKyAgICBb
X2ludGVyYWN0aW9uVmlldyBfZGlkR2V0VGFwSGlnaGxpZ2h0Rm9yUmVxdWVzdDpyZXF1ZXN0SUQg
Y29sb3I6Y29sb3IgcXVhZHM6aGlnaGxpZ2h0ZWRRdWFkcyB0b3BMZWZ0UmFkaXVzOnRvcExlZnRS
YWRpdXMgdG9wUmlnaHRSYWRpdXM6dG9wUmlnaHRSYWRpdXMgYm90dG9tTGVmdFJhZGl1czpib3R0
b21MZWZ0UmFkaXVzIGJvdHRvbVJpZ2h0UmFkaXVzOmJvdHRvbVJpZ2h0UmFkaXVzXTsKK30KKwor
LSAodm9pZClfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcjooQ0FMYXllciAqKXJv
b3RMYXllcgoreworICAgIFtbX3Jvb3RDb250ZW50VmlldyBsYXllcl0gc2V0U3VibGF5ZXJzOkBb
cm9vdExheWVyXV07Cit9CisKKy8vIEZJWE1FOiBjaGFuZ2UgdGhlIG5hbWUuIExlYXZlIGl0IGZv
ciBub3cgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVmZXIgdG8gdGhlIFVJS2l0IGltcGxlbWVudGF0
aW9uLgorLSAodm9pZClfc3RhcnRBc3Npc3RpbmdOb2RlCit7CisgICAgW19pbnRlcmFjdGlvblZp
ZXcgX3N0YXJ0QXNzaXN0aW5nTm9kZV07Cit9CisKKy0gKHZvaWQpX3N0b3BBc3Npc3RpbmdOb2Rl
Cit7CisgICAgW19pbnRlcmFjdGlvblZpZXcgX3N0b3BBc3Npc3RpbmdOb2RlXTsKK30KKworLSAo
dm9pZClfc2VsZWN0aW9uQ2hhbmdlZAoreworICAgIFtfaW50ZXJhY3Rpb25WaWV3IF9zZWxlY3Rp
b25DaGFuZ2VkXTsKK30KKworLSAodm9pZClfZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91
Y2g6KFdLU2VsZWN0aW9uVG91Y2gpdG91Y2ggd2l0aEZsYWdzOihXS1NlbGVjdGlvbkZsYWdzKWZs
YWdzIGdyb3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6
KENHRmxvYXQpc2hyaW5rVGhyZXNob2xkCit7CisgICAgW19pbnRlcmFjdGlvblZpZXcgX2RpZFVw
ZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoOnRvdWNoIHdpdGhGbGFnczpmbGFncyBncm93VGhy
ZXNob2xkOmdyb3dUaHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOnNocmlua1RocmVzaG9sZF07Cit9
CisKKy0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihXZWJJT1NFdmVudCAqKXRoZUV2ZW50IGlz
Q2hhckV2ZW50OihCT09MKWlzQ2hhckV2ZW50Cit7CisgICAgcmV0dXJuIFtfaW50ZXJhY3Rpb25W
aWV3IF9pbnRlcnByZXRLZXlFdmVudDp0aGVFdmVudCBpc0NoYXJFdmVudDppc0NoYXJFdmVudF07
Cit9CisKKy0gKHZvaWQpX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6KGNvbnN0IEludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJilpbmZvCit7CisgICAgW19pbnRlcmFjdGlvblZp
ZXcgX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6aW5mb107Cit9CisKKy0gKHZvaWQpX2Rl
Y2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46KFdlYlNlY3VyaXR5T3Jp
Z2luJilvcmlnaW4gZnJhbWU6KFdlYkZyYW1lUHJveHkmKWZyYW1lIHJlcXVlc3Q6KEdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eSYpcGVybWlzc2lvblJlcXVlc3QKK3sKKyAgICAvLyBG
SVhNRTogVGhlIGxpbmUgYmVsb3cgaXMgY29tbWVudGVkIG91dCBzaW5jZSB3cmFwcGVyKFdlYkNv
bnRleHQmKSBub3cgcmV0dXJucyBhIFdLUHJvY2Vzc0NsYXNzLgorICAgIC8vIEFzIHBhcnQgb2Yg
dGhlIG5ldyBBUEkgd2Ugc2hvdWxkIGZpZ3VyZSBvdXQgd2hlcmUgZ2VvbG9jYXRpb24gZml0cyBp
biwgc2VlIDxyZGFyOi8vcHJvYmxlbS8xNTg4NTU0ND4uCisgICAgLy8gW1t3cmFwcGVyKF9wYWdl
LT5wcm9jZXNzKCkuY29udGV4dCgpKSBfZ2VvbG9jYXRpb25Qcm92aWRlcl0gZGVjaWRlUG9saWN5
Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjp0b0FQSSgmb3JpZ2luKSBmcmFtZTp0b0FQ
SSgmZnJhbWUpIHJlcXVlc3Q6dG9BUEkoJnBlcm1pc3Npb25SZXF1ZXN0KSB3aW5kb3c6W3NlbGYg
d2luZG93XV07Cit9CisKKy0gKFJldGFpblB0cjxDR0ltYWdlUmVmPilfdGFrZVZpZXdTbmFwc2hv
dAoreworICAgIHJldHVybiBbX2RlbGVnYXRlIHRha2VWaWV3U25hcHNob3RGb3JDb250ZW50Vmll
dzpzZWxmXTsKK30KKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTYxMThjNWQ2MzAwYmE0NzRj
Y2QwZTg5ODQ2ZWM5YzQ0MWVjMzA0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmgKQEAgLTAsMCArMSw3OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldLQ29udGVudFZpZXcuaCIKKyNpbXBvcnQgIldL
R2VzdHVyZVR5cGVzLmgiCisjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgorI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UXVhZDsKK2NsYXNzIEludFNpemU7CitzdHJ1Y3Qg
Vmlld3BvcnRBcmd1bWVudHM7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgRHJhd2lu
Z0FyZWFQcm94eTsKK2NsYXNzIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eTsKK2Ns
YXNzIExheWVyVHJlZUNvbnRleHQ7CitjbGFzcyBOYXRpdmVXZWJUb3VjaEV2ZW50OworY2xhc3Mg
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247CitjbGFzcyBXZWJGcmFtZVByb3h5OworY2xhc3Mg
V2ViUGFnZVByb3h5OworY2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47CitzdHJ1Y3QgSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb247Cit9CisKK0BjbGFzcyBXZWJJT1NFdmVudDsKKworQGlu
dGVyZmFjZSBXS0NvbnRlbnRWaWV3ICgpIHsKK0BwYWNrYWdlCisgICAgUmVmUHRyPFdlYktpdDo6
V2ViUGFnZVByb3h5PiBfcGFnZTsKK30KKworLSAoc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6RHJh
d2luZ0FyZWFQcm94eT4pX2NyZWF0ZURyYXdpbmdBcmVhUHJveHk7CistICh2b2lkKV9wcm9jZXNz
RGlkRXhpdDsKKy0gKHZvaWQpX2RpZFJlbGF1bmNoUHJvY2VzczsKKy0gKHZvaWQpX3NldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXI6KENBTGF5ZXIgKilyb290TGF5ZXI7CisKKy0gKHZv
aWQpX2RpZENvbW1pdExvYWRGb3JNYWluRnJhbWU7CistICh2b2lkKV9kaWRDb21taXRMYXllclRy
ZWU6KGNvbnN0IFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKWxheWVyVHJlZVRy
YW5zYWN0aW9uOworCistICh2b2lkKV93ZWJUb3VjaEV2ZW50Oihjb25zdCBXZWJLaXQ6Ok5hdGl2
ZVdlYlRvdWNoRXZlbnQmKXRvdWNoRXZlbnQgcHJldmVudHNOYXRpdmVHZXN0dXJlczooQk9PTClw
cmV2ZW50c0RlZmF1bHQ7CistICh2b2lkKV9kaWRHZXRUYXBIaWdobGlnaHRGb3JSZXF1ZXN0Oih1
aW50NjRfdClyZXF1ZXN0SUQgY29sb3I6KGNvbnN0IFdlYkNvcmU6OkNvbG9yJiljb2xvciBxdWFk
czooY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UXVhZD4mKWhpZ2hsaWdodGVkUXVhZHMgdG9w
TGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpdG9wTGVmdFJhZGl1cyB0b3BSaWdo
dFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpdG9wUmlnaHRSYWRpdXMgYm90dG9tTGVm
dFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpYm90dG9tTGVmdFJhZGl1cyBib3R0b21S
aWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpYm90dG9tUmlnaHRSYWRpdXM7CisK
Ky0gKHZvaWQpX3N0YXJ0QXNzaXN0aW5nTm9kZTsKKy0gKHZvaWQpX3N0b3BBc3Npc3RpbmdOb2Rl
OworLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZDsKKy0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50
OihXZWJJT1NFdmVudCAqKXRoZUV2ZW50IGlzQ2hhckV2ZW50OihCT09MKWlzQ2hhckV2ZW50Owor
LSAodm9pZClfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZTooY29uc3QgV2ViS2l0OjpJbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpaW5mbzsKKy0gKHZvaWQpX2RlY2lkZVBvbGlj
eUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46KFdlYktpdDo6V2ViU2VjdXJpdHlPcmln
aW4mKW9yaWdpbiBmcmFtZTooV2ViS2l0OjpXZWJGcmFtZVByb3h5JilmcmFtZSByZXF1ZXN0OihX
ZWJLaXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eSYpcGVybWlzc2lvblJlcXVl
c3Q7CistICh2b2lkKV9kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaDooV2ViS2l0OjpX
S1NlbGVjdGlvblRvdWNoKXRvdWNoIHdpdGhGbGFnczooV2ViS2l0OjpXS1NlbGVjdGlvbkZsYWdz
KWZsYWdzIGdyb3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hv
bGQ6KENHRmxvYXQpc2hyaW5rVGhyZXNob2xkOworCistIChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4p
X3Rha2VWaWV3U25hcHNob3Q7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhMjE2
YTA0Yzg4ZjYyMzQ3ZjdjNDg0ZTU3ZGRlNzBmYTY5NjA3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oCkBA
IC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL05TT2JqZWN0
Lmg+CisjaW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2Ns
YXNzIFdlYkNvbnRleHQ7Cit9CisKK0BjbGFzcyBVSVdpbmRvdzsKKworQGludGVyZmFjZSBXS0dl
b2xvY2F0aW9uUHJvdmlkZXJJT1MgOiBOU09iamVjdAorLShpZClpbml0V2l0aENvbnRleHQ6KFdl
YktpdDo6V2ViQ29udGV4dCopY29udGV4dDsKKy0odm9pZClkZWNpZGVQb2xpY3lGb3JHZW9sb2Nh
dGlvblJlcXVlc3RGcm9tT3JpZ2luOihXS1NlY3VyaXR5T3JpZ2luUmVmKW9yaWdpbiBmcmFtZToo
V0tGcmFtZVJlZilmcmFtZSByZXF1ZXN0OihXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RS
ZWYpcGVybWlzc2lvblJlcXVlc3Qgd2luZG93OihVSVdpbmRvdyopd2luZG93OworQGVuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0dlb2xvY2F0aW9uUHJvdmlk
ZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLR2VvbG9jYXRpb25Qcm92
aWRlcklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTI1MGRhOGIxNTE2YzAxNzExYTI1OTZkODkwYmYyNzcx
YWQxOTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
S0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MubW0KQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5o
IgorCisjaW1wb3J0ICJHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkuaCIKKyNpbXBv
cnQgIldlYkNvbnRleHQuaCIKKyNpbXBvcnQgIldlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5Lmgi
CisjaW1wb3J0ICJXZWJTZWN1cml0eU9yaWdpbi5oIgorI2ltcG9ydCA8V2ViR2VvbG9jYXRpb25Q
b3NpdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvblBvc2l0aW9uLmg+CisjaW1w
b3J0IDxXZWJLaXQyL1dLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oPgorI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW1wb3J0IDx3
dGYvUmVmUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvSGFz
aFNldC5oPgorCisvLyBGSVhNRTogUmVtb3ZlIHVzZSBvZiBXZWJLaXQxIGZyb20gV2ViS2l0Mgor
I2ltcG9ydCA8V2ViS2l0L1dlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXIuaD4KKyNp
bXBvcnQgPFdlYktpdC9XZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5lci5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OworCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisKK0Bp
bnRlcmZhY2UgV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TICgpCistKHZvaWQpX3N0YXJ0VXBkYXRp
bmc7CistKHZvaWQpX3N0b3BVcGRhdGluZzsKKy0odm9pZClfc2V0RW5hYmxlSGlnaEFjY3VyYWN5
OihCT09MKWVuYWJsZTsKK0BlbmQKKworQGludGVyZmFjZSBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJ
T1MgKFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uVXBkYXRlTGlzdGVuZXIpIDxXZWJHZW9sb2Nh
dGlvbkNvcmVMb2NhdGlvblVwZGF0ZUxpc3RlbmVyPgorQGVuZAorCitAaW50ZXJmYWNlIFdLV2Vi
QWxsb3dEZW55UG9saWN5TGlzdGVuZXIgOiBOU09iamVjdDxXZWJBbGxvd0RlbnlQb2xpY3lMaXN0
ZW5lcj4KKy0gKGlkKWluaXRXaXRoUHJvdmlkZXI6KFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyop
cHJvdmlkZXIgcGVybWlzc2lvblJlcXVlc3RQcm94eTooUGFzc1JlZlB0cjxHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0UHJveHk+KXBlcm1pc3Npb25SZXF1ZXN0UHJveHk7CistICh2b2lkKWRl
bnlPbmx5VGhpc1JlcXVlc3QgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQ7CitAZW5kCisKK25hbWVz
cGFjZSBXZWJLaXQgewordm9pZCBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9t
T3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcs
IGlkPFdlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyPiwgVUlXaW5kb3cqKTsKK307CisKK3N0YXRp
YyB2b2lkIHN0YXJ0VXBkYXRpbmdDYWxsYmFjayhXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBnZW9s
b2NhdGlvbk1hbmFnZXIsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgV0tHZW9sb2Nh
dGlvblByb3ZpZGVySU9TICpnZW9sb2NhdGlvblByb3ZpZGVyID0gcmVpbnRlcnByZXRfY2FzdDxX
S0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7
CisgICAgQVNTRVJUKFtnZW9sb2NhdGlvblByb3ZpZGVyIGlzS2luZE9mQ2xhc3M6W1dLR2VvbG9j
YXRpb25Qcm92aWRlcklPUyBjbGFzc11dKTsKKyAgICBbZ2VvbG9jYXRpb25Qcm92aWRlciBfc3Rh
cnRVcGRhdGluZ107Cit9CisKK3N0YXRpYyB2b2lkIHN0b3BVcGRhdGluZ0NhbGxiYWNrKFdLR2Vv
bG9jYXRpb25NYW5hZ2VyUmVmIGdlb2xvY2F0aW9uTWFuYWdlciwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK3sKKyAgICBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MgKmdlb2xvY2F0aW9uUHJvdmlk
ZXIgPSByZWludGVycHJldF9jYXN0PFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyo+KGNvbnN0X2Nh
c3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBBU1NFUlQoW2dlb2xvY2F0aW9uUHJvdmlkZXIg
aXNLaW5kT2ZDbGFzczpbV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TIGNsYXNzXV0pOworICAgIFtn
ZW9sb2NhdGlvblByb3ZpZGVyIF9zdG9wVXBkYXRpbmddOworfQorCitzdGF0aWMgdm9pZCBzZXRF
bmFibGVIaWdoQWNjdXJhY3koV0tHZW9sb2NhdGlvbk1hbmFnZXJSZWYgZ2VvbG9jYXRpb25NYW5h
Z2VyLCBib29sIGVuYWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXS0dlb2xv
Y2F0aW9uUHJvdmlkZXJJT1MgKmdlb2xvY2F0aW9uUHJvdmlkZXIgPSByZWludGVycHJldF9jYXN0
PFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8p
KTsKKyAgICBBU1NFUlQoW2dlb2xvY2F0aW9uUHJvdmlkZXIgaXNLaW5kT2ZDbGFzczpbV0tHZW9s
b2NhdGlvblByb3ZpZGVySU9TIGNsYXNzXV0pOworICAgIFtnZW9sb2NhdGlvblByb3ZpZGVyIF9z
ZXRFbmFibGVIaWdoQWNjdXJhY3k6ZW5hYmxlXTsKK30KKworc3RydWN0IEdlb2xvY2F0aW9uUmVx
dWVzdERhdGEgeworICAgIFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gb3JpZ2luOwor
ICAgIFJlZlB0cjxXZWJGcmFtZVByb3h5PiBmcmFtZTsKKyAgICBSZWZQdHI8R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdFByb3h5PiBwZXJtaXNzaW9uUmVxdWVzdDsKKyAgICBSZXRhaW5QdHI8
VUlXaW5kb3c+IHdpbmRvdzsKK307CisKK0BpbXBsZW1lbnRhdGlvbiBXS0dlb2xvY2F0aW9uUHJv
dmlkZXJJT1MgeworICAgIFJlZlB0cjxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4gX2dlb2xv
Y2F0aW9uTWFuYWdlcjsKKyAgICBSZXRhaW5QdHI8V2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Q
cm92aWRlcj4gX2NvcmVMb2NhdGlvblByb3ZpZGVyOworICAgIEJPT0wgX2lzV2ViQ29yZUdlb2xv
Y2F0aW9uQWN0aXZlOworICAgIFJlZlB0cjxXZWJHZW9sb2NhdGlvblBvc2l0aW9uPiBfbGFzdEFj
dGl2ZVBvc2l0aW9uOworICAgIFZlY3RvcjxHZW9sb2NhdGlvblJlcXVlc3REYXRhPiBfcmVxdWVz
dHNXYWl0aW5nRm9yQ29yZUxvY2F0aW9uU3RhcnQ7CisgICAgSGFzaFNldDx2b2lkKj4gX3JlcXVl
c3RzSW5XYXJtVXA7Cit9CisKKy0odm9pZClfc3RvcFVwZGF0aW5nSWZQb3NzaWJsZQoreworICAg
IGlmIChfaXNXZWJDb3JlR2VvbG9jYXRpb25BY3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChfcmVxdWVzdHNXYWl0aW5nRm9yQ29yZUxvY2F0aW9uU3RhcnQuaXNFbXB0eSgpICYmIF9y
ZXF1ZXN0c0luV2FybVVwLmlzRW1wdHkoKSkgeworICAgICAgICBbX2NvcmVMb2NhdGlvblByb3Zp
ZGVyIHN0b3BdOworICAgICAgICBfbGFzdEFjdGl2ZVBvc2l0aW9uLmNsZWFyKCk7CisgICAgfQor
fQorCisjcHJhZ21hIG1hcmsgLSBXS0dlb2xvY2F0aW9uUHJvdmlkZXIgY2FsbGJhY2tzIGltcGxl
bWVudGF0aW9uLgorLSh2b2lkKV9zdGFydFVwZGF0aW5nCit7CisgICAgX2lzV2ViQ29yZUdlb2xv
Y2F0aW9uQWN0aXZlID0gWUVTOworICAgIFtfY29yZUxvY2F0aW9uUHJvdmlkZXIgc3RhcnRdOwor
CisgICAgLy8gSWYgd2UgaGF2ZSB0aGUgbGFzdCBwb3NpdGlvbiwgaXQgaXMgZnJvbSB0aGUgaW5p
dGlhbGl6YXRpb24gb3Igd2FybSB1cC4gSXQgaXMgdGhlIGxhc3Qga25vd24KKyAgICAvLyBnb29k
IHBvc2l0aW9uIHNvIHdlIGNhbiByZXR1cm4gaXQgZGlyZWN0bHkuCisgICAgaWYgKF9sYXN0QWN0
aXZlUG9zaXRpb24pCisgICAgICAgIF9nZW9sb2NhdGlvbk1hbmFnZXItPnByb3ZpZGVyRGlkQ2hh
bmdlUG9zaXRpb24oX2xhc3RBY3RpdmVQb3NpdGlvbi5nZXQoKSk7Cit9CisKKy0odm9pZClfc3Rv
cFVwZGF0aW5nCit7CisgICAgX2lzV2ViQ29yZUdlb2xvY2F0aW9uQWN0aXZlID0gTk87CisgICAg
W3NlbGYgX3N0b3BVcGRhdGluZ0lmUG9zc2libGVdOworfQorCistKHZvaWQpX3NldEVuYWJsZUhp
Z2hBY2N1cmFjeTooQk9PTCllbmFibGVIaWdoQWNjdXJhY3kKK3sKKyAgICBbX2NvcmVMb2NhdGlv
blByb3ZpZGVyIHNldEVuYWJsZUhpZ2hBY2N1cmFjeTplbmFibGVIaWdoQWNjdXJhY3ldOworfQor
CisjcHJhZ21hIG1hcmsgLSBQdWJsaWMgQVBJIGltcGxlbWVudGF0aW9uLgorCistKGlkKWluaXQK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBbc2VsZiByZWxlYXNlXTsKKyAgICBy
ZXR1cm4gbmlsOworfQorCistKGlkKWluaXRXaXRoQ29udGV4dDooV2ViQ29udGV4dCopY29udGV4
dAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIF9nZW9sb2NhdGlvbk1hbmFnZXIgPSBjb250ZXh0LT5zdXBwbGVtZW50
PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpOworICAgIFdLR2VvbG9jYXRpb25Qcm92aWRl
ciBwcm92aWRlckNhbGxiYWNrID0geworICAgICAgICBrV0tHZW9sb2NhdGlvblByb3ZpZGVyQ3Vy
cmVudFZlcnNpb24sCisgICAgICAgIHNlbGYsCisgICAgICAgIHN0YXJ0VXBkYXRpbmdDYWxsYmFj
aywKKyAgICAgICAgc3RvcFVwZGF0aW5nQ2FsbGJhY2ssCisgICAgICAgIHNldEVuYWJsZUhpZ2hB
Y2N1cmFjeQorICAgIH07CisgICAgX2dlb2xvY2F0aW9uTWFuYWdlci0+aW5pdGlhbGl6ZVByb3Zp
ZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8V0tHZW9sb2NhdGlvblByb3ZpZGVyQmFzZSo+KCZwcm92aWRl
ckNhbGxiYWNrKSk7CisgICAgX2NvcmVMb2NhdGlvblByb3ZpZGVyID0gYWRvcHROUyhbW1dlYkdl
b2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXIgYWxsb2NdIGluaXRXaXRoTGlzdGVuZXI6c2Vs
Zl0pOworICAgIHJldHVybiBzZWxmOworfQorCistKHZvaWQpZGVjaWRlUG9saWN5Rm9yR2VvbG9j
YXRpb25SZXF1ZXN0RnJvbU9yaWdpbjooV0tTZWN1cml0eU9yaWdpblJlZilvcmlnaW4gZnJhbWU6
KFdLRnJhbWVSZWYpZnJhbWUgcmVxdWVzdDooV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
UmVmKXBlcm1pc3Npb25SZXF1ZXN0IHdpbmRvdzooVUlXaW5kb3cqKXdpbmRvdworeworICAgIEdl
b2xvY2F0aW9uUmVxdWVzdERhdGEgZ2VvbG9jYXRpb25SZXF1ZXN0RGF0YTsKKyAgICBnZW9sb2Nh
dGlvblJlcXVlc3REYXRhLm9yaWdpbiA9IHRvSW1wbChvcmlnaW4pLT5zZWN1cml0eU9yaWdpbigp
OworICAgIGdlb2xvY2F0aW9uUmVxdWVzdERhdGEuZnJhbWUgPSB0b0ltcGwoZnJhbWUpOworICAg
IGdlb2xvY2F0aW9uUmVxdWVzdERhdGEucGVybWlzc2lvblJlcXVlc3QgPSB0b0ltcGwocGVybWlz
c2lvblJlcXVlc3QpOworICAgIGdlb2xvY2F0aW9uUmVxdWVzdERhdGEud2luZG93ID0gd2luZG93
OworICAgIF9yZXF1ZXN0c1dhaXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydC5hcHBlbmQoZ2VvbG9j
YXRpb25SZXF1ZXN0RGF0YSk7CisgICAgW19jb3JlTG9jYXRpb25Qcm92aWRlciBzdGFydF07Cit9
CitAZW5kCisKKyNwcmFnbWEgbWFyayAtIFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uVXBkYXRl
TGlzdGVuZXIgaW1wbGVtZW50YXRpb24uCisKK0BpbXBsZW1lbnRhdGlvbiBXS0dlb2xvY2F0aW9u
UHJvdmlkZXJJT1MgKFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uVXBkYXRlTGlzdGVuZXIpCist
ICh2b2lkKWdlb2xvY2F0aW9uRGVsZWdhdGVTdGFydGVkCit7CisgICAgVmVjdG9yPEdlb2xvY2F0
aW9uUmVxdWVzdERhdGE+IHJlcXVlc3RzOworICAgIHJlcXVlc3RzLnN3YXAoX3JlcXVlc3RzV2Fp
dGluZ0ZvckNvcmVMb2NhdGlvblN0YXJ0KTsKKyAgICBIYXNoU2V0PHZvaWQqPiBsYXRlc3RSZXF1
ZXN0c0Zvcldhcm11cDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcXVlc3RzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eSogcGVy
bWlzc2lvblJlcXVlc3QgPSByZXF1ZXN0c1tpXS5wZXJtaXNzaW9uUmVxdWVzdC5nZXQoKTsKKyAg
ICAgICAgbGF0ZXN0UmVxdWVzdHNGb3JXYXJtdXAuYWRkKHBlcm1pc3Npb25SZXF1ZXN0KTsKKyAg
ICAgICAgX3JlcXVlc3RzSW5XYXJtVXAuYWRkKHBlcm1pc3Npb25SZXF1ZXN0KTsKKyAgICB9CisK
KyAgICAvLyBTdGFydCB0aGUgd2FybXVwIHBlcmlvZCBpbiB3aGljaCB3ZSBrZWVwIENvcmVMb2Nh
dGlvbiBydW5uaW5nIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB1c2VyIHJlc3BvbnNlLgorICAgIGNv
bnN0IGludDY0X3Qgd2FybVVwVGltZW91dEludGVydmFsID0gMjAgKiBOU0VDX1BFUl9TRUM7Cisg
ICAgZGlzcGF0Y2hfdGltZV90IHdoZW4gPSBkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9X
LCB3YXJtVXBUaW1lb3V0SW50ZXJ2YWwpOworICAgIGRpc3BhdGNoX2FmdGVyKHdoZW4sIGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEhhc2hTZXQ8dm9pZCo+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBsYXRlc3RSZXF1ZXN0c0Zvcldhcm11cC5lbmQoKTsKKyAgICAgICAgZm9y
IChIYXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXRlc3RSZXF1ZXN0c0Zvcldh
cm11cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBfcmVxdWVzdHNJbldh
cm1VcC5yZW1vdmUoKml0KTsKKyAgICAgICAgW3NlbGYgX3N0b3BVcGRhdGluZ0lmUG9zc2libGVd
OworICAgIH0pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0cy5zaXplKCk7
ICsraSkgeworICAgICAgICBSZXRhaW5QdHI8V0tXZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5lcj4g
cG9saWN5TGlzdGVuZXIgPSBhZG9wdE5TKFtbV0tXZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5lciBh
bGxvY10gaW5pdFdpdGhQcm92aWRlcjpzZWxmIHBlcm1pc3Npb25SZXF1ZXN0UHJveHk6cmVxdWVz
dHNbaV0ucGVybWlzc2lvblJlcXVlc3QuZ2V0KCldKTsKKyAgICAgICAgZGVjaWRlUG9saWN5Rm9y
R2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbihyZXF1ZXN0c1tpXS5vcmlnaW4uZ2V0KCksIHJl
cXVlc3RzW2ldLmZyYW1lLT51cmwoKSwgcG9saWN5TGlzdGVuZXIuZ2V0KCksIHJlcXVlc3RzW2ld
LndpbmRvdy5nZXQoKSk7CisgICAgfQorfQorCistICh2b2lkKWdlb2xvY2F0aW9uRGVsZWdhdGVV
bmFibGVUb1N0YXJ0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBfcmVxdWVzdHNXYWl0
aW5nRm9yQ29yZUxvY2F0aW9uU3RhcnQuc2l6ZSgpOyArK2kpCisgICAgICAgIF9yZXF1ZXN0c1dh
aXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydFtpXS5wZXJtaXNzaW9uUmVxdWVzdC0+ZGVueSgpOwor
ICAgIF9yZXF1ZXN0c1dhaXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydC5jbGVhcigpOworICAgIFtz
ZWxmIF9zdG9wVXBkYXRpbmdJZlBvc3NpYmxlXTsKK30KKworLSAodm9pZClwb3NpdGlvbkNoYW5n
ZWQ6KFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24qKXBvc2l0aW9uCit7CisgICAgX2xhc3RB
Y3RpdmVQb3NpdGlvbiA9IFdlYkdlb2xvY2F0aW9uUG9zaXRpb246OmNyZWF0ZShwb3NpdGlvbi0+
dGltZXN0YW1wKCksIHBvc2l0aW9uLT5sYXRpdHVkZSgpLCBwb3NpdGlvbi0+bG9uZ2l0dWRlKCks
IHBvc2l0aW9uLT5hY2N1cmFjeSgpLCBwb3NpdGlvbi0+Y2FuUHJvdmlkZUFsdGl0dWRlKCksIHBv
c2l0aW9uLT5hbHRpdHVkZSgpLCBwb3NpdGlvbi0+Y2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3ko
KSwgcG9zaXRpb24tPmFsdGl0dWRlQWNjdXJhY3koKSwgcG9zaXRpb24tPmNhblByb3ZpZGVIZWFk
aW5nKCksIHBvc2l0aW9uLT5oZWFkaW5nKCksIHBvc2l0aW9uLT5jYW5Qcm92aWRlU3BlZWQoKSwg
cG9zaXRpb24tPnNwZWVkKCkpOworICAgIF9nZW9sb2NhdGlvbk1hbmFnZXItPnByb3ZpZGVyRGlk
Q2hhbmdlUG9zaXRpb24oX2xhc3RBY3RpdmVQb3NpdGlvbi5nZXQoKSk7Cit9CisKKy0gKHZvaWQp
ZXJyb3JPY2N1cnJlZDooTlNTdHJpbmcgKillcnJvck1lc3NhZ2UKK3sKKyAgICBfZ2VvbG9jYXRp
b25NYW5hZ2VyLT5wcm92aWRlckRpZEZhaWxUb0RldGVybWluZVBvc2l0aW9uKGVycm9yTWVzc2Fn
ZSk7Cit9CisKKy0gKHZvaWQpcmVzZXRHZW9sb2NhdGlvbgoreworICAgIF9nZW9sb2NhdGlvbk1h
bmFnZXItPnJlc2V0UGVybWlzc2lvbnMoKTsKK30KKworI3ByYWdtYSBtYXJrIC0gTWV0aG9kcyBm
b3IgdWRhdGluZyB0aGUgc3RhdGUgV0tXZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5lcgorLSAodm9p
ZClwZXJtaXNzaW9uRGVuaWVkOihHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkqKXBl
cm1pc3Npb25SZXF1ZXN0UHJveHkKK3sKKyAgICBfcmVxdWVzdHNJbldhcm1VcC5yZW1vdmUocGVy
bWlzc2lvblJlcXVlc3RQcm94eSk7CisgICAgW3NlbGYgX3N0b3BVcGRhdGluZ0lmUG9zc2libGVd
OworfQorCitAZW5kCisKKyMgcHJhZ21hIG1hcmsgLSBJbXBsZW1lbnRhdGlvbiBvZiBXS1dlYkFs
bG93RGVueVBvbGljeUxpc3RlbmVyCitAaW1wbGVtZW50YXRpb24gV0tXZWJBbGxvd0RlbnlQb2xp
Y3lMaXN0ZW5lciB7CisgICAgUmV0YWluUHRyPFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUz4gX3By
b3ZpZGVyOworICAgIFJlZlB0cjxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHk+IF9w
ZXJtaXNzaW9uUmVxdWVzdFByb3h5OworfQorCistIChpZClpbml0V2l0aFByb3ZpZGVyOihXS0dl
b2xvY2F0aW9uUHJvdmlkZXJJT1MqKXByb3ZpZGVyIHBlcm1pc3Npb25SZXF1ZXN0UHJveHk6KFBh
c3NSZWZQdHI8R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5PilwZXJtaXNzaW9uUmVx
dWVzdFByb3h5Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcHJvdmlkZXIgPSBwcm92aWRlcjsKKyAgICBfcGVy
bWlzc2lvblJlcXVlc3RQcm94eSA9IHBlcm1pc3Npb25SZXF1ZXN0UHJveHk7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpYWxsb3cKK3sKKyAgICBfcGVybWlzc2lvblJlcXVlc3RQcm94
eS0+YWxsb3coKTsKK30KKworLSAodm9pZClkZW55Cit7CisgICAgW19wcm92aWRlciBwZXJtaXNz
aW9uRGVuaWVkOl9wZXJtaXNzaW9uUmVxdWVzdFByb3h5LmdldCgpXTsKKyAgICBfcGVybWlzc2lv
blJlcXVlc3RQcm94eS0+ZGVueSgpOworfQorCistICh2b2lkKWRlbnlPbmx5VGhpc1JlcXVlc3QK
K3sKKyAgICAvLyBUaGUgbWV0aG9kIGRlbnlPbmx5VGhpc1JlcXVlc3QgaXMgaUFkIHNwZWNpZmlj
IGZvciBXZWJLaXQxLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCistIChCT09MKXNo
b3VsZENsZWFyQ2FjaGUKK3sKKyAgICByZXR1cm4gTk87Cit9CitAZW5kCisKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJp
dHlPcmlnaW4ubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWY0ZDI1NTg5Y2NjMGE5NDVkZjE2ZGJkMmZlZWI1NjNh
NDk4MzlkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLR2VvbG9j
YXRpb25Qcm92aWRlcklPUy5oIgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMLmg+CisjaW1w
b3J0IDxVSUtpdC9VSVdlYkdlb2xvY2F0aW9uUG9saWN5RGVjaWRlci5oPgorI2ltcG9ydCA8VUlL
aXQvVUlXaW5kb3cuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisv
LyBGSVhNRTogUmVtb3ZlIHVzZSBvZiBXZWJLaXQxIGZyb20gV2ViS2l0MgorI2ltcG9ydCA8V2Vi
S2l0L1dlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViU2Vj
dXJpdHlPcmlnaW5Qcml2YXRlLmg+CisKK0BpbnRlcmZhY2UgV2ViU2VjdXJpdHlPcmlnaW4gKFdl
YkludGVybmFsKQorLSAoaWQpX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5T3JpZ2luOihXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbiAqKW9yaWdpbjsKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3ZvaWQgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbihXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBpZDxXZWJBbGxvd0Rl
bnlQb2xpY3lMaXN0ZW5lcj4sIFVJV2luZG93KiB3aW5kb3cpOworCit2b2lkIGRlY2lkZVBvbGlj
eUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGlkPFdlYkFsbG93RGVueVBvbGljeUxp
c3RlbmVyPiBsaXN0ZW5lciwgVUlXaW5kb3cqIHdpbmRvdykKK3sKKyAgICBSZXRhaW5QdHI8V2Vi
U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0gYWRvcHROUyhbW1dlYlNlY3VyaXR5T3Jp
Z2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46b3JpZ2luXSk7CisgICAg
UmV0YWluUHRyPE5TVVJMPiByZXF1ZXN0VXJsID0gYWRvcHROUyhbW05TVVJMIGFsbG9jXSBpbml0
V2l0aFN0cmluZzp1cmxTdHJpbmddKTsKKyAgICBbW1VJV2ViR2VvbG9jYXRpb25Qb2xpY3lEZWNp
ZGVyIHNoYXJlZFBvbGljeURlY2lkZXJdIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVz
dEZyb21PcmlnaW46c2VjdXJpdHlPcmlnaW4uZ2V0KCkgcmVxdWVzdGluZ1VSTDpyZXF1ZXN0VXJs
LmdldCgpIHdpbmRvdzp3aW5kb3cgbGlzdGVuZXI6bGlzdGVuZXJdOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tJ
bnRlcmFjdGlvblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tJbnRlcmFj
dGlvblZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NmY3YWVhM2Q5NWRiNTQ1NTI5OWJkZjNlYmM1ZmY5OGFh
YTI1NzhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
S0ludGVyYWN0aW9uVmlldy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgIldLR2VzdHVyZVR5cGVzLmgiCisjaW1wb3J0IDxVSUtpdC9VSVdlYkZvcm1BY2Nlc3Nv
cnkuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJ
S2l0L1VJVmlldy5oPgorI2ltcG9ydCA8VUlLaXQvVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNv
Z25pemVyLmg+CisjaW1wb3J0IDxVSUtpdC9VSVdLU2VsZWN0aW9uQXNzaXN0YW50Lmg+CisjaW1w
b3J0IDxVSUtpdC9VSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50Lmg+CisjaW1wb3J0IDx3dGYv
Rm9yd2FyZC5oPgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorCitAY2xhc3MgVUlXZWJTY3JvbGxW
aWV3OworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UXVh
ZDsKK2NsYXNzIEludFNpemU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgTmF0aXZl
V2ViVG91Y2hFdmVudDsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK3N0cnVjdCBJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbjsKK30KKworQGNsYXNzIFdlYklPU0V2ZW50OworCitAaW50ZXJm
YWNlIFdLSW50ZXJhY3Rpb25WaWV3IDogVUlWaWV3PFVJR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0
ZSwgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJVGV4dElucHV0
UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5RGVsZWdhdGUsIFVJV0tJbnRlcmFjdGlvblZpZXdQ
cm90b2NvbD4KKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGlzRWRpdGFi
bGU7CisKKy0gKHZvaWQpc2V0U2Nyb2xsVmlldzooVUlXZWJTY3JvbGxWaWV3ICopc2Nyb2xsVmll
dzsKKy0gKHZvaWQpc2V0UGFnZTooUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4pcGFn
ZTsKKworLSAodm9pZClfd2ViVG91Y2hFdmVudDooY29uc3QgV2ViS2l0OjpOYXRpdmVXZWJUb3Vj
aEV2ZW50Jil0b3VjaEV2ZW50IHByZXZlbnRzTmF0aXZlR2VzdHVyZXM6KEJPT0wpcHJldmVudHNE
ZWZhdWx0OworLSAodm9pZClfZGlkR2V0VGFwSGlnaGxpZ2h0Rm9yUmVxdWVzdDoodWludDY0X3Qp
cmVxdWVzdElEIGNvbG9yOihjb25zdCBXZWJDb3JlOjpDb2xvciYpY29sb3IgcXVhZHM6KGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+JiloaWdobGlnaHRlZFF1YWRzIHRvcExlZnRSYWRp
dXM6KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKXRvcExlZnRSYWRpdXMgdG9wUmlnaHRSYWRpdXM6
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKXRvcFJpZ2h0UmFkaXVzIGJvdHRvbUxlZnRSYWRpdXM6
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKWJvdHRvbUxlZnRSYWRpdXMgYm90dG9tUmlnaHRSYWRp
dXM6KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKWJvdHRvbVJpZ2h0UmFkaXVzOworCistICh2b2lk
KV9zdGFydEFzc2lzdGluZ05vZGU7CistICh2b2lkKV9zdG9wQXNzaXN0aW5nTm9kZTsKKy0gKHZv
aWQpX3NlbGVjdGlvbkNoYW5nZWQ7CistIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooV2ViSU9T
RXZlbnQgKil0aGVFdmVudCBpc0NoYXJFdmVudDooQk9PTClpc0NoYXJFdmVudDsKKy0gKHZvaWQp
X3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6KGNvbnN0IFdlYktpdDo6SW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24mKWluZm87CistICh2b2lkKV9hdHRlbXB0Q2xpY2tBdExvY2F0
aW9uOihDR1BvaW50KWxvY2F0aW9uOworLSAodm9pZClfdXBkYXRlUG9zaXRpb25JbmZvcm1hdGlv
bjsKKy0gKHZvaWQpX3BlcmZvcm1BY3Rpb246KFdlYktpdDo6V0tTaGVldEFjdGlvbnMpYWN0aW9u
OworLSAodm9pZClfd2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nOworLSAodm9pZClfd2lsbFN0
YXJ0VXNlclRyaWdnZXJlZFNjcm9sbGluZ09yWm9vbWluZzsKKy0gKHZvaWQpX2RpZEVuZFNjcm9s
bGluZ09yWm9vbWluZzsKKy0gKHZvaWQpX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNo
OihXZWJLaXQ6OldLU2VsZWN0aW9uVG91Y2gpdG91Y2ggd2l0aEZsYWdzOihXZWJLaXQ6OldLU2Vs
ZWN0aW9uRmxhZ3MpZmxhZ3MgZ3Jvd1RocmVzaG9sZDooQ0dGbG9hdClncm93VGhyZXNob2xkIHNo
cmlua1RocmVzaG9sZDooQ0dGbG9hdClzaHJpbmtUaHJlc2hvbGQ7CitAcHJvcGVydHkgKHJlYWRv
bmx5LCBub25hdG9taWMpIFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24g
cG9zaXRpb25JbmZvcm1hdGlvbjsKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3ZTZmZmUwMmYwNzllMmM1
OGVhMDBjMjMwMzI2M2IzMzE0MmYxMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCkBAIC0wLDAgKzEsMjAyMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tJbnRlcmFj
dGlvblZpZXcuaCIKKworI2ltcG9ydCAiSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24u
aCIKKyNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbXBvcnQgIk5hdGl2ZVdl
YlRvdWNoRXZlbnQuaCIKKyNpbXBvcnQgIldLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCIKKyNpbXBv
cnQgIldLQmFzZS5oIgorI2ltcG9ydCAiV0tHZXN0dXJlVHlwZXMuaCIKKyNpbXBvcnQgIldlYkV2
ZW50LmgiCisjaW1wb3J0ICJXZWJJT1NFdmVudEZhY3RvcnkuaCIKKyNpbXBvcnQgIldlYlBhZ2VN
ZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxEYXRhRGV0
ZWN0b3JzVUkvREREZXRlY3Rpb25Db250cm9sbGVyLmg+CisjaW1wb3J0IDxVSUtpdC9VSUZvbnRf
UHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlHZXN0dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+
CisjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkSW1wbC5oPgorI2ltcG9ydCA8VUlLaXQvVUlMb25n
UHJlc3NHZXN0dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVRhcEdl
c3R1cmVSZWNvZ25pemVyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVGV4dEludGVyYWN0
aW9uQXNzaXN0YW50X1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJV2ViRG9jdW1lbnRWaWV3
Lmg+CisjaW1wb3J0IDxVSUtpdC9VSVdlYlNjcm9sbFZpZXcuaD4KKyNpbXBvcnQgPFVJS2l0L19V
SUhpZ2hsaWdodFZpZXcuaD4KKyNpbXBvcnQgPFVJS2l0L19VSVdlYkhpZ2hsaWdodExvbmdQcmVz
c0dlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJF
dmVudC5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYlNlbGVjdGlvblJlY3QuaD4KKyNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitTT0ZUX0xJ
TktfUFJJVkFURV9GUkFNRVdPUksoRGF0YURldGVjdG9yc1VJKQorU09GVF9MSU5LX0NMQVNTKERh
dGFEZXRlY3RvcnNVSSwgREREZXRlY3Rpb25Db250cm9sbGVyKQorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBo
aWdobGlnaHREZWxheSA9IDAuMTI7CitzdGF0aWMgY29uc3QgZmxvYXQgdGFwQW5kSG9sZERlbGF5
ICA9IDAuNzU7CisKK0BpbnRlcmZhY2UgV0tUZXh0UmFuZ2UgOiBVSVRleHRSYW5nZSB7CisgICAg
Q0dSZWN0IF9zdGFydFJlY3Q7CisgICAgQ0dSZWN0IF9lbmRSZWN0OworICAgIEJPT0wgX2lzTm9u
ZTsKKyAgICBCT09MIF9pc1JhbmdlOworICAgIEJPT0wgX2lzRWRpdGFibGU7CisgICAgTlNBcnJh
eSAqX3NlbGVjdGlvblJlY3RzOworICAgIE5TVUludGVnZXIgX3NlbGVjdGVkVGV4dExlbmd0aDsK
K30KK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3Qgc3RhcnRSZWN0OworQHByb3BlcnR5IChu
b25hdG9taWMpIENHUmVjdCBlbmRSZWN0OworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgaXNO
b25lOworQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgaXNSYW5nZTsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljKSBCT09MIGlzRWRpdGFibGU7CitAcHJvcGVydHkgKG5vbmF0b21pYykgTlNVSW50ZWdl
ciBzZWxlY3RlZFRleHRMZW5ndGg7CitAcHJvcGVydHkgKGNvcHksIG5vbmF0b21pYykgTlNBcnJh
eSAqc2VsZWN0aW9uUmVjdHM7CisKKysgKFdLVGV4dFJhbmdlICopdGV4dFJhbmdlV2l0aFN0YXRl
OihCT09MKWlzTm9uZSBpc1JhbmdlOihCT09MKWlzUmFuZ2UgaXNFZGl0YWJsZTooQk9PTClpc0Vk
aXRhYmxlIHN0YXJ0UmVjdDooQ0dSZWN0KXN0YXJ0UmVjdCBlbmRSZWN0OihDR1JlY3QpZW5kUmVj
dCBzZWxlY3Rpb25SZWN0czooTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzIHNlbGVjdGVkVGV4dExl
bmd0aDooTlNVSW50ZWdlcilzZWxlY3RlZFRleHRMZW5ndGg7CisKK0BlbmQKKworQGludGVyZmFj
ZSBXS1RleHRQb3NpdGlvbiA6IFVJVGV4dFBvc2l0aW9uIHsKKyAgICBDR1JlY3QgX3Bvc2l0aW9u
UmVjdDsKK30KKworQHByb3BlcnR5IChub25hdG9taWMpIENHUmVjdCBwb3NpdGlvblJlY3Q7CisK
KysgKFdLVGV4dFBvc2l0aW9uICopdGV4dFBvc2l0aW9uV2l0aFJlY3Q6KENHUmVjdClwb3NpdGlv
blJlY3Q7CisKK0BlbmQKKworQGludGVyZmFjZSBXS1RleHRTZWxlY3Rpb25SZWN0IDogVUlUZXh0
U2VsZWN0aW9uUmVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBXZWJTZWxlY3Rp
b25SZWN0ICp3ZWJSZWN0OworCisrIChOU0FycmF5ICopdGV4dFNlbGVjdGlvblJlY3RzV2l0aFdl
YlJlY3RzOihOU0FycmF5ICopd2ViUmVjdHM7CisKK0BlbmQKKworQGludGVyZmFjZSBXS0F1dG9j
b3JyZWN0aW9uUmVjdHMgOiBVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyB7CisgICAgQ0dSZWN0IF9m
aXJzdFJlY3Q7CisgICAgQ0dSZWN0IF9sYXN0UmVjdDsKK30KKysgKFdLQXV0b2NvcnJlY3Rpb25S
ZWN0cyAqKWF1dG9jb3JyZWN0aW9uUmVjdHNXaXRoUmVjdHM6KENHUmVjdClmaXJzdFJlY3QgbGFz
dFJlY3Q6KENHUmVjdClsYXN0UmVjdDsKKworQGVuZAorCitAaW50ZXJmYWNlIFdLQXV0b2NvcnJl
Y3Rpb25Db250ZXh0IDogVUlXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCB7CisgICAgTlNTdHJpbmcg
Kl9jb250ZXh0QmVmb3JlU2VsZWN0aW9uOworICAgIE5TU3RyaW5nICpfc2VsZWN0ZWRUZXh0Owor
ICAgIE5TU3RyaW5nICpfbWFya2VkVGV4dDsKKyAgICBOU1N0cmluZyAqX2NvbnRleHRBZnRlclNl
bGVjdGlvbjsKKyAgICBOU1JhbmdlIF9yYW5nZUluTWFya2VkVGV4dDsKK30KKworKyAoV0tBdXRv
Y29ycmVjdGlvbkNvbnRleHQgKilhdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoRGF0YTooTlNTdHJp
bmcgKiliZWZvcmVUZXh0IG1hcmtlZFRleHQ6KE5TU3RyaW5nICopbWFya2VkVGV4dCBzZWxlY3Rl
ZFRleHQ6KE5TU3RyaW5nICopc2VsZWN0ZWRUZXh0IGFmdGVyVGV4dDooTlNTdHJpbmcgKilhZnRl
clRleHQgc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dDooTlNSYW5nZSlyYW5nZTsKK0BlbmQKKwor
QGludGVyZmFjZSBVSVRleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAoVUlUZXh0SW50ZXJhY3Rpb25B
c3Npc3RhbnRfSW50ZXJuYWwpCisvLyBGSVhNRTogdGhpcyBuZWVkcyB0byBiZSBtb3ZlZCBmcm9t
IHRoZSBpbnRlcm5hbCBoZWFkZXIgdG8gdGhlIHByaXZhdGUuCistIChpZClpbml0V2l0aFZpZXc6
KFVJUmVzcG9uZGVyIDxVSVRleHRJbnB1dD4gKil2aWV3OworLSAodm9pZClzZWxlY3RXb3JkOwor
QGVuZAorCit0eXBlZGVmIHZvaWQgKF5VSVdLQXV0b2NvcnJlY3Rpb25Db21wbGV0aW9uSGFuZGxl
cikoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzRm9ySW5wdXQpOwordHlwZWRlZiB2b2lk
ICheVUlXS0F1dG9jb3JyZWN0aW9uQ29udGV4dEhhbmRsZXIpKFVJV0tBdXRvY29ycmVjdGlvbkNv
bnRleHQgKmF1dG9jb3JyZWN0aW9uQ29udGV4dCk7CisKK3N0cnVjdCBXS0F1dG9Db3JyZWN0aW9u
RGF0YXsKKyAgICBTdHJpbmcgZm9udE5hbWU7CisgICAgQ0dGbG9hdCBmb250U2l6ZTsKKyAgICB1
aW50NjRfdCBmb250VHJhaXRzOworICAgIENHUmVjdCB0ZXh0Rmlyc3RSZWN0OworICAgIENHUmVj
dCB0ZXh0TGFzdFJlY3Q7CisgICAgVUlXS0F1dG9jb3JyZWN0aW9uQ29tcGxldGlvbkhhbmRsZXIg
YXV0b2NvcnJlY3Rpb25IYW5kbGVyOworICAgIFVJV0tBdXRvY29ycmVjdGlvbkNvbnRleHRIYW5k
bGVyIGF1dG9jb3JyZWN0aW9uQ29udGV4dEhhbmRsZXI7Cit9OworCitAaW50ZXJmYWNlIFdLSW50
ZXJhY3Rpb25WaWV3IChQcml2YXRlKQorQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBX
S0F1dG9Db3JyZWN0aW9uRGF0YSAqYXV0b2NvcnJlY3Rpb25EYXRhOworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gV0tJbnRlcmFjdGlvblZpZXcgeworICAgIFJldGFpblB0cjxVSVdlYlRvdWNoRXZl
bnRzR2VzdHVyZVJlY29nbml6ZXI+IF90b3VjaEV2ZW50R2VzdHVyZVJlY29nbml6ZXI7CisgICAg
Qk9PTCBfY2FuU2VuZFRvdWNoRXZlbnRzQXN5bmNocm9ub3VzbHk7CisgICAgdW5zaWduZWQgX25h
dGl2ZVdlYlRvdWNoRXZlbnRVbmlxdWVJZEJlaW5nU2VudFN5bmNocm9ub3VzbHk7CisKKyAgICBS
ZXRhaW5QdHI8VUlUYXBHZXN0dXJlUmVjb2duaXplcj4gX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25p
emVyOworICAgIFJldGFpblB0cjxfVUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2du
aXplcj4gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0
cjxVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyPiBfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6
ZXI7CisgICAgUmV0YWluUHRyPFVJVGFwR2VzdHVyZVJlY29nbml6ZXI+IF9kb3VibGVUYXBHZXN0
dXJlUmVjb2duaXplcjsKKyAgICBSZXRhaW5QdHI8VUlUYXBHZXN0dXJlUmVjb2duaXplcj4gX3R3
b0ZpbmdlckRvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0cjxVSVBhbkdl
c3R1cmVSZWNvZ25pemVyPiBfdHdvRmluZ2VyUGFuR2VzdHVyZVJlY29nbml6ZXI7CisKKyAgICBS
ZXRhaW5QdHI8VUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudD4gX3RleHRTZWxlY3Rpb25Bc3Np
c3RhbnQ7CisgICAgUmV0YWluUHRyPFVJV0tTZWxlY3Rpb25Bc3Npc3RhbnQ+IF93ZWJTZWxlY3Rp
b25Bc3Npc3RhbnQ7CisKKyAgICBVSVRleHRJbnB1dFRyYWl0cyAqX3RyYWl0czsKKyAgICBCT09M
IF9pc0VkaXRhYmxlOworICAgIFVJV2ViRm9ybUFjY2Vzc29yeSAqX2FjY2Vzc29yeTsKKyAgICBp
ZCA8VUlUZXh0SW5wdXREZWxlZ2F0ZT4gX2lucHV0RGVsZWdhdGU7CisgICAgQk9PTCBfc2hvd2lu
Z1RleHRTdHlsZU9wdGlvbnM7CisKKyAgICBfX3dlYWsgVUlXZWJTY3JvbGxWaWV3ICpfc2Nyb2xs
VmlldzsKKyAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBfcGFnZTsKKworICAgIFJldGFpblB0cjxf
VUlIaWdobGlnaHRWaWV3PiBfaGlnaGxpZ2h0VmlldzsKKyAgICB1aW50NjRfdCBfbGF0ZXN0VGFw
SGlnaGxpZ2h0SUQ7CisgICAgQk9PTCBfaXNUYXBIaWdobGlnaHRJRFZhbGlkOworICAgIFdLQXV0
b0NvcnJlY3Rpb25EYXRhIF9hdXRvY29ycmVjdGlvbkRhdGE7CisgICAgUmV0YWluUHRyPE5TU3Ry
aW5nPiBfbWFya2VkVGV4dDsKKyAgICBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBf
cG9zaXRpb25JbmZvcm1hdGlvbjsKKyAgICBCT09MIF9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRp
b247CisgICAgUmV0YWluUHRyPFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQ+IF9hY3Rpb25TaGVldEFz
c2lzdGFudDsKK30KKworQHN5bnRoZXNpemUgaW5wdXREZWxlZ2F0ZSA9IF9pbnB1dERlbGVnYXRl
OworCistIChpZClpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdOworICAgIGlmIChzZWxmKSB7CisgICAgICAgIF90b3Vj
aEV2ZW50R2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlXZWJUb3VjaEV2ZW50c0dlc3R1
cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3Io
X3dlYlRvdWNoRXZlbnRzUmVjb2duaXplZDopIHRvdWNoRGVsZWdhdGU6c2VsZl0pOworICAgICAg
ICBbX3RvdWNoRXZlbnRHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICAg
ICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X3RvdWNoRXZlbnRHZXN0dXJlUmVjb2duaXpl
ci5nZXQoKV07CisKKyAgICAgICAgX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHRO
UyhbW1VJVGFwR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0
aW9uOkBzZWxlY3Rvcihfc2luZ2xlVGFwUmVjb2duaXplZDopXSk7CisgICAgICAgIFtfc2luZ2xl
VGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtzZWxmIGFk
ZEdlc3R1cmVSZWNvZ25pemVyOl9zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisK
KyAgICAgICAgX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1VJVGFwR2Vz
dHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rv
cihfZG91YmxlVGFwUmVjb2duaXplZDopXSk7CisgICAgICAgIFtfZG91YmxlVGFwR2VzdHVyZVJl
Y29nbml6ZXIgc2V0TnVtYmVyT2ZUYXBzUmVxdWlyZWQ6Ml07CisgICAgICAgIFtfZG91YmxlVGFw
R2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtzZWxmIGFkZEdl
c3R1cmVSZWNvZ25pemVyOl9kb3VibGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisgICAg
ICAgIFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgcmVxdWlyZU90aGVyR2VzdHVyZVRvRmFp
bDpfZG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworCisgICAgICAgIF9oaWdobGln
aHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tfVUlXZWJIaWdobGlnaHRM
b25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rp
b246QHNlbGVjdG9yKF9oaWdobGlnaHRMb25nUHJlc3NSZWNvZ25pemVkOildKTsKKyAgICAgICAg
W19oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBzZXREZWxheTpoaWdobGlnaHRE
ZWxheV07CisgICAgICAgIFtfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0
RGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9oaWdo
bGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisKKyAgICAgICAgX2xvbmdQ
cmVzc0dlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29n
bml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfbG9uZ1By
ZXNzUmVjb2duaXplZDopXSk7CisgICAgICAgIFtfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIg
c2V0RGVsYXk6dGFwQW5kSG9sZERlbGF5XTsKKyAgICAgICAgW19sb25nUHJlc3NHZXN0dXJlUmVj
b2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgW3NlbGYgYWRkR2VzdHVyZVJlY29n
bml6ZXI6X2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKworICAgICAgICBfdHdv
RmluZ2VyUGFuR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlQYW5HZXN0dXJlUmVjb2du
aXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF90d29GaW5n
ZXJQYW5SZWNvZ25pemVkOildKTsKKyAgICAgICAgW190d29GaW5nZXJQYW5HZXN0dXJlUmVjb2du
aXplciBzZXRNaW5pbXVtTnVtYmVyT2ZUb3VjaGVzOjJdOworICAgICAgICBbX3R3b0ZpbmdlclBh
bkdlc3R1cmVSZWNvZ25pemVyIHNldE1heGltdW1OdW1iZXJPZlRvdWNoZXM6Ml07CisgICAgICAg
IFtfdHdvRmluZ2VyUGFuR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAg
ICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl90d29GaW5nZXJQYW5HZXN0dXJlUmVjb2du
aXplci5nZXQoKV07CisKKyAgICAgICAgW3NlbGYgc2V0VXNlckludGVyYWN0aW9uRW5hYmxlZDpZ
RVNdOworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9i
c2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9yZXNldFNob3dpbmdUZXh0U3R5bGU6KSBu
YW1lOlVJTWVudUNvbnRyb2xsZXJEaWRIaWRlTWVudU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsK
KyAgICAgICAgX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zID0gTk87CisgICAgfQorCisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHdlIGdldCBub3RpZmllZCB0aGF0IGxv
YWRpbmcgaGFzIGNvbXBsZXRlZC4KKyAgICBbc2VsZiB1c2VTZWxlY3Rpb25Bc3Npc3RhbnRXaXRo
TW9kZTpVSVdlYlNlbGVjdGlvbk1vZGVXZWJdOworCisgICAgX2FjdGlvblNoZWV0QXNzaXN0YW50
ID0gYWRvcHROUyhbW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgYWxsb2NdIGluaXRXaXRoVmlldzpz
ZWxmXSk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIF93
ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgPSBuaWw7CisgICAgX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQg
PSBuaWw7CisgICAgX2FjdGlvblNoZWV0QXNzaXN0YW50ID0gbmlsOworICAgIFtfdG91Y2hFdmVu
dEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW19zaW5nbGVUYXBHZXN0
dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfZG91YmxlVGFwR2VzdHVyZVJl
Y29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1
cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW19sb25nUHJlc3NHZXN0dXJlUmVj
b2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfdHdvRmluZ2VyUGFuR2VzdHVyZVJlY29n
bml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKworICAgIFtfYWNjZXNzb3J5IHJlbGVhc2VdOworICAg
IFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRTY3JvbGxWaWV3OihVSVdlYlNjcm9s
bFZpZXcgKilzY3JvbGxWaWV3Cit7CisgICAgX3Njcm9sbFZpZXcgPSBzY3JvbGxWaWV3OworfQor
CistICh2b2lkKXNldFBhZ2U6KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KXBhZ2UK
K3sKKyAgICBfcGFnZSA9IHBhZ2U7CisgICAgW19hY3Rpb25TaGVldEFzc2lzdGFudCBzZXRQYWdl
Ol9wYWdlXTsKK30KKworLSAoQk9PTClpc0VkaXRhYmxlCit7CisgICAgcmV0dXJuIF9pc0VkaXRh
YmxlOworfQorCistIChCT09MKWNhbkJlY29tZUZpcnN0UmVzcG9uZGVyCit7CisgICAgLy8gV2Ug
bWlnaHQgd2FudCB0byByZXR1cm4gc29tZXRoaW5nIGVsc2UKKyAgICAvLyBpZiB3ZSBkZWNpZGUg
dG8gZW5hYmxlL2Rpc2FibGUgaW50ZXJhY3Rpb24gcHJvZ3JhbW1hdGljYWxseS4KKyAgICByZXR1
cm4gWUVTOworfQorCistIChCT09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCit7CisgICAgLy8gRklY
TUU6IE1heWJlIHdlIHNob3VsZCBjYWxsIHJlc2lnbkZpcnN0UmVzcG9uZGVyIG9uIHRoZSBzdXBl
cmNsYXNzCisgICAgLy8gYW5kIGRvIG5vdGhpbmcgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBOTy4K
KyAgICBfcGFnZS0+Ymx1ckFzc2lzdGVkTm9kZSgpOworICAgIFtzZWxmIF9jYW5jZWxJbnRlcmFj
dGlvbl07CisgICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgcmVzaWduZWRGaXJzdFJlc3BvbmRl
cl07CisKKyAgICByZXR1cm4gW3N1cGVyIHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKK30KKworLSAo
dm9pZClfd2ViVG91Y2hFdmVudHNSZWNvZ25pemVkOihVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJl
Y29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgoreworICAgIE5hdGl2ZVdlYlRvdWNoRXZlbnQg
bmF0aXZlV2ViVG91Y2hFdmVudChnZXN0dXJlUmVjb2duaXplcik7CisKKyAgICBpZiAobmF0aXZl
V2ViVG91Y2hFdmVudC50eXBlKCkgPT0gV2ViS2l0OjpXZWJFdmVudDo6VG91Y2hTdGFydCkKKyAg
ICAgICAgX2NhblNlbmRUb3VjaEV2ZW50c0FzeW5jaHJvbm91c2x5ID0gTk87CisKKyAgICBpZiAo
IV9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25vdXNseSkKKyAgICAgICAgX25hdGl2ZVdlYlRv
dWNoRXZlbnRVbmlxdWVJZEJlaW5nU2VudFN5bmNocm9ub3VzbHkgPSBuYXRpdmVXZWJUb3VjaEV2
ZW50LnVuaXF1ZUlkKCk7CisKKyAgICBfcGFnZS0+c2V0U2hvdWxkU2VuZEV2ZW50c1N5bmNocm9u
b3VzbHkoIV9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25vdXNseSk7CisgICAgX3BhZ2UtPmhh
bmRsZVRvdWNoRXZlbnQobmF0aXZlV2ViVG91Y2hFdmVudCk7CisgICAgX3BhZ2UtPnNldFNob3Vs
ZFNlbmRFdmVudHNTeW5jaHJvbm91c2x5KGZhbHNlKTsKK30KKworc3RhdGljIEZsb2F0UXVhZCBp
bmZsYXRlUXVhZChjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGZsb2F0IGluZmxhdGVTaXplKQorewor
ICAgIC8vIFdlIHNvcnQgdGhlIG91dHB1dCBwb2ludHMgbGlrZSB0aGlzIChhcyBleHBlY3RlZCBi
eSB0aGUgaGlnaGxpZ2h0IHZpZXcpOgorICAgIC8vICBwMi0tLS0tLXAzCisgICAgLy8gIHwgICAg
ICAgfAorICAgIC8vICBwMS0tLS0tLXA0CisKKyAgICAvLyAxKSBTb3J0IHRoZSBwb2ludHMgaG9y
aXpvbnRhbGx5LgorICAgIEZsb2F0UG9pbnQgcG9pbnRzWzRdID0geyBxdWFkLnAxKCksIHF1YWQu
cDQoKSwgcXVhZC5wMigpLCBxdWFkLnAzKCkgfTsKKyAgICBpZiAocG9pbnRzWzBdLngoKSA+IHBv
aW50c1sxXS54KCkpCisgICAgICAgIHN0ZDo6c3dhcChwb2ludHNbMF0sIHBvaW50c1sxXSk7Cisg
ICAgaWYgKHBvaW50c1syXS54KCkgPiBwb2ludHNbM10ueCgpKQorICAgICAgICBzdGQ6OnN3YXAo
cG9pbnRzWzJdLCBwb2ludHNbM10pOworCisgICAgaWYgKHBvaW50c1swXS54KCkgPiBwb2ludHNb
Ml0ueCgpKQorICAgICAgICBzdGQ6OnN3YXAocG9pbnRzWzBdLCBwb2ludHNbMl0pOworICAgIGlm
IChwb2ludHNbMV0ueCgpID4gcG9pbnRzWzNdLngoKSkKKyAgICAgICAgc3RkOjpzd2FwKHBvaW50
c1sxXSwgcG9pbnRzWzNdKTsKKworICAgIGlmIChwb2ludHNbMV0ueCgpID4gcG9pbnRzWzJdLngo
KSkKKyAgICAgICAgc3RkOjpzd2FwKHBvaW50c1sxXSwgcG9pbnRzWzJdKTsKKworICAgIC8vIDIp
IFN3YXAgdGhlbSB2ZXJ0aWNhbGx5IHRvIGhhdmUgdGhlIG91dHB1dCBwb2ludHMgW3AyLCBwMSwg
cDMsIHA0XS4KKyAgICBpZiAocG9pbnRzWzFdLnkoKSA8IHBvaW50c1swXS55KCkpCisgICAgICAg
IHN0ZDo6c3dhcChwb2ludHNbMF0sIHBvaW50c1sxXSk7CisgICAgaWYgKHBvaW50c1szXS55KCkg
PCBwb2ludHNbMl0ueSgpKQorICAgICAgICBzdGQ6OnN3YXAocG9pbnRzWzJdLCBwb2ludHNbM10p
OworCisgICAgLy8gMykgQWRqdXN0IHRoZSBwb3NpdGlvbnMuCisgICAgcG9pbnRzWzBdLm1vdmUo
LWluZmxhdGVTaXplLCAtaW5mbGF0ZVNpemUpOworICAgIHBvaW50c1sxXS5tb3ZlKC1pbmZsYXRl
U2l6ZSwgaW5mbGF0ZVNpemUpOworICAgIHBvaW50c1syXS5tb3ZlKGluZmxhdGVTaXplLCAtaW5m
bGF0ZVNpemUpOworICAgIHBvaW50c1szXS5tb3ZlKGluZmxhdGVTaXplLCBpbmZsYXRlU2l6ZSk7
CisKKyAgICByZXR1cm4gRmxvYXRRdWFkKHBvaW50c1sxXSwgcG9pbnRzWzBdLCBwb2ludHNbMl0s
IHBvaW50c1szXSk7Cit9CisKKy0gKHZvaWQpX3dlYlRvdWNoRXZlbnQ6KGNvbnN0IFdlYktpdDo6
TmF0aXZlV2ViVG91Y2hFdmVudCYpdG91Y2hFdmVudCBwcmV2ZW50c05hdGl2ZUdlc3R1cmVzOihC
T09MKXByZXZlbnRzTmF0aXZlR2VzdHVyZQoreworICAgIGlmIChwcmV2ZW50c05hdGl2ZUdlc3R1
cmUpIHsKKyAgICAgICAgLy8gSWYgd2UgYXJlIGRpc3BhdGNoaW5nIGV2ZW50cyBzeW5jaHJvbm91
c2x5IGFuZCB0aGUgZXZlbnQgY29taW5nIGJhY2sgaXMgbm90IHRoZSBvbmUgd2UgYXJlIHNlbmRp
bmcsIGl0IGlzIGEgY2FsbGJhY2sKKyAgICAgICAgLy8gZnJvbSBhbiBldmVudCBzZW50IGFzeW5j
aHJvbm91c2x5IHByaW9yIHRvIHRoZSBzeW5jaHJvbm91cyBldmVudC4gSW4gdGhhdCBjYXNlLCBp
dCBzaG91bGQgbm90IHVzZSB0aGF0IGluZm9ybWF0aW9uCisgICAgICAgIC8vIHRvIHVwZGF0ZSBV
SVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXIuCisgICAgICAgIGlmICghX2NhblNlbmRU
b3VjaEV2ZW50c0FzeW5jaHJvbm91c2x5ICYmIF9uYXRpdmVXZWJUb3VjaEV2ZW50VW5pcXVlSWRC
ZWluZ1NlbnRTeW5jaHJvbm91c2x5ICE9IHRvdWNoRXZlbnQudW5pcXVlSWQoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBfY2FuU2VuZFRvdWNoRXZlbnRzQXN5bmNocm9ub3VzbHkg
PSBZRVM7CisgICAgICAgIFtfdG91Y2hFdmVudEdlc3R1cmVSZWNvZ25pemVyIHNldERlZmF1bHRQ
cmV2ZW50ZWQ6WUVTXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpX2RpZEdldFRhcEhpZ2hsaWdodEZv
clJlcXVlc3Q6KHVpbnQ2NF90KXJlcXVlc3RJRCBjb2xvcjooY29uc3QgV2ViQ29yZTo6Q29sb3Im
KWNvbG9yIHF1YWRzOihjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRRdWFkPiYpaGlnaGxpZ2h0
ZWRRdWFkcyB0b3BMZWZ0UmFkaXVzOihjb25zdCBXZWJDb3JlOjpJbnRTaXplJil0b3BMZWZ0UmFk
aXVzIHRvcFJpZ2h0UmFkaXVzOihjb25zdCBXZWJDb3JlOjpJbnRTaXplJil0b3BSaWdodFJhZGl1
cyBib3R0b21MZWZ0UmFkaXVzOihjb25zdCBXZWJDb3JlOjpJbnRTaXplJilib3R0b21MZWZ0UmFk
aXVzIGJvdHRvbVJpZ2h0UmFkaXVzOihjb25zdCBXZWJDb3JlOjpJbnRTaXplJilib3R0b21SaWdo
dFJhZGl1cworeworICAgIGlmICghX2lzVGFwSGlnaGxpZ2h0SURWYWxpZCB8fCBfbGF0ZXN0VGFw
SGlnaGxpZ2h0SUQgIT0gcmVxdWVzdElEKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBD
R0Zsb2F0IFVJV2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRpdXMgPSAyLjA7CisgICAgaWYgKCFf
aGlnaGxpZ2h0VmlldykgeworICAgICAgICBfaGlnaGxpZ2h0VmlldyA9IGFkb3B0TlMoW1tfVUlI
aWdobGlnaHRWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm9dKTsKKyAgICAgICAg
W19oaWdobGlnaHRWaWV3IHNldE9wYXF1ZTpOT107CisgICAgICAgIFtfaGlnaGxpZ2h0VmlldyBz
ZXRDb3JuZXJSYWRpdXM6VUlXZWJWaWV3TWluaW11bUhpZ2hsaWdodFJhZGl1c107CisgICAgfQor
ICAgIFtzZWxmIGFkZFN1YnZpZXc6X2hpZ2hsaWdodFZpZXcuZ2V0KCldOworCisgICAgUmV0YWlu
UHRyPFVJQ29sb3I+IGhpZ2hsaWdodFVJS2l0Q29sb3IgPSBhZG9wdE5TKFtbVUlDb2xvciBhbGxv
Y10gaW5pdFdpdGhSZWQ6KGNvbG9yLnJlZCgpIC8gMjU1LjApIGdyZWVuOihjb2xvci5ncmVlbigp
IC8gMjU1LjApIGJsdWU6KGNvbG9yLmJsdWUoKSAvIDI1NS4wKSBhbHBoYTooY29sb3IuYWxwaGEo
KSAvIDI1NS4wKV0pOworICAgIFtfaGlnaGxpZ2h0VmlldyBzZXRDb2xvcjpoaWdobGlnaHRVSUtp
dENvbG9yLmdldCgpXTsKKworICAgIGJvb2wgYWxsSGlnaGxpZ2h0UmVjdHNBcmVSZWN0aWxpbmVh
ciA9IHRydWU7CisgICAgY29uc3Qgc2l6ZV90IHF1YWRDb3VudCA9IGhpZ2hsaWdodGVkUXVhZHMu
c2l6ZSgpOworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmVjdHMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3RhdGljX2Nhc3Q8Y29uc3Qg
TlNVSW50ZWdlcj4ocXVhZENvdW50KV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVh
ZENvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRRdWFkJiBxdWFkID0gaGlnaGxpZ2h0
ZWRRdWFkc1tpXTsKKyAgICAgICAgaWYgKHF1YWQuaXNSZWN0aWxpbmVhcigpKSB7CisgICAgICAg
ICAgICBDR1JlY3QgcmVjdCA9IENHUmVjdEluc2V0KHF1YWQuYm91bmRpbmdCb3goKSwgLVVJV2Vi
Vmlld01pbmltdW1IaWdobGlnaHRSYWRpdXMsIC1VSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFk
aXVzKTsKKyAgICAgICAgICAgIFtyZWN0cyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dS
ZWN0OnJlY3RdXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsbEhpZ2hsaWdodFJl
Y3RzQXJlUmVjdGlsaW5lYXIgPSBmYWxzZTsKKyAgICAgICAgICAgIHJlY3RzLmNsZWFyKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBXZWJL
aXQxIHVzZXMgdGhlIHZpc2libGVSZWN0LiBVc2luZyB0aGUgd2hvbGUgZnJhbWUgZnJvbSB0aGUg
cGFnZSBzZWVtcyBvdmVya2lsbC4KKyAgICBDR1JlY3QgYm91bmRhcnlSZWN0ID0gW3NlbGYgZnJh
bWVdOworICAgIGlmIChhbGxIaWdobGlnaHRSZWN0c0FyZVJlY3RpbGluZWFyKQorICAgICAgICBb
X2hpZ2hsaWdodFZpZXcgc2V0RnJhbWVzOnJlY3RzLmdldCgpIGJvdW5kYXJ5UmVjdDpib3VuZGFy
eVJlY3RdOworICAgIGVsc2UgeworICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHF1
YWRzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0
YXRpY19jYXN0PGNvbnN0IE5TVUludGVnZXI+KHF1YWRDb3VudCldKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBxdWFkQ291bnQ7ICsraSkgeworICAgICAgICAgICAgY29uc3QgRmxv
YXRRdWFkJiBxdWFkID0gaGlnaGxpZ2h0ZWRRdWFkc1tpXTsKKyAgICAgICAgICAgIEZsb2F0UXVh
ZCBleHRlbmRlZFF1YWQgPSBpbmZsYXRlUXVhZChxdWFkLCBVSVdlYlZpZXdNaW5pbXVtSGlnaGxp
Z2h0UmFkaXVzKTsKKyAgICAgICAgICAgIFtxdWFkcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVX
aXRoQ0dQb2ludDpleHRlbmRlZFF1YWQucDEoKV1dOworICAgICAgICAgICAgW3F1YWRzIGFkZE9i
amVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1BvaW50OmV4dGVuZGVkUXVhZC5wMigpXV07CisgICAg
ICAgICAgICBbcXVhZHMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUG9pbnQ6ZXh0ZW5k
ZWRRdWFkLnAzKCldXTsKKyAgICAgICAgICAgIFtxdWFkcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFs
dWVXaXRoQ0dQb2ludDpleHRlbmRlZFF1YWQucDQoKV1dOworICAgICAgICB9CisgICAgICAgIFtf
aGlnaGxpZ2h0VmlldyBzZXRRdWFkczpxdWFkcy5nZXQoKSBib3VuZGFyeVJlY3Q6Ym91bmRhcnlS
ZWN0XTsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvcmRlclJhZGlp
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OjRdKTsK
KyAgICBbYm9yZGVyUmFkaWkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHU2l6ZTpDR1Np
emVNYWtlKHRvcExlZnRSYWRpdXMud2lkdGgoKSArIFVJV2ViVmlld01pbmltdW1IaWdobGlnaHRS
YWRpdXMsIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKyBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0
UmFkaXVzKV1dOworICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRo
Q0dTaXplOkNHU2l6ZU1ha2UodG9wUmlnaHRSYWRpdXMud2lkdGgoKSArIFVJV2ViVmlld01pbmlt
dW1IaWdobGlnaHRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpICsgVUlXZWJWaWV3TWlu
aW11bUhpZ2hsaWdodFJhZGl1cyldXTsKKyAgICBbYm9yZGVyUmFkaWkgYWRkT2JqZWN0OltOU1Zh
bHVlIHZhbHVlV2l0aENHU2l6ZTpDR1NpemVNYWtlKGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSAr
IFVJV2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0
KCkgKyBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzKV1dOworICAgIFtib3JkZXJSYWRp
aSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dTaXplOkNHU2l6ZU1ha2UoYm90dG9tUmln
aHRSYWRpdXMud2lkdGgoKSArIFVJV2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRpdXMsIGJvdHRv
bVJpZ2h0UmFkaXVzLmhlaWdodCgpICsgVUlXZWJWaWV3TWluaW11bUhpZ2hsaWdodFJhZGl1cyld
XTsKKyAgICBbX2hpZ2hsaWdodFZpZXcgc2V0Q29ybmVyUmFkaWk6Ym9yZGVyUmFkaWkuZ2V0KCld
OworfQorCistICh2b2lkKV9jYW5jZWxMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcgoreworICAg
IFtfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgY2FuY2VsXTsKK30KKworLSAo
dm9pZClfZGlkU2Nyb2xsCit7CisgICAgW3NlbGYgX2NhbmNlbExvbmdQcmVzc0dlc3R1cmVSZWNv
Z25pemVyXTsKKyAgICBbc2VsZiBfY2FuY2VsSW50ZXJhY3Rpb25dOworfQorCistIChCT09MKV9y
ZXF1aXJlc0tleWJvYXJkUmVzZXRPblJlbG9hZAoreworICAgIHJldHVybiBZRVM7Cit9CisKKy0g
KEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilwcmV2ZW50aW5n
R2VzdHVyZVJlY29nbml6ZXIgY2FuUHJldmVudEdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVS
ZWNvZ25pemVyICopcHJldmVudGVkR2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICAvLyBBIGxvbmct
cHJlc3MgZ2VzdHVyZSBjYW4gbm90IGJlIHJlY29nbml6ZWQgd2hpbGUgcGFubmluZywgYnV0IGEg
cGFuIGNhbiBiZSByZWNvZ25pemVkCisgICAgLy8gZHVyaW5nIGEgbG9uZy1wcmVzcyBnZXN0dXJl
LgorICAgIEJPT0wgc2hvdWxkTm90UHJldmVudFBhbkdlc3R1cmUgPSBwcmV2ZW50aW5nR2VzdHVy
ZVJlY29nbml6ZXIgPT0gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHx8IHBy
ZXZlbnRpbmdHZXN0dXJlUmVjb2duaXplciA9PSBfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI7
CisgICAgcmV0dXJuICEoc2hvdWxkTm90UHJldmVudFBhbkdlc3R1cmUgJiYgW3ByZXZlbnRlZEdl
c3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJVSVNjcm9s
bFZpZXdQYW5HZXN0dXJlUmVjb2duaXplciIpXSk7Cit9CisKKy0gKEJPT0wpZ2VzdHVyZVJlY29n
bml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilwcmV2ZW50ZWRHZXN0dXJlUmVjb2duaXplciBj
YW5CZVByZXZlbnRlZEJ5R2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilw
cmV2ZW50aW5nR2VzdHVyZVJlY29nbml6ZXIgeworICAgIC8vIERvbid0IGFsbG93IHRoZSBoaWdo
bGlnaHQgdG8gYmUgcHJldmVudGVkIGJ5IGEgc2VsZWN0aW9uIGdlc3R1cmUuIFByZXNzLWFuZC1o
b2xkIG9uIGEgbGluayBzaG91bGQgaGlnaGxpZ2h0IHRoZSBsaW5rLCBub3Qgc2VsZWN0IGl0Lgor
ICAgIGlmICgocHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyID09IF90ZXh0U2VsZWN0aW9uQXNz
aXN0YW50LmdldCgpLmxvdXBlR2VzdHVyZSB8fCBbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCBpc1Nl
bGVjdGlvbkdlc3R1cmVSZWNvZ25pemVyOnByZXZlbnRpbmdHZXN0dXJlUmVjb2duaXplcl0pCisg
ICAgICAgICYmIChwcmV2ZW50ZWRHZXN0dXJlUmVjb2duaXplciA9PSBfaGlnaGxpZ2h0TG9uZ1By
ZXNzR2VzdHVyZVJlY29nbml6ZXIgfHwgcHJldmVudGVkR2VzdHVyZVJlY29nbml6ZXIgPT0gX2xv
bmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKSkgeworICAgICAgICByZXR1cm4gTk87CisgICAgfQor
CisgICAgcmV0dXJuIFlFUzsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzU2FtZVBhaXIoVUlH
ZXN0dXJlUmVjb2duaXplciAqYSwgVUlHZXN0dXJlUmVjb2duaXplciAqYiwgVUlHZXN0dXJlUmVj
b2duaXplciAqeCwgVUlHZXN0dXJlUmVjb2duaXplciAqeSkKK3sKKyAgICByZXR1cm4gKGEgPT0g
eCAmJiBiID09IHkpIHx8IChiID09IHggJiYgYSA9PSB5KTsKK30KKworLSAoQk9PTClnZXN0dXJl
UmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyIHNob3Vs
ZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVS
ZWNvZ25pemVyKilvdGhlckdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgaWYgKGlzU2FtZVBhaXIo
Z2VzdHVyZVJlY29nbml6ZXIsIG90aGVyR2VzdHVyZVJlY29nbml6ZXIsIF9oaWdobGlnaHRMb25n
UHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSwgX2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIGlmIChpc1NhbWVQYWlyKGdlc3R1
cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1cmVSZWNvZ25pemVyLCBfaGlnaGxpZ2h0TG9uZ1ByZXNz
R2VzdHVyZVJlY29nbml6ZXIuZ2V0KCksIF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQuZ2V0KCkuc2Vs
ZWN0aW9uTG9uZ1ByZXNzUmVjb2duaXplcikpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBp
ZiAoaXNTYW1lUGFpcihnZXN0dXJlUmVjb2duaXplciwgb3RoZXJHZXN0dXJlUmVjb2duaXplciwg
X3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgpLCBfdGV4dFNlbGVjdGlvbkFzc2lzdGFu
dC5nZXQoKS5zaW5nbGVUYXBHZXN0dXJlKSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIHJl
dHVybiBOTzsKK30KKworLSAodm9pZClfc2hvd0ltYWdlU2hlZXQKK3sKKyAgICBbX2FjdGlvblNo
ZWV0QXNzaXN0YW50IHNob3dJbWFnZVNoZWV0XTsKK30KKworLSAodm9pZClfc2hvd0xpbmtTaGVl
dAoreworICAgIFtfYWN0aW9uU2hlZXRBc3Npc3RhbnQgc2hvd0xpbmtTaGVldF07Cit9CisKKy0g
KHZvaWQpX3Nob3dEYXRhRGV0ZWN0b3JzU2hlZXQKK3sKKyAgICBbX2FjdGlvblNoZWV0QXNzaXN0
YW50IHNob3dEYXRhRGV0ZWN0b3JzU2hlZXRdOworfQorCistIChTRUwpX2FjdGlvbkZvckxvbmdQ
cmVzcworeworICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFt
ZSA9PSAiSU1HIikKKyAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihfc2hvd0ltYWdlU2hlZXQpOwor
ICAgIGVsc2UgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1lID09
ICJBIikgeworICAgICAgICBOU1VSTCAqdGFyZ2V0VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6
X3Bvc2l0aW9uSW5mb3JtYXRpb24udXJsXTsKKyAgICAgICAgaWYgKFtbZ2V0REREZXRlY3Rpb25D
b250cm9sbGVyQ2xhc3MoKSB0YXBBbmRIb2xkU2NoZW1lc10gY29udGFpbnNPYmplY3Q6W3Rhcmdl
dFVSTCBzY2hlbWVdXSkKKyAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IoX3Nob3dEYXRhRGV0
ZWN0b3JzU2hlZXQpOworICAgICAgICByZXR1cm4gQHNlbGVjdG9yKF9zaG93TGlua1NoZWV0KTsK
KyAgICB9CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZCllbnN1cmVQb3NpdGlvbkluZm9y
bWF0aW9uSXNVcFRvRGF0ZTooQ0dQb2ludClwb2ludAoreworICAgIGlmICghX2hhc1ZhbGlkUG9z
aXRpb25JbmZvcm1hdGlvbiB8fCByb3VuZGVkSW50UG9pbnQocG9pbnQpICE9IF9wb3NpdGlvbklu
Zm9ybWF0aW9uLnBvaW50KSB7CisgICAgICAgIF9wYWdlLT5nZXRQb3NpdGlvbkluZm9ybWF0aW9u
KHJvdW5kZWRJbnRQb2ludChwb2ludCksIF9wb3NpdGlvbkluZm9ybWF0aW9uKTsKKyAgICAgICAg
X2hhc1ZhbGlkUG9zaXRpb25JbmZvcm1hdGlvbiA9IFlFUzsKKyAgICB9Cit9CisKKy0gKHZvaWQp
X3VwZGF0ZVBvc2l0aW9uSW5mb3JtYXRpb24KK3sKKyAgICBfaGFzVmFsaWRQb3NpdGlvbkluZm9y
bWF0aW9uID0gTk87CisgICAgX3BhZ2UtPnJlcXVlc3RQb3NpdGlvbkluZm9ybWF0aW9uKF9wb3Np
dGlvbkluZm9ybWF0aW9uLnBvaW50KTsKK30KKworLSAoQk9PTClnZXN0dXJlUmVjb2duaXplclNo
b3VsZEJlZ2luOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAg
ICBDR1BvaW50IHBvaW50ID0gW2dlc3R1cmVSZWNvZ25pemVyIGxvY2F0aW9uSW5WaWV3OnNlbGZd
OworCisgICAgaWYgKGdlc3R1cmVSZWNvZ25pemVyID09IF9oaWdobGlnaHRMb25nUHJlc3NHZXN0
dXJlUmVjb2duaXplcgorICAgICAgICB8fCBnZXN0dXJlUmVjb2duaXplciA9PSBfZG91YmxlVGFw
R2VzdHVyZVJlY29nbml6ZXIKKyAgICAgICAgfHwgZ2VzdHVyZVJlY29nbml6ZXIgPT0gX3R3b0Zp
bmdlckRvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyCisgICAgICAgIHx8IGdlc3R1cmVSZWNvZ25p
emVyID09IF9zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplcikgeworCisgICAgICAgIGlmIChfdGV4
dFNlbGVjdGlvbkFzc2lzdGFudCkgeworICAgICAgICAgICAgLy8gUmVxdWVzdCBpbmZvcm1hdGlv
biBhYm91dCB0aGUgcG9zaXRpb24gd2l0aCBzeW5jIG1lc3NhZ2UuCisgICAgICAgICAgICAvLyBJ
ZiB0aGUgYXNzaXN0ZWQgbm9kZSBpcyB0aGUgc2FtZSwgcHJldmVudCB0aGUgZ2VzdHVyZS4KKyAg
ICAgICAgICAgIF9wYWdlLT5nZXRQb3NpdGlvbkluZm9ybWF0aW9uKHJvdW5kZWRJbnRQb2ludChw
b2ludCksIF9wb3NpdGlvbkluZm9ybWF0aW9uKTsKKyAgICAgICAgICAgIF9oYXNWYWxpZFBvc2l0
aW9uSW5mb3JtYXRpb24gPSBZRVM7CisgICAgICAgICAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRp
b24ubm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Tk87CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZ2VzdHVyZVJlY29nbml6ZXIgPT0gX2hp
Z2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKSB7CisgICAgICAgIGlmIChfdGV4dFNl
bGVjdGlvbkFzc2lzdGFudCkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGRpZmZlcmVudCBu
b2RlIHRoYW4gdGhlIGFzc2lzdGVkIG9uZS4KKyAgICAgICAgICAgIC8vIFByZXZlbnQgdGhlIGdl
c3R1cmUgaWYgdGhlcmUgaXMgbm8gbm9kZS4KKyAgICAgICAgICAgIC8vIEFsbG93IHRoZSBnZXN0
dXJlIGlmIGl0IGlzIGEgbm9kZSB0aGF0IHdhbnRzIGhpZ2hsaWdodCBvciBpZiB0aGVyZSBpcyBh
biBhY3Rpb24gZm9yIGl0LgorICAgICAgICAgICAgaWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLmNs
aWNrYWJsZUVsZW1lbnROYW1lLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBOTzsK
KyAgICAgICAgICAgIHJldHVybiBbc2VsZiBfYWN0aW9uRm9yTG9uZ1ByZXNzXSAhPSBuaWw7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBzdGlsbCBoYXZlIG5vIGlkZWEgYWJv
dXQgd2hhdCBpcyBhdCB0aGUgbG9jYXRpb24uCisgICAgICAgICAgICAvLyBTZW5kIGFuZCBhc3lu
YyBtZXNzYWdlIHRvIGZpbmQgb3V0LgorICAgICAgICAgICAgX2hhc1ZhbGlkUG9zaXRpb25JbmZv
cm1hdGlvbiA9IE5POworICAgICAgICAgICAgX3BhZ2UtPnJlcXVlc3RQb3NpdGlvbkluZm9ybWF0
aW9uKHJvdW5kZWRJbnRQb2ludChwb2ludCkpOworICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChnZXN0dXJlUmVjb2duaXplciA9PSBfbG9uZ1ByZXNz
R2VzdHVyZVJlY29nbml6ZXIpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBpbmZvcm1hdGlvbiByZXRy
aWV2ZWQgd2l0aCBvbmUgb2YgdGhlIHByZXZpb3VzIGNhbGxzCisgICAgICAgIC8vIHRvIGdlc3R1
cmVSZWNvZ25pemVyU2hvdWxkQmVnaW4uCisgICAgICAgIC8vIEZvcmNlIGEgc3luYyBjYWxsIGlm
IG5vdCByZWFkeSB5ZXQuCisgICAgICAgIFtzZWxmIGVuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25J
c1VwVG9EYXRlOnBvaW50XTsKKworICAgICAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQp
IHsKKyAgICAgICAgICAgIC8vIFByZXZlbnQgdGhlIGdlc3R1cmUgaWYgaXQgaXMgdGhlIHNhbWUg
bm9kZS4KKyAgICAgICAgICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5ub2RlQXRQb3NpdGlv
bklzQXNzaXN0ZWROb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIFByZXZlbnQgdGhlIGdlc3R1cmUgaWYgdGhlcmUgaXMgbm8g
YWN0aW9uIGZvciB0aGUgbm9kZS4KKyAgICAgICAgICAgIHJldHVybiBbc2VsZiBfYWN0aW9uRm9y
TG9uZ1ByZXNzXSAhPSBuaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZ2VzdHVyZVJl
Y29nbml6ZXIgPT0gX3R3b0ZpbmdlclBhbkdlc3R1cmVSZWNvZ25pemVyKSB7CisgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIFlFUzsKK30KKworLSAodm9pZClf
Y2FuY2VsSW50ZXJhY3Rpb24KK3sKKyAgICBfaXNUYXBIaWdobGlnaHRJRFZhbGlkID0gTk87Cisg
ICAgW19oaWdobGlnaHRWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworfQorCistIChCT09MKWhh
c1NlbGVjdGFibGVQb3NpdGlvbkF0UG9pbnQ6KENHUG9pbnQpcG9pbnQKK3sKKyAgICBbc2VsZiBl
bnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZTpwb2ludF07CisgICAgLy8gRklYTUU6
IFRoaXMgY2hlY2sgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgdG8gaW5jbHVkZSBvdGhlciBlbGVtZW50
cy4KKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZWplY3QgcG9zaXRpb25zIHRoYXQgd2lsbCBs
ZWFkIHRvIGEgdmVyeSBsYXJnZSBzZWxlY3Rpb24uCisgICAgcmV0dXJuIF9wb3NpdGlvbkluZm9y
bWF0aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1lICE9ICJJTUciICYmIF9wb3NpdGlvbkluZm9ybWF0
aW9uLmNsaWNrYWJsZUVsZW1lbnROYW1lICE9ICJBIiAmJiAhX3Bvc2l0aW9uSW5mb3JtYXRpb24u
c2VsZWN0aW9uUmVjdHMuaXNFbXB0eSgpOworfQorCistIChCT09MKXBvaW50SXNJbkFzc2lzdGVk
Tm9kZTooQ0dQb2ludClwb2ludAoreworICAgIFtzZWxmIGVuc3VyZVBvc2l0aW9uSW5mb3JtYXRp
b25Jc1VwVG9EYXRlOnBvaW50XTsKKyAgICByZXR1cm4gX3Bvc2l0aW9uSW5mb3JtYXRpb24ubm9k
ZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZTsKK30KKworLSAoTlNBcnJheSAqKXdlYlNlbGVjdGlv
blJlY3RzCit7CisgICAgdW5zaWduZWQgc2l6ZSA9IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVj
dGlvblJlY3RzLnNpemUoKTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBOU011dGFibGVBcnJheSAqd2ViUmVjdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRo
Q2FwYWNpdHk6c2l6ZV07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICBjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25SZWN0JiBjb3JlUmVjdCA9IF9wYWdl
LT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvblJlY3RzW2ldOworICAgICAgICBXZWJTZWxlY3Rpb25S
ZWN0ICp3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVjdF07CisgICAgICAg
IHdlYlJlY3QucmVjdCA9IGNvcmVSZWN0LnJlY3QoKTsKKyAgICAgICAgd2ViUmVjdC53cml0aW5n
RGlyZWN0aW9uID0gY29yZVJlY3QuZGlyZWN0aW9uKCkgPT0gTFRSID8gV0tXcml0aW5nRGlyZWN0
aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKyAgICAgICAg
d2ViUmVjdC5pc0xpbmVCcmVhayA9IGNvcmVSZWN0LmlzTGluZUJyZWFrKCk7CisgICAgICAgIHdl
YlJlY3QuaXNGaXJzdE9uTGluZSA9IGNvcmVSZWN0LmlzRmlyc3RPbkxpbmUoKTsKKyAgICAgICAg
d2ViUmVjdC5pc0xhc3RPbkxpbmUgPSBjb3JlUmVjdC5pc0xhc3RPbkxpbmUoKTsKKyAgICAgICAg
d2ViUmVjdC5jb250YWluc1N0YXJ0ID0gY29yZVJlY3QuY29udGFpbnNTdGFydCgpOworICAgICAg
ICB3ZWJSZWN0LmNvbnRhaW5zRW5kID0gY29yZVJlY3QuY29udGFpbnNFbmQoKTsKKyAgICAgICAg
d2ViUmVjdC5pc0luRml4ZWRQb3NpdGlvbiA9IGNvcmVSZWN0LmlzSW5GaXhlZFBvc2l0aW9uKCk7
CisgICAgICAgIHdlYlJlY3QuaXNIb3Jpem9udGFsID0gY29yZVJlY3QuaXNIb3Jpem9udGFsKCk7
CisgICAgICAgIFt3ZWJSZWN0cyBhZGRPYmplY3Q6d2ViUmVjdF07CisgICAgfQorCisgICAgcmV0
dXJuIHdlYlJlY3RzOworfQorCistICh2b2lkKV9oaWdobGlnaHRMb25nUHJlc3NSZWNvZ25pemVk
OihVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAg
ICBBU1NFUlQoZ2VzdHVyZVJlY29nbml6ZXIgPT0gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVS
ZWNvZ25pemVyKTsKKworICAgIHN3aXRjaCAoW2dlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSkgewor
ICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW46CisgICAgICAgIF9wYWdlLT50
YXBIaWdobGlnaHRBdFBvc2l0aW9uKFtnZXN0dXJlUmVjb2duaXplciBzdGFydFBvaW50XSwgX2xh
dGVzdFRhcEhpZ2hsaWdodElEKTsKKyAgICAgICAgX2lzVGFwSGlnaGxpZ2h0SURWYWxpZCA9IFlF
UzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRl
ZDoKKyAgICAgICAgaWYgKCFfcG9zaXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFt
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBbc2VsZiBfYXR0ZW1wdENsaWNrQXRMb2NhdGlvbjpb
Z2VzdHVyZVJlY29nbml6ZXIgc3RhcnRQb2ludF1dOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZDoKKyAgICAgICAgW3NlbGYgX2NhbmNl
bEludGVyYWN0aW9uXTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCistICh2b2lkKV9sb25nUHJlc3NSZWNvZ25pemVkOihVSUxvbmdQcmVz
c0dlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICBBU1NFUlQoZ2Vz
dHVyZVJlY29nbml6ZXIgPT0gX2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKTsKKworICAgIGlm
IChbZ2VzdHVyZVJlY29nbml6ZXIgc3RhdGVdID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJl
Z2FuKSB7CisgICAgICAgIFNFTCBhY3Rpb24gPSBbc2VsZiBfYWN0aW9uRm9yTG9uZ1ByZXNzXTsK
KyAgICAgICAgaWYgKGFjdGlvbikKKyAgICAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvcjph
Y3Rpb25dOworICAgIH0KK30KKworLSAodm9pZClfc2luZ2xlVGFwUmVjb2duaXplZDooVUlUYXBH
ZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgQVNTRVJUKGdlc3R1
cmVSZWNvZ25pemVyID09IF9zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplcik7CisKKyAgICBpZiAo
X3dlYlNlbGVjdGlvbkFzc2lzdGFudCAmJiAhW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgc2hvdWxk
SGFuZGxlU2luZ2xlVGFwQXRQb2ludDpnZXN0dXJlUmVjb2duaXplci5sb2NhdGlvbl0pCisgICAg
ICAgIHJldHVybjsKKworICAgIFtfd2ViU2VsZWN0aW9uQXNzaXN0YW50IGNsZWFyU2VsZWN0aW9u
XTsKKworICAgIFtzZWxmIF9hdHRlbXB0Q2xpY2tBdExvY2F0aW9uOltnZXN0dXJlUmVjb2duaXpl
ciBsb2NhdGlvbl1dOworfQorCistICh2b2lkKV9kb3VibGVUYXBSZWNvZ25pemVkOihVSVRhcEdl
c3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICAvLyBGSVhNRTogQWRk
IGltcGxlbWVudGF0aW9uLgorfQorCistICh2b2lkKV90d29GaW5nZXJEb3VibGVUYXBSZWNvZ25p
emVkOihVSVRhcEdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICAv
LyBGSVhNRTogQWRkIGltcGxlbWVudGF0aW9uLgorfQorCistICh2b2lkKV90d29GaW5nZXJQYW5S
ZWNvZ25pemVkOihVSVBhbkdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sK
KyAgICAvLyBGSVhNRTogQWRkIGltcGxlbWVudGF0aW9uLgorfQorCistICh2b2lkKV9hdHRlbXB0
Q2xpY2tBdExvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uCit7CisgICAgLy8gRklYTUU6IElkZWFs
bHksIHdlIHNob3VsZCBhbHdheXMgcHJvdmlkZSBzb21lIHZpc3VhbCBmZWVkYmFjayBvbiBjbGlj
ay4gSWYgYSBzaG9ydCB0YXAgZGlkIG5vdCB0cmlnZ2VyIHRoZQorICAgIC8vIHRhcCBoaWdobGln
aHQsIHdlIHNob3VsZCBzaG93IG9uZSBiYXNlZCBvbiBhIHRpbWVyIGlmIHdlIGNvbW1pdCB0aGUg
c3ludGhldGljIG1vdXNlIGV2ZW50cy4KKyAgICBbc2VsZiBfY2FuY2VsSW50ZXJhY3Rpb25dOwor
CisgICAgaWYgKCFbc2VsZiBpc0ZpcnN0UmVzcG9uZGVyXSkKKyAgICAgICAgW3NlbGYgYmVjb21l
Rmlyc3RSZXNwb25kZXJdOworCisgICAgX3BhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpIYW5kbGVUYXAoSW50UG9pbnQobG9jYXRpb24pKSwgX3BhZ2UtPnBhZ2VJRCgpKTsK
K30KKworLSAodm9pZCl1c2VTZWxlY3Rpb25Bc3Npc3RhbnRXaXRoTW9kZTooVUlXZWJTZWxlY3Rp
b25Nb2RlKXNlbGVjdGlvbk1vZGUKK3sKKyAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PSBVSVdlYlNl
bGVjdGlvbk1vZGVXZWIpIHsKKyAgICAgICAgaWYgKF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50KSB7
CisgICAgICAgICAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgZGVhY3RpdmF0ZVNlbGVjdGlv
bl07CisgICAgICAgICAgICBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCA9IG5pbDsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIV93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQpCisgICAgICAgICAgICBfd2Vi
U2VsZWN0aW9uQXNzaXN0YW50ID0gYWRvcHROUyhbW1VJV0tTZWxlY3Rpb25Bc3Npc3RhbnQgYWxs
b2NdIGluaXRXaXRoVmlldzpzZWxmXSk7CisgICAgfSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09
IFVJV2ViU2VsZWN0aW9uTW9kZVRleHRPbmx5KSB7CisgICAgICAgIGlmIChfd2ViU2VsZWN0aW9u
QXNzaXN0YW50KQorICAgICAgICAgICAgX3dlYlNlbGVjdGlvbkFzc2lzdGFudCA9IG5pbDsKKwor
ICAgICAgICBpZiAoIV90ZXh0U2VsZWN0aW9uQXNzaXN0YW50KQorICAgICAgICAgICAgX3RleHRT
ZWxlY3Rpb25Bc3Npc3RhbnQgPSBhZG9wdE5TKFtbVUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFu
dCBhbGxvY10gaW5pdFdpdGhWaWV3OnNlbGZdKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAvLyBSZXNldCB0aGUgZ2VzdHVyZSByZWNvZ25pemVycyBpbiBjYXNlIGVkaXRpYmlsaXR5IGhh
cyBjaGFuZ2VkLgorICAgICAgICAgICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IHNldEdlc3R1
cmVSZWNvZ25pemVyc107CisgICAgICAgIH0KKworICAgICAgICBbX3RleHRTZWxlY3Rpb25Bc3Np
c3RhbnQgYWN0aXZhdGVTZWxlY3Rpb25dOworICAgIH0KK30KKworLSAodm9pZCljbGVhclNlbGVj
dGlvbgoreworICAgIF9wYWdlLT5jbGVhclNlbGVjdGlvbigpOworfQorCistICh2b2lkKV9wb3Np
dGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOihjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbiYpaW5mbworeworICAgIF9wb3NpdGlvbkluZm9ybWF0aW9uID0gaW5mbzsKKyAgICBf
aGFzVmFsaWRQb3NpdGlvbkluZm9ybWF0aW9uID0gWUVTOworICAgIGlmIChfYWN0aW9uU2hlZXRB
c3Npc3RhbnQpCisgICAgICAgIFtfYWN0aW9uU2hlZXRBc3Npc3RhbnQgdXBkYXRlU2hlZXRQb3Np
dGlvbl07Cit9CisKKy0gKHZvaWQpX3dpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZworeworICAg
IFtfd2ViU2VsZWN0aW9uQXNzaXN0YW50IHdpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZ1BhZ2Vd
OworICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCB3aWxsU3RhcnRTY3JvbGxpbmdPdmVyZmxv
d107Cit9CisKKy0gKHZvaWQpX3dpbGxTdGFydFVzZXJUcmlnZ2VyZWRTY3JvbGxpbmdPclpvb21p
bmcKK3sKKyAgICBfY2FuU2VuZFRvdWNoRXZlbnRzQXN5bmNocm9ub3VzbHkgPSBZRVM7Cit9CisK
Ky0gKHZvaWQpX2RpZEVuZFNjcm9sbGluZ09yWm9vbWluZworeworICAgIFtfd2ViU2VsZWN0aW9u
QXNzaXN0YW50IGRpZEVuZFNjcm9sbGluZ09yWm9vbWluZ1BhZ2VdOworICAgIFtfdGV4dFNlbGVj
dGlvbkFzc2lzdGFudCBkaWRFbmRTY3JvbGxpbmdPdmVyZmxvd107Cit9CisKKy0gKFVJVmlldyAq
KWlucHV0QWNjZXNzb3J5VmlldworeworICAgIGlmICghX2lzRWRpdGFibGUpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgaWYgKCFfYWNjZXNzb3J5KSB7CisgICAgICAgIF9hY2Nlc3Nv
cnkgPSBbW1VJV2ViRm9ybUFjY2Vzc29yeSBhbGxvY10gaW5pdF07CisgICAgICAgIF9hY2Nlc3Nv
cnkuZGVsZWdhdGUgPSBzZWxmOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gX2FjY2Vzc29yeTsK
K30KKworLSAoTlNBcnJheSAqKXN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRTZWxl
Y3Rpb24KK3sKKyAgICBpZiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNOb25lKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHN0YXRpYyBOU011dGFibGVBcnJheSAqcmlj
aFR5cGVzID0gbmlsOworICAgIHN0YXRpYyBOU011dGFibGVBcnJheSAqcGxhaW5UZXh0VHlwZXMg
PSBuaWw7CisgICAgaWYgKCFwbGFpblRleHRUeXBlcykgeworICAgICAgICBwbGFpblRleHRUeXBl
cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworICAgICAgICAvLyBGSVhNRTogc2hv
dWxkIGFkZCBbcGxhaW5UZXh0VHlwZXMgYWRkT2JqZWN0OihpZClrVVRUeXBlVVJMXTsKKyAgICAg
ICAgLy8gd2hlbiB3ZSBmaWd1cmUgb3V0IGhvdyB0byBzaGFyZSB0aGlzIHR5cGUgYmV0d2VlbiBX
ZWJDb3JlIGFuZCBXZWJLaXQyCisgICAgICAgIFtwbGFpblRleHRUeXBlcyBhZGRPYmplY3RzRnJv
bUFycmF5OlVJUGFzdGVib2FyZFR5cGVMaXN0U3RyaW5nXTsKKworICAgICAgICByaWNoVHlwZXMg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICAgICAgLy8gRklYTUU6IHNob3Vs
ZCBhZGQgW3JpY2hUeXBlcyBhZGRPYmplY3Q6KFBhc3RlYm9hcmRUeXBlczo6V2ViQXJjaGl2ZVBi
b2FyZFR5cGUpXTsKKyAgICAgICAgLy8gd2hlbiB3ZSBmaWd1cmUgb3V0IGhvdyB0byBzaGFyZSB0
aGlzIHR5cGUgYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQyCisgICAgICAgIFtyaWNoVHlwZXMg
YWRkT2JqZWN0c0Zyb21BcnJheTpVSVBhc3RlYm9hcmRUeXBlTGlzdEltYWdlXTsKKyAgICAgICAg
W3JpY2hUeXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OnBsYWluVGV4dFR5cGVzXTsKKyAgICB9CisK
KyAgICByZXR1cm4gKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVkaXRhYmxl
KSA/IHJpY2hUeXBlcyA6IHBsYWluVGV4dFR5cGVzOworfQorCistICh2b2lkKV9hZGRTaG9ydGN1
dDooaWQpc2VuZGVyCit7CisgICAgLy8gRklYTUU6IFRvIGJlIGltcGxlbWVudGVkLgorfQorCist
ICh2b2lkKV9wcm9tcHRGb3JSZXBsYWNlOihpZClzZW5kZXIKK3sKKyAgICAvLyBGSVhNRTogVG8g
YmUgaW1wbGVtZW50ZWQuCit9CisKKy0gKHZvaWQpcmVwbGFjZTooaWQpc2VuZGVyCit7CisgICAg
Ly8gRklYTUU6IFRvIGJlIGltcGxlbWVudGVkLgorfQorCistIChCT09MKWNhblBlcmZvcm1BY3Rp
b246KFNFTClhY3Rpb24gd2l0aFNlbmRlcjooaWQpc2VuZGVyCit7CisgICAgQk9PTCBoYXNXZWJT
ZWxlY3Rpb24gPSBfd2ViU2VsZWN0aW9uQXNzaXN0YW50ICYmICFDR1JlY3RJc0VtcHR5KF93ZWJT
ZWxlY3Rpb25Bc3Npc3RhbnQuZ2V0KCkuc2VsZWN0aW9uRnJhbWUpOworCisgICAgaWYgKGFjdGlv
biA9PSBAc2VsZWN0b3IoX3Nob3dUZXh0U3R5bGVPcHRpb25zOikpCisgICAgICAgIHJldHVybiBf
cGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSAmJiBfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlICYmICFfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnM7
CisgICAgaWYgKF9zaG93aW5nVGV4dFN0eWxlT3B0aW9ucykKKyAgICAgICAgcmV0dXJuIChhY3Rp
b24gPT0gQHNlbGVjdG9yKHRvZ2dsZUJvbGRmYWNlOikgfHwgYWN0aW9uID09IEBzZWxlY3Rvcih0
b2dnbGVJdGFsaWNzOikgfHwgYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVVbmRlcmxpbmU6KSk7
CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY3V0OikpCisgICAgICAgIHJldHVybiAhX3Bh
Z2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQgJiYgX3BhZ2UtPmVkaXRvclN0YXRl
KCkuaXNDb250ZW50RWRpdGFibGUgJiYgX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNS
YW5nZTsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZTopKSB7CisgICAg
ICAgIGlmIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc05vbmUgfHwgIV9wYWdlLT5l
ZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKQorICAgICAgICAgICAgcmV0dXJuIE5POwor
ICAgICAgICBVSVBhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbVUlQYXN0ZWJvYXJkIGdlbmVyYWxQ
YXN0ZWJvYXJkXTsKKyAgICAgICAgTlNBcnJheSAqdHlwZXMgPSBbc2VsZiBzdXBwb3J0ZWRQYXN0
ZWJvYXJkVHlwZXNGb3JDdXJyZW50U2VsZWN0aW9uXTsKKyAgICAgICAgTlNJbmRleFNldCAqaW5k
aWNlcyA9IFtOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4ZXNJblJhbmdlOk5TTWFrZVJhbmdl
KDAsIFtwYXN0ZWJvYXJkIG51bWJlck9mSXRlbXNdKV07CisgICAgICAgIHJldHVybiBbcGFzdGVi
b2FyZCBjb250YWluc1Bhc3RlYm9hcmRUeXBlczp0eXBlcyBpbkl0ZW1TZXQ6aW5kaWNlc107Cisg
ICAgfQorCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY29weTopKSB7CisgICAgICAgIGlm
IChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCkKKyAgICAgICAgICAgIHJl
dHVybiBOTzsKKyAgICAgICAgcmV0dXJuIGhhc1dlYlNlbGVjdGlvbiB8fCBfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlOworICAgIH0KKworICAgIGlmIChhY3Rpb24gPT0gQHNl
bGVjdG9yKF9kZWZpbmU6KSkgeworICAgICAgICBpZiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJ
blBhc3N3b3JkRmllbGQgfHwgIShoYXNXZWJTZWxlY3Rpb24gfHwgX3BhZ2UtPmVkaXRvclN0YXRl
KCkuc2VsZWN0aW9uSXNSYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gTk87CisKKyAgICAgICAg
TlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0gX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0ZWRUZXh0
TGVuZ3RoOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGNhbGxpbmcgVUlSZWZlcmVu
Y2VMaWJyYXJ5Vmlld0NvbnRyb2xsZXIgdG8gY2hlY2sgaWYgdGhlIGxlbmd0aCBpcworICAgICAg
ICAvLyBhY2NlcHRhYmxlLCBidXQgdGhlIGludGVyZmFjZSB0YWtlcyBhIHN0cmluZy4KKyAgICAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzE1MjU0NDA2PgorICAgICAgICBpZiAoIXRleHRMZW5ndGgg
fHwgdGV4dExlbmd0aCA+IDIwMCkKKyAgICAgICAgICAgIHJldHVybiBOTzsKKworICAgICAgICBy
ZXR1cm4gWUVTOworICAgIH0KKworICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9hZGRTaG9y
dGN1dDopKSB7CisgICAgICAgIGlmIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRG
aWVsZCB8fCAhKGhhc1dlYlNlbGVjdGlvbiB8fCBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rp
b25Jc1JhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICAgICAgLy8gRklYTUU6IG5l
ZWQgdG8gaW1wbGVtZW50LCByZXR1cm5pbmcgTk8gYWx3YXlzIGZvciBub3cuCisgICAgICAgIHJl
dHVybiBOTzsKKyAgICB9CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihfcHJvbXB0Rm9y
UmVwbGFjZTopKSB7CisgICAgICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudAorICAgICAg
ICByZXR1cm4gTk87CisgICAgfQorCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Ioc2VsZWN0
OikpIHsKKyAgICAgICAgLy8gRGlzYWJsZSBzZWxlY3QgaW4gcGFzc3dvcmQgZmllbGRzIHNvIHRo
YXQgeW91IGNhbid0IHNlZSB3b3JkIGJvdW5kYXJpZXMuCisgICAgICAgIHJldHVybiAhX3BhZ2Ut
PmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQgJiYgW3NlbGYgaGFzQ29udGVudF0gJiYg
IV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSAmJiAhX3BhZ2UtPmVkaXRvclN0
YXRlKCkuc2VsZWN0aW9uSXNSYW5nZTsKKyAgICB9CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxl
Y3RvcihzZWxlY3RBbGw6KSkgeworICAgICAgICBpZiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2Vs
ZWN0aW9uSXNOb25lIHx8ICFbc2VsZiBoYXNDb250ZW50XSkKKyAgICAgICAgICAgIHJldHVybiBO
TzsKKyAgICAgICAgaWYgKCFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlKQor
ICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAgICAgLy8gRW5hYmxlIHNlbGVjdEFsbCBmb3Ig
bm9uLWVkaXRhYmxlIHRleHQsIHdoZXJlIHRoZSB1c2VyIGNhbid0IGFjY2VzcworICAgICAgICAv
LyB0aGlzIGNvbW1hbmQgdmlhIGxvbmctcHJlc3MgdG8gZ2V0IGEgY2FyZXQuCisgICAgICAgIGlm
IChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKKyAgICAgICAgICAgIHJl
dHVybiBOTzsKKyAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCBzZWxlY3RBbGwgd2l0aCBnZW5lcmFs
IHdlYiBjb250ZW50LgorICAgICAgICBpZiAoaGFzV2ViU2VsZWN0aW9uKQorICAgICAgICAgICAg
cmV0dXJuIE5POworICAgICAgICAvLyBGSVhNRTogT25seSBlbmFibGUgaWYgdGhlIHNlbGVjdGlv
biBkb2Vzbid0IGFscmVhZHkgc3BhbiB0aGUgZW50aXJlIGRvY3VtZW50LgorICAgICAgICByZXR1
cm4gWUVTOworICAgIH0KKworICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHJlcGxhY2U6KSkK
KyAgICAgICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlICYm
ICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZDsKKworICAgIHJldHVybiBb
c3VwZXIgY2FuUGVyZm9ybUFjdGlvbjphY3Rpb24gd2l0aFNlbmRlcjpzZW5kZXJdOworfQorCist
ICh2b2lkKV9yZXNldFNob3dpbmdUZXh0U3R5bGU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0
aW9uCit7CisgICAgX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zID0gTk87CisgICAgW190ZXh0U2Vs
ZWN0aW9uQXNzaXN0YW50IGhpZGVUZXh0U3R5bGVPcHRpb25zXTsKK30KKworLSAodm9pZClfcGVy
Zm9ybUFjdGlvbjooV0tTaGVldEFjdGlvbnMpYWN0aW9uCit7CisgICAgX3BhZ2UtPnBlcmZvcm1B
Y3Rpb25PbkVsZW1lbnQoKHVpbnQzMl90KWFjdGlvbik7Cit9CisKKy0gKHZvaWQpY29weTooaWQp
c2VuZGVyCit7CisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVyYWwoImNv
cHkiKSk7Cit9CisKKy0gKHZvaWQpY3V0OihpZClzZW5kZXIKK3sKKyAgICBbc2VsZi5pbnB1dERl
bGVnYXRlIHRleHRXaWxsQ2hhbmdlOnNlbGZdOworCisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29t
bWFuZChBU0NJSUxpdGVyYWwoImN1dCIpKTsKKworICAgIFtzZWxmLmlucHV0RGVsZWdhdGUgdGV4
dERpZENoYW5nZTpzZWxmXTsKK30KKworLSAodm9pZClwYXN0ZTooaWQpc2VuZGVyCit7CisgICAg
W3NlbGYuaW5wdXREZWxlZ2F0ZSB0ZXh0V2lsbENoYW5nZTpzZWxmXTsKKyAgICAKKyAgICBfcGFn
ZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0ZXJhbCgicGFzdGUiKSk7CisgICAgCisgICAg
W3NlbGYuaW5wdXREZWxlZ2F0ZSB0ZXh0RGlkQ2hhbmdlOnNlbGZdOworfQorCistICh2b2lkKXNl
bGVjdDooaWQpc2VuZGVyCit7CisgICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IHNlbGVjdFdv
cmRdOworICAgIC8vIFdlIGNhbm5vdCB1c2Ugc2VsZWN0V29yZCBjb21tYW5kLCBiZWNhdXNlIHdl
IHdhbnQgdG8gYmUgYWJsZSB0byBzZWxlY3QgdGhlIHdvcmQgZXZlbiB3aGVuIGl0IGlzIHRoZSBs
YXN0IGluIHRoZSBwYXJhZ3JhcGguCisgICAgX3BhZ2UtPmV4dGVuZFNlbGVjdGlvbihXb3JkR3Jh
bnVsYXJpdHkpOworfQorCistICh2b2lkKXNlbGVjdEFsbDooaWQpc2VuZGVyCit7CisgICAgW190
ZXh0U2VsZWN0aW9uQXNzaXN0YW50IHNlbGVjdEFsbDpzZW5kZXJdOworICAgIF9wYWdlLT5leGVj
dXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJzZWxlY3RBbGwiKSk7Cit9CisKKy0gKHZvaWQp
dG9nZ2xlQm9sZGZhY2U6KGlkKXNlbmRlcgoreworICAgIGlmICghX3BhZ2UtPmVkaXRvclN0YXRl
KCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIF9wYWdl
LT5leGVjdXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJ0b2dnbGVCb2xkIikpOworfQorCist
ICh2b2lkKXRvZ2dsZUl0YWxpY3M6KGlkKXNlbmRlcgoreworICAgIGlmICghX3BhZ2UtPmVkaXRv
clN0YXRlKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAg
IF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJ0b2dnbGVJdGFsaWMiKSk7
Cit9CisKKy0gKHZvaWQpdG9nZ2xlVW5kZXJsaW5lOihpZClzZW5kZXIKK3sKKyAgICBpZiAoIV9w
YWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKQorICAgICAgICByZXR1
cm47CisKKyAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0ZXJhbCgidG9nZ2xl
VW5kZXJsaW5lIikpOworfQorCistICh2b2lkKV9zaG93VGV4dFN0eWxlT3B0aW9uczooaWQpc2Vu
ZGVyCit7CisgICAgX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zID0gWUVTOworICAgIFtfdGV4dFNl
bGVjdGlvbkFzc2lzdGFudCBzaG93VGV4dFN0eWxlT3B0aW9uc107Cit9CisKKy0gKHZvaWQpX3No
b3dEaWN0aW9uYXJ5OihOU1N0cmluZyAqKXRleHQKK3sKKyAgICBDR1JlY3QgcHJlc2VudGF0aW9u
UmVjdCA9IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvblJlY3RzWzBdLnJlY3QoKTsKKyAg
ICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpCisgICAgICAgIFtfdGV4dFNlbGVjdGlvbkFz
c2lzdGFudCBzaG93RGljdGlvbmFyeUZvcjp0ZXh0IGZyb21SZWN0OnByZXNlbnRhdGlvblJlY3Rd
OworICAgIGVsc2UKKyAgICAgICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgc2hvd0RpY3Rpb25h
cnlGb3I6dGV4dCBmcm9tUmVjdDpwcmVzZW50YXRpb25SZWN0XTsKK30KKworLSAodm9pZClfZGVm
aW5lOihpZClzZW5kZXIKK3sKKyAgICBfcGFnZS0+Z2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3Ry
aW5nKFN0cmluZ0NhbGxiYWNrOjpjcmVhdGUoW3NlbGZdKGJvb2wgZXJyb3IsIFN0cmluZ0ltcGwq
IHN0cmluZykgeworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGlmICghc3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE5TU3RyaW5n
ICpjb252ZXJ0ZWRTdHJpbmcgPSAqc3RyaW5nOworICAgICAgICBbc2VsZiBfc2hvd0RpY3Rpb25h
cnk6Y29udmVydGVkU3RyaW5nXTsKKyAgICB9KSk7Cit9CisKKy8vIFVJV0tJbnRlcmFjdGlvblZp
ZXdQcm90b2NvbAorCitzdGF0aWMgaW5saW5lIFdLR2VzdHVyZVR5cGUgdG9XS0dlc3R1cmVUeXBl
KFVJV0tHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGdlc3R1cmVUeXBl
KSB7CisgICAgY2FzZSBVSVdLR2VzdHVyZUxvdXBlOgorICAgICAgICByZXR1cm4gV0tHZXN0dXJl
TG91cGU7CisgICAgY2FzZSBVSVdLR2VzdHVyZU9uZUZpbmdlclRhcDoKKyAgICAgICAgcmV0dXJu
IFdLR2VzdHVyZU9uZUZpbmdlclRhcDsKKyAgICBjYXNlIFVJV0tHZXN0dXJlVGFwQW5kQUhhbGY6
CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVUYXBBbmRBSGFsZjsKKyAgICBjYXNlIFVJV0tHZXN0
dXJlRG91YmxlVGFwOgorICAgICAgICByZXR1cm4gV0tHZXN0dXJlRG91YmxlVGFwOworICAgIGNh
c2UgVUlXS0dlc3R1cmVUYXBBbmRIYWxmOgorICAgICAgICByZXR1cm4gV0tHZXN0dXJlVGFwQW5k
SGFsZjsKKyAgICBjYXNlIFVJV0tHZXN0dXJlRG91YmxlVGFwSW5VbmVkaXRhYmxlOgorICAgICAg
ICByZXR1cm4gV0tHZXN0dXJlRG91YmxlVGFwSW5VbmVkaXRhYmxlOworICAgIGNhc2UgVUlXS0dl
c3R1cmVPbmVGaW5nZXJUYXBJblVuZWRpdGFibGU6CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVP
bmVGaW5nZXJUYXBJblVuZWRpdGFibGU7CisgICAgY2FzZSBVSVdLR2VzdHVyZU9uZUZpbmdlclRh
cFNlbGVjdHNBbGw6CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVPbmVGaW5nZXJUYXBTZWxlY3Rz
QWxsOworICAgIGNhc2UgVUlXS0dlc3R1cmVPbmVGaW5nZXJEb3VibGVUYXA6CisgICAgICAgIHJl
dHVybiBXS0dlc3R1cmVPbmVGaW5nZXJEb3VibGVUYXA7CisgICAgY2FzZSBVSVdLR2VzdHVyZU9u
ZUZpbmdlclRyaXBsZVRhcDoKKyAgICAgICAgcmV0dXJuIFdLR2VzdHVyZU9uZUZpbmdlclRyaXBs
ZVRhcDsKKyAgICBjYXNlIFVJV0tHZXN0dXJlVHdvRmluZ2VyU2luZ2xlVGFwOgorICAgICAgICBy
ZXR1cm4gV0tHZXN0dXJlVHdvRmluZ2VyU2luZ2xlVGFwOworICAgIGNhc2UgVUlXS0dlc3R1cmVU
d29GaW5nZXJSYW5nZWRTZWxlY3RHZXN0dXJlOgorICAgICAgICByZXR1cm4gV0tHZXN0dXJlVHdv
RmluZ2VyUmFuZ2VkU2VsZWN0R2VzdHVyZTsKKyAgICBjYXNlIFVJV0tHZXN0dXJlVGFwT25MaW5r
V2l0aEdlc3R1cmU6CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVUYXBPbkxpbmtXaXRoR2VzdHVy
ZTsKKyAgICBjYXNlIFVJV0tHZXN0dXJlTWFrZVdlYlNlbGVjdGlvbjoKKyAgICAgICAgcmV0dXJu
IFdLR2VzdHVyZU1ha2VXZWJTZWxlY3Rpb247CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBXS0dlc3R1cmVMb3VwZTsKK30KKworc3RhdGljIGlubGluZSBVSVdL
R2VzdHVyZVR5cGUgdG9VSVdLR2VzdHVyZVR5cGUoV0tHZXN0dXJlVHlwZSBnZXN0dXJlVHlwZSkK
K3sKKyAgICBzd2l0Y2ggKGdlc3R1cmVUeXBlKSB7CisgICAgY2FzZSBXS0dlc3R1cmVMb3VwZToK
KyAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlTG91cGU7CisgICAgY2FzZSBXS0dlc3R1cmVPbmVG
aW5nZXJUYXA6CisgICAgICAgIHJldHVybiBVSVdLR2VzdHVyZU9uZUZpbmdlclRhcDsKKyAgICBj
YXNlIFdLR2VzdHVyZVRhcEFuZEFIYWxmOgorICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVUYXBB
bmRBSGFsZjsKKyAgICBjYXNlIFdLR2VzdHVyZURvdWJsZVRhcDoKKyAgICAgICAgcmV0dXJuIFVJ
V0tHZXN0dXJlRG91YmxlVGFwOworICAgIGNhc2UgV0tHZXN0dXJlVGFwQW5kSGFsZjoKKyAgICAg
ICAgcmV0dXJuIFVJV0tHZXN0dXJlVGFwQW5kSGFsZjsKKyAgICBjYXNlIFdLR2VzdHVyZURvdWJs
ZVRhcEluVW5lZGl0YWJsZToKKyAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlRG91YmxlVGFwSW5V
bmVkaXRhYmxlOworICAgIGNhc2UgV0tHZXN0dXJlT25lRmluZ2VyVGFwSW5VbmVkaXRhYmxlOgor
ICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVPbmVGaW5nZXJUYXBJblVuZWRpdGFibGU7CisgICAg
Y2FzZSBXS0dlc3R1cmVPbmVGaW5nZXJUYXBTZWxlY3RzQWxsOgorICAgICAgICByZXR1cm4gVUlX
S0dlc3R1cmVPbmVGaW5nZXJUYXBTZWxlY3RzQWxsOworICAgIGNhc2UgV0tHZXN0dXJlT25lRmlu
Z2VyRG91YmxlVGFwOgorICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVPbmVGaW5nZXJEb3VibGVU
YXA7CisgICAgY2FzZSBXS0dlc3R1cmVPbmVGaW5nZXJUcmlwbGVUYXA6CisgICAgICAgIHJldHVy
biBVSVdLR2VzdHVyZU9uZUZpbmdlclRyaXBsZVRhcDsKKyAgICBjYXNlIFdLR2VzdHVyZVR3b0Zp
bmdlclNpbmdsZVRhcDoKKyAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlVHdvRmluZ2VyU2luZ2xl
VGFwOworICAgIGNhc2UgV0tHZXN0dXJlVHdvRmluZ2VyUmFuZ2VkU2VsZWN0R2VzdHVyZToKKyAg
ICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlVHdvRmluZ2VyUmFuZ2VkU2VsZWN0R2VzdHVyZTsKKyAg
ICBjYXNlIFdLR2VzdHVyZVRhcE9uTGlua1dpdGhHZXN0dXJlOgorICAgICAgICByZXR1cm4gVUlX
S0dlc3R1cmVUYXBPbkxpbmtXaXRoR2VzdHVyZTsKKyAgICBjYXNlIFdLR2VzdHVyZU1ha2VXZWJT
ZWxlY3Rpb246CisgICAgICAgIHJldHVybiBVSVdLR2VzdHVyZU1ha2VXZWJTZWxlY3Rpb247Cisg
ICAgfQorfQorCitzdGF0aWMgaW5saW5lIFdLU2VsZWN0aW9uVG91Y2ggdG9XS1NlbGVjdGlvblRv
dWNoKFVJV0tTZWxlY3Rpb25Ub3VjaCB0b3VjaCkKK3sKKyAgICBzd2l0Y2ggKHRvdWNoKSB7Cisg
ICAgY2FzZSBVSVdLU2VsZWN0aW9uVG91Y2hTdGFydGVkOgorICAgICAgICByZXR1cm4gV0tTZWxl
Y3Rpb25Ub3VjaFN0YXJ0ZWQ7CisgICAgY2FzZSBVSVdLU2VsZWN0aW9uVG91Y2hNb3ZlZDoKKyAg
ICAgICAgcmV0dXJuIFdLU2VsZWN0aW9uVG91Y2hNb3ZlZDsKKyAgICBjYXNlIFVJV0tTZWxlY3Rp
b25Ub3VjaEVuZGVkOgorICAgICAgICByZXR1cm4gV0tTZWxlY3Rpb25Ub3VjaEVuZGVkOworICAg
IGNhc2UgVUlXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdGb3J3YXJkOgorICAgICAgICByZXR1
cm4gV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTW92aW5nRm9yd2FyZDsKKyAgICBjYXNlIFVJV0tTZWxl
Y3Rpb25Ub3VjaEVuZGVkTW92aW5nQmFja3dhcmQ6CisgICAgICAgIHJldHVybiBXS1NlbGVjdGlv
blRvdWNoRW5kZWRNb3ZpbmdCYWNrd2FyZDsKKyAgICBjYXNlIFVJV0tTZWxlY3Rpb25Ub3VjaEVu
ZGVkTm90TW92aW5nOgorICAgICAgICByZXR1cm4gV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTm90TW92
aW5nOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV0tTZWxl
Y3Rpb25Ub3VjaEVuZGVkOworfQorCitzdGF0aWMgaW5saW5lIFVJV0tTZWxlY3Rpb25Ub3VjaCB0
b1VJV0tTZWxlY3Rpb25Ub3VjaChXS1NlbGVjdGlvblRvdWNoIHRvdWNoKQoreworICAgIHN3aXRj
aCAodG91Y2gpIHsKKyAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hTdGFydGVkOgorICAgICAgICBy
ZXR1cm4gVUlXS1NlbGVjdGlvblRvdWNoU3RhcnRlZDsKKyAgICBjYXNlIFdLU2VsZWN0aW9uVG91
Y2hNb3ZlZDoKKyAgICAgICAgcmV0dXJuIFVJV0tTZWxlY3Rpb25Ub3VjaE1vdmVkOworICAgIGNh
c2UgV0tTZWxlY3Rpb25Ub3VjaEVuZGVkOgorICAgICAgICByZXR1cm4gVUlXS1NlbGVjdGlvblRv
dWNoRW5kZWQ7CisgICAgY2FzZSBXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdGb3J3YXJkOgor
ICAgICAgICByZXR1cm4gVUlXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdGb3J3YXJkOworICAg
IGNhc2UgV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTW92aW5nQmFja3dhcmQ6CisgICAgICAgIHJldHVy
biBVSVdLU2VsZWN0aW9uVG91Y2hFbmRlZE1vdmluZ0JhY2t3YXJkOworICAgIGNhc2UgV0tTZWxl
Y3Rpb25Ub3VjaEVuZGVkTm90TW92aW5nOgorICAgICAgICByZXR1cm4gVUlXS1NlbGVjdGlvblRv
dWNoRW5kZWROb3RNb3Zpbmc7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIFdLR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZSB0b1dLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZShVSUdlc3R1cmVSZWNvZ25p
emVyU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgVUlHZXN0
dXJlUmVjb2duaXplclN0YXRlUG9zc2libGU6CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVSZWNv
Z25pemVyU3RhdGVQb3NzaWJsZTsKKyAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJl
Z2FuOgorICAgICAgICByZXR1cm4gV0tHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW47CisgICAg
Y2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkOgorICAgICAgICByZXR1cm4gV0tH
ZXN0dXJlUmVjb2duaXplclN0YXRlQ2hhbmdlZDsKKyAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZUNhbmNlbGxlZDoKKyAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZUNhbmNlbGxlZDsKKyAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVkOgorICAg
ICAgICByZXR1cm4gV0tHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWQ7CisgICAgY2FzZSBVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGVGYWlsZWQ6CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVSZWNv
Z25pemVyU3RhdGVGYWlsZWQ7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIFVJR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZSB0b1VJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZShXS0dlc3R1cmVSZWNvZ25p
emVyU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgV0tHZXN0
dXJlUmVjb2duaXplclN0YXRlUG9zc2libGU6CisgICAgICAgIHJldHVybiBVSUdlc3R1cmVSZWNv
Z25pemVyU3RhdGVQb3NzaWJsZTsKKyAgICBjYXNlIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJl
Z2FuOgorICAgICAgICByZXR1cm4gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW47CisgICAg
Y2FzZSBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkOgorICAgICAgICByZXR1cm4gVUlH
ZXN0dXJlUmVjb2duaXplclN0YXRlQ2hhbmdlZDsKKyAgICBjYXNlIFdLR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZUNhbmNlbGxlZDoKKyAgICAgICAgcmV0dXJuIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZUNhbmNlbGxlZDsKKyAgICBjYXNlIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVkOgorICAg
ICAgICByZXR1cm4gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWQ7CisgICAgY2FzZSBXS0dl
c3R1cmVSZWNvZ25pemVyU3RhdGVGYWlsZWQ6CisgICAgICAgIHJldHVybiBVSUdlc3R1cmVSZWNv
Z25pemVyU3RhdGVGYWlsZWQ7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIFVJV0tTZWxlY3Rp
b25GbGFncyB0b1VJV0tTZWxlY3Rpb25GbGFncyhXS1NlbGVjdGlvbkZsYWdzIGZsYWcpCit7Cisg
ICAgc3dpdGNoIChmbGFnKSB7CisgICAgY2FzZSBXS05vbmU6CisgICAgICAgIHJldHVybiBVSVdL
Tm9uZTsKKyAgICBjYXNlIFdLV29yZElzTmVhclRhcDoKKyAgICAgICAgcmV0dXJuIFVJV0tXb3Jk
SXNOZWFyVGFwOworICAgIGNhc2UgV0tJc0Jsb2NrU2VsZWN0aW9uOgorICAgICAgICByZXR1cm4g
VUlXS0lzQmxvY2tTZWxlY3Rpb247CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIFdLSGFuZGxl
UG9zaXRpb24gdG9XS0hhbmRsZVBvc2l0aW9uKFVJV0tIYW5kbGVQb3NpdGlvbiBwb3NpdGlvbikK
K3sKKyAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7CisgICAgY2FzZSBVSVdLSGFuZGxlVG9wOgorICAg
ICAgICByZXR1cm4gV0tIYW5kbGVUb3A7CisgICAgY2FzZSBVSVdLSGFuZGxlUmlnaHQ6CisgICAg
ICAgIHJldHVybiBXS0hhbmRsZVJpZ2h0OworICAgIGNhc2UgVUlXS0hhbmRsZUJvdHRvbToKKyAg
ICAgICAgcmV0dXJuIFdLSGFuZGxlQm90dG9tOworICAgIGNhc2UgVUlXS0hhbmRsZUxlZnQ6Cisg
ICAgICAgIHJldHVybiBXS0hhbmRsZUxlZnQ7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZWxl
Y3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUoYm9vbCBlcnJvciwgV0tJbnRlcmFjdGlvblZpZXcgKnZp
ZXcsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUs
IHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3MpCit7CisgICAgaWYgKGVycm9y
KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChbdmlldyB3ZWJTZWxlY3Rpb25Bc3Npc3RhbnRdKQorICAgICAgICBbKFVJV0tT
ZWxlY3Rpb25Bc3Npc3RhbnQgKilbdmlldyB3ZWJTZWxlY3Rpb25Bc3Npc3RhbnRdIHNlbGVjdGlv
bkNoYW5nZWRXaXRoR2VzdHVyZUF0OihDR1BvaW50KXBvaW50IHdpdGhHZXN0dXJlOnRvVUlXS0dl
c3R1cmVUeXBlKChXS0dlc3R1cmVUeXBlKWdlc3R1cmVUeXBlKSB3aXRoU3RhdGU6dG9VSUdlc3R1
cmVSZWNvZ25pemVyU3RhdGUoc3RhdGljX2Nhc3Q8V0tHZXN0dXJlUmVjb2duaXplclN0YXRlPihn
ZXN0dXJlU3RhdGUpKSB3aXRoRmxhZ3M6KHRvVUlXS1NlbGVjdGlvbkZsYWdzKChXS1NlbGVjdGlv
bkZsYWdzKWZsYWdzKSldOworICAgIGVsc2UKKyAgICAgICAgWyhVSVdLVGV4dEludGVyYWN0aW9u
QXNzaXN0YW50ICopW3ZpZXcgaW50ZXJhY3Rpb25Bc3Npc3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRX
aXRoR2VzdHVyZUF0OihDR1BvaW50KXBvaW50IHdpdGhHZXN0dXJlOnRvVUlXS0dlc3R1cmVUeXBl
KChXS0dlc3R1cmVUeXBlKWdlc3R1cmVUeXBlKSB3aXRoU3RhdGU6dG9VSUdlc3R1cmVSZWNvZ25p
emVyU3RhdGUoc3RhdGljX2Nhc3Q8V0tHZXN0dXJlUmVjb2duaXplclN0YXRlPihnZXN0dXJlU3Rh
dGUpKSB3aXRoRmxhZ3M6KHRvVUlXS1NlbGVjdGlvbkZsYWdzKChXS1NlbGVjdGlvbkZsYWdzKWZs
YWdzKSldOworfQorCitzdGF0aWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoKGJvb2wg
ZXJyb3IsIFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
cG9pbnQsIHVpbnQzMl90IHRvdWNoKQoreworICAgIGlmIChlcnJvcikgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoW3ZpZXcg
d2ViU2VsZWN0aW9uQXNzaXN0YW50XSkKKyAgICAgICAgWyhVSVdLU2VsZWN0aW9uQXNzaXN0YW50
ICopW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNo
QXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNo
KChXS1NlbGVjdGlvblRvdWNoKXRvdWNoKV07CisgICAgZWxzZQorICAgICAgICBbKFVJV0tUZXh0
SW50ZXJhY3Rpb25Bc3Npc3RhbnQgKilbdmlldyBpbnRlcmFjdGlvbkFzc2lzdGFudF0gc2VsZWN0
aW9uQ2hhbmdlZFdpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3VjaDp0
b1VJV0tTZWxlY3Rpb25Ub3VjaCgoV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCldOworfQorCistICh2
b2lkKV9kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaDooV2ViS2l0OjpXS1NlbGVjdGlv
blRvdWNoKXRvdWNoIHdpdGhGbGFnczooV2ViS2l0OjpXS1NlbGVjdGlvbkZsYWdzKWZsYWdzIGdy
b3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6KENHRmxv
YXQpc2hyaW5rVGhyZXNob2xkCit7CisgICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgYmxvY2tT
ZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNoKChXS1NlbGVjdGlv
blRvdWNoKXRvdWNoKSB3aXRoRmxhZ3M6dG9VSVdLU2VsZWN0aW9uRmxhZ3MoKFdLU2VsZWN0aW9u
RmxhZ3MpZmxhZ3MpIGdyb3dUaHJlc2hvbGQ6Z3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6
c2hyaW5rVGhyZXNob2xkXTsKK30KKworLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoR2VzdHVy
ZUF0OihDR1BvaW50KXBvaW50IHdpdGhHZXN0dXJlOihVSVdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5
cGUgd2l0aFN0YXRlOihVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUpc3RhdGUKK3sKKyAgICBfcGFn
ZS0+c2VsZWN0V2l0aEdlc3R1cmUoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCBDaGFyYWN0ZXJH
cmFudWxhcml0eSwgdG9XS0dlc3R1cmVUeXBlKGdlc3R1cmVUeXBlKSwgdG9XS0dlc3R1cmVSZWNv
Z25pemVyU3RhdGUoc3RhdGUpLCBHZXN0dXJlQ2FsbGJhY2s6OmNyZWF0ZShbc2VsZl0oYm9vbCBl
cnJvciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlw
ZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncykgeworICAgICAgICBzZWxl
Y3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUoZXJyb3IsIHNlbGYsIHBvaW50LCBnZXN0dXJlVHlwZSwg
Z2VzdHVyZVN0YXRlLCBmbGFncyk7CisgICAgfSkpOworfQorCistICh2b2lkKWNoYW5nZVNlbGVj
dGlvbldpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3VjaDooVUlXS1Nl
bGVjdGlvblRvdWNoKXRvdWNoIGJhc2VJc1N0YXJ0OihCT09MKWJhc2VJc1N0YXJ0Cit7CisgICAg
X3BhZ2UtPnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKFdlYkNvcmU6OkludFBvaW50KHBvaW50
KSwgdG9XS1NlbGVjdGlvblRvdWNoKHRvdWNoKSwgYmFzZUlzU3RhcnQsIFRvdWNoZXNDYWxsYmFj
azo6Y3JlYXRlKFtzZWxmXShib29sIGVycm9yLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9p
bnQsIHVpbnQzMl90IHRvdWNoKSB7CisgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2go
ZXJyb3IsIHNlbGYsIHBvaW50LCB0b3VjaCk7CisgICAgfSkpOworfQorCistICh2b2lkKWNoYW5n
ZVNlbGVjdGlvbldpdGhUb3VjaGVzRnJvbTooQ0dQb2ludClmcm9tIHRvOihDR1BvaW50KXRvIHdp
dGhHZXN0dXJlOihVSVdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUgd2l0aFN0YXRlOihVSUdlc3R1
cmVSZWNvZ25pemVyU3RhdGUpZ2VzdHVyZVN0YXRlCit7CisgICAgX3BhZ2UtPnNlbGVjdFdpdGhU
d29Ub3VjaGVzKFdlYkNvcmU6OkludFBvaW50KGZyb20pLCBXZWJDb3JlOjpJbnRQb2ludCh0byks
IHRvV0tHZXN0dXJlVHlwZShnZXN0dXJlVHlwZSksIHRvV0tHZXN0dXJlUmVjb2duaXplclN0YXRl
KGdlc3R1cmVTdGF0ZSksIEdlc3R1cmVDYWxsYmFjazo6Y3JlYXRlKFtzZWxmXShib29sIGVycm9y
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1
aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzKSB7CisgICAgICAgIHNlbGVjdGlv
bkNoYW5nZWRXaXRoR2VzdHVyZShlcnJvciwgc2VsZiwgcG9pbnQsIGdlc3R1cmVUeXBlLCBnZXN0
dXJlU3RhdGUsIGZsYWdzKTsKKyAgICB9KSk7Cit9CisKKy0gKHZvaWQpY2hhbmdlQmxvY2tTZWxl
Y3Rpb25XaXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3aXRoU2VsZWN0aW9uVG91Y2g6KFVJV0tT
ZWxlY3Rpb25Ub3VjaCl0b3VjaCBmb3JIYW5kbGU6KFVJV0tIYW5kbGVQb3NpdGlvbiloYW5kbGUK
K3sKKyAgICBfcGFnZS0+dXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2goV2ViQ29yZTo6SW50
UG9pbnQocG9pbnQpLCB0b1dLU2VsZWN0aW9uVG91Y2godG91Y2gpLCB0b1dLSGFuZGxlUG9zaXRp
b24oaGFuZGxlKSk7Cit9CisKKy0gKFdLQXV0b0NvcnJlY3Rpb25EYXRhICopYXV0b2NvcnJlY3Rp
b25EYXRhCit7CisgICAgcmV0dXJuICZfYXV0b2NvcnJlY3Rpb25EYXRhOworfQorCisvLyBUaGUg
Y29tcGxldGlvbiBoYW5kbGVyIGNhbiBwYXNzIG5pbCBpZiBpbnB1dCBkb2VzIG5vdCBtYXRjaCB0
aGUgYWN0dWFsIHRleHQgcHJlY2VkaW5nIHRoZSBpbnNlcnRpb24gcG9pbnQuCistICh2b2lkKXJl
cXVlc3RBdXRvY29ycmVjdGlvblJlY3RzRm9yU3RyaW5nOihOU1N0cmluZyAqKWlucHV0IHdpdGhD
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3Rz
Rm9ySW5wdXQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKCFpbnB1dCB8fCAhW2lucHV0
IGxlbmd0aF0pIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLmF1dG9jb3JyZWN0aW9uSGFuZGxl
ciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKKyAgICBfcGFnZS0+cmVxdWVzdEF1dG9jb3Jy
ZWN0aW9uRGF0YShpbnB1dCwgQXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2s6OmNyZWF0ZShbc2Vs
ZiwgY29tcGxldGlvbkhhbmRsZXJdKGJvb2wsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0
cywgY29uc3QgU3RyaW5nJiBmb250TmFtZSwgZG91YmxlIGZvbnRTaXplLCB1aW50NjRfdCB0cmFp
dHMpIHsKKyAgICAgICAgQ0dSZWN0IGZpcnN0UmVjdCA9IENHUmVjdFplcm87CisgICAgICAgIENH
UmVjdCBsYXN0UmVjdCA9IENHUmVjdFplcm87CisgICAgICAgIGlmIChyZWN0cy5zaXplKCkpIHsK
KyAgICAgICAgICAgIGZpcnN0UmVjdCA9IHJlY3RzWzBdOworICAgICAgICAgICAgbGFzdFJlY3Qg
PSByZWN0c1tyZWN0cy5zaXplKCkgLSAxXTsKKyAgICAgICAgfQorCisgICAgICAgIFdLQXV0b0Nv
cnJlY3Rpb25EYXRhICphdXRvY29ycmVjdGlvbkRhdGEgPSBzZWxmLmF1dG9jb3JyZWN0aW9uRGF0
YTsKKyAgICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5mb250TmFtZSA9IGZvbnROYW1lOworICAg
ICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmZvbnRTaXplID0gZm9udFNpemU7CisgICAgICAgIGF1
dG9jb3JyZWN0aW9uRGF0YS0+Zm9udFRyYWl0cyA9IHRyYWl0czsKKyAgICAgICAgYXV0b2NvcnJl
Y3Rpb25EYXRhLT50ZXh0Rmlyc3RSZWN0ID0gZmlyc3RSZWN0OworICAgICAgICBhdXRvY29ycmVj
dGlvbkRhdGEtPnRleHRMYXN0UmVjdCA9IGxhc3RSZWN0OworCisgICAgICAgIGF1dG9jb3JyZWN0
aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyKHJlY3RzLnNpemUoKSA/IFtXS0F1dG9jb3Jy
ZWN0aW9uUmVjdHMgYXV0b2NvcnJlY3Rpb25SZWN0c1dpdGhSZWN0czpmaXJzdFJlY3QgbGFzdFJl
Y3Q6bGFzdFJlY3RdIDogbmlsKTsKKyAgICAgICAgW2F1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2Nv
cnJlY3Rpb25IYW5kbGVyIHJlbGVhc2VdOworICAgICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmF1
dG9jb3JyZWN0aW9uSGFuZGxlciA9IG5pbDsKKyAgICB9KSk7Cit9CisKKy0gKENHUmVjdCl0ZXh0
Rmlyc3RSZWN0Cit7CisgICAgcmV0dXJuIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3Np
dGlvbikgPyBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5maXJzdE1hcmtlZFJlY3QgOiBfYXV0b2NvcnJl
Y3Rpb25EYXRhLnRleHRGaXJzdFJlY3Q7Cit9CisKKy0gKENHUmVjdCl0ZXh0TGFzdFJlY3QKK3sK
KyAgICByZXR1cm4gKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0aW9uKSA/IF9wYWdl
LT5lZGl0b3JTdGF0ZSgpLmxhc3RNYXJrZWRSZWN0IDogX2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0
TGFzdFJlY3Q7Cit9CisKKy8vIFRoZSBjb21wbGV0aW9uIGhhbmRsZXIgc2hvdWxkIHBhc3MgdGhl
IHJlY3Qgb2YgdGhlIGNvcnJlY3Rpb24gdGV4dCBhZnRlciByZXBsYWNpbmcgdGhlIGlucHV0IHRl
eHQsIG9yIG5pbCBpZiB0aGUgcmVwbGFjZW1lbnQgY291bGQgbm90IGJlIHBlcmZvcm1lZC4KKy0g
KHZvaWQpYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcgKiljb3JyZWN0aW9uIHRvU3RyaW5n
OihOU1N0cmluZyAqKWlucHV0IHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoVUlXS0F1
dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzRm9yQ29ycmVjdGlvbikpY29tcGxldGlvbkhhbmRsZXIK
K3sKKyAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLmF1dG9jb3JyZWN0aW9uSGFuZGxlciA9IFtjb21w
bGV0aW9uSGFuZGxlciBjb3B5XTsKKyAgICBfcGFnZS0+YXBwbHlBdXRvY29ycmVjdGlvbihjb3Jy
ZWN0aW9uLCBpbnB1dCwgU3RyaW5nQ2FsbGJhY2s6OmNyZWF0ZShbc2VsZl0oYm9vbCAvKmVycm9y
Ki8sIFN0cmluZ0ltcGwqIHN0cmluZykgeworICAgICAgICBXS0F1dG9Db3JyZWN0aW9uRGF0YSAq
YXV0b2NvcnJlY3Rpb25EYXRhID0gc2VsZi5hdXRvY29ycmVjdGlvbkRhdGE7CisKKyAgICAgICAg
YXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIoc3RyaW5nID8gW1dLQXV0
b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOmF1dG9jb3JyZWN0
aW9uRGF0YS0+dGV4dEZpcnN0UmVjdCBsYXN0UmVjdDphdXRvY29ycmVjdGlvbkRhdGEtPnRleHRM
YXN0UmVjdF0gOiBuaWwpOworICAgICAgICBbYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVj
dGlvbkhhbmRsZXIgcmVsZWFzZV07CisgICAgICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2Nv
cnJlY3Rpb25IYW5kbGVyID0gbmlsOworICAgIH0pKTsKK30KKworLSAodm9pZClyZXF1ZXN0QXV0
b2NvcnJlY3Rpb25Db250ZXh0V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShVSVdLQXV0
b2NvcnJlY3Rpb25Db250ZXh0ICphdXRvY29ycmVjdGlvbkNvbnRleHQpKWNvbXBsZXRpb25IYW5k
bGVyCit7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgc3luY2hyb25vdXMgY2FsbCBhcyBzb29u
IGFzIEtleWJvYXJkIHJlbW92ZXMgbG9ja2luZyBvZiB0aGUgbWFpbiB0aHJlYWQuCisgICAgY29u
c3QgYm9vbCB1c2VTeW5jUmVxdWVzdCA9IHRydWU7CisKKyAgICBpZiAodXNlU3luY1JlcXVlc3Qp
IHsKKyAgICAgICAgU3RyaW5nIGJlZm9yZVRleHQ7CisgICAgICAgIFN0cmluZyBtYXJrZWRUZXh0
OworICAgICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0OworICAgICAgICBTdHJpbmcgYWZ0ZXJUZXh0
OworICAgICAgICB1aW50NjRfdCBsb2NhdGlvbjsKKyAgICAgICAgdWludDY0X3QgbGVuZ3RoOwor
ICAgICAgICBfcGFnZS0+Z2V0QXV0b2NvcnJlY3Rpb25Db250ZXh0KGJlZm9yZVRleHQsIG1hcmtl
ZFRleHQsIHNlbGVjdGVkVGV4dCwgYWZ0ZXJUZXh0LCBsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoW1dLQXV0b2NvcnJlY3Rpb25Db250ZXh0IGF1dG9jb3JyZWN0
aW9uQ29udGV4dFdpdGhEYXRhOmJlZm9yZVRleHQgbWFya2VkVGV4dDptYXJrZWRUZXh0IHNlbGVj
dGVkVGV4dDpzZWxlY3RlZFRleHQgYWZ0ZXJUZXh0OmFmdGVyVGV4dCBzZWxlY3RlZFJhbmdlSW5N
YXJrZWRUZXh0Ok5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGgpXSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgX2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlvbkNvbnRleHRIYW5kbGVy
ID0gW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldOworICAgICAgICBfcGFnZS0+cmVxdWVzdEF1dG9j
b3JyZWN0aW9uQ29udGV4dChBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjazo6Y3JlYXRlKFtz
ZWxmLCBjb21wbGV0aW9uSGFuZGxlcl0oYm9vbCAvKmVycm9yKi8sIGNvbnN0IFN0cmluZyYgYmVm
b3JlVGV4dCwgY29uc3QgU3RyaW5nJiBtYXJrZWRUZXh0LCBjb25zdCBTdHJpbmcmIHNlbGVjdGVk
VGV4dCwgY29uc3QgU3RyaW5nJiBhZnRlclRleHQsIHVpbnQ2NF90IGxvY2F0aW9uLCB1aW50NjRf
dCBsZW5ndGgpIHsKKyAgICAgICAgICAgIFdLQXV0b0NvcnJlY3Rpb25EYXRhICphdXRvY29ycmVj
dGlvbkRhdGEgPSBzZWxmLmF1dG9jb3JyZWN0aW9uRGF0YTsKKyAgICAgICAgICAgIGF1dG9jb3Jy
ZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25Db250ZXh0SGFuZGxlcihbV0tBdXRvY29ycmVjdGlv
bkNvbnRleHQgYXV0b2NvcnJlY3Rpb25Db250ZXh0V2l0aERhdGE6YmVmb3JlVGV4dCBtYXJrZWRU
ZXh0Om1hcmtlZFRleHQgc2VsZWN0ZWRUZXh0OnNlbGVjdGVkVGV4dCBhZnRlclRleHQ6YWZ0ZXJU
ZXh0IHNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQ6TlNNYWtlUmFuZ2UobG9jYXRpb24sIGxlbmd0
aCldKTsKKyAgICAgICAgfSkpOworICAgIH0KK30KKworLy8gVUlXZWJGb3JtQWNjZXNzb3J5RGVs
ZWdhdGUKKy0gKHZvaWQpYWNjZXNzb3J5RG9uZQoreworICAgIFtzZWxmIHJlc2lnbkZpcnN0UmVz
cG9uZGVyXTsKK30KKworLSAodm9pZClhY2Nlc3NvcnlUYWI6KEJPT0wpaXNOZXh0Cit7Cit9CisK
Ky0gKHZvaWQpYWNjZXNzb3J5QXV0b0ZpbGwKK3sKK30KKworLSAodm9pZClhY2Nlc3NvcnlDbGVh
cgoreworfQorCistICh2b2lkKV91cGRhdGVBY2Nlc3NvcnkKK3sKKyAgICAvLyBGSVhNRTogV2Ug
bmVlZCB0byBpbml0aWFsaXplIHdpdGggdmFsdWVzIGZyb20gdGhlIFdlYlByb2Nlc3MuCisgICAg
X2FjY2Vzc29yeS5uZXh0RW5hYmxlZCA9IFlFUzsKKyAgICBfYWNjZXNzb3J5LnByZXZpb3VzRW5h
YmxlZCA9IFlFUzsKKyAgICAKKyAgICBbX2FjY2Vzc29yeSBzZXRDbGVhclZpc2libGU6Tk9dOwor
CisgICAgLy8gRklYTUU6IGhpZGUgb3Igc2hvdyB0aGUgQXV0b0ZpbGwgYnV0dG9uIGFzIG5lZWRl
ZC4KK30KKworLy8gS2V5Ym9hcmQgaW50ZXJhY3Rpb24KKy8vIFVJVGV4dElucHV0IHByb3RvY29s
IGltcGxlbWVudGF0aW9uCisKKy0gKE5TU3RyaW5nICopdGV4dEluUmFuZ2U6KFVJVGV4dFJhbmdl
ICopcmFuZ2UKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKXJlcGxhY2VSYW5nZToo
VUlUZXh0UmFuZ2UgKilyYW5nZSB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0Cit7Cit9CisKKy0g
KFVJVGV4dFJhbmdlICopc2VsZWN0ZWRUZXh0UmFuZ2UKK3sKKyAgICByZXR1cm4gW1dLVGV4dFJh
bmdlIHRleHRSYW5nZVdpdGhTdGF0ZTpfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc05v
bmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSYW5nZTpfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlzRWRpdGFibGU6X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UmVjdDpfcGFnZS0+ZWRpdG9yU3Rh
dGUoKS5jYXJldFJlY3RBdFN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuZFJlY3Q6X3BhZ2UtPmVkaXRvclN0YXRlKCkuY2FyZXRSZWN0QXRFbmQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN0czpbc2VsZiB3ZWJTZWxlY3Rpb25SZWN0c10K
KyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVGV4dExlbmd0aDpfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5zZWxlY3RlZFRleHRMZW5ndGhdOworfQorCistIChDR1JlY3QpY2FyZXRSZWN0Rm9y
UG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb24KK3sKKyAgICByZXR1cm4gKChXS1Rl
eHRQb3NpdGlvbiAqKXBvc2l0aW9uKS5wb3NpdGlvblJlY3Q7Cit9CisKKy0gKE5TQXJyYXkgKilz
ZWxlY3Rpb25SZWN0c0ZvclJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlCit7CisgICAgcmV0dXJu
IFtXS1RleHRTZWxlY3Rpb25SZWN0IHRleHRTZWxlY3Rpb25SZWN0c1dpdGhXZWJSZWN0czooKFdL
VGV4dFJhbmdlICopcmFuZ2UpLnNlbGVjdGlvblJlY3RzXTsKK30KKworLSAodm9pZClzZXRTZWxl
Y3RlZFRleHRSYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZQoreworfQorCistIChCT09MKWhhc01h
cmtlZFRleHQKK3sKKyAgICByZXR1cm4gW19tYXJrZWRUZXh0IGxlbmd0aF07Cit9CisKKy0gKE5T
U3RyaW5nICopbWFya2VkVGV4dAoreworICAgIHJldHVybiBfbWFya2VkVGV4dC5nZXQoKTsKK30K
KworLSAoVUlUZXh0UmFuZ2UgKiltYXJrZWRUZXh0UmFuZ2UKK3sKKyAgICByZXR1cm4gbmlsOwor
fQorCistIChOU0RpY3Rpb25hcnkgKiltYXJrZWRUZXh0U3R5bGUKK3sKKyAgICByZXR1cm4gbmls
OworfQorCistICh2b2lkKXNldE1hcmtlZFRleHRTdHlsZTooTlNEaWN0aW9uYXJ5ICopc3R5bGVE
aWN0aW9uYXJ5Cit7Cit9CisKKy0gKHZvaWQpc2V0TWFya2VkVGV4dDooTlNTdHJpbmcgKiltYXJr
ZWRUZXh0IHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZQoreworICAgIF9tYXJr
ZWRUZXh0ID0gbWFya2VkVGV4dDsKKyAgICBfcGFnZS0+c2V0Q29tcG9zaXRpb24obWFya2VkVGV4
dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPigpLCBzZWxlY3RlZFJhbmdl
LmxvY2F0aW9uLCBzZWxlY3RlZFJhbmdlLmxlbmd0aCwgMCwgMCk7Cit9CisKKy0gKHZvaWQpdW5t
YXJrVGV4dAoreworICAgIF9tYXJrZWRUZXh0ID0gbmlsOworICAgIF9wYWdlLT5jb25maXJtQ29t
cG9zaXRpb24oKTsKK30KKworLSAoVUlUZXh0UG9zaXRpb24gKiliZWdpbm5pbmdPZkRvY3VtZW50
Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoVUlUZXh0UG9zaXRpb24gKillbmRPZkRvY3Vt
ZW50Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoVUlUZXh0UmFuZ2UgKil0ZXh0UmFuZ2VG
cm9tUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopZnJvbVBvc2l0aW9uIHRvUG9zaXRpb246KFVJ
VGV4dFBvc2l0aW9uICopdG9Qb3NpdGlvbgoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKFVJ
VGV4dFBvc2l0aW9uICopcG9zaXRpb25Gcm9tUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9z
aXRpb24gb2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKwor
LSAoVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbkZyb21Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24g
Kilwb3NpdGlvbiBpbkRpcmVjdGlvbjooVUlUZXh0TGF5b3V0RGlyZWN0aW9uKWRpcmVjdGlvbiBv
ZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChOU0Nv
bXBhcmlzb25SZXN1bHQpY29tcGFyZVBvc2l0aW9uOihVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9u
IHRvUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopb3RoZXIKK3sKKyAgICByZXR1cm4gTlNPcmRl
cmVkU2FtZTsKK30KKworLSAoTlNJbnRlZ2VyKW9mZnNldEZyb21Qb3NpdGlvbjooVUlUZXh0UG9z
aXRpb24gKilmcm9tIHRvUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopdG9Qb3NpdGlvbgorewor
ICAgIHJldHVybiAwOworfQorCistIChpZCA8VUlUZXh0SW5wdXRUb2tlbml6ZXI+KXRva2VuaXpl
cgoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb25X
aXRoaW5SYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZSBmYXJ0aGVzdEluRGlyZWN0aW9uOihVSVRl
eHRMYXlvdXREaXJlY3Rpb24pZGlyZWN0aW9uCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAo
VUlUZXh0UmFuZ2UgKiljaGFyYWN0ZXJSYW5nZUJ5RXh0ZW5kaW5nUG9zaXRpb246KFVJVGV4dFBv
c2l0aW9uICopcG9zaXRpb24gaW5EaXJlY3Rpb246KFVJVGV4dExheW91dERpcmVjdGlvbilkaXJl
Y3Rpb24KK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChVSVRleHRXcml0aW5nRGlyZWN0aW9u
KWJhc2VXcml0aW5nRGlyZWN0aW9uRm9yUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRp
b24gaW5EaXJlY3Rpb246KFVJVGV4dFN0b3JhZ2VEaXJlY3Rpb24pZGlyZWN0aW9uCit7CisgICAg
cmV0dXJuIFVJVGV4dFdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDsKK30KKworLSAodm9pZClz
ZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjooVUlUZXh0V3JpdGluZ0RpcmVjdGlvbil3cml0aW5nRGly
ZWN0aW9uIGZvclJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlCit7Cit9CisKKy0gKENHUmVjdClm
aXJzdFJlY3RGb3JSYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZQoreworICAgIHJldHVybiBDR1Jl
Y3RaZXJvOworfQorCisvKiBIaXQgdGVzdGluZy4gKi8KKy0gKFVJVGV4dFBvc2l0aW9uICopY2xv
c2VzdFBvc2l0aW9uVG9Qb2ludDooQ0dQb2ludClwb2ludAoreworICAgIHJldHVybiBuaWw7Cit9
CisKKy0gKFVJVGV4dFBvc2l0aW9uICopY2xvc2VzdFBvc2l0aW9uVG9Qb2ludDooQ0dQb2ludClw
b2ludCB3aXRoaW5SYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZQoreworICAgIHJldHVybiBuaWw7
Cit9CisKKy0gKFVJVGV4dFJhbmdlICopY2hhcmFjdGVyUmFuZ2VBdFBvaW50OihDR1BvaW50KXBv
aW50Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClkZWxldGVCYWNrd2FyZAorewor
ICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJkZWxldGVCYWNrd2Fy
ZCIpKTsKK30KKworLy8gSW5zZXJ0cyB0aGUgZ2l2ZW4gc3RyaW5nLCByZXBsYWNpbmcgYW55IHNl
bGVjdGVkIG9yIG1hcmtlZCB0ZXh0LgorLSAodm9pZClpbnNlcnRUZXh0OihOU1N0cmluZyAqKWFT
dHJpbmdWYWx1ZQoreworICAgIF9wYWdlLT5pbnNlcnRUZXh0KGFTdHJpbmdWYWx1ZSwgTlNOb3RG
b3VuZCwgMCk7Cit9CisKKy0gKEJPT0wpaGFzVGV4dAoreworICAgIHJldHVybiBZRVM7Cit9CisK
Ky8vIGVuZCBvZiBVSVRleHRJbnB1dCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorCisvLyBVSVRl
eHRJbnB1dFByaXZhdGUgcHJvdG9jb2wKKy8vIERpcmVjdCBhY2Nlc3MgdG8gdGhlIChwcml2YXRl
KSBVSVRleHRJbnB1dFRyYWl0cyBvYmplY3QuCistIChVSVRleHRJbnB1dFRyYWl0cyAqKXRleHRJ
bnB1dFRyYWl0cworeworICAgIGlmICghX3RyYWl0cykKKyAgICAgICAgX3RyYWl0cyA9IFtbVUlU
ZXh0SW5wdXRUcmFpdHMgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBfdHJhaXRzOworfQorCist
IChVSVRleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAqKWludGVyYWN0aW9uQXNzaXN0YW50Cit7Cisg
ICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gd2UncmUgaW4gVUlX
ZWJTZWxlY3Rpb25Nb2RlVGV4dE9ubHkgaG93ZXZlciBpdCBpcworICAgIC8vIHBvc3NpYmxlIHRo
YXQgaXQgY2FuIGJlIGNhbGxlZCB3aGlsZSB3ZSBhcmUgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIG1v
ZGVzLgorICAgIC8vIGFzc2VydCghX3dlYlNlbGVjdGlvbkFzc2lzdGFudCk7CisKKyAgICBpZiAo
IV90ZXh0U2VsZWN0aW9uQXNzaXN0YW50KQorICAgICAgICBfdGV4dFNlbGVjdGlvbkFzc2lzdGFu
dCA9IFtbVUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudCBhbGxvY10gaW5pdFdpdGhWaWV3OnNl
bGZdOworCisgICAgcmV0dXJuIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50LmdldCgpOworfQorCist
IChVSVdlYlNlbGVjdGlvbkFzc2lzdGFudCAqKXdlYlNlbGVjdGlvbkFzc2lzdGFudAoreworICAg
IHJldHVybiBfd2ViU2VsZWN0aW9uQXNzaXN0YW50LmdldCgpOworfQorCisKKy8vIE5TUmFuZ2Ug
c3VwcG9ydC4gIFdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRvIHRoZSBleHRlbnQgcG9zc2libGUs
IGFsdGhvdWdoIHNvbWUgc3VwcG9ydAorLy8gKGkuZS4gc2VsZWN0aW9uUmFuZ2UpIGhhcyBzaGlw
cGVkIGFzIEFQSS4KKy0gKE5TUmFuZ2Upc2VsZWN0aW9uUmFuZ2UKK3sKKyAgICByZXR1cm4gTlNN
YWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Cit9CisKKy0gKENHUmVjdClyZWN0Rm9yTlNSYW5nZToo
TlNSYW5nZSlyYW5nZQoreworICAgIHJldHVybiBDR1JlY3RaZXJvOworfQorCistIChOU1Jhbmdl
KV9tYXJrZWRUZXh0TlNSYW5nZQoreworICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5k
LCAwKTsKK30KKworLy8gRE9NIHJhbmdlIHN1cHBvcnQuCistIChET01SYW5nZSAqKXNlbGVjdGVk
RE9NUmFuZ2UKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKXNldFNlbGVjdGVkRE9N
UmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZmaW5pdHlEb3duc3RyZWFtOihCT09MKWFmZmluaXR5
RG93bnN0cmVhbQoreworfQorCisvLyBNb2RpZnkgdGV4dCB3aXRob3V0IHN0YXJ0aW5nIGEgbmV3
IHVuZG8gZ3JvdXBpbmcuCistICh2b2lkKXJlcGxhY2VSYW5nZVdpdGhUZXh0V2l0aG91dENsb3Np
bmdUeXBpbmc6KFVJVGV4dFJhbmdlICopcmFuZ2UgcmVwbGFjZW1lbnRUZXh0OihOU1N0cmluZyAq
KXRleHQKK3sKK30KKworLy8gQ2FyZXQgcmVjdCBzdXBwb3J0LiAgU2hvdWxkbid0IGJlIG5lY2Vz
c2FyeSwgYnV0IGZpcnN0UmVjdEZvclJhbmdlIGRvZXNuJ3Qgb2ZmZXIgcHJlY2lzZWx5CisvLyB0
aGUgc2FtZSBmdW5jdGlvbmFsaXR5LgorLSAoQ0dSZWN0KXJlY3RDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24KK3sKKyAgICByZXR1cm4gQ0dSZWN0WmVybzsKK30KKworLy8gV2ViIGV2ZW50cy4KKy0g
KEJPT0wpcmVxdWlyZXNLZXlFdmVudHMKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistICh2b2lk
KWhhbmRsZUtleVdlYkV2ZW50OihXZWJJT1NFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgX3BhZ2Ut
PmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh0aGVFdmVudCkpOwor
fQorCistIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooV2ViSU9TRXZlbnQgKilldmVudCBpc0No
YXJFdmVudDooQk9PTClpc0NoYXJFdmVudAoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBr
V2ViRW50ZXJLZXkgPSAweDAwMDM7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJCYWNr
c3BhY2VLZXkgPSAweDAwMDg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJSZXR1cm5L
ZXkgPSAweDAwMEQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJEZWxldGVLZXkgPSAw
eDAwN0Y7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJMZWZ0QXJyb3dLZXkgPSAweDAw
QUM7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJVcEFycm93S2V5ID0gMHgwMEFEOwor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrV2ViUmlnaHRBcnJvd0tleSA9IDB4MDBBRTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQga1dlYkRvd25BcnJvd0tleSA9IDB4MDBBRjsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQga1dlYkRlbGV0ZUZvcndhcmRLZXkgPSAweEY3Mjg7CisKKyAg
ICBpZiAoIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlICYmIGV2ZW50Lmlz
VGFiS2V5KQorICAgICAgICByZXR1cm4gTk87CisKKyAgICBCT09MIHNoaWZ0ID0gZXZlbnQubW9k
aWZpZXJGbGFncyAmIFdlYkV2ZW50RmxhZ01hc2tTaGlmdDsKKworICAgIHN3aXRjaCAoZXZlbnQu
Y2hhcmFjdGVyU2V0KSB7CisgICAgY2FzZSBXZWJFdmVudENoYXJhY3RlclNldFN5bWJvbDogewor
ICAgICAgICBTdHJpbmcgY29tbWFuZDsKKyAgICAgICAgTlNTdHJpbmcgKmNoYXJhY3RlcnMgPSBb
ZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXTsKKyAgICAgICAgaWYgKFtjaGFyYWN0
ZXJzIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzd2l0Y2ggKFtj
aGFyYWN0ZXJzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsKKyAgICAgICAgY2FzZSBrV2ViTGVmdEFy
cm93S2V5OgorICAgICAgICAgICAgY29tbWFuZCA9IHNoaWZ0ID8gQVNDSUlMaXRlcmFsKCJtb3Zl
TGVmdEFuZE1vZGlmeVNlbGVjdGlvbiIpIDogIEFTQ0lJTGl0ZXJhbCgibW92ZUxlZnQiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1dlYlVwQXJyb3dLZXk6CisgICAgICAg
ICAgICBjb21tYW5kID0gc2hpZnQgPyBBU0NJSUxpdGVyYWwoIm1vdmVVcEFuZE1vZGlmeVNlbGVj
dGlvbiIpIDogIEFTQ0lJTGl0ZXJhbCgibW92ZVVwIik7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIGtXZWJSaWdodEFycm93S2V5OgorICAgICAgICAgICAgY29tbWFuZCA9IHNo
aWZ0ID8gQVNDSUlMaXRlcmFsKCJtb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iKSA6ICBBU0NJ
SUxpdGVyYWwoIm1vdmVSaWdodCIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBrV2ViRG93bkFycm93S2V5OgorICAgICAgICAgICAgY29tbWFuZCA9IHNoaWZ0ID8gQVNDSUlM
aXRlcmFsKCJtb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIpIDogIEFTQ0lJTGl0ZXJhbCgibW92
ZURvd24iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghY29t
bWFuZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQo
Y29tbWFuZCk7CisgICAgICAgICAgICByZXR1cm4gWUVTOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIFdlYkV2ZW50Q2hhcmFjdGVyU2V0QVNDSUk6CisgICAgY2Fz
ZSBXZWJFdmVudENoYXJhY3RlclNldFVuaWNvZGU6IHsKKyAgICAgICAgTlNTdHJpbmcgKmNoYXJh
Y3RlcnMgPSBbZXZlbnQgY2hhcmFjdGVyc107CisgICAgICAgIGlmIChbY2hhcmFjdGVycyBsZW5n
dGhdID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3dpdGNoIChbY2hhcmFjdGVy
cyBjaGFyYWN0ZXJBdEluZGV4OjBdKSB7CisgICAgICAgIGNhc2Uga1dlYkJhY2tzcGFjZUtleToK
KyAgICAgICAgY2FzZSBrV2ViRGVsZXRlS2V5OgorICAgICAgICAgICAgW1tVSUtleWJvYXJkSW1w
bCBzaGFyZWRJbnN0YW5jZV0gZGVsZXRlRnJvbUlucHV0XTsKKyAgICAgICAgICAgIHJldHVybiBZ
RVM7CisKKyAgICAgICAgY2FzZSBrV2ViRW50ZXJLZXk6CisgICAgICAgIGNhc2Uga1dlYlJldHVy
bktleToKKyAgICAgICAgICAgIGlmIChpc0NoYXJFdmVudCkgeworICAgICAgICAgICAgICAgIC8v
IE1hcCBcciBmcm9tIEhXIGtleWJvYXJkIHRvIFxuIHRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiB0
aGUgc29mdCBrZXlib2FyZC4KKyAgICAgICAgICAgICAgICBbW1VJS2V5Ym9hcmRJbXBsIHNoYXJl
ZEluc3RhbmNlXSBhZGRJbnB1dFN0cmluZzpAIlxuIiB3aXRoRmxhZ3M6MF07CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFlFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBOTzsK
KworICAgICAgICBjYXNlIGtXZWJEZWxldGVGb3J3YXJkS2V5OgorICAgICAgICAgICAgX3BhZ2Ut
PmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVyYWwoImRlbGV0ZUZvcndhcmQiKSk7CisgICAg
ICAgICAgICByZXR1cm4gWUVTOworCisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIGlm
IChpc0NoYXJFdmVudCkgeworICAgICAgICAgICAgICAgIFtbVUlLZXlib2FyZEltcGwgc2hhcmVk
SW5zdGFuY2VdIGFkZElucHV0U3RyaW5nOmV2ZW50LmNoYXJhY3RlcnMgd2l0aEZsYWdzOmV2ZW50
LmtleWJvYXJkRmxhZ3NdOworICAgICAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisg
ICAgcmV0dXJuIE5POworfQorCisvLyBTZXRzIGEgYnVmZmVyIHRvIG1ha2Ugcm9vbSBmb3IgYXV0
b2NvcnJlY3Rpb24gdmlld3MKKy0gKHZvaWQpc2V0Qm90dG9tQnVmZmVySGVpZ2h0OihDR0Zsb2F0
KWJvdHRvbUJ1ZmZlcgoreworfQorCistIChVSVZpZXcgKilhdXRvbWF0aWNhbGx5U2VsZWN0ZWRP
dmVybGF5Cit7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFVJVGV4dEdyYW51bGFyaXR5KXNl
bGVjdGlvbkdyYW51bGFyaXR5Cit7CisgICAgcmV0dXJuIFVJVGV4dEdyYW51bGFyaXR5Q2hhcmFj
dGVyOworfQorCistICh2b2lkKWluc2VydERpY3RhdGlvblJlc3VsdDooTlNBcnJheSAqKWRpY3Rh
dGlvblJlc3VsdCB3aXRoQ29ycmVjdGlvbklkZW50aWZpZXI6KGlkKWNvcnJlY3Rpb25JZGVudGlm
aWVyCit7Cit9CisKKy8vIFNob3VsZCByZXR1cm4gYW4gYXJyYXkgb2YgTlNEaWN0aW9uYXJ5IG9i
amVjdHMgdGhhdCBrZXkvdmFsdWUgcGFyaWVzIGZvciB0aGUgZmluYWwgdGV4dCwgY29ycmVjdGlv
biBpZGVudGlmaWVyIGFuZAorLy8gYWx0ZXJuYXRpdmUgc2VsZWN0aW9uIGNvdW50cyB1c2luZyB0
aGUga2V5cyBkZWZpbmVkIGF0IHRoZSB0b3Agb2YgdGhpcyBoZWFkZXIuCistIChOU0FycmF5ICop
bWV0YWRhdGFEaWN0aW9uYXJpZXNGb3JEaWN0YXRpb25SZXN1bHRzCit7CisgICAgcmV0dXJuIG5p
bDsKK30KKworLy8gUmV0dXJucyB0aGUgZGljdGF0aW9uIHJlc3VsdCBib3VuZGFyaWVzIGZyb20g
cG9zaXRpb24gc28gdGhhdCB0ZXh0IHRoYXQgd2FzIG5vdCBkaWN0YXRlZCBjYW4gYmUgZXhjbHVk
ZWQgZnJvbSBsb2dnaW5nLgorLy8gSWYgdGhlc2UgYXJlIG5vdCBpbXBsZW1lbnRlZCwgbm8gdGV4
dCB3aWxsIGJlIGxvZ2dlZC4KKy0gKFVJVGV4dFBvc2l0aW9uICopcHJldmlvdXNVbnBlcnR1cmJl
ZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOihVSVRleHRQb3NpdGlvbiAqKXBv
c2l0aW9uCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoVUlUZXh0UG9zaXRpb24gKiluZXh0
VW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlvbjooVUlUZXh0UG9z
aXRpb24gKilwb3NpdGlvbgoreworICAgIHJldHVybiBuaWw7Cit9CisKKy8vIFRoZSBjYW4gYWxs
IGJlIChhbmQgaGF2ZSBiZWVuKSB0cml2aWFsbHkgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgVUlU
ZXh0SW5wdXQuICBEZXByZWNhdGUgYW5kIHJlbW92ZS4KKy0gKHZvaWQpbW92ZUJhY2t3YXJkOih1
bnNpZ25lZCljb3VudAoreworfQorCistICh2b2lkKW1vdmVGb3J3YXJkOih1bnNpZ25lZCljb3Vu
dAoreworfQorCistICh1bmljaGFyKWNoYXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKKy0gKE5TU3RyaW5nICopd29yZENvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbgoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKERPTVJhbmdlICopd29yZFJhbmdlQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClz
ZXRNYXJrZWRUZXh0OihOU1N0cmluZyAqKXRleHQKK3sKK30KKworLSAoQk9PTCloYXNDb250ZW50
Cit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAodm9pZClzZWxlY3RBbGwKK3sKK30KKworLSAo
VUlDb2xvciAqKXRleHRDb2xvckZvckNhcmV0U2VsZWN0aW9uCit7CisgICAgcmV0dXJuIFtVSUNv
bG9yIGJsYWNrQ29sb3JdOworfQorCistIChVSUZvbnQgKilmb250Rm9yQ2FyZXRTZWxlY3Rpb24K
K3sKKyAgICBDR0Zsb2F0IHpvb21TY2FsZSA9IDEuMDsgICAgLy8gRklYTUU6IHJldHJpZXZlIHRo
ZSBhY3R1YWwgZG9jdW1lbnQgc2NhbGUgZmFjdG9yLgorICAgIENHRmxvYXQgc2NhbGVkU2l6ZSA9
IF9hdXRvY29ycmVjdGlvbkRhdGEuZm9udFNpemU7CisgICAgaWYgKENHRkFicyh6b29tU2NhbGUg
LSAxLjApID4gRkxUX0VQU0lMT04pCisgICAgICAgIHNjYWxlZFNpemUgKj0gem9vbVNjYWxlOwor
ICAgIHJldHVybiBbVUlGb250IGZvbnRXaXRoRmFtaWx5TmFtZTpfYXV0b2NvcnJlY3Rpb25EYXRh
LmZvbnROYW1lIHRyYWl0czooVUlGb250VHJhaXQpX2F1dG9jb3JyZWN0aW9uRGF0YS5mb250VHJh
aXRzIHNpemU6c2NhbGVkU2l6ZV07Cit9CisKKy0gKEJPT0wpaGFzU2VsZWN0aW9uCit7CisgICAg
cmV0dXJuIE5POworfQorCistIChCT09MKWlzUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9z
aXRpb24gYXRCb3VuZGFyeTooVUlUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkgaW5EaXJlY3Rp
b246KFVJVGV4dERpcmVjdGlvbilkaXJlY3Rpb24KK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0g
KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb25Gcm9tUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICop
cG9zaXRpb24gdG9Cb3VuZGFyeTooVUlUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkgaW5EaXJl
Y3Rpb246KFVJVGV4dERpcmVjdGlvbilkaXJlY3Rpb24KK3sKKyAgICByZXR1cm4gbmlsOworfQor
CistIChCT09MKWlzUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb24gd2l0aGluVGV4
dFVuaXQ6KFVJVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGluRGlyZWN0aW9uOihVSVRleHRE
aXJlY3Rpb24pZGlyZWN0aW9uCit7CisgICAgcmV0dXJuIE5POworfQorCistIChVSVRleHRSYW5n
ZSAqKXJhbmdlRW5jbG9zaW5nUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb24gd2l0
aEdyYW51bGFyaXR5OihVSVRleHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVjdGlvbjoo
VUlUZXh0RGlyZWN0aW9uKWRpcmVjdGlvbgoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZv
aWQpdGFrZVRyYWl0c0Zyb206KFVJVGV4dElucHV0VHJhaXRzICopdHJhaXRzCit7CisgICAgW1tz
ZWxmIHRleHRJbnB1dFRyYWl0c10gdGFrZVRyYWl0c0Zyb206dHJhaXRzXTsKK30KKworLy8gRklY
TUU6IEkgd2FudCB0byBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlc2UgZnVuY3Rpb25zLCBidXQgSSdt
IGxlYXZpbmcgaXQgZm9yIG5vdworLy8gdG8gbWFrZSBpdCBlYXNpZXIgdG8gbG9vayB1cCB0aGUg
Y29ycmVzcG9uZGluZyBmdW5jdGlvbnMgaW4gVUlLaXQuCisKKy0gKHZvaWQpX3N0YXJ0QXNzaXN0
aW5nS2V5Ym9hcmQKK3sKKyAgICBbc2VsZiB1c2VTZWxlY3Rpb25Bc3Npc3RhbnRXaXRoTW9kZTpV
SVdlYlNlbGVjdGlvbk1vZGVUZXh0T25seV07Cit9CisKKy0gKHZvaWQpX3N0b3BBc3Npc3RpbmdL
ZXlib2FyZAoreworICAgIFtzZWxmIHVzZVNlbGVjdGlvbkFzc2lzdGFudFdpdGhNb2RlOlVJV2Vi
U2VsZWN0aW9uTW9kZVdlYl07Cit9CisKKy0gKHZvaWQpX3N0YXJ0QXNzaXN0aW5nTm9kZQorewor
ICAgIF9pc0VkaXRhYmxlID0gWUVTOworICAgIGlmICghW3NlbGYgaXNGaXJzdFJlc3BvbmRlcl0p
CisgICAgICAgIFtzZWxmIGJlY29tZUZpcnN0UmVzcG9uZGVyXTsKKworICAgIFtzZWxmIF9zdGFy
dEFzc2lzdGluZ0tleWJvYXJkXTsKKyAgICBbc2VsZiByZWxvYWRJbnB1dFZpZXdzXTsKKyAgICBb
c2VsZiBfdXBkYXRlQWNjZXNzb3J5XTsKK30KKworLSAodm9pZClfc3RvcEFzc2lzdGluZ05vZGUK
K3sKKyAgICBfaXNFZGl0YWJsZSA9IE5POworCisgICAgW3NlbGYgX3N0b3BBc3Npc3RpbmdLZXli
b2FyZF07CisgICAgW3NlbGYgcmVsb2FkSW5wdXRWaWV3c107CisgICAgW3NlbGYgX3VwZGF0ZUFj
Y2Vzc29yeV07Cit9CisKKy0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQKK3sKKyAgICAvLyBGSVhN
RTogV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdG8gZG8gaWYgdGhlIHNlbGVjdGlvbiBpcyBj
aGFuZ2VkIGJ5IEphdmFzY3JpcHQuCisgICAgaWYgKF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50KSB7
CisgICAgICAgIF9tYXJrZWRUZXh0ID0gKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmhhc0NvbXBvc2l0
aW9uKSA/IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLm1hcmtlZFRleHQgOiBTdHJpbmcoKTsKKyAgICAg
ICAgaWYgKCFfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMpCisgICAgICAgICAgICBbX3RleHRTZWxl
Y3Rpb25Bc3Npc3RhbnQgc2VsZWN0aW9uQ2hhbmdlZF07CisgICAgfSBlbHNlCisgICAgICAgIFtf
d2ViU2VsZWN0aW9uQXNzaXN0YW50IHNlbGVjdGlvbkNoYW5nZWRdOworfQorCisjcHJhZ21hIG1h
cmsgLSBJbXBsZW1lbnRhdGlvbiBvZiBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXJE
ZWxlZ2F0ZS4KKworLSAoQk9PTClzaG91bGRJZ25vcmVXZWJUb3VjaAoreworICAgIHJldHVybiBO
TzsKK30KKworLSAoQk9PTClpc0FueVRvdWNoT3ZlckFjdGl2ZUFyZWE6KE5TU2V0ICopdG91Y2hl
cworeworICAgIHJldHVybiBZRVM7Cit9CisKK0BlbmQKKworLy8gVUlUZXh0UmFuZ2UsIFVJVGV4
dFBvc2l0aW9uIGFuZCBVSVRleHRTZWxlY3Rpb25SZWN0IGltcGxlbWVudGF0aW9ucyBmb3IgV0sy
CisKK0BpbXBsZW1lbnRhdGlvbiBXS1RleHRSYW5nZSAoVUlUZXh0SW5wdXRBZGRpdGlvbnMpCisK
Ky0gKEJPT0wpX2lzQ2FyZXQKK3sKKyAgICByZXR1cm4gc2VsZi5lbXB0eTsKK30KKworLSAoQk9P
TClfaXNSYW5nZWQKK3sKKyAgICByZXR1cm4gIXNlbGYuZW1wdHk7Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdLVGV4dFJhbmdlCisKKysoV0tUZXh0UmFuZ2UgKil0ZXh0UmFuZ2VXaXRo
U3RhdGU6KEJPT0wpaXNOb25lIGlzUmFuZ2U6KEJPT0wpaXNSYW5nZSBpc0VkaXRhYmxlOihCT09M
KWlzRWRpdGFibGUgc3RhcnRSZWN0OihDR1JlY3Qpc3RhcnRSZWN0IGVuZFJlY3Q6KENHUmVjdCll
bmRSZWN0IHNlbGVjdGlvblJlY3RzOihOU0FycmF5ICopc2VsZWN0aW9uUmVjdHMgc2VsZWN0ZWRU
ZXh0TGVuZ3RoOihOU1VJbnRlZ2VyKXNlbGVjdGVkVGV4dExlbmd0aAoreworICAgIFdLVGV4dFJh
bmdlICpyYW5nZSA9IFtbV0tUZXh0UmFuZ2UgYWxsb2NdIGluaXRdOworICAgIHJhbmdlLmlzTm9u
ZSA9IGlzTm9uZTsKKyAgICByYW5nZS5pc1JhbmdlID0gaXNSYW5nZTsKKyAgICByYW5nZS5pc0Vk
aXRhYmxlID0gaXNFZGl0YWJsZTsKKyAgICByYW5nZS5zdGFydFJlY3QgPSBzdGFydFJlY3Q7Cisg
ICAgcmFuZ2UuZW5kUmVjdCA9IGVuZFJlY3Q7CisgICAgcmFuZ2Uuc2VsZWN0ZWRUZXh0TGVuZ3Ro
ID0gc2VsZWN0ZWRUZXh0TGVuZ3RoOworICAgIHJhbmdlLnNlbGVjdGlvblJlY3RzID0gc2VsZWN0
aW9uUmVjdHM7CisgICAgcmV0dXJuIFtyYW5nZSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIFtzZWxmLnNlbGVjdGlvblJlY3RzIHJlbGVhc2VdOworICAgIFtzdXBl
ciBkZWFsbG9jXTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgoreworICAgIHJldHVy
biBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAKCVwKSAtIHN0YXJ0OiVALCBlbmQ6JUAi
LCBbc2VsZiBjbGFzc10sIHNlbGYsIE5TU3RyaW5nRnJvbUNHUmVjdChzZWxmLnN0YXJ0UmVjdCks
IE5TU3RyaW5nRnJvbUNHUmVjdChzZWxmLmVuZFJlY3QpXTsKK30KKworLSAoV0tUZXh0UG9zaXRp
b24gKilzdGFydAoreworICAgIFdLVGV4dFBvc2l0aW9uICpwb3MgPSBbV0tUZXh0UG9zaXRpb24g
dGV4dFBvc2l0aW9uV2l0aFJlY3Q6c2VsZi5zdGFydFJlY3RdOworICAgIHJldHVybiBwb3M7Cit9
CisKKy0gKFVJVGV4dFBvc2l0aW9uICopZW5kCit7CisgICAgV0tUZXh0UG9zaXRpb24gKnBvcyA9
IFtXS1RleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb25XaXRoUmVjdDpzZWxmLmVuZFJlY3RdOworICAg
IHJldHVybiBwb3M7Cit9CisKKy0gKEJPT0wpaXNFbXB0eQoreworICAgIHJldHVybiAhc2VsZi5p
c1JhbmdlOworfQorCisvLyBGSVhNRTogT3ZlcnJpZGluZyBpc0VxdWFsOiB3aXRob3V0IG92ZXJy
aWRpbmcgaGFzaCB3aWxsIGNhdXNlIHRyb3VibGUgaWYgdGhpcyBldmVyIGdvZXMgaW50byBhbiBO
U1NldCBvciBpcyB0aGUga2V5IGluIGFuIE5TRGljdGlvbmFyeSwKKy8vIHNpbmNlIHR3byBlcXVh
bCBpdGVtcyBjb3VsZCBoYXZlIGRpZmZlcmVudCBoYXNoZXMuCistIChCT09MKWlzRXF1YWw6KGlk
KW90aGVyCit7CisgICAgaWYgKCFbb3RoZXIgaXNLaW5kT2ZDbGFzczpbV0tUZXh0UmFuZ2UgY2xh
c3NdXSkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgV0tUZXh0UmFuZ2UgKm90aGVyUmFuZ2Ug
PSAoV0tUZXh0UmFuZ2UgKilvdGhlcjsKKworICAgIGlmIChzZWxmID09IG90aGVyKQorICAgICAg
ICByZXR1cm4gWUVTOworCisgICAgLy8gRklYTUU6IFByb2JhYmx5IGluY29ycmVjdCBmb3IgZXF1
YWxpdHkgdG8gaWdub3JlIHNvIG11Y2ggb2YgdGhlIG9iamVjdCBzdGF0ZS4KKyAgICAvLyBJdCBp
Z25vcmVzIGlzTm9uZSwgaXNFZGl0YWJsZSwgc2VsZWN0ZWRUZXh0TGVuZ3RoLCBhbmQgc2VsZWN0
aW9uUmVjdHMuCisKKyAgICBpZiAoc2VsZi5pc1JhbmdlKSB7CisgICAgICAgIGlmICghb3RoZXJS
YW5nZS5pc1JhbmdlKQorICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICByZXR1cm4gQ0dS
ZWN0RXF1YWxUb1JlY3Qoc2VsZi5zdGFydFJlY3QsIG90aGVyUmFuZ2Uuc3RhcnRSZWN0KSAmJiBD
R1JlY3RFcXVhbFRvUmVjdChzZWxmLmVuZFJlY3QsIG90aGVyUmFuZ2UuZW5kUmVjdCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKG90aGVyUmFuZ2UuaXNSYW5nZSkKKyAgICAgICAgICAgIHJl
dHVybiBOTzsKKyAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgaXNOb25lIGhl
cmU/CisgICAgICAgIHJldHVybiBDR1JlY3RFcXVhbFRvUmVjdChzZWxmLnN0YXJ0UmVjdCwgb3Ro
ZXJSYW5nZS5zdGFydFJlY3QpOworICAgIH0KK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
V0tUZXh0UG9zaXRpb24KKworQHN5bnRoZXNpemUgcG9zaXRpb25SZWN0ID0gX3Bvc2l0aW9uUmVj
dDsKKworKyAoV0tUZXh0UG9zaXRpb24gKil0ZXh0UG9zaXRpb25XaXRoUmVjdDooQ0dSZWN0KXBv
c2l0aW9uUmVjdAoreworICAgIFdLVGV4dFBvc2l0aW9uICpwb3MgPVtbV0tUZXh0UG9zaXRpb24g
YWxsb2NdIGluaXRdOworICAgIHBvcy5wb3NpdGlvblJlY3QgPSBwb3NpdGlvblJlY3Q7CisgICAg
cmV0dXJuIFtwb3MgYXV0b3JlbGVhc2VdOworfQorCisvLyBGSVhNRTogT3ZlcnJpZGluZyBpc0Vx
dWFsOiB3aXRob3V0IG92ZXJyaWRpbmcgaGFzaCB3aWxsIGNhdXNlIHRyb3VibGUgaWYgdGhpcyBl
dmVyIGdvZXMgaW50byBhIE5TU2V0IG9yIGlzIHRoZSBrZXkgaW4gYW4gTlNEaWN0aW9uYXJ5LAor
Ly8gc2luY2UgdHdvIGVxdWFsIGl0ZW1zIGNvdWxkIGhhdmUgZGlmZmVyZW50IGhhc2hlcy4KKy0g
KEJPT0wpaXNFcXVhbDooaWQpb3RoZXIKK3sKKyAgICBpZiAoIVtvdGhlciBpc0tpbmRPZkNsYXNz
OltXS1RleHRQb3NpdGlvbiBjbGFzc11dKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICByZXR1
cm4gQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5wb3NpdGlvblJlY3QsICgoV0tUZXh0UG9zaXRpb24g
KilvdGhlcikucG9zaXRpb25SZWN0KTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgor
eworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjxXS1RleHRQb3NpdGlv
bjogJXAsIHslQH0+Iiwgc2VsZiwgTlNTdHJpbmdGcm9tQ0dSZWN0KHNlbGYucG9zaXRpb25SZWN0
KV07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLVGV4dFNlbGVjdGlvblJlY3QKKwor
LSAoaWQpaW5pdFdpdGhXZWJSZWN0OihXZWJTZWxlY3Rpb25SZWN0ICopd1JlY3QKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmIChzZWxmKQorICAgICAgICBzZWxmLndlYlJlY3Qg
PSB3UmVjdDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBzZWxmLndlYlJlY3QgPSBuaWw7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisvLyBGSVhN
RTogd2UgYXJlIHVzaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gZm9yIG5vdworLy8gdGhhdCB1c2Vz
IFdlYlNlbGVjdGlvblJlY3QsIGJ1dCB3ZSB3YW50IHRvIHByb3ZpZGUgb3VyIG93bgorLy8gYmFz
ZWQgb24gV2ViQ29yZTo6U2VsZWN0aW9uUmVjdC4KKworKyAoTlNBcnJheSAqKXRleHRTZWxlY3Rp
b25SZWN0c1dpdGhXZWJSZWN0czooTlNBcnJheSAqKXdlYlJlY3RzCit7CisgICAgTlNNdXRhYmxl
QXJyYXkgKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OndlYlJlY3Rz
LmNvdW50XTsKKyAgICBmb3IgKFdlYlNlbGVjdGlvblJlY3QgKndlYlJlY3QgaW4gd2ViUmVjdHMp
IHsKKyAgICAgICAgUmV0YWluUHRyPFdLVGV4dFNlbGVjdGlvblJlY3Q+IHJlY3QgPSBhZG9wdE5T
KFtbV0tUZXh0U2VsZWN0aW9uUmVjdCBhbGxvY10gaW5pdFdpdGhXZWJSZWN0OndlYlJlY3RdKTsK
KyAgICAgICAgW2FycmF5IGFkZE9iamVjdDpyZWN0LmdldCgpXTsKKyAgICB9CisgICAgcmV0dXJu
IGFycmF5OworfQorCistIChDR1JlY3QpcmVjdAoreworICAgIHJldHVybiBfd2ViUmVjdC5yZWN0
OworfQorCistIChVSVRleHRXcml0aW5nRGlyZWN0aW9uKXdyaXRpbmdEaXJlY3Rpb24KK3sKKyAg
ICByZXR1cm4gKFVJVGV4dFdyaXRpbmdEaXJlY3Rpb24pX3dlYlJlY3Qud3JpdGluZ0RpcmVjdGlv
bjsKK30KKworLSAoVUlUZXh0UmFuZ2UgKilyYW5nZQoreworICAgIHJldHVybiBuaWw7Cit9CisK
Ky0gKEJPT0wpY29udGFpbnNTdGFydAoreworICAgIHJldHVybiBfd2ViUmVjdC5jb250YWluc1N0
YXJ0OworfQorCistIChCT09MKWNvbnRhaW5zRW5kCit7CisgICAgcmV0dXJuIF93ZWJSZWN0LmNv
bnRhaW5zRW5kOworfQorCistIChCT09MKWlzVmVydGljYWwKK3sKKyAgICByZXR1cm4gIV93ZWJS
ZWN0LmlzSG9yaXpvbnRhbDsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tBdXRvY29y
cmVjdGlvblJlY3RzCisKKysgKFdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqKWF1dG9jb3JyZWN0aW9u
UmVjdHNXaXRoUmVjdHM6KENHUmVjdClmaXJzdFJlY3QgbGFzdFJlY3Q6KENHUmVjdClsYXN0UmVj
dAoreworICAgIFdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHMgPVtbV0tBdXRvY29ycmVjdGlv
blJlY3RzIGFsbG9jXSBpbml0XTsKKyAgICByZWN0cy5maXJzdFJlY3QgPSBmaXJzdFJlY3Q7Cisg
ICAgcmVjdHMubGFzdFJlY3QgPSBsYXN0UmVjdDsKKyAgICByZXR1cm4gW3JlY3RzIGF1dG9yZWxl
YXNlXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tBdXRvY29ycmVjdGlvbkNvbnRl
eHQKKworKyAoV0tBdXRvY29ycmVjdGlvbkNvbnRleHQgKilhdXRvY29ycmVjdGlvbkNvbnRleHRX
aXRoRGF0YTooTlNTdHJpbmcgKiliZWZvcmVUZXh0IG1hcmtlZFRleHQ6KE5TU3RyaW5nICopbWFy
a2VkVGV4dCBzZWxlY3RlZFRleHQ6KE5TU3RyaW5nICopc2VsZWN0ZWRUZXh0IGFmdGVyVGV4dDoo
TlNTdHJpbmcgKilhZnRlclRleHQgc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dDooTlNSYW5nZSly
YW5nZQoreworICAgIFdLQXV0b2NvcnJlY3Rpb25Db250ZXh0ICpjb250ZXh0ID0gW1tXS0F1dG9j
b3JyZWN0aW9uQ29udGV4dCBhbGxvY10gaW5pdF07CisKKyAgICBpZiAoW2JlZm9yZVRleHQgbGVu
Z3RoXSkKKyAgICAgICAgY29udGV4dC5jb250ZXh0QmVmb3JlU2VsZWN0aW9uID0gW2JlZm9yZVRl
eHQgY29weV07CisgICAgaWYgKFtzZWxlY3RlZFRleHQgbGVuZ3RoXSkKKyAgICAgICAgY29udGV4
dC5zZWxlY3RlZFRleHQgPSBbc2VsZWN0ZWRUZXh0IGNvcHldOworICAgIGlmIChbbWFya2VkVGV4
dCBsZW5ndGhdKQorICAgICAgICBjb250ZXh0Lm1hcmtlZFRleHQgPSBbbWFya2VkVGV4dCBjb3B5
XTsKKyAgICBpZiAoW2FmdGVyVGV4dCBsZW5ndGhdKQorICAgICAgICBjb250ZXh0LmNvbnRleHRB
ZnRlclNlbGVjdGlvbiA9IFthZnRlclRleHQgY29weV07CisgICAgY29udGV4dC5yYW5nZUluTWFy
a2VkVGV4dCA9IHJhbmdlOworICAgIHJldHVybiBbY29udGV4dCBhdXRvcmVsZWFzZV07Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtzZWxmLmNvbnRleHRCZWZvcmVTZWxlY3Rpb24gcmVs
ZWFzZV07CisgICAgW3NlbGYubWFya2VkVGV4dCByZWxlYXNlXTsKKyAgICBbc2VsZi5zZWxlY3Rl
ZFRleHQgcmVsZWFzZV07CisgICAgW3NlbGYuY29udGV4dEFmdGVyU2VsZWN0aW9uIHJlbGVhc2Vd
OworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLU2Nyb2xsVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XS1Njcm9sbFZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Nzc0MGVkNzVkZjJlMmU3NDBk
NmQ3ZTIzYzdhMmNhMjQ5ZWI3NTRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9XS1Njcm9sbFZpZXcuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCA8VUlLaXQvVUlXZWJTY3JvbGxWaWV3Lmg+CisKK0BpbnRlcmZhY2UgV0tTY3Jv
bGxWaWV3IDogVUlXZWJTY3JvbGxWaWV3CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IGlkIDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4gaW50ZXJuYWxEZWxlZ2F0ZTsKKworQGVuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS1Njcm9sbFZpZXcubW0gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLU2Nyb2xsVmlldy5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
YzRiZjAxODAyNTU4ZTRjNzM5OGU2NzJkM2NkZGZiNjUzYmZmNzdmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS1Njcm9sbFZpZXcubW0KQEAgLTAsMCAr
MSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLU2Ny
b2xsVmlldy5oIgorCitAaW50ZXJmYWNlIFdLU2Nyb2xsVmlld0RlbGVnYXRlRm9yd2FyZGVyIDog
TlNPYmplY3QgPFVJU2Nyb2xsVmlld0RlbGVnYXRlPgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhJbnRlcm5hbERlbGVnYXRlOihpZCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+KWludGVybmFsRGVs
ZWdhdGUgZXh0ZXJuYWxEZWxlZ2F0ZTooaWQgPFVJU2Nyb2xsVmlld0RlbGVnYXRlPilleHRlcm5h
bERlbGVnYXRlOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1Njcm9sbFZpZXdEZWxlZ2F0
ZUZvcndhcmRlciB7CisgICAgaWQgPFVJU2Nyb2xsVmlld0RlbGVnYXRlPiBfaW50ZXJuYWxEZWxl
Z2F0ZTsKKyAgICBpZCA8VUlTY3JvbGxWaWV3RGVsZWdhdGU+IF9leHRlcm5hbERlbGVnYXRlOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnRlcm5hbERlbGVnYXRlOihpZCA8VUlTY3Jv
bGxWaWV3RGVsZWdhdGU+KWludGVybmFsRGVsZWdhdGUgZXh0ZXJuYWxEZWxlZ2F0ZTooaWQgPFVJ
U2Nyb2xsVmlld0RlbGVnYXRlPilleHRlcm5hbERlbGVnYXRlCit7CisgICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgX2ludGVy
bmFsRGVsZWdhdGUgPSBpbnRlcm5hbERlbGVnYXRlOworICAgIF9leHRlcm5hbERlbGVnYXRlID0g
ZXh0ZXJuYWxEZWxlZ2F0ZTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNNZXRob2RTaWdu
YXR1cmUgKiltZXRob2RTaWduYXR1cmVGb3JTZWxlY3RvcjooU0VMKWFTZWxlY3RvcgoreworICAg
IE5TTWV0aG9kU2lnbmF0dXJlICpzaWduYXR1cmUgPSBbc3VwZXIgbWV0aG9kU2lnbmF0dXJlRm9y
U2VsZWN0b3I6YVNlbGVjdG9yXTsKKyAgICBpZiAoIXNpZ25hdHVyZSkKKyAgICAgICAgc2lnbmF0
dXJlID0gWyhOU09iamVjdCAqKV9pbnRlcm5hbERlbGVnYXRlIG1ldGhvZFNpZ25hdHVyZUZvclNl
bGVjdG9yOmFTZWxlY3Rvcl07CisgICAgaWYgKCFzaWduYXR1cmUpCisgICAgICAgIHNpZ25hdHVy
ZSA9IFsoTlNPYmplY3QgKilfZXh0ZXJuYWxEZWxlZ2F0ZSBtZXRob2RTaWduYXR1cmVGb3JTZWxl
Y3RvcjphU2VsZWN0b3JdOworICAgIHJldHVybiBzaWduYXR1cmU7Cit9CisKKy0gKEJPT0wpcmVz
cG9uZHNUb1NlbGVjdG9yOihTRUwpYVNlbGVjdG9yCit7CisgICAgcmV0dXJuIFtzdXBlciByZXNw
b25kc1RvU2VsZWN0b3I6YVNlbGVjdG9yXSB8fCBbX2ludGVybmFsRGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOmFTZWxlY3Rvcl0gfHwgW19leHRlcm5hbERlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjphU2VsZWN0b3JdOworfQorCistICh2b2lkKWZvcndhcmRJbnZvY2F0aW9uOihOU0ludm9j
YXRpb24gKilhbkludm9jYXRpb24KK3sKKyAgICBCT09MIG1lc3NhZ2VIYW5kbGVkID0gTk87Cisg
ICAgaWYgKFtfaW50ZXJuYWxEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6W2FuSW52b2NhdGlv
biBzZWxlY3Rvcl1dKSB7CisgICAgICAgIFthbkludm9jYXRpb24gaW52b2tlV2l0aFRhcmdldDpf
aW50ZXJuYWxEZWxlZ2F0ZV07CisgICAgICAgIG1lc3NhZ2VIYW5kbGVkID0gWUVTOworICAgIH0K
KyAgICBpZiAoW19leHRlcm5hbERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpbYW5JbnZvY2F0
aW9uIHNlbGVjdG9yXV0pIHsKKyAgICAgICAgW2FuSW52b2NhdGlvbiBpbnZva2VXaXRoVGFyZ2V0
Ol9leHRlcm5hbERlbGVnYXRlXTsKKyAgICAgICAgbWVzc2FnZUhhbmRsZWQgPSBZRVM7CisgICAg
fQorICAgIGlmICghbWVzc2FnZUhhbmRsZWQpCisgICAgICAgIFtzdXBlciBmb3J3YXJkSW52b2Nh
dGlvbjphbkludm9jYXRpb25dOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1Njcm9s
bFZpZXcgeworICAgIGlkIDxVSVNjcm9sbFZpZXdEZWxlZ2F0ZT4gX2V4dGVybmFsRGVsZWdhdGU7
CisgICAgV0tTY3JvbGxWaWV3RGVsZWdhdGVGb3J3YXJkZXIgKl9kZWxlZ2F0ZUZvcndhcmRlcjsK
K30KKworLSAoQk9PTCl0b3VjaGVzU2hvdWxkQ2FuY2VsSW5Db250ZW50VmlldzooVUlWaWV3ICop
Y29udGVudFZpZXcKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpc2V0SW50ZXJuYWxE
ZWxlZ2F0ZTooaWQgPFVJU2Nyb2xsVmlld0RlbGVnYXRlPilpbnRlcm5hbERlbGVnYXRlCit7Cisg
ICAgaWYgKGludGVybmFsRGVsZWdhdGUgPT0gX2ludGVybmFsRGVsZWdhdGUpCisgICAgICAgIHJl
dHVybjsKKyAgICBfaW50ZXJuYWxEZWxlZ2F0ZSA9IGludGVybmFsRGVsZWdhdGU7CisgICAgW3Nl
bGYgX3VwZGF0ZURlbGVnYXRlXTsKK30KKworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFVJU2Ny
b2xsVmlld0RlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIGlmIChfZXh0ZXJuYWxEZWxlZ2F0ZSA9
PSBkZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIF9leHRlcm5hbERlbGVnYXRlID0gZGVs
ZWdhdGU7CisgICAgW3NlbGYgX3VwZGF0ZURlbGVnYXRlXTsKK30KKworLSAoaWQgPFVJU2Nyb2xs
Vmlld0RlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIHJldHVybiBfZXh0ZXJuYWxEZWxlZ2F0ZTsK
K30KKworLSAodm9pZClfdXBkYXRlRGVsZWdhdGUKK3sKKyAgICBXS1Njcm9sbFZpZXdEZWxlZ2F0
ZUZvcndhcmRlciAqb2xkRm9yd2FyZGVyID0gX2RlbGVnYXRlRm9yd2FyZGVyOworICAgIF9kZWxl
Z2F0ZUZvcndhcmRlciA9IG5pbDsKKyAgICBpZiAoIV9leHRlcm5hbERlbGVnYXRlKQorICAgICAg
ICBbc3VwZXIgc2V0RGVsZWdhdGU6X2ludGVybmFsRGVsZWdhdGVdOworICAgIGVsc2UgaWYgKCFf
aW50ZXJuYWxEZWxlZ2F0ZSkKKyAgICAgICAgW3N1cGVyIHNldERlbGVnYXRlOl9leHRlcm5hbERl
bGVnYXRlXTsKKyAgICBlbHNlIHsKKyAgICAgICAgX2RlbGVnYXRlRm9yd2FyZGVyID0gW1tXS1Nj
cm9sbFZpZXdEZWxlZ2F0ZUZvcndhcmRlciBhbGxvY10gaW5pdFdpdGhJbnRlcm5hbERlbGVnYXRl
Ol9pbnRlcm5hbERlbGVnYXRlIGV4dGVybmFsRGVsZWdhdGU6X2V4dGVybmFsRGVsZWdhdGVdOwor
ICAgICAgICBbc3VwZXIgc2V0RGVsZWdhdGU6X2RlbGVnYXRlRm9yd2FyZGVyXTsKKyAgICB9Cisg
ICAgW29sZEZvcndhcmRlciByZWxlYXNlXTsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
W19kZWxlZ2F0ZUZvcndhcmRlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
K0BlbmQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDU2MmI0MTJlNGJhNDQ1YmU5NGIwZjM1ODQ5ZjQ0MmU5OGY2OTIwM2EuLmU2
N2Y3YWE1ZTBiZGJlYWViZDUwN2M3ZGQxNDBjYjI2YjRhMzViZmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0LDYgKzY0LDIy
IEBACiAJCTBGQzA4NTczMTg3Q0UwQjMwMDc4MEQ4NiAvKiBtZXNzYWdlcy5weSBpbiBDb3B5IE1l
c3NhZ2UgR2VuZXJhdGlvbiBTY3JpcHRzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzA4NTZGMTg3Q0UwQTkwMDc4MEQ4NiAvKiBtZXNzYWdlcy5weSAqLzsgfTsKIAkJMEZD
MDg1NzQxODdDRTBCNDAwNzgwRDg2IC8qIG1vZGVsLnB5IGluIENvcHkgTWVzc2FnZSBHZW5lcmF0
aW9uIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDg1NzAx
ODdDRTBBOTAwNzgwRDg2IC8qIG1vZGVsLnB5ICovOyB9OwogCQkwRkMwODU3NTE4N0NFMEI2MDA3
ODBEODYgLyogcGFyc2VyLnB5IGluIENvcHkgTWVzc2FnZSBHZW5lcmF0aW9uIFNjcmlwdHMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDg1NzExODdDRTBBOTAwNzgwRDg2
IC8qIHBhcnNlci5weSAqLzsgfTsKKwkJMEZDQjRFNDYxOEJCRTA0NDAwMEZDRkM5IC8qIFBhZ2VD
bGllbnRJbXBsSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkNCNEUzNjE4QkJFMDQ0MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGxJT1MuaCAqLzsg
fTsKKwkJMEZDQjRFNDcxOEJCRTA0NDAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsSU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFMzcxOEJC
RTA0NDAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsSU9TLm1tICovOyB9OworCQkwRkNCNEU0ODE4
QkJFMDQ0MDAwRkNGQzkgLyogV0tBY3Rpb25TaGVldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFMzgxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0
aW9uU2hlZXQuaCAqLzsgfTsKKwkJMEZDQjRFNDkxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9u
U2hlZXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkNCNEUzOTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tBY3Rpb25TaGVldC5tbSAqLzsgfTsKKwkJMEZD
QjRFNEExOEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTNBMThCQkUwNDQw
MDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50LmggKi87IH07CisJCTBGQ0I0RTRCMThC
QkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFM0IxOEJCRTA0NDAwMEZDRkM5
IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0gKi87IH07CisJCTBGQ0I0RTRDMThCQkUwNDQw
MDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEUzQzE4QkJFMDQ0MDAwRkNGQzkgLyogV0tDb250ZW50Vmll
dy5oICovOyB9OworCQkwRkNCNEU0RDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tDb250ZW50Vmlldy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTNE
MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3Lm1tICovOyB9OworCQkwRkNCNEU0RTE4
QkJFMDQ0MDAwRkNGQzkgLyogV0tDb250ZW50Vmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEUzRTE4QkJFMDQ0MDAwRkNGQzkg
LyogV0tDb250ZW50Vmlld0ludGVybmFsLmggKi87IH07CisJCTBGQ0I0RTRGMThCQkUwNDQwMDBG
Q0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTNGMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dl
b2xvY2F0aW9uUHJvdmlkZXJJT1MuaCAqLzsgfTsKKwkJMEZDQjRFNTAxOEJCRTA0NDAwMEZDRkM5
IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTQwMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xv
Y2F0aW9uUHJvdmlkZXJJT1MubW0gKi87IH07CisJCTBGQ0I0RTUxMThCQkUwNDQwMDBGQ0ZDOSAv
KiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU0MTE4QkJFMDQ0MDAw
RkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tICov
OyB9OworCQkwRkNCNEU1MjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tJbnRlcmFjdGlvblZpZXcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTQyMThC
QkUwNDQwMDBGQ0ZDOSAvKiBXS0ludGVyYWN0aW9uVmlldy5oICovOyB9OworCQkwRkNCNEU1MzE4
QkJFMDQ0MDAwRkNGQzkgLyogV0tJbnRlcmFjdGlvblZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU0MzE4QkJFMDQ0MDAwRkNGQzkgLyog
V0tJbnRlcmFjdGlvblZpZXcubW0gKi87IH07CisJCTBGQ0I0RTU0MThCQkUwNDQwMDBGQ0ZDOSAv
KiBXS1Njcm9sbFZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQ0I0RTQ0MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcuaCAqLzsgfTsK
KwkJMEZDQjRFNTUxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTQ1MThCQkUwNDQwMDBG
Q0ZDOSAvKiBXS1Njcm9sbFZpZXcubW0gKi87IH07CiAJCTBGRjI0QTJEMTg3OUU0QkMwMDNBQkYw
QyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjI0QTJCMTg3
OUU0QkMwMDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLzsgfTsKIAkJMEZGMjRBMkUxODc5RTRCQzAwM0FCRjBDIC8qIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMjRBMkMxODc5RTRCQzAwM0FCRjBDIC8qIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQkxQTA0Mzk3NjEy
NEQwMzQ4MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwNDM5NzQxMjREMDM0ODAwRkZCRkI1IC8qIFBsdWdp
blByb2Nlc3MuaCAqLzsgfTsKQEAgLTQ2NSwxOCArNDgxLDYgQEAKIAkJMkRBMDQ5QjQxODBDQ0NE
MzAwQUFGQTlFIC8qIFBsYXRmb3JtQ0FMYXllclJlbW90ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBMDQ5QjIxODBDQ0NEMzAwQUFGQTlFIC8qIFBs
YXRmb3JtQ0FMYXllclJlbW90ZS5oICovOyB9OwogCQkyREEwNDlCNzE4MENDRDBBMDBBQUZBOUUg
LyogR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTA0OUI1MTgwQ0NEMEEwMEFBRkE5RSAvKiBHcmFwaGljc0xh
eWVyQ0FSZW1vdGUuY3BwICovOyB9OwogCQkyREEwNDlCODE4MENDRDBBMDBBQUZBOUUgLyogR3Jh
cGhpY3NMYXllckNBUmVtb3RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyREEwNDlCNjE4MENDRDBBMDBBQUZBOUUgLyogR3JhcGhpY3NMYXllckNBUmVt
b3RlLmggKi87IH07Ci0JCTJEQTk0NDg3MTg4NEUzQjUwMEVEODZEQiAvKiBQYWdlQ2xpZW50SW1w
bElPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRB
OTQ0NzgxODg0RTNCNTAwRUQ4NkRCIC8qIFBhZ2VDbGllbnRJbXBsSU9TLmggKi87IH07Ci0JCTJE
QTk0NDg4MTg4NEUzQjUwMEVEODZEQiAvKiBQYWdlQ2xpZW50SW1wbElPUy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTk0NDc5MTg4NEUzQjUwMEVE
ODZEQiAvKiBQYWdlQ2xpZW50SW1wbElPUy5tbSAqLzsgfTsKLQkJMkRBOTQ0OEIxODg0RTNCNTAw
RUQ4NkRCIC8qIFdLQ29udGVudFZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEQTk0NDdDMTg4NEUzQjUwMEVEODZEQiAvKiBXS0NvbnRlbnRWaWV3
LmggKi87IH07Ci0JCTJEQTk0NDhDMTg4NEUzQjUwMEVEODZEQiAvKiBXS0NvbnRlbnRWaWV3Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0N0Qx
ODg0RTNCNTAwRUQ4NkRCIC8qIFdLQ29udGVudFZpZXcubW0gKi87IH07Ci0JCTJEQTk0NDhEMTg4
NEUzQjUwMEVEODZEQiAvKiBXS0NvbnRlbnRWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTk0NDdFMTg4NEUzQjUwMEVEODZEQiAv
KiBXS0NvbnRlbnRWaWV3SW50ZXJuYWwuaCAqLzsgfTsKLQkJMkRBOTQ0OEUxODg0RTNCNTAwRUQ4
NkRCIC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0N0YxODg0RTNCNTAwRUQ4NkRCIC8qIFdLR2Vv
bG9jYXRpb25Qcm92aWRlcklPUy5oICovOyB9OwotCQkyREE5NDQ4RjE4ODRFM0I1MDBFRDg2REIg
LyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0ODAxODg0RTNCNTAwRUQ4NkRCIC8qIFdLR2VvbG9j
YXRpb25Qcm92aWRlcklPUy5tbSAqLzsgfTsKLQkJMkRBOTQ0OTAxODg0RTNCNTAwRUQ4NkRCIC8q
IFdLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTk0NDgxMTg4NEUzQjUwMEVE
ODZEQiAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW0gKi87
IH07Ci0JCTJEQTk0NDkxMTg4NEUzQjUwMEVEODZEQiAvKiBXS0ludGVyYWN0aW9uVmlldy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0ODIxODg0
RTNCNTAwRUQ4NkRCIC8qIFdLSW50ZXJhY3Rpb25WaWV3LmggKi87IH07Ci0JCTJEQTk0NDkyMTg4
NEUzQjUwMEVEODZEQiAvKiBXS0ludGVyYWN0aW9uVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTk0NDgzMTg4NEUzQjUwMEVEODZEQiAvKiBX
S0ludGVyYWN0aW9uVmlldy5tbSAqLzsgfTsKLQkJMkRBOTQ0OTMxODg0RTNCNTAwRUQ4NkRCIC8q
IFdLU2Nyb2xsVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkRBOTQ0ODQxODg0RTNCNTAwRUQ4NkRCIC8qIFdLU2Nyb2xsVmlldy5oICovOyB9Owot
CQkyREE5NDQ5NDE4ODRFM0I1MDBFRDg2REIgLyogV0tTY3JvbGxWaWV3Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0ODUxODg0RTNCNTAwRUQ4
NkRCIC8qIFdLU2Nyb2xsVmlldy5tbSAqLzsgfTsKIAkJMkRBOTQ0OTUxODg0RTNCNTAwRUQ4NkRC
IC8qIFdLVmlld0lPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEQTk0NDg2MTg4NEUzQjUwMEVEODZEQiAvKiBXS1ZpZXdJT1MubW0gKi87IH07CiAJ
CTJEQTk0NDlFMTg4NEU0RjAwMEVEODZEQiAvKiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50SU9TLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0OTcx
ODg0RTRGMDAwRUQ4NkRCIC8qIE5hdGl2ZVdlYktleWJvYXJkRXZlbnRJT1MubW0gKi87IH07CiAJ
CTJEQTk0NDlGMTg4NEU0RjAwMEVEODZEQiAvKiBOYXRpdmVXZWJUb3VjaEV2ZW50SU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0OTgxODg0
RTRGMDAwRUQ4NkRCIC8qIE5hdGl2ZVdlYlRvdWNoRXZlbnRJT1MubW0gKi87IH07CkBAIC0xMzU5
LDEwICsxMzYzLDYgQEAKIAkJQzBFM0FBN0MxMjA5RTgzQzAwQTQ5RDAxIC8qIE1vZHVsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBFM0FBNDQxMjA5
RTJCQTAwQTQ5RDAxIC8qIE1vZHVsZS5oICovOyB9OwogCQlDNTE3Mzg4MTEyREY4RjRGMDBFRTNG
NDcgLyogRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTczODgwMTJERjhGNEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJv
bGxlckFjdGlvbi5oICovOyB9OwogCQlDNTIzN0Y2MDEyNDQxQ0EzMDA3ODA0NzIgLyogV2ViRWRp
dG9yQ2xpZW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzUyMzdGNUYxMjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRvckNsaWVudE1hYy5tbSAq
LzsgfTsKLQkJQzUyNDUzOTExODlDNkI4NTAwM0RGNDc2IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3Rh
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MjQ1
MzhGMTg5QzZCODUwMDNERjQ3NiAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50LmggKi87IH07Ci0J
CUM1MjQ1MzkyMTg5QzZCODUwMDNERjQ3NiAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUyNDUzOTAxODlD
NkI4NTAwM0RGNDc2IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0gKi87IH07Ci0JCUM1MzVC
RDU5MTg5MTlDRkMwMDk4RjFGNSAvKiBXS0FjdGlvblNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTM1QkQ1NzE4OTE5Q0ZDMDA5OEYxRjUgLyog
V0tBY3Rpb25TaGVldC5oICovOyB9OwotCQlDNTM1QkQ1QTE4OTE5Q0ZDMDA5OEYxRjUgLyogV0tB
Y3Rpb25TaGVldC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1MzVCRDU4MTg5MTlDRkMwMDk4RjFGNSAvKiBXS0FjdGlvblNoZWV0Lm1tICovOyB9Owog
CQlDNTc0QTM3NzEyRTYwOTlEMDAyREZFOTggLyogV2ViRHJhZ0NsaWVudE1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NTRGRkEyMTJFNEU4RUEw
MDJGMjJDMCAvKiBXZWJEcmFnQ2xpZW50TWFjLm1tICovOyB9OwogCQlDNTc0QTU4MTEyRTY2Njgx
MDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU3RjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2Fy
ZFR5cGVzLmggKi87IH07CiAJCUM1NzRBNTgyMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJk
VHlwZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovOyB9OwpAQCAt
MTcyMSw2ICsxNzIxLDIyIEBACiAJCTBGQzA4NTZGMTg3Q0UwQTkwMDc4MEQ4NiAvKiBtZXNzYWdl
cy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IG1lc3NhZ2VzLnB5OyBwYXRoID0gd2Via2l0Mi9tZXNz
YWdlcy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDg1NzAxODdDRTBBOTAw
NzgwRDg2IC8qIG1vZGVsLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gbW9kZWwucHk7IHBhdGggPSB3
ZWJraXQyL21vZGVsLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwODU3MTE4
N0NFMEE5MDA3ODBEODYgLyogcGFyc2VyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gcGFyc2VyLnB5
OyBwYXRoID0gd2Via2l0Mi9wYXJzZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQ0I0RTM2MThCQkUwNDQwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbElPUy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQYWdlQ2xpZW50SW1wbElPUy5oOyBwYXRoID0gaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0I0
RTM3MThCQkUwNDQwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbElPUy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBhZ2VDbGllbnRJbXBsSU9TLm1tOyBwYXRoID0g
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkNCNEUzODE4QkJFMDQ0MDAwRkNGQzkgLyogV0tBY3Rpb25TaGVldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXS0FjdGlvblNoZWV0Lmg7IHBhdGggPSBpb3MvV0tBY3Rpb25T
aGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkNCNEUzOTE4QkJFMDQ0MDAw
RkNGQzkgLyogV0tBY3Rpb25TaGVldC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IFdLQWN0aW9uU2hlZXQubW07IHBhdGggPSBpb3MvV0tBY3Rpb25TaGVldC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDQjRFM0ExOEJCRTA0NDAwMEZDRkM5IC8q
IFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oOyBwYXRoID0gaW9zL1dLQWN0aW9uU2hlZXRBc3Np
c3RhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDQjRFM0IxOEJCRTA0NDAw
MEZDRkM5IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBXS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tOyBwYXRoID0gaW9z
L1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQ0I0RTNDMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLQ29udGVudFZpZXcuaDsgcGF0aCA9IGlvcy9XS0NvbnRl
bnRWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0I0RTNEMThCQkUwNDQw
MDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gV0tDb250ZW50Vmlldy5tbTsgcGF0aCA9IGlvcy9XS0NvbnRlbnRWaWV3Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkNCNEUzRTE4QkJFMDQ0MDAwRkNGQzkg
LyogV0tDb250ZW50Vmlld0ludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdLQ29udGVudFZpZXdJbnRlcm5hbC5oOyBwYXRoID0gaW9zL1dLQ29udGVudFZpZXdJbnRl
cm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkNCNEUzRjE4QkJFMDQ0MDAw
RkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oOyBwYXRoID0gaW9zL1dLR2Vv
bG9jYXRpb25Qcm92aWRlcklPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkNC
NEU0MDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tHZW9sb2NhdGlvblByb3ZpZGVy
SU9TLm1tOyBwYXRoID0gaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDQjRFNDExOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9j
YXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0
eU9yaWdpbi5tbTsgcGF0aCA9IGlvcy9XS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJp
dHlPcmlnaW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0I0RTQyMThCQkUw
NDQwMDBGQ0ZDOSAvKiBXS0ludGVyYWN0aW9uVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXS0ludGVyYWN0aW9uVmlldy5oOyBwYXRoID0gaW9zL1dLSW50ZXJhY3Rpb25W
aWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0I0RTQzMThCQkUwNDQwMDBG
Q0ZDOSAvKiBXS0ludGVyYWN0aW9uVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFdLSW50ZXJhY3Rpb25WaWV3Lm1tOyBwYXRoID0gaW9zL1dLSW50ZXJhY3Rp
b25WaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkNCNEU0NDE4QkJFMDQ0
MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdLU2Nyb2xsVmlldy5oOyBwYXRoID0gaW9zL1dLU2Nyb2xsVmlldy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkNCNEU0NTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxW
aWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tTY3JvbGxW
aWV3Lm1tOyBwYXRoID0gaW9zL1dLU2Nyb2xsVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGMjRBMkIxODc5RTRCQzAwM0FCRjBDIC8qIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjI0QTJDMTg3OUU0QkMwMDNB
QkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjI0QTJGMTg3OUU0
RkUwMDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW47IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTc0LDE4ICsyMTkwLDYgQEAKIAkJMkRBMDQ5QjIx
ODBDQ0NEMzAwQUFGQTlFIC8qIFBsYXRmb3JtQ0FMYXllclJlbW90ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkRBMDQ5QjUxODBDQ0QwQTAwQUFGQTlFIC8qIEdyYXBoaWNzTGF5
ZXJDQVJlbW90ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFw
aGljc0xheWVyQ0FSZW1vdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREEw
NDlCNjE4MENDRDBBMDBBQUZBOUUgLyogR3JhcGhpY3NMYXllckNBUmVtb3RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzTGF5ZXJDQVJlbW90ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyREE5NDQ3ODE4ODRFM0I1MDBFRDg2REIgLyogUGFnZUNs
aWVudEltcGxJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGFnZUNsaWVu
dEltcGxJT1MuaDsgcGF0aCA9IGlvcy9QYWdlQ2xpZW50SW1wbElPUy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyREE5NDQ3OTE4ODRFM0I1MDBFRDg2REIgLyogUGFnZUNsaWVudElt
cGxJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQYWdlQ2xp
ZW50SW1wbElPUy5tbTsgcGF0aCA9IGlvcy9QYWdlQ2xpZW50SW1wbElPUy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkRBOTQ0N0MxODg0RTNCNTAwRUQ4NkRCIC8qIFdLQ29udGVu
dFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tDb250ZW50Vmlldy5o
OyBwYXRoID0gaW9zL1dLQ29udGVudFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMkRBOTQ0N0QxODg0RTNCNTAwRUQ4NkRCIC8qIFdLQ29udGVudFZpZXcubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0NvbnRlbnRWaWV3Lm1tOyBwYXRoID0g
aW9zL1dLQ29udGVudFZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJEQTk0
NDdFMTg4NEUzQjUwMEVEODZEQiAvKiBXS0NvbnRlbnRWaWV3SW50ZXJuYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tDb250ZW50Vmlld0ludGVybmFsLmg7IHBhdGggPSBp
b3MvV0tDb250ZW50Vmlld0ludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTJEQTk0NDdGMTg4NEUzQjUwMEVEODZEQiAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tHZW9sb2NhdGlvblByb3ZpZGVySU9T
Lmg7IHBhdGggPSBpb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTJEQTk0NDgwMTg4NEUzQjUwMEVEODZEQiAvKiBXS0dlb2xvY2F0aW9u
UHJvdmlkZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBX
S0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MubW07IHBhdGggPSBpb3MvV0tHZW9sb2NhdGlvblByb3Zp
ZGVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyREE5NDQ4MTE4ODRFM0I1
MDBFRDg2REIgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tHZW9sb2NhdGlvblBy
b3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tOyBwYXRoID0gaW9zL1dLR2VvbG9jYXRpb25Q
cm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMkRBOTQ0ODIxODg0RTNCNTAwRUQ4NkRCIC8qIFdLSW50ZXJhY3Rpb25WaWV3LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLSW50ZXJhY3Rpb25WaWV3Lmg7IHBhdGgg
PSBpb3MvV0tJbnRlcmFjdGlvblZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MkRBOTQ0ODMxODg0RTNCNTAwRUQ4NkRCIC8qIFdLSW50ZXJhY3Rpb25WaWV3Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tJbnRlcmFjdGlvblZpZXcubW07IHBh
dGggPSBpb3MvV0tJbnRlcmFjdGlvblZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJEQTk0NDg0MTg4NEUzQjUwMEVEODZEQiAvKiBXS1Njcm9sbFZpZXcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tTY3JvbGxWaWV3Lmg7IHBhdGggPSBpb3MvV0tTY3Jv
bGxWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJEQTk0NDg1MTg4NEUzQjUw
MEVEODZEQiAvKiBXS1Njcm9sbFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXS1Njcm9sbFZpZXcubW07IHBhdGggPSBpb3MvV0tTY3JvbGxWaWV3Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREE5NDQ4NjE4ODRFM0I1MDBFRDg2REIgLyog
V0tWaWV3SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tW
aWV3SU9TLm1tOyBwYXRoID0gaW9zL1dLVmlld0lPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkRBOTQ0OTcxODg0RTRGMDAwRUQ4NkRCIC8qIE5hdGl2ZVdlYktleWJvYXJkRXZl
bnRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50SU9TLm1tOyBwYXRoID0gaW9zL05hdGl2ZVdlYktleWJvYXJkRXZlbnRJ
T1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQTk0NDk4MTg4NEU0RjAwMEVE
ODZEQiAvKiBOYXRpdmVXZWJUb3VjaEV2ZW50SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gTmF0aXZlV2ViVG91Y2hFdmVudElPUy5tbTsgcGF0aCA9IGlvcy9O
YXRpdmVXZWJUb3VjaEV2ZW50SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MzE1MywxMCArMzE1Nyw2IEBACiAJCUMwRTNBQTQ4MTIwOUU0NTAwMEE0OUQwMSAvKiBNb2R1bGVD
Ri5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2R1bGVDRi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTczODgwMTJERjhGNEYwMEVFM0Y0NyAv
KiBEcmFnQ29udHJvbGxlckFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEcmFnQ29udHJvbGxlckFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
NTIzN0Y1RjEyNDQxQ0EzMDA3ODA0NzIgLyogV2ViRWRpdG9yQ2xpZW50TWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRWRpdG9yQ2xpZW50TWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTI0NTM4RjE4OUM2Qjg1MDAzREY0NzYgLyog
V0tBY3Rpb25TaGVldEFzc2lzdGFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXS0FjdGlvblNoZWV0QXNzaXN0YW50Lmg7IHBhdGggPSBpb3MvV0tBY3Rpb25TaGVldEFzc2lz
dGFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTI0NTM5MDE4OUM2Qjg1MDAz
REY0NzYgLyogV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW07IHBhdGggPSBpb3Mv
V0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QzUzNUJENTcxODkxOUNGQzAwOThGMUY1IC8qIFdLQWN0aW9uU2hlZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV0tBY3Rpb25TaGVldC5oOyBwYXRoID0gaW9zL1dLQWN0aW9u
U2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzUzNUJENTgxODkxOUNGQzAw
OThGMUY1IC8qIFdLQWN0aW9uU2hlZXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXS0FjdGlvblNoZWV0Lm1tOyBwYXRoID0gaW9zL1dLQWN0aW9uU2hlZXQubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NTRGRkEyMTJFNEU4RUEwMDJGMjJDMCAv
KiBXZWJEcmFnQ2xpZW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViRHJhZ0NsaWVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzU3NEE1N0YxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBl
cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBhc3RlYm9hcmRU
eXBlcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxODcsMjIgKzQxODcsNiBA
QAogCQkyREE5NDQ3NzE4ODRFM0FCMDBFRDg2REIgLyogaW9zICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkyREE5NDQ3ODE4ODRFM0I1MDBFRDg2REIgLyog
UGFnZUNsaWVudEltcGxJT1MuaCAqLywKLQkJCQkyREE5NDQ3OTE4ODRFM0I1MDBFRDg2REIgLyog
UGFnZUNsaWVudEltcGxJT1MubW0gKi8sCi0JCQkJQzUzNUJENTcxODkxOUNGQzAwOThGMUY1IC8q
IFdLQWN0aW9uU2hlZXQuaCAqLywKLQkJCQlDNTM1QkQ1ODE4OTE5Q0ZDMDA5OEYxRjUgLyogV0tB
Y3Rpb25TaGVldC5tbSAqLywKLQkJCQlDNTI0NTM4RjE4OUM2Qjg1MDAzREY0NzYgLyogV0tBY3Rp
b25TaGVldEFzc2lzdGFudC5oICovLAotCQkJCUM1MjQ1MzkwMTg5QzZCODUwMDNERjQ3NiAvKiBX
S0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tICovLAotCQkJCTJEQTk0NDdDMTg4NEUzQjUwMEVEODZE
QiAvKiBXS0NvbnRlbnRWaWV3LmggKi8sCi0JCQkJMkRBOTQ0N0QxODg0RTNCNTAwRUQ4NkRCIC8q
IFdLQ29udGVudFZpZXcubW0gKi8sCi0JCQkJMkRBOTQ0N0UxODg0RTNCNTAwRUQ4NkRCIC8qIFdL
Q29udGVudFZpZXdJbnRlcm5hbC5oICovLAotCQkJCTJEQTk0NDdGMTg4NEUzQjUwMEVEODZEQiAv
KiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCAqLywKLQkJCQkyREE5NDQ4MDE4ODRFM0I1MDBF
RDg2REIgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tICovLAotCQkJCTJEQTk0NDgxMTg4
NEUzQjUwMEVEODZEQiAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmln
aW4ubW0gKi8sCi0JCQkJMkRBOTQ0ODIxODg0RTNCNTAwRUQ4NkRCIC8qIFdLSW50ZXJhY3Rpb25W
aWV3LmggKi8sCi0JCQkJMkRBOTQ0ODMxODg0RTNCNTAwRUQ4NkRCIC8qIFdLSW50ZXJhY3Rpb25W
aWV3Lm1tICovLAotCQkJCTJEQTk0NDg0MTg4NEUzQjUwMEVEODZEQiAvKiBXS1Njcm9sbFZpZXcu
aCAqLywKLQkJCQkyREE5NDQ4NTE4ODRFM0I1MDBFRDg2REIgLyogV0tTY3JvbGxWaWV3Lm1tICov
LAogCQkJCTJEQTk0NDg2MTg4NEUzQjUwMEVEODZEQiAvKiBXS1ZpZXdJT1MubW0gKi8sCiAJCQkp
OwogCQkJbmFtZSA9IGlvczsKQEAgLTQyMzMsMTQgKzQyMTcsMzAgQEAKIAkJMkRBOTQ0QTgxODg0
RTlBQjAwRUQ4NkRCIC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCi0JCQkJMkRGOTU5MzQxOEE0MjQxMjAwOTc4NUExIC8qIFZpZXdHZXN0dXJlQ29udHJv
bGxlcklPUy5tbSAqLywKKwkJCQkwRkNCNEUzNjE4QkJFMDQ0MDAwRkNGQzkgLyogUGFnZUNsaWVu
dEltcGxJT1MuaCAqLywKKwkJCQkwRkNCNEUzNzE4QkJFMDQ0MDAwRkNGQzkgLyogUGFnZUNsaWVu
dEltcGxJT1MubW0gKi8sCiAJCQkJMkRBOTQ0QTkxODg0RTlCQTAwRUQ4NkRCIC8qIFRleHRDaGVj
a2VySU9TLm1tICovLAorCQkJCTJERjk1OTM0MThBNDI0MTIwMDk3ODVBMSAvKiBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXJJT1MubW0gKi8sCiAJCQkJMkRBOTQ0QUExODg0RTlCQTAwRUQ4NkRCIC8qIFdl
Ykluc3BlY3RvclByb3h5SU9TLm1tICovLAogCQkJCTJEQTk0NEFCMTg4NEU5QkEwMEVEODZEQiAv
KiBXZWJQYWdlUHJveHlJT1MubW0gKi8sCiAJCQkJMkRBOTQ0QUMxODg0RTlCQTAwRUQ4NkRCIC8q
IFdlYlByb2Nlc3NQcm94eUlPUy5tbSAqLywKIAkJCQkzRjg4OUQxMjE4ODc3OEM5MDBGRUFEQUYg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmNwcCAqLywKIAkJCQkzRjg4OUQxMzE4
ODc3OEM5MDBGRUFEQUYgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi8sCiAJ
CQkJM0Y4ODlEMTYxODg3N0EyNDAwRkVBREFGIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQkwRkNCNEUzODE4QkJFMDQ0MDAwRkNGQzkgLyogV0tB
Y3Rpb25TaGVldC5oICovLAorCQkJCTBGQ0I0RTM5MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlv
blNoZWV0Lm1tICovLAorCQkJCTBGQ0I0RTNBMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNo
ZWV0QXNzaXN0YW50LmggKi8sCisJCQkJMEZDQjRFM0IxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0
aW9uU2hlZXRBc3Npc3RhbnQubW0gKi8sCisJCQkJMEZDQjRFM0MxOEJCRTA0NDAwMEZDRkM5IC8q
IFdLQ29udGVudFZpZXcuaCAqLywKKwkJCQkwRkNCNEUzRDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tD
b250ZW50Vmlldy5tbSAqLywKKwkJCQkwRkNCNEUzRTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tDb250
ZW50Vmlld0ludGVybmFsLmggKi8sCisJCQkJMEZDQjRFM0YxOEJCRTA0NDAwMEZDRkM5IC8qIFdL
R2VvbG9jYXRpb25Qcm92aWRlcklPUy5oICovLAorCQkJCTBGQ0I0RTQwMThCQkUwNDQwMDBGQ0ZD
OSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MubW0gKi8sCisJCQkJMEZDQjRFNDExOEJCRTA0
NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5t
bSAqLywKKwkJCQkwRkNCNEU0MjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tJbnRlcmFjdGlvblZpZXcu
aCAqLywKKwkJCQkwRkNCNEU0MzE4QkJFMDQ0MDAwRkNGQzkgLyogV0tJbnRlcmFjdGlvblZpZXcu
bW0gKi8sCisJCQkJMEZDQjRFNDQxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5oICov
LAorCQkJCTBGQ0I0RTQ1MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcubW0gKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02MzQ3
LDExICs2MzQ3LDEzIEBACiAJCQkJMkQ4OTQ5RjExODIwNDRGNjAwRTg5OEFBIC8qIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZVRpbGVkQmFja2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNjU5MjMx
MjA4QjREQjAwNDQ4MTZDIC8qIERyYXdpbmdBcmVhSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MjZGOUE4M0IxOEEzNDY4MTAwQUVCODhBIC8qIFdLV2ViVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGQ0I0RTQ4MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTY0MjI5QTEyREQwMjkyMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCQzNERjYxODk5RTQzNzAwNEYwNjI2IC8q
IE5hdmlnYXRpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyNjUyMTcxMTgyNjA4MTAw
MjQzRTEyIC8qIERyYXdpbmdBcmVhUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjQyMzA5
MTJERDA5RUIwMENBQUUyQyAvKiBEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVEQTZFRDBBMTQ5MDYwNjkwMEI0MUQxMiAvKiBEeW5hbWljTGlua2VyRW52aXJv
bm1lbnRFeHRyYWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQ0I0RTRGMThCQkUwNDQwMDBG
Q0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
QTQxQUI1MTJDMDJFQzQwMDJCRTY3QiAvKiBFZGl0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNGQzY3QzAxMkQzQ0NGMjAwQTYwNjEwIC8qIEVuY29kZXJBZGFwdGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUIxNUE4NTEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjM1OSw3ICs2MzYxLDYgQEAKIAkJCQkxQUE1NzVGQjE0
OTZCNTI2MDBBNEVFMDYgLyogRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTkwQzFGNDEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBOTEwMDcxMTI2Njc1QzQwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkyREE5NDQ4RDE4ODRFM0I1MDBFRDg2REIgLyogV0tDb250ZW50Vmlld0lu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVFNzcyODE4M0RENkY2MDAwNzIwM0YgLyog
QXN5bmNSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTkxMDEwQTEyNjhDOENBMDAxODQy
RjUgLyogRmluZEluZGljYXRvcldpbmRvdy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFODFEOEQx
MzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTY0MTUsNiAr
NjQxNiw3IEBACiAJCQkJNTFGQ0IxODYxN0JCRkUwMzAwMzk0Q0Q4IC8qIEFzeW5jaHJvbm91c05l
dHdvcmtMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0NDMTY5MTg5MDdFQjAw
MDFFNkVEOCAvKiBXS1Byb2Nlc3NDbGFzc0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQky
RDFCNUQ1RTE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGQ0I0RTUyMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0ludGVy
YWN0aW9uVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyMzI4RkYxNjJDODY2QTAwRDgyRjdB
IC8qIE1lc3NhZ2VFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUM0QzgyOTE2Qjg3NkE5
MDA2OURDQ0QgLyogTWVzc2FnZUZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ2QzE4
MzI3QzEyMDAwODdERDcgLyogU3RyaW5nUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTY1
MzksNyArNjU0MSw2IEBACiAJCQkJMUEyNEJFRDUxMjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1l
bW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI3MkIyOEIxNDA2OTg1RDAwOTZBNUQwIC8qIFN0
YXRpc3RpY3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRCREVEMzE2Qzk4RUREMDBFNEUy
NUUgLyogU3RhdGlzdGljc1JlcXVlc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEQTk0NDg3MTg4
NEUzQjUwMEVEODZEQiAvKiBQYWdlQ2xpZW50SW1wbElPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUFEMzMwNkYxNkIxRDk5MTAwNEY2MEU3IC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUE0RDY2NEUxOEEzMDMxQjAwRDgyRTIxIC8qIFdLRnJhbWVJbmZvSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjQxMjlCMThCNDBGQ0QwMDU0NkZEQyAvKiBXS05hdmln
YXRpb25BY3Rpb25Qcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTY1NTAsNyArNjU1MSw2IEBA
CiAJCQkJMUFCMzFBOTcxNkJDNjg4MTAwRjZEQkM5IC8qIFN0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI5NkJEODVEMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdV
dGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMUQ4MUZGMTg1QkJERUUwMDFBRUQ1NiAv
KiBTUUxpdGVJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRBOTQ0OEIxODg0
RTNCNTAwRUQ4NkRCIC8qIFdLQ29udGVudFZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQTk0
NEEwMTg4NEU0RjAwMEVEODZEQiAvKiBXZWJJT1NFdmVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdDRDEwMkRBMTg2Njc3MDYwMEVENDI5RCAvKiBBdXRvQ29ycmVjdGlvbkNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI0NzRFNDE4NEQ0NDk4MDA1MUI2MjIgLyogV0tCdW5k
bGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjU4NSw2ICs2NTg1
LDcgQEAKIAkJCQkzRjg3QjlCRTE1ODk0MDE5MDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzRjg3QjlDMDE1ODk0MEQ4MDA5MEZGNjIgLyogV2ViQ29sb3JQ
aWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNEE2MjkwMTQ3MzEyQkUwMDZDNjgxQSAvKiBX
ZWJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkNCNEU1NDE4QkJFMDQ0MDAwRkNG
QzkgLyogV0tTY3JvbGxWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzRBNjI5MjE0NzMxMkJF
MDA2QzY4MUEgLyogV2ViQ29ubmVjdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEx
RkVDMUQxNjI3QjQ1NzAwNzAwRjZEIC8qIFdlYkNvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM0QTYyQTgxNDc0NEVDNzAwNkM2ODFBIC8qIFdlYkNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaCBpbiBIZWFkZXJzICovLApAQCAtNjYwMiw4ICs2NjAzLDYgQEAKIAkJCQk1MUFD
QkI4MjEyN0E4QkFEMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUFCOEExRjQxODQwMEI4RjAwRTlBRTY5IC8qIFdLUGFnZUZpbmRDbGllbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTc1RTc0OUVBMTgwREJCOTgwMDA4OEJBNiAvKiBXZWJPcmlnaW5E
YXRhTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQkyREE5NDQ5MzE4ODRFM0I1
MDBFRDg2REIgLyogV0tTY3JvbGxWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTM1QkQ1OTE4
OTE5Q0ZDMDA5OEYxRjUgLyogV0tBY3Rpb25TaGVldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFB
Q0JCQTAxMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDQ0I3NUM2MTIwM0ExQ0UwMDIyMkQxQiAvKiBXZWJDb250ZXh0TWVzc2Fn
ZUtpbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VFN0QwRTEyODQ2RjY5MDA5ODI3REEgLyog
V2ViQ29udGV4dE1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTY2MTEsNyArNjYxMCw2IEBA
CiAJCQkJQkNCMEIwREMxMjMwNUEyNTAwQjEzNDFFIC8qIFdlYkNvbnRleHRVc2VyTWVzc2FnZUNv
ZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ4MTlCQTIxODYyODAwRTAwMUYwM0QxIC8qIFZp
ZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3JNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzMwOTM0NTAxMzE1Qjk0RDAwOTdBN0JDIC8qIFdlYkNvb2tpZU1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTJEQTk0NDkxMTg4NEUzQjUwMEVEODZEQiAvKiBXS0ludGVyYWN0aW9uVmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzMwOTM0NDgxMzE1QjkyMjAwOTdBN0JDIC8qIFdlYkNvb2tp
ZU1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzMwOTM0NTYxMzE1Qjk3NTAw
OTdBN0JDIC8qIFdlYkNvb2tpZU1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1
RTc3MkMxODQwMDhCOTAwMDcyMDNGIC8qIERhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzYwLDggKzY3NTgsOCBAQAogCQkJCTFBQjQ3NEU4MTg0
RDQ0RDAwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUFDNzUzN0MxODNBOUZEQjAwNzJDQjE1IC8qIFBhZ2VMb2FkU3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREI4NkMxMTIwMEZCOTcwMDcyNTRCRSAvKiBBUElV
UkwuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEQTk0NDhFMTg4NEUzQjUwMEVEODZEQiAvKiBXS0dl
b2xvY2F0aW9uUHJvdmlkZXJJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQzk2MTE5MTgzRDI5
NDcwMEQyMDAyRSAvKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGQ0I0RTRFMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTIzMTVEMTIyQzMwQ0EwMEQ1QzM1QSAvKiBBUElV
UkxSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzkwQTFEMjEyMkRENTVFMDBDQzhDNTAg
LyogQVBJVVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUY2MTEzRTI1MTI2Q0UxODIw
MDU3RDBBNyAvKiBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBpbiBIZWFkZXJzICovLApAQCAt
NjgyNyw2ICs2ODI1LDcgQEAKIAkJCQkxQUUwMEQ1RDE4MkRBREUxMDAwODdERDcgLyogS2V5ZWRF
bmNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMzA5MzQ1QjEzMTVCOTk4MDA5N0E3QkMgLyog
V0tDb29raWVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNThGQTEyQTg4QTU0MDA2
Mjk1MzAgLyogV0tDcmVkZW50aWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkNCNEU0NjE4QkJF
MDQ0MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGxJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
OEFDRjExMTJCMDE1RjgwMEIwNEI4MyAvKiBXS0NyZWRlbnRpYWxUeXBlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUFGREQzMTcxODkxQzk0NzAwMTUzOTcwIC8qIFdLUHJlZmVyZW5jZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDNDA3NUY4MTI0RkYwMjcwMDY4RjIwQSAvKiBXS0RhdGEuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjg2MCw2ICs2ODU5LDcgQEAKIAkJCQlCNjJFNzMxMjE0MzA0N0IwMDA2
OUVDMzUgLyogV0tIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTEwQUUwRDEz
M0MxNkNCMDA3MjcxN0EgLyogV0tJY29uRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
NEQ2NjRDMThBMzAzMEUwMEQ4MkUyMSAvKiBXS0ZyYW1lSW5mby5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZDQjRFNEExOEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxMjNDRjFDMTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRh
YmFzZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0M0QzA5NDE4MTRCM0FGMDAzNjg4QjkgLyog
V0tOU0FycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGNkFDMzEyQzkxRjM0MDA4RjlDMzUg
LyogV0tJbWFnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTExLDYgKzY5MTEsNyBAQAogCQkJCUJD
OEE1MDE1MTE3NjVGNTYwMDc1NzU3MyAvKiBXS1JldGFpblB0ci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRjYzNDQ0NUQxMkE4ODVFOTAwMDYxMkQ4IC8qIFdLU2VjdXJpdHlPcmlnaW4uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNDA3NjA0MTI0RkYwMjcwMDY4RjIwQSAvKiBXS1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDQjRFNEMxOEJCRTA0NDAwMEZDRkM5IC8q
IFdLQ29udGVudFZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTFGNjA0QkFBMTg4OUZCQjgwMEVF
MDM5NSAvKiBXS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFGNzUwNkI4MTg1OTE2NUQwMEVDMEZGNyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5GcmFt
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNjdERDdCQTEyNUU0MEQ5MDA3QkRDQjgg
LyogV0tTZXJpYWxpemVkU2NyaXB0VmFsdWVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5
NDAsNyArNjk0MSw2IEBACiAJCQkJMUEyNTZFMzgxOEExQTc4ODAwNkZCOTIyIC8qIFdLTmF2aWdh
dGlvbkFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkZBNjE3OUYxMkYwQjk5RDAwMzNFMENB
IC8qIFdLVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1NTQyMkNDMTgwNzczQ0Uw
MDQ2RjZBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzUy
NDUzOTExODlDNkI4NTAwM0RGNDc2IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM1RTFBRkU5MTZCMjBCNzUwMDZDQzFGMiAvKiBXS1dlYkFyY2hpdmUuaCBp
biBIZWFkZXJzICovLAogCQkJCUM1RTFBRkVCMTZCMjBCN0UwMDZDQzFGMiAvKiBXS1dlYkFyY2hp
dmVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5ODlEODIxNjFBN0U1RDAwMEQ0NkQz
IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbi5oIGluIEhlYWRlcnMgKi8sCkBAIC03NzIxLDcgKzc3MjEs
NiBAQAogCQkJCTkzRkM2N0JEMTJEM0NDRjIwMEE2MDYxMCAvKiBEZWNvZGVyQWRhcHRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0U4MUQ5ODEzMUFFMDIxMDAyNDE5MTAgLyogRGljdGlvbmFy
eVBvcHVwSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTY3RUVBMTE3MDM3N0JGMDA3Njgx
Q0EgLyogRGlza0NhY2hlTW9uaXRvci5tbSBpbiBTb3VyY2VzICovLAotCQkJCTJEQTk0NDhGMTg4
NEUzQjUwMEVEODZEQiAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MubW0gaW4gU291cmNlcyAq
LywKIAkJCQkyRDZDRDExQTE4OTA1OEE1MDBFNUE0QTAgLyogVmlld1NuYXBzaG90U3RvcmUubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1MThFOEYwNzE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ0N0I1NkMxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlLm1tIGluIFNvdXJjZXMgKi8sCkBAIC03ODU3LDcgKzc4NTYsNiBA
QAogCQkJCTFBMkQ4NEE0MTI3RjZBRDEwMDFFQjk2MiAvKiBOUFZhcmlhbnREYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDOEFDQTE0MTY2NzBEODkwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3Jh
cGgubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzhBQ0ExNjE2NjcwRDg5MDA0QzE5NDEgLyogT2Jq
Q09iamVjdEdyYXBoQ29kZXJzLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkRBOTQ0OTQxODg0RTNC
NTAwRUQ4NkRCIC8qIFdLU2Nyb2xsVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEQTk0NDlG
MTg4NEU0RjAwMEVEODZEQiAvKiBOYXRpdmVXZWJUb3VjaEV2ZW50SU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNDRjY3MzMxMkM3RjE1QzAwOEY5QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUUzNTFGNTE4MEY1Qzc1MDBFNTNCRTkgLyogV2ViSURC
RmFjdG9yeUJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA0LDYgKzc5MDIsNyBAQAog
CQkJCTFBMkQ5MEJCMTI4MUM5MzEwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxQTA0M0I1RDEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJv
Y2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMDQzREMy
MTI0RkY4NzUwMEZGQkZCNSAvKiBQbHVnaW5Qcm94eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkNCNEU1MDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFDMTMzNjcxODU2NUI1NzAwRjNFQzA1IC8qIFVzZXJEYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5MjIxMTI4MURDMUIwMDFFQjk2MiAvKiBQbHVnaW5Q
cm94eU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTc1NTQyMkM0MTgwNjJCRjkwMDQ2RjZBOCAv
KiBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzk1MCw3
ICs3OTQ5LDYgQEAKIAkJCQkxQUQzMzA2RTE2QjFEOTkxMDA0RjYwRTcgLyogU3RvcmFnZUFyZWFJ
bXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQ0VDRDI0MTcxNjJEQjEwMDFGQzlFRiAvKiBT
dG9yYWdlQXJlYU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTMzNERFRDE2REU4Rjg4MDA2
QThFMzggLyogU3RvcmFnZUFyZWFNYXBNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQzUzNUJENUExODkxOUNGQzAwOThGMUY1IC8qIFdLQWN0aW9uU2hlZXQubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxQTQ0Qjk1QjE2QjczRjlGMDBCN0JCRDggLyogU3RvcmFnZU1hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCMzFBOTYxNkJDNjg4MTAwRjZEQkM5IC8qIFN0b3Jh
Z2VNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNDRCOTU3
MTZCNzM3QUEwMEI3QkJEOCAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc5ODAsNyArNzk3OCw2IEBACiAJCQkJQzVFMUFGRUUxNkIyMTAyNTAwNkNDMUYyIC8q
IFdlYkFyY2hpdmVSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzcyQkExRDExRTY0
OTA3MDAxRUI0RUEgLyogV2ViQmFja0ZvcndhcmRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxQjMwMDUwMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkyREE5NDQ4QzE4ODRFM0I1MDBFRDg2REIgLyogV0tDb250ZW50Vmll
dy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQzEzMzc0MTg1N0MyMUUwMEYzRUMwNSAvKiBBUElH
ZW9tZXRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MThEMkNBRDEyRDUxNTNCMDAzQkI5M0Ig
LyogV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzcyQjlG
QTExRTY0NzZCMDAxRUI0RUEgLyogV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC04MDE1LDcgKzgwMTIsNiBAQAogCQkJCTFBOUUzMjlBMTgyMkUxQ0MwMEY1RDA0
QyAvKiBXS1JlbW90ZU9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEMjhGM0U0MTg4NUND
QzEwMDRCOUVBRSAvKiBXZWJDaHJvbWVDbGllbnRJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlG
NkE5MDgxMzEzM0MyMDUxMDA4MkMzRjQgLyogV2ViQ29va2llTWFuYWdlck1hYy5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCTJEQTk0NDkwMTg4NEUzQjUwMEVEODZEQiAvKiBXS0dlb2xvY2F0aW9uUHJv
dmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMzA5MzQ0
NzEzMTVCOTIyMDA5N0E3QkMgLyogV2ViQ29va2llTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMzA5MzQ1NTEzMTVCOTc1MDA5N0E3QkMgLyogV2ViQ29va2ll
TWFuYWdlclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzQUExMDY2MTMxRjA2MDAwMEQ0
QTU3NSAvKiBXZWJDb29raWVNYW5hZ2VyUHJveHlDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC04MDkxLDYgKzgwODcsNyBAQAogCQkJCTMzRDNBM0M4MTMzOTYxNzkwMDcwOUJFNCAvKiBXZWJN
ZWRpYUNhY2hlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
M0QzQTNCQTEzMzk2MDYyMDA3MDlCRTQgLyogV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzM0QzQTNDQTEzMzk2MTc5MDA3MDlCRTQgLyogV2ViTWVkaWFD
YWNoZU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkNCNEU0RDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tDb250ZW50Vmlldy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTkwOTg1NEVDMTJCQzRFMTcwMDBBRDA4MCAvKiBXZWJNZW1vcnlTYW1wbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkwOTg1NEVFMTJCQzRFMTgwMDBBRDA4MCAvKiBXZWJNZW1vcnlT
YW1wbGVyLm1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwMzM3REIwMTI3QTI4RDAwMDhGRjRG
NCAvKiBXZWJNb3VzZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODEwOSw2ICs4MTA2LDcg
QEAKIAkJCQkyREE5NDRCRDE4ODUxMUU3MDBFRDg2REIgLyogTmV0d29ya1Byb2Nlc3NJT1MubW0g
aW4gU291cmNlcyAqLywKIAkJCQlCQzg1N0Y3RTEyQjgyQ0VFMDBFREVCMkUgLyogV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzk2M0Q2QjEx
M0REMTkyMDA1NzRCRTIgLyogV2ViUGFnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkNCNEU0
OTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tBY3Rpb25TaGVldC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTUxNTM1NjlDMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQYWdlQ29udGV4dE1lbnVDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzA2QzYwOTUxMjRDMTQ0QjAwMDE2ODJGIC8qIFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYyMDcxMjlBMEE2
NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMjUsOSAr
ODEyMyw5IEBACiAJCQkJMkRBOTQ0QTExODg0RTRGMDAwRUQ4NkRCIC8qIFdlYklPU0V2ZW50RmFj
dG9yeS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQkQzOTE0MTI1QkIxQTgwMEQyQzI5RiAvKiBX
ZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzRTcz
NjIxMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlDNTI0NTM5MjE4OUM2Qjg1MDAzREY0NzYgLyogV0tBY3Rpb25TaGVldEFzc2lz
dGFudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwMzM3REREMTI3QTUyMUMwMDhGRjRGNCAvKiBX
ZWJQbGF0Zm9ybVRvdWNoUG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMEQ0MzYxODNC
MzUzRDAwOTcwNDFEIC8qIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDQjRFNEIxOEJCRTA0NDAwMEZDRkM5IC8qIFdL
QWN0aW9uU2hlZXRBc3Npc3RhbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMUQ1OTI5RTE2NkUw
NjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
RTAwRDVDMTgyREFERTEwMDA4N0RENyAvKiBLZXllZEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFDODcwMkUxMzBCNDlBMjAwMkMxMjU3IC8qIFdlYlBsdWdpblNpdGVEYXRhTWFuYWdl
ci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxNzcsOCArODE3NSw4IEBACiAJCQkJQzAzMzdERDEx
MjdBMjk4MDAwOEZGNEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFGQ0IxODUxN0JCRkUwMzAwMzk0Q0Q4IC8qIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlDRDU1QUIxMjhFMjk0RjAwMTMzQzg1IC8qIFdL
QWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW0gaW4gU291cmNlcyAqLywKLQkJCQkyREE5NDQ5
MjE4ODRFM0I1MDBFRDg2REIgLyogV0tJbnRlcmFjdGlvblZpZXcubW0gaW4gU291cmNlcyAqLywK
IAkJCQkxQUM3NTM3RjE4M0JFNTBGMDA3MkNCMTUgLyogRGF0YVJlZmVyZW5jZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkNCNEU0NzE4QkJFMDQ0MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGxJ
T1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJFMzRFNDEzMEI0RDA1MDBBQkQxOUEgLyogV0tB
cHBsaWNhdGlvbkNhY2hlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUM5NjExODE4
M0QyOTQ3MDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzVGMzEyNEZGMDI3MDA2OEYyMEEgLyogV0tBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMDMsNiArODIwMSw3IEBACiAJCQkJNzUzRTNFMEQx
ODg3Mzk4NTAwMTg4NDk2IC8qIFNlc3Npb25UcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDNzA0M0NEMTJGNzVFRTAwMDY0NzJCOSAvKiBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0QkVGRTIxMjBBMUE0QzAwRkJBMEM3IC8qIFdLQnVuZGxl
Tm9kZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkNCNEU1MTE4QkJFMDQ0MDAwRkNG
QzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkMyMDUyODIxMUM5NDI4NDAwOEYzMzc1IC8qIFdLQnVuZGxlUGFnZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0Y0N0ZGNjE3Mjc1QjcxMDA4QUNCOTEgLyogV0tCdW5k
bGVQYWdlQmFubmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3QzRDMDhDMTgxNEFDNUMwMDM2
ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdC5tbSBpbiBTb3VyY2VzICovLApAQCAtODIzNyw2ICs4
MjM2LDcgQEAKIAkJCQkxQUI3RDc4RTEyODhDRDlBMDBDRkQwOEMgLyogV0tEb3dubG9hZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjU5NDc5MjE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzVGQjEyNEZGMDI3
MDA2OEYyMEEgLyogV0tFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkNCNEU1MzE4QkJF
MDQ0MDAwRkNGQzkgLyogV0tJbnRlcmFjdGlvblZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
Q0ZENTQ4QjEzMkQ4MjY4MDA1NUQ4MTYgLyogV0tFcnJvckNGLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDRTQ2OTU5MTIxNEVERjQwMDBCOThFQiAvKiBXS0Zvcm1TdWJtaXNzaW9uTGlzdGVuZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNEMDEzOUMxMTBGQTQyMDAwM0I4QTY3IC8qIFdLRnJh
bWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04Mjk3LDcgKzgyOTcsNiBAQAogCQkJCTFBQzc1MzdC
MTgzQTlGREIwMDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDNDA3NjA3MTI0RkYwMjcwMDY4RjIwQSAvKiBXS1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0NENUVCQkUxNzQ2QjA0QzAwMEMxQzQ1IC8qIFdLVHlwZVJlZldyYXBwZXIubW0gaW4gU291
cmNlcyAqLywKLQkJCQkyREE5NDQ4ODE4ODRFM0I1MDBFRDg2REIgLyogUGFnZUNsaWVudEltcGxJ
T1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUJBMjQ0NjE4NThGNTVEMDBFQTI4MTEgLyogV2Vi
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFERjU5MUExODkwNTI4
RTAwNDNDMTQ1IC8qIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlCQzQwNzYwOTEyNEZGMDI3MDA2OEYyMEEgLyogV0tVUkwuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC04MzE1LDYgKzgzMTQsNyBAQAogCQkJCUM1RTFBRkU4MTZCMjBCNjcwMDZDQzFGMiAvKiBXS1dl
YkFyY2hpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzVFMUFGRUExNkIyMEI3QjAwNkNDMUYy
IC8qIFdLV2ViQXJjaGl2ZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3M0NFQUQ1
MTg1NDE3QUUwMDhDMzYzRCAvKiBXS05TRGF0YS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGQ0I0
RTU1MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlCQzk4OUQ4MTE2MUE3RTVEMDAwRDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM4RjJGMkExNjI3M0EyQzAwNUZBQ0I1IC8qIFdLV2ViUHJvY2Vzc1Bs
dWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMkU2
RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="249195"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>