<?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>129267</bug_id>
          
          <creation_ts>2014-02-24 12:44:25 -0800</creation_ts>
          <short_desc>Move non-API files out of WebKit2/UIProcess/API/mac</short_desc>
          <delta_ts>2014-02-24 12:52:03 -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>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>984008</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 12:44:25 -0800</bug_when>
    <thetext>Move non-API files out of WebKit2/UIProcess/API/mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984009</commentid>
    <comment_count>1</comment_count>
      <attachid>225084</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 12:45:25 -0800</bug_when>
    <thetext>Created attachment 225084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984013</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 12:52:03 -0800</bug_when>
    <thetext>https://trac.webkit.org/r164601</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225084</attachid>
            <date>2014-02-24 12:45:25 -0800</date>
            <delta_ts>2014-02-24 12:46:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129267-20140224124521.patch</filename>
            <type>text/plain</type>
            <size>252193</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggODJmZmNiN2U2MjkxMzVi
MjZmMDUzZGY4YTg1M2JiNWRkM2RhYjEyOC4uZTZkYTg0ZWIxZDU4YTNiNWJkZGQ4ODAyN2FmZTIx
ZGEzM2U3MzRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIyIEBACiAyMDE0LTAyLTI0ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIE1vdmUgbm9uLUFQ
SSBmaWxlcyBvdXQgb2YgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MjY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0ZpbmRJbmRp
Y2F0b3JXaW5kb3cuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL0ZpbmRJbmRpY2F0b3JXaW5kb3cuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0ZpbmRJ
bmRpY2F0b3JXaW5kb3cubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9GaW5kSW5kaWNhdG9yV2luZG93Lm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
UERGVmlld0NvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1BERlZpZXdDb250cm9sbGVyLmguCisgICAgICAgICogVUlQcm9jZXNzL21hYy9Q
REZWaWV3Q29udHJvbGxlci5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1BERlZpZXdDb250cm9sbGVyLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
V0tQcmludGluZ1ZpZXcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLUHJpbnRpbmdWaWV3LmguCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS1ByaW50
aW5nVmlldy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLUHJpbnRpbmdWaWV3Lm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tUZXh0SW5wdXRX
aW5kb3dDb250cm9sbGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvbWFjL1dLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tbTogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5t
bS4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKzIwMTQt
MDItMjQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAg
TW92ZSBub24tQVBJIGZpbGVzIGluIHRoZSBBUEkvaW9zIGRpcmVjdG9yeSBvdXQgdG8gVUlQcm9j
ZXNzL2lvcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI5MjY0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL0Zp
bmRJbmRpY2F0b3JXaW5kb3cuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL0Zp
bmRJbmRpY2F0b3JXaW5kb3cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg2NGI2
NDliZjAxMTljMzBmNzA1MDkxZjQwNzJjOTIyNjA2ZGE3YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9GaW5kSW5kaWNhdG9yV2luZG93LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBGaW5kSW5kaWNhdG9yV2luZG93X2gKLSNkZWZpbmUgRmluZElu
ZGljYXRvcldpbmRvd19oCi0KLSNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgotI2lt
cG9ydCA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW1wb3J0IDx3dGYvUmVmUHRyLmg+Ci0jaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgotCi1AY2xhc3MgV0tG
aW5kSW5kaWNhdG9yV2luZG93QW5pbWF0aW9uOwotQGNsYXNzIFdLVmlldzsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIEZpbmRJbmRpY2F0b3I7Ci0KLWNsYXNzIEZpbmRJbmRpY2F0b3JX
aW5kb3cgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZpbmRJbmRpY2F0b3JXaW5kb3cpOwot
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgRmluZEluZGljYXRvcldpbmRvdyhXS1ZpZXcgKik7Ci0g
ICAgfkZpbmRJbmRpY2F0b3JXaW5kb3coKTsKLQotICAgIHZvaWQgc2V0RmluZEluZGljYXRvcihQ
YXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSk7Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCBjbG9zZVdpbmRvdygpOwotCi0gICAgdm9pZCBzdGFydEZhZGVP
dXRUaW1lckZpcmVkKCk7Ci0KLSAgICB2b2lkIGZhZGVPdXRBbmltYXRpb25DYWxsYmFjayhkb3Vi
bGUpOwotICAgIHZvaWQgZmFkZU91dEFuaW1hdGlvbkRpZEVuZCgpOwotCi0gICAgdm9pZCBib3Vu
Y2VBbmltYXRpb25DYWxsYmFjayhkb3VibGUpOwotICAgIHZvaWQgYm91bmNlQW5pbWF0aW9uRGlk
RW5kKCk7Ci0KLSAgICBXS1ZpZXcqIG1fd2tWaWV3OwotICAgIFJlZlB0cjxGaW5kSW5kaWNhdG9y
PiBtX2ZpbmRJbmRpY2F0b3I7Ci0gICAgUmV0YWluUHRyPE5TV2luZG93PiBtX2ZpbmRJbmRpY2F0
b3JXaW5kb3c7Ci0KLSAgICBXS1dpbmRvd0JvdW5jZUFuaW1hdGlvbkNvbnRleHRSZWYgbV9ib3Vu
Y2VBbmltYXRpb25Db250ZXh0OwotICAgIFJldGFpblB0cjxXS0ZpbmRJbmRpY2F0b3JXaW5kb3dB
bmltYXRpb24+IG1fYm91bmNlQW5pbWF0aW9uOwotCi0gICAgUnVuTG9vcDo6VGltZXI8RmluZElu
ZGljYXRvcldpbmRvdz4gbV9zdGFydEZhZGVPdXRUaW1lcjsKLSAgICBSZXRhaW5QdHI8V0tGaW5k
SW5kaWNhdG9yV2luZG93QW5pbWF0aW9uPiBtX2ZhZGVPdXRBbmltYXRpb247Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEZpbmRJbmRpY2F0b3JXaW5kb3dfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvRmluZEluZGljYXRvcldp
bmRvdy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL0ZpbmRJbmRpY2F0b3JX
aW5kb3cubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwOTk1ZDM5NWQzY2JmNzNh
YWFlZjlmMTQ0OTY0NGU0YzU3NjBkZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvRmluZEluZGlj
YXRvcldpbmRvdy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJGaW5kSW5kaWNhdG9yV2luZG93LmgiCi0K
LSNpbXBvcnQgIkZpbmRJbmRpY2F0b3IuaCIKLSNpbXBvcnQgIldLVmlldy5oIgotI2ltcG9ydCA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLQotc3RhdGljIGNvbnN0IGRvdWJsZSBib3VuY2VB
bmltYXRpb25EdXJhdGlvbiA9IDAuMTI7Ci1zdGF0aWMgY29uc3QgZG91YmxlIHRpbWVCZWZvcmVG
YWRlU3RhcnRzID0gYm91bmNlQW5pbWF0aW9uRHVyYXRpb24gKyAwLjI7Ci1zdGF0aWMgY29uc3Qg
ZG91YmxlIGZhZGVPdXRBbmltYXRpb25EdXJhdGlvbiA9IDAuMzsKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLUBpbnRlcmZhY2UgV0tGaW5kSW5kaWNhdG9yVmlldyA6IE5TVmlldyB7Ci0g
ICAgUmVmUHRyPFdlYktpdDo6RmluZEluZGljYXRvcj4gX2ZpbmRJbmRpY2F0b3I7Ci19Ci0KLS0g
KGlkKV9pbml0V2l0aEZpbmRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2ViS2l0OjpGaW5kSW5kaWNh
dG9yPilmaW5kSW5kaWNhdG9yOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tGaW5kSW5kaWNh
dG9yVmlldwotCi0tIChpZClfaW5pdFdpdGhGaW5kSW5kaWNhdG9yOihQYXNzUmVmUHRyPFdlYktp
dDo6RmluZEluZGljYXRvcj4pZmluZEluZGljYXRvcgotewotICAgIGlmICgoc2VsZiA9IFtzdXBl
ciBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3RdKSkKLSAgICAgICAgX2ZpbmRJbmRpY2F0b3IgPSBm
aW5kSW5kaWNhdG9yOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZHJhd1JlY3Q6
KE5TUmVjdClyZWN0Ci17Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChzdGF0
aWNfY2FzdDxDR0NvbnRleHRSZWY+KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRd
IGdyYXBoaWNzUG9ydF0pKTsKLQotICAgIF9maW5kSW5kaWNhdG9yLT5kcmF3KGdyYXBoaWNzQ29u
dGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7Ci19Ci0KLS0gKEJPT0wpaXNGbGlwcGVkCi17
Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIFdLRmluZEluZGljYXRv
cldpbmRvd0FuaW1hdGlvbiA6IE5TQW5pbWF0aW9uPE5TQW5pbWF0aW9uRGVsZWdhdGU+IHsKLSAg
ICBXZWJLaXQ6OkZpbmRJbmRpY2F0b3JXaW5kb3cqIF9maW5kSW5kaWNhdG9yV2luZG93OwotICAg
IHZvaWQgKFdlYktpdDo6RmluZEluZGljYXRvcldpbmRvdzo6Kl9hbmltYXRpb25Qcm9ncmVzc0Nh
bGxiYWNrKShkb3VibGUgcHJvZ3Jlc3MpOwotICAgIHZvaWQgKFdlYktpdDo6RmluZEluZGljYXRv
cldpbmRvdzo6Kl9hbmltYXRpb25EaWRFbmRDYWxsYmFjaykoKTsKLX0KLQotLSAoaWQpX2luaXRX
aXRoRmluZEluZGljYXRvcldpbmRvdzooV2ViS2l0OjpGaW5kSW5kaWNhdG9yV2luZG93ICopZmlu
ZEluZGljYXRvcldpbmRvdyAKLSAgICAgICAgICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246KENG
VGltZUludGVydmFsKWR1cmF0aW9uCi0gICAgICAgICBhbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNr
Oih2b2lkIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3JXaW5kb3c6OiopKGRvdWJsZSBwcm9ncmVzcykp
YW5pbWF0aW9uUHJvZ3Jlc3NDYWxsYmFjawotICAgICAgICAgICBhbmltYXRpb25EaWRFbmRDYWxs
YmFjazoodm9pZCAoV2ViS2l0OjpGaW5kSW5kaWNhdG9yV2luZG93OjoqKSgpKWFuaW1hdGlvbkRp
ZEVuZENhbGxiYWNrOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tGaW5kSW5kaWNhdG9yV2lu
ZG93QW5pbWF0aW9uCi0KLS0gKGlkKV9pbml0V2l0aEZpbmRJbmRpY2F0b3JXaW5kb3c6KFdlYktp
dDo6RmluZEluZGljYXRvcldpbmRvdyAqKWZpbmRJbmRpY2F0b3JXaW5kb3cgCi0gICAgICAgICAg
ICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOihDRlRpbWVJbnRlcnZhbClhbmltYXRpb25EdXJhdGlv
bgotICAgICAgICAgYW5pbWF0aW9uUHJvZ3Jlc3NDYWxsYmFjazoodm9pZCAoV2ViS2l0OjpGaW5k
SW5kaWNhdG9yV2luZG93OjoqKShkb3VibGUgcHJvZ3Jlc3MpKWFuaW1hdGlvblByb2dyZXNzQ2Fs
bGJhY2sKLSAgICAgICAgICAgYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2s6KHZvaWQgKFdlYktpdDo6
RmluZEluZGljYXRvcldpbmRvdzo6KikoKSlhbmltYXRpb25EaWRFbmRDYWxsYmFjawotewotICAg
IGlmICgoc2VsZiA9IFtzdXBlciBpbml0V2l0aER1cmF0aW9uOmFuaW1hdGlvbkR1cmF0aW9uIGFu
aW1hdGlvbkN1cnZlOk5TQW5pbWF0aW9uRWFzZUluT3V0XSkpIHsKLSAgICAgICAgX2ZpbmRJbmRp
Y2F0b3JXaW5kb3cgPSBmaW5kSW5kaWNhdG9yV2luZG93OwotICAgICAgICBfYW5pbWF0aW9uUHJv
Z3Jlc3NDYWxsYmFjayA9IGFuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2s7Ci0gICAgICAgIF9hbmlt
YXRpb25EaWRFbmRDYWxsYmFjayA9IGFuaW1hdGlvbkRpZEVuZENhbGxiYWNrOwotICAgICAgICBb
c2VsZiBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW3NlbGYgc2V0QW5pbWF0aW9uQmxvY2tp
bmdNb2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmddOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJv
Z3Jlc3MKLXsKLSAgICAoX2ZpbmRJbmRpY2F0b3JXaW5kb3ctPipfYW5pbWF0aW9uUHJvZ3Jlc3ND
YWxsYmFjaykocHJvZ3Jlc3MpOwotfQotCi0tICh2b2lkKWFuaW1hdGlvbkRpZEVuZDooTlNBbmlt
YXRpb24gKilhbmltYXRpb24KLXsKLSAgICBBU1NFUlQoYW5pbWF0aW9uID09IHNlbGYpOwotCi0g
ICAgKF9maW5kSW5kaWNhdG9yV2luZG93LT4qX2FuaW1hdGlvbkRpZEVuZENhbGxiYWNrKSgpOwot
fQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1GaW5kSW5kaWNhdG9yV2luZG93OjpG
aW5kSW5kaWNhdG9yV2luZG93KFdLVmlldyAqd2tWaWV3KQotICAgIDogbV93a1ZpZXcod2tWaWV3
KQotICAgICwgbV9ib3VuY2VBbmltYXRpb25Db250ZXh0KDApCi0gICAgLCBtX3N0YXJ0RmFkZU91
dFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkZpbmRJbmRpY2F0b3JXaW5kb3c6OnN0YXJ0
RmFkZU91dFRpbWVyRmlyZWQpCi17Ci19Ci0KLUZpbmRJbmRpY2F0b3JXaW5kb3c6On5GaW5kSW5k
aWNhdG9yV2luZG93KCkKLXsKLSAgICBjbG9zZVdpbmRvdygpOwotfQotCi12b2lkIEZpbmRJbmRp
Y2F0b3JXaW5kb3c6OnNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBm
aW5kSW5kaWNhdG9yLCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkKLXsKLSAgICBpZiAobV9m
aW5kSW5kaWNhdG9yID09IGZpbmRJbmRpY2F0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
ZmluZEluZGljYXRvciA9IGZpbmRJbmRpY2F0b3I7Ci0KLSAgICAvLyBHZXQgcmlkIG9mIHRoZSBv
bGQgd2luZG93LgotICAgIGNsb3NlV2luZG93KCk7Ci0KLSAgICBpZiAoIW1fZmluZEluZGljYXRv
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNSZWN0IGNvbnRlbnRSZWN0ID0gbV9maW5kSW5k
aWNhdG9yLT5mcmFtZVJlY3QoKTsKLSAgICBOU1JlY3Qgd2luZG93RnJhbWVSZWN0ID0gTlNJbnRl
Z3JhbFJlY3QoW21fd2tWaWV3IGNvbnZlcnRSZWN0OmNvbnRlbnRSZWN0IHRvVmlldzpuaWxdKTsK
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICB3aW5kb3dGcmFtZVJlY3Qu
b3JpZ2luID0gW1ttX3drVmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46d2luZG93RnJh
bWVSZWN0Lm9yaWdpbl07Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgTlNSZWN0
IHdpbmRvd0NvbnRlbnRSZWN0ID0gW05TV2luZG93IGNvbnRlbnRSZWN0Rm9yRnJhbWVSZWN0Ondp
bmRvd0ZyYW1lUmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFza107Ci0gICAgCi0g
ICAgbV9maW5kSW5kaWNhdG9yV2luZG93ID0gYWRvcHROUyhbW05TV2luZG93IGFsbG9jXSBpbml0
V2l0aENvbnRlbnRSZWN0OndpbmRvd0NvbnRlbnRSZWN0IAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZU1hc2s6TlNCb3Jk
ZXJsZXNzV2luZG93TWFzayAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmVyOk5PXSk7Ci0KLSAgICBbbV9maW5kSW5kaWNhdG9yV2luZG93IHNldEJh
Y2tncm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAgW21fZmluZEluZGljYXRv
cldpbmRvdyBzZXRPcGFxdWU6Tk9dOwotICAgIFttX2ZpbmRJbmRpY2F0b3JXaW5kb3cgc2V0SWdu
b3Jlc01vdXNlRXZlbnRzOllFU107Ci0KLSAgICBSZXRhaW5QdHI8V0tGaW5kSW5kaWNhdG9yVmll
dz4gZmluZEluZGljYXRvclZpZXcgPSBhZG9wdE5TKFtbV0tGaW5kSW5kaWNhdG9yVmlldyBhbGxv
Y10gX2luaXRXaXRoRmluZEluZGljYXRvcjptX2ZpbmRJbmRpY2F0b3JdKTsKLSAgICBbbV9maW5k
SW5kaWNhdG9yV2luZG93IHNldENvbnRlbnRWaWV3OmZpbmRJbmRpY2F0b3JWaWV3LmdldCgpXTsK
LQotICAgIFtbbV93a1ZpZXcgd2luZG93XSBhZGRDaGlsZFdpbmRvdzptX2ZpbmRJbmRpY2F0b3JX
aW5kb3cuZ2V0KCkgb3JkZXJlZDpOU1dpbmRvd0Fib3ZlXTsKLSAgICBbbV9maW5kSW5kaWNhdG9y
V2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107Ci0KLSAgICBpZiAoYW5pbWF0ZSkgewot
ICAgICAgICAvLyBTdGFydCB0aGUgYm91bmNlIGFuaW1hdGlvbi4KLSAgICAgICAgbV9ib3VuY2VB
bmltYXRpb25Db250ZXh0ID0gV0tXaW5kb3dCb3VuY2VBbmltYXRpb25Db250ZXh0Q3JlYXRlKG1f
ZmluZEluZGljYXRvcldpbmRvdy5nZXQoKSk7Ci0gICAgICAgIG1fYm91bmNlQW5pbWF0aW9uID0g
YWRvcHROUyhbW1dLRmluZEluZGljYXRvcldpbmRvd0FuaW1hdGlvbiBhbGxvY10gX2luaXRXaXRo
RmluZEluZGljYXRvcldpbmRvdzp0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmlt
YXRpb25EdXJhdGlvbjpib3VuY2VBbmltYXRpb25EdXJhdGlvbgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2s6JkZpbmRJbmRpY2F0b3JXaW5kb3c6OmJvdW5jZUFu
aW1hdGlvbkNhbGxiYWNrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25EaWRFbmRDYWxs
YmFjazomRmluZEluZGljYXRvcldpbmRvdzo6Ym91bmNlQW5pbWF0aW9uRGlkRW5kXSk7Ci0gICAg
ICAgIFttX2JvdW5jZUFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Ci0gICAgfQotCi0gICAgaWYg
KGZhZGVPdXQpCi0gICAgICAgIG1fc3RhcnRGYWRlT3V0VGltZXIuc3RhcnRPbmVTaG90KHRpbWVC
ZWZvcmVGYWRlU3RhcnRzKTsKLX0KLQotdm9pZCBGaW5kSW5kaWNhdG9yV2luZG93OjpjbG9zZVdp
bmRvdygpCi17Ci0gICAgaWYgKCFtX2ZpbmRJbmRpY2F0b3JXaW5kb3cpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc3RhcnRGYWRlT3V0VGltZXIuc3RvcCgpOwotCi0gICAgaWYgKG1fZmFkZU91
dEFuaW1hdGlvbikgewotICAgICAgICBbbV9mYWRlT3V0QW5pbWF0aW9uIHN0b3BBbmltYXRpb25d
OwotICAgICAgICBtX2ZhZGVPdXRBbmltYXRpb24gPSBudWxscHRyOwotICAgIH0KLQotICAgIGlm
IChtX2JvdW5jZUFuaW1hdGlvbikgewotICAgICAgICBbbV9ib3VuY2VBbmltYXRpb24gc3RvcEFu
aW1hdGlvbl07Ci0gICAgICAgIG1fYm91bmNlQW5pbWF0aW9uID0gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBpZiAobV9ib3VuY2VBbmltYXRpb25Db250ZXh0KQotICAgICAgICBXS1dpbmRvd0JvdW5j
ZUFuaW1hdGlvbkNvbnRleHREZXN0cm95KG1fYm91bmNlQW5pbWF0aW9uQ29udGV4dCk7Ci0gICAg
Ci0gICAgW1ttX2ZpbmRJbmRpY2F0b3JXaW5kb3cgcGFyZW50V2luZG93XSByZW1vdmVDaGlsZFdp
bmRvdzptX2ZpbmRJbmRpY2F0b3JXaW5kb3cuZ2V0KCldOwotICAgIFttX2ZpbmRJbmRpY2F0b3JX
aW5kb3cgY2xvc2VdOwotICAgIG1fZmluZEluZGljYXRvcldpbmRvdyA9IG51bGxwdHI7Ci19Ci0K
LXZvaWQgRmluZEluZGljYXRvcldpbmRvdzo6c3RhcnRGYWRlT3V0VGltZXJGaXJlZCgpCi17Ci0g
ICAgQVNTRVJUKCFtX2ZhZGVPdXRBbmltYXRpb24pOwotICAgIAotICAgIG1fZmFkZU91dEFuaW1h
dGlvbiA9IGFkb3B0TlMoW1tXS0ZpbmRJbmRpY2F0b3JXaW5kb3dBbmltYXRpb24gYWxsb2NdIF9p
bml0V2l0aEZpbmRJbmRpY2F0b3JXaW5kb3c6dGhpcwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhbmltYXRpb25EdXJhdGlvbjpmYWRlT3V0QW5pbWF0aW9uRHVyYXRpb24KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2s6JkZpbmRJbmRpY2F0b3JXaW5kb3c6OmZh
ZGVPdXRBbmltYXRpb25DYWxsYmFjawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25EaWRF
bmRDYWxsYmFjazomRmluZEluZGljYXRvcldpbmRvdzo6ZmFkZU91dEFuaW1hdGlvbkRpZEVuZF0p
OwotICAgIFttX2ZhZGVPdXRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dOwotfQotICAgICAgICAg
ICAgICAgICAgICAgICAgCi12b2lkIEZpbmRJbmRpY2F0b3JXaW5kb3c6OmZhZGVPdXRBbmltYXRp
b25DYWxsYmFjayhkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgQVNTRVJUKG1fZmFkZU91dEFuaW1h
dGlvbik7Ci0KLSAgICBbbV9maW5kSW5kaWNhdG9yV2luZG93IHNldEFscGhhVmFsdWU6MS4wIC0g
cHJvZ3Jlc3NdOwotfQotCi12b2lkIEZpbmRJbmRpY2F0b3JXaW5kb3c6OmZhZGVPdXRBbmltYXRp
b25EaWRFbmQoKQotewotICAgIEFTU0VSVChtX2ZhZGVPdXRBbmltYXRpb24pOwotICAgIEFTU0VS
VChtX2ZpbmRJbmRpY2F0b3JXaW5kb3cpOwotCi0gICAgY2xvc2VXaW5kb3coKTsKLX0KLQotdm9p
ZCBGaW5kSW5kaWNhdG9yV2luZG93Ojpib3VuY2VBbmltYXRpb25DYWxsYmFjayhkb3VibGUgcHJv
Z3Jlc3MpCi17Ci0gICAgQVNTRVJUKG1fYm91bmNlQW5pbWF0aW9uKTsKLSAgICBBU1NFUlQobV9i
b3VuY2VBbmltYXRpb25Db250ZXh0KTsKLQotICAgIFdLV2luZG93Qm91bmNlQW5pbWF0aW9uU2V0
QW5pbWF0aW9uUHJvZ3Jlc3MobV9ib3VuY2VBbmltYXRpb25Db250ZXh0LCBwcm9ncmVzcyk7Ci19
Ci0KLXZvaWQgRmluZEluZGljYXRvcldpbmRvdzo6Ym91bmNlQW5pbWF0aW9uRGlkRW5kKCkKLXsK
LSAgICBBU1NFUlQobV9ib3VuY2VBbmltYXRpb24pOwotICAgIEFTU0VSVChtX2JvdW5jZUFuaW1h
dGlvbkNvbnRleHQpOwotICAgIEFTU0VSVChtX2ZpbmRJbmRpY2F0b3JXaW5kb3cpOwotCi0gICAg
V0tXaW5kb3dCb3VuY2VBbmltYXRpb25Db250ZXh0RGVzdHJveShtX2JvdW5jZUFuaW1hdGlvbkNv
bnRleHQpOwotICAgIG1fYm91bmNlQW5pbWF0aW9uQ29udGV4dCA9IDA7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvUERGVmlld0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1BERlZpZXdDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZjVh
YjJlMDk4ODU3OTQzNmU1OTQ3NmRlODU1NTZkZDVjZTRkODguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvUERGVmlld0NvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBERlZpZXdDb250cm9sbGVyX2gKLSNkZWZpbmUgUERG
Vmlld0NvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKLSNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1AY2xhc3MgUERGVmlldzsKLUBjbGFzcyBXS1ZpZXc7
Ci1AY2xhc3MgV0tQREZWaWV3OwotCi1uYW1lc3BhY2UgSVBDIHsKLSAgICBjbGFzcyBEYXRhUmVm
ZXJlbmNlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5Owot
Ci1jbGFzcyBQREZWaWV3Q29udHJvbGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUERG
Vmlld0NvbnRyb2xsZXIpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UERGVmll
d0NvbnRyb2xsZXI+IGNyZWF0ZShXS1ZpZXcgKik7Ci0gICAgflBERlZpZXdDb250cm9sbGVyKCk7
Ci0KLSAgICBXS1ZpZXcqIHdrVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2tWaWV3OyB9Ci0gICAg
V2ViUGFnZVByb3h5KiBwYWdlKCkgY29uc3Q7Ci0gICAgTlNWaWV3KiBwZGZWaWV3KCkgY29uc3Q7
Ci0gICAgCi0gICAgdm9pZCBzZXRQREZEb2N1bWVudERhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJik7Ci0KLSAgICBkb3VibGUgem9vbUZhY3RvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0Wm9v
bUZhY3Rvcihkb3VibGUpOwotCi0gICAgc3RhdGljIENsYXNzIHBkZlByZXZpZXdWaWV3Q2xhc3Mo
KTsKLQotICAgIGJvb2wgZm9yd2FyZFNjcm9sbFdoZWVsRXZlbnQoTlNFdmVudCAqKTsKLQotICAg
IE5TUHJpbnRPcGVyYXRpb24gKm1ha2VQcmludE9wZXJhdGlvbihOU1ByaW50SW5mbyAqKTsKLSAg
ICB2b2lkIG9wZW5QREZJbkZpbmRlcigpOwotICAgIHZvaWQgc2F2ZVBERlRvRG93bmxvYWRzRm9s
ZGVyKCk7Ci0gICAgdm9pZCBsaW5rQ2xpY2tlZChjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9p
ZCBwcmludCgpOwotCi0gICAgdm9pZCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRp
b25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKLSAgICB2b2lkIGNvdW50U3RyaW5nTWF0Y2hl
cyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7Ci0K
LXByaXZhdGU6Ci0gICAgZXhwbGljaXQgUERGVmlld0NvbnRyb2xsZXIoV0tWaWV3ICp3a1ZpZXcp
OwotCi0gICAgc3RhdGljIENsYXNzIHBkZkRvY3VtZW50Q2xhc3MoKTsKLSAgICBzdGF0aWMgTlNC
dW5kbGUqIHBkZktpdEJ1bmRsZSgpOwotCi0gICAgV0tWaWV3KiBtX3drVmlldzsKLQotICAgIFJl
dGFpblB0cjxXS1BERlZpZXc+IG1fd2tQREZWaWV3OwotICAgIFBERlZpZXcqIG1fcGRmVmlldzsK
LQotICAgIFJldGFpblB0cjxOU1N0cmluZz4gbV9zdWdnZXN0ZWRGaWxlbmFtZTsKLSAgICBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBtX3BkZkRhdGE7Ci0KLSAgICBTdHJpbmcgbV90ZW1wb3JhcnlQREZV
VUlEOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQREZWaWV3Q29u
dHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9Q
REZWaWV3Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BE
RlZpZXdDb250cm9sbGVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjFiYTM5
NWVhZmQ0ODBkNWMzMDQxNmIzYjFhNjg4ODIzMDcyOWRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1BERlZpZXdDb250cm9sbGVyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNjc4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlBERlZpZXdDb250
cm9sbGVyLmgiCi0KLSNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbXBvcnQgIldLQVBJQ2Fz
dC5oIgotI2ltcG9ydCAiV0tWaWV3UHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViRGF0YS5oIgotI2lt
cG9ydCAiV2ViRXZlbnRGYWN0b3J5LmgiCi0jaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIKLSNpbXBv
cnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbXBvcnQg
PFBERktpdC9QREZLaXQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgot
I2ltcG9ydCA8V2ViQ29yZS9VVUlELmg+Ci0jaW1wb3J0IDx3dGYvT2JqY1J1bnRpbWVFeHRyYXMu
aD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi0vLyBSZWRlY2xhcmF0aW9ucyBvZiBQREZLaXQgbm90aWZpY2F0aW9ucy4gV2Ug
Y2FuJ3QgdXNlIHRoZSBBUEkgc2luY2Ugd2UgdXNlIGEgd2VhayBsaW5rIHRvIHRoZSBmcmFtZXdv
cmsuCi0jZGVmaW5lIF93ZWJraXRfUERGVmlld0Rpc3BsYXlNb2RlQ2hhbmdlZE5vdGlmaWNhdGlv
biBAIlBERlZpZXdEaXNwbGF5TW9kZUNoYW5nZWQiCi0jZGVmaW5lIF93ZWJraXRfUERGVmlld1Nj
YWxlQ2hhbmdlZE5vdGlmaWNhdGlvbiBAIlBERlZpZXdTY2FsZUNoYW5nZWQiCi0jZGVmaW5lIF93
ZWJraXRfUERGVmlld1BhZ2VDaGFuZ2VkTm90aWZpY2F0aW9uIEAiUERGVmlld0NoYW5nZWRQYWdl
IgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0K
LUBjbGFzcyBQREZEb2N1bWVudDsKLUBjbGFzcyBQREZWaWV3OwotCi1AaW50ZXJmYWNlIFBERkRv
Y3VtZW50IChQREZEb2N1bWVudERldGFpbHMpCi0tIChOU1ByaW50T3BlcmF0aW9uICopZ2V0UHJp
bnRPcGVyYXRpb25Gb3JQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvIGF1dG9Sb3Rh
dGU6KEJPT0wpZG9Sb3RhdGU7Ci1AZW5kCi0KLWV4dGVybiAiQyIgTlNTdHJpbmcgKl9OU1BhdGhG
b3JTeXN0ZW1GcmFtZXdvcmsoTlNTdHJpbmcgKmZyYW1ld29yayk7Ci0KLS8vIE1BUks6IEMgVVRJ
TElUWSBGVU5DVElPTlMKLQotc3RhdGljIHZvaWQgX2FwcGxpY2F0aW9uSW5mb0Zvck1JTUVUeXBl
KE5TU3RyaW5nICp0eXBlLCBOU1N0cmluZyAqKm5hbWUsIE5TSW1hZ2UgKippbWFnZSkKLXsKLSAg
ICBBU1NFUlQobmFtZSk7Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBDRlVSTFJlZiBh
cHBVUkwgPSAwOwotCi0gICAgT1NTdGF0dXMgZXJyb3IgPSBMU0NvcHlBcHBsaWNhdGlvbkZvck1J
TUVUeXBlKChDRlN0cmluZ1JlZil0eXBlLCBrTFNSb2xlc0FsbCwgJmFwcFVSTCk7Ci0gICAgaWYg
KGVycm9yICE9IG5vRXJyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1N0cmluZyAqYXBwUGF0
aCA9IFsoTlNVUkwgKilhcHBVUkwgcGF0aF07Ci0gICAgaWYgKGFwcFVSTCkKLSAgICAgICAgQ0ZS
ZWxlYXNlKGFwcFVSTCk7Ci0KLSAgICAqaW1hZ2UgPSBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtz
cGFjZV0gaWNvbkZvckZpbGU6YXBwUGF0aF07Ci0gICAgWyppbWFnZSBzZXRTaXplOk5TTWFrZVNp
emUoMTYsIDE2KV07Ci0KLSAgICAqbmFtZSA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gZGlzcGxheU5hbWVBdFBhdGg6YXBwUGF0aF07Ci19Ci0KLS8vIEZJWE1FIDQxODI4NzY6IFdl
IGNhbiBlbGltaW5hdGUgdGhpcyBmdW5jdGlvbiBpbiBmYXZvciBpZiAtaXNFcXVhbDogaWYgW1BE
RlNlbGVjdGlvbiBpc0VxdWFsOl0gaXMgb3ZlcnJpZGRlbgotLy8gdG8gY29tcGFyZSBjb250ZW50
cy4KLXN0YXRpYyBCT09MIF9QREZTZWxlY3Rpb25zQXJlRXF1YWwoUERGU2VsZWN0aW9uICpzZWxl
Y3Rpb25BLCBQREZTZWxlY3Rpb24gKnNlbGVjdGlvbkIpCi17Ci0gICAgTlNBcnJheSAqYVBhZ2Vz
ID0gW3NlbGVjdGlvbkEgcGFnZXNdOwotICAgIE5TQXJyYXkgKmJQYWdlcyA9IFtzZWxlY3Rpb25C
IHBhZ2VzXTsKLQotICAgIGlmICghW2FQYWdlcyBpc0VxdWFsOmJQYWdlc10pCi0gICAgICAgIHJl
dHVybiBOTzsKLQotICAgIE5TVUludGVnZXIgY291bnQgPSBbYVBhZ2VzIGNvdW50XTsKLSAgICBm
b3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIE5TUmVjdCBh
Qm91bmRzID0gW3NlbGVjdGlvbkEgYm91bmRzRm9yUGFnZTpbYVBhZ2VzIG9iamVjdEF0SW5kZXg6
aV1dOwotICAgICAgICBOU1JlY3QgYkJvdW5kcyA9IFtzZWxlY3Rpb25CIGJvdW5kc0ZvclBhZ2U6
W2JQYWdlcyBvYmplY3RBdEluZGV4OmldXTsKLSAgICAgICAgaWYgKCFOU0VxdWFsUmVjdHMoYUJv
dW5kcywgYkJvdW5kcykpCi0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgfQotCi0gICAgcmV0
dXJuIFlFUzsKLX0KLQotQGludGVyZmFjZSBXS1BERlZpZXcgOiBOU1ZpZXcKLXsKLSAgICBQREZW
aWV3Q29udHJvbGxlciogX3BkZlZpZXdDb250cm9sbGVyOwotCi0gICAgUmV0YWluUHRyPE5TVmll
dz4gX3BkZlByZXZpZXdWaWV3OwotICAgIFBERlZpZXcgKl9wZGZWaWV3OwotICAgIEJPT0wgX2ln
bm9yZVNjYWxlQW5kRGlzcGxheU1vZGVBbmRQYWdlTm90aWZpY2F0aW9uczsKLSAgICBCT09MIF93
aWxsVXBkYXRlUHJlZmVyZW5jZXNTb29uOwotfQotCi0tIChpZClpbml0V2l0aEZyYW1lOihOU1Jl
Y3QpZnJhbWUgUERGVmlld0NvbnRyb2xsZXI6KFBERlZpZXdDb250cm9sbGVyKilwZGZWaWV3Q29u
dHJvbGxlcjsKLS0gKHZvaWQpaW52YWxpZGF0ZTsKLS0gKFBERlZpZXcgKilwZGZWaWV3OwotLSAo
dm9pZClzZXREb2N1bWVudDooUERGRG9jdW1lbnQgKilwZGZEb2N1bWVudDsKLQotLSAoQk9PTClm
b3J3YXJkU2Nyb2xsV2hlZWxFdmVudDooTlNFdmVudCAqKXdoZWVsRXZlbnQ7Ci0tICh2b2lkKV9h
cHBseVBERlByZWZlcmVuY2VzOwotLSAoUERGU2VsZWN0aW9uICopX25leHRNYXRjaEZvcjooTlNT
dHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09MKWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9P
TCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFnIGZyb21TZWxlY3Rpb246KFBERlNlbGVjdGlv
biAqKWluaXRpYWxTZWxlY3Rpb24gc3RhcnRJblNlbGVjdGlvbjooQk9PTClzdGFydEluU2VsZWN0
aW9uOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tQREZWaWV3Ci0KLS0gKGlkKWluaXRXaXRo
RnJhbWU6KE5TUmVjdClmcmFtZSBQREZWaWV3Q29udHJvbGxlcjooUERGVmlld0NvbnRyb2xsZXIq
KXBkZlZpZXdDb250cm9sbGVyCi17Ci0gICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJh
bWU6ZnJhbWVdKSkgewotICAgICAgICBfcGRmVmlld0NvbnRyb2xsZXIgPSBwZGZWaWV3Q29udHJv
bGxlcjsKLQotICAgICAgICBbc2VsZiBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6
YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOwotCi0gICAgICAgIENsYXNzIHByZXZpZXdWaWV3
Q2xhc3MgPSBQREZWaWV3Q29udHJvbGxlcjo6cGRmUHJldmlld1ZpZXdDbGFzcygpOwotICAgICAg
ICBBU1NFUlQocHJldmlld1ZpZXdDbGFzcyk7Ci0KLSAgICAgICAgX3BkZlByZXZpZXdWaWV3ID0g
YWRvcHROUyhbW3ByZXZpZXdWaWV3Q2xhc3MgYWxsb2NdIGluaXRXaXRoRnJhbWU6ZnJhbWVdKTsK
LSAgICAgICAgW19wZGZQcmV2aWV3Vmlldy5nZXQoKSBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmll
d1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOwotICAgICAgICBbc2VsZiBhZGRT
dWJ2aWV3Ol9wZGZQcmV2aWV3Vmlldy5nZXQoKV07Ci0KLSAgICAgICAgX3BkZlZpZXcgPSBbX3Bk
ZlByZXZpZXdWaWV3LmdldCgpIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocGRmVmlldyldOwot
ICAgICAgICBbX3BkZlZpZXcgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgfQotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQotewotICAgIF9wZGZWaWV3Q29udHJvbGxl
ciA9IDA7Ci19Ci0KLS0gKFBERlZpZXcgKilwZGZWaWV3Ci17Ci0gICAgcmV0dXJuIF9wZGZWaWV3
OwotfQotCi0tICh2b2lkKXNldERvY3VtZW50OihQREZEb2N1bWVudCAqKXBkZkRvY3VtZW50Ci17
Ci0gICAgX2lnbm9yZVNjYWxlQW5kRGlzcGxheU1vZGVBbmRQYWdlTm90aWZpY2F0aW9ucyA9IFlF
UzsKLSAgICBbX3BkZlZpZXcgc2V0RG9jdW1lbnQ6cGRmRG9jdW1lbnRdOwotICAgIFtzZWxmIF9h
cHBseVBERlByZWZlcmVuY2VzXTsKLSAgICBfaWdub3JlU2NhbGVBbmREaXNwbGF5TW9kZUFuZFBh
Z2VOb3RpZmljYXRpb25zID0gTk87Ci19Ci0KLS0gKHZvaWQpX2FwcGx5UERGUHJlZmVyZW5jZXMK
LXsKLSAgICBpZiAoIV9wZGZWaWV3Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
V2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gX3BkZlZpZXdDb250cm9sbGVyLT5wYWdlKCkt
PnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpOwotCi0gICAgQ0dGbG9hdCBzY2FsZUZhY3RvciA9
IHByZWZlcmVuY2VzLT5wZGZTY2FsZUZhY3RvcigpOwotICAgIGlmICghc2NhbGVGYWN0b3IpCi0g
ICAgICAgIFtfcGRmVmlldyBzZXRBdXRvU2NhbGVzOllFU107Ci0gICAgZWxzZSB7Ci0gICAgICAg
IFtfcGRmVmlldyBzZXRBdXRvU2NhbGVzOk5PXTsKLSAgICAgICAgW19wZGZWaWV3IHNldFNjYWxl
RmFjdG9yOnNjYWxlRmFjdG9yXTsKLSAgICB9Ci0gICAgW19wZGZWaWV3IHNldERpc3BsYXlNb2Rl
OnByZWZlcmVuY2VzLT5wZGZEaXNwbGF5TW9kZSgpXTsKLX0KLQotLSAodm9pZClfdXBkYXRlUHJl
ZmVyZW5jZXM6KGlkKWlnbm9yZWQKLXsKLSAgICBfd2lsbFVwZGF0ZVByZWZlcmVuY2VzU29vbiA9
IE5POwotCi0gICAgaWYgKCFfcGRmVmlld0NvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcyA9IF9wZGZWaWV3Q29udHJvbGxlci0+cGFn
ZSgpLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKLQotICAgIENHRmxvYXQgc2NhbGVGYWN0
b3IgPSBbX3BkZlZpZXcgYXV0b1NjYWxlc10gPyAwIDogW19wZGZWaWV3IHNjYWxlRmFjdG9yXTsK
LSAgICBwcmVmZXJlbmNlcy0+c2V0UERGU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpOwotICAgIHBy
ZWZlcmVuY2VzLT5zZXRQREZEaXNwbGF5TW9kZShbX3BkZlZpZXcgZGlzcGxheU1vZGVdKTsKLX0K
LQotLSAodm9pZClfdXBkYXRlUHJlZmVyZW5jZXNTb29uCi17ICAgCi0gICAgaWYgKF93aWxsVXBk
YXRlUHJlZmVyZW5jZXNTb29uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiBwZXJmb3Jt
U2VsZWN0b3I6QHNlbGVjdG9yKF91cGRhdGVQcmVmZXJlbmNlczopIHdpdGhPYmplY3Q6bmlsIGFm
dGVyRGVsYXk6MF07Ci0gICAgX3dpbGxVcGRhdGVQcmVmZXJlbmNlc1Nvb24gPSBZRVM7Ci19Ci0K
LS0gKHZvaWQpX3NjYWxlT3JEaXNwbGF5TW9kZU9yUGFnZUNoYW5nZWQ6KE5TTm90aWZpY2F0aW9u
ICopbm90aWZpY2F0aW9uCi17Ci0gICAgQVNTRVJUX0FSRyhub3RpZmljYXRpb24sIFtub3RpZmlj
YXRpb24gb2JqZWN0XSA9PSBfcGRmVmlldyk7Ci0gICAgaWYgKCFfaWdub3JlU2NhbGVBbmREaXNw
bGF5TW9kZUFuZFBhZ2VOb3RpZmljYXRpb25zKQotICAgICAgICBbc2VsZiBfdXBkYXRlUHJlZmVy
ZW5jZXNTb29uXTsKLX0KLQotLSAodm9pZClfb3BlbldpdGhGaW5kZXI6KGlkKXNlbmRlcgotewot
ICAgIF9wZGZWaWV3Q29udHJvbGxlci0+b3BlblBERkluRmluZGVyKCk7Ci19Ci0KLS0gKFBERlNl
bGVjdGlvbiAqKV9uZXh0TWF0Y2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9P
TClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxh
ZyBmcm9tU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilpbml0aWFsU2VsZWN0aW9uIHN0YXJ0SW5T
ZWxlY3Rpb246KEJPT0wpc3RhcnRJblNlbGVjdGlvbgotewotICAgIGlmICghW3N0cmluZyBsZW5n
dGhdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgaW50IG9wdGlvbnMgPSAwOwotICAgIGlm
ICghZm9yd2FyZCkKLSAgICAgICAgb3B0aW9ucyB8PSBOU0JhY2t3YXJkc1NlYXJjaDsKLQotICAg
IGlmICghY2FzZUZsYWcpCi0gICAgICAgIG9wdGlvbnMgfD0gTlNDYXNlSW5zZW5zaXRpdmVTZWFy
Y2g7Ci0KLSAgICBQREZEb2N1bWVudCAqZG9jdW1lbnQgPSBbX3BkZlZpZXcgZG9jdW1lbnRdOwot
Ci0gICAgUERGU2VsZWN0aW9uICpzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoID0gW2luaXRpYWxT
ZWxlY3Rpb24gY29weV07Ci0gICAgaWYgKHN0YXJ0SW5TZWxlY3Rpb24pIHsKLSAgICAgICAgLy8g
SW5pdGlhbGx5IHdlIHdhbnQgdG8gaW5jbHVkZSB0aGUgc2VsZWN0ZWQgdGV4dCBpbiB0aGUgc2Vh
cmNoLiAgU28gd2UgbXVzdCBtb2RpZnkgdGhlIHN0YXJ0aW5nIHNlYXJjaCAKLSAgICAgICAgLy8g
c2VsZWN0aW9uIHRvIGZpdCBQREZEb2N1bWVudCdzIHNlYXJjaCByZXF1aXJlbWVudHM6IHNlbGVj
dGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPj0gMSwgYmVnaW4gYmVmb3JlIAotICAgICAgICAvLyB0
aGUgY3VycmVudCBzZWxlY3Rpb24gKGlmIHNlYXJjaGluZyBmb3J3YXJkcykgb3IgYWZ0ZXIgKGlm
IHNlYXJjaGluZyBiYWNrd2FyZHMpLgotICAgICAgICBpbnQgaW5pdGlhbFNlbGVjdGlvbkxlbmd0
aCA9IFtbaW5pdGlhbFNlbGVjdGlvbiBzdHJpbmddIGxlbmd0aF07Ci0gICAgICAgIGlmIChmb3J3
YXJkKSB7Ci0gICAgICAgICAgICBbc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCBleHRlbmRTZWxl
Y3Rpb25BdFN0YXJ0OjFdOwotICAgICAgICAgICAgW3NlbGVjdGlvbkZvckluaXRpYWxTZWFyY2gg
ZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6LWluaXRpYWxTZWxlY3Rpb25MZW5ndGhdOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgW3NlbGVjdGlvbkZvckluaXRpYWxTZWFyY2ggZXh0ZW5kU2Vs
ZWN0aW9uQXRFbmQ6MV07Ci0gICAgICAgICAgICBbc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCBl
eHRlbmRTZWxlY3Rpb25BdFN0YXJ0Oi1pbml0aWFsU2VsZWN0aW9uTGVuZ3RoXTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBQREZTZWxlY3Rpb24gKmZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZp
bmRTdHJpbmc6c3RyaW5nIGZyb21TZWxlY3Rpb246c2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCB3
aXRoT3B0aW9uczpvcHRpb25zXTsKLSAgICBbc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCByZWxl
YXNlXTsKLQotICAgIC8vIElmIHdlIGZpcnN0IHNlYXJjaGVkIGluIHRoZSBzZWxlY3Rpb24sIGFu
ZCB3ZSBmb3VuZCB0aGUgc2VsZWN0aW9uLCBzZWFyY2ggYWdhaW4gZnJvbSBqdXN0IHBhc3QgdGhl
IHNlbGVjdGlvbgotICAgIGlmIChzdGFydEluU2VsZWN0aW9uICYmIF9QREZTZWxlY3Rpb25zQXJl
RXF1YWwoZm91bmRTZWxlY3Rpb24sIGluaXRpYWxTZWxlY3Rpb24pKQotICAgICAgICBmb3VuZFNl
bGVjdGlvbiA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnN0cmluZyBmcm9tU2VsZWN0aW9uOmluaXRp
YWxTZWxlY3Rpb24gd2l0aE9wdGlvbnM6b3B0aW9uc107Ci0KLSAgICBpZiAoIWZvdW5kU2VsZWN0
aW9uICYmIHdyYXBGbGFnKQotICAgICAgICBmb3VuZFNlbGVjdGlvbiA9IFtkb2N1bWVudCBmaW5k
U3RyaW5nOnN0cmluZyBmcm9tU2VsZWN0aW9uOm5pbCB3aXRoT3B0aW9uczpvcHRpb25zXTsKLQot
ICAgIHJldHVybiBmb3VuZFNlbGVjdGlvbjsKLX0KLQotLSAoTlNVSW50ZWdlcilfY291bnRNYXRj
aGVzOihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnCi17Ci0g
ICAgaWYgKCFbc3RyaW5nIGxlbmd0aF0pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IG9w
dGlvbnMgPSBjYXNlRmxhZyA/IDAgOiBOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaDsKLQotICAgIHJl
dHVybiBbW1tfcGRmVmlldyBkb2N1bWVudF0gZmluZFN0cmluZzpzdHJpbmcgd2l0aE9wdGlvbnM6
b3B0aW9uc10gY291bnRdOwotfQotCi0vLyBNQVJLOiBOU1ZpZXcgb3ZlcnJpZGVzCi0KLS0gKHZv
aWQpdmlld0RpZE1vdmVUb1dpbmRvdwotewotICAgIGlmICghW3NlbGYgd2luZG93XSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRl
ciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKLSAgICBbbm90aWZpY2F0
aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9zY2FsZU9yRGlz
cGxheU1vZGVPclBhZ2VDaGFuZ2VkOikgbmFtZTpfd2Via2l0X1BERlZpZXdTY2FsZUNoYW5nZWRO
b3RpZmljYXRpb24gb2JqZWN0Ol9wZGZWaWV3XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFk
ZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9zY2FsZU9yRGlzcGxheU1vZGVPclBh
Z2VDaGFuZ2VkOikgbmFtZTpfd2Via2l0X1BERlZpZXdEaXNwbGF5TW9kZUNoYW5nZWROb3RpZmlj
YXRpb24gb2JqZWN0Ol9wZGZWaWV3XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2Vy
dmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9zY2FsZU9yRGlzcGxheU1vZGVPclBhZ2VDaGFu
Z2VkOikgbmFtZTpfd2Via2l0X1BERlZpZXdQYWdlQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmplY3Q6
X3BkZlZpZXddOwotfQotCi0tICh2b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAq
KW5ld1dpbmRvdwotewotICAgIGlmICghW3NlbGYgd2luZG93XSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJl
bW92ZU9ic2VydmVyOnNlbGYgbmFtZTpfd2Via2l0X1BERlZpZXdTY2FsZUNoYW5nZWROb3RpZmlj
YXRpb24gb2JqZWN0Ol9wZGZWaWV3XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9i
c2VydmVyOnNlbGYgbmFtZTpfd2Via2l0X1BERlZpZXdEaXNwbGF5TW9kZUNoYW5nZWROb3RpZmlj
YXRpb24gb2JqZWN0Ol9wZGZWaWV3XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9i
c2VydmVyOnNlbGYgbmFtZTpfd2Via2l0X1BERlZpZXdQYWdlQ2hhbmdlZE5vdGlmaWNhdGlvbiBv
YmplY3Q6X3BkZlZpZXddOwotfQotCi0tIChOU1ZpZXcgKiloaXRUZXN0OihOU1BvaW50KXBvaW50
Ci17Ci0gICAgLy8gT3ZlcnJpZGUgaGl0VGVzdCBzbyB3ZSBjYW4gb3ZlcnJpZGUgbWVudUZvckV2
ZW50LgotICAgIE5TRXZlbnQgKmV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07Ci0gICAgTlNF
dmVudFR5cGUgdHlwZSA9IFtldmVudCB0eXBlXTsKLSAgICBpZiAodHlwZSA9PSBOU1JpZ2h0TW91
c2VEb3duIHx8ICh0eXBlID09IE5TTGVmdE1vdXNlRG93biAmJiAoW2V2ZW50IG1vZGlmaWVyRmxh
Z3NdICYgTlNDb250cm9sS2V5TWFzaykpKQotICAgICAgICByZXR1cm4gc2VsZjsKLQotICAgIHJl
dHVybiBbc3VwZXIgaGl0VGVzdDpwb2ludF07Ci19Ci0KLXN0YXRpYyB2b2lkIGluc2VydE9wZW5X
aXRoRGVmYXVsdFBERk1lbnVJdGVtKE5TTWVudSAqbWVudSwgTlNVSW50ZWdlciBpbmRleCkKLXsK
LSAgICAvLyBBZGQgaW4gYW4gIk9wZW4gd2l0aCA8ZGVmYXVsdCBQREYgdmlld2VyPiIgaXRlbQot
ICAgIE5TU3RyaW5nICphcHBOYW1lID0gbmlsOwotICAgIE5TSW1hZ2UgKmFwcEljb24gPSBuaWw7
Ci0gICAgCi0gICAgX2FwcGxpY2F0aW9uSW5mb0Zvck1JTUVUeXBlKEAiYXBwbGljYXRpb24vcGRm
IiwgJmFwcE5hbWUsICZhcHBJY29uKTsKLSAgICBpZiAoIWFwcE5hbWUpCi0gICAgICAgIGFwcE5h
bWUgPSBXRUJfVUlfU1RSSU5HKCJGaW5kZXIiLCAiRGVmYXVsdCBhcHBsaWNhdGlvbiBuYW1lIGZv
ciBPcGVuIFdpdGggY29udGV4dCBtZW51Iik7Ci0gICAgCi0gICAgLy8gVG8gbWF0Y2ggdGhlIFBE
RktpdCBzdHlsZSwgd2UnbGwgYWRkIE9wZW4gd2l0aCBQcmV2aWV3IGV2ZW4gd2hlbiB0aGVyZSdz
IG5vIGRvY3VtZW50IHlldCB0byB2aWV3LCBhbmQKLSAgICAvLyBkaXNhYmxlIGl0IHVzaW5nIHZh
bGlkYXRlVXNlckludGVyZmFjZUl0ZW0uCi0gICAgTlNTdHJpbmcgKnRpdGxlID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6V0VCX1VJX1NUUklORygiT3BlbiB3aXRoICVAIiwgImNvbnRleHQg
bWVudSBpdGVtIGZvciBQREYiKSwgYXBwTmFtZV07Ci0gICAgCi0gICAgTlNNZW51SXRlbSAqaXRl
bSA9IFtbTlNNZW51SXRlbSBhbGxvY10gaW5pdFdpdGhUaXRsZTp0aXRsZSBhY3Rpb246QHNlbGVj
dG9yKF9vcGVuV2l0aEZpbmRlcjopIGtleUVxdWl2YWxlbnQ6QCIiXTsKLSAgICBpZiAoYXBwSWNv
bikKLSAgICAgICAgW2l0ZW0gc2V0SW1hZ2U6YXBwSWNvbl07Ci0gICAgW21lbnUgaW5zZXJ0SXRl
bTppdGVtIGF0SW5kZXg6aW5kZXhdOwotICAgIFtpdGVtIHJlbGVhc2VdOwotfQotCi0tIChOU01l
bnUgKiltZW51Rm9yRXZlbnQ6KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIE5TTWVudSAqbWVu
dSA9IFtbTlNNZW51IGFsbG9jXSBpbml0V2l0aFRpdGxlOkAiIl07Ci0KLSAgICBib29sIGluc2Vy
dGVkT3BlbldpdGhJdGVtID0gZmFsc2U7Ci0gICAgCi0gICAgTlNFbnVtZXJhdG9yICptZW51SXRl
bUVudW1lcmF0b3IgPSBbW1tfcGRmVmlldyBtZW51Rm9yRXZlbnQ6dGhlRXZlbnRdIGl0ZW1BcnJh
eV0gb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgd2hpbGUgKE5TTWVudUl0ZW0gKml0ZW0gPSBbbWVu
dUl0ZW1FbnVtZXJhdG9yIG5leHRPYmplY3RdKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKml0ZW1D
b3B5ID0gW2l0ZW0gY29weV07Ci0gICAgICAgIFttZW51IGFkZEl0ZW06aXRlbUNvcHldOwotICAg
ICAgICBbaXRlbUNvcHkgcmVsZWFzZV07Ci0KLSAgICAgICAgaWYgKGluc2VydGVkT3BlbldpdGhJ
dGVtKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiBhICJD
b3B5IiBpdGVtIGlzIHByZXNlbnQsIHBsYWNlIHRoZSAiT3BlbiBXaXRoIiBpdGVtIGp1c3QgYWZ0
ZXIgaXQsIHdpdGggYW4gaW50ZXJ2ZW5pbmcgc2VwYXJhdG9yLgotICAgICAgICBpZiAoW2l0ZW0g
YWN0aW9uXSAhPSBAc2VsZWN0b3IoY29weTopKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIAotICAgICAgICBbbWVudSBhZGRJdGVtOltOU01lbnVJdGVtIHNlcGFyYXRvckl0ZW1dXTsK
LSAgICAgICAgaW5zZXJ0T3BlbldpdGhEZWZhdWx0UERGTWVudUl0ZW0obWVudSwgW21lbnUgbnVt
YmVyT2ZJdGVtc10pOwotICAgICAgICBpbnNlcnRlZE9wZW5XaXRoSXRlbSA9IHRydWU7Ci0gICAg
fQotICAgIAotICAgIGlmICghaW5zZXJ0ZWRPcGVuV2l0aEl0ZW0pIHsKLSAgICAgICAgLy8gTm8g
IkNvcHkiIGl0ZW0gd2FzIGZvdW5kOyBwbGFjZSB0aGUgIk9wZW4gV2l0aCIgaXRlbSBhdCB0aGUg
dG9wIG9mIHRoZSBtZW51LCB3aXRoIGEgdHJhaWxpbmcgc2VwYXJhdG9yLgotICAgICAgICBpbnNl
cnRPcGVuV2l0aERlZmF1bHRQREZNZW51SXRlbShtZW51LCAwKTsKLSAgICAgICAgW21lbnUgaW5z
ZXJ0SXRlbTpbTlNNZW51SXRlbSBzZXBhcmF0b3JJdGVtXSBhdEluZGV4OjFdOwotICAgIH0KLQot
ICAgIHJldHVybiBbbWVudSBhdXRvcmVsZWFzZV07Ci19Ci0KLS8vIE1BUks6IE5TVXNlckludGVy
ZmFjZVZhbGlkYXRpb25zIFBST1RPQ09MIElNUExFTUVOVEFUSU9OCi0KLS0gKEJPT0wpdmFsaWRh
dGVVc2VySW50ZXJmYWNlSXRlbTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0ZW0+KWl0
ZW0KLXsKLSAgICBTRUwgYWN0aW9uID0gW2l0ZW0gYWN0aW9uXTsKLSAgICBpZiAoYWN0aW9uID09
IEBzZWxlY3Rvcihfb3BlbldpdGhGaW5kZXI6KSkKLSAgICAgICAgcmV0dXJuIFtfcGRmVmlldyBk
b2N1bWVudF0gIT0gbmlsOwotICAgIHJldHVybiBZRVM7Ci19Ci0KLS8vIE1BUks6IFBERlZpZXcg
ZGVsZWdhdGUgbWV0aG9kcwotCi0tICh2b2lkKVBERlZpZXdXaWxsQ2xpY2tPbkxpbms6KFBERlZp
ZXcgKilzZW5kZXIgd2l0aFVSTDooTlNVUkwgKilVUkwKLXsKLSAgICBfcGRmVmlld0NvbnRyb2xs
ZXItPmxpbmtDbGlja2VkKFtVUkwgYWJzb2x1dGVTdHJpbmddKTsKLX0KLQotLSAodm9pZClQREZW
aWV3T3BlblBERkluTmF0aXZlQXBwbGljYXRpb246KFBERlZpZXcgKilzZW5kZXIKLXsKLSAgICBf
cGRmVmlld0NvbnRyb2xsZXItPm9wZW5QREZJbkZpbmRlcigpOwotfQotCi0tICh2b2lkKVBERlZp
ZXdTYXZlUERGVG9Eb3dubG9hZEZvbGRlcjooUERGVmlldyAqKXNlbmRlcgotewotICAgIF9wZGZW
aWV3Q29udHJvbGxlci0+c2F2ZVBERlRvRG93bmxvYWRzRm9sZGVyKCk7Ci19Ci0KLS0gKHZvaWQp
UERGVmlld1BlcmZvcm1QcmludDooUERGVmlldyAqKXNlbmRlcgotewotICAgIF9wZGZWaWV3Q29u
dHJvbGxlci0+cHJpbnQoKTsKLX0KLQotLSAoQk9PTClmb3J3YXJkU2Nyb2xsV2hlZWxFdmVudDoo
TlNFdmVudCAqKXdoZWVsRXZlbnQKLXsKLSAgICByZXR1cm4gX3BkZlZpZXdDb250cm9sbGVyLT5m
b3J3YXJkU2Nyb2xsV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKLX0KLQotQGVuZAotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotUGFzc093blB0cjxQREZWaWV3Q29udHJvbGxlcj4gUERGVmlld0NvbnRy
b2xsZXI6OmNyZWF0ZShXS1ZpZXcgKndrVmlldykKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFBERlZpZXdDb250cm9sbGVyKHdrVmlldykpOwotfQotCi1QREZWaWV3Q29udHJvbGxlcjo6UERG
Vmlld0NvbnRyb2xsZXIoV0tWaWV3ICp3a1ZpZXcpCi0gICAgOiBtX3drVmlldyh3a1ZpZXcpCi0g
ICAgLCBtX3drUERGVmlldyhhZG9wdE5TKFtbV0tQREZWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OlttX3drVmlldyBib3VuZHNdIFBERlZpZXdDb250cm9sbGVyOnRoaXNdKSkKLSAgICAsIG1fcGRm
VmlldyhbbV93a1BERlZpZXcuZ2V0KCkgcGRmVmlld10pCi17Ci0gICAgW21fd2tWaWV3IGFkZFN1
YnZpZXc6bV93a1BERlZpZXcuZ2V0KCldOwotfQotCi1QREZWaWV3Q29udHJvbGxlcjo6flBERlZp
ZXdDb250cm9sbGVyKCkKLXsKLSAgICBbbV93a1BERlZpZXcuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVy
dmlld107Ci0gICAgW21fd2tQREZWaWV3LmdldCgpIGludmFsaWRhdGVdOwotICAgIG1fd2tQREZW
aWV3ID0gbnVsbHB0cjsKLX0KLQotV2ViUGFnZVByb3h5KiBQREZWaWV3Q29udHJvbGxlcjo6cGFn
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRvSW1wbChbbV93a1ZpZXcgcGFnZVJlZl0pOwotfQot
Ci1OU1ZpZXcqIFBERlZpZXdDb250cm9sbGVyOjpwZGZWaWV3KCkgY29uc3QKLXsgCi0gICAgcmV0
dXJuIG1fd2tQREZWaWV3LmdldCgpOyAKLX0KLSAgICAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBjb252ZXJ0UG9zdFNjcmlwdERhdGFTb3VyY2VUb1BERihjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmIGRhdGFSZWZlcmVuY2UpCi17Ci0gICAgLy8gQ29udmVydCBQb3N0U2NyaXB0IHRvIFBE
RiB1c2luZyBRdWFydHogMkQgQVBJCi0gICAgLy8gaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20v
ZG9jdW1lbnRhdGlvbi9HcmFwaGljc0ltYWdpbmcvQ29uY2VwdHVhbC9kcmF3aW5nd2l0aHF1YXJ0
ejJkL2RxX3BzX2NvbnZlcnQvY2hhcHRlcl8xNl9zZWN0aW9uXzEuaHRtbAotICAgIAotICAgIENH
UFNDb252ZXJ0ZXJDYWxsYmFja3MgY2FsbGJhY2tzID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
IH07ICAgIAotICAgIFJldGFpblB0cjxDR1BTQ29udmVydGVyUmVmPiBjb252ZXJ0ZXIgPSBhZG9w
dENGKENHUFNDb252ZXJ0ZXJDcmVhdGUoMCwgJmNhbGxiYWNrcywgMCkpOwotICAgIEFTU0VSVChj
b252ZXJ0ZXIpOwotCi0gICAgUmV0YWluUHRyPE5TRGF0YT4gbnNEYXRhID0gYWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlc05vQ29weTpjb25zdF9jYXN0PHVpbnQ4X3QqPihkYXRh
UmVmZXJlbmNlLmRhdGEoKSkgbGVuZ3RoOmRhdGFSZWZlcmVuY2Uuc2l6ZSgpIGZyZWVXaGVuRG9u
ZTpOT10pOyAgIAotCi0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBwcm92aWRlciA9
IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKChDRkRhdGFSZWYpbnNEYXRh
LmdldCgpKSk7Ci0gICAgQVNTRVJUKHByb3ZpZGVyKTsKLQotICAgIFJldGFpblB0cjxDRk11dGFi
bGVEYXRhUmVmPiByZXN1bHQgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgMCkpOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIAotICAgIFJldGFpblB0
cjxDR0RhdGFDb25zdW1lclJlZj4gY29uc3VtZXIgPSBhZG9wdENGKENHRGF0YUNvbnN1bWVyQ3Jl
YXRlV2l0aENGRGF0YShyZXN1bHQuZ2V0KCkpKTsKLSAgICBBU1NFUlQoY29uc3VtZXIpOwotICAg
IAotICAgIENHUFNDb252ZXJ0ZXJDb252ZXJ0KGNvbnZlcnRlci5nZXQoKSwgcHJvdmlkZXIuZ2V0
KCksIGNvbnN1bWVyLmdldCgpLCAwKTsKLQotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUERGVmlld0NvbnRyb2xsZXI6
OnNldFBERkRvY3VtZW50RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVu
Y2UpCi17Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAiYXBwbGljYXRpb24v
cG9zdHNjcmlwdCIpKSB7Ci0gICAgICAgIG1fcGRmRGF0YSA9IGNvbnZlcnRQb3N0U2NyaXB0RGF0
YVNvdXJjZVRvUERGKGRhdGFSZWZlcmVuY2UpOwotICAgICAgICBpZiAoIW1fcGRmRGF0YSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IFN0cmluZyhz
dWdnZXN0ZWRGaWxlbmFtZSArICIucGRmIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTWFr
ZSBzdXJlIHRvIGNvcHkgdGhlIGRhdGEuCi0gICAgICAgIG1fcGRmRGF0YSA9IGFkb3B0Q0YoQ0ZE
YXRhQ3JlYXRlKDAsIGRhdGFSZWZlcmVuY2UuZGF0YSgpLCBkYXRhUmVmZXJlbmNlLnNpemUoKSkp
OwotICAgICAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Ci0gICAg
fQotCi0gICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudCA9IGFkb3B0TlMoW1tw
ZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopbV9wZGZEYXRh
LmdldCgpXSk7Ci0gICAgW21fd2tQREZWaWV3LmdldCgpIHNldERvY3VtZW50OnBkZkRvY3VtZW50
LmdldCgpXTsKLX0KLQotZG91YmxlIFBERlZpZXdDb250cm9sbGVyOjp6b29tRmFjdG9yKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gW21fcGRmVmlldyBzY2FsZUZhY3Rvcl07Ci19Ci0KLXZvaWQgUERG
Vmlld0NvbnRyb2xsZXI6OnNldFpvb21GYWN0b3IoZG91YmxlIHpvb21GYWN0b3IpCi17Ci0gICAg
W21fcGRmVmlldyBzZXRTY2FsZUZhY3Rvcjp6b29tRmFjdG9yXTsKLX0KLQotQ2xhc3MgUERGVmll
d0NvbnRyb2xsZXI6OnBkZkRvY3VtZW50Q2xhc3MoKQotewotICAgIHN0YXRpYyBDbGFzcyBwZGZE
b2N1bWVudENsYXNzID0gW3BkZktpdEJ1bmRsZSgpIGNsYXNzTmFtZWQ6QCJQREZEb2N1bWVudCJd
OwotICAgIAotICAgIHJldHVybiBwZGZEb2N1bWVudENsYXNzOwotfQotCi1DbGFzcyBQREZWaWV3
Q29udHJvbGxlcjo6cGRmUHJldmlld1ZpZXdDbGFzcygpCi17Ci0gICAgc3RhdGljIENsYXNzIHBk
ZlByZXZpZXdWaWV3Q2xhc3MgPSBbcGRmS2l0QnVuZGxlKCkgY2xhc3NOYW1lZDpAIlBERlByZXZp
ZXdWaWV3Il07Ci0gICAgCi0gICAgcmV0dXJuIHBkZlByZXZpZXdWaWV3Q2xhc3M7Ci19Ci0KLWJv
b2wgUERGVmlld0NvbnRyb2xsZXI6OmZvcndhcmRTY3JvbGxXaGVlbEV2ZW50KE5TRXZlbnQgKndo
ZWVsRXZlbnQpCi17Ci0gICAgQ0dGbG9hdCBkZWx0YVggPSBbd2hlZWxFdmVudCBkZWx0YVhdOwot
ICAgIGlmICgoZGVsdGFYID4gMCAmJiAhcGFnZSgpLT5jYW5Hb0JhY2soKSkgfHwgKGRlbHRhWCA8
IDAgJiYgIXBhZ2UoKS0+Y2FuR29Gb3J3YXJkKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBbbV93a1ZpZXcgc2Nyb2xsV2hlZWw6d2hlZWxFdmVudF07Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXN0YXRpYyBJTVAgb2xkUERGVmlld1Njcm9sbFZpZXdfc2Nyb2xsV2hlZWw7Ci0KLXN0
YXRpYyBXS1BERlZpZXcgKmZpbmRFbmNsb3NpbmdXS1BERlZpZXcoTlNWaWV3ICp2aWV3KQotewot
ICAgIGZvciAoTlNWaWV3ICpzdXBlcnZpZXcgPSBbdmlldyBzdXBlcnZpZXddOyBzdXBlcnZpZXc7
IHN1cGVydmlldyA9IFtzdXBlcnZpZXcgc3VwZXJ2aWV3XSkgewotICAgICAgICBpZiAoW3N1cGVy
dmlldyBpc0tpbmRPZkNsYXNzOltXS1BERlZpZXcgY2xhc3NdXSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXS1BERlZpZXcgKj4oc3VwZXJ2aWV3KTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbmlsOwotfQotCi1zdGF0aWMgdm9pZCBQREZWaWV3U2Nyb2xsVmlld19zY3JvbGxXaGVlbChO
U1Njcm9sbFZpZXcqIHNlbGYsIFNFTCBfY21kLCBOU0V2ZW50ICp3aGVlbEV2ZW50KQotewotICAg
IENHRmxvYXQgZGVsdGFYID0gW3doZWVsRXZlbnQgZGVsdGFYXTsKLSAgICBDR0Zsb2F0IGRlbHRh
WSA9IFt3aGVlbEV2ZW50IGRlbHRhWV07Ci0KLSAgICBOU1NpemUgY29udGVudHNTaXplID0gW1tz
ZWxmIGRvY3VtZW50Vmlld10gYm91bmRzXS5zaXplOwotICAgIE5TUmVjdCB2aXNpYmxlUmVjdCA9
IFtzZWxmIGRvY3VtZW50VmlzaWJsZVJlY3RdOwotCi0gICAgLy8gV2Ugb25seSB3YW50IHRvIGZv
cndhcmQgdGhlIHdoZWVsIGV2ZW50cyBpZiB0aGUgaG9yaXpvbnRhbCBkZWx0YSBpcyBub24temVy
bywKLSAgICAvLyBhbmQgb25seSBpZiB3ZSdyZSBwaW5uZWQgdG8gZWl0aGVyIHRoZSBsZWZ0IG9y
IHJpZ2h0IHNpZGUuCi0gICAgLy8gV2UgYWxzbyBuZXZlciB3YW50IHRvIGZvcndhcmQgbW9tZW50
dW0gc2Nyb2xsIGV2ZW50cy4KLSAgICBpZiAoW3doZWVsRXZlbnQgbW9tZW50dW1QaGFzZV0gPT0g
TlNFdmVudFBoYXNlTm9uZSAmJiBkZWx0YVggJiYgZmFic2YoZGVsdGFZKSA8IGZhYnNmKGRlbHRh
WCkKLSAgICAgICAgJiYgKChkZWx0YVggPiAwICYmIHZpc2libGVSZWN0Lm9yaWdpbi54IDw9IDAp
IHx8IChkZWx0YVggPCAwICYmIGNvbnRlbnRzU2l6ZS53aWR0aCA8PSBOU01heFgodmlzaWJsZVJl
Y3QpKSkpIHsKLSAgICAKLSAgICAgICAgaWYgKFdLUERGVmlldyAqcGRmVmlldyA9IGZpbmRFbmNs
b3NpbmdXS1BERlZpZXcoc2VsZikpIHsKLSAgICAgICAgICAgIGlmIChbcGRmVmlldyBmb3J3YXJk
U2Nyb2xsV2hlZWxFdmVudDp3aGVlbEV2ZW50XSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB3dGZDYWxsSU1QPHZvaWQ+KG9sZFBERlZpZXdTY3JvbGxW
aWV3X3Njcm9sbFdoZWVsLCBzZWxmLCBfY21kLCB3aGVlbEV2ZW50KTsKLX0KLQotTlNCdW5kbGUq
IFBERlZpZXdDb250cm9sbGVyOjpwZGZLaXRCdW5kbGUoKQotewotICAgIHN0YXRpYyBOU0J1bmRs
ZSAqcGRmS2l0QnVuZGxlOwotICAgIGlmIChwZGZLaXRCdW5kbGUpCi0gICAgICAgIHJldHVybiBw
ZGZLaXRCdW5kbGU7Ci0KLSAgICBOU1N0cmluZyAqcGRmS2l0UGF0aCA9IFtfTlNQYXRoRm9yU3lz
dGVtRnJhbWV3b3JrKEAiUXVhcnR6LmZyYW1ld29yayIpIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5n
OkAiL0ZyYW1ld29ya3MvUERGS2l0LmZyYW1ld29yayJdOwotICAgIGlmICghcGRmS2l0UGF0aCkg
ewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGZpbmQgUERGS2l0LmZyYW1ld29yayIpOwot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLQotICAgIHBkZktpdEJ1bmRsZSA9IFtOU0J1bmRs
ZSBidW5kbGVXaXRoUGF0aDpwZGZLaXRQYXRoXTsKLSAgICBpZiAoIVtwZGZLaXRCdW5kbGUgbG9h
ZF0pCi0gICAgICAgIExPR19FUlJPUigiQ291bGRuJ3QgbG9hZCBQREZLaXQuZnJhbWV3b3JrIik7
Ci0KLSAgICBpZiAoQ2xhc3MgcGRmVmlld1Njcm9sbFZpZXdDbGFzcyA9IFtwZGZLaXRCdW5kbGUg
Y2xhc3NOYW1lZDpAIlBERlZpZXdTY3JvbGxWaWV3Il0pIHsKLSAgICAgICAgaWYgKE1ldGhvZCBz
Y3JvbGxXaGVlbCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKHBkZlZpZXdTY3JvbGxWaWV3Q2xh
c3MsIEBzZWxlY3RvcihzY3JvbGxXaGVlbDopKSkKLSAgICAgICAgICAgIG9sZFBERlZpZXdTY3Jv
bGxWaWV3X3Njcm9sbFdoZWVsID0gbWV0aG9kX3NldEltcGxlbWVudGF0aW9uKHNjcm9sbFdoZWVs
LCByZWludGVycHJldF9jYXN0PElNUD4oUERGVmlld1Njcm9sbFZpZXdfc2Nyb2xsV2hlZWwpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcGRmS2l0QnVuZGxlOwotfQotCi1OU1ByaW50T3BlcmF0aW9u
ICpQREZWaWV3Q29udHJvbGxlcjo6bWFrZVByaW50T3BlcmF0aW9uKE5TUHJpbnRJbmZvICpwcmlu
dEluZm8pCi17Ci0gICAgcmV0dXJuIFtbbV9wZGZWaWV3IGRvY3VtZW50XSBnZXRQcmludE9wZXJh
dGlvbkZvclByaW50SW5mbzpwcmludEluZm8gYXV0b1JvdGF0ZTpZRVNdOwotfQotCi12b2lkIFBE
RlZpZXdDb250cm9sbGVyOjpvcGVuUERGSW5GaW5kZXIoKQotewotICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gb3BlbiB0aGUgUERGIHVudGlsIHdlIGhhdmUgYSBkb2N1bWVudCB0byB3cml0ZS4gKHNl
ZSA0ODkyNTI1KS4KLSAgICBpZiAoIVttX3BkZlZpZXcgZG9jdW1lbnRdKSB7Ci0gICAgICAgIE5T
QmVlcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3RlbXBvcmFyeVBE
RlVVSUQpIHsKLSAgICAgICAgQVNTRVJUKG1fcGRmRGF0YSk7Ci0gICAgICAgIG1fdGVtcG9yYXJ5
UERGVVVJRCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKLSAgICAgICAgcGFnZSgpLT5z
YXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uUmF3KG1f
c3VnZ2VzdGVkRmlsZW5hbWUuZ2V0KCksIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgpLCBDRkRh
dGFHZXRCeXRlUHRyKG1fcGRmRGF0YS5nZXQoKSksIENGRGF0YUdldExlbmd0aChtX3BkZkRhdGEu
Z2V0KCkpLCBtX3RlbXBvcmFyeVBERlVVSUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgcGFnZSgpLT5vcGVuUERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlv
bihtX3RlbXBvcmFyeVBERlVVSUQpOwotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlQ0ZEYXRhKHVu
c2lnbmVkIGNoYXIqLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIEFTU0VSVChDRkdldFR5cGVJ
RChkYXRhKSA9PSBDRkRhdGFHZXRUeXBlSUQoKSk7Ci0KLSAgICAvLyBCYWxhbmNlZCBieSBDRlJl
dGFpbiBpbiBzYXZlUERGVG9Eb3dubG9hZHNGb2xkZXIuCi0gICAgQ0ZSZWxlYXNlKGRhdGEpOwot
fQotCi12b2lkIFBERlZpZXdDb250cm9sbGVyOjpzYXZlUERGVG9Eb3dubG9hZHNGb2xkZXIoKQot
ewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gd3JpdGUgdGhlIGZpbGUgdW50aWwgd2UgaGF2ZSBh
IGRvY3VtZW50IHRvIHdyaXRlLiAoc2VlIDUyNjc2MDcpLgotICAgIGlmICghW21fcGRmVmlldyBk
b2N1bWVudF0pIHsKLSAgICAgICAgTlNCZWVwKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQobV9wZGZEYXRhKTsKLQotICAgIC8vIEJhbGFuY2VkIGJ5IENGUmVsZWFzZSBp
biByZWxlYXNlQ0ZEYXRhLgotICAgIENGUmV0YWluKG1fcGRmRGF0YS5nZXQoKSk7Ci0KLSAgICBS
ZWZQdHI8V2ViRGF0YT4gZGF0YSA9IFdlYkRhdGE6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKENGRGF0
YUdldEJ5dGVQdHIobV9wZGZEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKG1fcGRmRGF0YS5n
ZXQoKSksIHJlbGVhc2VDRkRhdGEsIG1fcGRmRGF0YS5nZXQoKSk7Ci0KLSAgICBwYWdlKCktPnNh
dmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIobV9zdWdnZXN0ZWRGaWxlbmFtZS5nZXQoKSwg
cGFnZSgpLT5tYWluRnJhbWUoKS0+bWltZVR5cGUoKSwgcGFnZSgpLT5tYWluRnJhbWUoKS0+dXJs
KCksIGRhdGEuZ2V0KCkpOwotfQotCi12b2lkIFBERlZpZXdDb250cm9sbGVyOjpsaW5rQ2xpY2tl
ZChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBOU0V2ZW50KiBuc0V2ZW50ID0gW05TQXBwIGN1
cnJlbnRFdmVudF07Ci0gICAgV2ViTW91c2VFdmVudCBldmVudDsKLSAgICBzd2l0Y2ggKFtuc0V2
ZW50IHR5cGVdKSB7Ci0gICAgY2FzZSBOU0xlZnRNb3VzZVVwOgotICAgIGNhc2UgTlNSaWdodE1v
dXNlVXA6Ci0gICAgY2FzZSBOU090aGVyTW91c2VVcDoKLSAgICAgICAgZXZlbnQgPSBXZWJFdmVu
dEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQobnNFdmVudCwgbV9wZGZWaWV3KTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICAvLyBGb3Igbm9uIG1vdXNlLWNsaWNrcyBvciBmb3Iga2V5Ym9hcmQg
ZXZlbnRzLCBwYXNzIGFuIGVtcHR5IFdlYk1vdXNlRXZlbnQKLSAgICAgICAgLy8gdGhyb3VnaC4g
IFRoZSBldmVudCBpcyBvbmx5IHVzZWQgYnkgdGhlIFdlYkZyYW1lTG9hZGVyQ2xpZW50IHRvIGRl
dGVybWluZQotICAgICAgICAvLyB0aGUgbW9kaWZpZXIga2V5cyBhbmQgd2hpY2ggbW91c2UgYnV0
dG9uIGlzIGRvd24uICBUaGVzZSBxdWVyaWVzIHdpbGwgYmUKLSAgICAgICAgLy8gdmFsaWQgd2l0
aCBhbiBlbXB0eSBldmVudC4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHBhZ2Uo
KS0+bGlua0NsaWNrZWQodXJsLCBldmVudCk7Ci19Ci0KLXZvaWQgUERGVmlld0NvbnRyb2xsZXI6
OnByaW50KCkKLXsKLSAgICBwYWdlKCktPnByaW50TWFpbkZyYW1lKCk7Ci19Ci0KLXZvaWQgUERG
Vmlld0NvbnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZpbmRPcHRp
b25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCi17Ci0gICAgQk9PTCBmb3J3YXJk
ID0gIShvcHRpb25zICYgRmluZE9wdGlvbnNCYWNrd2FyZHMpOwotICAgIEJPT0wgY2FzZUZsYWcg
PSAhKG9wdGlvbnMgJiBGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSk7Ci0gICAgQk9PTCB3cmFw
RmxhZyA9IG9wdGlvbnMgJiBGaW5kT3B0aW9uc1dyYXBBcm91bmQ7Ci0KLSAgICBQREZTZWxlY3Rp
b24gKnNlbGVjdGlvbiA9IFttX3drUERGVmlldy5nZXQoKSBfbmV4dE1hdGNoRm9yOnN0cmluZyBk
aXJlY3Rpb246Zm9yd2FyZCBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIHdyYXA6d3JhcEZsYWcgZnJv
bVNlbGVjdGlvbjpbbV9wZGZWaWV3IGN1cnJlbnRTZWxlY3Rpb25dIHN0YXJ0SW5TZWxlY3Rpb246
Tk9dOwotICAgIGlmICghc2VsZWN0aW9uKSB7Ci0gICAgICAgIHBhZ2UoKS0+ZGlkRmFpbFRvRmlu
ZFN0cmluZyhzdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTlNVSW50ZWdl
ciBtYXRjaENvdW50OwotICAgIGlmICghbWF4TWF0Y2hDb3VudCkgewotICAgICAgICAvLyBJZiB0
aGUgbWF4IHdhcyB6ZXJvLCBhbnkgcmVzdWx0IG1lYW5zIHdlIGV4Y2VlZGVkIHRoZSBtYXguIFdl
IGNhbiBza2lwIGNvbXB1dGluZyB0aGUgYWN0dWFsIGNvdW50LgotICAgICAgICBtYXRjaENvdW50
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtXS01vcmVUaGFuTWF4aW11bU1hdGNoQ291bnQpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1hdGNoQ291bnQgPSBbbV93a1BERlZpZXcuZ2V0KCkgX2Nv
dW50TWF0Y2hlczpzdHJpbmcgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZ107Ci0gICAgICAgIGlmICht
YXRjaENvdW50ID4gbWF4TWF0Y2hDb3VudCkKLSAgICAgICAgICAgIG1hdGNoQ291bnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oa1dLTW9yZVRoYW5NYXhpbXVtTWF0Y2hDb3VudCk7Ci0gICAgfQot
Ci0gICAgW21fcGRmVmlldyBzZXRDdXJyZW50U2VsZWN0aW9uOnNlbGVjdGlvbl07Ci0gICAgW21f
cGRmVmlldyBzY3JvbGxTZWxlY3Rpb25Ub1Zpc2libGU6bmlsXTsKLSAgICBwYWdlKCktPmRpZEZp
bmRTdHJpbmcoc3RyaW5nLCBtYXRjaENvdW50KTsKLX0KLQotdm9pZCBQREZWaWV3Q29udHJvbGxl
cjo6Y291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBv
cHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQotewotICAgIEJPT0wgY2FzZUZsYWcgPSAh
KG9wdGlvbnMgJiBGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSk7Ci0KLSAgICBOU1VJbnRlZ2Vy
IG1hdGNoQ291bnQgPSBbbV93a1BERlZpZXcuZ2V0KCkgX2NvdW50TWF0Y2hlczpzdHJpbmcgY2Fz
ZVNlbnNpdGl2ZTpjYXNlRmxhZ107Ci0gICAgaWYgKG1hdGNoQ291bnQgPiBtYXhNYXRjaENvdW50
KQotICAgICAgICBtYXRjaENvdW50ID0gbWF4TWF0Y2hDb3VudDsKLSAgICBwYWdlKCktPmRpZENv
dW50U3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG1hdGNoQ291bnQpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1Bh
Z2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzMwYzIwZTllY2RmYWU4
ZDAwZWJjYzc1NjhmMTVhODA2Mzk0M2M1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGll
bnRJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgUGFnZUNsaWVudEltcGxfaAotI2RlZmluZSBQYWdlQ2xpZW50SW1wbF9oCi0K
LSNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWwuaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCi0j
aW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotQGNsYXNzIFdLRWRpdG9yVW5kb1RhcmdldE9iakM7Ci1AY2xhc3MgV0tWaWV3
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xs
ZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgRmluZEluZGljYXRvcldpbmRvdzsK
LQotY2xhc3MgUGFnZUNsaWVudEltcGwgZmluYWwgOiBwdWJsaWMgUGFnZUNsaWVudAotI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAsIHB1YmxpYyBXZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5Q2xpZW50Ci0jZW5kaWYKLSAgICB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUGFnZUNsaWVu
dEltcGwoV0tWaWV3ICopOwotICAgIHZpcnR1YWwgflBhZ2VDbGllbnRJbXBsKCk7Ci0gICAgCi0g
ICAgdm9pZCB2aWV3V2lsbE1vdmVUb0Fub3RoZXJXaW5kb3coKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBQYWdlQ2xpZW50Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94
eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVl
ZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGxheVZpZXcoKTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuU2Nyb2xsVmlldygpOwotICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7Ci0KLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OkludFNpemUgdmlld1NpemUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3V2luZG93QWN0
aXZlKCk7Ci0gICAgdmlydHVhbCBib29sIGlzVmlld0ZvY3VzZWQoKTsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNWaWV3VmlzaWJsZSgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxlT3JPY2Ns
dWRlZCgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdJbldpbmRvdygpOwotICAgIHZpcnR1YWwg
Ym9vbCBpc1Zpc3VhbGx5SWRsZSgpOwotICAgIHZpcnR1YWwgTGF5ZXJIb3N0aW5nTW9kZSB2aWV3
TGF5ZXJIb3N0aW5nTW9kZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgQ29sb3JTcGFjZURhdGEg
Y29sb3JTcGFjZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nUm9vdExheWVyKENBTGF5ZXIgKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBDQUxh
eWVyICphY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZEV4aXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFn
ZUNsb3NlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcHJlZmVyZW5jZXNEaWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiBvbGRUb29sVGlwLCBjb25zdCBTdHJp
bmcmIG5ld1Rvb2xUaXApOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZy
YW1lKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3Jl
OjpDdXJzb3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1v
dmVzKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMo
Y29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQ
YWdlUHJveHk6OlVuZG9PclJlZG8pOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21t
YW5kcygpOwotICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9P
clJlZG8pOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpV
bmRvT3JSZWRvKTsKLSAgICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7
Ci0gICAgdmlydHVhbCBib29sIGV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IpOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9t
aXNlZERhdGEoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+IGltYWdlQnVmZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHZpc2li
bGVVcmwsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBhcmNoaXZlQnVmZmVyKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCByZXNldFNlY3VyZUlucHV0U3RhdGUoKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNl
U3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpG
bG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1Rv
U2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkb25l
V2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50
SGFuZGxlZCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNy
ZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94
eSopOwotCi0jaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPFdlYkNvbG9yUGlja2VyPiBjcmVhdGVDb2xvclBpY2tlcihXZWJQYWdlUHJveHkqLCBjb25z
dCBXZWJDb3JlOjpDb2xvciYgaW5pdGlhbENvbG9yLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRp
Y2F0b3I+LCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0Jik7Ci0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxDR0ltYWdlUmVmPiB0YWtl
Vmlld1NuYXBzaG90KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHdoZWVsRXZlbnRXYXNO
b3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDdXN0b21Td2lwZVZpZXdzKCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlblJlY2VpdmVkKGNvbnN0
IElQQzo6RGF0YVJlZmVyZW5jZSYpOwotCi0gICAgdmlydHVhbCB2b2lkIHBsdWdpbkZvY3VzT3JX
aW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZp
ZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cyk7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCBwbHVnaW5Db21wbGV4
VGV4dElucHV0SWRlbnRpZmllciwgUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBtYWtlRmlyc3RSZXNwb25kZXIoKTsKLSAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgQXR0cmlidXRlZFN0cmluZyYsIGNv
bnN0IERpY3Rpb25hcnlQb3B1cEluZm8mKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3Rp
b25hcnlMb29rdXBQYW5lbCgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFu
ZWwoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21p
c3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZl
VGV4dCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2Vi
Q29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoV2ViQ29yZTo6QXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcpOwotCi0gICAgdmlydHVhbCB2b2lkIHJlY29tbWVuZGVkU2Nyb2xs
YmFyU3R5bGVEaWRDaGFuZ2UoaW50MzJfdCBuZXdTdHlsZSk7Ci0KLSAgICB2aXJ0dWFsIFdLVmll
dyogd2tWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93a1ZpZXc7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
aW50cmluc2ljQ29udGVudFNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50
cmluc2ljQ29udGVudFNpemUpIG92ZXJyaWRlOwotCi0jaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5B
VElWRVMpCi0gICAgdmlydHVhbCB1aW50NjRfdCBhZGREaWN0YXRpb25BbHRlcm5hdGl2ZXMoY29u
c3QgUmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOwotICAg
IHZpcnR1YWwgdm9pZCBzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRpY3RhdGlvbkNv
bnRleHQpOwotICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZGljdGF0aW9uQWx0ZXJuYXRpdmVz
KHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpOwotI2VuZGlmCi0KLSAgICAvLyBBdXhpbGlhcnkg
Q2xpZW50IENyZWF0aW9uCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIFdlYkZ1bGxT
Y3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIGZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSBv
dmVycmlkZTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIC8vIFdl
YkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VGdWxs
U2NyZWVuTWFuYWdlcigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBpc0Z1bGxTY3JlZW4o
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVuKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsU2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGJlZ2FuRW50ZXJGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRp
YWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGJlZ2FuRXhpdEZ1bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgaW5pdGlhbEZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbEZyYW1lKSBvdmVy
cmlkZTsKLSNlbmRpZgotCi0gICAgTlNWaWV3ICphY3RpdmVWaWV3KCkgY29uc3Q7Ci0KLSAgICBX
S1ZpZXcgKm1fd2tWaWV3OwotICAgIFJldGFpblB0cjxXS0VkaXRvclVuZG9UYXJnZXRPYmpDPiBt
X3VuZG9UYXJnZXQ7Ci0jaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQotICAgIENvcnJlY3Rp
b25QYW5lbCBtX2NvcnJlY3Rpb25QYW5lbDsKLSNlbmRpZgotI2lmIFVTRShESUNUQVRJT05fQUxU
RVJOQVRJVkVTKQotICAgIE93blB0cjxXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xs
ZXI+IG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyOwotI2VuZGlmCi19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBhZ2VDbGllbnRJbXBsX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYTQ2NjMwMTkyMzJkNDQ0NWEwMGY1Zjc0NzJmZGFjNzY1
YTlmODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KKysrIC9kZXYv
bnVsbApAQCAtMSw2NDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKLQotI2ltcG9ydCAiQXR0cmlidXRlZFN0
cmluZy5oIgotI2ltcG9ydCAiQ29sb3JTcGFjZURhdGEuaCIKLSNpbXBvcnQgIkRhdGFSZWZlcmVu
Y2UuaCIKLSNpbXBvcnQgIkRpY3Rpb25hcnlQb3B1cEluZm8uaCIKLSNpbXBvcnQgIkZpbmRJbmRp
Y2F0b3IuaCIKLSNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKLSNpbXBvcnQgIk5h
dGl2ZVdlYldoZWVsRXZlbnQuaCIKLSNpbXBvcnQgIlN0cmluZ1V0aWxpdGllcy5oIgotI2ltcG9y
dCAiV0tBUElDYXN0LmgiCi0jaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgi
Ci0jaW1wb3J0ICJXS1N0cmluZ0NGLmgiCi0jaW1wb3J0ICJXS1RodW1ibmFpbFZpZXcuaCIKLSNp
bXBvcnQgIldLVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJDb2xvclBpY2tlck1hYy5oIgot
I2ltcG9ydCAiV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oIgotI2ltcG9ydCAiV2ViRWRpdENvbW1h
bmRQcm94eS5oIgotI2ltcG9ydCAiV2ViUG9wdXBNZW51UHJveHlNYWMuaCIKLSNpbXBvcnQgIldp
bmRvd1NlcnZlckNvbm5lY3Rpb24uaCIKLSNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0
VUlDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0N1cnNvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ltYWdlLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+Ci0jaW1wb3J0
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgVVNFKERJQ1RBVElPTl9BTFRF
Uk5BVElWRVMpCi0jaW1wb3J0IDxBcHBLaXQvTlNUZXh0QWx0ZXJuYXRpdmVzLmg+Ci0jZW5kaWYK
LQotQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChXZWJOU0FwcGxpY2F0aW9uRGV0YWlscykKLS0g
KE5TQ3Vyc29yICopX2N1cnNvclJlY3RDdXJzb3I7Ci1AZW5kCi0KLSNpZiBIQVZFKE9VVF9PRl9Q
Uk9DRVNTX0xBWUVSX0hPU1RJTkcpCi1AaW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0Rl
dGFpbHMpCi0tIChCT09MKV9ob3N0c0xheWVyc0luV2luZG93U2VydmVyOwotQGVuZAotI2VuZGlm
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQot
QGludGVyZmFjZSBXS0VkaXRDb21tYW5kT2JqQyA6IE5TT2JqZWN0Ci17Ci0gICAgUmVmUHRyPFdl
YkVkaXRDb21tYW5kUHJveHk+IG1fY29tbWFuZDsKLX0KLS0gKGlkKWluaXRXaXRoV2ViRWRpdENv
bW1hbmRQcm94eTooUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5Piljb21tYW5kOwotLSAo
V2ViRWRpdENvbW1hbmRQcm94eSopY29tbWFuZDsKLUBlbmQKLQotQGludGVyZmFjZSBXS0VkaXRv
clVuZG9UYXJnZXRPYmpDIDogTlNPYmplY3QKLS0gKHZvaWQpdW5kb0VkaXRpbmc6KGlkKXNlbmRl
cjsKLS0gKHZvaWQpcmVkb0VkaXRpbmc6KGlkKXNlbmRlcjsKLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFdLRWRpdENvbW1hbmRPYmpDCi0KLS0gKGlkKWluaXRXaXRoV2ViRWRpdENvbW1hbmRQcm94
eTooUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5Piljb21tYW5kCi17Ci0gICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICBtX2NvbW1hbmQgPSBjb21tYW5kOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChXZWJFZGl0
Q29tbWFuZFByb3h5Kiljb21tYW5kCi17Ci0gICAgcmV0dXJuIG1fY29tbWFuZC5nZXQoKTsKLX0K
LQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tFZGl0b3JVbmRvVGFyZ2V0T2JqQwotCi0tICh2
b2lkKXVuZG9FZGl0aW5nOihpZClzZW5kZXIKLXsKLSAgICBBU1NFUlQoW3NlbmRlciBpc0tpbmRP
ZkNsYXNzOltXS0VkaXRDb21tYW5kT2JqQyBjbGFzc11dKTsKLSAgICBbc2VuZGVyIGNvbW1hbmRd
LT51bmFwcGx5KCk7Ci19Ci0KLS0gKHZvaWQpcmVkb0VkaXRpbmc6KGlkKXNlbmRlcgotewotICAg
IEFTU0VSVChbc2VuZGVyIGlzS2luZE9mQ2xhc3M6W1dLRWRpdENvbW1hbmRPYmpDIGNsYXNzXV0p
OwotICAgIFtzZW5kZXIgY29tbWFuZF0tPnJlYXBwbHkoKTsKLX0KLQotQGVuZAotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotUGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKFdLVmlldyogd2tW
aWV3KQotICAgIDogbV93a1ZpZXcod2tWaWV3KQotICAgICwgbV91bmRvVGFyZ2V0KGFkb3B0TlMo
W1tXS0VkaXRvclVuZG9UYXJnZXRPYmpDIGFsbG9jXSBpbml0XSkpCi0jaWYgVVNFKERJQ1RBVElP
Tl9BTFRFUk5BVElWRVMpCi0gICAgLCBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcihhZG9w
dFB0cihuZXcgQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyKSkKLSNlbmRpZgotewotfQotCi1Q
YWdlQ2xpZW50SW1wbDo6flBhZ2VDbGllbnRJbXBsKCkKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRy
PERyYXdpbmdBcmVhUHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5
KCkKLXsKLSAgICByZXR1cm4gW21fd2tWaWV3IF9jcmVhdGVEcmF3aW5nQXJlYVByb3h5XTsKLX0K
LQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lk
IFBhZ2VDbGllbnRJbXBsOjpkaXNwbGF5VmlldygpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6OmNhblNjcm9sbFZpZXcoKQotewotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2Nyb2xsVmlldyhjb25zdCBJ
bnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCi17Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLUludFNpemUgUGFnZUNsaWVudEltcGw6OnZpZXdT
aXplKCkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShbbV93a1ZpZXcgYm91bmRzXS5zaXplKTsKLX0K
LQotTlNWaWV3ICpQYWdlQ2xpZW50SW1wbDo6YWN0aXZlVmlldygpIGNvbnN0Ci17Ci0jaWYgV0tf
QVBJX0VOQUJMRUQKLSAgICByZXR1cm4gbV93a1ZpZXcuX3RodW1ibmFpbFZpZXcgPyAoTlNWaWV3
ICopbV93a1ZpZXcuX3RodW1ibmFpbFZpZXcgOiAoTlNWaWV3ICopbV93a1ZpZXc7Ci0jZWxzZQot
ICAgIHJldHVybiBtX3drVmlldzsKLSNlbmRpZgotfQotCi1ib29sIFBhZ2VDbGllbnRJbXBsOjpp
c1ZpZXdXaW5kb3dBY3RpdmUoKQotewotICAgIE5TV2luZG93ICphY3RpdmVWaWV3V2luZG93ID0g
YWN0aXZlVmlldygpLndpbmRvdzsKLSAgICByZXR1cm4gYWN0aXZlVmlld1dpbmRvdy5pc0tleVdp
bmRvdyB8fCBbTlNBcHAga2V5V2luZG93XSA9PSBhY3RpdmVWaWV3V2luZG93OwotfQotCi1ib29s
IFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdGb2N1c2VkKCkKLXsKLSAgICByZXR1cm4gW21fd2tWaWV3
IF9pc0ZvY3VzZWRdOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjptYWtlRmlyc3RSZXNwb25k
ZXIoKQotewotICAgICBbW21fd2tWaWV3IHdpbmRvd10gbWFrZUZpcnN0UmVzcG9uZGVyOm1fd2tW
aWV3XTsKLX0KLSAgICAKLWJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1Zpc2libGUoKQotewot
ICAgIE5TVmlldyAqYWN0aXZlVmlldyA9IHRoaXMtPmFjdGl2ZVZpZXcoKTsKLSAgICBOU1dpbmRv
dyAqYWN0aXZlVmlld1dpbmRvdyA9IGFjdGl2ZVZpZXcud2luZG93OwotCi0gICAgaWYgKCFhY3Rp
dmVWaWV3V2luZG93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWFjdGl2ZVZp
ZXdXaW5kb3cuaXNWaXNpYmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDw9IDEwODAKLSAgICAvLyBNb3VudGFpbiBMaW9uIGFu
ZCBwcmV2aW91cyBkbyBub3Qgc3VwcG9ydCBvY2NsdXNpb24gbm90aWZpY2F0aW9ucywgYW5kIGFz
IHN1Y2ggd2lsbAotICAgIC8vIGNvbnRpbnVlIHRvIHJlcG9ydCBhcyAidmlzaWJsZSIgd2hlbiBu
b3Qgb24gdGhlIGFjdGl2ZSBzcGFjZS4KLSAgICBpZiAoIWFjdGl2ZVZpZXdXaW5kb3cuaXNPbkFj
dGl2ZVNwYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQotICAgIGlmIChhY3Rp
dmVWaWV3LmlzSGlkZGVuT3JIYXNIaWRkZW5BbmNlc3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi0gICAgaWYg
KFttX3drVmlldyB3aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkXSAmJiAoYWN0aXZlVmll
d1dpbmRvdy5vY2NsdXNpb25TdGF0ZSAmIE5TV2luZG93T2NjbHVzaW9uU3RhdGVWaXNpYmxlKSAh
PSBOU1dpbmRvd09jY2x1c2lvblN0YXRlVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
I2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNW
aWV3VmlzaWJsZU9yT2NjbHVkZWQoKQotewotICAgIHJldHVybiBhY3RpdmVWaWV3KCkud2luZG93
LmlzVmlzaWJsZTsKLX0KLQotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQot
ewotICAgIHJldHVybiBhY3RpdmVWaWV3KCkud2luZG93OwotfQotCi1ib29sIFBhZ2VDbGllbnRJ
bXBsOjppc1Zpc3VhbGx5SWRsZSgpCi17Ci0gICAgcmV0dXJuIFdpbmRvd1NlcnZlckNvbm5lY3Rp
b246OnNoYXJlZCgpLmFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9uc0hhdmVTdG9wcGVkKCkg
fHwgIWlzVmlld1Zpc2libGUoKTsKLX0KLQotTGF5ZXJIb3N0aW5nTW9kZSBQYWdlQ2xpZW50SW1w
bDo6dmlld0xheWVySG9zdGluZ01vZGUoKQotewotI2lmIEhBVkUoT1VUX09GX1BST0NFU1NfTEFZ
RVJfSE9TVElORykKLSAgICBpZiAoW2FjdGl2ZVZpZXcoKS53aW5kb3cgX2hvc3RzTGF5ZXJzSW5X
aW5kb3dTZXJ2ZXJdKQotICAgICAgICByZXR1cm4gTGF5ZXJIb3N0aW5nTW9kZTo6T3V0T2ZQcm9j
ZXNzOwotI2VuZGlmCi0gICAgcmV0dXJuIExheWVySG9zdGluZ01vZGU6OkluUHJvY2VzczsKLX0K
LQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6dmlld1dpbGxNb3ZlVG9Bbm90aGVyV2luZG93KCkKLXsK
LSAgICBjbGVhckFsbEVkaXRDb21tYW5kcygpOwotfQotCi1Db2xvclNwYWNlRGF0YSBQYWdlQ2xp
ZW50SW1wbDo6Y29sb3JTcGFjZSgpCi17Ci0gICAgcmV0dXJuIFttX3drVmlldyBfY29sb3JTcGFj
ZV07Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRFeGl0KCkKLXsKLSAgICBb
bV93a1ZpZXcgX3Byb2Nlc3NEaWRFeGl0XTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFn
ZUNsb3NlZCgpCi17Ci0gICAgW21fd2tWaWV3IF9wYWdlQ2xvc2VkXTsKLSNpZiBVU0UoRElDVEFU
SU9OX0FMVEVSTkFUSVZFUykKLSAgICBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+Y2xl
YXIoKTsKLSNlbmRpZgotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRSZWxhdW5jaFByb2Nl
c3MoKQotewotICAgIFttX3drVmlldyBfZGlkUmVsYXVuY2hQcm9jZXNzXTsKLX0KLQotdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6cHJlZmVyZW5jZXNEaWRDaGFuZ2UoKQotewotICAgIFttX3drVmlldyBf
cHJlZmVyZW5jZXNEaWRDaGFuZ2VdOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjp0b29sVGlw
Q2hhbmdlZChjb25zdCBTdHJpbmcmIG9sZFRvb2xUaXAsIGNvbnN0IFN0cmluZyYgbmV3VG9vbFRp
cCkKLXsKLSAgICBbbV93a1ZpZXcgX3Rvb2xUaXBDaGFuZ2VkRnJvbTpuc1N0cmluZ0Zyb21XZWJD
b3JlU3RyaW5nKG9sZFRvb2xUaXApIHRvOm5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcobmV3VG9v
bFRpcCldOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDb21taXRMb2FkRm9yTWFpbkZy
YW1lKCkKLXsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNv
cmU6OkN1cnNvciYgY3Vyc29yKQotewotICAgIGlmICghW05TQXBwIF9jdXJzb3JSZWN0Q3Vyc29y
XSkKLSAgICAgICAgW21fd2tWaWV3IF9zZXRDdXJzb3I6Y3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCld
OwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpCi17Ci0gICAgW05TQ3Vyc29yIHNldEhpZGRl
blVudGlsTW91c2VNb3ZlczpoaWRkZW5VbnRpbE1vdXNlTW92ZXNdOwotfQotCi12b2lkIFBhZ2VD
bGllbnRJbXBsOjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmll
d3BvcnRBdHRyaWJ1dGVzJikKLXsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVnaXN0ZXJF
ZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IHBycENvbW1hbmQsIFdl
YlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQotewotICAgIFJlZlB0cjxXZWJFZGl0
Q29tbWFuZFByb3h5PiBjb21tYW5kID0gcHJwQ29tbWFuZDsKLQotICAgIFJldGFpblB0cjxXS0Vk
aXRDb21tYW5kT2JqQz4gY29tbWFuZE9iakMgPSBhZG9wdE5TKFtbV0tFZGl0Q29tbWFuZE9iakMg
YWxsb2NdIGluaXRXaXRoV2ViRWRpdENvbW1hbmRQcm94eTpjb21tYW5kXSk7Ci0gICAgU3RyaW5n
IGFjdGlvbk5hbWUgPSBXZWJFZGl0Q29tbWFuZFByb3h5OjpuYW1lRm9yRWRpdEFjdGlvbihjb21t
YW5kLT5lZGl0QWN0aW9uKCkpOwotCi0gICAgTlNVbmRvTWFuYWdlciAqdW5kb01hbmFnZXIgPSBb
bV93a1ZpZXcgdW5kb01hbmFnZXJdOwotICAgIFt1bmRvTWFuYWdlciByZWdpc3RlclVuZG9XaXRo
VGFyZ2V0Om1fdW5kb1RhcmdldC5nZXQoKSBzZWxlY3RvcjooKHVuZG9PclJlZG8gPT0gV2ViUGFn
ZVByb3h5OjpVbmRvKSA/IEBzZWxlY3Rvcih1bmRvRWRpdGluZzopIDogQHNlbGVjdG9yKHJlZG9F
ZGl0aW5nOikpIG9iamVjdDpjb21tYW5kT2JqQy5nZXQoKV07Ci0gICAgaWYgKCFhY3Rpb25OYW1l
LmlzRW1wdHkoKSkKLSAgICAgICAgW3VuZG9NYW5hZ2VyIHNldEFjdGlvbk5hbWU6KE5TU3RyaW5n
ICopYWN0aW9uTmFtZV07Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyQWxsRWRpdENv
bW1hbmRzKCkKLXsKLSAgICBbW21fd2tWaWV3IHVuZG9NYW5hZ2VyXSByZW1vdmVBbGxBY3Rpb25z
V2l0aFRhcmdldDptX3VuZG9UYXJnZXQuZ2V0KCldOwotfQotCi1ib29sIFBhZ2VDbGllbnRJbXBs
OjpjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKLXsKLSAg
ICByZXR1cm4gKHVuZG9PclJlZG8gPT0gV2ViUGFnZVByb3h5OjpVbmRvKSA/IFtbbV93a1ZpZXcg
dW5kb01hbmFnZXJdIGNhblVuZG9dIDogW1ttX3drVmlldyB1bmRvTWFuYWdlcl0gY2FuUmVkb107
Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6
OlVuZG9PclJlZG8gdW5kb09yUmVkbykKLXsKLSAgICByZXR1cm4gKHVuZG9PclJlZG8gPT0gV2Vi
UGFnZVByb3h5OjpVbmRvKSA/IFtbbV93a1ZpZXcgdW5kb01hbmFnZXJdIHVuZG9dIDogW1ttX3dr
VmlldyB1bmRvTWFuYWdlcl0gcmVkb107Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6OmludGVy
cHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBWZWN0b3I8
V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMpCi17Ci0gICAgcmV0dXJuIFttX3dr
VmlldyBfaW50ZXJwcmV0S2V5RXZlbnQ6ZXZlbnQubmF0aXZlRXZlbnQoKSBzYXZpbmdDb21tYW5k
c1RvOmNvbW1hbmRzXTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RHJhZ0ltYWdlKGNv
bnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IGRyYWdJbWFnZSwgYm9vbCBpc0xpbmtEcmFnKQotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBkcmFnQ0dJbWFnZSA9IGRyYWdJbWFnZS0+bWFrZUNHSW1hZ2UoKTsKLSAgICBSZXRhaW5QdHI8
TlNJbWFnZT4gZHJhZ05TSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhD
R0ltYWdlOmRyYWdDR0ltYWdlLmdldCgpIHNpemU6ZHJhZ0ltYWdlLT5zaXplKCldKTsKLQotICAg
IFttX3drVmlldyBfc2V0RHJhZ0ltYWdlOmRyYWdOU0ltYWdlLmdldCgpIGF0OmNsaWVudFBvc2l0
aW9uIGxpbmtEcmFnOmlzTGlua0RyYWddOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRQ
cm9taXNlZERhdGEoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGltYWdlQnVmZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJp
bmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgdmlzaWJsZVVybCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGFyY2hpdmVC
dWZmZXIpCi17Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUo
KTsKLSAgICBpbWFnZS0+c2V0RGF0YShpbWFnZUJ1ZmZlci5nZXQoKSwgdHJ1ZSk7Ci0gICAgW21f
d2tWaWV3IF9zZXRQcm9taXNlZERhdGE6aW1hZ2UuZ2V0KCkgd2l0aEZpbGVOYW1lOmZpbGVuYW1l
IHdpdGhFeHRlbnNpb246ZXh0ZW5zaW9uIHdpdGhUaXRsZTp0aXRsZSB3aXRoVVJMOnVybCB3aXRo
VmlzaWJsZVVSTDp2aXNpYmxlVXJsIHdpdGhBcmNoaXZlOmFyY2hpdmVCdWZmZXIuZ2V0KCkgZm9y
UGFzdGVib2FyZDpwYXN0ZWJvYXJkTmFtZV07Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnVw
ZGF0ZVNlY3VyZUlucHV0U3RhdGUoKQotewotICAgIFttX3drVmlldyBfdXBkYXRlU2VjdXJlSW5w
dXRTdGF0ZV07Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnJlc2V0U2VjdXJlSW5wdXRTdGF0
ZSgpCi17Ci0gICAgW21fd2tWaWV3IF9yZXNldFNlY3VyZUlucHV0U3RhdGVdOwotfQotCi12b2lk
IFBhZ2VDbGllbnRJbXBsOjpub3RpZnlJbnB1dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0
aW9uKCkKLXsKLSAgICBbbV93a1ZpZXcgX25vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVk
Q29tcG9zaXRpb25dOwotfQotCi1GbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0Rl
dmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gW21fd2tWaWV3
IF9jb252ZXJ0VG9EZXZpY2VTcGFjZTpyZWN0XTsKLX0KLQotRmxvYXRSZWN0IFBhZ2VDbGllbnRJ
bXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHJl
dHVybiBbbV93a1ZpZXcgX2NvbnZlcnRUb1VzZXJTcGFjZTpyZWN0XTsKLX0KLSAgIAotSW50UG9p
bnQgUGFnZUNsaWVudEltcGw6OnNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50
KQotewotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAgIE5TUG9pbnQgd2lu
ZG93Q29vcmQgPSBbW21fd2tWaWV3IHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpwb2ludF07
Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgcmV0dXJuIEludFBvaW50KFttX3dr
VmlldyBjb252ZXJ0UG9pbnQ6d2luZG93Q29vcmQgZnJvbVZpZXc6bmlsXSk7Ci19Ci0gICAgCi1J
bnRSZWN0IFBhZ2VDbGllbnRJbXBsOjpyb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgTlNSZWN0IHRlbXBSZWN0ID0gcmVjdDsKLSAgICB0ZW1wUmVjdCA9IFttX3dr
VmlldyBjb252ZXJ0UmVjdDp0ZW1wUmVjdCB0b1ZpZXc6bmlsXTsKLSNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNh
dGVkLWRlY2xhcmF0aW9ucyIKLSAgICB0ZW1wUmVjdC5vcmlnaW4gPSBbW21fd2tWaWV3IHdpbmRv
d10gY29udmVydEJhc2VUb1NjcmVlbjp0ZW1wUmVjdC5vcmlnaW5dOwotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHBvcAotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHRlbXBSZWN0KTsKLX0K
LQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50JiBldmVudCwgYm9vbCBldmVudFdhc0hhbmRsZWQpCi17Ci0gICAgW21fd2tW
aWV3IF9kb25lV2l0aEtleUV2ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCkgZXZlbnRXYXNIYW5kbGVk
OmV2ZW50V2FzSGFuZGxlZF07Ci19Ci0KLVBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFBh
Z2VDbGllbnRJbXBsOjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCi17
Ci0gICAgcmV0dXJuIFdlYlBvcHVwTWVudVByb3h5TWFjOjpjcmVhdGUobV93a1ZpZXcsIHBhZ2Up
OwotfQotCi1QYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpj
cmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSogcGFnZSkKLXsKLSAgICByZXR1cm4g
V2ViQ29udGV4dE1lbnVQcm94eU1hYzo6Y3JlYXRlKG1fd2tWaWV3LCBwYWdlKTsKLX0KLQotI2lm
IEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotUGFzc1JlZlB0cjxXZWJDb2xvclBpY2tlcj4gUGFn
ZUNsaWVudEltcGw6OmNyZWF0ZUNvbG9yUGlja2VyKFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpCi17Ci0gICAgcmV0dXJuIFdlYkNvbG9yUGlja2VyTWFjOjpjcmVhdGUocGFnZSwgaW5pdGlh
bENvbG9yLCByZWN0LCB3a1ZpZXcoKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+IGZpbmRJbmRpY2F0
b3IsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKQotewotICAgIFttX3drVmlldyBfc2V0Rmlu
ZEluZGljYXRvcjpmaW5kSW5kaWNhdG9yIGZhZGVPdXQ6ZmFkZU91dCBhbmltYXRlOmFuaW1hdGVd
OwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjphY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2Vu
UmVjZWl2ZWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQotewotICAgIE5TRGF0YSog
cmVtb3RlVG9rZW4gPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3RoOmRh
dGEuc2l6ZSgpXTsKLSAgICBbbV93a1ZpZXcgX3NldEFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9r
ZW46cmVtb3RlVG9rZW5dOwotfQotICAgIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVD
b250ZXh0KQotewotICAgIEFTU0VSVCghbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkpOwotCi0g
ICAgQ0FMYXllciAqcmVuZGVyTGF5ZXIgPSBXS01ha2VSZW5kZXJMYXllcihsYXllclRyZWVDb250
ZXh0LmNvbnRleHRJRCk7Ci0gICAgW21fd2tWaWV3IF9zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZVJvb3RMYXllcjpyZW5kZXJMYXllcl07Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCi17Ci0gICAgW21fd2tWaWV3IF9zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZVJvb3RMYXllcjpuaWxdOwotfQotCi12b2lkIFBhZ2VDbGll
bnRJbXBsOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVD
b250ZXh0JiBsYXllclRyZWVDb250ZXh0KQotewotICAgIEFTU0VSVCghbGF5ZXJUcmVlQ29udGV4
dC5pc0VtcHR5KCkpOwotCi0gICAgQ0FMYXllciAqcmVuZGVyTGF5ZXIgPSBXS01ha2VSZW5kZXJM
YXllcihsYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCk7Ci0gICAgW21fd2tWaWV3IF9zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZVJvb3RMYXllcjpyZW5kZXJMYXllcl07Ci19Ci0KLXZvaWQg
UGFnZUNsaWVudEltcGw6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoQ0FMYXll
ciAqcm9vdExheWVyKQotewotICAgIFttX3drVmlldyBfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGVSb290TGF5ZXI6cm9vdExheWVyXTsKLX0KLQotQ0FMYXllciAqUGFnZUNsaWVudEltcGw6
OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBt
X3drVmlldy5fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVSb290TGF5ZXI7Ci19Ci0KLVJldGFp
blB0cjxDR0ltYWdlUmVmPiBQYWdlQ2xpZW50SW1wbDo6dGFrZVZpZXdTbmFwc2hvdCgpCi17Ci0g
ICAgcmV0dXJuIFttX3drVmlldyBfdGFrZVZpZXdTbmFwc2hvdF07Ci19Ci0KLXZvaWQgUGFnZUNs
aWVudEltcGw6OndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdl
YldoZWVsRXZlbnQmIGV2ZW50KQotewotICAgIFttX3drVmlldyBfd2hlZWxFdmVudFdhc05vdEhh
bmRsZWRCeVdlYkNvcmU6ZXZlbnQubmF0aXZlRXZlbnQoKV07Ci19Ci0KLXZvaWQgUGFnZUNsaWVu
dEltcGw6OnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29t
cGxleFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNG
b2N1cykKLXsKLSAgICBbbV93a1ZpZXcgX3BsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQ6
cGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cyBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRl
bnRpZmllcjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcl07Ci19Ci0KLXZvaWQgUGFn
ZUNsaWVudEltcGw6OnNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCBwbHVn
aW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgUGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRl
IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkKLXsKLSAgICBbbV93a1ZpZXcgX3NldFBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRTdGF0ZTpwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgcGx1Z2lu
Q29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZp
ZXJdOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1
cChjb25zdCBBdHRyaWJ1dGVkU3RyaW5nJiB0ZXh0LCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZv
JiBkaWN0aW9uYXJ5UG9wdXBJbmZvKQotewotICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJp
bmc+IGF0dHJpYnV0ZWRTdHJpbmcgPSB0ZXh0LnN0cmluZzsKLSAgICBOU1BvaW50IHRleHRCYXNl
bGluZU9yaWdpbiA9IGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luOwotCi0gICAgLy8gQ29udmVy
dCB0byBzY3JlZW4gY29vcmRpbmF0ZXMuCi0gICAgdGV4dEJhc2VsaW5lT3JpZ2luID0gW21fd2tW
aWV3IGNvbnZlcnRQb2ludDp0ZXh0QmFzZWxpbmVPcmlnaW4gdG9WaWV3Om5pbF07Ci0gICAgdGV4
dEJhc2VsaW5lT3JpZ2luID0gW21fd2tWaWV3LndpbmRvdyBjb252ZXJ0UmVjdFRvU2NyZWVuOk5T
TWFrZVJlY3QodGV4dEJhc2VsaW5lT3JpZ2luLngsIHRleHRCYXNlbGluZU9yaWdpbi55LCAwLCAw
KV0ub3JpZ2luOwotCi0gICAgV0tTaG93V29yZERlZmluaXRpb25XaW5kb3coYXR0cmlidXRlZFN0
cmluZy5nZXQoKSwgdGV4dEJhc2VsaW5lT3JpZ2luLCAoTlNEaWN0aW9uYXJ5ICopZGljdGlvbmFy
eVBvcHVwSW5mby5vcHRpb25zLmdldCgpKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlz
bWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpCi17Ci0gICAgLy8gRklYTUU6IFdlIGRvbid0IGtu
b3cgd2hpY2ggcGFuZWwgd2UgYXJlIGRpc21pc3NpbmcsIGl0IG1heSBub3QgZXZlbiBiZSBpbiB0
aGUgY3VycmVudCBwYWdlIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzEzODc1NzY2PikuCi0gICAgV0tI
aWRlV29yZERlZmluaXRpb25XaW5kb3coKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hv
d0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCi17Ci0jaWYgVVNFKEFVVE9DT1JSRUNU
SU9OX1BBTkVMKQotICAgIGlmICghaXNWaWV3VmlzaWJsZSgpIHx8ICFpc1ZpZXdJbldpbmRvdygp
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWwuc2hvdyhtX3drVmlldywg
dHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywgcmVwbGFj
ZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKLSNlbmRpZgotfQot
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRp
c21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29uKQotewotI2lmIFVTRShBVVRPQ09SUkVDVElP
Tl9QQU5FTCkKLSAgICBtX2NvcnJlY3Rpb25QYW5lbC5kaXNtaXNzKHJlYXNvbik7Ci0jZW5kaWYK
LX0KLQotU3RyaW5nIFBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihX
ZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbikKLXsKLSNp
ZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCi0gICAgcmV0dXJuIG1fY29ycmVjdGlvblBhbmVs
LmRpc21pc3MocmVhc29uKTsKLSNlbHNlCi0gICAgcmV0dXJuIFN0cmluZygpOwotI2VuZGlmCi19
Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0
b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUgcmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQotewotICAgIE5TQ29y
cmVjdGlvblJlc3BvbnNlIHJlc3BvbnNlID0gcmVzcG9uc2VUeXBlID09IEF1dG9jb3JyZWN0aW9u
UmV2ZXJ0ZWQgPyBOU0NvcnJlY3Rpb25SZXNwb25zZVJldmVydGVkIDogTlNDb3JyZWN0aW9uUmVz
cG9uc2VFZGl0ZWQ7Ci0gICAgQ29ycmVjdGlvblBhbmVsOjpyZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlKG1fd2tWaWV3LCByZXNwb25zZSwgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3Ry
aW5nKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVjb21tZW5kZWRTY3JvbGxiYXJTdHls
ZURpZENoYW5nZShpbnQzMl90IG5ld1N0eWxlKQotewotICAgIE5TQXJyYXkgKnRyYWNraW5nQXJl
YXMgPSBbbV93a1ZpZXcgdHJhY2tpbmdBcmVhc107Ci0gICAgTlNVSW50ZWdlciBjb3VudCA9IFt0
cmFja2luZ0FyZWFzIGNvdW50XTsKLSAgICBBU1NFUlQoY291bnQgPT0gMSk7Ci0gICAgCi0gICAg
Zm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgW21fd2tWaWV3
IHJlbW92ZVRyYWNraW5nQXJlYTpbdHJhY2tpbmdBcmVhcyBvYmplY3RBdEluZGV4OmldXTsKLQot
ICAgIC8vIE5vdyByZS1jcmVhdGUgYSB0cmFja2luZyBhcmVhIHdpdGggdGhlIGFwcHJvcHJpYXRl
IG9wdGlvbnMgZ2l2ZW4gdGhlIG5ldyBzY3JvbGxiYXIgc3R5bGUKLSAgICBOU1RyYWNraW5nQXJl
YU9wdGlvbnMgb3B0aW9ucyA9IE5TVHJhY2tpbmdNb3VzZU1vdmVkIHwgTlNUcmFja2luZ01vdXNl
RW50ZXJlZEFuZEV4aXRlZCB8IE5TVHJhY2tpbmdJblZpc2libGVSZWN0OwotICAgIGlmIChuZXdT
dHlsZSA9PSBOU1Njcm9sbGVyU3R5bGVMZWdhY3kpCi0gICAgICAgIG9wdGlvbnMgfD0gTlNUcmFj
a2luZ0FjdGl2ZUFsd2F5czsKLSAgICBlbHNlCi0gICAgICAgIG9wdGlvbnMgfD0gTlNUcmFja2lu
Z0FjdGl2ZUluS2V5V2luZG93OwotCi0gICAgTlNUcmFja2luZ0FyZWEgKnRyYWNraW5nQXJlYSA9
IFtbTlNUcmFja2luZ0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDpbbV93a1ZpZXcgZnJhbWVdCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uczpvcHRpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcjptX3drVmlldwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNl
ckluZm86bmlsXTsKLSAgICBbbV93a1ZpZXcgYWRkVHJhY2tpbmdBcmVhOnRyYWNraW5nQXJlYV07
Ci0gICAgW3RyYWNraW5nQXJlYSByZWxlYXNlXTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
aW50cmluc2ljQ29udGVudFNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgaW50cmluc2ljQ29u
dGVudFNpemUpCi17Ci0gICAgW21fd2tWaWV3IF9zZXRJbnRyaW5zaWNDb250ZW50U2l6ZTppbnRy
aW5zaWNDb250ZW50U2l6ZV07Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6OmV4ZWN1dGVTYXZl
ZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcpCi17Ci0gICAg
cmV0dXJuIFttX3drVmlldyBfZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3I6TlNTZWxlY3Rv
ckZyb21TdHJpbmcoc2VsZWN0b3JTdHJpbmcpXTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
Y2xlYXJDdXN0b21Td2lwZVZpZXdzKCkKLXsKLSAgICByZXR1cm4gW21fd2tWaWV3IF9zZXRDdXN0
b21Td2lwZVZpZXdzOkBbXV07Ci19Ci0KLSNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykK
LXVpbnQ2NF90IFBhZ2VDbGllbnRJbXBsOjphZGREaWN0YXRpb25BbHRlcm5hdGl2ZXMoY29uc3Qg
UmV0YWluUHRyPE5TVGV4dEFsdGVybmF0aXZlcz4mIGFsdGVybmF0aXZlcykKLXsKLSAgICByZXR1
cm4gbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPmFkZEFsdGVybmF0aXZlcyhhbHRlcm5h
dGl2ZXMpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5h
dGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKLXsKLSAgICBtX2FsdGVybmF0aXZlVGV4
dFVJQ29udHJvbGxlci0+cmVtb3ZlQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNvbnRleHQpOwotfQot
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIHVpbnQ2NF90IGRp
Y3RhdGlvbkNvbnRleHQpCi17Ci0gICAgaWYgKCFpc1ZpZXdWaXNpYmxlKCkgfHwgIWlzVmlld0lu
V2luZG93KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJv
bGxlci0+c2hvd0FsdGVybmF0aXZlcyhtX3drVmlldywgYm91bmRpbmdCb3hPZkRpY3RhdGVkVGV4
dCwgZGljdGF0aW9uQ29udGV4dCwgXihOU1N0cmluZyogYWNjZXB0ZWRBbHRlcm5hdGl2ZSl7Ci0g
ICAgICAgIFttX3drVmlldyBoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dDphY2NlcHRlZEFs
dGVybmF0aXZlXTsKLSAgICB9KTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGFnZUNsaWVudEltcGw6
OmRpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQotewotICAg
IHJldHVybiBtX2FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+YWx0ZXJuYXRpdmVzRm9yQ29u
dGV4dChkaWN0YXRpb25Db250ZXh0KTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotCi1XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBQYWdlQ2xpZW50SW1w
bDo6ZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpCi17Ci0gICAgcmV0dXJuICp0aGlzOwot
fQotCi0vLyBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50Ci0KLXZvaWQgUGFnZUNsaWVu
dEltcGw6OmNsb3NlRnVsbFNjcmVlbk1hbmFnZXIoKQotewotICAgIFttX3drVmlldyBfY2xvc2VG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlcl07Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6Omlz
RnVsbFNjcmVlbigpCi17Ci0gICAgaWYgKCFtX3drVmlldy5faGFzRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX3drVmlldy5f
ZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaXNGdWxsU2NyZWVuOwotfQotCi12b2lkIFBhZ2VD
bGllbnRJbXBsOjplbnRlckZ1bGxTY3JlZW4oKQotewotICAgIFttX3drVmlldy5fZnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuOm5pbF07Ci19Ci0KLXZvaWQgUGFnZUNs
aWVudEltcGw6OmV4aXRGdWxsU2NyZWVuKCkKLXsKLSAgICBbbV93a1ZpZXcuX2Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuXTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6YmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgSW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25z
dCBJbnRSZWN0JiBmaW5hbEZyYW1lKQotewotICAgIFttX3drVmlldy5fZnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgYmVnYW5FbnRlckZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOmluaXRpYWxG
cmFtZSBmaW5hbEZyYW1lOmZpbmFsRnJhbWVdOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpi
ZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IEludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3QgSW50
UmVjdCYgZmluYWxGcmFtZSkKLXsKLSAgICBbbV93a1ZpZXcuX2Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyIGJlZ2FuRXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOmluaXRpYWxGcmFtZSBm
aW5hbEZyYW1lOmZpbmFsRnJhbWVdOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzYmJkMmZiOTYwNThhMGE0Y2M3YjJmMGQ1ZGUyMGU1OGYyZTMyMzBkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0SGFzaC5oPgotI2ltcG9y
dCA8Y29uZGl0aW9uX3ZhcmlhYmxlPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1AY2xh
c3MgV0tQcmludGluZ1ZpZXdEYXRhOwotQGNsYXNzIFBERkRvY3VtZW50OwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLSAgICBjbGFzcyBTaGFyZWFibGVCaXRtYXA7Ci0gICAgY2xhc3MgV2ViRnJhbWVQ
cm94eTsKLX0KLQotQGludGVyZmFjZSBXS1ByaW50aW5nVmlldyA6IE5TVmlldyB7Ci1AcHVibGlj
Ci0gICAgTlNQcmludE9wZXJhdGlvbiAqX3ByaW50T3BlcmF0aW9uOyAvLyBXS1ByaW50aW5nVmll
dyBpcyBvd25lZCBieSB0aGUgb3BlcmF0aW9uLgotICAgIFJldGFpblB0cjxOU1ZpZXc+IF93a1Zp
ZXc7Ci0KLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJGcmFtZVByb3h5PiBfd2ViRnJhbWU7Ci0gICAg
VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IF9wcmludGluZ1BhZ2VSZWN0czsKLSAgICBkb3VibGUg
X3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZzsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkludFJl
Y3QsIFJlZlB0cjxXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcD4+IF9wYWdlUHJldmlld3M7Ci0KLSAg
ICBWZWN0b3I8dWludDhfdD4gX3ByaW50ZWRQYWdlc0RhdGE7Ci0gICAgUmV0YWluUHRyPFBERkRv
Y3VtZW50PiBfcHJpbnRlZFBhZ2VzUERGRG9jdW1lbnQ7Ci0KLSAgICB1aW50NjRfdCBfZXhwZWN0
ZWRDb21wdXRlZFBhZ2VzQ2FsbGJhY2s7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgV2ViQ29yZTo6
SW50UmVjdD4gX2V4cGVjdGVkUHJldmlld0NhbGxiYWNrczsKLSAgICB1aW50NjRfdCBfbGF0ZXN0
RXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2s7Ci0gICAgdWludDY0X3QgX2V4cGVjdGVkUHJpbnRDYWxs
YmFjazsKLQotICAgIEJPT0wgX2lzUHJpbnRpbmdGcm9tU2Vjb25kYXJ5VGhyZWFkOwotICAgIHN0
ZDo6bXV0ZXggX3ByaW50aW5nQ2FsbGJhY2tNdXRleDsKLSAgICBzdGQ6OmNvbmRpdGlvbl92YXJp
YWJsZSBfcHJpbnRpbmdDYWxsYmFja0NvbmRpdGlvbjsKLQotICAgIE5TVGltZXIgKl9hdXRvZGlz
cGxheVJlc3VtZVRpbWVyOwotfQotCi0tIChpZClpbml0V2l0aEZyYW1lUHJveHk6KFdlYktpdDo6
V2ViRnJhbWVQcm94eSopZnJhbWUgdmlldzooTlNWaWV3ICopd2tWaWV3OwotCi1AZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2E3MDg4OTRjZDc5NjBhNGQ4ZmY3Yjk5M2Zm
MmM4N2QyZDQ5YjYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisr
KyAvZGV2L251bGwKQEAgLTEsNjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIldLUHJpbnRpbmdWaWV3LmgiCi0KLSNpbXBvcnQgIkFQSURhdGEuaCIK
LSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIKLSNpbXBvcnQg
IlByaW50SW5mby5oIgotI2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW1wb3J0ICJXZWJQ
YWdlUHJveHkuaCIKLSNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+
Ci0jaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLU5TU3RyaW5nICogY29uc3QgV2ViS2l0T3JpZ2luYWxU
b3BQcmludGluZ01hcmdpbktleSA9IEAiV2ViS2l0T3JpZ2luYWxUb3BNYXJnaW4iOwotTlNTdHJp
bmcgKiBjb25zdCBXZWJLaXRPcmlnaW5hbEJvdHRvbVByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJL
aXRPcmlnaW5hbEJvdHRvbU1hcmdpbiI7Ci0KLU5TU3RyaW5nICogY29uc3QgTlNQcmludEluZm9E
aWRDaGFuZ2VOb3RpZmljYXRpb24gPSBAIk5TUHJpbnRJbmZvRGlkQ2hhbmdlIjsKLQotc3RhdGlj
IEJPT0wgaXNGb3JjaW5nUHJldmlld1VwZGF0ZTsKLQotQGltcGxlbWVudGF0aW9uIFdLUHJpbnRp
bmdWaWV3Ci0KLS0gKGlkKWluaXRXaXRoRnJhbWVQcm94eTooV2ViS2l0OjpXZWJGcmFtZVByb3h5
KilmcmFtZSB2aWV3OihOU1ZpZXcgKil3a1ZpZXcKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRd
OyAvLyBObyBmcmFtZSByZWN0IHRvIHBhc3MgdG8gTlNWaWV3LgotICAgIGlmICghc2VsZikKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIF93ZWJGcmFtZSA9IGZyYW1lOwotICAgIF93a1ZpZXcg
PSB3a1ZpZXc7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0g
ICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtXS1ByaW50
aW5nVmlldyBjbGFzc10sIHNlbGYpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbc3VwZXIgZGVh
bGxvY107Ci19Ci0KLS0gKEJPT0wpaXNGbGlwcGVkCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQot
LSAodm9pZClfc2V0QXV0b2Rpc3BsYXk6KEJPT0wpbmV3U3RhdGUKLXsKLSAgICBpZiAoIW5ld1N0
YXRlICYmIFtbX3drVmlldyB3aW5kb3ddIGlzQXV0b2Rpc3BsYXldKQotICAgICAgICBbX3drVmll
dyBkaXNwbGF5SWZOZWVkZWRdOwotICAgIAotICAgIFtbX3drVmlldyB3aW5kb3ddIHNldEF1dG9k
aXNwbGF5Om5ld1N0YXRlXTsKLQotICAgIC8vIEZvciBzb21lIHJlYXNvbiwgcGFpbnRpbmcgZG9l
c24ndCBoYXBwZW4gZm9yIGEgbG9uZyB0aW1lIHdpdGhvdXQgdGhpcyBjYWxsLCA8cmRhcjovL3By
b2JsZW0vODk3NTIyOT4uCi0gICAgaWYgKG5ld1N0YXRlKQotICAgICAgICBbX3drVmlldyBkaXNw
bGF5SWZOZWVkZWRdOwotfQotCi0KLS0gKHZvaWQpX3N1c3BlbmRBdXRvZGlzcGxheQotewotICAg
IC8vIEEgZHJhd1JlY3Q6IGNhbGwgb24gV0tWaWV3IGNhdXNlcyBhIHN3aXRjaCB0byBzY3JlZW4g
bW9kZSwgd2hpY2ggaXMgc2xvdyBkdWUgdG8gcmVsYXlvdXQsIGFuZCB3ZSB3YW50IHRvIGF2b2lk
IHRoYXQuCi0gICAgLy8gRGlzYWJsaW5nIGF1dG9kaXNwbGF5IHdpbGwgcHJldmVudCByYW5kb20g
dXBkYXRlcyBmcm9tIGNhdXNpbmcgdGhpcywgYnV0IHJlc2l6aW5nIHRoZSB3aW5kb3cgd2lsbCBz
dGlsbCB3b3JrLgotICAgIGlmIChfYXV0b2Rpc3BsYXlSZXN1bWVUaW1lcikgewotICAgICAgICBb
X2F1dG9kaXNwbGF5UmVzdW1lVGltZXIgaW52YWxpZGF0ZV07Ci0gICAgICAgIF9hdXRvZGlzcGxh
eVJlc3VtZVRpbWVyID0gbmlsOwotICAgIH0gZWxzZQotICAgICAgICBbc2VsZiBfc2V0QXV0b2Rp
c3BsYXk6Tk9dOwotfQotCi0tICh2b2lkKV9kZWxheWVkUmVzdW1lQXV0b2Rpc3BsYXlUaW1lckZp
cmVkCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBfYXV0b2Rp
c3BsYXlSZXN1bWVUaW1lciA9IG5pbDsKLSAgICBbc2VsZiBfc2V0QXV0b2Rpc3BsYXk6WUVTXTsK
LQotICAgIC8vIEVuYWJsaW5nIGF1dG9kaXNwbGF5IG5vcm1hbGx5IGltcGxpY2l0bHkgY2FsbHMg
ZW5kUHJpbnRpbmcoKSB2aWEgLVtXS1ZpZXcgZHJhd1JlY3Q6XSwgYnV0IG5vdCB3aGVuIGNvbnRl
bnQgaXMgaW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZS4KLSAgICBpZiAoX3dlYkZyYW1l
LT5wYWdlKCkpCi0gICAgICAgIF93ZWJGcmFtZS0+cGFnZSgpLT5lbmRQcmludGluZygpOwotfQot
Ci0tICh2b2lkKV9kZWxheWVkUmVzdW1lQXV0b2Rpc3BsYXkKLXsKLSAgICAvLyBBcHBLaXQgY2Fs
bHMgZW5kRG9jdW1lbnQvYmVnaW5Eb2N1bWVudCB3aGVuIHByaW50IG9wdGlvbiBjaGFuZ2UuIFdl
IGRvbid0IHdhbnQgdG8gc3dpdGNoIGJldHdlZW4gcHJpbnQgYW5kIHNjcmVlbiBtb2RlIGp1c3Qg
Zm9yIHRoYXQsCi0gICAgLy8gYW5kIGVuYWJsaW5nIGF1dG9kaXNwbGF5IG1heSByZXN1bHQgaW4g
c3dpdGNoaW5nIGludG8gc2NyZWVuIG1vZGUuIFNvLCBhdXRvZGlzcGxheSBpcyBvbmx5IHJlc3Vt
ZWQgb24gbmV4dCBydW4gbG9vcCBpdGVyYXRpb24uCi0gICAgaWYgKCFfYXV0b2Rpc3BsYXlSZXN1
bWVUaW1lcikgewotICAgICAgICBfYXV0b2Rpc3BsYXlSZXN1bWVUaW1lciA9IFtOU1RpbWVyIHRp
bWVyV2l0aFRpbWVJbnRlcnZhbDowIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfZGVs
YXllZFJlc3VtZUF1dG9kaXNwbGF5VGltZXJGaXJlZCkgdXNlckluZm86bmlsIHJlcGVhdHM6Tk9d
OwotICAgICAgICAvLyBUaGUgdGltZXIgbXVzdCBiZSBzY2hlZHVsZWQgb24gbWFpbiB0aHJlYWQs
IGJlY2F1c2UgcHJpbnRpbmcgdGhyZWFkIG1heSBmaW5pc2ggYmVmb3JlIGl0IGZpcmVzLgotICAg
ICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gYWRkVGltZXI6X2F1dG9kaXNwbGF5UmVzdW1l
VGltZXIgZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgfQotfQotCi0tICh2b2lk
KV9hZGp1c3RQcmludGluZ01hcmdpbnNGb3JIZWFkZXJBbmRGb290ZXIKLXsKLSAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOyAvLyBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSBjbGllbnQsIHdo
aWNoIHNob3VsZCBvbmx5IGJlIGRvbmUgb24gbWFpbiB0aHJlYWQuCi0KLSAgICBOU1ByaW50SW5m
byAqaW5mbyA9IFtfcHJpbnRPcGVyYXRpb24gcHJpbnRJbmZvXTsKLSAgICBOU011dGFibGVEaWN0
aW9uYXJ5ICppbmZvRGljdGlvbmFyeSA9IFtpbmZvIGRpY3Rpb25hcnldOwotCi0gICAgLy8gV2Ug
bmVlZCB0byBtb2RpZnkgdGhlIHRvcCBhbmQgYm90dG9tIG1hcmdpbnMgaW4gdGhlIE5TUHJpbnRJ
bmZvIHRvIGFjY291bnQgZm9yIHRoZSBzcGFjZSBuZWVkZWQgYnkgdGhlCi0gICAgLy8gaGVhZGVy
IGFuZCBmb290ZXIuIEJlY2F1c2UgdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4g
b25jZSBvbiB0aGUgc2FtZSBOU1ByaW50SW5mbyAoc2VlIDUwMzgwODcpLAotICAgIC8vIHdlIHN0
YXNoIGF3YXkgdGhlIHVubW9kaWZpZWQgdG9wIGFuZCBib3R0b20gbWFyZ2lucyB0aGUgZmlyc3Qg
dGltZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIGFuZCB3ZSByZWFkIGZyb20KLSAgICAvLyB0aG9z
ZSBzdGFzaGVkLWF3YXkgdmFsdWVzIG9uIHN1YnNlcXVlbnQgY2FsbHMuCi0gICAgZG91YmxlIG9y
aWdpbmFsVG9wTWFyZ2luOwotICAgIGRvdWJsZSBvcmlnaW5hbEJvdHRvbU1hcmdpbjsKLSAgICBO
U051bWJlciAqb3JpZ2luYWxUb3BNYXJnaW5OdW1iZXIgPSBbaW5mb0RpY3Rpb25hcnkgb2JqZWN0
Rm9yS2V5OldlYktpdE9yaWdpbmFsVG9wUHJpbnRpbmdNYXJnaW5LZXldOwotICAgIGlmICghb3Jp
Z2luYWxUb3BNYXJnaW5OdW1iZXIpIHsKLSAgICAgICAgQVNTRVJUKCFbaW5mb0RpY3Rpb25hcnkg
b2JqZWN0Rm9yS2V5OldlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXldKTsKLSAg
ICAgICAgb3JpZ2luYWxUb3BNYXJnaW4gPSBbaW5mbyB0b3BNYXJnaW5dOwotICAgICAgICBvcmln
aW5hbEJvdHRvbU1hcmdpbiA9IFtpbmZvIGJvdHRvbU1hcmdpbl07Ci0gICAgICAgIFtpbmZvRGlj
dGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6b3JpZ2luYWxUb3BN
YXJnaW5dIGZvcktleTpXZWJLaXRPcmlnaW5hbFRvcFByaW50aW5nTWFyZ2luS2V5XTsKLSAgICAg
ICAgW2luZm9EaWN0aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpv
cmlnaW5hbEJvdHRvbU1hcmdpbl0gZm9yS2V5OldlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdN
YXJnaW5LZXldOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChbb3JpZ2luYWxUb3BNYXJn
aW5OdW1iZXIgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSk7Ci0gICAgICAgIEFTU0VS
VChbW2luZm9EaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJLaXRPcmlnaW5hbEJvdHRvbVByaW50
aW5nTWFyZ2luS2V5XSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKTsKLSAgICAgICAg
b3JpZ2luYWxUb3BNYXJnaW4gPSBbb3JpZ2luYWxUb3BNYXJnaW5OdW1iZXIgZG91YmxlVmFsdWVd
OwotICAgICAgICBvcmlnaW5hbEJvdHRvbU1hcmdpbiA9IFtbaW5mb0RpY3Rpb25hcnkgb2JqZWN0
Rm9yS2V5OldlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXldIGRvdWJsZVZhbHVl
XTsKLSAgICB9Ci0gICAgCi0gICAgQ0dGbG9hdCBzY2FsZSA9IFtpbmZvIHNjYWxpbmdGYWN0b3Jd
OwotICAgIFtpbmZvIHNldFRvcE1hcmdpbjpvcmlnaW5hbFRvcE1hcmdpbiArIF93ZWJGcmFtZS0+
cGFnZSgpLT5oZWFkZXJIZWlnaHQoX3dlYkZyYW1lLmdldCgpKSAqIHNjYWxlXTsKLSAgICBbaW5m
byBzZXRCb3R0b21NYXJnaW46b3JpZ2luYWxCb3R0b21NYXJnaW4gKyBfd2ViRnJhbWUtPnBhZ2Uo
KS0+Zm9vdGVySGVpZ2h0KF93ZWJGcmFtZS5nZXQoKSkgKiBzY2FsZV07Ci19Ci0KLS0gKEJPT0wp
X2lzUHJpbnRpbmdQcmV2aWV3Ci17Ci0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzg5MDEwNDE+IFBs
ZWFzZSBhZGQgYW4gQVBJIHJldHVybmluZyB3aGV0aGVyIHRoZSBjdXJyZW50IHByaW50IG9wZXJh
dGlvbiBpcyBmb3IgcHJldmlldy4KLSAgICAvLyBBc3N1bWluZyB0aGF0IGlmIE5TUHJpbnRPcGVy
YXRpb24gaXMgYWxsb3dlZCB0byBzcGF3biBhIHRocmVhZCBmb3IgcHJpbnRpbmcsIGl0IHdpbGwu
IFByaW50IHByZXZpZXcgZG9lc24ndCBzcGF3biBhIHRocmVhZC4KLSAgICByZXR1cm4gIV9pc1By
aW50aW5nRnJvbVNlY29uZGFyeVRocmVhZDsKLX0KLQotLSAodm9pZClfdXBkYXRlUHJldmlldwot
ewotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS84OTAwOTIzPiBQbGVhc2UgYWRkIGFuIEFQSSB0byBm
b3JjZSBwcmludCBwcmV2aWV3IHVwZGF0ZS4KLSAgICBBU1NFUlQoIWlzRm9yY2luZ1ByZXZpZXdV
cGRhdGUpOwotICAgIGlzRm9yY2luZ1ByZXZpZXdVcGRhdGUgPSBZRVM7Ci0gICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpOU1ByaW50
SW5mb0RpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBpc0ZvcmNpbmdQcmV2
aWV3VXBkYXRlID0gTk87Ci19Ci0KLS0gKEJPT0wpX2hhc1BhZ2VSZWN0cwotewotICAgIC8vIFdl
YkNvcmUgYWx3YXlzIHByaW50cyBhdCBsZWFzdCBvbmUgcGFnZS4KLSAgICByZXR1cm4gIV9wcmlu
dGluZ1BhZ2VSZWN0cy5pc0VtcHR5KCk7Ci19Ci0KLS0gKE5TVUludGVnZXIpX2ZpcnN0UHJpbnRl
ZFBhZ2VOdW1iZXIKLXsKLSAgICAvLyBOZWVkIHRvIGRpcmVjdGx5IGFjY2VzcyB0aGUgZGljdGlv
bmFyeSBiZWNhdXNlIC1bTlNQcmludE9wZXJhdGlvbiBwYWdlUmFuZ2VdIHZlcmlmaWVzIHBhZ2lu
YXRpb24sIHBvdGVudGlhbGx5IGNhdXNpbmcgcmVjdXJzaW9uLgotICAgIHJldHVybiBbW1tbX3By
aW50T3BlcmF0aW9uIHByaW50SW5mb10gZGljdGlvbmFyeV0gb2JqZWN0Rm9yS2V5Ok5TUHJpbnRG
aXJzdFBhZ2VdIHVuc2lnbmVkSW50ZWdlclZhbHVlXTsKLX0KLQotLSAoTlNVSW50ZWdlcilfbGFz
dFByaW50ZWRQYWdlTnVtYmVyCi17Ci0gICAgQVNTRVJUKFtzZWxmIF9oYXNQYWdlUmVjdHNdKTsK
LQotICAgIC8vIE5lZWQgdG8gZGlyZWN0bHkgYWNjZXNzIHRoZSBkaWN0aW9uYXJ5IGJlY2F1c2Ug
LVtOU1ByaW50T3BlcmF0aW9uIHBhZ2VSYW5nZV0gdmVyaWZpZXMgcGFnaW5hdGlvbiwgcG90ZW50
aWFsbHkgY2F1c2luZyByZWN1cnNpb24uCi0gICAgTlNVSW50ZWdlciBmaXJzdFBhZ2UgPSBbW1tb
X3ByaW50T3BlcmF0aW9uIHByaW50SW5mb10gZGljdGlvbmFyeV0gb2JqZWN0Rm9yS2V5Ok5TUHJp
bnRGaXJzdFBhZ2VdIHVuc2lnbmVkSW50ZWdlclZhbHVlXTsKLSAgICBOU1VJbnRlZ2VyIGxhc3RQ
YWdlID0gW1tbW19wcmludE9wZXJhdGlvbiBwcmludEluZm9dIGRpY3Rpb25hcnldIG9iamVjdEZv
cktleTpOU1ByaW50TGFzdFBhZ2VdIHVuc2lnbmVkSW50ZWdlclZhbHVlXTsKLSAgICBpZiAobGFz
dFBhZ2UgLSBmaXJzdFBhZ2UgPj0gX3ByaW50aW5nUGFnZVJlY3RzLnNpemUoKSkKLSAgICAgICAg
cmV0dXJuIF9wcmludGluZ1BhZ2VSZWN0cy5zaXplKCk7Ci0gICAgcmV0dXJuIGxhc3RQYWdlOwot
fQotCi0tICh1aW50NjRfdClfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tGb3JSZWN0Oihjb25zdCBJ
bnRSZWN0JilyZWN0Ci17Ci0gICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBXZWJDb3JlOjpJbnRS
ZWN0Pjo6aXRlcmF0b3IgaXRlciA9IF9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MuYmVnaW4oKTsg
aXRlciAhPSBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAg
ICAgaWYgKGl0ZXItPnZhbHVlICA9PSByZWN0KQotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPmtl
eTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBJUENDYWxsYmFja0NvbnRleHQg
ewotICAgIFJldGFpblB0cjxXS1ByaW50aW5nVmlldz4gdmlldzsKLSAgICB1aW50NjRfdCBjYWxs
YmFja0lEOwotfTsKLQotc3RhdGljIHZvaWQgcGFnZURpZERyYXdUb0ltYWdlKGNvbnN0IFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlJiBpbWFnZUhhbmRsZSwgSVBDQ2FsbGJhY2tDb250ZXh0KiBjb250
ZXh0KQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBXS1ByaW50aW5n
VmlldyAqdmlldyA9IGNvbnRleHQtPnZpZXcuZ2V0KCk7Ci0KLSAgICAvLyBJZiB0aGUgdXNlciBo
YXMgYWxyZWFkeSBjaGFuZ2VkIHByaW50IHNldHVwLCB0aGVuIHRoaXMgcmVzcG9uc2UgaXMgb2Jz
b2xldGUuIEFuZCBpZiB0aGlzIGNhbGxiYWNrIGlzIG5vdCBpbiByZXNwb25zZSB0byB0aGUgbGF0
ZXN0IHJlcXVlc3QsCi0gICAgLy8gdGhlbiB0aGUgdXNlciBoYXMgYWxyZWFkeSBtb3ZlZCB0byBh
bm90aGVyIHBhZ2UgLSB3ZSdsbCBjYWNoZSB0aGUgcmVzcG9uc2UsIGJ1dCB3b24ndCBkcmF3IGl0
LgotICAgIEhhc2hNYXA8dWludDY0X3QsIFdlYkNvcmU6OkludFJlY3Q+OjppdGVyYXRvciBpdGVy
ID0gdmlldy0+X2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5maW5kKGNvbnRleHQtPmNhbGxiYWNr
SUQpOwotICAgIGlmIChpdGVyICE9IHZpZXctPl9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MuZW5k
KCkpIHsKLSAgICAgICAgQVNTRVJUKFt2aWV3IF9pc1ByaW50aW5nUHJldmlld10pOwotCi0gICAg
ICAgIGlmICghaW1hZ2VIYW5kbGUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGltYWdlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaW1hZ2VIYW5kbGUs
IFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwotCi0gICAgICAgICAgICBpZiAoaW1hZ2UpCi0gICAg
ICAgICAgICAgICAgdmlldy0+X3BhZ2VQcmV2aWV3cy5hZGQoaXRlci0+dmFsdWUsIGltYWdlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZpZXctPl9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MucmVt
b3ZlKGNvbnRleHQtPmNhbGxiYWNrSUQpOwotICAgICAgICBib29sIHJlY2VpdmVkUmVzcG9uc2VU
b0xhdGVzdFJlcXVlc3QgPSB2aWV3LT5fbGF0ZXN0RXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2sgPT0g
Y29udGV4dC0+Y2FsbGJhY2tJRDsKLSAgICAgICAgaWYgKHJlY2VpdmVkUmVzcG9uc2VUb0xhdGVz
dFJlcXVlc3QpIHsKLSAgICAgICAgICAgIHZpZXctPl9sYXRlc3RFeHBlY3RlZFByZXZpZXdDYWxs
YmFjayA9IDA7Ci0gICAgICAgICAgICBbdmlldyBfdXBkYXRlUHJldmlld107Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLS0gKHZvaWQpX3ByZXBhcmVQREZEYXRhRm9yUHJpbnRpbmdPblNlY29uZGFy
eVRocmVhZAotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIV93
ZWJGcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgIF9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9uLm5v
dGlmeV9vbmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsb2NrKF9wcmludGluZ0NhbGxiYWNrTXV0ZXgpOwotCi0gICAgQVNTRVJU
KFtzZWxmIF9oYXNQYWdlUmVjdHNdKTsKLSAgICBBU1NFUlQoX3ByaW50ZWRQYWdlc0RhdGEuaXNF
bXB0eSgpKTsKLSAgICBBU1NFUlQoIV9wcmludGVkUGFnZXNQREZEb2N1bWVudCk7Ci0gICAgQVNT
RVJUKCFfZXhwZWN0ZWRQcmludENhbGxiYWNrKTsKLQotICAgIE5TVUludGVnZXIgZmlyc3RQYWdl
ID0gW3NlbGYgX2ZpcnN0UHJpbnRlZFBhZ2VOdW1iZXJdOwotICAgIE5TVUludGVnZXIgbGFzdFBh
Z2UgPSBbc2VsZiBfbGFzdFByaW50ZWRQYWdlTnVtYmVyXTsKLQotICAgIEFTU0VSVChmaXJzdFBh
Z2UgPiAwKTsKLSAgICBBU1NFUlQoZmlyc3RQYWdlIDw9IGxhc3RQYWdlKTsKLSAgICBMT0coVmll
dywgIldLUHJpbnRpbmdWaWV3IHJlcXVlc3RpbmcgUERGIGRhdGEgZm9yIHBhZ2VzICV1Li4uJXUi
LCBmaXJzdFBhZ2UsIGxhc3RQYWdlKTsKLQotICAgIFByaW50SW5mbyBwcmludEluZm8oW19wcmlu
dE9wZXJhdGlvbiBwcmludEluZm9dKTsKLSAgICAvLyBSZXR1cm4gdG8gcHJpbnRpbmcgbW9kZSBp
ZiB3ZSdyZSBhbHJlYWR5IGJhY2sgdG8gc2NyZWVuIChlLmcuIGR1ZSB0byB3aW5kb3cgcmVzaXpp
bmcpLgotICAgIF93ZWJGcmFtZS0+cGFnZSgpLT5iZWdpblByaW50aW5nKF93ZWJGcmFtZS5nZXQo
KSwgcHJpbnRJbmZvKTsKLQotICAgIElQQ0NhbGxiYWNrQ29udGV4dCogY29udGV4dCA9IG5ldyBJ
UENDYWxsYmFja0NvbnRleHQ7Ci0gICAgUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBE
YXRhQ2FsbGJhY2s6OmNyZWF0ZShbY29udGV4dF0oYm9vbCwgQVBJOjpEYXRhKiBkYXRhKSB7Ci0g
ICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICAgICAgT3duUHRyPElQQ0Nh
bGxiYWNrQ29udGV4dD4gY29udGV4dERlbGV0ZXIgPSBhZG9wdFB0cihjb250ZXh0KTsKLSAgICAg
ICAgV0tQcmludGluZ1ZpZXcgKnZpZXcgPSBjb250ZXh0LT52aWV3LmdldCgpOwotCi0gICAgICAg
IGlmIChjb250ZXh0LT5jYWxsYmFja0lEID09IHZpZXctPl9leHBlY3RlZFByaW50Q2FsbGJhY2sp
IHsKLSAgICAgICAgICAgIEFTU0VSVCghW3ZpZXcgX2lzUHJpbnRpbmdQcmV2aWV3XSk7Ci0gICAg
ICAgICAgICBBU1NFUlQodmlldy0+X3ByaW50ZWRQYWdlc0RhdGEuaXNFbXB0eSgpKTsKLSAgICAg
ICAgICAgIEFTU0VSVCghdmlldy0+X3ByaW50ZWRQYWdlc1BERkRvY3VtZW50KTsKLSAgICAgICAg
ICAgIGlmIChkYXRhKQotICAgICAgICAgICAgICAgIHZpZXctPl9wcmludGVkUGFnZXNEYXRhLmFw
cGVuZChkYXRhLT5ieXRlcygpLCBkYXRhLT5zaXplKCkpOwotICAgICAgICAgICAgdmlldy0+X2V4
cGVjdGVkUHJpbnRDYWxsYmFjayA9IDA7Ci0gICAgICAgICAgICB2aWV3LT5fcHJpbnRpbmdDYWxs
YmFja0NvbmRpdGlvbi5ub3RpZnlfb25lKCk7Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBfZXhw
ZWN0ZWRQcmludENhbGxiYWNrID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKLQotICAgIGNvbnRl
eHQtPnZpZXcgPSBzZWxmOwotICAgIGNvbnRleHQtPmNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2Fs
bGJhY2tJRCgpOwotCi0gICAgX3dlYkZyYW1lLT5wYWdlKCktPmRyYXdQYWdlc1RvUERGKF93ZWJG
cmFtZS5nZXQoKSwgcHJpbnRJbmZvLCBmaXJzdFBhZ2UgLSAxLCBsYXN0UGFnZSAtIGZpcnN0UGFn
ZSArIDEsIGNhbGxiYWNrLmdldCgpKTsKLX0KLQotc3RhdGljIHZvaWQgcGFnZURpZENvbXB1dGVQ
YWdlUmVjdHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiBwYWdlUmVjdHMsIGRvdWJs
ZSB0b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcsIElQQ0NhbGxiYWNrQ29udGV4dCogY29udGV4
dCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgV0tQcmludGluZ1Zp
ZXcgKnZpZXcgPSBjb250ZXh0LT52aWV3LmdldCgpOwotCi0gICAgLy8gSWYgdGhlIHVzZXIgaGFz
IGFscmVhZHkgY2hhbmdlZCBwcmludCBzZXR1cCwgdGhlbiB0aGlzIHJlc3BvbnNlIGlzIG9ic29s
ZXRlLgotICAgIGlmIChjb250ZXh0LT5jYWxsYmFja0lEID09IHZpZXctPl9leHBlY3RlZENvbXB1
dGVkUGFnZXNDYWxsYmFjaykgewotICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgICAgICBBU1NFUlQodmlldy0+X2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5pc0VtcHR5KCkp
OwotICAgICAgICBBU1NFUlQoIXZpZXctPl9sYXRlc3RFeHBlY3RlZFByZXZpZXdDYWxsYmFjayk7
Ci0gICAgICAgIEFTU0VSVCghdmlldy0+X2V4cGVjdGVkUHJpbnRDYWxsYmFjayk7Ci0gICAgICAg
IEFTU0VSVCh2aWV3LT5fcGFnZVByZXZpZXdzLmlzRW1wdHkoKSk7Ci0gICAgICAgIHZpZXctPl9l
eHBlY3RlZENvbXB1dGVkUGFnZXNDYWxsYmFjayA9IDA7Ci0KLSAgICAgICAgdmlldy0+X3ByaW50
aW5nUGFnZVJlY3RzID0gcGFnZVJlY3RzOwotICAgICAgICB2aWV3LT5fdG90YWxTY2FsZUZhY3Rv
ckZvclByaW50aW5nID0gdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nOwotCi0gICAgICAgIC8v
IFNhbml0aXplIGEgcmVzcG9uc2UgY29taW5nIGZyb20gdGhlIFdlYiBwcm9jZXNzLgotICAgICAg
ICBpZiAodmlldy0+X3ByaW50aW5nUGFnZVJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHZp
ZXctPl9wcmludGluZ1BhZ2VSZWN0cy5hcHBlbmQoSW50UmVjdCgwLCAwLCAxLCAxKSk7Ci0gICAg
ICAgIGlmICh2aWV3LT5fdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nIDw9IDApCi0gICAgICAg
ICAgICB2aWV3LT5fdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nID0gMTsKLQotICAgICAgICBj
b25zdCBJbnRSZWN0JiBsYXN0UHJpbnRpbmdQYWdlUmVjdCA9IHZpZXctPl9wcmludGluZ1BhZ2VS
ZWN0c1t2aWV3LT5fcHJpbnRpbmdQYWdlUmVjdHMuc2l6ZSgpIC0gMV07Ci0gICAgICAgIE5TUmVj
dCBuZXdGcmFtZVNpemUgPSBOU01ha2VSZWN0KDAsIDAsIAotICAgICAgICAgICAgY2VpbChsYXN0
UHJpbnRpbmdQYWdlUmVjdC5tYXhYKCkgKiB2aWV3LT5fdG90YWxTY2FsZUZhY3RvckZvclByaW50
aW5nKSwgCi0gICAgICAgICAgICBjZWlsKGxhc3RQcmludGluZ1BhZ2VSZWN0Lm1heFkoKSAqIHZp
ZXctPl90b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcpKTsKLSAgICAgICAgTE9HKFZpZXcsICJX
S1ByaW50aW5nVmlldyBzZXR0aW5nIGZyYW1lIHNpemUgdG8geDolZyB5OiVnIHdpZHRoOiVnIGhl
aWdodDolZyIsIG5ld0ZyYW1lU2l6ZS5vcmlnaW4ueCwgbmV3RnJhbWVTaXplLm9yaWdpbi55LCBu
ZXdGcmFtZVNpemUuc2l6ZS53aWR0aCwgbmV3RnJhbWVTaXplLnNpemUuaGVpZ2h0KTsKLSAgICAg
ICAgW3ZpZXcgc2V0RnJhbWU6bmV3RnJhbWVTaXplXTsKLQotICAgICAgICBpZiAoW3ZpZXcgX2lz
UHJpbnRpbmdQcmV2aWV3XSkgewotICAgICAgICAgICAgLy8gU2hvdyBwYWdlIGNvdW50LCBhbmQg
YXNrIGZvciBhbiBhY3R1YWwgaW1hZ2UgdG8gcmVwbGFjZSBwbGFjZWhvbGRlci4KLSAgICAgICAg
ICAgIFt2aWV3IF91cGRhdGVQcmV2aWV3XTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIFdoZW4gcHJpbnRpbmcsIHJlcXVlc3QgZXZlcnl0aGluZyB3ZSdsbCBuZWVkIGJlZm9yZWhh
bmQuCi0gICAgICAgICAgICBbdmlldyBfcHJlcGFyZVBERkRhdGFGb3JQcmludGluZ09uU2Vjb25k
YXJ5VGhyZWFkXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLSAoQk9PTClfYXNrUGFnZVRvQ29t
cHV0ZVBhZ2VSZWN0cwotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBp
ZiAoIV93ZWJGcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICBBU1NFUlQo
IV9leHBlY3RlZENvbXB1dGVkUGFnZXNDYWxsYmFjayk7Ci0KLSAgICBJUENDYWxsYmFja0NvbnRl
eHQqIGNvbnRleHQgPSBuZXcgSVBDQ2FsbGJhY2tDb250ZXh0OwotICAgIFJlZlB0cjxDb21wdXRl
ZFBhZ2VzQ2FsbGJhY2s+IGNhbGxiYWNrID0gQ29tcHV0ZWRQYWdlc0NhbGxiYWNrOjpjcmVhdGUo
W2NvbnRleHRdKGJvb2wsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgcGFnZVJlY3Rz
LCBkb3VibGUgdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nKSB7Ci0gICAgICAgIE93blB0cjxJ
UENDYWxsYmFja0NvbnRleHQ+IGNvbnRleHREZWxldGVyID0gYWRvcHRQdHIoY29udGV4dCk7Ci0g
ICAgICAgIHBhZ2VEaWRDb21wdXRlUGFnZVJlY3RzKHBhZ2VSZWN0cywgdG90YWxTY2FsZUZhY3Rv
ckZvclByaW50aW5nLCBjb250ZXh0KTsKLSAgICB9KTsKLSAgICBfZXhwZWN0ZWRDb21wdXRlZFBh
Z2VzQ2FsbGJhY2sgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwotICAgIGNvbnRleHQtPnZpZXcg
PSBzZWxmOwotICAgIGNvbnRleHQtPmNhbGxiYWNrSUQgPSBfZXhwZWN0ZWRDb21wdXRlZFBhZ2Vz
Q2FsbGJhY2s7Ci0KLSAgICBfd2ViRnJhbWUtPnBhZ2UoKS0+Y29tcHV0ZVBhZ2VzRm9yUHJpbnRp
bmcoX3dlYkZyYW1lLmdldCgpLCBQcmludEluZm8oW19wcmludE9wZXJhdGlvbiBwcmludEluZm9d
KSwgY2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICByZXR1cm4gWUVTOwotfQotCi1zdGF0aWMgdm9p
ZCBwcmVwYXJlRGF0YUZvclByaW50aW5nT25TZWNvbmRhcnlUaHJlYWQodm9pZCogdW50eXBlZENv
bnRleHQpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFdLUHJpbnRp
bmdWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0tQcmludGluZ1ZpZXcgKj4odW50eXBlZENvbnRl
eHQpOwotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHZpZXctPl9wcmludGlu
Z0NhbGxiYWNrTXV0ZXgpOwotCi0gICAgLy8gV2UgbWF5IGhhdmUgcmVjZWl2ZWQgcGFnZSByZWN0
cyB3aGlsZSBhIG1lc3NhZ2UgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRyYXZlbGVkIGZyb20gc2Vj
b25kYXJ5IHRocmVhZCB0byBtYWluIG9uZS4KLSAgICBpZiAoW3ZpZXcgX2hhc1BhZ2VSZWN0c10p
IHsKLSAgICAgICAgW3ZpZXcgX3ByZXBhcmVQREZEYXRhRm9yUHJpbnRpbmdPblNlY29uZGFyeVRo
cmVhZF07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBIHJlcXVlc3QgZm9yIHBh
Z2VzIGhhcyBhbHJlYWR5IGJlZW4gbWFkZSwganVzdCB3YWl0IGZvciBpdCB0byBmaW5pc2guCi0g
ICAgaWYgKHZpZXctPl9leHBlY3RlZENvbXB1dGVkUGFnZXNDYWxsYmFjaykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgW3ZpZXcgX2Fza1BhZ2VUb0NvbXB1dGVQYWdlUmVjdHNdOwotfQotCi0tIChC
T09MKWtub3dzUGFnZVJhbmdlOihOU1JhbmdlUG9pbnRlcilyYW5nZQotewotICAgIExPRyhWaWV3
LCAiLVtXS1ByaW50aW5nVmlldyAlcCBrbm93c1BhZ2VSYW5nZTpdLCAlcywgJXMiLCBzZWxmLCBb
c2VsZiBfaGFzUGFnZVJlY3RzXSA/ICJwcmludCBkYXRhIGlzIGF2YWlsYWJsZSIgOiAicHJpbnQg
ZGF0YSBpcyBub3QgYXZhaWxhYmxlIHlldCIsIFJ1bkxvb3A6OmlzTWFpbigpID8gIm9uIG1haW4g
dGhyZWFkIiA6ICJvbiBzZWNvbmRhcnkgdGhyZWFkIik7Ci0gICAgQVNTRVJUKF9wcmludE9wZXJh
dGlvbiA9PSBbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSk7Ci0KLSAgICAvLyBB
c3N1bWluZyB0aGF0IG9uY2Ugd2Ugc3dpdGNoIHRvIHByaW50aW5nIGZyb20gYSBzZWNvbmRhcnkg
dGhyZWFkLCB3ZSBkb24ndCBnbyBiYWNrLgotICAgIEFTU0VSVCghX2lzUHJpbnRpbmdGcm9tU2Vj
b25kYXJ5VGhyZWFkIHx8ICFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKCFSdW5Mb29wOjpp
c01haW4oKSkKLSAgICAgICAgX2lzUHJpbnRpbmdGcm9tU2Vjb25kYXJ5VGhyZWFkID0gWUVTOwot
Ci0gICAgaWYgKCFfd2ViRnJhbWUtPnBhZ2UoKSkgewotICAgICAgICAqcmFuZ2UgPSBOU01ha2VS
YW5nZSgxLCBOU0ludGVnZXJNYXgpOwotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLQotICAg
IFtzZWxmIF9zdXNwZW5kQXV0b2Rpc3BsYXldOwotICAgIAotICAgIFtzZWxmIHBlcmZvcm1TZWxl
Y3Rvck9uTWFpblRocmVhZDpAc2VsZWN0b3IoX2FkanVzdFByaW50aW5nTWFyZ2luc0ZvckhlYWRl
ckFuZEZvb3Rlcikgd2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9uZTpZRVNdOwotCi0gICAgaWYg
KFtzZWxmIF9oYXNQYWdlUmVjdHNdKQotICAgICAgICAqcmFuZ2UgPSBOU01ha2VSYW5nZSgxLCBf
cHJpbnRpbmdQYWdlUmVjdHMuc2l6ZSgpKTsKLSAgICBlbHNlIGlmICghUnVuTG9vcDo6aXNNYWlu
KCkpIHsKLSAgICAgICAgQVNTRVJUKCFbc2VsZiBfaXNQcmludGluZ1ByZXZpZXddKTsKLSAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKF9wcmludGluZ0NhbGxiYWNrTXV0
ZXgpOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKHByZXBhcmVEYXRhRm9yUHJpbnRpbmdPblNl
Y29uZGFyeVRocmVhZCwgc2VsZik7Ci0gICAgICAgIF9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9u
LndhaXQobG9jayk7Ci0gICAgICAgICpyYW5nZSA9IE5TTWFrZVJhbmdlKDEsIF9wcmludGluZ1Bh
Z2VSZWN0cy5zaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChbc2VsZiBfaXNQ
cmludGluZ1ByZXZpZXddKTsKLQotICAgICAgICAvLyBJZiBhIHJlcXVlc3QgZm9yIHBhZ2VzIGhh
c24ndCBhbHJlYWR5IGJlZW4gbWFkZSwgbWFrZSBpdCBub3cuCi0gICAgICAgIGlmICghX2V4cGVj
dGVkQ29tcHV0ZWRQYWdlc0NhbGxiYWNrKQotICAgICAgICAgICAgW3NlbGYgX2Fza1BhZ2VUb0Nv
bXB1dGVQYWdlUmVjdHNdOwotCi0gICAgICAgICpyYW5nZSA9IE5TTWFrZVJhbmdlKDEsIE5TSW50
ZWdlck1heCk7Ci0gICAgfQotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKHVuc2lnbmVkKV9wYWdl
Rm9yUmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICAvLyBBc3N1bWluZyB0aGF0IHJlY3QgZXhhY3Rs
eSBtYXRjaGVzIG9uZSBvZiB0aGUgcGFnZXMuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBf
cHJpbnRpbmdQYWdlUmVjdHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSW50UmVjdCBjdXJyZW50
UmVjdChfcHJpbnRpbmdQYWdlUmVjdHNbaV0pOwotICAgICAgICBjdXJyZW50UmVjdC5zY2FsZShf
dG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nKTsKLSAgICAgICAgaWYgKHJlY3Qub3JpZ2luLnkg
PT0gY3VycmVudFJlY3QueSgpICYmIHJlY3Qub3JpZ2luLnggPT0gY3VycmVudFJlY3QueCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gMDsgLy8gSW52YWxpZCBwYWdlIG51bWJlci4KLX0KLQotLSAodm9pZClf
ZHJhd1BERkRvY3VtZW50OihQREZEb2N1bWVudCAqKXBkZkRvY3VtZW50IHBhZ2U6KHVuc2lnbmVk
KXBhZ2UgYXRQb2ludDooTlNQb2ludClwb2ludAotewotICAgIGlmICghcGRmRG9jdW1lbnQpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBjcmVhdGUgYSBQREYgZG9jdW1lbnQgd2l0aCBk
YXRhIHBhc3NlZCBmb3IgcHJldmlldyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
UERGUGFnZSAqcGRmUGFnZTsKLSAgICBAdHJ5IHsKLSAgICAgICAgcGRmUGFnZSA9IFtwZGZEb2N1
bWVudCBwYWdlQXRJbmRleDpwYWdlXTsKLSAgICB9IEBjYXRjaCAoaWQgZXhjZXB0aW9uKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiUHJldmlldyBkYXRhIGRvZXNuJ3QgaGF2ZSBwYWdlICVkOiAlQCIs
IHBhZ2UsIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU0dyYXBo
aWNzQ29udGV4dCAqbnNHcmFwaGljc0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVu
dENvbnRleHRdOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dDb250
ZXh0UmVmPihbbnNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NQb3J0XSk7Ci0KLSAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNvbnRleHQpOwotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0
LCBwb2ludC54LCBwb2ludC55KTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCBfdG90
YWxTY2FsZUZhY3RvckZvclByaW50aW5nLCAtX3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyk7
Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1bcGRmUGFnZSBib3VuZHNG
b3JCb3g6a1BERkRpc3BsYXlCb3hNZWRpYUJveF0uc2l6ZS5oZWlnaHQpOwotICAgIFtwZGZQYWdl
IGRyYXdXaXRoQm94OmtQREZEaXNwbGF5Qm94TWVkaWFCb3hdOwotCi0gICAgQ0dBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpOwotCi0gICAgZm9yIChQ
REZBbm5vdGF0aW9uICphbm5vdGF0aW9uIGluIFtwZGZQYWdlIGFubm90YXRpb25zXSkgewotICAg
ICAgICBpZiAoIVthbm5vdGF0aW9uIGlzS2luZE9mQ2xhc3M6cGRmQW5ub3RhdGlvbkxpbmtDbGFz
cygpXSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFBERkFubm90YXRpb25MaW5r
ICpsaW5rQW5ub3RhdGlvbiA9IChQREZBbm5vdGF0aW9uTGluayAqKWFubm90YXRpb247Ci0gICAg
ICAgIE5TVVJMICp1cmwgPSBbbGlua0Fubm90YXRpb24gVVJMXTsKLSAgICAgICAgaWYgKCF1cmwp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDR1JlY3QgdXJsUmVjdCA9IE5TUmVj
dFRvQ0dSZWN0KFtsaW5rQW5ub3RhdGlvbiBib3VuZHNdKTsKLSAgICAgICAgQ0dSZWN0IHRyYW5z
Zm9ybWVkUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHVybFJlY3QsIHRyYW5zZm9y
bSk7Ci0gICAgICAgIENHUERGQ29udGV4dFNldFVSTEZvclJlY3QoY29udGV4dCwgKENGVVJMUmVm
KXVybCwgdHJhbnNmb3JtZWRSZWN0KTsKLSAgICB9Ci0KLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOwotfQotCi0tICh2b2lkKV9kcmF3UHJldmlldzooTlNSZWN0KW5zUmVjdAot
ewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFBy
aW50aW5nUmVjdChuc1JlY3QpOwotICAgIHNjYWxlZFByaW50aW5nUmVjdC5zY2FsZSgxIC8gX3Rv
dGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyk7Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUobnNSZWN0
LnNpemUpOwotICAgIGltYWdlU2l6ZS5zY2FsZShfd2ViRnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpJbnRSZWN0LCBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPj46Oml0ZXJhdG9yIHBhZ2VQcmV2aWV3SXRlcmF0b3IgPSBfcGFnZVByZXZpZXdz
LmZpbmQoc2NhbGVkUHJpbnRpbmdSZWN0KTsKLSAgICBpZiAocGFnZVByZXZpZXdJdGVyYXRvciA9
PSBfcGFnZVByZXZpZXdzLmVuZCgpKSAgewotICAgICAgICAvLyBJdCdzIHRvbyBlYXJseSB0byBh
c2sgZm9yIHBhZ2UgcHJldmlldyBpZiB3ZSBkb24ndCBldmVuIGtub3cgcGFnZSBzaXplIGFuZCBz
Y2FsZS4KLSAgICAgICAgaWYgKFtzZWxmIF9oYXNQYWdlUmVjdHNdKSB7Ci0gICAgICAgICAgICBp
ZiAodWludDY0X3QgZXhpc3RpbmdDYWxsYmFjayA9IFtzZWxmIF9leHBlY3RlZFByZXZpZXdDYWxs
YmFja0ZvclJlY3Q6c2NhbGVkUHJpbnRpbmdSZWN0XSkgewotICAgICAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgYXNrZWQgZm9yIGEgcHJldmlldyBvZiB0aGlzIHBhZ2UsIGFuZCBhcmUgd2Fp
dGluZyBmb3IgcmVzcG9uc2UuCi0gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0
byBhc2sgYWdhaW4uCi0gICAgICAgICAgICAgICAgX2xhdGVzdEV4cGVjdGVkUHJldmlld0NhbGxi
YWNrID0gZXhpc3RpbmdDYWxsYmFjazsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgLy8gUHJldmlldyBpc24ndCBhdmFpbGFibGUgeWV0LCByZXF1ZXN0IGl0IGFzeW5jaHJv
bm91c2x5LgotICAgICAgICAgICAgICAgIGlmICghX3dlYkZyYW1lLT5wYWdlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIC8vIFJldHVybiB0byBwcmlu
dGluZyBtb2RlIGlmIHdlJ3JlIGFscmVhZHkgYmFjayB0byBzY3JlZW4gKGUuZy4gZHVlIHRvIHdp
bmRvdyByZXNpemluZykuCi0gICAgICAgICAgICAgICAgX3dlYkZyYW1lLT5wYWdlKCktPmJlZ2lu
UHJpbnRpbmcoX3dlYkZyYW1lLmdldCgpLCBQcmludEluZm8oW19wcmludE9wZXJhdGlvbiBwcmlu
dEluZm9dKSk7Ci0KLSAgICAgICAgICAgICAgICBJUENDYWxsYmFja0NvbnRleHQqIGNvbnRleHQg
PSBuZXcgSVBDQ2FsbGJhY2tDb250ZXh0OwotICAgICAgICAgICAgICAgIFJlZlB0cjxJbWFnZUNh
bGxiYWNrPiBjYWxsYmFjayA9IEltYWdlQ2FsbGJhY2s6OmNyZWF0ZShbY29udGV4dF0oYm9vbCwg
Y29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGltYWdlSGFuZGxlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIE93blB0cjxJUENDYWxsYmFja0NvbnRleHQ+IGNvbnRleHREZWxldGVyID0gYWRv
cHRQdHIoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIHBhZ2VEaWREcmF3VG9JbWFnZShp
bWFnZUhhbmRsZSwgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgX2xhdGVzdEV4cGVjdGVkUHJldmlld0NhbGxiYWNrID0gY2FsbGJhY2stPmNhbGxiYWNrSUQo
KTsKLSAgICAgICAgICAgICAgICBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLmFkZChfbGF0ZXN0
RXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2ssIHNjYWxlZFByaW50aW5nUmVjdCk7Ci0KLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT52aWV3ID0gc2VsZjsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5j
YWxsYmFja0lEID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKLQotICAgICAgICAgICAgICAgIF93
ZWJGcmFtZS0+cGFnZSgpLT5kcmF3UmVjdFRvSW1hZ2UoX3dlYkZyYW1lLmdldCgpLCBQcmludElu
Zm8oW19wcmludE9wZXJhdGlvbiBwcmludEluZm9dKSwgc2NhbGVkUHJpbnRpbmdSZWN0LCBpbWFn
ZVNpemUsIGNhbGxiYWNrLmdldCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGSVhNRTogRHJhdyBhIHBsYWNlaG9sZGVy
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBi
aXRtYXAgPSBwYWdlUHJldmlld0l0ZXJhdG9yLT52YWx1ZTsKLSAgICBDR0NvbnRleHRSZWYgY2dD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dDb250ZXh0UmVmPihbW05TR3JhcGhpY3NDb250ZXh0IGN1
cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KGNnQ29udGV4dCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGNvbnRleHQpOwotCi0gICAgYml0bWFwLT5wYWludChjb250ZXh0LCBfd2ViRnJhbWUtPnBhZ2Uo
KS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgSW50UG9pbnQobnNSZWN0Lm9yaWdpbiksIGJpdG1hcC0+
Ym91bmRzKCkpOwotfQotCi0tICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpbnNSZWN0Ci17Ci0gICAg
TE9HKFZpZXcsICJXS1ByaW50aW5nVmlldyAlcCBwcmludGluZyByZWN0IHg6JWcsIHk6JWcsIHdp
ZHRoOiVnLCBoZWlnaHQ6JWclcyIsIHNlbGYsIG5zUmVjdC5vcmlnaW4ueCwgbnNSZWN0Lm9yaWdp
bi55LCBuc1JlY3Quc2l6ZS53aWR0aCwgbnNSZWN0LnNpemUuaGVpZ2h0LCBbc2VsZiBfaXNQcmlu
dGluZ1ByZXZpZXddID8gIiBmb3IgcHJldmlldyIgOiAiIik7Ci0KLSAgICBBU1NFUlQoX3ByaW50
T3BlcmF0aW9uID09IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dKTsKLQotICAg
IGlmICghX3dlYkZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChbc2Vs
ZiBfaXNQcmludGluZ1ByZXZpZXddKSB7Ci0gICAgICAgIFtzZWxmIF9kcmF3UHJldmlldzpuc1Jl
Y3RdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgQVNTRVJUKCFfcHJpbnRlZFBhZ2VzRGF0YS5pc0VtcHR5KCkpOyAvLyBQcmVw
YXJlZCBieSBrbm93c1BhZ2VSYW5nZToKLQotICAgIGlmICghX3ByaW50ZWRQYWdlc1BERkRvY3Vt
ZW50KSB7Ci0gICAgICAgIFJldGFpblB0cjxOU0RhdGE+IHBkZkRhdGEgPSBhZG9wdE5TKFtbTlNE
YXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOl9wcmludGVkUGFnZXNEYXRhLmRhdGEoKSBsZW5ndGg6
X3ByaW50ZWRQYWdlc0RhdGEuc2l6ZSgpXSk7Ci0gICAgICAgIF9wcmludGVkUGFnZXNQREZEb2N1
bWVudCA9IGFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0YTpw
ZGZEYXRhLmdldCgpXSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgcHJpbnRlZFBhZ2VOdW1iZXIg
PSBbc2VsZiBfcGFnZUZvclJlY3Q6bnNSZWN0XSAtIFtzZWxmIF9maXJzdFByaW50ZWRQYWdlTnVt
YmVyXTsKLSAgICBbc2VsZiBfZHJhd1BERkRvY3VtZW50Ol9wcmludGVkUGFnZXNQREZEb2N1bWVu
dC5nZXQoKSBwYWdlOnByaW50ZWRQYWdlTnVtYmVyIGF0UG9pbnQ6TlNNYWtlUG9pbnQobnNSZWN0
Lm9yaWdpbi54LCBuc1JlY3Qub3JpZ2luLnkpXTsKLX0KLQotLSAodm9pZClfZHJhd1BhZ2VCb3Jk
ZXJXaXRoU2l6ZU9uTWFpblRocmVhZDooTlNTaXplKWJvcmRlclNpemUKLXsKLSAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgLy8gV2hlbiBwcmludGluZyBmcm9tIGEgc2Vjb25k
YXJ5IHRocmVhZCwgdGhlIG1haW4gdGhyZWFkIGRvZXNuJ3QgaGF2ZSBncmFwaGljcyBjb250ZXh0
IGFuZCBwcmludGluZyBvcGVyYXRpb24gc2V0IHVwLgotICAgIE5TR3JhcGhpY3NDb250ZXh0ICpj
dXJyZW50Q29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07Ci0gICAg
W05TR3JhcGhpY3NDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OltfcHJpbnRPcGVyYXRpb24gY29u
dGV4dF1dOwotCi0gICAgQVNTRVJUKCFbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9u
XSk7Ci0gICAgW05TUHJpbnRPcGVyYXRpb24gc2V0Q3VycmVudE9wZXJhdGlvbjpfcHJpbnRPcGVy
YXRpb25dOwotCi0gICAgW3NlbGYgZHJhd1BhZ2VCb3JkZXJXaXRoU2l6ZTpib3JkZXJTaXplXTsK
LQotICAgIFtOU1ByaW50T3BlcmF0aW9uIHNldEN1cnJlbnRPcGVyYXRpb246bmlsXTsKLSAgICBb
TlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6Y3VycmVudENvbnRleHRdOwotfQot
Ci0tICh2b2lkKWRyYXdQYWdlQm9yZGVyV2l0aFNpemU6KE5TU2l6ZSlib3JkZXJTaXplCi17Ci0g
ICAgQVNTRVJUKE5TRXF1YWxTaXplcyhib3JkZXJTaXplLCBbW19wcmludE9wZXJhdGlvbiBwcmlu
dEluZm9dIHBhcGVyU2l6ZV0pKTsgICAgCi0gICAgQVNTRVJUKF9wcmludE9wZXJhdGlvbiA9PSBb
TlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSk7Ci0KLSAgICBpZiAoIVJ1bkxvb3A6
OmlzTWFpbigpKSB7Ci0gICAgICAgIC8vIERvbid0IGNhbGwgdGhlIGNsaWVudCBmcm9tIGEgc2Vj
b25kYXJ5IHRocmVhZC4KLSAgICAgICAgTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uID0gW05TSW52
b2NhdGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpbV0tQcmludGluZ1ZpZXcgaW5z
dGFuY2VNZXRob2RTaWduYXR1cmVGb3JTZWxlY3RvcjpAc2VsZWN0b3IoX2RyYXdQYWdlQm9yZGVy
V2l0aFNpemVPbk1haW5UaHJlYWQ6KV1dOwotICAgICAgICBbaW52b2NhdGlvbiBzZXRTZWxlY3Rv
cjpAc2VsZWN0b3IoX2RyYXdQYWdlQm9yZGVyV2l0aFNpemVPbk1haW5UaHJlYWQ6KV07Ci0gICAg
ICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZib3JkZXJTaXplIGF0SW5kZXg6Ml07Ci0gICAg
ICAgIFtpbnZvY2F0aW9uIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpAc2VsZWN0b3IoaW52
b2tlV2l0aFRhcmdldDopIHdpdGhPYmplY3Q6c2VsZiB3YWl0VW50aWxEb25lOllFU107Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIV93ZWJGcmFtZS0+cGFnZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBUaGUgaGVhZGVyIGFuZCBmb290ZXIgcmVjdCBoZWlnaHQgc2Nh
bGVzIHdpdGggdGhlIHBhZ2UsIGJ1dCB0aGUgd2lkdGggaXMgYWx3YXlzCi0gICAgLy8gYWxsIHRo
ZSB3YXkgYWNyb3NzIHRoZSBwcmludGVkIHBhZ2UgKGluc2V0IGJ5IHByaW50aW5nIG1hcmdpbnMp
LgotICAgIE5TUHJpbnRJbmZvICpwcmludEluZm8gPSBbX3ByaW50T3BlcmF0aW9uIHByaW50SW5m
b107Ci0gICAgQ0dGbG9hdCBzY2FsZSA9IFtwcmludEluZm8gc2NhbGluZ0ZhY3Rvcl07Ci0gICAg
TlNTaXplIHBhcGVyU2l6ZSA9IFtwcmludEluZm8gcGFwZXJTaXplXTsKLSAgICBDR0Zsb2F0IGhl
YWRlckZvb3RlckxlZnQgPSBbcHJpbnRJbmZvIGxlZnRNYXJnaW5dIC8gc2NhbGU7Ci0gICAgQ0dG
bG9hdCBoZWFkZXJGb290ZXJXaWR0aCA9IChwYXBlclNpemUud2lkdGggLSAoW3ByaW50SW5mbyBs
ZWZ0TWFyZ2luXSArIFtwcmludEluZm8gcmlnaHRNYXJnaW5dKSkgLyBzY2FsZTsKLSAgICBOU1Jl
Y3QgZm9vdGVyUmVjdCA9IE5TTWFrZVJlY3QoaGVhZGVyRm9vdGVyTGVmdCwgW3ByaW50SW5mbyBi
b3R0b21NYXJnaW5dIC8gc2NhbGUgLSBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KF93
ZWJGcmFtZS5nZXQoKSksIGhlYWRlckZvb3RlcldpZHRoLCBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9v
dGVySGVpZ2h0KF93ZWJGcmFtZS5nZXQoKSkpOwotICAgIE5TUmVjdCBoZWFkZXJSZWN0ID0gTlNN
YWtlUmVjdChoZWFkZXJGb290ZXJMZWZ0LCAocGFwZXJTaXplLmhlaWdodCAtIFtwcmludEluZm8g
dG9wTWFyZ2luXSkgLyBzY2FsZSwgaGVhZGVyRm9vdGVyV2lkdGgsIF93ZWJGcmFtZS0+cGFnZSgp
LT5oZWFkZXJIZWlnaHQoX3dlYkZyYW1lLmdldCgpKSk7Ci0KLSAgICBOU0dyYXBoaWNzQ29udGV4
dCAqY3VycmVudENvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOwot
ICAgIFtjdXJyZW50Q29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07Ci0gICAgTlNSZWN0Q2xpcCho
ZWFkZXJSZWN0KTsKLSAgICBfd2ViRnJhbWUtPnBhZ2UoKS0+ZHJhd0hlYWRlcihfd2ViRnJhbWUu
Z2V0KCksIGhlYWRlclJlY3QpOwotICAgIFtjdXJyZW50Q29udGV4dCByZXN0b3JlR3JhcGhpY3NT
dGF0ZV07Ci0KLSAgICBbY3VycmVudENvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwotICAgIE5T
UmVjdENsaXAoZm9vdGVyUmVjdCk7Ci0gICAgX3dlYkZyYW1lLT5wYWdlKCktPmRyYXdGb290ZXIo
X3dlYkZyYW1lLmdldCgpLCBmb290ZXJSZWN0KTsKLSAgICBbY3VycmVudENvbnRleHQgcmVzdG9y
ZUdyYXBoaWNzU3RhdGVdOwotfQotCi0tIChOU1JlY3QpcmVjdEZvclBhZ2U6KE5TSW50ZWdlcilw
YWdlCi17Ci0gICAgQVNTRVJUKF9wcmludE9wZXJhdGlvbiA9PSBbTlNQcmludE9wZXJhdGlvbiBj
dXJyZW50T3BlcmF0aW9uXSk7Ci0gICAgaWYgKCFbc2VsZiBfaGFzUGFnZVJlY3RzXSkgewotICAg
ICAgICBMT0coVmlldywgIi1bV0tQcmludGluZ1ZpZXcgJXAgcmVjdEZvclBhZ2U6JWRdIC0gZGF0
YSBpcyBub3QgeWV0IGF2YWlsYWJsZSIsIHNlbGYsIChpbnQpcGFnZSk7Ci0gICAgICAgIGlmICgh
X3dlYkZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAgICAgIC8vIFdlIG1heSBoYXZlIG5vdCB0b2xk
IEFwcEtpdCBob3cgbWFueSBwYWdlcyB0aGVyZSBhcmUsIHNvIGl0IHdpbGwgdHJ5IHRvIHByaW50
IHVudGlsIGEgbnVsbCByZWN0IGlzIHJldHVybmVkLgotICAgICAgICAgICAgcmV0dXJuIE5TTWFr
ZVJlY3QoMCwgMCwgMCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgbXVzdCBiZSBzdGls
bCBjYWxjdWxhdGluZyB0aGUgcGFnZSByYW5nZS4KLSAgICAgICAgQVNTRVJUKF9leHBlY3RlZENv
bXB1dGVkUGFnZXNDYWxsYmFjayk7Ci0gICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDEs
IDEpOwotICAgIH0KLQotICAgIC8vIElmIFdlYiBwcm9jZXNzIGNyYXNoZXMgd2hpbGUgY29tcHV0
aW5nIHBhZ2UgcmVjdHMsIHdlIG5ldmVyIHRlbGwgQXBwS2l0IGhvdyBtYW55IHBhZ2VzIHRoZXJl
IGFyZS4KLSAgICAvLyBSZXR1cm5pbmcgYSBudWxsIHJlY3QgcHJldmVudHMgc2VsZWN0aW5nIG5v
bi1leGlzdGVudCBwYWdlcyBpbiBwcmV2aWV3IGRpYWxvZy4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHBhZ2UpID4gX3ByaW50aW5nUGFnZVJlY3RzLnNpemUoKSkgewotICAgICAgICBB
U1NFUlQoIV93ZWJGcmFtZS0+cGFnZSgpKTsKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwg
MCwgMCwgMCk7Ci0gICAgfQotCi0gICAgSW50UmVjdCByZWN0ID0gX3ByaW50aW5nUGFnZVJlY3Rz
W3BhZ2UgLSAxXTsKLSAgICByZWN0LnNjYWxlKF90b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcp
OwotICAgIExPRyhWaWV3LCAiLVtXS1ByaW50aW5nVmlldyAlcCByZWN0Rm9yUGFnZTolZF0gLT4g
eCAlZCwgeSAlZCwgd2lkdGggJWQsIGhlaWdodCAlZCIsIHNlbGYsIChpbnQpcGFnZSwgcmVjdC54
KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIHJldHVybiBy
ZWN0OwotfQotCi0vLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzg5
NDQ1MzU+LiBGb3JjZSBjb3JyZWN0IHByaW50b3V0IHBvc2l0aW9uaW5nLgotLSAoTlNQb2ludCls
b2NhdGlvbk9mUHJpbnRSZWN0OihOU1JlY3QpYVJlY3QKLXsKLSAgICBBU1NFUlQoX3ByaW50T3Bl
cmF0aW9uID09IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dKTsKLSAgICByZXR1
cm4gTlNNYWtlUG9pbnQoW1tfcHJpbnRPcGVyYXRpb24gcHJpbnRJbmZvXSBsZWZ0TWFyZ2luXSwg
W1tfcHJpbnRPcGVyYXRpb24gcHJpbnRJbmZvXSBib3R0b21NYXJnaW5dKTsKLX0KLQotLSAodm9p
ZCliZWdpbkRvY3VtZW50Ci17Ci0gICAgQVNTRVJUKF9wcmludE9wZXJhdGlvbiA9PSBbTlNQcmlu
dE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSk7Ci0KLSAgICAvLyBGb3JjaW5nIHByZXZpZXcg
dXBkYXRlIGdldHMgdXMgaGVyZSwgYnV0IHBhZ2Ugc2V0dXAgaGFzbid0IGFjdHVhbGx5IGNoYW5n
ZWQuCi0gICAgaWYgKGlzRm9yY2luZ1ByZXZpZXdVcGRhdGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIExPRyhWaWV3LCAiLVtXS1ByaW50aW5nVmlldyAlcCBiZWdpbkRvY3VtZW50XSIsIHNlbGYp
OwotCi0gICAgW3N1cGVyIGJlZ2luRG9jdW1lbnRdOwotCi0gICAgW3NlbGYgX3N1c3BlbmRBdXRv
ZGlzcGxheV07Ci19Ci0KLS0gKHZvaWQpZW5kRG9jdW1lbnQKLXsKLSAgICBBU1NFUlQoX3ByaW50
T3BlcmF0aW9uID09IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dKTsKLQotICAg
IC8vIEZvcmNpbmcgcHJldmlldyB1cGRhdGUgZ2V0cyB1cyBoZXJlLCBidXQgcGFnZSBzZXR1cCBo
YXNuJ3QgYWN0dWFsbHkgY2hhbmdlZC4KLSAgICBpZiAoaXNGb3JjaW5nUHJldmlld1VwZGF0ZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HKFZpZXcsICItW1dLUHJpbnRpbmdWaWV3ICVwIGVu
ZERvY3VtZW50XSAtIGNsZWFyaW5nIGNhY2hlZCBkYXRhIiwgc2VsZik7Ci0KLSAgICAvLyBCb3Ro
IGV4aXN0aW5nIGRhdGEgYW5kIHBlbmRpbmcgcmVzcG9uc2VzIGFyZSBub3cgb2Jzb2xldGUuCi0g
ICAgX3ByaW50aW5nUGFnZVJlY3RzLmNsZWFyKCk7Ci0gICAgX3RvdGFsU2NhbGVGYWN0b3JGb3JQ
cmludGluZyA9IDE7Ci0gICAgX3BhZ2VQcmV2aWV3cy5jbGVhcigpOwotICAgIF9wcmludGVkUGFn
ZXNEYXRhLmNsZWFyKCk7Ci0gICAgX3ByaW50ZWRQYWdlc1BERkRvY3VtZW50ID0gbnVsbHB0cjsK
LSAgICBfZXhwZWN0ZWRDb21wdXRlZFBhZ2VzQ2FsbGJhY2sgPSAwOwotICAgIF9leHBlY3RlZFBy
ZXZpZXdDYWxsYmFja3MuY2xlYXIoKTsKLSAgICBfbGF0ZXN0RXhwZWN0ZWRQcmV2aWV3Q2FsbGJh
Y2sgPSAwOwotICAgIF9leHBlY3RlZFByaW50Q2FsbGJhY2sgPSAwOwotCi0gICAgW3NlbGYgX2Rl
bGF5ZWRSZXN1bWVBdXRvZGlzcGxheV07Ci0gICAgCi0gICAgW3N1cGVyIGVuZERvY3VtZW50XTsK
LX0KLUBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dL
VGV4dElucHV0V2luZG93Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQyOGJlYWNhMjJjYWQzOTkyY2RiOTUzYzE2YzA0OTJhMDNkMTc5NTIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyX2gK
LSNkZWZpbmUgV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyX2gKLQotI2lmIFVTRShBUFBLSVQp
Ci0KLUBjbGFzcyBXS1RleHRJbnB1dFBhbmVsOwotCi1AaW50ZXJmYWNlIFdLVGV4dElucHV0V2lu
ZG93Q29udHJvbGxlciA6IE5TT2JqZWN0IHsKLSAgICBXS1RleHRJbnB1dFBhbmVsICpfcGFuZWw7
Ci19Ci0KLSsgKFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlciAqKXNoYXJlZFRleHRJbnB1dFdp
bmRvd0NvbnRyb2xsZXI7Ci0KLS0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dDsK
LS0gKEJPT0wpaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCB1c2luZ0xlZ2FjeUNv
Y29hVGV4dElucHV0OihCT09MKXVzaW5nTGVnYWN5Q29jb2FUZXh0SW5wdXQgc3RyaW5nOihOU1N0
cmluZyAqKilzdHJpbmc7Ci0KLS0gKEJPT0wpaGFzTWFya2VkVGV4dDsKLS0gKHZvaWQpdW5tYXJr
VGV4dDsKLQotQGVuZAotCi0jZW5kaWYgLy8gVVNFKEFQUEtJVCkKLQotI2VuZGlmIC8vIFdLVGV4
dElucHV0V2luZG93Q29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9XS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMTEyMTQ3NzFjNDM3NDg1ZTk5NWQ5OWVkZWYz
MGViNTZkOWU4ZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tUZXh0SW5wdXRXaW5kb3dDb250
cm9sbGVyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5o
IgotCi0jaWYgVVNFKEFQUEtJVCkKLQotI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+
Ci0KLUBpbnRlcmZhY2UgV0tUZXh0SW5wdXRWaWV3IDogTlNUZXh0VmlldyB7Ci19Ci1AZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBXS1RleHRJbnB1dFZpZXcKLQotLSAoTlNBcnJheSAqKXZhbGlkQXR0
cmlidXRlc0Zvck1hcmtlZFRleHQKLXsKLSAgICAvLyBMZXQgVFNNIGtub3cgdGhhdCBhIGJvdHRv
bSBpbnB1dCB3aW5kb3cgd291bGQgYmUgY3JlYXRlZCBmb3IgbWFya2VkIHRleHQuCi0gICAgTlNB
cnJheSAqcmVndWxhckF0dHJpYnV0ZXMgPSBbc3VwZXIgdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2Vk
VGV4dF07Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmZsb2F0aW5nV2luZG93QXR0cmlidXRlcyA9IFtO
U011dGFibGVBcnJheSBhcnJheVdpdGhBcnJheTpyZWd1bGFyQXR0cmlidXRlc107Ci0gICAgW2Zs
b2F0aW5nV2luZG93QXR0cmlidXRlcyBhZGRPYmplY3Q6QCJfX05TVXNlc0Zsb2F0aW5nSW5wdXRX
aW5kb3ciXTsKLSAgICByZXR1cm4gZmxvYXRpbmdXaW5kb3dBdHRyaWJ1dGVzOwotfQotCi1AZW5k
Ci0KLUBpbnRlcmZhY2UgV0tUZXh0SW5wdXRQYW5lbCA6IE5TUGFuZWwgewotICAgIE5TVGV4dFZp
ZXcgKl9pbnB1dFRleHRWaWV3OwotfQotCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilfaW5wdXRD
b250ZXh0OwotLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCB1c2lu
Z0xlZ2FjeUNvY29hVGV4dElucHV0OihCT09MKXVzaW5nTGVnYWN5Q29jb2FUZXh0SW5wdXQgc3Ry
aW5nOihOU1N0cmluZyAqKilzdHJpbmc7Ci0KLS0gKEJPT0wpX2hhc01hcmtlZFRleHQ7Ci0tICh2
b2lkKV91bm1hcmtUZXh0OwotCi1AZW5kCi0KLSNkZWZpbmUgaW5wdXRXaW5kb3dIZWlnaHQgMjAK
LQotQGltcGxlbWVudGF0aW9uIFdLVGV4dElucHV0UGFuZWwKLQotLSAodm9pZClkZWFsbG9jCi17
Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZl
cjpzZWxmXTsKLSAgICAKLSAgICBbX2lucHV0VGV4dFZpZXcgcmVsZWFzZV07Ci0gICAgCi0gICAg
W3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpZClpbml0Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBp
bml0V2l0aENvbnRlbnRSZWN0Ok5TWmVyb1JlY3Qgc3R5bGVNYXNrOldLR2V0SW5wdXRQYW5lbFdp
bmRvd1N0eWxlKCkgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOllFU107Ci0g
ICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIC8vIFNldCB0aGUg
ZnJhbWUgc2l6ZS4KLSAgICBOU1JlY3QgdmlzaWJsZUZyYW1lID0gW1tOU1NjcmVlbiBtYWluU2Ny
ZWVuXSB2aXNpYmxlRnJhbWVdOwotICAgIE5TUmVjdCBmcmFtZSA9IE5TTWFrZVJlY3QodmlzaWJs
ZUZyYW1lLm9yaWdpbi54LCB2aXNpYmxlRnJhbWUub3JpZ2luLnksIHZpc2libGVGcmFtZS5zaXpl
LndpZHRoLCBpbnB1dFdpbmRvd0hlaWdodCk7Ci0gICAgIAotICAgIFtzZWxmIHNldEZyYW1lOmZy
YW1lIGRpc3BsYXk6Tk9dOwotICAgICAgICAKLSAgICBfaW5wdXRUZXh0VmlldyA9IFtbV0tUZXh0
SW5wdXRWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOlsoTlNWaWV3ICopc2VsZi5jb250ZW50Vmll
dyBmcmFtZV1dOwotICAgIF9pbnB1dFRleHRWaWV3LmF1dG9yZXNpemluZ01hc2sgPSBOU1ZpZXdX
aWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlIHwgTlNWaWV3TWF4WE1hcmdpbiB8IE5T
Vmlld01pblhNYXJnaW4gfCBOU1ZpZXdNYXhZTWFyZ2luIHwgTlNWaWV3TWluWU1hcmdpbjsKLSAg
ICAgICAgCi0gICAgTlNTY3JvbGxWaWV3KiBzY3JvbGxWaWV3ID0gW1tOU1Njcm9sbFZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6WyhOU1ZpZXcgKilzZWxmLmNvbnRlbnRWaWV3IGZyYW1lXV07Ci0g
ICAgc2Nyb2xsVmlldy5kb2N1bWVudFZpZXcgPSBfaW5wdXRUZXh0VmlldzsKLSAgICBzZWxmLmNv
bnRlbnRWaWV3ID0gc2Nyb2xsVmlldzsKLSAgICBbc2Nyb2xsVmlldyByZWxlYXNlXTsKLSAgICAg
ICAgCi0gICAgW3NlbGYgc2V0RmxvYXRpbmdQYW5lbDpZRVNdOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpX3VubWFya1RleHQKLXsKLSAgICBbX2lucHV0VGV4dFZpZXcgc2V0U3Ry
aW5nOkAiIl07Ci0gICAgW3NlbGYgb3JkZXJPdXQ6bmlsXTsKLX0KLQotLSAoQk9PTClfaW50ZXJw
cmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCB1c2luZ0xlZ2FjeUNvY29hVGV4dElucHV0OihC
T09MKXVzaW5nTGVnYWN5Q29jb2FUZXh0SW5wdXQgc3RyaW5nOihOU1N0cmluZyAqKilzdHJpbmcK
LXsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICBCT09MIGhhZE1hcmtl
ZFRleHQgPSBbX2lucHV0VGV4dFZpZXcgaGFzTWFya2VkVGV4dF07Ci0jcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcG9wCi0gCi0gICAgKnN0cmluZyA9IG5pbDsKLQotICAgIC8vIExldCBUU00ga25v
dyB0aGF0IGEgYm90dG9tIGlucHV0IHdpbmRvdyB3b3VsZCBiZSBjcmVhdGVkIGZvciBtYXJrZWQg
dGV4dC4KLSAgICAvLyBGSVhNRTogQ2FuIGJlIHJlbW92ZWQgb25jZSB3ZSBjYW4gcmVseSBvbiBf
X05TVXNlc0Zsb2F0aW5nSW5wdXRXaW5kb3cgKG9yIGEgYmV0dGVyIEFQSSkgYmVpbmcgYXZhaWxh
YmxlIGV2ZXJ5d2hlcmUuCi0gICAgRXZlbnRSZWYgY2FyYm9uRXZlbnQgPSBzdGF0aWNfY2FzdDxF
dmVudFJlZj4oY29uc3RfY2FzdDx2b2lkKj4oW2V2ZW50IGV2ZW50UmVmXSkpOwotICAgIGlmIChj
YXJib25FdmVudCkgewotICAgICAgICBCb29sZWFuIGlnbm9yZVBBSCA9IHRydWU7Ci0gICAgICAg
IFNldEV2ZW50UGFyYW1ldGVyKGNhcmJvbkV2ZW50LCAnaVBBSCcsIHR5cGVCb29sZWFuLCBzaXpl
b2YoaWdub3JlUEFIKSwgJmlnbm9yZVBBSCk7Ci0gICAgfQotCi0gICAgaWYgKCFbW19pbnB1dFRl
eHRWaWV3IGlucHV0Q29udGV4dF0gaGFuZGxlRXZlbnQ6ZXZlbnRdKQotICAgICAgICByZXR1cm4g
Tk87Ci0gICAgCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgaWYgKFtf
aW5wdXRUZXh0VmlldyBoYXNNYXJrZWRUZXh0XSkgewotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHBvcAotICAgICAgICAvLyBEb24ndCBzaG93IHRoZSBpbnB1dCBtZXRob2Qgd2luZG93IGZvciBk
ZWFkIGtleXMKLSAgICAgICAgaWYgKFtbZXZlbnQgY2hhcmFjdGVyc10gbGVuZ3RoXSA+IDApCi0g
ICAgICAgICAgICBbc2VsZiBvcmRlckZyb250Om5pbF07Ci0KLSAgICAgICAgcmV0dXJuIFlFUzsK
LSAgICB9Ci0KLSAgICBib29sIHNob3VsZFJldHVyblRleHRTdHJpbmcgPSBoYWRNYXJrZWRUZXh0
OwotCi0gICAgLy8gSW4gdGhlIHVwZGF0ZWQgQ29jb2EgdGV4dCBpbnB1dCBtb2RlbCBzcGVjLCB3
ZSBhbHdheXMgd2FudCB0byByZXR1cm4gdGhlIHRleHQgZXZlbiBpZiB0aGUgdGV4dCB2aWV3IGRp
ZG4ndCBoYXZlIG1hcmtlZCB0ZXh0LgotICAgIGlmICghdXNpbmdMZWdhY3lDb2NvYVRleHRJbnB1
dCkKLSAgICAgICAgc2hvdWxkUmV0dXJuVGV4dFN0cmluZyA9IHRydWU7Ci0KLSAgICBpZiAoc2hv
dWxkUmV0dXJuVGV4dFN0cmluZykgewotICAgICAgICBbc2VsZiBvcmRlck91dDpuaWxdOwotCi0g
ICAgICAgIE5TU3RyaW5nICp0ZXh0ID0gW1tfaW5wdXRUZXh0VmlldyB0ZXh0U3RvcmFnZV0gc3Ry
aW5nXTsKLSAgICAgICAgaWYgKFt0ZXh0IGxlbmd0aF0gPiAwKQotICAgICAgICAgICAgKnN0cmlu
ZyA9IFtbdGV4dCBjb3B5XSBhdXRvcmVsZWFzZV07Ci0gICAgfQotICAgICAgICAgICAgCi0gICAg
W19pbnB1dFRleHRWaWV3IHNldFN0cmluZzpAIiJdOwotICAgIHJldHVybiBoYWRNYXJrZWRUZXh0
OwotfQotCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilfaW5wdXRDb250ZXh0Ci17Ci0gICAgcmV0
dXJuIFtfaW5wdXRUZXh0VmlldyBpbnB1dENvbnRleHRdOwotfQotCi0tIChCT09MKV9oYXNNYXJr
ZWRUZXh0Ci17Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgcmV0dXJu
IFtfaW5wdXRUZXh0VmlldyBoYXNNYXJrZWRUZXh0XTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwb3AKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tUZXh0SW5wdXRXaW5kb3dDb250
cm9sbGVyCi0KLSsgKFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlciAqKXNoYXJlZFRleHRJbnB1
dFdpbmRvd0NvbnRyb2xsZXIKLXsKLSAgICBzdGF0aWMgV0tUZXh0SW5wdXRXaW5kb3dDb250cm9s
bGVyICp0ZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyOwotICAgIGlmICghdGV4dElucHV0V2luZG93
Q29udHJvbGxlcikKLSAgICAgICAgdGV4dElucHV0V2luZG93Q29udHJvbGxlciA9IFtbV0tUZXh0
SW5wdXRXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0XTsKLSAgICAKLSAgICByZXR1cm4gdGV4
dElucHV0V2luZG93Q29udHJvbGxlcjsKLX0KLQotLSAoaWQpaW5pdAotewotICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAot
ICAgIF9wYW5lbCA9IFtbV0tUZXh0SW5wdXRQYW5lbCBhbGxvY10gaW5pdF07Ci0gICAgCi0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dAot
ewotICAgIHJldHVybiBbX3BhbmVsIF9pbnB1dENvbnRleHRdOwotfQotCi0tIChCT09MKWhhc01h
cmtlZFRleHQKLXsKLSAgICByZXR1cm4gW19wYW5lbCBfaGFzTWFya2VkVGV4dF07Ci19Ci0KLS0g
KEJPT0wpaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudCB1c2luZ0xlZ2FjeUNvY29h
VGV4dElucHV0OihCT09MKXVzaW5nTGVnYWN5Q29jb2FUZXh0SW5wdXQgc3RyaW5nOihOU1N0cmlu
ZyAqKilzdHJpbmcKLXsKLSAgICByZXR1cm4gW19wYW5lbCBfaW50ZXJwcmV0S2V5RXZlbnQ6ZXZl
bnQgdXNpbmdMZWdhY3lDb2NvYVRleHRJbnB1dDp1c2luZ0xlZ2FjeUNvY29hVGV4dElucHV0IHN0
cmluZzpzdHJpbmddOwotfQotCi0tICh2b2lkKXVubWFya1RleHQKLXsKLSAgICBbX3BhbmVsIF91
bm1hcmtUZXh0XTsKLX0KLQotQGVuZAotCi0jZW5kaWYgLy8gVVNFKEFQUEtJVCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvRmluZEluZGljYXRvcldpbmRvdy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9GaW5kSW5kaWNhdG9yV2luZG93LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjg2NGI2NDliZjAxMTljMzBmNzA1MDkxZjQwNzJjOTIyNjA2ZGE3YQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvRmluZEluZGljYXRvcldpbmRv
dy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpbmRJbmRpY2F0b3JX
aW5kb3dfaAorI2RlZmluZSBGaW5kSW5kaWNhdG9yV2luZG93X2gKKworI2ltcG9ydCAiV2ViS2l0
U3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbXBvcnQg
PHd0Zi9SZWZQdHIuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9S
dW5Mb29wLmg+CisKK0BjbGFzcyBXS0ZpbmRJbmRpY2F0b3JXaW5kb3dBbmltYXRpb247CitAY2xh
c3MgV0tWaWV3OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRmluZEluZGljYXRvcjsK
KworY2xhc3MgRmluZEluZGljYXRvcldpbmRvdyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
RmluZEluZGljYXRvcldpbmRvdyk7CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBGaW5kSW5kaWNh
dG9yV2luZG93KFdLVmlldyAqKTsKKyAgICB+RmluZEluZGljYXRvcldpbmRvdygpOworCisgICAg
dm9pZCBzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFk
ZU91dCwgYm9vbCBhbmltYXRlKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNsb3NlV2luZG93KCk7
CisKKyAgICB2b2lkIHN0YXJ0RmFkZU91dFRpbWVyRmlyZWQoKTsKKworICAgIHZvaWQgZmFkZU91
dEFuaW1hdGlvbkNhbGxiYWNrKGRvdWJsZSk7CisgICAgdm9pZCBmYWRlT3V0QW5pbWF0aW9uRGlk
RW5kKCk7CisKKyAgICB2b2lkIGJvdW5jZUFuaW1hdGlvbkNhbGxiYWNrKGRvdWJsZSk7CisgICAg
dm9pZCBib3VuY2VBbmltYXRpb25EaWRFbmQoKTsKKworICAgIFdLVmlldyogbV93a1ZpZXc7Cisg
ICAgUmVmUHRyPEZpbmRJbmRpY2F0b3I+IG1fZmluZEluZGljYXRvcjsKKyAgICBSZXRhaW5QdHI8
TlNXaW5kb3c+IG1fZmluZEluZGljYXRvcldpbmRvdzsKKworICAgIFdLV2luZG93Qm91bmNlQW5p
bWF0aW9uQ29udGV4dFJlZiBtX2JvdW5jZUFuaW1hdGlvbkNvbnRleHQ7CisgICAgUmV0YWluUHRy
PFdLRmluZEluZGljYXRvcldpbmRvd0FuaW1hdGlvbj4gbV9ib3VuY2VBbmltYXRpb247CisKKyAg
ICBSdW5Mb29wOjpUaW1lcjxGaW5kSW5kaWNhdG9yV2luZG93PiBtX3N0YXJ0RmFkZU91dFRpbWVy
OworICAgIFJldGFpblB0cjxXS0ZpbmRJbmRpY2F0b3JXaW5kb3dBbmltYXRpb24+IG1fZmFkZU91
dEFuaW1hdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRmlu
ZEluZGljYXRvcldpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL0ZpbmRJbmRpY2F0b3JXaW5kb3cubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L0ZpbmRJbmRpY2F0b3JXaW5kb3cubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjA5OTVkMzk1ZDNjYmY3M2FhYWVm
OWYxNDQ5NjQ0ZTRjNTc2MGRkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvRmluZEluZGljYXRvcldpbmRvdy5tbQpAQCAtMCwwICsxLDI0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmluZEluZGljYXRvcldpbmRv
dy5oIgorCisjaW1wb3J0ICJGaW5kSW5kaWNhdG9yLmgiCisjaW1wb3J0ICJXS1ZpZXcuaCIKKyNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisKK3N0YXRpYyBjb25zdCBkb3VibGUg
Ym91bmNlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjEyOworc3RhdGljIGNvbnN0IGRvdWJsZSB0aW1l
QmVmb3JlRmFkZVN0YXJ0cyA9IGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uICsgMC4yOworc3RhdGlj
IGNvbnN0IGRvdWJsZSBmYWRlT3V0QW5pbWF0aW9uRHVyYXRpb24gPSAwLjM7CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitAaW50ZXJmYWNlIFdLRmluZEluZGljYXRvclZpZXcgOiBOU1Zp
ZXcgeworICAgIFJlZlB0cjxXZWJLaXQ6OkZpbmRJbmRpY2F0b3I+IF9maW5kSW5kaWNhdG9yOwor
fQorCistIChpZClfaW5pdFdpdGhGaW5kSW5kaWNhdG9yOihQYXNzUmVmUHRyPFdlYktpdDo6Rmlu
ZEluZGljYXRvcj4pZmluZEluZGljYXRvcjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLRmlu
ZEluZGljYXRvclZpZXcKKworLSAoaWQpX2luaXRXaXRoRmluZEluZGljYXRvcjooUGFzc1JlZlB0
cjxXZWJLaXQ6OkZpbmRJbmRpY2F0b3I+KWZpbmRJbmRpY2F0b3IKK3sKKyAgICBpZiAoKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0XSkpCisgICAgICAgIF9maW5kSW5kaWNh
dG9yID0gZmluZEluZGljYXRvcjsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRy
YXdSZWN0OihOU1JlY3QpcmVjdAoreworICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRl
eHQoc3RhdGljX2Nhc3Q8Q0dDb250ZXh0UmVmPihbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0XSBncmFwaGljc1BvcnRdKSk7CisKKyAgICBfZmluZEluZGljYXRvci0+ZHJhdyhncmFw
aGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOworfQorCistIChCT09MKWlzRmxp
cHBlZAoreworICAgIHJldHVybiBZRVM7Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXS0ZpbmRJ
bmRpY2F0b3JXaW5kb3dBbmltYXRpb24gOiBOU0FuaW1hdGlvbjxOU0FuaW1hdGlvbkRlbGVnYXRl
PiB7CisgICAgV2ViS2l0OjpGaW5kSW5kaWNhdG9yV2luZG93KiBfZmluZEluZGljYXRvcldpbmRv
dzsKKyAgICB2b2lkIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3JXaW5kb3c6OipfYW5pbWF0aW9uUHJv
Z3Jlc3NDYWxsYmFjaykoZG91YmxlIHByb2dyZXNzKTsKKyAgICB2b2lkIChXZWJLaXQ6OkZpbmRJ
bmRpY2F0b3JXaW5kb3c6OipfYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2spKCk7Cit9CisKKy0gKGlk
KV9pbml0V2l0aEZpbmRJbmRpY2F0b3JXaW5kb3c6KFdlYktpdDo6RmluZEluZGljYXRvcldpbmRv
dyAqKWZpbmRJbmRpY2F0b3JXaW5kb3cgCisgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkR1cmF0
aW9uOihDRlRpbWVJbnRlcnZhbClkdXJhdGlvbgorICAgICAgICAgYW5pbWF0aW9uUHJvZ3Jlc3ND
YWxsYmFjazoodm9pZCAoV2ViS2l0OjpGaW5kSW5kaWNhdG9yV2luZG93OjoqKShkb3VibGUgcHJv
Z3Jlc3MpKWFuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2sKKyAgICAgICAgICAgYW5pbWF0aW9uRGlk
RW5kQ2FsbGJhY2s6KHZvaWQgKFdlYktpdDo6RmluZEluZGljYXRvcldpbmRvdzo6KikoKSlhbmlt
YXRpb25EaWRFbmRDYWxsYmFjazsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLRmluZEluZGlj
YXRvcldpbmRvd0FuaW1hdGlvbgorCistIChpZClfaW5pdFdpdGhGaW5kSW5kaWNhdG9yV2luZG93
OihXZWJLaXQ6OkZpbmRJbmRpY2F0b3JXaW5kb3cgKilmaW5kSW5kaWNhdG9yV2luZG93IAorICAg
ICAgICAgICAgICAgICBhbmltYXRpb25EdXJhdGlvbjooQ0ZUaW1lSW50ZXJ2YWwpYW5pbWF0aW9u
RHVyYXRpb24KKyAgICAgICAgIGFuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2s6KHZvaWQgKFdlYktp
dDo6RmluZEluZGljYXRvcldpbmRvdzo6KikoZG91YmxlIHByb2dyZXNzKSlhbmltYXRpb25Qcm9n
cmVzc0NhbGxiYWNrCisgICAgICAgICAgIGFuaW1hdGlvbkRpZEVuZENhbGxiYWNrOih2b2lkIChX
ZWJLaXQ6OkZpbmRJbmRpY2F0b3JXaW5kb3c6OiopKCkpYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2sK
K3sKKyAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhEdXJhdGlvbjphbmltYXRpb25EdXJh
dGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF0pKSB7CisgICAgICAgIF9m
aW5kSW5kaWNhdG9yV2luZG93ID0gZmluZEluZGljYXRvcldpbmRvdzsKKyAgICAgICAgX2FuaW1h
dGlvblByb2dyZXNzQ2FsbGJhY2sgPSBhbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNrOworICAgICAg
ICBfYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2sgPSBhbmltYXRpb25EaWRFbmRDYWxsYmFjazsKKyAg
ICAgICAgW3NlbGYgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtzZWxmIHNldEFuaW1hdGlv
bkJsb2NraW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nXTsKKyAgICB9CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFByb2dyZXNzOihOU0FuaW1hdGlvblByb2dy
ZXNzKXByb2dyZXNzCit7CisgICAgKF9maW5kSW5kaWNhdG9yV2luZG93LT4qX2FuaW1hdGlvblBy
b2dyZXNzQ2FsbGJhY2spKHByb2dyZXNzKTsKK30KKworLSAodm9pZClhbmltYXRpb25EaWRFbmQ6
KE5TQW5pbWF0aW9uICopYW5pbWF0aW9uCit7CisgICAgQVNTRVJUKGFuaW1hdGlvbiA9PSBzZWxm
KTsKKworICAgIChfZmluZEluZGljYXRvcldpbmRvdy0+Kl9hbmltYXRpb25EaWRFbmRDYWxsYmFj
aykoKTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworRmluZEluZGljYXRvcldp
bmRvdzo6RmluZEluZGljYXRvcldpbmRvdyhXS1ZpZXcgKndrVmlldykKKyAgICA6IG1fd2tWaWV3
KHdrVmlldykKKyAgICAsIG1fYm91bmNlQW5pbWF0aW9uQ29udGV4dCgwKQorICAgICwgbV9zdGFy
dEZhZGVPdXRUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZGaW5kSW5kaWNhdG9yV2luZG93
OjpzdGFydEZhZGVPdXRUaW1lckZpcmVkKQoreworfQorCitGaW5kSW5kaWNhdG9yV2luZG93Ojp+
RmluZEluZGljYXRvcldpbmRvdygpCit7CisgICAgY2xvc2VXaW5kb3coKTsKK30KKwordm9pZCBG
aW5kSW5kaWNhdG9yV2luZG93OjpzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGlj
YXRvcj4gZmluZEluZGljYXRvciwgYm9vbCBmYWRlT3V0LCBib29sIGFuaW1hdGUpCit7CisgICAg
aWYgKG1fZmluZEluZGljYXRvciA9PSBmaW5kSW5kaWNhdG9yKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2ZpbmRJbmRpY2F0b3IgPSBmaW5kSW5kaWNhdG9yOworCisgICAgLy8gR2V0IHJpZCBv
ZiB0aGUgb2xkIHdpbmRvdy4KKyAgICBjbG9zZVdpbmRvdygpOworCisgICAgaWYgKCFtX2ZpbmRJ
bmRpY2F0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIE5TUmVjdCBjb250ZW50UmVjdCA9IG1f
ZmluZEluZGljYXRvci0+ZnJhbWVSZWN0KCk7CisgICAgTlNSZWN0IHdpbmRvd0ZyYW1lUmVjdCA9
IE5TSW50ZWdyYWxSZWN0KFttX3drVmlldyBjb252ZXJ0UmVjdDpjb250ZW50UmVjdCB0b1ZpZXc6
bmlsXSk7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgd2luZG93RnJh
bWVSZWN0Lm9yaWdpbiA9IFtbbV93a1ZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOndp
bmRvd0ZyYW1lUmVjdC5vcmlnaW5dOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorICAg
IE5TUmVjdCB3aW5kb3dDb250ZW50UmVjdCA9IFtOU1dpbmRvdyBjb250ZW50UmVjdEZvckZyYW1l
UmVjdDp3aW5kb3dGcmFtZVJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2tdOwor
ICAgIAorICAgIG1fZmluZEluZGljYXRvcldpbmRvdyA9IGFkb3B0TlMoW1tOU1dpbmRvdyBhbGxv
Y10gaW5pdFdpdGhDb250ZW50UmVjdDp3aW5kb3dDb250ZW50UmVjdCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVNYXNr
Ok5TQm9yZGVybGVzc1dpbmRvd01hc2sgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1
ZmZlcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcjpOT10pOworCisgICAgW21fZmluZEluZGljYXRvcldpbmRv
dyBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3IgY2xlYXJDb2xvcl1dOworICAgIFttX2ZpbmRJ
bmRpY2F0b3JXaW5kb3cgc2V0T3BhcXVlOk5PXTsKKyAgICBbbV9maW5kSW5kaWNhdG9yV2luZG93
IHNldElnbm9yZXNNb3VzZUV2ZW50czpZRVNdOworCisgICAgUmV0YWluUHRyPFdLRmluZEluZGlj
YXRvclZpZXc+IGZpbmRJbmRpY2F0b3JWaWV3ID0gYWRvcHROUyhbW1dLRmluZEluZGljYXRvclZp
ZXcgYWxsb2NdIF9pbml0V2l0aEZpbmRJbmRpY2F0b3I6bV9maW5kSW5kaWNhdG9yXSk7CisgICAg
W21fZmluZEluZGljYXRvcldpbmRvdyBzZXRDb250ZW50VmlldzpmaW5kSW5kaWNhdG9yVmlldy5n
ZXQoKV07CisKKyAgICBbW21fd2tWaWV3IHdpbmRvd10gYWRkQ2hpbGRXaW5kb3c6bV9maW5kSW5k
aWNhdG9yV2luZG93LmdldCgpIG9yZGVyZWQ6TlNXaW5kb3dBYm92ZV07CisgICAgW21fZmluZElu
ZGljYXRvcldpbmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOworCisgICAgaWYgKGFuaW1h
dGUpIHsKKyAgICAgICAgLy8gU3RhcnQgdGhlIGJvdW5jZSBhbmltYXRpb24uCisgICAgICAgIG1f
Ym91bmNlQW5pbWF0aW9uQ29udGV4dCA9IFdLV2luZG93Qm91bmNlQW5pbWF0aW9uQ29udGV4dENy
ZWF0ZShtX2ZpbmRJbmRpY2F0b3JXaW5kb3cuZ2V0KCkpOworICAgICAgICBtX2JvdW5jZUFuaW1h
dGlvbiA9IGFkb3B0TlMoW1tXS0ZpbmRJbmRpY2F0b3JXaW5kb3dBbmltYXRpb24gYWxsb2NdIF9p
bml0V2l0aEZpbmRJbmRpY2F0b3JXaW5kb3c6dGhpcworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYW5pbWF0aW9uRHVyYXRpb246Ym91bmNlQW5pbWF0aW9uRHVyYXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNrOiZGaW5kSW5kaWNhdG9yV2luZG93Ojpi
b3VuY2VBbmltYXRpb25DYWxsYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uRGlk
RW5kQ2FsbGJhY2s6JkZpbmRJbmRpY2F0b3JXaW5kb3c6OmJvdW5jZUFuaW1hdGlvbkRpZEVuZF0p
OworICAgICAgICBbbV9ib3VuY2VBbmltYXRpb24gc3RhcnRBbmltYXRpb25dOworICAgIH0KKwor
ICAgIGlmIChmYWRlT3V0KQorICAgICAgICBtX3N0YXJ0RmFkZU91dFRpbWVyLnN0YXJ0T25lU2hv
dCh0aW1lQmVmb3JlRmFkZVN0YXJ0cyk7Cit9CisKK3ZvaWQgRmluZEluZGljYXRvcldpbmRvdzo6
Y2xvc2VXaW5kb3coKQoreworICAgIGlmICghbV9maW5kSW5kaWNhdG9yV2luZG93KQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3N0YXJ0RmFkZU91dFRpbWVyLnN0b3AoKTsKKworICAgIGlmICht
X2ZhZGVPdXRBbmltYXRpb24pIHsKKyAgICAgICAgW21fZmFkZU91dEFuaW1hdGlvbiBzdG9wQW5p
bWF0aW9uXTsKKyAgICAgICAgbV9mYWRlT3V0QW5pbWF0aW9uID0gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBpZiAobV9ib3VuY2VBbmltYXRpb24pIHsKKyAgICAgICAgW21fYm91bmNlQW5pbWF0aW9u
IHN0b3BBbmltYXRpb25dOworICAgICAgICBtX2JvdW5jZUFuaW1hdGlvbiA9IG51bGxwdHI7Cisg
ICAgfQorCisgICAgaWYgKG1fYm91bmNlQW5pbWF0aW9uQ29udGV4dCkKKyAgICAgICAgV0tXaW5k
b3dCb3VuY2VBbmltYXRpb25Db250ZXh0RGVzdHJveShtX2JvdW5jZUFuaW1hdGlvbkNvbnRleHQp
OworICAgIAorICAgIFtbbV9maW5kSW5kaWNhdG9yV2luZG93IHBhcmVudFdpbmRvd10gcmVtb3Zl
Q2hpbGRXaW5kb3c6bV9maW5kSW5kaWNhdG9yV2luZG93LmdldCgpXTsKKyAgICBbbV9maW5kSW5k
aWNhdG9yV2luZG93IGNsb3NlXTsKKyAgICBtX2ZpbmRJbmRpY2F0b3JXaW5kb3cgPSBudWxscHRy
OworfQorCit2b2lkIEZpbmRJbmRpY2F0b3JXaW5kb3c6OnN0YXJ0RmFkZU91dFRpbWVyRmlyZWQo
KQoreworICAgIEFTU0VSVCghbV9mYWRlT3V0QW5pbWF0aW9uKTsKKyAgICAKKyAgICBtX2ZhZGVP
dXRBbmltYXRpb24gPSBhZG9wdE5TKFtbV0tGaW5kSW5kaWNhdG9yV2luZG93QW5pbWF0aW9uIGFs
bG9jXSBfaW5pdFdpdGhGaW5kSW5kaWNhdG9yV2luZG93OnRoaXMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ZmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNrOiZGaW5kSW5kaWNhdG9yV2lu
ZG93OjpmYWRlT3V0QW5pbWF0aW9uQ2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0
aW9uRGlkRW5kQ2FsbGJhY2s6JkZpbmRJbmRpY2F0b3JXaW5kb3c6OmZhZGVPdXRBbmltYXRpb25E
aWRFbmRdKTsKKyAgICBbbV9mYWRlT3V0QW5pbWF0aW9uIHN0YXJ0QW5pbWF0aW9uXTsKK30KKyAg
ICAgICAgICAgICAgICAgICAgICAgIAordm9pZCBGaW5kSW5kaWNhdG9yV2luZG93OjpmYWRlT3V0
QW5pbWF0aW9uQ2FsbGJhY2soZG91YmxlIHByb2dyZXNzKQoreworICAgIEFTU0VSVChtX2ZhZGVP
dXRBbmltYXRpb24pOworCisgICAgW21fZmluZEluZGljYXRvcldpbmRvdyBzZXRBbHBoYVZhbHVl
OjEuMCAtIHByb2dyZXNzXTsKK30KKwordm9pZCBGaW5kSW5kaWNhdG9yV2luZG93OjpmYWRlT3V0
QW5pbWF0aW9uRGlkRW5kKCkKK3sKKyAgICBBU1NFUlQobV9mYWRlT3V0QW5pbWF0aW9uKTsKKyAg
ICBBU1NFUlQobV9maW5kSW5kaWNhdG9yV2luZG93KTsKKworICAgIGNsb3NlV2luZG93KCk7Cit9
CisKK3ZvaWQgRmluZEluZGljYXRvcldpbmRvdzo6Ym91bmNlQW5pbWF0aW9uQ2FsbGJhY2soZG91
YmxlIHByb2dyZXNzKQoreworICAgIEFTU0VSVChtX2JvdW5jZUFuaW1hdGlvbik7CisgICAgQVNT
RVJUKG1fYm91bmNlQW5pbWF0aW9uQ29udGV4dCk7CisKKyAgICBXS1dpbmRvd0JvdW5jZUFuaW1h
dGlvblNldEFuaW1hdGlvblByb2dyZXNzKG1fYm91bmNlQW5pbWF0aW9uQ29udGV4dCwgcHJvZ3Jl
c3MpOworfQorCit2b2lkIEZpbmRJbmRpY2F0b3JXaW5kb3c6OmJvdW5jZUFuaW1hdGlvbkRpZEVu
ZCgpCit7CisgICAgQVNTRVJUKG1fYm91bmNlQW5pbWF0aW9uKTsKKyAgICBBU1NFUlQobV9ib3Vu
Y2VBbmltYXRpb25Db250ZXh0KTsKKyAgICBBU1NFUlQobV9maW5kSW5kaWNhdG9yV2luZG93KTsK
KworICAgIFdLV2luZG93Qm91bmNlQW5pbWF0aW9uQ29udGV4dERlc3Ryb3kobV9ib3VuY2VBbmlt
YXRpb25Db250ZXh0KTsKKyAgICBtX2JvdW5jZUFuaW1hdGlvbkNvbnRleHQgPSAwOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvUERGVmlld0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
UERGVmlld0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDBjNmFmODA1NGY3NDc1NWY0MjgyNmU3
YjBmNTNjYmJhMTY5M2ZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9QREZWaWV3Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFBERlZpZXdDb250cm9sbGVyX2gKKyNkZWZpbmUgUERGVmlld0NvbnRy
b2xsZXJfaAorCisjaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCitAY2xhc3MgUERGVmlldzsKK0BjbGFzcyBXS1ZpZXc7CitAY2xhc3Mg
V0tQREZWaWV3OworCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIERhdGFSZWZlcmVuY2U7Cit9CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFBERlZp
ZXdDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQREZWaWV3Q29udHJvbGxl
cik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQREZWaWV3Q29udHJvbGxlcj4g
Y3JlYXRlKFdLVmlldyAqKTsKKyAgICB+UERGVmlld0NvbnRyb2xsZXIoKTsKKworICAgIFdLVmll
dyogd2tWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93a1ZpZXc7IH0KKyAgICBXZWJQYWdlUHJveHkq
IHBhZ2UoKSBjb25zdDsKKyAgICBOU1ZpZXcqIHBkZlZpZXcoKSBjb25zdDsKKyAgICAKKyAgICB2
b2lkIHNldFBERkRvY3VtZW50RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKKworICAg
IGRvdWJsZSB6b29tRmFjdG9yKCkgY29uc3Q7CisgICAgdm9pZCBzZXRab29tRmFjdG9yKGRvdWJs
ZSk7CisKKyAgICBzdGF0aWMgQ2xhc3MgcGRmUHJldmlld1ZpZXdDbGFzcygpOworCisgICAgYm9v
bCBmb3J3YXJkU2Nyb2xsV2hlZWxFdmVudChOU0V2ZW50ICopOworCisgICAgTlNQcmludE9wZXJh
dGlvbiAqbWFrZVByaW50T3BlcmF0aW9uKE5TUHJpbnRJbmZvICopOworICAgIHZvaWQgb3BlblBE
RkluRmluZGVyKCk7CisgICAgdm9pZCBzYXZlUERGVG9Eb3dubG9hZHNGb2xkZXIoKTsKKyAgICB2
b2lkIGxpbmtDbGlja2VkKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIHByaW50KCk7CisK
KyAgICB2b2lkIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVk
IG1heE1hdGNoQ291bnQpOworICAgIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmlu
ZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKKworcHJpdmF0ZToKKyAg
ICBleHBsaWNpdCBQREZWaWV3Q29udHJvbGxlcihXS1ZpZXcgKik7CisKKyAgICBzdGF0aWMgQ2xh
c3MgcGRmRG9jdW1lbnRDbGFzcygpOworICAgIHN0YXRpYyBOU0J1bmRsZSogcGRmS2l0QnVuZGxl
KCk7CisKKyAgICBXS1ZpZXcqIG1fd2tWaWV3OworCisgICAgUmV0YWluUHRyPFdLUERGVmlldz4g
bV93a1BERlZpZXc7CisgICAgUERGVmlldyogbV9wZGZWaWV3OworCisgICAgUmV0YWluUHRyPE5T
U3RyaW5nPiBtX3N1Z2dlc3RlZEZpbGVuYW1lOworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG1f
cGRmRGF0YTsKKworICAgIFN0cmluZyBtX3RlbXBvcmFyeVBERlVVSUQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBERlZpZXdDb250cm9sbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUERGVmlld0NvbnRyb2xsZXIubW0gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BERlZpZXdDb250cm9sbGVyLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFmMWJhMzk1ZWFmZDQ4MGQ1YzMwNDE2YjNiMWE2ODg4MjMwNzI5ZGEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BERlZpZXdDb250cm9sbGVyLm1t
CkBAIC0wLDAgKzEsNjc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJQREZWaWV3Q29udHJvbGxlci5oIgorCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNl
LmgiCisjaW1wb3J0ICJXS0FQSUNhc3QuaCIKKyNpbXBvcnQgIldLVmlld1ByaXZhdGUuaCIKKyNp
bXBvcnQgIldlYkRhdGEuaCIKKyNpbXBvcnQgIldlYkV2ZW50RmFjdG9yeS5oIgorI2ltcG9ydCAi
V2ViUGFnZUdyb3VwLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlBy
ZWZlcmVuY2VzLmgiCisjaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVVVJRC5oPgorI2ltcG9ydCA8
d3RmL09iamNSdW50aW1lRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworLy8gUmVkZWNsYXJhdGlvbnMgb2YgUERG
S2l0IG5vdGlmaWNhdGlvbnMuIFdlIGNhbid0IHVzZSB0aGUgQVBJIHNpbmNlIHdlIHVzZSBhIHdl
YWsgbGluayB0byB0aGUgZnJhbWV3b3JrLgorI2RlZmluZSBfd2Via2l0X1BERlZpZXdEaXNwbGF5
TW9kZUNoYW5nZWROb3RpZmljYXRpb24gQCJQREZWaWV3RGlzcGxheU1vZGVDaGFuZ2VkIgorI2Rl
ZmluZSBfd2Via2l0X1BERlZpZXdTY2FsZUNoYW5nZWROb3RpZmljYXRpb24gQCJQREZWaWV3U2Nh
bGVDaGFuZ2VkIgorI2RlZmluZSBfd2Via2l0X1BERlZpZXdQYWdlQ2hhbmdlZE5vdGlmaWNhdGlv
biBAIlBERlZpZXdDaGFuZ2VkUGFnZSIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OworCitAY2xhc3MgUERGRG9jdW1lbnQ7CitAY2xhc3MgUERGVmll
dzsKKworQGludGVyZmFjZSBQREZEb2N1bWVudCAoUERGRG9jdW1lbnREZXRhaWxzKQorLSAoTlNQ
cmludE9wZXJhdGlvbiAqKWdldFByaW50T3BlcmF0aW9uRm9yUHJpbnRJbmZvOihOU1ByaW50SW5m
byAqKXByaW50SW5mbyBhdXRvUm90YXRlOihCT09MKWRvUm90YXRlOworQGVuZAorCitleHRlcm4g
IkMiIE5TU3RyaW5nICpfTlNQYXRoRm9yU3lzdGVtRnJhbWV3b3JrKE5TU3RyaW5nICpmcmFtZXdv
cmspOworCisvLyBNQVJLOiBDIFVUSUxJVFkgRlVOQ1RJT05TCisKK3N0YXRpYyB2b2lkIF9hcHBs
aWNhdGlvbkluZm9Gb3JNSU1FVHlwZShOU1N0cmluZyAqdHlwZSwgTlNTdHJpbmcgKipuYW1lLCBO
U0ltYWdlICoqaW1hZ2UpCit7CisgICAgQVNTRVJUKG5hbWUpOworICAgIEFTU0VSVChpbWFnZSk7
CisgICAgCisgICAgQ0ZVUkxSZWYgYXBwVVJMID0gMDsKKworICAgIE9TU3RhdHVzIGVycm9yID0g
TFNDb3B5QXBwbGljYXRpb25Gb3JNSU1FVHlwZSgoQ0ZTdHJpbmdSZWYpdHlwZSwga0xTUm9sZXNB
bGwsICZhcHBVUkwpOworICAgIGlmIChlcnJvciAhPSBub0VycikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgTlNTdHJpbmcgKmFwcFBhdGggPSBbKE5TVVJMICopYXBwVVJMIHBhdGhdOworICAgIGlm
IChhcHBVUkwpCisgICAgICAgIENGUmVsZWFzZShhcHBVUkwpOworCisgICAgKmltYWdlID0gW1tO
U1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIGljb25Gb3JGaWxlOmFwcFBhdGhdOworICAgIFsq
aW1hZ2Ugc2V0U2l6ZTpOU01ha2VTaXplKDE2LCAxNildOworCisgICAgKm5hbWUgPSBbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGRpc3BsYXlOYW1lQXRQYXRoOmFwcFBhdGhdOworfQor
CisvLyBGSVhNRSA0MTgyODc2OiBXZSBjYW4gZWxpbWluYXRlIHRoaXMgZnVuY3Rpb24gaW4gZmF2
b3IgaWYgLWlzRXF1YWw6IGlmIFtQREZTZWxlY3Rpb24gaXNFcXVhbDpdIGlzIG92ZXJyaWRkZW4K
Ky8vIHRvIGNvbXBhcmUgY29udGVudHMuCitzdGF0aWMgQk9PTCBfUERGU2VsZWN0aW9uc0FyZUVx
dWFsKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uQSwgUERGU2VsZWN0aW9uICpzZWxlY3Rpb25CKQor
eworICAgIE5TQXJyYXkgKmFQYWdlcyA9IFtzZWxlY3Rpb25BIHBhZ2VzXTsKKyAgICBOU0FycmF5
ICpiUGFnZXMgPSBbc2VsZWN0aW9uQiBwYWdlc107CisKKyAgICBpZiAoIVthUGFnZXMgaXNFcXVh
bDpiUGFnZXNdKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0g
W2FQYWdlcyBjb3VudF07CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgeworICAgICAgICBOU1JlY3QgYUJvdW5kcyA9IFtzZWxlY3Rpb25BIGJvdW5kc0ZvclBhZ2U6
W2FQYWdlcyBvYmplY3RBdEluZGV4OmldXTsKKyAgICAgICAgTlNSZWN0IGJCb3VuZHMgPSBbc2Vs
ZWN0aW9uQiBib3VuZHNGb3JQYWdlOltiUGFnZXMgb2JqZWN0QXRJbmRleDppXV07CisgICAgICAg
IGlmICghTlNFcXVhbFJlY3RzKGFCb3VuZHMsIGJCb3VuZHMpKQorICAgICAgICAgICAgcmV0dXJu
IE5POworICAgIH0KKworICAgIHJldHVybiBZRVM7Cit9CisKK0BpbnRlcmZhY2UgV0tQREZWaWV3
IDogTlNWaWV3Cit7CisgICAgUERGVmlld0NvbnRyb2xsZXIqIF9wZGZWaWV3Q29udHJvbGxlcjsK
KworICAgIFJldGFpblB0cjxOU1ZpZXc+IF9wZGZQcmV2aWV3VmlldzsKKyAgICBQREZWaWV3ICpf
cGRmVmlldzsKKyAgICBCT09MIF9pZ25vcmVTY2FsZUFuZERpc3BsYXlNb2RlQW5kUGFnZU5vdGlm
aWNhdGlvbnM7CisgICAgQk9PTCBfd2lsbFVwZGF0ZVByZWZlcmVuY2VzU29vbjsKK30KKworLSAo
aWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIFBERlZpZXdDb250cm9sbGVyOihQREZWaWV3
Q29udHJvbGxlciopcGRmVmlld0NvbnRyb2xsZXI7CistICh2b2lkKWludmFsaWRhdGU7CistIChQ
REZWaWV3ICopcGRmVmlldzsKKy0gKHZvaWQpc2V0RG9jdW1lbnQ6KFBERkRvY3VtZW50ICopcGRm
RG9jdW1lbnQ7CisKKy0gKEJPT0wpZm9yd2FyZFNjcm9sbFdoZWVsRXZlbnQ6KE5TRXZlbnQgKil3
aGVlbEV2ZW50OworLSAodm9pZClfYXBwbHlQREZQcmVmZXJlbmNlczsKKy0gKFBERlNlbGVjdGlv
biAqKV9uZXh0TWF0Y2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3
YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZyBmcm9t
U2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilpbml0aWFsU2VsZWN0aW9uIHN0YXJ0SW5TZWxlY3Rp
b246KEJPT0wpc3RhcnRJblNlbGVjdGlvbjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLUERG
VmlldworCistIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgUERGVmlld0NvbnRyb2xs
ZXI6KFBERlZpZXdDb250cm9sbGVyKilwZGZWaWV3Q29udHJvbGxlcgoreworICAgIGlmICgoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXSkpIHsKKyAgICAgICAgX3BkZlZpZXdDb250
cm9sbGVyID0gcGRmVmlld0NvbnRyb2xsZXI7CisKKyAgICAgICAgW3NlbGYgc2V0QXV0b3Jlc2l6
aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlXTsKKworICAg
ICAgICBDbGFzcyBwcmV2aWV3Vmlld0NsYXNzID0gUERGVmlld0NvbnRyb2xsZXI6OnBkZlByZXZp
ZXdWaWV3Q2xhc3MoKTsKKyAgICAgICAgQVNTRVJUKHByZXZpZXdWaWV3Q2xhc3MpOworCisgICAg
ICAgIF9wZGZQcmV2aWV3VmlldyA9IGFkb3B0TlMoW1twcmV2aWV3Vmlld0NsYXNzIGFsbG9jXSBp
bml0V2l0aEZyYW1lOmZyYW1lXSk7CisgICAgICAgIFtfcGRmUHJldmlld1ZpZXcuZ2V0KCkgc2V0
QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxl
XTsKKyAgICAgICAgW3NlbGYgYWRkU3VidmlldzpfcGRmUHJldmlld1ZpZXcuZ2V0KCldOworCisg
ICAgICAgIF9wZGZWaWV3ID0gW19wZGZQcmV2aWV3Vmlldy5nZXQoKSBwZXJmb3JtU2VsZWN0b3I6
QHNlbGVjdG9yKHBkZlZpZXcpXTsKKyAgICAgICAgW19wZGZWaWV3IHNldERlbGVnYXRlOnNlbGZd
OworICAgIH0KKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sK
KyAgICBfcGRmVmlld0NvbnRyb2xsZXIgPSAwOworfQorCistIChQREZWaWV3ICopcGRmVmlldwor
eworICAgIHJldHVybiBfcGRmVmlldzsKK30KKworLSAodm9pZClzZXREb2N1bWVudDooUERGRG9j
dW1lbnQgKilwZGZEb2N1bWVudAoreworICAgIF9pZ25vcmVTY2FsZUFuZERpc3BsYXlNb2RlQW5k
UGFnZU5vdGlmaWNhdGlvbnMgPSBZRVM7CisgICAgW19wZGZWaWV3IHNldERvY3VtZW50OnBkZkRv
Y3VtZW50XTsKKyAgICBbc2VsZiBfYXBwbHlQREZQcmVmZXJlbmNlc107CisgICAgX2lnbm9yZVNj
YWxlQW5kRGlzcGxheU1vZGVBbmRQYWdlTm90aWZpY2F0aW9ucyA9IE5POworfQorCistICh2b2lk
KV9hcHBseVBERlByZWZlcmVuY2VzCit7CisgICAgaWYgKCFfcGRmVmlld0NvbnRyb2xsZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IF9wZGZW
aWV3Q29udHJvbGxlci0+cGFnZSgpLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKKworICAg
IENHRmxvYXQgc2NhbGVGYWN0b3IgPSBwcmVmZXJlbmNlcy0+cGRmU2NhbGVGYWN0b3IoKTsKKyAg
ICBpZiAoIXNjYWxlRmFjdG9yKQorICAgICAgICBbX3BkZlZpZXcgc2V0QXV0b1NjYWxlczpZRVNd
OworICAgIGVsc2UgeworICAgICAgICBbX3BkZlZpZXcgc2V0QXV0b1NjYWxlczpOT107CisgICAg
ICAgIFtfcGRmVmlldyBzZXRTY2FsZUZhY3RvcjpzY2FsZUZhY3Rvcl07CisgICAgfQorICAgIFtf
cGRmVmlldyBzZXREaXNwbGF5TW9kZTpwcmVmZXJlbmNlcy0+cGRmRGlzcGxheU1vZGUoKV07Cit9
CisKKy0gKHZvaWQpX3VwZGF0ZVByZWZlcmVuY2VzOihpZClpZ25vcmVkCit7CisgICAgX3dpbGxV
cGRhdGVQcmVmZXJlbmNlc1Nvb24gPSBOTzsKKworICAgIGlmICghX3BkZlZpZXdDb250cm9sbGVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMgPSBf
cGRmVmlld0NvbnRyb2xsZXItPnBhZ2UoKS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCk7CisK
KyAgICBDR0Zsb2F0IHNjYWxlRmFjdG9yID0gW19wZGZWaWV3IGF1dG9TY2FsZXNdID8gMCA6IFtf
cGRmVmlldyBzY2FsZUZhY3Rvcl07CisgICAgcHJlZmVyZW5jZXMtPnNldFBERlNjYWxlRmFjdG9y
KHNjYWxlRmFjdG9yKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0UERGRGlzcGxheU1vZGUoW19wZGZW
aWV3IGRpc3BsYXlNb2RlXSk7Cit9CisKKy0gKHZvaWQpX3VwZGF0ZVByZWZlcmVuY2VzU29vbgor
eyAgIAorICAgIGlmIChfd2lsbFVwZGF0ZVByZWZlcmVuY2VzU29vbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfdXBkYXRlUHJlZmVyZW5j
ZXM6KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBdOworICAgIF93aWxsVXBkYXRlUHJlZmVy
ZW5jZXNTb29uID0gWUVTOworfQorCistICh2b2lkKV9zY2FsZU9yRGlzcGxheU1vZGVPclBhZ2VD
aGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIEFTU0VSVF9BUkco
bm90aWZpY2F0aW9uLCBbbm90aWZpY2F0aW9uIG9iamVjdF0gPT0gX3BkZlZpZXcpOworICAgIGlm
ICghX2lnbm9yZVNjYWxlQW5kRGlzcGxheU1vZGVBbmRQYWdlTm90aWZpY2F0aW9ucykKKyAgICAg
ICAgW3NlbGYgX3VwZGF0ZVByZWZlcmVuY2VzU29vbl07Cit9CisKKy0gKHZvaWQpX29wZW5XaXRo
RmluZGVyOihpZClzZW5kZXIKK3sKKyAgICBfcGRmVmlld0NvbnRyb2xsZXItPm9wZW5QREZJbkZp
bmRlcigpOworfQorCistIChQREZTZWxlY3Rpb24gKilfbmV4dE1hdGNoRm9yOihOU1N0cmluZyAq
KXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VG
bGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcgZnJvbVNlbGVjdGlvbjooUERGU2VsZWN0aW9uICopaW5p
dGlhbFNlbGVjdGlvbiBzdGFydEluU2VsZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rpb24KK3sK
KyAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlu
dCBvcHRpb25zID0gMDsKKyAgICBpZiAoIWZvcndhcmQpCisgICAgICAgIG9wdGlvbnMgfD0gTlNC
YWNrd2FyZHNTZWFyY2g7CisKKyAgICBpZiAoIWNhc2VGbGFnKQorICAgICAgICBvcHRpb25zIHw9
IE5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoOworCisgICAgUERGRG9jdW1lbnQgKmRvY3VtZW50ID0g
W19wZGZWaWV3IGRvY3VtZW50XTsKKworICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uRm9ySW5p
dGlhbFNlYXJjaCA9IFtpbml0aWFsU2VsZWN0aW9uIGNvcHldOworICAgIGlmIChzdGFydEluU2Vs
ZWN0aW9uKSB7CisgICAgICAgIC8vIEluaXRpYWxseSB3ZSB3YW50IHRvIGluY2x1ZGUgdGhlIHNl
bGVjdGVkIHRleHQgaW4gdGhlIHNlYXJjaC4gIFNvIHdlIG11c3QgbW9kaWZ5IHRoZSBzdGFydGlu
ZyBzZWFyY2ggCisgICAgICAgIC8vIHNlbGVjdGlvbiB0byBmaXQgUERGRG9jdW1lbnQncyBzZWFy
Y2ggcmVxdWlyZW1lbnRzOiBzZWxlY3Rpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID49IDEsIGJlZ2lu
IGJlZm9yZSAKKyAgICAgICAgLy8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIChpZiBzZWFyY2hpbmcg
Zm9yd2FyZHMpIG9yIGFmdGVyIChpZiBzZWFyY2hpbmcgYmFja3dhcmRzKS4KKyAgICAgICAgaW50
IGluaXRpYWxTZWxlY3Rpb25MZW5ndGggPSBbW2luaXRpYWxTZWxlY3Rpb24gc3RyaW5nXSBsZW5n
dGhdOworICAgICAgICBpZiAoZm9yd2FyZCkgeworICAgICAgICAgICAgW3NlbGVjdGlvbkZvcklu
aXRpYWxTZWFyY2ggZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDoxXTsKKyAgICAgICAgICAgIFtzZWxl
Y3Rpb25Gb3JJbml0aWFsU2VhcmNoIGV4dGVuZFNlbGVjdGlvbkF0RW5kOi1pbml0aWFsU2VsZWN0
aW9uTGVuZ3RoXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJ
bml0aWFsU2VhcmNoIGV4dGVuZFNlbGVjdGlvbkF0RW5kOjFdOworICAgICAgICAgICAgW3NlbGVj
dGlvbkZvckluaXRpYWxTZWFyY2ggZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDotaW5pdGlhbFNlbGVj
dGlvbkxlbmd0aF07CisgICAgICAgIH0KKyAgICB9CisgICAgUERGU2VsZWN0aW9uICpmb3VuZFNl
bGVjdGlvbiA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnN0cmluZyBmcm9tU2VsZWN0aW9uOnNlbGVj
dGlvbkZvckluaXRpYWxTZWFyY2ggd2l0aE9wdGlvbnM6b3B0aW9uc107CisgICAgW3NlbGVjdGlv
bkZvckluaXRpYWxTZWFyY2ggcmVsZWFzZV07CisKKyAgICAvLyBJZiB3ZSBmaXJzdCBzZWFyY2hl
ZCBpbiB0aGUgc2VsZWN0aW9uLCBhbmQgd2UgZm91bmQgdGhlIHNlbGVjdGlvbiwgc2VhcmNoIGFn
YWluIGZyb20ganVzdCBwYXN0IHRoZSBzZWxlY3Rpb24KKyAgICBpZiAoc3RhcnRJblNlbGVjdGlv
biAmJiBfUERGU2VsZWN0aW9uc0FyZUVxdWFsKGZvdW5kU2VsZWN0aW9uLCBpbml0aWFsU2VsZWN0
aW9uKSkKKyAgICAgICAgZm91bmRTZWxlY3Rpb24gPSBbZG9jdW1lbnQgZmluZFN0cmluZzpzdHJp
bmcgZnJvbVNlbGVjdGlvbjppbml0aWFsU2VsZWN0aW9uIHdpdGhPcHRpb25zOm9wdGlvbnNdOwor
CisgICAgaWYgKCFmb3VuZFNlbGVjdGlvbiAmJiB3cmFwRmxhZykKKyAgICAgICAgZm91bmRTZWxl
Y3Rpb24gPSBbZG9jdW1lbnQgZmluZFN0cmluZzpzdHJpbmcgZnJvbVNlbGVjdGlvbjpuaWwgd2l0
aE9wdGlvbnM6b3B0aW9uc107CisKKyAgICByZXR1cm4gZm91bmRTZWxlY3Rpb247Cit9CisKKy0g
KE5TVUludGVnZXIpX2NvdW50TWF0Y2hlczooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2
ZTooQk9PTCljYXNlRmxhZworeworICAgIGlmICghW3N0cmluZyBsZW5ndGhdKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGludCBvcHRpb25zID0gY2FzZUZsYWcgPyAwIDogTlNDYXNlSW5zZW5z
aXRpdmVTZWFyY2g7CisKKyAgICByZXR1cm4gW1tbX3BkZlZpZXcgZG9jdW1lbnRdIGZpbmRTdHJp
bmc6c3RyaW5nIHdpdGhPcHRpb25zOm9wdGlvbnNdIGNvdW50XTsKK30KKworLy8gTUFSSzogTlNW
aWV3IG92ZXJyaWRlcworCistICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cKK3sKKyAgICBpZiAo
IVtzZWxmIHdpbmRvd10pCisgICAgICAgIHJldHVybjsKKworICAgIE5TTm90aWZpY2F0aW9uQ2Vu
dGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl07CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9y
OkBzZWxlY3Rvcihfc2NhbGVPckRpc3BsYXlNb2RlT3JQYWdlQ2hhbmdlZDopIG5hbWU6X3dlYmtp
dF9QREZWaWV3U2NhbGVDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpfcGRmVmlld107CisgICAg
W25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihf
c2NhbGVPckRpc3BsYXlNb2RlT3JQYWdlQ2hhbmdlZDopIG5hbWU6X3dlYmtpdF9QREZWaWV3RGlz
cGxheU1vZGVDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpfcGRmVmlld107CisgICAgW25vdGlm
aWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfc2NhbGVP
ckRpc3BsYXlNb2RlT3JQYWdlQ2hhbmdlZDopIG5hbWU6X3dlYmtpdF9QREZWaWV3UGFnZUNoYW5n
ZWROb3RpZmljYXRpb24gb2JqZWN0Ol9wZGZWaWV3XTsKK30KKworLSAodm9pZCl2aWV3V2lsbE1v
dmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKK3sKKyAgICBpZiAoIVtzZWxmIHdpbmRv
d10pCisgICAgICAgIHJldHVybjsKKworICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmlj
YXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07CisgICAg
W25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6X3dlYmtpdF9QREZW
aWV3U2NhbGVDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpfcGRmVmlld107CisgICAgW25vdGlm
aWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6X3dlYmtpdF9QREZWaWV3RGlz
cGxheU1vZGVDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpfcGRmVmlld107CisgICAgW25vdGlm
aWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6X3dlYmtpdF9QREZWaWV3UGFn
ZUNoYW5nZWROb3RpZmljYXRpb24gb2JqZWN0Ol9wZGZWaWV3XTsKK30KKworLSAoTlNWaWV3ICop
aGl0VGVzdDooTlNQb2ludClwb2ludAoreworICAgIC8vIE92ZXJyaWRlIGhpdFRlc3Qgc28gd2Ug
Y2FuIG92ZXJyaWRlIG1lbnVGb3JFdmVudC4KKyAgICBOU0V2ZW50ICpldmVudCA9IFtOU0FwcCBj
dXJyZW50RXZlbnRdOworICAgIE5TRXZlbnRUeXBlIHR5cGUgPSBbZXZlbnQgdHlwZV07CisgICAg
aWYgKHR5cGUgPT0gTlNSaWdodE1vdXNlRG93biB8fCAodHlwZSA9PSBOU0xlZnRNb3VzZURvd24g
JiYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2spKSkKKyAgICAgICAg
cmV0dXJuIHNlbGY7CisKKyAgICByZXR1cm4gW3N1cGVyIGhpdFRlc3Q6cG9pbnRdOworfQorCitz
dGF0aWMgdm9pZCBpbnNlcnRPcGVuV2l0aERlZmF1bHRQREZNZW51SXRlbShOU01lbnUgKm1lbnUs
IE5TVUludGVnZXIgaW5kZXgpCit7CisgICAgLy8gQWRkIGluIGFuICJPcGVuIHdpdGggPGRlZmF1
bHQgUERGIHZpZXdlcj4iIGl0ZW0KKyAgICBOU1N0cmluZyAqYXBwTmFtZSA9IG5pbDsKKyAgICBO
U0ltYWdlICphcHBJY29uID0gbmlsOworICAgIAorICAgIF9hcHBsaWNhdGlvbkluZm9Gb3JNSU1F
VHlwZShAImFwcGxpY2F0aW9uL3BkZiIsICZhcHBOYW1lLCAmYXBwSWNvbik7CisgICAgaWYgKCFh
cHBOYW1lKQorICAgICAgICBhcHBOYW1lID0gV0VCX1VJX1NUUklORygiRmluZGVyIiwgIkRlZmF1
bHQgYXBwbGljYXRpb24gbmFtZSBmb3IgT3BlbiBXaXRoIGNvbnRleHQgbWVudSIpOworICAgIAor
ICAgIC8vIFRvIG1hdGNoIHRoZSBQREZLaXQgc3R5bGUsIHdlJ2xsIGFkZCBPcGVuIHdpdGggUHJl
dmlldyBldmVuIHdoZW4gdGhlcmUncyBubyBkb2N1bWVudCB5ZXQgdG8gdmlldywgYW5kCisgICAg
Ly8gZGlzYWJsZSBpdCB1c2luZyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtLgorICAgIE5TU3Ry
aW5nICp0aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIk9w
ZW4gd2l0aCAlQCIsICJjb250ZXh0IG1lbnUgaXRlbSBmb3IgUERGIiksIGFwcE5hbWVdOworICAg
IAorICAgIE5TTWVudUl0ZW0gKml0ZW0gPSBbW05TTWVudUl0ZW0gYWxsb2NdIGluaXRXaXRoVGl0
bGU6dGl0bGUgYWN0aW9uOkBzZWxlY3Rvcihfb3BlbldpdGhGaW5kZXI6KSBrZXlFcXVpdmFsZW50
OkAiIl07CisgICAgaWYgKGFwcEljb24pCisgICAgICAgIFtpdGVtIHNldEltYWdlOmFwcEljb25d
OworICAgIFttZW51IGluc2VydEl0ZW06aXRlbSBhdEluZGV4OmluZGV4XTsKKyAgICBbaXRlbSBy
ZWxlYXNlXTsKK30KKworLSAoTlNNZW51ICopbWVudUZvckV2ZW50OihOU0V2ZW50ICopdGhlRXZl
bnQKK3sKKyAgICBOU01lbnUgKm1lbnUgPSBbW05TTWVudSBhbGxvY10gaW5pdFdpdGhUaXRsZTpA
IiJdOworCisgICAgYm9vbCBpbnNlcnRlZE9wZW5XaXRoSXRlbSA9IGZhbHNlOworICAgIAorICAg
IE5TRW51bWVyYXRvciAqbWVudUl0ZW1FbnVtZXJhdG9yID0gW1tbX3BkZlZpZXcgbWVudUZvckV2
ZW50OnRoZUV2ZW50XSBpdGVtQXJyYXldIG9iamVjdEVudW1lcmF0b3JdOworICAgIHdoaWxlIChO
U01lbnVJdGVtICppdGVtID0gW21lbnVJdGVtRW51bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAg
ICAgICBOU01lbnVJdGVtICppdGVtQ29weSA9IFtpdGVtIGNvcHldOworICAgICAgICBbbWVudSBh
ZGRJdGVtOml0ZW1Db3B5XTsKKyAgICAgICAgW2l0ZW1Db3B5IHJlbGVhc2VdOworCisgICAgICAg
IGlmIChpbnNlcnRlZE9wZW5XaXRoSXRlbSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAKKyAgICAgICAgLy8gSWYgYSAiQ29weSIgaXRlbSBpcyBwcmVzZW50LCBwbGFjZSB0aGUgIk9w
ZW4gV2l0aCIgaXRlbSBqdXN0IGFmdGVyIGl0LCB3aXRoIGFuIGludGVydmVuaW5nIHNlcGFyYXRv
ci4KKyAgICAgICAgaWYgKFtpdGVtIGFjdGlvbl0gIT0gQHNlbGVjdG9yKGNvcHk6KSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgW21lbnUgYWRkSXRlbTpbTlNNZW51
SXRlbSBzZXBhcmF0b3JJdGVtXV07CisgICAgICAgIGluc2VydE9wZW5XaXRoRGVmYXVsdFBERk1l
bnVJdGVtKG1lbnUsIFttZW51IG51bWJlck9mSXRlbXNdKTsKKyAgICAgICAgaW5zZXJ0ZWRPcGVu
V2l0aEl0ZW0gPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoIWluc2VydGVkT3BlbldpdGhJ
dGVtKSB7CisgICAgICAgIC8vIE5vICJDb3B5IiBpdGVtIHdhcyBmb3VuZDsgcGxhY2UgdGhlICJP
cGVuIFdpdGgiIGl0ZW0gYXQgdGhlIHRvcCBvZiB0aGUgbWVudSwgd2l0aCBhIHRyYWlsaW5nIHNl
cGFyYXRvci4KKyAgICAgICAgaW5zZXJ0T3BlbldpdGhEZWZhdWx0UERGTWVudUl0ZW0obWVudSwg
MCk7CisgICAgICAgIFttZW51IGluc2VydEl0ZW06W05TTWVudUl0ZW0gc2VwYXJhdG9ySXRlbV0g
YXRJbmRleDoxXTsKKyAgICB9CisKKyAgICByZXR1cm4gW21lbnUgYXV0b3JlbGVhc2VdOworfQor
CisvLyBNQVJLOiBOU1VzZXJJbnRlcmZhY2VWYWxpZGF0aW9ucyBQUk9UT0NPTCBJTVBMRU1FTlRB
VElPTgorCistIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxOU1ZhbGlkYXRl
ZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCit7CisgICAgU0VMIGFjdGlvbiA9IFtpdGVtIGFjdGlv
bl07CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX29wZW5XaXRoRmluZGVyOikpCisgICAg
ICAgIHJldHVybiBbX3BkZlZpZXcgZG9jdW1lbnRdICE9IG5pbDsKKyAgICByZXR1cm4gWUVTOwor
fQorCisvLyBNQVJLOiBQREZWaWV3IGRlbGVnYXRlIG1ldGhvZHMKKworLSAodm9pZClQREZWaWV3
V2lsbENsaWNrT25MaW5rOihQREZWaWV3ICopc2VuZGVyIHdpdGhVUkw6KE5TVVJMICopVVJMCit7
CisgICAgX3BkZlZpZXdDb250cm9sbGVyLT5saW5rQ2xpY2tlZChbVVJMIGFic29sdXRlU3RyaW5n
XSk7Cit9CisKKy0gKHZvaWQpUERGVmlld09wZW5QREZJbk5hdGl2ZUFwcGxpY2F0aW9uOihQREZW
aWV3ICopc2VuZGVyCit7CisgICAgX3BkZlZpZXdDb250cm9sbGVyLT5vcGVuUERGSW5GaW5kZXIo
KTsKK30KKworLSAodm9pZClQREZWaWV3U2F2ZVBERlRvRG93bmxvYWRGb2xkZXI6KFBERlZpZXcg
KilzZW5kZXIKK3sKKyAgICBfcGRmVmlld0NvbnRyb2xsZXItPnNhdmVQREZUb0Rvd25sb2Fkc0Zv
bGRlcigpOworfQorCistICh2b2lkKVBERlZpZXdQZXJmb3JtUHJpbnQ6KFBERlZpZXcgKilzZW5k
ZXIKK3sKKyAgICBfcGRmVmlld0NvbnRyb2xsZXItPnByaW50KCk7Cit9CisKKy0gKEJPT0wpZm9y
d2FyZFNjcm9sbFdoZWVsRXZlbnQ6KE5TRXZlbnQgKil3aGVlbEV2ZW50Cit7CisgICAgcmV0dXJu
IF9wZGZWaWV3Q29udHJvbGxlci0+Zm9yd2FyZFNjcm9sbFdoZWVsRXZlbnQod2hlZWxFdmVudCk7
Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NPd25QdHI8UERGVmlld0Nv
bnRyb2xsZXI+IFBERlZpZXdDb250cm9sbGVyOjpjcmVhdGUoV0tWaWV3ICp3a1ZpZXcpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQREZWaWV3Q29udHJvbGxlcih3a1ZpZXcpKTsKK30KKwor
UERGVmlld0NvbnRyb2xsZXI6OlBERlZpZXdDb250cm9sbGVyKFdLVmlldyAqd2tWaWV3KQorICAg
IDogbV93a1ZpZXcod2tWaWV3KQorICAgICwgbV93a1BERlZpZXcoYWRvcHROUyhbW1dLUERGVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbbV93a1ZpZXcgYm91bmRzXSBQREZWaWV3Q29udHJvbGxl
cjp0aGlzXSkpCisgICAgLCBtX3BkZlZpZXcoW21fd2tQREZWaWV3LmdldCgpIHBkZlZpZXddKQor
eworICAgIFttX3drVmlldyBhZGRTdWJ2aWV3Om1fd2tQREZWaWV3LmdldCgpXTsKK30KKworUERG
Vmlld0NvbnRyb2xsZXI6On5QREZWaWV3Q29udHJvbGxlcigpCit7CisgICAgW21fd2tQREZWaWV3
LmdldCgpIHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIFttX3drUERGVmlldy5nZXQoKSBpbnZh
bGlkYXRlXTsKKyAgICBtX3drUERGVmlldyA9IG51bGxwdHI7Cit9CisKK1dlYlBhZ2VQcm94eSog
UERGVmlld0NvbnRyb2xsZXI6OnBhZ2UoKSBjb25zdAoreworICAgIHJldHVybiB0b0ltcGwoW21f
d2tWaWV3IHBhZ2VSZWZdKTsKK30KKworTlNWaWV3KiBQREZWaWV3Q29udHJvbGxlcjo6cGRmVmll
dygpIGNvbnN0Cit7IAorICAgIHJldHVybiBtX3drUERGVmlldy5nZXQoKTsgCit9CisgICAgCitz
dGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY29udmVydFBvc3RTY3JpcHREYXRhU291cmNlVG9Q
REYoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKQoreworICAgIC8vIENv
bnZlcnQgUG9zdFNjcmlwdCB0byBQREYgdXNpbmcgUXVhcnR6IDJEIEFQSQorICAgIC8vIGh0dHA6
Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vR3JhcGhpY3NJbWFnaW5nL0NvbmNl
cHR1YWwvZHJhd2luZ3dpdGhxdWFydHoyZC9kcV9wc19jb252ZXJ0L2NoYXB0ZXJfMTZfc2VjdGlv
bl8xLmh0bWwKKyAgICAKKyAgICBDR1BTQ29udmVydGVyQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OyAgICAKKyAgICBSZXRhaW5QdHI8Q0dQU0NvbnZlcnRl
clJlZj4gY29udmVydGVyID0gYWRvcHRDRihDR1BTQ29udmVydGVyQ3JlYXRlKDAsICZjYWxsYmFj
a3MsIDApKTsKKyAgICBBU1NFUlQoY29udmVydGVyKTsKKworICAgIFJldGFpblB0cjxOU0RhdGE+
IG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6Y29u
c3RfY2FzdDx1aW50OF90Kj4oZGF0YVJlZmVyZW5jZS5kYXRhKCkpIGxlbmd0aDpkYXRhUmVmZXJl
bmNlLnNpemUoKSBmcmVlV2hlbkRvbmU6Tk9dKTsgICAKKworICAgIFJldGFpblB0cjxDR0RhdGFQ
cm92aWRlclJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENG
RGF0YSgoQ0ZEYXRhUmVmKW5zRGF0YS5nZXQoKSkpOworICAgIEFTU0VSVChwcm92aWRlcik7CisK
KyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gcmVzdWx0ID0gYWRvcHRDRihDRkRhdGFD
cmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBBU1NFUlQocmVzdWx0
KTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0dEYXRhQ29uc3VtZXJSZWY+IGNvbnN1bWVyID0gYWRv
cHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZVdpdGhDRkRhdGEocmVzdWx0LmdldCgpKSk7CisgICAg
QVNTRVJUKGNvbnN1bWVyKTsKKyAgICAKKyAgICBDR1BTQ29udmVydGVyQ29udmVydChjb252ZXJ0
ZXIuZ2V0KCksIHByb3ZpZGVyLmdldCgpLCBjb25zdW1lci5nZXQoKSwgMCk7CisKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIFBERlZpZXdDb250cm9sbGVyOjpzZXRQREZEb2N1bWVudERhdGEoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKQoreworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSht
aW1lVHlwZSwgImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiKSkgeworICAgICAgICBtX3BkZkRhdGEg
PSBjb252ZXJ0UG9zdFNjcmlwdERhdGFTb3VyY2VUb1BERihkYXRhUmVmZXJlbmNlKTsKKyAgICAg
ICAgaWYgKCFtX3BkZkRhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3VnZ2Vz
dGVkRmlsZW5hbWUgPSBTdHJpbmcoc3VnZ2VzdGVkRmlsZW5hbWUgKyAiLnBkZiIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBjb3B5IHRoZSBkYXRhLgorICAgICAgICBt
X3BkZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBkYXRhUmVmZXJlbmNlLmRhdGEoKSwg
ZGF0YVJlZmVyZW5jZS5zaXplKCkpKTsKKyAgICAgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1
Z2dlc3RlZEZpbGVuYW1lOworICAgIH0KKworICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRm
RG9jdW1lbnQgPSBhZG9wdE5TKFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0aERh
dGE6KE5TRGF0YSAqKW1fcGRmRGF0YS5nZXQoKV0pOworICAgIFttX3drUERGVmlldy5nZXQoKSBz
ZXREb2N1bWVudDpwZGZEb2N1bWVudC5nZXQoKV07Cit9CisKK2RvdWJsZSBQREZWaWV3Q29udHJv
bGxlcjo6em9vbUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFttX3BkZlZpZXcgc2NhbGVG
YWN0b3JdOworfQorCit2b2lkIFBERlZpZXdDb250cm9sbGVyOjpzZXRab29tRmFjdG9yKGRvdWJs
ZSB6b29tRmFjdG9yKQoreworICAgIFttX3BkZlZpZXcgc2V0U2NhbGVGYWN0b3I6em9vbUZhY3Rv
cl07Cit9CisKK0NsYXNzIFBERlZpZXdDb250cm9sbGVyOjpwZGZEb2N1bWVudENsYXNzKCkKK3sK
KyAgICBzdGF0aWMgQ2xhc3MgcGRmRG9jdW1lbnRDbGFzcyA9IFtwZGZLaXRCdW5kbGUoKSBjbGFz
c05hbWVkOkAiUERGRG9jdW1lbnQiXTsKKyAgICAKKyAgICByZXR1cm4gcGRmRG9jdW1lbnRDbGFz
czsKK30KKworQ2xhc3MgUERGVmlld0NvbnRyb2xsZXI6OnBkZlByZXZpZXdWaWV3Q2xhc3MoKQor
eworICAgIHN0YXRpYyBDbGFzcyBwZGZQcmV2aWV3Vmlld0NsYXNzID0gW3BkZktpdEJ1bmRsZSgp
IGNsYXNzTmFtZWQ6QCJQREZQcmV2aWV3VmlldyJdOworICAgIAorICAgIHJldHVybiBwZGZQcmV2
aWV3Vmlld0NsYXNzOworfQorCitib29sIFBERlZpZXdDb250cm9sbGVyOjpmb3J3YXJkU2Nyb2xs
V2hlZWxFdmVudChOU0V2ZW50ICp3aGVlbEV2ZW50KQoreworICAgIENHRmxvYXQgZGVsdGFYID0g
W3doZWVsRXZlbnQgZGVsdGFYXTsKKyAgICBpZiAoKGRlbHRhWCA+IDAgJiYgIXBhZ2UoKS0+Y2Fu
R29CYWNrKCkpIHx8IChkZWx0YVggPCAwICYmICFwYWdlKCktPmNhbkdvRm9yd2FyZCgpKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgW21fd2tWaWV3IHNjcm9sbFdoZWVsOndoZWVsRXZl
bnRdOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgSU1QIG9sZFBERlZpZXdTY3JvbGxW
aWV3X3Njcm9sbFdoZWVsOworCitzdGF0aWMgV0tQREZWaWV3ICpmaW5kRW5jbG9zaW5nV0tQREZW
aWV3KE5TVmlldyAqdmlldykKK3sKKyAgICBmb3IgKE5TVmlldyAqc3VwZXJ2aWV3ID0gW3ZpZXcg
c3VwZXJ2aWV3XTsgc3VwZXJ2aWV3OyBzdXBlcnZpZXcgPSBbc3VwZXJ2aWV3IHN1cGVydmlld10p
IHsKKyAgICAgICAgaWYgKFtzdXBlcnZpZXcgaXNLaW5kT2ZDbGFzczpbV0tQREZWaWV3IGNsYXNz
XV0pCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tQREZWaWV3ICo+KHN1cGVydmll
dyk7CisgICAgfQorCisgICAgcmV0dXJuIG5pbDsKK30KKworc3RhdGljIHZvaWQgUERGVmlld1Nj
cm9sbFZpZXdfc2Nyb2xsV2hlZWwoTlNTY3JvbGxWaWV3KiBzZWxmLCBTRUwgX2NtZCwgTlNFdmVu
dCAqd2hlZWxFdmVudCkKK3sKKyAgICBDR0Zsb2F0IGRlbHRhWCA9IFt3aGVlbEV2ZW50IGRlbHRh
WF07CisgICAgQ0dGbG9hdCBkZWx0YVkgPSBbd2hlZWxFdmVudCBkZWx0YVldOworCisgICAgTlNT
aXplIGNvbnRlbnRzU2l6ZSA9IFtbc2VsZiBkb2N1bWVudFZpZXddIGJvdW5kc10uc2l6ZTsKKyAg
ICBOU1JlY3QgdmlzaWJsZVJlY3QgPSBbc2VsZiBkb2N1bWVudFZpc2libGVSZWN0XTsKKworICAg
IC8vIFdlIG9ubHkgd2FudCB0byBmb3J3YXJkIHRoZSB3aGVlbCBldmVudHMgaWYgdGhlIGhvcml6
b250YWwgZGVsdGEgaXMgbm9uLXplcm8sCisgICAgLy8gYW5kIG9ubHkgaWYgd2UncmUgcGlubmVk
IHRvIGVpdGhlciB0aGUgbGVmdCBvciByaWdodCBzaWRlLgorICAgIC8vIFdlIGFsc28gbmV2ZXIg
d2FudCB0byBmb3J3YXJkIG1vbWVudHVtIHNjcm9sbCBldmVudHMuCisgICAgaWYgKFt3aGVlbEV2
ZW50IG1vbWVudHVtUGhhc2VdID09IE5TRXZlbnRQaGFzZU5vbmUgJiYgZGVsdGFYICYmIGZhYnNm
KGRlbHRhWSkgPCBmYWJzZihkZWx0YVgpCisgICAgICAgICYmICgoZGVsdGFYID4gMCAmJiB2aXNp
YmxlUmVjdC5vcmlnaW4ueCA8PSAwKSB8fCAoZGVsdGFYIDwgMCAmJiBjb250ZW50c1NpemUud2lk
dGggPD0gTlNNYXhYKHZpc2libGVSZWN0KSkpKSB7CisgICAgCisgICAgICAgIGlmIChXS1BERlZp
ZXcgKnBkZlZpZXcgPSBmaW5kRW5jbG9zaW5nV0tQREZWaWV3KHNlbGYpKSB7CisgICAgICAgICAg
ICBpZiAoW3BkZlZpZXcgZm9yd2FyZFNjcm9sbFdoZWVsRXZlbnQ6d2hlZWxFdmVudF0pCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgd3RmQ2FsbElNUDx2
b2lkPihvbGRQREZWaWV3U2Nyb2xsVmlld19zY3JvbGxXaGVlbCwgc2VsZiwgX2NtZCwgd2hlZWxF
dmVudCk7Cit9CisKK05TQnVuZGxlKiBQREZWaWV3Q29udHJvbGxlcjo6cGRmS2l0QnVuZGxlKCkK
K3sKKyAgICBzdGF0aWMgTlNCdW5kbGUgKnBkZktpdEJ1bmRsZTsKKyAgICBpZiAocGRmS2l0QnVu
ZGxlKQorICAgICAgICByZXR1cm4gcGRmS2l0QnVuZGxlOworCisgICAgTlNTdHJpbmcgKnBkZktp
dFBhdGggPSBbX05TUGF0aEZvclN5c3RlbUZyYW1ld29yayhAIlF1YXJ0ei5mcmFtZXdvcmsiKSBz
dHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIi9GcmFtZXdvcmtzL1BERktpdC5mcmFtZXdvcmsiXTsK
KyAgICBpZiAoIXBkZktpdFBhdGgpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBmaW5k
IFBERktpdC5mcmFtZXdvcmsiKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICBw
ZGZLaXRCdW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6cGRmS2l0UGF0aF07CisgICAg
aWYgKCFbcGRmS2l0QnVuZGxlIGxvYWRdKQorICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGxv
YWQgUERGS2l0LmZyYW1ld29yayIpOworCisgICAgaWYgKENsYXNzIHBkZlZpZXdTY3JvbGxWaWV3
Q2xhc3MgPSBbcGRmS2l0QnVuZGxlIGNsYXNzTmFtZWQ6QCJQREZWaWV3U2Nyb2xsVmlldyJdKSB7
CisgICAgICAgIGlmIChNZXRob2Qgc2Nyb2xsV2hlZWwgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhv
ZChwZGZWaWV3U2Nyb2xsVmlld0NsYXNzLCBAc2VsZWN0b3Ioc2Nyb2xsV2hlZWw6KSkpCisgICAg
ICAgICAgICBvbGRQREZWaWV3U2Nyb2xsVmlld19zY3JvbGxXaGVlbCA9IG1ldGhvZF9zZXRJbXBs
ZW1lbnRhdGlvbihzY3JvbGxXaGVlbCwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KFBERlZpZXdTY3Jv
bGxWaWV3X3Njcm9sbFdoZWVsKSk7CisgICAgfQorCisgICAgcmV0dXJuIHBkZktpdEJ1bmRsZTsK
K30KKworTlNQcmludE9wZXJhdGlvbiAqUERGVmlld0NvbnRyb2xsZXI6Om1ha2VQcmludE9wZXJh
dGlvbihOU1ByaW50SW5mbyAqcHJpbnRJbmZvKQoreworICAgIHJldHVybiBbW21fcGRmVmlldyBk
b2N1bWVudF0gZ2V0UHJpbnRPcGVyYXRpb25Gb3JQcmludEluZm86cHJpbnRJbmZvIGF1dG9Sb3Rh
dGU6WUVTXTsKK30KKwordm9pZCBQREZWaWV3Q29udHJvbGxlcjo6b3BlblBERkluRmluZGVyKCkK
K3sKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIG9wZW4gdGhlIFBERiB1bnRpbCB3ZSBoYXZlIGEg
ZG9jdW1lbnQgdG8gd3JpdGUuIChzZWUgNDg5MjUyNSkuCisgICAgaWYgKCFbbV9wZGZWaWV3IGRv
Y3VtZW50XSkgeworICAgICAgICBOU0JlZXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghbV90ZW1wb3JhcnlQREZVVUlEKSB7CisgICAgICAgIEFTU0VSVChtX3BkZkRhdGEp
OworICAgICAgICBtX3RlbXBvcmFyeVBERlVVSUQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5n
KCk7CisgICAgICAgIHBhZ2UoKS0+c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhO
YXRpdmVBcHBsaWNhdGlvblJhdyhtX3N1Z2dlc3RlZEZpbGVuYW1lLmdldCgpLCBwYWdlKCktPm1h
aW5GcmFtZSgpLT51cmwoKSwgQ0ZEYXRhR2V0Qnl0ZVB0cihtX3BkZkRhdGEuZ2V0KCkpLCBDRkRh
dGFHZXRMZW5ndGgobV9wZGZEYXRhLmdldCgpKSwgbV90ZW1wb3JhcnlQREZVVUlEKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHBhZ2UoKS0+b3BlblBERkZyb21UZW1wb3JhcnlGb2xk
ZXJXaXRoTmF0aXZlQXBwbGljYXRpb24obV90ZW1wb3JhcnlQREZVVUlEKTsKK30KKworc3RhdGlj
IHZvaWQgcmVsZWFzZUNGRGF0YSh1bnNpZ25lZCBjaGFyKiwgY29uc3Qgdm9pZCogZGF0YSkKK3sK
KyAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoZGF0YSkgPT0gQ0ZEYXRhR2V0VHlwZUlEKCkpOworCisg
ICAgLy8gQmFsYW5jZWQgYnkgQ0ZSZXRhaW4gaW4gc2F2ZVBERlRvRG93bmxvYWRzRm9sZGVyLgor
ICAgIENGUmVsZWFzZShkYXRhKTsKK30KKwordm9pZCBQREZWaWV3Q29udHJvbGxlcjo6c2F2ZVBE
RlRvRG93bmxvYWRzRm9sZGVyKCkKK3sKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHdyaXRlIHRo
ZSBmaWxlIHVudGlsIHdlIGhhdmUgYSBkb2N1bWVudCB0byB3cml0ZS4gKHNlZSA1MjY3NjA3KS4K
KyAgICBpZiAoIVttX3BkZlZpZXcgZG9jdW1lbnRdKSB7CisgICAgICAgIE5TQmVlcCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1fcGRmRGF0YSk7CisKKyAgICAvLyBC
YWxhbmNlZCBieSBDRlJlbGVhc2UgaW4gcmVsZWFzZUNGRGF0YS4KKyAgICBDRlJldGFpbihtX3Bk
ZkRhdGEuZ2V0KCkpOworCisgICAgUmVmUHRyPFdlYkRhdGE+IGRhdGEgPSBXZWJEYXRhOjpjcmVh
dGVXaXRob3V0Q29weWluZyhDRkRhdGFHZXRCeXRlUHRyKG1fcGRmRGF0YS5nZXQoKSksIENGRGF0
YUdldExlbmd0aChtX3BkZkRhdGEuZ2V0KCkpLCByZWxlYXNlQ0ZEYXRhLCBtX3BkZkRhdGEuZ2V0
KCkpOworCisgICAgcGFnZSgpLT5zYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyKG1fc3Vn
Z2VzdGVkRmlsZW5hbWUuZ2V0KCksIHBhZ2UoKS0+bWFpbkZyYW1lKCktPm1pbWVUeXBlKCksIHBh
Z2UoKS0+bWFpbkZyYW1lKCktPnVybCgpLCBkYXRhLmdldCgpKTsKK30KKwordm9pZCBQREZWaWV3
Q29udHJvbGxlcjo6bGlua0NsaWNrZWQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgTlNFdmVu
dCogbnNFdmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOworICAgIFdlYk1vdXNlRXZlbnQgZXZl
bnQ7CisgICAgc3dpdGNoIChbbnNFdmVudCB0eXBlXSkgeworICAgIGNhc2UgTlNMZWZ0TW91c2VV
cDoKKyAgICBjYXNlIE5TUmlnaHRNb3VzZVVwOgorICAgIGNhc2UgTlNPdGhlck1vdXNlVXA6Cisg
ICAgICAgIGV2ZW50ID0gV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KG5zRXZl
bnQsIG1fcGRmVmlldyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRm9yIG5vbiBtb3VzZS1j
bGlja3Mgb3IgZm9yIGtleWJvYXJkIGV2ZW50cywgcGFzcyBhbiBlbXB0eSBXZWJNb3VzZUV2ZW50
CisgICAgICAgIC8vIHRocm91Z2guICBUaGUgZXZlbnQgaXMgb25seSB1c2VkIGJ5IHRoZSBXZWJG
cmFtZUxvYWRlckNsaWVudCB0byBkZXRlcm1pbmUKKyAgICAgICAgLy8gdGhlIG1vZGlmaWVyIGtl
eXMgYW5kIHdoaWNoIG1vdXNlIGJ1dHRvbiBpcyBkb3duLiAgVGhlc2UgcXVlcmllcyB3aWxsIGJl
CisgICAgICAgIC8vIHZhbGlkIHdpdGggYW4gZW1wdHkgZXZlbnQuCisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBwYWdlKCktPmxpbmtDbGlja2VkKHVybCwgZXZlbnQpOworfQorCit2
b2lkIFBERlZpZXdDb250cm9sbGVyOjpwcmludCgpCit7CisgICAgcGFnZSgpLT5wcmludE1haW5G
cmFtZSgpOworfQorCit2b2lkIFBERlZpZXdDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50
KQoreworICAgIEJPT0wgZm9yd2FyZCA9ICEob3B0aW9ucyAmIEZpbmRPcHRpb25zQmFja3dhcmRz
KTsKKyAgICBCT09MIGNhc2VGbGFnID0gIShvcHRpb25zICYgRmluZE9wdGlvbnNDYXNlSW5zZW5z
aXRpdmUpOworICAgIEJPT0wgd3JhcEZsYWcgPSBvcHRpb25zICYgRmluZE9wdGlvbnNXcmFwQXJv
dW5kOworCisgICAgUERGU2VsZWN0aW9uICpzZWxlY3Rpb24gPSBbbV93a1BERlZpZXcuZ2V0KCkg
X25leHRNYXRjaEZvcjpzdHJpbmcgZGlyZWN0aW9uOmZvcndhcmQgY2FzZVNlbnNpdGl2ZTpjYXNl
RmxhZyB3cmFwOndyYXBGbGFnIGZyb21TZWxlY3Rpb246W21fcGRmVmlldyBjdXJyZW50U2VsZWN0
aW9uXSBzdGFydEluU2VsZWN0aW9uOk5PXTsKKyAgICBpZiAoIXNlbGVjdGlvbikgeworICAgICAg
ICBwYWdlKCktPmRpZEZhaWxUb0ZpbmRTdHJpbmcoc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIE5TVUludGVnZXIgbWF0Y2hDb3VudDsKKyAgICBpZiAoIW1heE1hdGNoQ291
bnQpIHsKKyAgICAgICAgLy8gSWYgdGhlIG1heCB3YXMgemVybywgYW55IHJlc3VsdCBtZWFucyB3
ZSBleGNlZWRlZCB0aGUgbWF4LiBXZSBjYW4gc2tpcCBjb21wdXRpbmcgdGhlIGFjdHVhbCBjb3Vu
dC4KKyAgICAgICAgbWF0Y2hDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrV0tNb3JlVGhh
bk1heGltdW1NYXRjaENvdW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtYXRjaENvdW50ID0g
W21fd2tQREZWaWV3LmdldCgpIF9jb3VudE1hdGNoZXM6c3RyaW5nIGNhc2VTZW5zaXRpdmU6Y2Fz
ZUZsYWddOworICAgICAgICBpZiAobWF0Y2hDb3VudCA+IG1heE1hdGNoQ291bnQpCisgICAgICAg
ICAgICBtYXRjaENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtXS01vcmVUaGFuTWF4aW11
bU1hdGNoQ291bnQpOworICAgIH0KKworICAgIFttX3BkZlZpZXcgc2V0Q3VycmVudFNlbGVjdGlv
bjpzZWxlY3Rpb25dOworICAgIFttX3BkZlZpZXcgc2Nyb2xsU2VsZWN0aW9uVG9WaXNpYmxlOm5p
bF07CisgICAgcGFnZSgpLT5kaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hDb3VudCk7Cit9CisK
K3ZvaWQgUERGVmlld0NvbnRyb2xsZXI6OmNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcm
IHN0cmluZywgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKK3sK
KyAgICBCT09MIGNhc2VGbGFnID0gIShvcHRpb25zICYgRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRp
dmUpOworCisgICAgTlNVSW50ZWdlciBtYXRjaENvdW50ID0gW21fd2tQREZWaWV3LmdldCgpIF9j
b3VudE1hdGNoZXM6c3RyaW5nIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWddOworICAgIGlmIChtYXRj
aENvdW50ID4gbWF4TWF0Y2hDb3VudCkKKyAgICAgICAgbWF0Y2hDb3VudCA9IG1heE1hdGNoQ291
bnQ7CisgICAgcGFnZSgpLT5kaWRDb3VudFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaENvdW50
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWIzY2Q0OTMxZDhhMzBlYzIyMDJl
YTUzYWE5YmE4ZmIzNDZiYTIzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgUGFnZUNsaWVudEltcGxfaAorI2RlZmluZSBQYWdlQ2xpZW50SW1w
bF9oCisKKyNpbmNsdWRlICJDb3JyZWN0aW9uUGFuZWwuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworQGNsYXNzIFdLRWRpdG9yVW5kb1RhcmdldE9iakM7CitAY2xhc3Mg
V0tWaWV3OworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBBbHRlcm5hdGl2ZVRleHRVSUNv
bnRyb2xsZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgRmluZEluZGljYXRvcldp
bmRvdzsKKworY2xhc3MgUGFnZUNsaWVudEltcGwgZmluYWwgOiBwdWJsaWMgUGFnZUNsaWVudAor
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAsIHB1YmxpYyBXZWJGdWxsU2NyZWVuTWFu
YWdlclByb3h5Q2xpZW50CisjZW5kaWYKKyAgICB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUGFn
ZUNsaWVudEltcGwoV0tWaWV3ICopOworICAgIHZpcnR1YWwgflBhZ2VDbGllbnRJbXBsKCk7Cisg
ICAgCisgICAgdm9pZCB2aWV3V2lsbE1vdmVUb0Fub3RoZXJXaW5kb3coKTsKKworcHJpdmF0ZToK
KyAgICAvLyBQYWdlQ2xpZW50CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0Fy
ZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRW
aWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzcGxheVZpZXcoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2Nyb2xsVmlldygpOworICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJl
Y3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CisKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFNpemUgdmlld1NpemUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3V2lu
ZG93QWN0aXZlKCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld0ZvY3VzZWQoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNWaWV3VmlzaWJsZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxl
T3JPY2NsdWRlZCgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdJbldpbmRvdygpOworICAgIHZp
cnR1YWwgYm9vbCBpc1Zpc3VhbGx5SWRsZSgpOworICAgIHZpcnR1YWwgTGF5ZXJIb3N0aW5nTW9k
ZSB2aWV3TGF5ZXJIb3N0aW5nTW9kZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgQ29sb3JTcGFj
ZURhdGEgY29sb3JTcGFjZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nUm9vdExheWVyKENBTGF5ZXIgKikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBDQUxheWVyICphY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZEV4aXQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFnZUNsb3NlZCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcHJlZmVyZW5jZXNEaWRDaGFuZ2UoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiBvbGRUb29sVGlwLCBjb25z
dCBTdHJpbmcmIG5ld1Rvb2xUaXApOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9y
TWFpbkZyYW1lKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBX
ZWJDb3JlOjpDdXJzb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxN
b3VzZU1vdmVzKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3Bl
cnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+
LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVk
aXRDb21tYW5kcygpOworICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6
OlVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVBy
b3h5OjpVbmRvT3JSZWRvKTsKKyAgICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1h
bmQ+Jik7CisgICAgdmlydHVhbCBib29sIGV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2UoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBQYXNzUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRQcm9taXNlZERhdGEoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGltYWdlQnVmZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVybCwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGFyY2hpdmVCdWZmZXIpOworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVTZWN1cmVJbnB1dFN0YXRlKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0
U2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlJbnB1
dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uKCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9V
c2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3Jl
OjpJbnRQb2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3Qg
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKTsKKworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHko
V2ViUGFnZVByb3h5Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJv
eHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5Kik7CisKKyNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9DT0xPUikKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29sb3JQaWNrZXI+
IGNyZWF0ZUNvbG9yUGlja2VyKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBp
bml0aWFsQ29sb3IsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyNlbmRpZgorCisgICAgdm9p
ZCBzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFkZU91
dCwgYm9vbCBhbmltYXRlKTsKKworICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKKwor
ICAgIHZpcnR1YWwgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHRha2VWaWV3U25hcHNob3QoKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUo
Y29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBj
bGVhckN1c3RvbVN3aXBlVmlld3MoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBhY2Nl
c3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZCh1
aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgYm9vbCBwbHVnaW5IYXNG
b2N1c0FuZFdpbmRvd0hhc0ZvY3VzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGx1Z2luQ29tcGxl
eFRleHRJbnB1dFN0YXRlKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVy
LCBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpOworCisgICAgdmlydHVhbCB2b2lkIG1ha2VG
aXJzdFJlc3BvbmRlcigpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRGljdGlv
bmFyeUxvb2t1cChjb25zdCBBdHRyaWJ1dGVkU3RyaW5nJiwgY29uc3QgRGljdGlvbmFyeVBvcHVw
SW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzRGljdGlvbmFyeUxvb2t1cFBhbmVsKCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpBbHRlcm5h
dGl2ZVRleHRUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFj
ZW1lbnRTdHJpbmdzKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChX
ZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKKyAgICB2aXJ0dWFs
IFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNt
aXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShXZWJDb3JlOjpBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb21tZW5kZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShp
bnQzMl90IG5ld1N0eWxlKTsKKworICAgIHZpcnR1YWwgV0tWaWV3KiB3a1ZpZXcoKSBjb25zdCB7
IHJldHVybiBtX3drVmlldzsgfQorICAgIHZpcnR1YWwgdm9pZCBpbnRyaW5zaWNDb250ZW50U2l6
ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRyaW5zaWNDb250ZW50U2l6ZSkg
b3ZlcnJpZGU7CisKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKKyAgICB2aXJ0dWFs
IHVpbnQ2NF90IGFkZERpY3RhdGlvbkFsdGVybmF0aXZlcyhjb25zdCBSZXRhaW5QdHI8TlNUZXh0
QWx0ZXJuYXRpdmVzPiYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVEaWN0YXRpb25BbHRlcm5h
dGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisgICAgdmlydHVhbCB2b2lkIHNob3dE
aWN0YXRpb25BbHRlcm5hdGl2ZVVJKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdC
b3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCk7CisgICAgdmlydHVh
bCBWZWN0b3I8U3RyaW5nPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9u
Q29udGV4dCk7CisjZW5kaWYKKworICAgIC8vIEF1eGlsaWFyeSBDbGllbnQgQ3JlYXRpb24KKyNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNs
aWVudCYgZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpIG92ZXJyaWRlOworI2VuZGlmCisK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgLy8gV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzRnVsbFNjcmVlbigpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhpdEZ1bGxTY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnYW5FbnRlckZ1
bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBmaW5hbEZyYW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
YW5FeGl0RnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpIG92ZXJyaWRlOworI2VuZGlmCisKKyAg
ICBOU1ZpZXcgKmFjdGl2ZVZpZXcoKSBjb25zdDsKKworICAgIFdLVmlldyAqbV93a1ZpZXc7Cisg
ICAgUmV0YWluUHRyPFdLRWRpdG9yVW5kb1RhcmdldE9iakM+IG1fdW5kb1RhcmdldDsKKyNpZiBV
U0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCisgICAgQ29ycmVjdGlvblBhbmVsIG1fY29ycmVjdGlv
blBhbmVsOworI2VuZGlmCisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgT3du
UHRyPFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcj4gbV9hbHRlcm5hdGl2ZVRl
eHRVSUNvbnRyb2xsZXI7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gUGFnZUNsaWVudEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvUGFnZUNsaWVudEltcGwubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJhNDY2MzAxOTIzMmQ0NDQ1YTAwZjVm
NzQ3MmZkYWM3NjVhOWY4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KQEAgLTAsMCArMSw2NDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCisK
KyNpbXBvcnQgIkF0dHJpYnV0ZWRTdHJpbmcuaCIKKyNpbXBvcnQgIkNvbG9yU3BhY2VEYXRhLmgi
CisjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCisjaW1wb3J0ICJEaWN0aW9uYXJ5UG9wdXBJbmZv
LmgiCisjaW1wb3J0ICJGaW5kSW5kaWNhdG9yLmgiCisjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50LmgiCisjaW1wb3J0ICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCisjaW1wb3J0ICJTdHJp
bmdVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIldLQVBJQ2FzdC5oIgorI2ltcG9ydCAiV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgorI2ltcG9ydCAi
V0tUaHVtYm5haWxWaWV3LmgiCisjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAi
V2ViQ29sb3JQaWNrZXJNYWMuaCIKKyNpbXBvcnQgIldlYkNvbnRleHRNZW51UHJveHlNYWMuaCIK
KyNpbXBvcnQgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKKyNpbXBvcnQgIldlYlBvcHVwTWVudVBy
b3h5TWFjLmgiCisjaW1wb3J0ICJXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLmgiCisjaW1wb3J0IDxX
ZWJDb3JlL0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9C
aXRtYXBJbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9DdXJzb3IuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvRmxvYXRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9JbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW1wb3J0IDxXZWJDb3JlL1No
YXJlZEJ1ZmZlci5oPgorI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjaW1wb3J0
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
I2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorI2ltcG9ydCA8QXBwS2l0L05TVGV4dEFs
dGVybmF0aXZlcy5oPgorI2VuZGlmCisKK0BpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoV2ViTlNB
cHBsaWNhdGlvbkRldGFpbHMpCistIChOU0N1cnNvciAqKV9jdXJzb3JSZWN0Q3Vyc29yOworQGVu
ZAorCisjaWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQorQGludGVyZmFjZSBO
U1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQorLSAoQk9PTClfaG9zdHNMYXllcnNJbldpbmRv
d1NlcnZlcjsKK0BlbmQKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CisKK0BpbnRlcmZhY2UgV0tFZGl0Q29tbWFuZE9iakMgOiBOU09i
amVjdAoreworICAgIFJlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBtX2NvbW1hbmQ7Cit9Cist
IChpZClpbml0V2l0aFdlYkVkaXRDb21tYW5kUHJveHk6KFBhc3NSZWZQdHI8V2ViRWRpdENvbW1h
bmRQcm94eT4pY29tbWFuZDsKKy0gKFdlYkVkaXRDb21tYW5kUHJveHkqKWNvbW1hbmQ7CitAZW5k
CisKK0BpbnRlcmZhY2UgV0tFZGl0b3JVbmRvVGFyZ2V0T2JqQyA6IE5TT2JqZWN0CistICh2b2lk
KXVuZG9FZGl0aW5nOihpZClzZW5kZXI7CistICh2b2lkKXJlZG9FZGl0aW5nOihpZClzZW5kZXI7
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0VkaXRDb21tYW5kT2JqQworCistIChpZClpbml0
V2l0aFdlYkVkaXRDb21tYW5kUHJveHk6KFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4p
Y29tbWFuZAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgbV9jb21tYW5kID0gY29tbWFuZDsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAoV2ViRWRpdENvbW1hbmRQcm94eSopY29tbWFuZAoreworICAgIHJldHVy
biBtX2NvbW1hbmQuZ2V0KCk7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLRWRpdG9y
VW5kb1RhcmdldE9iakMKKworLSAodm9pZCl1bmRvRWRpdGluZzooaWQpc2VuZGVyCit7CisgICAg
QVNTRVJUKFtzZW5kZXIgaXNLaW5kT2ZDbGFzczpbV0tFZGl0Q29tbWFuZE9iakMgY2xhc3NdXSk7
CisgICAgW3NlbmRlciBjb21tYW5kXS0+dW5hcHBseSgpOworfQorCistICh2b2lkKXJlZG9FZGl0
aW5nOihpZClzZW5kZXIKK3sKKyAgICBBU1NFUlQoW3NlbmRlciBpc0tpbmRPZkNsYXNzOltXS0Vk
aXRDb21tYW5kT2JqQyBjbGFzc11dKTsKKyAgICBbc2VuZGVyIGNvbW1hbmRdLT5yZWFwcGx5KCk7
Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1BhZ2VDbGllbnRJbXBsOjpQYWdl
Q2xpZW50SW1wbChXS1ZpZXcqIHdrVmlldykKKyAgICA6IG1fd2tWaWV3KHdrVmlldykKKyAgICAs
IG1fdW5kb1RhcmdldChhZG9wdE5TKFtbV0tFZGl0b3JVbmRvVGFyZ2V0T2JqQyBhbGxvY10gaW5p
dF0pKQorI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgICwgbV9hbHRlcm5hdGl2
ZVRleHRVSUNvbnRyb2xsZXIoYWRvcHRQdHIobmV3IEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxl
cikpCisjZW5kaWYKK3sKK30KKworUGFnZUNsaWVudEltcGw6On5QYWdlQ2xpZW50SW1wbCgpCit7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6
Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCit7CisgICAgcmV0dXJuIFttX3drVmlldyBfY3JlYXRl
RHJhd2luZ0FyZWFQcm94eV07Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldFZpZXdOZWVk
c0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzcGxheVZpZXcoKQorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjpjYW5T
Y3JvbGxWaWV3KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OnNjcm9sbFZpZXcoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYg
c2Nyb2xsT2Zmc2V0KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitJbnRTaXpl
IFBhZ2VDbGllbnRJbXBsOjp2aWV3U2l6ZSgpCit7CisgICAgcmV0dXJuIEludFNpemUoW21fd2tW
aWV3IGJvdW5kc10uc2l6ZSk7Cit9CisKK05TVmlldyAqUGFnZUNsaWVudEltcGw6OmFjdGl2ZVZp
ZXcoKSBjb25zdAoreworI2lmIFdLX0FQSV9FTkFCTEVECisgICAgcmV0dXJuIG1fd2tWaWV3Ll90
aHVtYm5haWxWaWV3ID8gKE5TVmlldyAqKW1fd2tWaWV3Ll90aHVtYm5haWxWaWV3IDogKE5TVmll
dyAqKW1fd2tWaWV3OworI2Vsc2UKKyAgICByZXR1cm4gbV93a1ZpZXc7CisjZW5kaWYKK30KKwor
Ym9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3V2luZG93QWN0aXZlKCkKK3sKKyAgICBOU1dpbmRv
dyAqYWN0aXZlVmlld1dpbmRvdyA9IGFjdGl2ZVZpZXcoKS53aW5kb3c7CisgICAgcmV0dXJuIGFj
dGl2ZVZpZXdXaW5kb3cuaXNLZXlXaW5kb3cgfHwgW05TQXBwIGtleVdpbmRvd10gPT0gYWN0aXZl
Vmlld1dpbmRvdzsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCit7
CisgICAgcmV0dXJuIFttX3drVmlldyBfaXNGb2N1c2VkXTsKK30KKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6bWFrZUZpcnN0UmVzcG9uZGVyKCkKK3sKKyAgICAgW1ttX3drVmlldyB3aW5kb3ddIG1h
a2VGaXJzdFJlc3BvbmRlcjptX3drVmlld107Cit9CisgICAgCitib29sIFBhZ2VDbGllbnRJbXBs
Ojppc1ZpZXdWaXNpYmxlKCkKK3sKKyAgICBOU1ZpZXcgKmFjdGl2ZVZpZXcgPSB0aGlzLT5hY3Rp
dmVWaWV3KCk7CisgICAgTlNXaW5kb3cgKmFjdGl2ZVZpZXdXaW5kb3cgPSBhY3RpdmVWaWV3Lndp
bmRvdzsKKworICAgIGlmICghYWN0aXZlVmlld1dpbmRvdykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFhY3RpdmVWaWV3V2luZG93LmlzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSAxMDgwCisg
ICAgLy8gTW91bnRhaW4gTGlvbiBhbmQgcHJldmlvdXMgZG8gbm90IHN1cHBvcnQgb2NjbHVzaW9u
IG5vdGlmaWNhdGlvbnMsIGFuZCBhcyBzdWNoIHdpbGwKKyAgICAvLyBjb250aW51ZSB0byByZXBv
cnQgYXMgInZpc2libGUiIHdoZW4gbm90IG9uIHRoZSBhY3RpdmUgc3BhY2UuCisgICAgaWYgKCFh
Y3RpdmVWaWV3V2luZG93LmlzT25BY3RpdmVTcGFjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCisKKyAgICBpZiAoYWN0aXZlVmlldy5pc0hpZGRlbk9ySGFzSGlkZGVuQW5jZXN0b3Ip
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTA5MAorICAgIGlmIChbbV93a1ZpZXcgd2luZG93T2NjbHVzaW9uRGV0ZWN0aW9u
RW5hYmxlZF0gJiYgKGFjdGl2ZVZpZXdXaW5kb3cub2NjbHVzaW9uU3RhdGUgJiBOU1dpbmRvd09j
Y2x1c2lvblN0YXRlVmlzaWJsZSkgIT0gTlNXaW5kb3dPY2NsdXNpb25TdGF0ZVZpc2libGUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1Zpc2libGVPck9jY2x1ZGVkKCkKK3sKKyAgICByZXR1
cm4gYWN0aXZlVmlldygpLndpbmRvdy5pc1Zpc2libGU7Cit9CisKK2Jvb2wgUGFnZUNsaWVudElt
cGw6OmlzVmlld0luV2luZG93KCkKK3sKKyAgICByZXR1cm4gYWN0aXZlVmlldygpLndpbmRvdzsK
K30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaXN1YWxseUlkbGUoKQoreworICAgIHJldHVy
biBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjpzaGFyZWQoKS5hcHBsaWNhdGlvbldpbmRvd01vZGlm
aWNhdGlvbnNIYXZlU3RvcHBlZCgpIHx8ICFpc1ZpZXdWaXNpYmxlKCk7Cit9CisKK0xheWVySG9z
dGluZ01vZGUgUGFnZUNsaWVudEltcGw6OnZpZXdMYXllckhvc3RpbmdNb2RlKCkKK3sKKyNpZiBI
QVZFKE9VVF9PRl9QUk9DRVNTX0xBWUVSX0hPU1RJTkcpCisgICAgaWYgKFthY3RpdmVWaWV3KCku
d2luZG93IF9ob3N0c0xheWVyc0luV2luZG93U2VydmVyXSkKKyAgICAgICAgcmV0dXJuIExheWVy
SG9zdGluZ01vZGU6Ok91dE9mUHJvY2VzczsKKyNlbmRpZgorICAgIHJldHVybiBMYXllckhvc3Rp
bmdNb2RlOjpJblByb2Nlc3M7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnZpZXdXaWxsTW92
ZVRvQW5vdGhlcldpbmRvdygpCit7CisgICAgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKK30KKwor
Q29sb3JTcGFjZURhdGEgUGFnZUNsaWVudEltcGw6OmNvbG9yU3BhY2UoKQoreworICAgIHJldHVy
biBbbV93a1ZpZXcgX2NvbG9yU3BhY2VdOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpwcm9j
ZXNzRGlkRXhpdCgpCit7CisgICAgW21fd2tWaWV3IF9wcm9jZXNzRGlkRXhpdF07Cit9CisKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQoKQoreworICAgIFttX3drVmlldyBfcGFnZUNs
b3NlZF07CisjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCisgICAgbV9hbHRlcm5hdGl2
ZVRleHRVSUNvbnRyb2xsZXItPmNsZWFyKCk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICBbbV93a1ZpZXcgX2RpZFJlbGF1bmNo
UHJvY2Vzc107Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnByZWZlcmVuY2VzRGlkQ2hhbmdl
KCkKK3sKKyAgICBbbV93a1ZpZXcgX3ByZWZlcmVuY2VzRGlkQ2hhbmdlXTsKK30KKwordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6dG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiBvbGRUb29sVGlwLCBj
b25zdCBTdHJpbmcmIG5ld1Rvb2xUaXApCit7CisgICAgW21fd2tWaWV3IF90b29sVGlwQ2hhbmdl
ZEZyb206bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhvbGRUb29sVGlwKSB0bzpuc1N0cmluZ0Zy
b21XZWJDb3JlU3RyaW5nKG5ld1Rvb2xUaXApXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZSgpCit7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBpZiAoIVtO
U0FwcCBfY3Vyc29yUmVjdEN1cnNvcl0pCisgICAgICAgIFttX3drVmlldyBfc2V0Q3Vyc29yOmN1
cnNvci5wbGF0Zm9ybUN1cnNvcigpXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vy
c29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQorewor
ICAgIFtOU0N1cnNvciBzZXRIaWRkZW5VbnRpbE1vdXNlTW92ZXM6aGlkZGVuVW50aWxNb3VzZU1v
dmVzXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0
aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpCit7Cit9CisKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFu
ZFByb3h5PiBwcnBDb21tYW5kLCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykK
K3sKKyAgICBSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4gY29tbWFuZCA9IHBycENvbW1hbmQ7
CisKKyAgICBSZXRhaW5QdHI8V0tFZGl0Q29tbWFuZE9iakM+IGNvbW1hbmRPYmpDID0gYWRvcHRO
UyhbW1dLRWRpdENvbW1hbmRPYmpDIGFsbG9jXSBpbml0V2l0aFdlYkVkaXRDb21tYW5kUHJveHk6
Y29tbWFuZF0pOworICAgIFN0cmluZyBhY3Rpb25OYW1lID0gV2ViRWRpdENvbW1hbmRQcm94eTo6
bmFtZUZvckVkaXRBY3Rpb24oY29tbWFuZC0+ZWRpdEFjdGlvbigpKTsKKworICAgIE5TVW5kb01h
bmFnZXIgKnVuZG9NYW5hZ2VyID0gW21fd2tWaWV3IHVuZG9NYW5hZ2VyXTsKKyAgICBbdW5kb01h
bmFnZXIgcmVnaXN0ZXJVbmRvV2l0aFRhcmdldDptX3VuZG9UYXJnZXQuZ2V0KCkgc2VsZWN0b3I6
KCh1bmRvT3JSZWRvID09IFdlYlBhZ2VQcm94eTo6VW5kbykgPyBAc2VsZWN0b3IodW5kb0VkaXRp
bmc6KSA6IEBzZWxlY3RvcihyZWRvRWRpdGluZzopKSBvYmplY3Q6Y29tbWFuZE9iakMuZ2V0KCld
OworICAgIGlmICghYWN0aW9uTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIFt1bmRvTWFuYWdlciBz
ZXRBY3Rpb25OYW1lOihOU1N0cmluZyAqKWFjdGlvbk5hbWVdOworfQorCit2b2lkIFBhZ2VDbGll
bnRJbXBsOjpjbGVhckFsbEVkaXRDb21tYW5kcygpCit7CisgICAgW1ttX3drVmlldyB1bmRvTWFu
YWdlcl0gcmVtb3ZlQWxsQWN0aW9uc1dpdGhUYXJnZXQ6bV91bmRvVGFyZ2V0LmdldCgpXTsKK30K
KworYm9vbCBQYWdlQ2xpZW50SW1wbDo6Y2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JS
ZWRvIHVuZG9PclJlZG8pCit7CisgICAgcmV0dXJuICh1bmRvT3JSZWRvID09IFdlYlBhZ2VQcm94
eTo6VW5kbykgPyBbW21fd2tWaWV3IHVuZG9NYW5hZ2VyXSBjYW5VbmRvXSA6IFtbbV93a1ZpZXcg
dW5kb01hbmFnZXJdIGNhblJlZG9dOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRl
VW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit7CisgICAgcmV0
dXJuICh1bmRvT3JSZWRvID09IFdlYlBhZ2VQcm94eTo6VW5kbykgPyBbW21fd2tWaWV3IHVuZG9N
YW5hZ2VyXSB1bmRvXSA6IFtbbV93a1ZpZXcgdW5kb01hbmFnZXJdIHJlZG9dOworfQorCitib29s
IFBhZ2VDbGllbnRJbXBsOjppbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50JiBldmVudCwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRz
KQoreworICAgIHJldHVybiBbbV93a1ZpZXcgX2ludGVycHJldEtleUV2ZW50OmV2ZW50Lm5hdGl2
ZUV2ZW50KCkgc2F2aW5nQ29tbWFuZHNUbzpjb21tYW5kc107Cit9CisKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OnNldERyYWdJbWFnZShjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIFBhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UsIGJvb2wgaXNMaW5rRHJhZykKK3sKKyAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gZHJhZ0NHSW1hZ2UgPSBkcmFnSW1hZ2UtPm1ha2VDR0lt
YWdlKCk7CisgICAgUmV0YWluUHRyPE5TSW1hZ2U+IGRyYWdOU0ltYWdlID0gYWRvcHROUyhbW05T
SW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpkcmFnQ0dJbWFnZS5nZXQoKSBzaXplOmRyYWdJ
bWFnZS0+c2l6ZSgpXSk7CisKKyAgICBbbV93a1ZpZXcgX3NldERyYWdJbWFnZTpkcmFnTlNJbWFn
ZS5nZXQoKSBhdDpjbGllbnRQb3NpdGlvbiBsaW5rRHJhZzppc0xpbmtEcmFnXTsKK30KKwordm9p
ZCBQYWdlQ2xpZW50SW1wbDo6c2V0UHJvbWlzZWREYXRhKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBpbWFnZUJ1ZmZlciwgY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHZpc2libGVVcmwsIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBhcmNoaXZlQnVmZmVyKQoreworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Ug
PSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CisgICAgaW1hZ2UtPnNldERhdGEoaW1hZ2VCdWZmZXIu
Z2V0KCksIHRydWUpOworICAgIFttX3drVmlldyBfc2V0UHJvbWlzZWREYXRhOmltYWdlLmdldCgp
IHdpdGhGaWxlTmFtZTpmaWxlbmFtZSB3aXRoRXh0ZW5zaW9uOmV4dGVuc2lvbiB3aXRoVGl0bGU6
dGl0bGUgd2l0aFVSTDp1cmwgd2l0aFZpc2libGVVUkw6dmlzaWJsZVVybCB3aXRoQXJjaGl2ZTph
cmNoaXZlQnVmZmVyLmdldCgpIGZvclBhc3RlYm9hcmQ6cGFzdGVib2FyZE5hbWVdOworfQorCit2
b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVTZWN1cmVJbnB1dFN0YXRlKCkKK3sKKyAgICBbbV93
a1ZpZXcgX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGVdOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpyZXNldFNlY3VyZUlucHV0U3RhdGUoKQoreworICAgIFttX3drVmlldyBfcmVzZXRTZWN1cmVJ
bnB1dFN0YXRlXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6bm90aWZ5SW5wdXRDb250ZXh0
QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpCit7CisgICAgW21fd2tWaWV3IF9ub3RpZnlJbnB1
dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9uXTsKK30KKworRmxvYXRSZWN0IFBhZ2VD
bGllbnRJbXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7
CisgICAgcmV0dXJuIFttX3drVmlldyBfY29udmVydFRvRGV2aWNlU3BhY2U6cmVjdF07Cit9CisK
K0Zsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gW21fd2tWaWV3IF9jb252ZXJ0VG9Vc2VyU3BhY2U6
cmVjdF07Cit9CisgICAKK0ludFBvaW50IFBhZ2VDbGllbnRJbXBsOjpzY3JlZW5Ub1Jvb3RWaWV3
KGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNo
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0
aW9ucyIKKyAgICBOU1BvaW50IHdpbmRvd0Nvb3JkID0gW1ttX3drVmlldyB3aW5kb3ddIGNvbnZl
cnRTY3JlZW5Ub0Jhc2U6cG9pbnRdOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorICAg
IHJldHVybiBJbnRQb2ludChbbV93a1ZpZXcgY29udmVydFBvaW50OndpbmRvd0Nvb3JkIGZyb21W
aWV3Om5pbF0pOworfQorICAgIAorSW50UmVjdCBQYWdlQ2xpZW50SW1wbDo6cm9vdFZpZXdUb1Nj
cmVlbihjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIE5TUmVjdCB0ZW1wUmVjdCA9IHJlY3Q7
CisgICAgdGVtcFJlY3QgPSBbbV93a1ZpZXcgY29udmVydFJlY3Q6dGVtcFJlY3QgdG9WaWV3Om5p
bF07CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgdGVtcFJlY3Qub3Jp
Z2luID0gW1ttX3drVmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46dGVtcFJlY3Qub3Jp
Z2luXTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdCh0ZW1wUmVjdCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5
RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQsIGJvb2wgZXZlbnRXYXNI
YW5kbGVkKQoreworICAgIFttX3drVmlldyBfZG9uZVdpdGhLZXlFdmVudDpldmVudC5uYXRpdmVF
dmVudCgpIGV2ZW50V2FzSGFuZGxlZDpldmVudFdhc0hhbmRsZWRdOworfQorCitQYXNzUmVmUHRy
PFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHko
V2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIHJldHVybiBXZWJQb3B1cE1lbnVQcm94eU1hYzo6
Y3JlYXRlKG1fd2tWaWV3LCBwYWdlKTsKK30KKworUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVBy
b3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkq
IHBhZ2UpCit7CisgICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlNYWM6OmNyZWF0ZShtX3dr
VmlldywgcGFnZSk7Cit9CisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKK1Bhc3NSZWZQ
dHI8V2ViQ29sb3JQaWNrZXI+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVDb2xvclBpY2tlcihXZWJQ
YWdlUHJveHkqIHBhZ2UsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3IsICBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBXZWJDb2xvclBpY2tlck1h
Yzo6Y3JlYXRlKHBhZ2UsIGluaXRpYWxDb2xvciwgcmVjdCwgd2tWaWV3KCkpOworfQorI2VuZGlm
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5k
SW5kaWNhdG9yPiBmaW5kSW5kaWNhdG9yLCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkKK3sK
KyAgICBbbV93a1ZpZXcgX3NldEZpbmRJbmRpY2F0b3I6ZmluZEluZGljYXRvciBmYWRlT3V0OmZh
ZGVPdXQgYW5pbWF0ZTphbmltYXRlXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6YWNjZXNz
aWJpbGl0eVdlYlByb2Nlc3NUb2tlblJlY2VpdmVkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
ZGF0YSkKK3sKKyAgICBOU0RhdGEqIHJlbW90ZVRva2VuID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVz
OmRhdGEuZGF0YSgpIGxlbmd0aDpkYXRhLnNpemUoKV07CisgICAgW21fd2tWaWV3IF9zZXRBY2Nl
c3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuOnJlbW90ZVRva2VuXTsKK30KKyAgICAKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJU
cmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKK3sKKyAgICBBU1NFUlQoIWxheWVyVHJlZUNv
bnRleHQuaXNFbXB0eSgpKTsKKworICAgIENBTGF5ZXIgKnJlbmRlckxheWVyID0gV0tNYWtlUmVu
ZGVyTGF5ZXIobGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQpOworICAgIFttX3drVmlldyBfc2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVSb290TGF5ZXI6cmVuZGVyTGF5ZXJdOworfQorCit2
b2lkIFBhZ2VDbGllbnRJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQorewor
ICAgIFttX3drVmlldyBfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVSb290TGF5ZXI6bmls
XTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKK3sKKyAgICBB
U1NFUlQoIWxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKTsKKworICAgIENBTGF5ZXIgKnJlbmRl
ckxheWVyID0gV0tNYWtlUmVuZGVyTGF5ZXIobGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQpOwor
ICAgIFttX3drVmlldyBfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVSb290TGF5ZXI6cmVu
ZGVyTGF5ZXJdOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nUm9vdExheWVyKENBTGF5ZXIgKnJvb3RMYXllcikKK3sKKyAgICBbbV93a1ZpZXcgX3Nl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlUm9vdExheWVyOnJvb3RMYXllcl07Cit9CisKK0NB
TGF5ZXIgKlBhZ2VDbGllbnRJbXBsOjphY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV93a1ZpZXcuX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
Um9vdExheWVyOworfQorCitSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gUGFnZUNsaWVudEltcGw6OnRh
a2VWaWV3U25hcHNob3QoKQoreworICAgIHJldHVybiBbbV93a1ZpZXcgX3Rha2VWaWV3U25hcHNo
b3RdOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp3aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5
V2ViQ29yZShjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBbbV93a1Zp
ZXcgX3doZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlOmV2ZW50Lm5hdGl2ZUV2ZW50KCld
OworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFu
Z2VkKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBib29sIHBsdWdp
bkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMpCit7CisgICAgW21fd2tWaWV3IF9wbHVnaW5Gb2N1
c09yV2luZG93Rm9jdXNDaGFuZ2VkOnBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMgcGx1
Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50
aWZpZXJdOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRQbHVnaW5Db21wbGV4VGV4dElu
cHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIFBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUpCit7Cisg
ICAgW21fd2tWaWV3IF9zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6cGx1Z2luQ29tcGxl
eFRleHRJbnB1dFN0YXRlIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOnBsdWdpbkNv
bXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlk
UGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgQXR0cmlidXRlZFN0cmluZyYgdGV4dCwgY29u
c3QgRGljdGlvbmFyeVBvcHVwSW5mbyYgZGljdGlvbmFyeVBvcHVwSW5mbykKK3sKKyAgICBSZXRh
aW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nID0gdGV4dC5zdHJpbmc7
CisgICAgTlNQb2ludCB0ZXh0QmFzZWxpbmVPcmlnaW4gPSBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9y
aWdpbjsKKworICAgIC8vIENvbnZlcnQgdG8gc2NyZWVuIGNvb3JkaW5hdGVzLgorICAgIHRleHRC
YXNlbGluZU9yaWdpbiA9IFttX3drVmlldyBjb252ZXJ0UG9pbnQ6dGV4dEJhc2VsaW5lT3JpZ2lu
IHRvVmlldzpuaWxdOworICAgIHRleHRCYXNlbGluZU9yaWdpbiA9IFttX3drVmlldy53aW5kb3cg
Y29udmVydFJlY3RUb1NjcmVlbjpOU01ha2VSZWN0KHRleHRCYXNlbGluZU9yaWdpbi54LCB0ZXh0
QmFzZWxpbmVPcmlnaW4ueSwgMCwgMCldLm9yaWdpbjsKKworICAgIFdLU2hvd1dvcmREZWZpbml0
aW9uV2luZG93KGF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCksIHRleHRCYXNlbGluZU9yaWdpbiwgKE5T
RGljdGlvbmFyeSAqKWRpY3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucy5nZXQoKSk7Cit9CisKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OmRpc21pc3NEaWN0aW9uYXJ5TG9va3VwUGFuZWwoKQoreworICAg
IC8vIEZJWE1FOiBXZSBkb24ndCBrbm93IHdoaWNoIHBhbmVsIHdlIGFyZSBkaXNtaXNzaW5nLCBp
dCBtYXkgbm90IGV2ZW4gYmUgaW4gdGhlIGN1cnJlbnQgcGFnZSAoc2VlIDxyZGFyOi8vcHJvYmxl
bS8xMzg3NTc2Nj4pLgorICAgIFdLSGlkZVdvcmREZWZpbml0aW9uV2luZG93KCk7Cit9CisKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OnNob3dDb3JyZWN0aW9uUGFuZWwoQWx0ZXJuYXRpdmVUZXh0VHlw
ZSB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmlu
ZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQor
eworI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKKyAgICBpZiAoIWlzVmlld1Zpc2libGUo
KSB8fCAhaXNWaWV3SW5XaW5kb3coKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlv
blBhbmVsLnNob3cobV93a1ZpZXcsIHR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
cmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncyk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbikKK3sK
KyNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCisgICAgbV9jb3JyZWN0aW9uUGFuZWwuZGlz
bWlzcyhyZWFzb24pOworI2VuZGlmCit9CisKK1N0cmluZyBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0
aXZlVGV4dCByZWFzb24pCit7CisjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQorICAgIHJl
dHVybiBtX2NvcnJlY3Rpb25QYW5lbC5kaXNtaXNzKHJlYXNvbik7CisjZWxzZQorICAgIHJldHVy
biBTdHJpbmcoKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlIHJlc3BvbnNlVHlw
ZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dFN0cmluZykKK3sKKyAgICBOU0NvcnJlY3Rpb25SZXNwb25zZSByZXNwb25zZSA9IHJlc3BvbnNl
VHlwZSA9PSBBdXRvY29ycmVjdGlvblJldmVydGVkID8gTlNDb3JyZWN0aW9uUmVzcG9uc2VSZXZl
cnRlZCA6IE5TQ29ycmVjdGlvblJlc3BvbnNlRWRpdGVkOworICAgIENvcnJlY3Rpb25QYW5lbDo6
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShtX3drVmlldywgcmVzcG9uc2UsIHJlcGxhY2Vk
U3RyaW5nLCByZXBsYWNlbWVudFN0cmluZyk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJl
Y29tbWVuZGVkU2Nyb2xsYmFyU3R5bGVEaWRDaGFuZ2UoaW50MzJfdCBuZXdTdHlsZSkKK3sKKyAg
ICBOU0FycmF5ICp0cmFja2luZ0FyZWFzID0gW21fd2tWaWV3IHRyYWNraW5nQXJlYXNdOworICAg
IE5TVUludGVnZXIgY291bnQgPSBbdHJhY2tpbmdBcmVhcyBjb3VudF07CisgICAgQVNTRVJUKGNv
dW50ID09IDEpOworICAgIAorICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyAr
K2kpCisgICAgICAgIFttX3drVmlldyByZW1vdmVUcmFja2luZ0FyZWE6W3RyYWNraW5nQXJlYXMg
b2JqZWN0QXRJbmRleDppXV07CisKKyAgICAvLyBOb3cgcmUtY3JlYXRlIGEgdHJhY2tpbmcgYXJl
YSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGdpdmVuIHRoZSBuZXcgc2Nyb2xsYmFyIHN0
eWxlCisgICAgTlNUcmFja2luZ0FyZWFPcHRpb25zIG9wdGlvbnMgPSBOU1RyYWNraW5nTW91c2VN
b3ZlZCB8IE5TVHJhY2tpbmdNb3VzZUVudGVyZWRBbmRFeGl0ZWQgfCBOU1RyYWNraW5nSW5WaXNp
YmxlUmVjdDsKKyAgICBpZiAobmV3U3R5bGUgPT0gTlNTY3JvbGxlclN0eWxlTGVnYWN5KQorICAg
ICAgICBvcHRpb25zIHw9IE5TVHJhY2tpbmdBY3RpdmVBbHdheXM7CisgICAgZWxzZQorICAgICAg
ICBvcHRpb25zIHw9IE5TVHJhY2tpbmdBY3RpdmVJbktleVdpbmRvdzsKKworICAgIE5TVHJhY2tp
bmdBcmVhICp0cmFja2luZ0FyZWEgPSBbW05TVHJhY2tpbmdBcmVhIGFsbG9jXSBpbml0V2l0aFJl
Y3Q6W21fd2tWaWV3IGZyYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9ucworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3du
ZXI6bV93a1ZpZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbF07CisgICAgW21fd2tWaWV3IGFkZFRyYWNr
aW5nQXJlYTp0cmFja2luZ0FyZWFdOworICAgIFt0cmFja2luZ0FyZWEgcmVsZWFzZV07Cit9CisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OmludHJpbnNpY0NvbnRlbnRTaXplRGlkQ2hhbmdlKGNvbnN0
IEludFNpemUmIGludHJpbnNpY0NvbnRlbnRTaXplKQoreworICAgIFttX3drVmlldyBfc2V0SW50
cmluc2ljQ29udGVudFNpemU6aW50cmluc2ljQ29udGVudFNpemVdOworfQorCitib29sIFBhZ2VD
bGllbnRJbXBsOjpleGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNl
bGVjdG9yU3RyaW5nKQoreworICAgIHJldHVybiBbbV93a1ZpZXcgX2V4ZWN1dGVTYXZlZENvbW1h
bmRCeVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5nKHNlbGVjdG9yU3RyaW5nKV07Cit9CisK
K3ZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyQ3VzdG9tU3dpcGVWaWV3cygpCit7CisgICAgcmV0
dXJuIFttX3drVmlldyBfc2V0Q3VzdG9tU3dpcGVWaWV3czpAW11dOworfQorCisjaWYgVVNFKERJ
Q1RBVElPTl9BTFRFUk5BVElWRVMpCit1aW50NjRfdCBQYWdlQ2xpZW50SW1wbDo6YWRkRGljdGF0
aW9uQWx0ZXJuYXRpdmVzKGNvbnN0IFJldGFpblB0cjxOU1RleHRBbHRlcm5hdGl2ZXM+JiBhbHRl
cm5hdGl2ZXMpCit7CisgICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLT5h
ZGRBbHRlcm5hdGl2ZXMoYWx0ZXJuYXRpdmVzKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6
cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpCit7
CisgICAgbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPnJlbW92ZUFsdGVybmF0aXZlcyhk
aWN0YXRpb25Db250ZXh0KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd0RpY3RhdGlv
bkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGlj
dGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KQoreworICAgIGlmICghaXNWaWV3
VmlzaWJsZSgpIHx8ICFpc1ZpZXdJbldpbmRvdygpKQorICAgICAgICByZXR1cm47CisgICAgbV9h
bHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXItPnNob3dBbHRlcm5hdGl2ZXMobV93a1ZpZXcsIGJv
dW5kaW5nQm94T2ZEaWN0YXRlZFRleHQsIGRpY3RhdGlvbkNvbnRleHQsIF4oTlNTdHJpbmcqIGFj
Y2VwdGVkQWx0ZXJuYXRpdmUpeworICAgICAgICBbbV93a1ZpZXcgaGFuZGxlQWNjZXB0ZWRBbHRl
cm5hdGl2ZVRleHQ6YWNjZXB0ZWRBbHRlcm5hdGl2ZV07CisgICAgfSk7Cit9CisKK1ZlY3RvcjxT
dHJpbmc+IFBhZ2VDbGllbnRJbXBsOjpkaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGlj
dGF0aW9uQ29udGV4dCkKK3sKKyAgICByZXR1cm4gbV9hbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xs
ZXItPmFsdGVybmF0aXZlc0ZvckNvbnRleHQoZGljdGF0aW9uQ29udGV4dCk7Cit9CisjZW5kaWYK
KworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKworV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94
eUNsaWVudCYgUGFnZUNsaWVudEltcGw6OmZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKQor
eworICAgIHJldHVybiAqdGhpczsKK30KKworLy8gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNs
aWVudAorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkKK3sK
KyAgICBbbV93a1ZpZXcgX2Nsb3NlRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJdOworfQorCiti
b29sIFBhZ2VDbGllbnRJbXBsOjppc0Z1bGxTY3JlZW4oKQoreworICAgIGlmICghbV93a1ZpZXcu
X2hhc0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gbV93a1ZpZXcuX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmlzRnVsbFNj
cmVlbjsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAg
ICBbbV93a1ZpZXcuX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbjpu
aWxdOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGl0RnVsbFNjcmVlbigpCit7CisgICAg
W21fd2tWaWV3Ll9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbl07Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmJlZ2FuRW50ZXJGdWxsU2NyZWVuKGNvbnN0IEludFJl
Y3QmIGluaXRpYWxGcmFtZSwgY29uc3QgSW50UmVjdCYgZmluYWxGcmFtZSkKK3sKKyAgICBbbV93
a1ZpZXcuX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0
aEluaXRpYWxGcmFtZTppbml0aWFsRnJhbWUgZmluYWxGcmFtZTpmaW5hbEZyYW1lXTsKK30KKwor
dm9pZCBQYWdlQ2xpZW50SW1wbDo6YmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBJbnRSZWN0JiBp
bml0aWFsRnJhbWUsIGNvbnN0IEludFJlY3QmIGZpbmFsRnJhbWUpCit7CisgICAgW21fd2tWaWV3
Ll9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBiZWdhbkV4aXRGdWxsU2NyZWVuV2l0aEluaXRp
YWxGcmFtZTppbml0aWFsRnJhbWUgZmluYWxGcmFtZTpmaW5hbEZyYW1lXTsKK30KKworI2VuZGlm
IC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzViYmY2Y2ViODgxMGE4M2ZhNDM2MmJiNzJkYmJhNGU1MTdiODgyYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcuaApAQCAtMCww
ICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0SGFzaC5oPgor
I2ltcG9ydCA8Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgor
CitAY2xhc3MgV0tQcmludGluZ1ZpZXdEYXRhOworQGNsYXNzIFBERkRvY3VtZW50OworCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFNoYXJlYWJsZUJpdG1hcDsKK2NsYXNzIFdlYkZyYW1lUHJv
eHk7Cit9CisKK0BpbnRlcmZhY2UgV0tQcmludGluZ1ZpZXcgOiBOU1ZpZXcgeworQHB1YmxpYwor
ICAgIE5TUHJpbnRPcGVyYXRpb24gKl9wcmludE9wZXJhdGlvbjsgLy8gV0tQcmludGluZ1ZpZXcg
aXMgb3duZWQgYnkgdGhlIG9wZXJhdGlvbi4KKyAgICBSZXRhaW5QdHI8TlNWaWV3PiBfd2tWaWV3
OworCisgICAgUmVmUHRyPFdlYktpdDo6V2ViRnJhbWVQcm94eT4gX3dlYkZyYW1lOworICAgIFZl
Y3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBfcHJpbnRpbmdQYWdlUmVjdHM7CisgICAgZG91YmxlIF90
b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmc7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpJbnRSZWN0
LCBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA+PiBfcGFnZVByZXZpZXdzOworCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IF9wcmludGVkUGFnZXNEYXRhOworICAgIFJldGFpblB0cjxQREZEb2N1
bWVudD4gX3ByaW50ZWRQYWdlc1BERkRvY3VtZW50OworCisgICAgdWludDY0X3QgX2V4cGVjdGVk
Q29tcHV0ZWRQYWdlc0NhbGxiYWNrOworICAgIEhhc2hNYXA8dWludDY0X3QsIFdlYkNvcmU6Oklu
dFJlY3Q+IF9leHBlY3RlZFByZXZpZXdDYWxsYmFja3M7CisgICAgdWludDY0X3QgX2xhdGVzdEV4
cGVjdGVkUHJldmlld0NhbGxiYWNrOworICAgIHVpbnQ2NF90IF9leHBlY3RlZFByaW50Q2FsbGJh
Y2s7CisKKyAgICBCT09MIF9pc1ByaW50aW5nRnJvbVNlY29uZGFyeVRocmVhZDsKKyAgICBzdGQ6
Om11dGV4IF9wcmludGluZ0NhbGxiYWNrTXV0ZXg7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFi
bGUgX3ByaW50aW5nQ2FsbGJhY2tDb25kaXRpb247CisKKyAgICBOU1RpbWVyICpfYXV0b2Rpc3Bs
YXlSZXN1bWVUaW1lcjsKK30KKworLSAoaWQpaW5pdFdpdGhGcmFtZVByb3h5OihXZWJLaXQ6Oldl
YkZyYW1lUHJveHkqKWZyYW1lIHZpZXc6KE5TVmlldyAqKXdrVmlldzsKKworQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NmNhNzA4ODk0Y2Q3OTYwYTRkOGZmN2I5OTNmZjJjODdkMmQ0OWI2MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KQEAgLTAs
MCArMSw2NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldL
UHJpbnRpbmdWaWV3LmgiCisKKyNpbXBvcnQgIkFQSURhdGEuaCIKKyNpbXBvcnQgIkxvZ2dpbmcu
aCIKKyNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIKKyNpbXBvcnQgIlByaW50SW5mby5oIgorI2lt
cG9ydCAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBv
cnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvUnVu
TG9vcC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK05TU3RyaW5nICogY29uc3QgV2ViS2l0T3JpZ2luYWxUb3BQcmludGluZ01hcmdpbktl
eSA9IEAiV2ViS2l0T3JpZ2luYWxUb3BNYXJnaW4iOworTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRP
cmlnaW5hbEJvdHRvbVByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5hbEJvdHRvbU1h
cmdpbiI7CisKK05TU3RyaW5nICogY29uc3QgTlNQcmludEluZm9EaWRDaGFuZ2VOb3RpZmljYXRp
b24gPSBAIk5TUHJpbnRJbmZvRGlkQ2hhbmdlIjsKKworc3RhdGljIEJPT0wgaXNGb3JjaW5nUHJl
dmlld1VwZGF0ZTsKKworQGltcGxlbWVudGF0aW9uIFdLUHJpbnRpbmdWaWV3CisKKy0gKGlkKWlu
aXRXaXRoRnJhbWVQcm94eTooV2ViS2l0OjpXZWJGcmFtZVByb3h5KilmcmFtZSB2aWV3OihOU1Zp
ZXcgKil3a1ZpZXcKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOyAvLyBObyBmcmFtZSByZWN0
IHRvIHBhc3MgdG8gTlNWaWV3LgorICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIF93ZWJGcmFtZSA9IGZyYW1lOworICAgIF93a1ZpZXcgPSB3a1ZpZXc7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpD
U2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtXS1ByaW50aW5nVmlldyBjbGFzc10sIHNl
bGYpKQorICAgICAgICByZXR1cm47CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKEJP
T0wpaXNGbGlwcGVkCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAodm9pZClfc2V0QXV0b2Rp
c3BsYXk6KEJPT0wpbmV3U3RhdGUKK3sKKyAgICBpZiAoIW5ld1N0YXRlICYmIFtbX3drVmlldyB3
aW5kb3ddIGlzQXV0b2Rpc3BsYXldKQorICAgICAgICBbX3drVmlldyBkaXNwbGF5SWZOZWVkZWRd
OworICAgIAorICAgIFtbX3drVmlldyB3aW5kb3ddIHNldEF1dG9kaXNwbGF5Om5ld1N0YXRlXTsK
KworICAgIC8vIEZvciBzb21lIHJlYXNvbiwgcGFpbnRpbmcgZG9lc24ndCBoYXBwZW4gZm9yIGEg
bG9uZyB0aW1lIHdpdGhvdXQgdGhpcyBjYWxsLCA8cmRhcjovL3Byb2JsZW0vODk3NTIyOT4uCisg
ICAgaWYgKG5ld1N0YXRlKQorICAgICAgICBbX3drVmlldyBkaXNwbGF5SWZOZWVkZWRdOworfQor
CisKKy0gKHZvaWQpX3N1c3BlbmRBdXRvZGlzcGxheQoreworICAgIC8vIEEgZHJhd1JlY3Q6IGNh
bGwgb24gV0tWaWV3IGNhdXNlcyBhIHN3aXRjaCB0byBzY3JlZW4gbW9kZSwgd2hpY2ggaXMgc2xv
dyBkdWUgdG8gcmVsYXlvdXQsIGFuZCB3ZSB3YW50IHRvIGF2b2lkIHRoYXQuCisgICAgLy8gRGlz
YWJsaW5nIGF1dG9kaXNwbGF5IHdpbGwgcHJldmVudCByYW5kb20gdXBkYXRlcyBmcm9tIGNhdXNp
bmcgdGhpcywgYnV0IHJlc2l6aW5nIHRoZSB3aW5kb3cgd2lsbCBzdGlsbCB3b3JrLgorICAgIGlm
IChfYXV0b2Rpc3BsYXlSZXN1bWVUaW1lcikgeworICAgICAgICBbX2F1dG9kaXNwbGF5UmVzdW1l
VGltZXIgaW52YWxpZGF0ZV07CisgICAgICAgIF9hdXRvZGlzcGxheVJlc3VtZVRpbWVyID0gbmls
OworICAgIH0gZWxzZQorICAgICAgICBbc2VsZiBfc2V0QXV0b2Rpc3BsYXk6Tk9dOworfQorCist
ICh2b2lkKV9kZWxheWVkUmVzdW1lQXV0b2Rpc3BsYXlUaW1lckZpcmVkCit7CisgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBfYXV0b2Rpc3BsYXlSZXN1bWVUaW1lciA9
IG5pbDsKKyAgICBbc2VsZiBfc2V0QXV0b2Rpc3BsYXk6WUVTXTsKKworICAgIC8vIEVuYWJsaW5n
IGF1dG9kaXNwbGF5IG5vcm1hbGx5IGltcGxpY2l0bHkgY2FsbHMgZW5kUHJpbnRpbmcoKSB2aWEg
LVtXS1ZpZXcgZHJhd1JlY3Q6XSwgYnV0IG5vdCB3aGVuIGNvbnRlbnQgaXMgaW4gYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcgbW9kZS4KKyAgICBpZiAoX3dlYkZyYW1lLT5wYWdlKCkpCisgICAgICAg
IF93ZWJGcmFtZS0+cGFnZSgpLT5lbmRQcmludGluZygpOworfQorCistICh2b2lkKV9kZWxheWVk
UmVzdW1lQXV0b2Rpc3BsYXkKK3sKKyAgICAvLyBBcHBLaXQgY2FsbHMgZW5kRG9jdW1lbnQvYmVn
aW5Eb2N1bWVudCB3aGVuIHByaW50IG9wdGlvbiBjaGFuZ2UuIFdlIGRvbid0IHdhbnQgdG8gc3dp
dGNoIGJldHdlZW4gcHJpbnQgYW5kIHNjcmVlbiBtb2RlIGp1c3QgZm9yIHRoYXQsCisgICAgLy8g
YW5kIGVuYWJsaW5nIGF1dG9kaXNwbGF5IG1heSByZXN1bHQgaW4gc3dpdGNoaW5nIGludG8gc2Ny
ZWVuIG1vZGUuIFNvLCBhdXRvZGlzcGxheSBpcyBvbmx5IHJlc3VtZWQgb24gbmV4dCBydW4gbG9v
cCBpdGVyYXRpb24uCisgICAgaWYgKCFfYXV0b2Rpc3BsYXlSZXN1bWVUaW1lcikgeworICAgICAg
ICBfYXV0b2Rpc3BsYXlSZXN1bWVUaW1lciA9IFtOU1RpbWVyIHRpbWVyV2l0aFRpbWVJbnRlcnZh
bDowIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfZGVsYXllZFJlc3VtZUF1dG9kaXNw
bGF5VGltZXJGaXJlZCkgdXNlckluZm86bmlsIHJlcGVhdHM6Tk9dOworICAgICAgICAvLyBUaGUg
dGltZXIgbXVzdCBiZSBzY2hlZHVsZWQgb24gbWFpbiB0aHJlYWQsIGJlY2F1c2UgcHJpbnRpbmcg
dGhyZWFkIG1heSBmaW5pc2ggYmVmb3JlIGl0IGZpcmVzLgorICAgICAgICBbW05TUnVuTG9vcCBt
YWluUnVuTG9vcF0gYWRkVGltZXI6X2F1dG9kaXNwbGF5UmVzdW1lVGltZXIgZm9yTW9kZTpOU0Rl
ZmF1bHRSdW5Mb29wTW9kZV07CisgICAgfQorfQorCistICh2b2lkKV9hZGp1c3RQcmludGluZ01h
cmdpbnNGb3JIZWFkZXJBbmRGb290ZXIKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OyAvLyBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSBjbGllbnQsIHdoaWNoIHNob3VsZCBvbmx5IGJl
IGRvbmUgb24gbWFpbiB0aHJlYWQuCisKKyAgICBOU1ByaW50SW5mbyAqaW5mbyA9IFtfcHJpbnRP
cGVyYXRpb24gcHJpbnRJbmZvXTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICppbmZvRGljdGlv
bmFyeSA9IFtpbmZvIGRpY3Rpb25hcnldOworCisgICAgLy8gV2UgbmVlZCB0byBtb2RpZnkgdGhl
IHRvcCBhbmQgYm90dG9tIG1hcmdpbnMgaW4gdGhlIE5TUHJpbnRJbmZvIHRvIGFjY291bnQgZm9y
IHRoZSBzcGFjZSBuZWVkZWQgYnkgdGhlCisgICAgLy8gaGVhZGVyIGFuZCBmb290ZXIuIEJlY2F1
c2UgdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBO
U1ByaW50SW5mbyAoc2VlIDUwMzgwODcpLAorICAgIC8vIHdlIHN0YXNoIGF3YXkgdGhlIHVubW9k
aWZpZWQgdG9wIGFuZCBib3R0b20gbWFyZ2lucyB0aGUgZmlyc3QgdGltZSB0aGlzIG1ldGhvZCBp
cyBjYWxsZWQsIGFuZCB3ZSByZWFkIGZyb20KKyAgICAvLyB0aG9zZSBzdGFzaGVkLWF3YXkgdmFs
dWVzIG9uIHN1YnNlcXVlbnQgY2FsbHMuCisgICAgZG91YmxlIG9yaWdpbmFsVG9wTWFyZ2luOwor
ICAgIGRvdWJsZSBvcmlnaW5hbEJvdHRvbU1hcmdpbjsKKyAgICBOU051bWJlciAqb3JpZ2luYWxU
b3BNYXJnaW5OdW1iZXIgPSBbaW5mb0RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYktpdE9yaWdp
bmFsVG9wUHJpbnRpbmdNYXJnaW5LZXldOworICAgIGlmICghb3JpZ2luYWxUb3BNYXJnaW5OdW1i
ZXIpIHsKKyAgICAgICAgQVNTRVJUKCFbaW5mb0RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYktp
dE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXldKTsKKyAgICAgICAgb3JpZ2luYWxUb3BN
YXJnaW4gPSBbaW5mbyB0b3BNYXJnaW5dOworICAgICAgICBvcmlnaW5hbEJvdHRvbU1hcmdpbiA9
IFtpbmZvIGJvdHRvbU1hcmdpbl07CisgICAgICAgIFtpbmZvRGljdGlvbmFyeSBzZXRPYmplY3Q6
W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6b3JpZ2luYWxUb3BNYXJnaW5dIGZvcktleTpXZWJL
aXRPcmlnaW5hbFRvcFByaW50aW5nTWFyZ2luS2V5XTsKKyAgICAgICAgW2luZm9EaWN0aW9uYXJ5
IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpvcmlnaW5hbEJvdHRvbU1hcmdp
bl0gZm9yS2V5OldlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXldOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEFTU0VSVChbb3JpZ2luYWxUb3BNYXJnaW5OdW1iZXIgaXNLaW5kT2ZD
bGFzczpbTlNOdW1iZXIgY2xhc3NdXSk7CisgICAgICAgIEFTU0VSVChbW2luZm9EaWN0aW9uYXJ5
IG9iamVjdEZvcktleTpXZWJLaXRPcmlnaW5hbEJvdHRvbVByaW50aW5nTWFyZ2luS2V5XSBpc0tp
bmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKTsKKyAgICAgICAgb3JpZ2luYWxUb3BNYXJnaW4g
PSBbb3JpZ2luYWxUb3BNYXJnaW5OdW1iZXIgZG91YmxlVmFsdWVdOworICAgICAgICBvcmlnaW5h
bEJvdHRvbU1hcmdpbiA9IFtbaW5mb0RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYktpdE9yaWdp
bmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXldIGRvdWJsZVZhbHVlXTsKKyAgICB9CisgICAgCisg
ICAgQ0dGbG9hdCBzY2FsZSA9IFtpbmZvIHNjYWxpbmdGYWN0b3JdOworICAgIFtpbmZvIHNldFRv
cE1hcmdpbjpvcmlnaW5hbFRvcE1hcmdpbiArIF93ZWJGcmFtZS0+cGFnZSgpLT5oZWFkZXJIZWln
aHQoX3dlYkZyYW1lLmdldCgpKSAqIHNjYWxlXTsKKyAgICBbaW5mbyBzZXRCb3R0b21NYXJnaW46
b3JpZ2luYWxCb3R0b21NYXJnaW4gKyBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KF93
ZWJGcmFtZS5nZXQoKSkgKiBzY2FsZV07Cit9CisKKy0gKEJPT0wpX2lzUHJpbnRpbmdQcmV2aWV3
Cit7CisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzg5MDEwNDE+IFBsZWFzZSBhZGQgYW4gQVBJIHJl
dHVybmluZyB3aGV0aGVyIHRoZSBjdXJyZW50IHByaW50IG9wZXJhdGlvbiBpcyBmb3IgcHJldmll
dy4KKyAgICAvLyBBc3N1bWluZyB0aGF0IGlmIE5TUHJpbnRPcGVyYXRpb24gaXMgYWxsb3dlZCB0
byBzcGF3biBhIHRocmVhZCBmb3IgcHJpbnRpbmcsIGl0IHdpbGwuIFByaW50IHByZXZpZXcgZG9l
c24ndCBzcGF3biBhIHRocmVhZC4KKyAgICByZXR1cm4gIV9pc1ByaW50aW5nRnJvbVNlY29uZGFy
eVRocmVhZDsKK30KKworLSAodm9pZClfdXBkYXRlUHJldmlldworeworICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS84OTAwOTIzPiBQbGVhc2UgYWRkIGFuIEFQSSB0byBmb3JjZSBwcmludCBwcmV2aWV3
IHVwZGF0ZS4KKyAgICBBU1NFUlQoIWlzRm9yY2luZ1ByZXZpZXdVcGRhdGUpOworICAgIGlzRm9y
Y2luZ1ByZXZpZXdVcGRhdGUgPSBZRVM7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpOU1ByaW50SW5mb0RpZENoYW5nZU5vdGlm
aWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICBpc0ZvcmNpbmdQcmV2aWV3VXBkYXRlID0gTk87Cit9
CisKKy0gKEJPT0wpX2hhc1BhZ2VSZWN0cworeworICAgIC8vIFdlYkNvcmUgYWx3YXlzIHByaW50
cyBhdCBsZWFzdCBvbmUgcGFnZS4KKyAgICByZXR1cm4gIV9wcmludGluZ1BhZ2VSZWN0cy5pc0Vt
cHR5KCk7Cit9CisKKy0gKE5TVUludGVnZXIpX2ZpcnN0UHJpbnRlZFBhZ2VOdW1iZXIKK3sKKyAg
ICAvLyBOZWVkIHRvIGRpcmVjdGx5IGFjY2VzcyB0aGUgZGljdGlvbmFyeSBiZWNhdXNlIC1bTlNQ
cmludE9wZXJhdGlvbiBwYWdlUmFuZ2VdIHZlcmlmaWVzIHBhZ2luYXRpb24sIHBvdGVudGlhbGx5
IGNhdXNpbmcgcmVjdXJzaW9uLgorICAgIHJldHVybiBbW1tbX3ByaW50T3BlcmF0aW9uIHByaW50
SW5mb10gZGljdGlvbmFyeV0gb2JqZWN0Rm9yS2V5Ok5TUHJpbnRGaXJzdFBhZ2VdIHVuc2lnbmVk
SW50ZWdlclZhbHVlXTsKK30KKworLSAoTlNVSW50ZWdlcilfbGFzdFByaW50ZWRQYWdlTnVtYmVy
Cit7CisgICAgQVNTRVJUKFtzZWxmIF9oYXNQYWdlUmVjdHNdKTsKKworICAgIC8vIE5lZWQgdG8g
ZGlyZWN0bHkgYWNjZXNzIHRoZSBkaWN0aW9uYXJ5IGJlY2F1c2UgLVtOU1ByaW50T3BlcmF0aW9u
IHBhZ2VSYW5nZV0gdmVyaWZpZXMgcGFnaW5hdGlvbiwgcG90ZW50aWFsbHkgY2F1c2luZyByZWN1
cnNpb24uCisgICAgTlNVSW50ZWdlciBmaXJzdFBhZ2UgPSBbW1tbX3ByaW50T3BlcmF0aW9uIHBy
aW50SW5mb10gZGljdGlvbmFyeV0gb2JqZWN0Rm9yS2V5Ok5TUHJpbnRGaXJzdFBhZ2VdIHVuc2ln
bmVkSW50ZWdlclZhbHVlXTsKKyAgICBOU1VJbnRlZ2VyIGxhc3RQYWdlID0gW1tbW19wcmludE9w
ZXJhdGlvbiBwcmludEluZm9dIGRpY3Rpb25hcnldIG9iamVjdEZvcktleTpOU1ByaW50TGFzdFBh
Z2VdIHVuc2lnbmVkSW50ZWdlclZhbHVlXTsKKyAgICBpZiAobGFzdFBhZ2UgLSBmaXJzdFBhZ2Ug
Pj0gX3ByaW50aW5nUGFnZVJlY3RzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIF9wcmludGluZ1Bh
Z2VSZWN0cy5zaXplKCk7CisgICAgcmV0dXJuIGxhc3RQYWdlOworfQorCistICh1aW50NjRfdClf
ZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tGb3JSZWN0Oihjb25zdCBJbnRSZWN0JilyZWN0Cit7Cisg
ICAgZm9yIChIYXNoTWFwPHVpbnQ2NF90LCBXZWJDb3JlOjpJbnRSZWN0Pjo6aXRlcmF0b3IgaXRl
ciA9IF9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MuYmVnaW4oKTsgaXRlciAhPSBfZXhwZWN0ZWRQ
cmV2aWV3Q2FsbGJhY2tzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVl
ICA9PSByZWN0KQorICAgICAgICAgICAgcmV0dXJuIGl0ZXItPmtleTsKKyAgICB9CisgICAgcmV0
dXJuIDA7Cit9CisKK3N0cnVjdCBJUENDYWxsYmFja0NvbnRleHQgeworICAgIFJldGFpblB0cjxX
S1ByaW50aW5nVmlldz4gdmlldzsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEOworfTsKKworc3Rh
dGljIHZvaWQgcGFnZURpZERyYXdUb0ltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiBpbWFnZUhhbmRsZSwgSVBDQ2FsbGJhY2tDb250ZXh0KiBjb250ZXh0KQoreworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBXS1ByaW50aW5nVmlldyAqdmlldyA9IGNvbnRl
eHQtPnZpZXcuZ2V0KCk7CisKKyAgICAvLyBJZiB0aGUgdXNlciBoYXMgYWxyZWFkeSBjaGFuZ2Vk
IHByaW50IHNldHVwLCB0aGVuIHRoaXMgcmVzcG9uc2UgaXMgb2Jzb2xldGUuIEFuZCBpZiB0aGlz
IGNhbGxiYWNrIGlzIG5vdCBpbiByZXNwb25zZSB0byB0aGUgbGF0ZXN0IHJlcXVlc3QsCisgICAg
Ly8gdGhlbiB0aGUgdXNlciBoYXMgYWxyZWFkeSBtb3ZlZCB0byBhbm90aGVyIHBhZ2UgLSB3ZSds
bCBjYWNoZSB0aGUgcmVzcG9uc2UsIGJ1dCB3b24ndCBkcmF3IGl0LgorICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFdlYkNvcmU6OkludFJlY3Q+OjppdGVyYXRvciBpdGVyID0gdmlldy0+X2V4cGVjdGVk
UHJldmlld0NhbGxiYWNrcy5maW5kKGNvbnRleHQtPmNhbGxiYWNrSUQpOworICAgIGlmIChpdGVy
ICE9IHZpZXctPl9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MuZW5kKCkpIHsKKyAgICAgICAgQVNT
RVJUKFt2aWV3IF9pc1ByaW50aW5nUHJldmlld10pOworCisgICAgICAgIGlmICghaW1hZ2VIYW5k
bGUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGltYWdl
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaW1hZ2VIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVh
ZE9ubHkpOworCisgICAgICAgICAgICBpZiAoaW1hZ2UpCisgICAgICAgICAgICAgICAgdmlldy0+
X3BhZ2VQcmV2aWV3cy5hZGQoaXRlci0+dmFsdWUsIGltYWdlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZpZXctPl9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MucmVtb3ZlKGNvbnRleHQtPmNhbGxi
YWNrSUQpOworICAgICAgICBib29sIHJlY2VpdmVkUmVzcG9uc2VUb0xhdGVzdFJlcXVlc3QgPSB2
aWV3LT5fbGF0ZXN0RXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2sgPT0gY29udGV4dC0+Y2FsbGJhY2tJ
RDsKKyAgICAgICAgaWYgKHJlY2VpdmVkUmVzcG9uc2VUb0xhdGVzdFJlcXVlc3QpIHsKKyAgICAg
ICAgICAgIHZpZXctPl9sYXRlc3RFeHBlY3RlZFByZXZpZXdDYWxsYmFjayA9IDA7CisgICAgICAg
ICAgICBbdmlldyBfdXBkYXRlUHJldmlld107CisgICAgICAgIH0KKyAgICB9Cit9CisKKy0gKHZv
aWQpX3ByZXBhcmVQREZEYXRhRm9yUHJpbnRpbmdPblNlY29uZGFyeVRocmVhZAoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIV93ZWJGcmFtZS0+cGFnZSgpKSB7
CisgICAgICAgIF9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2Nr
KF9wcmludGluZ0NhbGxiYWNrTXV0ZXgpOworCisgICAgQVNTRVJUKFtzZWxmIF9oYXNQYWdlUmVj
dHNdKTsKKyAgICBBU1NFUlQoX3ByaW50ZWRQYWdlc0RhdGEuaXNFbXB0eSgpKTsKKyAgICBBU1NF
UlQoIV9wcmludGVkUGFnZXNQREZEb2N1bWVudCk7CisgICAgQVNTRVJUKCFfZXhwZWN0ZWRQcmlu
dENhbGxiYWNrKTsKKworICAgIE5TVUludGVnZXIgZmlyc3RQYWdlID0gW3NlbGYgX2ZpcnN0UHJp
bnRlZFBhZ2VOdW1iZXJdOworICAgIE5TVUludGVnZXIgbGFzdFBhZ2UgPSBbc2VsZiBfbGFzdFBy
aW50ZWRQYWdlTnVtYmVyXTsKKworICAgIEFTU0VSVChmaXJzdFBhZ2UgPiAwKTsKKyAgICBBU1NF
UlQoZmlyc3RQYWdlIDw9IGxhc3RQYWdlKTsKKyAgICBMT0coVmlldywgIldLUHJpbnRpbmdWaWV3
IHJlcXVlc3RpbmcgUERGIGRhdGEgZm9yIHBhZ2VzICV1Li4uJXUiLCBmaXJzdFBhZ2UsIGxhc3RQ
YWdlKTsKKworICAgIFByaW50SW5mbyBwcmludEluZm8oW19wcmludE9wZXJhdGlvbiBwcmludElu
Zm9dKTsKKyAgICAvLyBSZXR1cm4gdG8gcHJpbnRpbmcgbW9kZSBpZiB3ZSdyZSBhbHJlYWR5IGJh
Y2sgdG8gc2NyZWVuIChlLmcuIGR1ZSB0byB3aW5kb3cgcmVzaXppbmcpLgorICAgIF93ZWJGcmFt
ZS0+cGFnZSgpLT5iZWdpblByaW50aW5nKF93ZWJGcmFtZS5nZXQoKSwgcHJpbnRJbmZvKTsKKwor
ICAgIElQQ0NhbGxiYWNrQ29udGV4dCogY29udGV4dCA9IG5ldyBJUENDYWxsYmFja0NvbnRleHQ7
CisgICAgUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBEYXRhQ2FsbGJhY2s6OmNyZWF0
ZShbY29udGV4dF0oYm9vbCwgQVBJOjpEYXRhKiBkYXRhKSB7CisgICAgICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICAgICAgT3duUHRyPElQQ0NhbGxiYWNrQ29udGV4dD4gY29u
dGV4dERlbGV0ZXIgPSBhZG9wdFB0cihjb250ZXh0KTsKKyAgICAgICAgV0tQcmludGluZ1ZpZXcg
KnZpZXcgPSBjb250ZXh0LT52aWV3LmdldCgpOworCisgICAgICAgIGlmIChjb250ZXh0LT5jYWxs
YmFja0lEID09IHZpZXctPl9leHBlY3RlZFByaW50Q2FsbGJhY2spIHsKKyAgICAgICAgICAgIEFT
U0VSVCghW3ZpZXcgX2lzUHJpbnRpbmdQcmV2aWV3XSk7CisgICAgICAgICAgICBBU1NFUlQodmll
dy0+X3ByaW50ZWRQYWdlc0RhdGEuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghdmll
dy0+X3ByaW50ZWRQYWdlc1BERkRvY3VtZW50KTsKKyAgICAgICAgICAgIGlmIChkYXRhKQorICAg
ICAgICAgICAgICAgIHZpZXctPl9wcmludGVkUGFnZXNEYXRhLmFwcGVuZChkYXRhLT5ieXRlcygp
LCBkYXRhLT5zaXplKCkpOworICAgICAgICAgICAgdmlldy0+X2V4cGVjdGVkUHJpbnRDYWxsYmFj
ayA9IDA7CisgICAgICAgICAgICB2aWV3LT5fcHJpbnRpbmdDYWxsYmFja0NvbmRpdGlvbi5ub3Rp
Znlfb25lKCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBfZXhwZWN0ZWRQcmludENhbGxiYWNr
ID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKKworICAgIGNvbnRleHQtPnZpZXcgPSBzZWxmOwor
ICAgIGNvbnRleHQtPmNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOworCisgICAg
X3dlYkZyYW1lLT5wYWdlKCktPmRyYXdQYWdlc1RvUERGKF93ZWJGcmFtZS5nZXQoKSwgcHJpbnRJ
bmZvLCBmaXJzdFBhZ2UgLSAxLCBsYXN0UGFnZSAtIGZpcnN0UGFnZSArIDEsIGNhbGxiYWNrLmdl
dCgpKTsKK30KKworc3RhdGljIHZvaWQgcGFnZURpZENvbXB1dGVQYWdlUmVjdHMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+JiBwYWdlUmVjdHMsIGRvdWJsZSB0b3RhbFNjYWxlRmFjdG9y
Rm9yUHJpbnRpbmcsIElQQ0NhbGxiYWNrQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgV0tQcmludGluZ1ZpZXcgKnZpZXcgPSBjb250ZXh0
LT52aWV3LmdldCgpOworCisgICAgLy8gSWYgdGhlIHVzZXIgaGFzIGFscmVhZHkgY2hhbmdlZCBw
cmludCBzZXR1cCwgdGhlbiB0aGlzIHJlc3BvbnNlIGlzIG9ic29sZXRlLgorICAgIGlmIChjb250
ZXh0LT5jYWxsYmFja0lEID09IHZpZXctPl9leHBlY3RlZENvbXB1dGVkUGFnZXNDYWxsYmFjaykg
eworICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICBBU1NFUlQodmll
dy0+X2V4cGVjdGVkUHJldmlld0NhbGxiYWNrcy5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQo
IXZpZXctPl9sYXRlc3RFeHBlY3RlZFByZXZpZXdDYWxsYmFjayk7CisgICAgICAgIEFTU0VSVCgh
dmlldy0+X2V4cGVjdGVkUHJpbnRDYWxsYmFjayk7CisgICAgICAgIEFTU0VSVCh2aWV3LT5fcGFn
ZVByZXZpZXdzLmlzRW1wdHkoKSk7CisgICAgICAgIHZpZXctPl9leHBlY3RlZENvbXB1dGVkUGFn
ZXNDYWxsYmFjayA9IDA7CisKKyAgICAgICAgdmlldy0+X3ByaW50aW5nUGFnZVJlY3RzID0gcGFn
ZVJlY3RzOworICAgICAgICB2aWV3LT5fdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nID0gdG90
YWxTY2FsZUZhY3RvckZvclByaW50aW5nOworCisgICAgICAgIC8vIFNhbml0aXplIGEgcmVzcG9u
c2UgY29taW5nIGZyb20gdGhlIFdlYiBwcm9jZXNzLgorICAgICAgICBpZiAodmlldy0+X3ByaW50
aW5nUGFnZVJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHZpZXctPl9wcmludGluZ1BhZ2VS
ZWN0cy5hcHBlbmQoSW50UmVjdCgwLCAwLCAxLCAxKSk7CisgICAgICAgIGlmICh2aWV3LT5fdG90
YWxTY2FsZUZhY3RvckZvclByaW50aW5nIDw9IDApCisgICAgICAgICAgICB2aWV3LT5fdG90YWxT
Y2FsZUZhY3RvckZvclByaW50aW5nID0gMTsKKworICAgICAgICBjb25zdCBJbnRSZWN0JiBsYXN0
UHJpbnRpbmdQYWdlUmVjdCA9IHZpZXctPl9wcmludGluZ1BhZ2VSZWN0c1t2aWV3LT5fcHJpbnRp
bmdQYWdlUmVjdHMuc2l6ZSgpIC0gMV07CisgICAgICAgIE5TUmVjdCBuZXdGcmFtZVNpemUgPSBO
U01ha2VSZWN0KDAsIDAsIAorICAgICAgICAgICAgY2VpbChsYXN0UHJpbnRpbmdQYWdlUmVjdC5t
YXhYKCkgKiB2aWV3LT5fdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nKSwgCisgICAgICAgICAg
ICBjZWlsKGxhc3RQcmludGluZ1BhZ2VSZWN0Lm1heFkoKSAqIHZpZXctPl90b3RhbFNjYWxlRmFj
dG9yRm9yUHJpbnRpbmcpKTsKKyAgICAgICAgTE9HKFZpZXcsICJXS1ByaW50aW5nVmlldyBzZXR0
aW5nIGZyYW1lIHNpemUgdG8geDolZyB5OiVnIHdpZHRoOiVnIGhlaWdodDolZyIsIG5ld0ZyYW1l
U2l6ZS5vcmlnaW4ueCwgbmV3RnJhbWVTaXplLm9yaWdpbi55LCBuZXdGcmFtZVNpemUuc2l6ZS53
aWR0aCwgbmV3RnJhbWVTaXplLnNpemUuaGVpZ2h0KTsKKyAgICAgICAgW3ZpZXcgc2V0RnJhbWU6
bmV3RnJhbWVTaXplXTsKKworICAgICAgICBpZiAoW3ZpZXcgX2lzUHJpbnRpbmdQcmV2aWV3XSkg
eworICAgICAgICAgICAgLy8gU2hvdyBwYWdlIGNvdW50LCBhbmQgYXNrIGZvciBhbiBhY3R1YWwg
aW1hZ2UgdG8gcmVwbGFjZSBwbGFjZWhvbGRlci4KKyAgICAgICAgICAgIFt2aWV3IF91cGRhdGVQ
cmV2aWV3XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdoZW4gcHJpbnRpbmcs
IHJlcXVlc3QgZXZlcnl0aGluZyB3ZSdsbCBuZWVkIGJlZm9yZWhhbmQuCisgICAgICAgICAgICBb
dmlldyBfcHJlcGFyZVBERkRhdGFGb3JQcmludGluZ09uU2Vjb25kYXJ5VGhyZWFkXTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworLSAoQk9PTClfYXNrUGFnZVRvQ29tcHV0ZVBhZ2VSZWN0cworewor
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIV93ZWJGcmFtZS0+cGFn
ZSgpKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICBBU1NFUlQoIV9leHBlY3RlZENvbXB1dGVk
UGFnZXNDYWxsYmFjayk7CisKKyAgICBJUENDYWxsYmFja0NvbnRleHQqIGNvbnRleHQgPSBuZXcg
SVBDQ2FsbGJhY2tDb250ZXh0OworICAgIFJlZlB0cjxDb21wdXRlZFBhZ2VzQ2FsbGJhY2s+IGNh
bGxiYWNrID0gQ29tcHV0ZWRQYWdlc0NhbGxiYWNrOjpjcmVhdGUoW2NvbnRleHRdKGJvb2wsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgcGFnZVJlY3RzLCBkb3VibGUgdG90YWxTY2Fs
ZUZhY3RvckZvclByaW50aW5nKSB7CisgICAgICAgIE93blB0cjxJUENDYWxsYmFja0NvbnRleHQ+
IGNvbnRleHREZWxldGVyID0gYWRvcHRQdHIoY29udGV4dCk7CisgICAgICAgIHBhZ2VEaWRDb21w
dXRlUGFnZVJlY3RzKHBhZ2VSZWN0cywgdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nLCBjb250
ZXh0KTsKKyAgICB9KTsKKyAgICBfZXhwZWN0ZWRDb21wdXRlZFBhZ2VzQ2FsbGJhY2sgPSBjYWxs
YmFjay0+Y2FsbGJhY2tJRCgpOworICAgIGNvbnRleHQtPnZpZXcgPSBzZWxmOworICAgIGNvbnRl
eHQtPmNhbGxiYWNrSUQgPSBfZXhwZWN0ZWRDb21wdXRlZFBhZ2VzQ2FsbGJhY2s7CisKKyAgICBf
d2ViRnJhbWUtPnBhZ2UoKS0+Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoX3dlYkZyYW1lLmdldCgp
LCBQcmludEluZm8oW19wcmludE9wZXJhdGlvbiBwcmludEluZm9dKSwgY2FsbGJhY2sucmVsZWFz
ZSgpKTsKKyAgICByZXR1cm4gWUVTOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlRGF0YUZvclBy
aW50aW5nT25TZWNvbmRhcnlUaHJlYWQodm9pZCogdW50eXBlZENvbnRleHQpCit7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFdLUHJpbnRpbmdWaWV3ICp2aWV3ID0gc3Rh
dGljX2Nhc3Q8V0tQcmludGluZ1ZpZXcgKj4odW50eXBlZENvbnRleHQpOworICAgIHN0ZDo6bG9j
a19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHZpZXctPl9wcmludGluZ0NhbGxiYWNrTXV0ZXgpOwor
CisgICAgLy8gV2UgbWF5IGhhdmUgcmVjZWl2ZWQgcGFnZSByZWN0cyB3aGlsZSBhIG1lc3NhZ2Ug
dG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRyYXZlbGVkIGZyb20gc2Vjb25kYXJ5IHRocmVhZCB0byBt
YWluIG9uZS4KKyAgICBpZiAoW3ZpZXcgX2hhc1BhZ2VSZWN0c10pIHsKKyAgICAgICAgW3ZpZXcg
X3ByZXBhcmVQREZEYXRhRm9yUHJpbnRpbmdPblNlY29uZGFyeVRocmVhZF07CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBBIHJlcXVlc3QgZm9yIHBhZ2VzIGhhcyBhbHJlYWR5IGJl
ZW4gbWFkZSwganVzdCB3YWl0IGZvciBpdCB0byBmaW5pc2guCisgICAgaWYgKHZpZXctPl9leHBl
Y3RlZENvbXB1dGVkUGFnZXNDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgW3ZpZXcg
X2Fza1BhZ2VUb0NvbXB1dGVQYWdlUmVjdHNdOworfQorCistIChCT09MKWtub3dzUGFnZVJhbmdl
OihOU1JhbmdlUG9pbnRlcilyYW5nZQoreworICAgIExPRyhWaWV3LCAiLVtXS1ByaW50aW5nVmll
dyAlcCBrbm93c1BhZ2VSYW5nZTpdLCAlcywgJXMiLCBzZWxmLCBbc2VsZiBfaGFzUGFnZVJlY3Rz
XSA/ICJwcmludCBkYXRhIGlzIGF2YWlsYWJsZSIgOiAicHJpbnQgZGF0YSBpcyBub3QgYXZhaWxh
YmxlIHlldCIsIFJ1bkxvb3A6OmlzTWFpbigpID8gIm9uIG1haW4gdGhyZWFkIiA6ICJvbiBzZWNv
bmRhcnkgdGhyZWFkIik7CisgICAgQVNTRVJUKF9wcmludE9wZXJhdGlvbiA9PSBbTlNQcmludE9w
ZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSk7CisKKyAgICAvLyBBc3N1bWluZyB0aGF0IG9uY2Ug
d2Ugc3dpdGNoIHRvIHByaW50aW5nIGZyb20gYSBzZWNvbmRhcnkgdGhyZWFkLCB3ZSBkb24ndCBn
byBiYWNrLgorICAgIEFTU0VSVCghX2lzUHJpbnRpbmdGcm9tU2Vjb25kYXJ5VGhyZWFkIHx8ICFS
dW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkKKyAgICAgICAg
X2lzUHJpbnRpbmdGcm9tU2Vjb25kYXJ5VGhyZWFkID0gWUVTOworCisgICAgaWYgKCFfd2ViRnJh
bWUtPnBhZ2UoKSkgeworICAgICAgICAqcmFuZ2UgPSBOU01ha2VSYW5nZSgxLCBOU0ludGVnZXJN
YXgpOworICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKworICAgIFtzZWxmIF9zdXNwZW5kQXV0
b2Rpc3BsYXldOworICAgIAorICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpA
c2VsZWN0b3IoX2FkanVzdFByaW50aW5nTWFyZ2luc0ZvckhlYWRlckFuZEZvb3Rlcikgd2l0aE9i
amVjdDpuaWwgd2FpdFVudGlsRG9uZTpZRVNdOworCisgICAgaWYgKFtzZWxmIF9oYXNQYWdlUmVj
dHNdKQorICAgICAgICAqcmFuZ2UgPSBOU01ha2VSYW5nZSgxLCBfcHJpbnRpbmdQYWdlUmVjdHMu
c2l6ZSgpKTsKKyAgICBlbHNlIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKKyAgICAgICAgQVNT
RVJUKCFbc2VsZiBfaXNQcmludGluZ1ByZXZpZXddKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9j
azxzdGQ6Om11dGV4PiBsb2NrKF9wcmludGluZ0NhbGxiYWNrTXV0ZXgpOworICAgICAgICBjYWxs
T25NYWluVGhyZWFkKHByZXBhcmVEYXRhRm9yUHJpbnRpbmdPblNlY29uZGFyeVRocmVhZCwgc2Vs
Zik7CisgICAgICAgIF9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9uLndhaXQobG9jayk7CisgICAg
ICAgICpyYW5nZSA9IE5TTWFrZVJhbmdlKDEsIF9wcmludGluZ1BhZ2VSZWN0cy5zaXplKCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChbc2VsZiBfaXNQcmludGluZ1ByZXZpZXddKTsK
KworICAgICAgICAvLyBJZiBhIHJlcXVlc3QgZm9yIHBhZ2VzIGhhc24ndCBhbHJlYWR5IGJlZW4g
bWFkZSwgbWFrZSBpdCBub3cuCisgICAgICAgIGlmICghX2V4cGVjdGVkQ29tcHV0ZWRQYWdlc0Nh
bGxiYWNrKQorICAgICAgICAgICAgW3NlbGYgX2Fza1BhZ2VUb0NvbXB1dGVQYWdlUmVjdHNdOwor
CisgICAgICAgICpyYW5nZSA9IE5TTWFrZVJhbmdlKDEsIE5TSW50ZWdlck1heCk7CisgICAgfQor
ICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHVuc2lnbmVkKV9wYWdlRm9yUmVjdDooTlNSZWN0KXJl
Y3QKK3sKKyAgICAvLyBBc3N1bWluZyB0aGF0IHJlY3QgZXhhY3RseSBtYXRjaGVzIG9uZSBvZiB0
aGUgcGFnZXMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBfcHJpbnRpbmdQYWdlUmVjdHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSW50UmVjdCBjdXJyZW50UmVjdChfcHJpbnRpbmdQYWdl
UmVjdHNbaV0pOworICAgICAgICBjdXJyZW50UmVjdC5zY2FsZShfdG90YWxTY2FsZUZhY3RvckZv
clByaW50aW5nKTsKKyAgICAgICAgaWYgKHJlY3Qub3JpZ2luLnkgPT0gY3VycmVudFJlY3QueSgp
ICYmIHJlY3Qub3JpZ2luLnggPT0gY3VycmVudFJlY3QueCgpKQorICAgICAgICAgICAgcmV0dXJu
IGkgKyAxOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsg
Ly8gSW52YWxpZCBwYWdlIG51bWJlci4KK30KKworLSAodm9pZClfZHJhd1BERkRvY3VtZW50OihQ
REZEb2N1bWVudCAqKXBkZkRvY3VtZW50IHBhZ2U6KHVuc2lnbmVkKXBhZ2UgYXRQb2ludDooTlNQ
b2ludClwb2ludAoreworICAgIGlmICghcGRmRG9jdW1lbnQpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJDb3VsZG4ndCBjcmVhdGUgYSBQREYgZG9jdW1lbnQgd2l0aCBkYXRhIHBhc3NlZCBmb3IgcHJl
dmlldyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUERGUGFnZSAqcGRmUGFnZTsK
KyAgICBAdHJ5IHsKKyAgICAgICAgcGRmUGFnZSA9IFtwZGZEb2N1bWVudCBwYWdlQXRJbmRleDpw
YWdlXTsKKyAgICB9IEBjYXRjaCAoaWQgZXhjZXB0aW9uKSB7CisgICAgICAgIExPR19FUlJPUigi
UHJldmlldyBkYXRhIGRvZXNuJ3QgaGF2ZSBwYWdlICVkOiAlQCIsIHBhZ2UsIGV4Y2VwdGlvbik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU0dyYXBoaWNzQ29udGV4dCAqbnNHcmFw
aGljc0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOworICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dDb250ZXh0UmVmPihbbnNHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NQb3J0XSk7CisKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRl
eHQpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBwb2ludC54LCBwb2ludC55
KTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCBfdG90YWxTY2FsZUZhY3RvckZvclBy
aW50aW5nLCAtX3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyk7CisgICAgQ0dDb250ZXh0VHJh
bnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1bcGRmUGFnZSBib3VuZHNGb3JCb3g6a1BERkRpc3BsYXlC
b3hNZWRpYUJveF0uc2l6ZS5oZWlnaHQpOworICAgIFtwZGZQYWdlIGRyYXdXaXRoQm94OmtQREZE
aXNwbGF5Qm94TWVkaWFCb3hdOworCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0g
Q0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpOworCisgICAgZm9yIChQREZBbm5vdGF0aW9uICphbm5v
dGF0aW9uIGluIFtwZGZQYWdlIGFubm90YXRpb25zXSkgeworICAgICAgICBpZiAoIVthbm5vdGF0
aW9uIGlzS2luZE9mQ2xhc3M6cGRmQW5ub3RhdGlvbkxpbmtDbGFzcygpXSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIFBERkFubm90YXRpb25MaW5rICpsaW5rQW5ub3RhdGlvbiA9
IChQREZBbm5vdGF0aW9uTGluayAqKWFubm90YXRpb247CisgICAgICAgIE5TVVJMICp1cmwgPSBb
bGlua0Fubm90YXRpb24gVVJMXTsKKyAgICAgICAgaWYgKCF1cmwpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBDR1JlY3QgdXJsUmVjdCA9IE5TUmVjdFRvQ0dSZWN0KFtsaW5rQW5u
b3RhdGlvbiBib3VuZHNdKTsKKyAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkUmVjdCA9IENHUmVj
dEFwcGx5QWZmaW5lVHJhbnNmb3JtKHVybFJlY3QsIHRyYW5zZm9ybSk7CisgICAgICAgIENHUERG
Q29udGV4dFNldFVSTEZvclJlY3QoY29udGV4dCwgKENGVVJMUmVmKXVybCwgdHJhbnNmb3JtZWRS
ZWN0KTsKKyAgICB9CisKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworfQor
CistICh2b2lkKV9kcmF3UHJldmlldzooTlNSZWN0KW5zUmVjdAoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBJbnRSZWN0IHNjYWxlZFByaW50aW5nUmVjdChuc1JlY3Qp
OworICAgIHNjYWxlZFByaW50aW5nUmVjdC5zY2FsZSgxIC8gX3RvdGFsU2NhbGVGYWN0b3JGb3JQ
cmludGluZyk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUobnNSZWN0LnNpemUpOworICAgIGltYWdl
U2l6ZS5zY2FsZShfd2ViRnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAg
SGFzaE1hcDxXZWJDb3JlOjpJbnRSZWN0LCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPj46Oml0ZXJh
dG9yIHBhZ2VQcmV2aWV3SXRlcmF0b3IgPSBfcGFnZVByZXZpZXdzLmZpbmQoc2NhbGVkUHJpbnRp
bmdSZWN0KTsKKyAgICBpZiAocGFnZVByZXZpZXdJdGVyYXRvciA9PSBfcGFnZVByZXZpZXdzLmVu
ZCgpKSAgeworICAgICAgICAvLyBJdCdzIHRvbyBlYXJseSB0byBhc2sgZm9yIHBhZ2UgcHJldmll
dyBpZiB3ZSBkb24ndCBldmVuIGtub3cgcGFnZSBzaXplIGFuZCBzY2FsZS4KKyAgICAgICAgaWYg
KFtzZWxmIF9oYXNQYWdlUmVjdHNdKSB7CisgICAgICAgICAgICBpZiAodWludDY0X3QgZXhpc3Rp
bmdDYWxsYmFjayA9IFtzZWxmIF9leHBlY3RlZFByZXZpZXdDYWxsYmFja0ZvclJlY3Q6c2NhbGVk
UHJpbnRpbmdSZWN0XSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYXNrZWQg
Zm9yIGEgcHJldmlldyBvZiB0aGlzIHBhZ2UsIGFuZCBhcmUgd2FpdGluZyBmb3IgcmVzcG9uc2Uu
CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBhc2sgYWdhaW4uCisgICAg
ICAgICAgICAgICAgX2xhdGVzdEV4cGVjdGVkUHJldmlld0NhbGxiYWNrID0gZXhpc3RpbmdDYWxs
YmFjazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gUHJldmlldyBp
c24ndCBhdmFpbGFibGUgeWV0LCByZXF1ZXN0IGl0IGFzeW5jaHJvbm91c2x5LgorICAgICAgICAg
ICAgICAgIGlmICghX3dlYkZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgICAgIC8vIFJldHVybiB0byBwcmludGluZyBtb2RlIGlmIHdlJ3Jl
IGFscmVhZHkgYmFjayB0byBzY3JlZW4gKGUuZy4gZHVlIHRvIHdpbmRvdyByZXNpemluZykuCisg
ICAgICAgICAgICAgICAgX3dlYkZyYW1lLT5wYWdlKCktPmJlZ2luUHJpbnRpbmcoX3dlYkZyYW1l
LmdldCgpLCBQcmludEluZm8oW19wcmludE9wZXJhdGlvbiBwcmludEluZm9dKSk7CisKKyAgICAg
ICAgICAgICAgICBJUENDYWxsYmFja0NvbnRleHQqIGNvbnRleHQgPSBuZXcgSVBDQ2FsbGJhY2tD
b250ZXh0OworICAgICAgICAgICAgICAgIFJlZlB0cjxJbWFnZUNhbGxiYWNrPiBjYWxsYmFjayA9
IEltYWdlQ2FsbGJhY2s6OmNyZWF0ZShbY29udGV4dF0oYm9vbCwgY29uc3QgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmIGltYWdlSGFuZGxlKSB7CisgICAgICAgICAgICAgICAgICAgIE93blB0cjxJ
UENDYWxsYmFja0NvbnRleHQ+IGNvbnRleHREZWxldGVyID0gYWRvcHRQdHIoY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgICAgIHBhZ2VEaWREcmF3VG9JbWFnZShpbWFnZUhhbmRsZSwgY29udGV4
dCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgX2xhdGVzdEV4cGVjdGVk
UHJldmlld0NhbGxiYWNrID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKKyAgICAgICAgICAgICAg
ICBfZXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2tzLmFkZChfbGF0ZXN0RXhwZWN0ZWRQcmV2aWV3Q2Fs
bGJhY2ssIHNjYWxlZFByaW50aW5nUmVjdCk7CisKKyAgICAgICAgICAgICAgICBjb250ZXh0LT52
aWV3ID0gc2VsZjsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5jYWxsYmFja0lEID0gY2FsbGJh
Y2stPmNhbGxiYWNrSUQoKTsKKworICAgICAgICAgICAgICAgIF93ZWJGcmFtZS0+cGFnZSgpLT5k
cmF3UmVjdFRvSW1hZ2UoX3dlYkZyYW1lLmdldCgpLCBQcmludEluZm8oW19wcmludE9wZXJhdGlv
biBwcmludEluZm9dKSwgc2NhbGVkUHJpbnRpbmdSZWN0LCBpbWFnZVNpemUsIGNhbGxiYWNrLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBGSVhNRTogRHJhdyBhIHBsYWNlaG9sZGVyCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBwYWdlUHJldmll
d0l0ZXJhdG9yLT52YWx1ZTsKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gc3RhdGljX2Nh
c3Q8Q0dDb250ZXh0UmVmPihbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFw
aGljc1BvcnRdKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGNnQ29udGV4dCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOworCisgICAg
Yml0bWFwLT5wYWludChjb250ZXh0LCBfd2ViRnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKSwgSW50UG9pbnQobnNSZWN0Lm9yaWdpbiksIGJpdG1hcC0+Ym91bmRzKCkpOworfQorCist
ICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpbnNSZWN0Cit7CisgICAgTE9HKFZpZXcsICJXS1ByaW50
aW5nVmlldyAlcCBwcmludGluZyByZWN0IHg6JWcsIHk6JWcsIHdpZHRoOiVnLCBoZWlnaHQ6JWcl
cyIsIHNlbGYsIG5zUmVjdC5vcmlnaW4ueCwgbnNSZWN0Lm9yaWdpbi55LCBuc1JlY3Quc2l6ZS53
aWR0aCwgbnNSZWN0LnNpemUuaGVpZ2h0LCBbc2VsZiBfaXNQcmludGluZ1ByZXZpZXddID8gIiBm
b3IgcHJldmlldyIgOiAiIik7CisKKyAgICBBU1NFUlQoX3ByaW50T3BlcmF0aW9uID09IFtOU1By
aW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dKTsKKworICAgIGlmICghX3dlYkZyYW1lLT5w
YWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChbc2VsZiBfaXNQcmludGluZ1ByZXZp
ZXddKSB7CisgICAgICAgIFtzZWxmIF9kcmF3UHJldmlldzpuc1JlY3RdOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJU
KCFfcHJpbnRlZFBhZ2VzRGF0YS5pc0VtcHR5KCkpOyAvLyBQcmVwYXJlZCBieSBrbm93c1BhZ2VS
YW5nZToKKworICAgIGlmICghX3ByaW50ZWRQYWdlc1BERkRvY3VtZW50KSB7CisgICAgICAgIFJl
dGFpblB0cjxOU0RhdGE+IHBkZkRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0
aEJ5dGVzOl9wcmludGVkUGFnZXNEYXRhLmRhdGEoKSBsZW5ndGg6X3ByaW50ZWRQYWdlc0RhdGEu
c2l6ZSgpXSk7CisgICAgICAgIF9wcmludGVkUGFnZXNQREZEb2N1bWVudCA9IGFkb3B0TlMoW1tw
ZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0YTpwZGZEYXRhLmdldCgpXSk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgcHJpbnRlZFBhZ2VOdW1iZXIgPSBbc2VsZiBfcGFnZUZvclJl
Y3Q6bnNSZWN0XSAtIFtzZWxmIF9maXJzdFByaW50ZWRQYWdlTnVtYmVyXTsKKyAgICBbc2VsZiBf
ZHJhd1BERkRvY3VtZW50Ol9wcmludGVkUGFnZXNQREZEb2N1bWVudC5nZXQoKSBwYWdlOnByaW50
ZWRQYWdlTnVtYmVyIGF0UG9pbnQ6TlNNYWtlUG9pbnQobnNSZWN0Lm9yaWdpbi54LCBuc1JlY3Qu
b3JpZ2luLnkpXTsKK30KKworLSAodm9pZClfZHJhd1BhZ2VCb3JkZXJXaXRoU2l6ZU9uTWFpblRo
cmVhZDooTlNTaXplKWJvcmRlclNpemUKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgLy8gV2hlbiBwcmludGluZyBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgdGhlIG1h
aW4gdGhyZWFkIGRvZXNuJ3QgaGF2ZSBncmFwaGljcyBjb250ZXh0IGFuZCBwcmludGluZyBvcGVy
YXRpb24gc2V0IHVwLgorICAgIE5TR3JhcGhpY3NDb250ZXh0ICpjdXJyZW50Q29udGV4dCA9IFtO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CisgICAgW05TR3JhcGhpY3NDb250ZXh0
IHNldEN1cnJlbnRDb250ZXh0OltfcHJpbnRPcGVyYXRpb24gY29udGV4dF1dOworCisgICAgQVNT
RVJUKCFbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSk7CisgICAgW05TUHJpbnRP
cGVyYXRpb24gc2V0Q3VycmVudE9wZXJhdGlvbjpfcHJpbnRPcGVyYXRpb25dOworCisgICAgW3Nl
bGYgZHJhd1BhZ2VCb3JkZXJXaXRoU2l6ZTpib3JkZXJTaXplXTsKKworICAgIFtOU1ByaW50T3Bl
cmF0aW9uIHNldEN1cnJlbnRPcGVyYXRpb246bmlsXTsKKyAgICBbTlNHcmFwaGljc0NvbnRleHQg
c2V0Q3VycmVudENvbnRleHQ6Y3VycmVudENvbnRleHRdOworfQorCistICh2b2lkKWRyYXdQYWdl
Qm9yZGVyV2l0aFNpemU6KE5TU2l6ZSlib3JkZXJTaXplCit7CisgICAgQVNTRVJUKE5TRXF1YWxT
aXplcyhib3JkZXJTaXplLCBbW19wcmludE9wZXJhdGlvbiBwcmludEluZm9dIHBhcGVyU2l6ZV0p
KTsgICAgCisgICAgQVNTRVJUKF9wcmludE9wZXJhdGlvbiA9PSBbTlNQcmludE9wZXJhdGlvbiBj
dXJyZW50T3BlcmF0aW9uXSk7CisKKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAg
ICAgIC8vIERvbid0IGNhbGwgdGhlIGNsaWVudCBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZC4KKyAg
ICAgICAgTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uID0gW05TSW52b2NhdGlvbiBpbnZvY2F0aW9u
V2l0aE1ldGhvZFNpZ25hdHVyZTpbV0tQcmludGluZ1ZpZXcgaW5zdGFuY2VNZXRob2RTaWduYXR1
cmVGb3JTZWxlY3RvcjpAc2VsZWN0b3IoX2RyYXdQYWdlQm9yZGVyV2l0aFNpemVPbk1haW5UaHJl
YWQ6KV1dOworICAgICAgICBbaW52b2NhdGlvbiBzZXRTZWxlY3RvcjpAc2VsZWN0b3IoX2RyYXdQ
YWdlQm9yZGVyV2l0aFNpemVPbk1haW5UaHJlYWQ6KV07CisgICAgICAgIFtpbnZvY2F0aW9uIHNl
dEFyZ3VtZW50OiZib3JkZXJTaXplIGF0SW5kZXg6Ml07CisgICAgICAgIFtpbnZvY2F0aW9uIHBl
cmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpAc2VsZWN0b3IoaW52b2tlV2l0aFRhcmdldDopIHdp
dGhPYmplY3Q6c2VsZiB3YWl0VW50aWxEb25lOllFU107CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIV93ZWJGcmFtZS0+cGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBUaGUgaGVhZGVyIGFuZCBmb290ZXIgcmVjdCBoZWlnaHQgc2NhbGVzIHdpdGggdGhlIHBhZ2Us
IGJ1dCB0aGUgd2lkdGggaXMgYWx3YXlzCisgICAgLy8gYWxsIHRoZSB3YXkgYWNyb3NzIHRoZSBw
cmludGVkIHBhZ2UgKGluc2V0IGJ5IHByaW50aW5nIG1hcmdpbnMpLgorICAgIE5TUHJpbnRJbmZv
ICpwcmludEluZm8gPSBbX3ByaW50T3BlcmF0aW9uIHByaW50SW5mb107CisgICAgQ0dGbG9hdCBz
Y2FsZSA9IFtwcmludEluZm8gc2NhbGluZ0ZhY3Rvcl07CisgICAgTlNTaXplIHBhcGVyU2l6ZSA9
IFtwcmludEluZm8gcGFwZXJTaXplXTsKKyAgICBDR0Zsb2F0IGhlYWRlckZvb3RlckxlZnQgPSBb
cHJpbnRJbmZvIGxlZnRNYXJnaW5dIC8gc2NhbGU7CisgICAgQ0dGbG9hdCBoZWFkZXJGb290ZXJX
aWR0aCA9IChwYXBlclNpemUud2lkdGggLSAoW3ByaW50SW5mbyBsZWZ0TWFyZ2luXSArIFtwcmlu
dEluZm8gcmlnaHRNYXJnaW5dKSkgLyBzY2FsZTsKKyAgICBOU1JlY3QgZm9vdGVyUmVjdCA9IE5T
TWFrZVJlY3QoaGVhZGVyRm9vdGVyTGVmdCwgW3ByaW50SW5mbyBib3R0b21NYXJnaW5dIC8gc2Nh
bGUgLSBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KF93ZWJGcmFtZS5nZXQoKSksIGhl
YWRlckZvb3RlcldpZHRoLCBfd2ViRnJhbWUtPnBhZ2UoKS0+Zm9vdGVySGVpZ2h0KF93ZWJGcmFt
ZS5nZXQoKSkpOworICAgIE5TUmVjdCBoZWFkZXJSZWN0ID0gTlNNYWtlUmVjdChoZWFkZXJGb290
ZXJMZWZ0LCAocGFwZXJTaXplLmhlaWdodCAtIFtwcmludEluZm8gdG9wTWFyZ2luXSkgLyBzY2Fs
ZSwgaGVhZGVyRm9vdGVyV2lkdGgsIF93ZWJGcmFtZS0+cGFnZSgpLT5oZWFkZXJIZWlnaHQoX3dl
YkZyYW1lLmdldCgpKSk7CisKKyAgICBOU0dyYXBoaWNzQ29udGV4dCAqY3VycmVudENvbnRleHQg
PSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOworICAgIFtjdXJyZW50Q29udGV4
dCBzYXZlR3JhcGhpY3NTdGF0ZV07CisgICAgTlNSZWN0Q2xpcChoZWFkZXJSZWN0KTsKKyAgICBf
d2ViRnJhbWUtPnBhZ2UoKS0+ZHJhd0hlYWRlcihfd2ViRnJhbWUuZ2V0KCksIGhlYWRlclJlY3Qp
OworICAgIFtjdXJyZW50Q29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CisKKyAgICBbY3Vy
cmVudENvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOworICAgIE5TUmVjdENsaXAoZm9vdGVyUmVj
dCk7CisgICAgX3dlYkZyYW1lLT5wYWdlKCktPmRyYXdGb290ZXIoX3dlYkZyYW1lLmdldCgpLCBm
b290ZXJSZWN0KTsKKyAgICBbY3VycmVudENvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwor
fQorCistIChOU1JlY3QpcmVjdEZvclBhZ2U6KE5TSW50ZWdlcilwYWdlCit7CisgICAgQVNTRVJU
KF9wcmludE9wZXJhdGlvbiA9PSBbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSk7
CisgICAgaWYgKCFbc2VsZiBfaGFzUGFnZVJlY3RzXSkgeworICAgICAgICBMT0coVmlldywgIi1b
V0tQcmludGluZ1ZpZXcgJXAgcmVjdEZvclBhZ2U6JWRdIC0gZGF0YSBpcyBub3QgeWV0IGF2YWls
YWJsZSIsIHNlbGYsIChpbnQpcGFnZSk7CisgICAgICAgIGlmICghX3dlYkZyYW1lLT5wYWdlKCkp
IHsKKyAgICAgICAgICAgIC8vIFdlIG1heSBoYXZlIG5vdCB0b2xkIEFwcEtpdCBob3cgbWFueSBw
YWdlcyB0aGVyZSBhcmUsIHNvIGl0IHdpbGwgdHJ5IHRvIHByaW50IHVudGlsIGEgbnVsbCByZWN0
IGlzIHJldHVybmVkLgorICAgICAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgMCwgMCk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgbXVzdCBiZSBzdGlsbCBjYWxjdWxhdGluZyB0aGUg
cGFnZSByYW5nZS4KKyAgICAgICAgQVNTRVJUKF9leHBlY3RlZENvbXB1dGVkUGFnZXNDYWxsYmFj
ayk7CisgICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDEsIDEpOworICAgIH0KKworICAg
IC8vIElmIFdlYiBwcm9jZXNzIGNyYXNoZXMgd2hpbGUgY29tcHV0aW5nIHBhZ2UgcmVjdHMsIHdl
IG5ldmVyIHRlbGwgQXBwS2l0IGhvdyBtYW55IHBhZ2VzIHRoZXJlIGFyZS4KKyAgICAvLyBSZXR1
cm5pbmcgYSBudWxsIHJlY3QgcHJldmVudHMgc2VsZWN0aW5nIG5vbi1leGlzdGVudCBwYWdlcyBp
biBwcmV2aWV3IGRpYWxvZy4KKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBhZ2UpID4g
X3ByaW50aW5nUGFnZVJlY3RzLnNpemUoKSkgeworICAgICAgICBBU1NFUlQoIV93ZWJGcmFtZS0+
cGFnZSgpKTsKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgMCwgMCk7CisgICAgfQor
CisgICAgSW50UmVjdCByZWN0ID0gX3ByaW50aW5nUGFnZVJlY3RzW3BhZ2UgLSAxXTsKKyAgICBy
ZWN0LnNjYWxlKF90b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcpOworICAgIExPRyhWaWV3LCAi
LVtXS1ByaW50aW5nVmlldyAlcCByZWN0Rm9yUGFnZTolZF0gLT4geCAlZCwgeSAlZCwgd2lkdGgg
JWQsIGhlaWdodCAlZCIsIHNlbGYsIChpbnQpcGFnZSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiByZWN0OworfQorCisvLyBUZW1w
b3Jhcnkgd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzg5NDQ1MzU+LiBGb3JjZSBjb3Jy
ZWN0IHByaW50b3V0IHBvc2l0aW9uaW5nLgorLSAoTlNQb2ludClsb2NhdGlvbk9mUHJpbnRSZWN0
OihOU1JlY3QpYVJlY3QKK3sKKyAgICBBU1NFUlQoX3ByaW50T3BlcmF0aW9uID09IFtOU1ByaW50
T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dKTsKKyAgICByZXR1cm4gTlNNYWtlUG9pbnQoW1tf
cHJpbnRPcGVyYXRpb24gcHJpbnRJbmZvXSBsZWZ0TWFyZ2luXSwgW1tfcHJpbnRPcGVyYXRpb24g
cHJpbnRJbmZvXSBib3R0b21NYXJnaW5dKTsKK30KKworLSAodm9pZCliZWdpbkRvY3VtZW50Cit7
CisgICAgQVNTRVJUKF9wcmludE9wZXJhdGlvbiA9PSBbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50
T3BlcmF0aW9uXSk7CisKKyAgICAvLyBGb3JjaW5nIHByZXZpZXcgdXBkYXRlIGdldHMgdXMgaGVy
ZSwgYnV0IHBhZ2Ugc2V0dXAgaGFzbid0IGFjdHVhbGx5IGNoYW5nZWQuCisgICAgaWYgKGlzRm9y
Y2luZ1ByZXZpZXdVcGRhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhWaWV3LCAiLVtX
S1ByaW50aW5nVmlldyAlcCBiZWdpbkRvY3VtZW50XSIsIHNlbGYpOworCisgICAgW3N1cGVyIGJl
Z2luRG9jdW1lbnRdOworCisgICAgW3NlbGYgX3N1c3BlbmRBdXRvZGlzcGxheV07Cit9CisKKy0g
KHZvaWQpZW5kRG9jdW1lbnQKK3sKKyAgICBBU1NFUlQoX3ByaW50T3BlcmF0aW9uID09IFtOU1By
aW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dKTsKKworICAgIC8vIEZvcmNpbmcgcHJldmll
dyB1cGRhdGUgZ2V0cyB1cyBoZXJlLCBidXQgcGFnZSBzZXR1cCBoYXNuJ3QgYWN0dWFsbHkgY2hh
bmdlZC4KKyAgICBpZiAoaXNGb3JjaW5nUHJldmlld1VwZGF0ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgTE9HKFZpZXcsICItW1dLUHJpbnRpbmdWaWV3ICVwIGVuZERvY3VtZW50XSAtIGNsZWFy
aW5nIGNhY2hlZCBkYXRhIiwgc2VsZik7CisKKyAgICAvLyBCb3RoIGV4aXN0aW5nIGRhdGEgYW5k
IHBlbmRpbmcgcmVzcG9uc2VzIGFyZSBub3cgb2Jzb2xldGUuCisgICAgX3ByaW50aW5nUGFnZVJl
Y3RzLmNsZWFyKCk7CisgICAgX3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyA9IDE7CisgICAg
X3BhZ2VQcmV2aWV3cy5jbGVhcigpOworICAgIF9wcmludGVkUGFnZXNEYXRhLmNsZWFyKCk7Cisg
ICAgX3ByaW50ZWRQYWdlc1BERkRvY3VtZW50ID0gbnVsbHB0cjsKKyAgICBfZXhwZWN0ZWRDb21w
dXRlZFBhZ2VzQ2FsbGJhY2sgPSAwOworICAgIF9leHBlY3RlZFByZXZpZXdDYWxsYmFja3MuY2xl
YXIoKTsKKyAgICBfbGF0ZXN0RXhwZWN0ZWRQcmV2aWV3Q2FsbGJhY2sgPSAwOworICAgIF9leHBl
Y3RlZFByaW50Q2FsbGJhY2sgPSAwOworCisgICAgW3NlbGYgX2RlbGF5ZWRSZXN1bWVBdXRvZGlz
cGxheV07CisgICAgCisgICAgW3N1cGVyIGVuZERvY3VtZW50XTsKK30KK0BlbmQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tUZXh0SW5wdXRXaW5kb3dDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLVGV4dElucHV0V2luZG93Q29u
dHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyOGJlYWNhMjJjYWQzOTkyY2RiOTUzYzE2YzA0OTJhMDNk
MTc5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dL
VGV4dElucHV0V2luZG93Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXS1RleHRJ
bnB1dFdpbmRvd0NvbnRyb2xsZXJfaAorI2RlZmluZSBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xs
ZXJfaAorCisjaWYgVVNFKEFQUEtJVCkKKworQGNsYXNzIFdLVGV4dElucHV0UGFuZWw7CisKK0Bp
bnRlcmZhY2UgV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyIDogTlNPYmplY3QgeworICAgIFdL
VGV4dElucHV0UGFuZWwgKl9wYW5lbDsKK30KKworKyAoV0tUZXh0SW5wdXRXaW5kb3dDb250cm9s
bGVyICopc2hhcmVkVGV4dElucHV0V2luZG93Q29udHJvbGxlcjsKKworLSAoTlNUZXh0SW5wdXRD
b250ZXh0ICopaW5wdXRDb250ZXh0OworLSAoQk9PTClpbnRlcnByZXRLZXlFdmVudDooTlNFdmVu
dCAqKWV2ZW50IHVzaW5nTGVnYWN5Q29jb2FUZXh0SW5wdXQ6KEJPT0wpdXNpbmdMZWdhY3lDb2Nv
YVRleHRJbnB1dCBzdHJpbmc6KE5TU3RyaW5nICoqKXN0cmluZzsKKworLSAoQk9PTCloYXNNYXJr
ZWRUZXh0OworLSAodm9pZCl1bm1hcmtUZXh0OworCitAZW5kCisKKyNlbmRpZiAvLyBVU0UoQVBQ
S0lUKQorCisjZW5kaWYgLy8gV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tUZXh0SW5wdXRXaW5kb3dDb250cm9s
bGVyLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS1RleHRJbnB1dFdpbmRvd0Nv
bnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTMxMTIxNDc3MWM0Mzc0ODVlOTk1ZDk5ZWRlZjMwZWI1
NmQ5ZThmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
V0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1RleHRJbnB1dFdpbmRvd0NvbnRy
b2xsZXIuaCIKKworI2lmIFVTRShBUFBLSVQpCisKKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgorCitAaW50ZXJmYWNlIFdLVGV4dElucHV0VmlldyA6IE5TVGV4dFZpZXcgeworfQor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tUZXh0SW5wdXRWaWV3CisKKy0gKE5TQXJyYXkgKil2
YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0Cit7CisgICAgLy8gTGV0IFRTTSBrbm93IHRoYXQg
YSBib3R0b20gaW5wdXQgd2luZG93IHdvdWxkIGJlIGNyZWF0ZWQgZm9yIG1hcmtlZCB0ZXh0Lgor
ICAgIE5TQXJyYXkgKnJlZ3VsYXJBdHRyaWJ1dGVzID0gW3N1cGVyIHZhbGlkQXR0cmlidXRlc0Zv
ck1hcmtlZFRleHRdOworICAgIE5TTXV0YWJsZUFycmF5ICpmbG9hdGluZ1dpbmRvd0F0dHJpYnV0
ZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQXJyYXk6cmVndWxhckF0dHJpYnV0ZXNdOwor
ICAgIFtmbG9hdGluZ1dpbmRvd0F0dHJpYnV0ZXMgYWRkT2JqZWN0OkAiX19OU1VzZXNGbG9hdGlu
Z0lucHV0V2luZG93Il07CisgICAgcmV0dXJuIGZsb2F0aW5nV2luZG93QXR0cmlidXRlczsKK30K
KworQGVuZAorCitAaW50ZXJmYWNlIFdLVGV4dElucHV0UGFuZWwgOiBOU1BhbmVsIHsKKyAgICBO
U1RleHRWaWV3ICpfaW5wdXRUZXh0VmlldzsKK30KKworLSAoTlNUZXh0SW5wdXRDb250ZXh0ICop
X2lucHV0Q29udGV4dDsKKy0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihOU0V2ZW50ICopZXZl
bnQgdXNpbmdMZWdhY3lDb2NvYVRleHRJbnB1dDooQk9PTCl1c2luZ0xlZ2FjeUNvY29hVGV4dElu
cHV0IHN0cmluZzooTlNTdHJpbmcgKiopc3RyaW5nOworCistIChCT09MKV9oYXNNYXJrZWRUZXh0
OworLSAodm9pZClfdW5tYXJrVGV4dDsKKworQGVuZAorCisjZGVmaW5lIGlucHV0V2luZG93SGVp
Z2h0IDIwCisKK0BpbXBsZW1lbnRhdGlvbiBXS1RleHRJbnB1dFBhbmVsCisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3Zl
T2JzZXJ2ZXI6c2VsZl07CisgICAgCisgICAgW19pbnB1dFRleHRWaWV3IHJlbGVhc2VdOworICAg
IAorICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpOU1plcm9SZWN0IHN0eWxlTWFzazpXS0dldElucHV0
UGFuZWxXaW5kb3dTdHlsZSgpIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpZ
RVNdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICAvLyBT
ZXQgdGhlIGZyYW1lIHNpemUuCisgICAgTlNSZWN0IHZpc2libGVGcmFtZSA9IFtbTlNTY3JlZW4g
bWFpblNjcmVlbl0gdmlzaWJsZUZyYW1lXTsKKyAgICBOU1JlY3QgZnJhbWUgPSBOU01ha2VSZWN0
KHZpc2libGVGcmFtZS5vcmlnaW4ueCwgdmlzaWJsZUZyYW1lLm9yaWdpbi55LCB2aXNpYmxlRnJh
bWUuc2l6ZS53aWR0aCwgaW5wdXRXaW5kb3dIZWlnaHQpOworICAgICAKKyAgICBbc2VsZiBzZXRG
cmFtZTpmcmFtZSBkaXNwbGF5Ok5PXTsKKyAgICAgICAgCisgICAgX2lucHV0VGV4dFZpZXcgPSBb
W1dLVGV4dElucHV0VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbKE5TVmlldyAqKXNlbGYuY29u
dGVudFZpZXcgZnJhbWVdXTsKKyAgICBfaW5wdXRUZXh0Vmlldy5hdXRvcmVzaXppbmdNYXNrID0g
TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZSB8IE5TVmlld01heFhNYXJn
aW4gfCBOU1ZpZXdNaW5YTWFyZ2luIHwgTlNWaWV3TWF4WU1hcmdpbiB8IE5TVmlld01pbllNYXJn
aW47CisgICAgICAgIAorICAgIE5TU2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IFtbTlNTY3JvbGxW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOlsoTlNWaWV3ICopc2VsZi5jb250ZW50VmlldyBmcmFt
ZV1dOworICAgIHNjcm9sbFZpZXcuZG9jdW1lbnRWaWV3ID0gX2lucHV0VGV4dFZpZXc7CisgICAg
c2VsZi5jb250ZW50VmlldyA9IHNjcm9sbFZpZXc7CisgICAgW3Njcm9sbFZpZXcgcmVsZWFzZV07
CisgICAgICAgIAorICAgIFtzZWxmIHNldEZsb2F0aW5nUGFuZWw6WUVTXTsKKworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKV91bm1hcmtUZXh0Cit7CisgICAgW19pbnB1dFRleHRWaWV3
IHNldFN0cmluZzpAIiJdOworICAgIFtzZWxmIG9yZGVyT3V0Om5pbF07Cit9CisKKy0gKEJPT0wp
X2ludGVycHJldEtleUV2ZW50OihOU0V2ZW50ICopZXZlbnQgdXNpbmdMZWdhY3lDb2NvYVRleHRJ
bnB1dDooQk9PTCl1c2luZ0xlZ2FjeUNvY29hVGV4dElucHV0IHN0cmluZzooTlNTdHJpbmcgKiop
c3RyaW5nCit7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgICAgQk9PTCBo
YWRNYXJrZWRUZXh0ID0gW19pbnB1dFRleHRWaWV3IGhhc01hcmtlZFRleHRdOworI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHBvcAorIAorICAgICpzdHJpbmcgPSBuaWw7CisKKyAgICAvLyBMZXQg
VFNNIGtub3cgdGhhdCBhIGJvdHRvbSBpbnB1dCB3aW5kb3cgd291bGQgYmUgY3JlYXRlZCBmb3Ig
bWFya2VkIHRleHQuCisgICAgLy8gRklYTUU6IENhbiBiZSByZW1vdmVkIG9uY2Ugd2UgY2FuIHJl
bHkgb24gX19OU1VzZXNGbG9hdGluZ0lucHV0V2luZG93IChvciBhIGJldHRlciBBUEkpIGJlaW5n
IGF2YWlsYWJsZSBldmVyeXdoZXJlLgorICAgIEV2ZW50UmVmIGNhcmJvbkV2ZW50ID0gc3RhdGlj
X2Nhc3Q8RXZlbnRSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KFtldmVudCBldmVudFJlZl0pKTsKKyAg
ICBpZiAoY2FyYm9uRXZlbnQpIHsKKyAgICAgICAgQm9vbGVhbiBpZ25vcmVQQUggPSB0cnVlOwor
ICAgICAgICBTZXRFdmVudFBhcmFtZXRlcihjYXJib25FdmVudCwgJ2lQQUgnLCB0eXBlQm9vbGVh
biwgc2l6ZW9mKGlnbm9yZVBBSCksICZpZ25vcmVQQUgpOworICAgIH0KKworICAgIGlmICghW1tf
aW5wdXRUZXh0VmlldyBpbnB1dENvbnRleHRdIGhhbmRsZUV2ZW50OmV2ZW50XSkKKyAgICAgICAg
cmV0dXJuIE5POworICAgIAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAg
IGlmIChbX2lucHV0VGV4dFZpZXcgaGFzTWFya2VkVGV4dF0pIHsKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBwb3AKKyAgICAgICAgLy8gRG9uJ3Qgc2hvdyB0aGUgaW5wdXQgbWV0aG9kIHdpbmRv
dyBmb3IgZGVhZCBrZXlzCisgICAgICAgIGlmIChbW2V2ZW50IGNoYXJhY3RlcnNdIGxlbmd0aF0g
PiAwKQorICAgICAgICAgICAgW3NlbGYgb3JkZXJGcm9udDpuaWxdOworCisgICAgICAgIHJldHVy
biBZRVM7CisgICAgfQorCisgICAgYm9vbCBzaG91bGRSZXR1cm5UZXh0U3RyaW5nID0gaGFkTWFy
a2VkVGV4dDsKKworICAgIC8vIEluIHRoZSB1cGRhdGVkIENvY29hIHRleHQgaW5wdXQgbW9kZWwg
c3BlYywgd2UgYWx3YXlzIHdhbnQgdG8gcmV0dXJuIHRoZSB0ZXh0IGV2ZW4gaWYgdGhlIHRleHQg
dmlldyBkaWRuJ3QgaGF2ZSBtYXJrZWQgdGV4dC4KKyAgICBpZiAoIXVzaW5nTGVnYWN5Q29jb2FU
ZXh0SW5wdXQpCisgICAgICAgIHNob3VsZFJldHVyblRleHRTdHJpbmcgPSB0cnVlOworCisgICAg
aWYgKHNob3VsZFJldHVyblRleHRTdHJpbmcpIHsKKyAgICAgICAgW3NlbGYgb3JkZXJPdXQ6bmls
XTsKKworICAgICAgICBOU1N0cmluZyAqdGV4dCA9IFtbX2lucHV0VGV4dFZpZXcgdGV4dFN0b3Jh
Z2VdIHN0cmluZ107CisgICAgICAgIGlmIChbdGV4dCBsZW5ndGhdID4gMCkKKyAgICAgICAgICAg
ICpzdHJpbmcgPSBbW3RleHQgY29weV0gYXV0b3JlbGVhc2VdOworICAgIH0KKyAgICAgICAgICAg
IAorICAgIFtfaW5wdXRUZXh0VmlldyBzZXRTdHJpbmc6QCIiXTsKKyAgICByZXR1cm4gaGFkTWFy
a2VkVGV4dDsKK30KKworLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopX2lucHV0Q29udGV4dAorewor
ICAgIHJldHVybiBbX2lucHV0VGV4dFZpZXcgaW5wdXRDb250ZXh0XTsKK30KKworLSAoQk9PTClf
aGFzTWFya2VkVGV4dAoreworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAg
IHJldHVybiBbX2lucHV0VGV4dFZpZXcgaGFzTWFya2VkVGV4dF07CisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcG9wCit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLVGV4dElucHV0V2lu
ZG93Q29udHJvbGxlcgorCisrIChXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgKilzaGFyZWRU
ZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyCit7CisgICAgc3RhdGljIFdLVGV4dElucHV0V2luZG93
Q29udHJvbGxlciAqdGV4dElucHV0V2luZG93Q29udHJvbGxlcjsKKyAgICBpZiAoIXRleHRJbnB1
dFdpbmRvd0NvbnRyb2xsZXIpCisgICAgICAgIHRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIgPSBb
W1dLVGV4dElucHV0V2luZG93Q29udHJvbGxlciBhbGxvY10gaW5pdF07CisgICAgCisgICAgcmV0
dXJuIHRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXI7Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAKKyAgICBfcGFuZWwgPSBbW1dLVGV4dElucHV0UGFuZWwgYWxsb2NdIGluaXRdOworICAg
IAorICAgIHJldHVybiBzZWxmOworfQorCistIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENv
bnRleHQKK3sKKyAgICByZXR1cm4gW19wYW5lbCBfaW5wdXRDb250ZXh0XTsKK30KKworLSAoQk9P
TCloYXNNYXJrZWRUZXh0Cit7CisgICAgcmV0dXJuIFtfcGFuZWwgX2hhc01hcmtlZFRleHRdOwor
fQorCistIChCT09MKWludGVycHJldEtleUV2ZW50OihOU0V2ZW50ICopZXZlbnQgdXNpbmdMZWdh
Y3lDb2NvYVRleHRJbnB1dDooQk9PTCl1c2luZ0xlZ2FjeUNvY29hVGV4dElucHV0IHN0cmluZzoo
TlNTdHJpbmcgKiopc3RyaW5nCit7CisgICAgcmV0dXJuIFtfcGFuZWwgX2ludGVycHJldEtleUV2
ZW50OmV2ZW50IHVzaW5nTGVnYWN5Q29jb2FUZXh0SW5wdXQ6dXNpbmdMZWdhY3lDb2NvYVRleHRJ
bnB1dCBzdHJpbmc6c3RyaW5nXTsKK30KKworLSAodm9pZCl1bm1hcmtUZXh0Cit7CisgICAgW19w
YW5lbCBfdW5tYXJrVGV4dF07Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFVTRShBUFBLSVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZTY3ZjdhYTVlMGJkYmVhZWJkNTA3YzdkZDE0MGNiMjZiNGEzNWJmYS4uZDhiY2Q4NTQ4N2Fl
YjFiYjQ5MTNiMDY0ZjZlNDAyOTRlZjVkZjg4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODAsNiArODAsMTQgQEAKIAkJMEZD
QjRFNTMxOEJCRTA0NDAwMEZDRkM5IC8qIFdLSW50ZXJhY3Rpb25WaWV3Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFNDMxOEJCRTA0NDAwMEZD
RkM5IC8qIFdLSW50ZXJhY3Rpb25WaWV3Lm1tICovOyB9OwogCQkwRkNCNEU1NDE4QkJFMDQ0MDAw
RkNGQzkgLyogV0tTY3JvbGxWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkNCNEU0NDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3Lmgg
Ki87IH07CiAJCTBGQ0I0RTU1MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU0NTE4QkJF
MDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3Lm1tICovOyB9OworCQkwRkNCNEU2MDE4QkJFM0Q5
MDAwRkNGQzkgLyogRmluZEluZGljYXRvcldpbmRvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFNTYxOEJCRTNEOTAwMEZDRkM5IC8qIEZpbmRJ
bmRpY2F0b3JXaW5kb3cuaCAqLzsgfTsKKwkJMEZDQjRFNjExOEJCRTNEOTAwMEZDRkM5IC8qIEZp
bmRJbmRpY2F0b3JXaW5kb3cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkNCNEU1NzE4QkJFM0Q5MDAwRkNGQzkgLyogRmluZEluZGljYXRvcldpbmRv
dy5tbSAqLzsgfTsKKwkJMEZDQjRFNjIxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1
ODE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwuaCAqLzsgfTsKKwkJMEZDQjRFNjMx
OEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFNTkxOEJCRTNEOTAwMEZDRkM5IC8qIFBh
Z2VDbGllbnRJbXBsLm1tICovOyB9OworCQkwRkNCNEU2NjE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQ
cmludGluZ1ZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQ0I0RTVDMThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1ByaW50aW5nVmlldy5oICovOyB9Owor
CQkwRkNCNEU2NzE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1RDE4QkJFM0Q5MDAw
RkNGQzkgLyogV0tQcmludGluZ1ZpZXcubW0gKi87IH07CisJCTBGQ0I0RTY4MThCQkUzRDkwMDBG
Q0ZDOSAvKiBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTVFMThCQkUzRDkwMDBGQ0ZDOSAvKiBX
S1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLzsgfTsKKwkJMEZDQjRFNjkxOEJCRTNEOTAw
MEZDRkM5IC8qIFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTVGMThCQkUzRDkwMDBGQ0ZDOSAv
KiBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubW0gKi87IH07CiAJCTBGRjI0QTJEMTg3OUU0
QkMwMDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RjI0QTJCMTg3OUU0QkMwMDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMEZGMjRBMkUxODc5RTRCQzAwM0FCRjBDIC8q
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMjRBMkMxODc5RTRCQzAwM0FCRjBD
IC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQkx
QTA0Mzk3NjEyNEQwMzQ4MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwNDM5NzQxMjREMDM0ODAwRkZCRkI1
IC8qIFBsdWdpblByb2Nlc3MuaCAqLzsgfTsKQEAgLTE5NCw4ICsyMDIsNiBAQAogCQkxQTQ0Qjk1
NzE2QjczN0FBMDBCN0JCRDggLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExNzYzNTQxNkIxRDVEMDAwRDg4
RkQ2IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCAqLzsgfTsKIAkJMUE0NEI5NUIxNkI3M0Y5
RjAwQjdCQkQ4IC8qIFN0b3JhZ2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNDRCOTU5MTZCNzNGOUYwMEI3QkJEOCAvKiBTdG9yYWdl
TWFuYWdlci5jcHAgKi87IH07CiAJCTFBNDRCOTVDMTZCNzNGOUYwMEI3QkJEOCAvKiBTdG9yYWdl
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE0NEI5NUExNkI3M0Y5RjAwQjdCQkQ4IC8qIFN0b3JhZ2VNYW5hZ2VyLmggKi87IH07Ci0JCTFB
NEE5QUE4MTJCN0U3OTYwMDhGRTk4NCAvKiBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNEE5QUE2MTJC
N0U3OTYwMDhGRTk4NCAvKiBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLzsgfTsKLQkJ
MUE0QTlBQTkxMkI3RTc5NjAwOEZFOTg0IC8qIFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNEE5QUE3
MTJCN0U3OTYwMDhGRTk4NCAvKiBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubW0gKi87IH07
CiAJCTFBNEE5QzU1MTJCODE2Q0YwMDhGRTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTRBOUM1MzEy
QjgxNkNGMDA4RkU5ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwICovOyB9OwogCQkxQTRB
OUM1NjEyQjgxNkNGMDA4RkU5ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNEE5QzU0MTJCODE2Q0YwMDhG
RTk4NCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5oICovOyB9OwogCQkxQTRBOUM5QTEyQjgyMUNE
MDA4RkU5ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTRBOUM5OTEyQjgyMUNEMDA4RkU5ODQgLyog
TmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW0gKi87IH07CkBAIC0yNTAsOCArMjU2LDYgQEAKIAkJ
MUE5MEMyMzgxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMjM2MTI2NTA3MTcwMDNFNDRE
NCAvKiBQYWdlT3ZlcmxheS5jcHAgKi87IH07CiAJCTFBOTEwMDcxMTI2Njc1QzQwMDE4NDJGNSAv
KiBGaW5kSW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyogRmluZEluZGljYXRvci5oICovOyB9
OwogCQkxQTkxMDA3MjEyNjY3NUM0MDAxODQyRjUgLyogRmluZEluZGljYXRvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkxMDA3MDEyNjY3NUM0
MDAxODQyRjUgLyogRmluZEluZGljYXRvci5jcHAgKi87IH07Ci0JCTFBOTEwMTBBMTI2OEM4Q0Ew
MDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkxMDEwODEyNjhDOENBMDAxODQyRjUgLyogRmluZElu
ZGljYXRvcldpbmRvdy5oICovOyB9OwotCQkxQTkxMDEwQjEyNjhDOENBMDAxODQyRjUgLyogRmlu
ZEluZGljYXRvcldpbmRvdy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBOTEwMTA5MTI2OEM4Q0EwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yV2luZG93
Lm1tICovOyB9OwogCQkxQTkyREMxMTEyRjhCQTQ2MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MkRD
MTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAqLzsgfTsKIAkJMUE5MkRD
MTMxMkY4QkFCOTAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHRNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyREMxMjEyRjhCQUI5MDAxN0FG
NjUgLyogTGF5ZXJUcmVlQ29udGV4dE1hYy5tbSAqLzsgfTsKIAkJMUE5RTMyODkxODIxNjM2OTAw
RjVEMDRDIC8qIFdLUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOUUzMjg3MTgyMTYzNjkwMEY1RDA0QyAvKiBXS1Jl
bW90ZU9iamVjdFJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTEwMTEsOCArMTAxNSw2IEBACiAJCUJDMTExQjBGMTEyRjVFNEYwMDMz
N0JBQiAvKiBXZWJQYWdlUHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMxMTFCMEIxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eS5j
cHAgKi87IH07CiAJCUJDMTExQjExMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJQcm9jZXNzUHJveHku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMTFC
MEQxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlByb2Nlc3NQcm94eS5jcHAgKi87IH07CiAJCUJDMTEx
QjFEMTEyRjVGRTYwMDMzN0JBQiAvKiBQcm9jZXNzTGF1bmNoZXJNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzExMUIxQjExMkY1RkU2MDAzMzdC
QUIgLyogUHJvY2Vzc0xhdW5jaGVyTWFjLm1tICovOyB9OwotCQlCQzExMUI1MDExMkY2MTkyMDAz
MzdCQUIgLyogUGFnZUNsaWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMTExQjRCMTEyRjYxOTIwMDMzN0JBQiAvKiBQYWdlQ2xpZW50SW1w
bC5oICovOyB9OwotCQlCQzExMUI1MTExMkY2MTkyMDAzMzdCQUIgLyogUGFnZUNsaWVudEltcGwu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzExMUI0
QzExMkY2MTkyMDAzMzdCQUIgLyogUGFnZUNsaWVudEltcGwubW0gKi87IH07CiAJCUJDMTExQjVE
MTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTExQjVCMTEyRjYyOTgwMDMzN0JBQiAvKiBX
ZWJFdmVudEZhY3RvcnkuaCAqLzsgfTsKIAkJQkMxMTFCNUUxMTJGNjI5ODAwMzM3QkFCIC8qIFdl
YkV2ZW50RmFjdG9yeS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDMTExQjVDMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkubW0gKi87
IH07CiAJCUJDMTRERjc3MTIwQjVCNzkwMDgyNkMwQyAvKiBJbmplY3RlZEJ1bmRsZVNjcmlwdFdv
cmxkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE0
REY3NTEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oICovOyB9
OwpAQCAtMTQwMCw4ICsxNDAyLDYgQEAKIAkJREY1OEM2MzYxMzcxQUNBMDAwRjlBMzdDIC8qIE5h
dGl2ZVdlYldoZWVsRXZlbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBERjU4QzYzNTEzNzFBQ0EwMDBGOUEzN0MgLyogTmF0aXZlV2ViV2hlZWxF
dmVudE1hYy5tbSAqLzsgfTsKIAkJRTExRDM1QUUxNkI2M0QxQjAwNkQyM0Q3IC8qIGNvbS5hcHBs
ZS5XZWJQcm9jZXNzLnNiIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTk2N0UzNzE1MEFCNUUyMDBDNzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Mu
c2IgKi87IH07CiAJCUUxMzNGRDhBMTQyM0REN0YwMEZDN0JGQiAvKiBXZWJLaXQuaWNucyBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzM0ZEODkxNDIz
REQ3RjAwRkM3QkZCIC8qIFdlYktpdC5pY25zICovOyB9OwotCQlFMTM0RjAxNzEyRUE1RDMzMDA0
RUM1OEQgLyogV0tQcmludGluZ1ZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxMzRGMDE1MTJFQTVEMTEwMDRFQzU4RCAvKiBXS1ByaW50aW5nVmll
dy5oICovOyB9OwotCQlFMTM0RjAxQTEyRUE1RDk5MDA0RUM1OEQgLyogV0tQcmludGluZ1ZpZXcu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM0RjAx
OTEyRUE1RDk5MDA0RUM1OEQgLyogV0tQcmludGluZ1ZpZXcubW0gKi87IH07CiAJCUUxMzgzM0VD
MTg5QzMzQzgwMDFFMjM1MCAvKiBMb2NhbFN0b3JhZ2VEZXRhaWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM4MzNFQjE4OUMzM0M4MDAxRTIzNTAg
LyogTG9jYWxTdG9yYWdlRGV0YWlscy5oICovOyB9OwogCQlFMTRBOTU0OTE2RTAxNkE0MDA2OERF
ODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0QTk1NDcxNkUwMTZBNDAwNjhERTgy
IC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCAqLzsgfTsKIAkJRTE0QTk1
NEExNkUwMTZBNDAwNjhERTgyIC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTRBOTU0ODE2
RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLzsg
fTsKQEAgLTE3MzcsNiArMTczNywxNCBAQAogCQkwRkNCNEU0MzE4QkJFMDQ0MDAwRkNGQzkgLyog
V0tJbnRlcmFjdGlvblZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBXS0ludGVyYWN0aW9uVmlldy5tbTsgcGF0aCA9IGlvcy9XS0ludGVyYWN0aW9uVmlldy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQjRFNDQxOEJCRTA0NDAwMEZDRkM5
IC8qIFdLU2Nyb2xsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1Nj
cm9sbFZpZXcuaDsgcGF0aCA9IGlvcy9XS1Njcm9sbFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZDQjRFNDUxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLU2Nyb2xsVmlldy5tbTsg
cGF0aCA9IGlvcy9XS1Njcm9sbFZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQ0I0RTU2MThCQkUzRDkwMDBGQ0ZDOSAvKiBGaW5kSW5kaWNhdG9yV2luZG93LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRJbmRpY2F0b3JXaW5kb3cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDQjRFNTcxOEJCRTNEOTAwMEZDRkM5IC8qIEZpbmRJ
bmRpY2F0b3JXaW5kb3cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBGaW5kSW5kaWNhdG9yV2luZG93Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkNCNEU1ODE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUNsaWVudEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDQjRFNTkxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFnZUNsaWVudEltcGwu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0I0RTVDMThCQkUzRDkwMDBGQ0ZD
OSAvKiBXS1ByaW50aW5nVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S1ByaW50aW5nVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkNCNEU1RDE4
QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXS1ByaW50aW5nVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDQjRFNUUxOEJCRTNEOTAwMEZDRkM5IC8qIFdLVGV4dElucHV0V2luZG93
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1RleHRJbnB1
dFdpbmRvd0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDQjRF
NUYxOEJCRTNEOTAwMEZDRkM5IC8qIFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLVGV4dElucHV0V2luZG93Q29u
dHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMjRBMkIxODc5RTRC
QzAwM0FCRjBDIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRjI0QTJDMTg3OUU0QkMwMDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRjI0QTJGMTg3OUU0RkUwMDNBQkYwQyAvKiBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xODY0LDggKzE4NzIsNiBAQAogCQkxQTQ0NUJBNDE4NEQ1RkRBMDA0QjM0MTQgLyogV0tDb250
ZXh0Q29ubmVjdGlvbkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S0NvbnRleHRDb25uZWN0aW9uQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBNDRCOTU5MTZCNzNGOUYwMEI3QkJEOCAvKiBTdG9yYWdlTWFuYWdlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlTWFuYWdlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNDRCOTVBMTZCNzNGOUYwMEI3QkJEOCAvKiBTdG9yYWdl
TWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTWFuYWdl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTRBOUFBNjEyQjdFNzk2MDA4RkU5
ODQgLyogV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQTRBOUFBNzEyQjdFNzk2MDA4RkU5ODQgLyogV0tUZXh0SW5wdXRX
aW5kb3dDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQTRBOUM1MzEyQjgxNkNGMDA4RkU5ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0c2NhcGVQbHVnaW5N
b2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTRBOUM1NDEyQjgxNkNG
MDA4RkU5ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUE0QTlDOTkxMkI4MjFDRDAwOEZFOTg0IC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxl
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0c2NhcGVQ
bHVnaW5Nb2R1bGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI5LDgg
KzE5MzUsNiBAQAogCQkxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZU92ZXJsYXkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyog
RmluZEluZGljYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kSW5k
aWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTEwMDcwMTI2Njc1QzQw
MDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZpbmRJbmRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQTkxMDEwODEyNjhDOENBMDAxODQyRjUgLyogRmluZEluZGljYXRvcldpbmRvdy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kSW5kaWNhdG9yV2luZG93Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOTEwMTA5MTI2OEM4Q0EwMDE4NDJGNSAvKiBGaW5k
SW5kaWNhdG9yV2luZG93Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gRmluZEluZGljYXRvcldpbmRvdy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUE5MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJUcmVlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQTkyREMxMjEyRjhCQUI5MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29u
dGV4dE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExheWVy
VHJlZUNvbnRleHRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOUUzMjg3
MTgyMTYzNjkwMEY1RDA0QyAvKiBXS1JlbW90ZU9iamVjdFJlZ2lzdHJ5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUmVtb3RlT2JqZWN0UmVnaXN0cnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NzIsOCArMjc3Niw2IEBACiAJCUJDMTExQjBCMTEyRjVF
NEYwMDMzN0JBQiAvKiBXZWJQYWdlUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGZpbGVFbmNvZGluZyA9
IDQ7IHBhdGggPSBXZWJQYWdlUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzExMUIwRDExMkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vzc1Byb3h5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlByb2Nlc3NQcm94eS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTExQjFCMTEyRjVGRTYwMDMzN0JBQiAvKiBQcm9j
ZXNzTGF1bmNoZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBQcm9jZXNzTGF1bmNoZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJD
MTExQjRCMTEyRjYxOTIwMDMzN0JBQiAvKiBQYWdlQ2xpZW50SW1wbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQ2xpZW50SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCQzExMUI0QzExMkY2MTkyMDAzMzdCQUIgLyogUGFnZUNsaWVudEltcGwubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYWdlQ2xpZW50SW1wbC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMTFCNUIxMTJGNjI5ODAwMzM3QkFC
IC8qIFdlYkV2ZW50RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJFdmVudEZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMTFCNUMx
MTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50RmFjdG9yeS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMxMjJGQTMxMzI3MDdGMzAwRjdFQUMxIC8qIFBsdWdpblByb2Nlc3Mu
eGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gUGx1Z2luUHJvY2Vzcy54Y2NvbmZpZzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxOTYsOCArMzE5OCw2IEBACiAJCURGNThDNjMxMTM3MUFD
NTgwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5hdGl2ZVdlYldoZWVsRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJREY1OEM2MzUxMzcxQUNBMDAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZlbnRN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOYXRpdmVXZWJX
aGVlbEV2ZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTMzRkQ4OTE0
MjNERDdGMDBGQzdCRkIgLyogV2ViS2l0LmljbnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5pY25zOyBuYW1lID0gV2ViS2l0LmljbnM7IHBh
dGggPSBSZXNvdXJjZXMvV2ViS2l0LmljbnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUUxMzRGMDE1MTJFQTVEMTEwMDRFQzU4RCAvKiBXS1ByaW50aW5nVmlldy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS1ByaW50aW5nVmlldy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFMTM0RjAxOTEyRUE1RDk5MDA0RUM1OEQgLyogV0tQcmludGluZ1ZpZXcu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1ByaW50aW5nVmll
dy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEzODMzRUIxODlDMzNDODAwMUUy
MzUwIC8qIExvY2FsU3RvcmFnZURldGFpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTG9jYWxTdG9yYWdlRGV0YWlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMTRBOTU0NzE2RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1By
b2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMTRBOTU0ODE2RTAxNkE0MDA2OERFODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0
cmF0ZWdpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Byb2Nl
c3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
MzUzLDcgKzUzNTMsNiBAQAogCQlCQzExMUI0NzExMkY2MTY5MDAzMzdCQUIgLyogbWFjICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlCQ0JBQUM1ODE0NEUz
OEI5MDA1M0Y4MkYgLyogV0tWaWV3IERldGFpbHMgKi8sCiAJCQkJQkM4Njk5QjMxMTZBQURBQTAw
MkE5MjVCIC8qIFdLVmlldy5tbSAqLywKIAkJCQlCQzg2OTlCNDExNkFBREFBMDAyQTkyNUIgLyog
V0tWaWV3SW50ZXJuYWwuaCAqLywKIAkJCSk7CkBAIC01ODI0LDIxICs1ODIzLDYgQEAKIAkJCXBh
dGggPSBXZWJDb250ZW50U2VydmljZS5EZXZlbG9wbWVudDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07Ci0JCUJDQkFBQzU4MTQ0RTM4QjkwMDUzRjgyRiAvKiBXS1ZpZXcgRGV0YWls
cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUE5MTAx
MDgxMjY4QzhDQTAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3JXaW5kb3cuaCAqLywKLQkJCQkxQTkx
MDEwOTEyNjhDOENBMDAxODQyRjUgLyogRmluZEluZGljYXRvcldpbmRvdy5tbSAqLywKLQkJCQlC
QzExMUI0QjExMkY2MTkyMDAzMzdCQUIgLyogUGFnZUNsaWVudEltcGwuaCAqLywKLQkJCQlCQzEx
MUI0QzExMkY2MTkyMDAzMzdCQUIgLyogUGFnZUNsaWVudEltcGwubW0gKi8sCi0JCQkJRTEzNEYw
MTUxMkVBNUQxMTAwNEVDNThEIC8qIFdLUHJpbnRpbmdWaWV3LmggKi8sCi0JCQkJRTEzNEYwMTkx
MkVBNUQ5OTAwNEVDNThEIC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovLAotCQkJCTFBNEE5QUE2MTJC
N0U3OTYwMDhGRTk4NCAvKiBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLywKLQkJCQkx
QTRBOUFBNzEyQjdFNzk2MDA4RkU5ODQgLyogV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm1t
ICovLAotCQkJKTsKLQkJCW5hbWUgPSAiV0tWaWV3IERldGFpbHMiOwotCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKLQkJfTsKIAkJQkNCRUNEQkYxNkI1Q0UwRDAwMDQ3QTFBIC8qIFBsdWdpblNl
cnZpY2UuRGV2ZWxvcG1lbnQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKApAQCAtNTg2MCwxMiArNTg0NCwxNCBAQAogCQlCQ0NGMDg1QzExM0YzQjc1MDBDNjUwQzUg
LyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk4
NjgxNjBDRjE4NzY0NTM3MDAyMUU3OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSAqLywK
LQkJCQk4NjgxNjBDRDE4NzYzRDRCMDAyMUU3OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5o
ICovLAogCQkJCUI4NzhCNjEzMTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwuaCAq
LywKIAkJCQlCODc4QjYxNDEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLm1tICov
LAotCQkJCTBGRjI0QTJGMTg3OUU0RkUwMDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCTBGQ0I0RTU2MThCQkUzRDkwMDBGQ0ZDOSAv
KiBGaW5kSW5kaWNhdG9yV2luZG93LmggKi8sCisJCQkJMEZDQjRFNTcxOEJCRTNEOTAwMEZDRkM5
IC8qIEZpbmRJbmRpY2F0b3JXaW5kb3cubW0gKi8sCisJCQkJMEZDQjRFNTgxOEJCRTNEOTAwMEZD
RkM5IC8qIFBhZ2VDbGllbnRJbXBsLmggKi8sCisJCQkJMEZDQjRFNTkxOEJCRTNEOTAwMEZDRkM5
IC8qIFBhZ2VDbGllbnRJbXBsLm1tICovLAogCQkJCTFBQjE2QUUwMTY0ODY1NkQwMDI5MEQ2MiAv
KiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmggKi8sCisJCQkJMEZGMjRBMkYxODc5
RTRGRTAwM0FCRjBDIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMu
aW4gKi8sCiAJCQkJMUFCMTZBREYxNjQ4NjU2RDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHkubW0gKi8sCiAJCQkJMUFBM0Q3NUExNjUxQjQ0RjAwODcxM0QwIC8qIFJl
bW90ZUxheWVyVHJlZUhvc3QuaCAqLywKIAkJCQkxQUEzRDc1OTE2NTFCNDRGMDA4NzEzRDAgLyog
UmVtb3RlTGF5ZXJUcmVlSG9zdC5tbSAqLywKQEAgLTU4NzYsOCArNTg2Miw4IEBACiAJCQkJMUFG
MDVEODUxNDY4ODM0ODAwOEIxRTgxIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJv
eHkuaCAqLywKIAkJCQkxQUYwNUQ4NDE0Njg4MzQ4MDA4QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWFQcm94eS5tbSAqLywKIAkJCQkyRDEyNUM1QzE4NTdFQTA1MDAzQkEzQ0Ig
LyogVmlld0dlc3R1cmVDb250cm9sbGVyLmggKi8sCi0JCQkJMkQxMjVDNUQxODU3RUEwNTAwM0JB
M0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSAqLywKIAkJCQkyRDFCNUQ1QTE4NTg2
NTk5MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluICovLAorCQkJ
CTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0g
Ki8sCiAJCQkJMkQ2Q0QxMTcxODkwNThBNTAwRTVBNEEwIC8qIFZpZXdTbmFwc2hvdFN0b3JlLmgg
Ki8sCiAJCQkJMkQ2Q0QxMTgxODkwNThBNTAwRTVBNEEwIC8qIFZpZXdTbmFwc2hvdFN0b3JlLm1t
ICovLAogCQkJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5o
ICovLApAQCAtNTg5MiwxMCArNTg3OCwxNiBAQAogCQkJCUJDNTc1MDk2MTI2OEYzQzYwMDZGMEYx
MiAvKiBXZWJQb3B1cE1lbnVQcm94eU1hYy5tbSAqLywKIAkJCQlCQzg0RUIxNzEyQTcxMDBDMDA4
M0YyREEgLyogV2ViUHJlZmVyZW5jZXNNYWMubW0gKi8sCiAJCQkJNTFEMTMwNTcxMzgyRjEwNTAw
MzUxRUREIC8qIFdlYlByb2Nlc3NQcm94eU1hYy5tbSAqLywKKwkJCQk4NjgxNjBDRDE4NzYzRDRC
MDAyMUU3OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5oICovLAorCQkJCTg2ODE2MENGMTg3
NjQ1MzcwMDIxRTc5RCAvKiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tICovLAogCQkJCUUxQUVB
MjJEMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAqLywK
IAkJCQlFMUFFQTIyRTE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRj
aGVyLm1tICovLAogCQkJCUNEQ0E4NUM3MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyLmggKi8sCiAJCQkJQ0RDQTg1QzYxMzJBQkE0RTAwRTk2MURGIC8qIFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0gKi8sCisJCQkJMEZDQjRFNUMxOEJCRTNEOTAw
MEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3LmggKi8sCisJCQkJMEZDQjRFNUQxOEJCRTNEOTAwMEZD
RkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovLAorCQkJCTBGQ0I0RTVFMThCQkUzRDkwMDBGQ0ZD
OSAvKiBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLywKKwkJCQkwRkNCNEU1RjE4QkJF
M0Q5MDAwRkNGQzkgLyogV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm1tICovLAogCQkJKTsK
IAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNjMwMiw2ICs2
Mjk0LDcgQEAKIAkJCQlCQ0EyODRENzE0OTJGMkM3MDAxRjkwNDIgLyogV0tDb25uZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzAxN0QwNzE2MjYwRkY0MDA3MDU0RjUgLyogV0tET01Eb2N1
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMTdEMDkxNjI2MEZGNDAwNzA1NEY1IC8qIFdL
RE9NRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDQjRFNjIxOEJCRTNEOTAwMEZDRkM5
IC8qIFBhZ2VDbGllbnRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAxN0QwRDE2MjYwRkY0
MDA3MDU0RjUgLyogV0tET01Ob2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzM5QzQzNjE2MjYz
NjZGMDA4QkM2ODkgLyogV0tET01SYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjkzRUJFQUIx
NjI3RDlDOTAwNUY4OUYxIC8qIFdLRE9NVGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzYyLDcg
KzYzNTUsNiBAQAogCQkJCTFBOTBDMUY0MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MTAwNzExMjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJ
bmRpY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUU3NzI4MTgzREQ2RjYwMDA3MjAzRiAv
KiBBc3luY1JlcXVlc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOTEwMTBBMTI2OEM4Q0EwMDE4
NDJGNSAvKiBGaW5kSW5kaWNhdG9yV2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U4MUQ4
RDEzMTlGN0VGMDAyNDE5MTAgLyogRm9udEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQkMz
REZDMTg5OUY1MUMwMDRGMDYyNiAvKiBXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxNzc1M0YxMThCQUJGMDAwN0Q5RTlBIC8qIEdlbmVyaWNDYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02NDAwLDYgKzYzOTIsNyBAQAogCQkJCTFBOUUzMjg5MTgyMTYzNjkw
MEY1RDA0QyAvKiBXS1JlbW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTY1NEVGRTE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVT
UUxpdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzNFMEQxMTI0MDhFODYwMDM2MEYzRiAvKiBJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkNCNEU2MDE4
QkJFM0Q5MDAwRkNGQzkgLyogRmluZEluZGljYXRvcldpbmRvdy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxNERGNzcxMjBCNUI3OTAwODI2QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjBCMERFMTIzMDVBOEMwMEIxMzQxRSAvKiBJbmplY3Rl
ZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUU0OUE0OTEx
RkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDcxLDcg
KzY0NjQsNiBAQAogCQkJCTFBNUIxQzUxMTg5ODYwNkYwMDRGQ0Y5QiAvKiBXS05hdmlnYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDRjQ3RkZCMTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFu
bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZFREFBNjExMTI3MUM2MDBFNzY3OEIgLyogUGFn
ZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxMTFCNTAxMTJGNjE5MjAwMzM3QkFCIC8q
IFBhZ2VDbGllbnRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTkwQzIzNzEyNjUwNzE3MDAz
RTQ0RDQgLyogUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NzRBNTgxMTJFNjY2
ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOTU4
MkQzMTUzQ0JGRDcwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLmggaW4gSGVhZGVycyAqLywKQEAg
LTY0OTksNiArNjQ5MSw3IEBACiAJCQkJMUEyQkI2RDExNDExN0I0RDAwMEYzNUQ0IC8qIFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkQ5MEQy
MTI4MUM5NjYwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTBFQzYwMzEyNEE5RjJDMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vz
c01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQ0I0RTY2MThCQkUzRDkwMDBGQ0ZDOSAv
KiBXS1ByaW50aW5nVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExRUM2OUUxODcyMDkyMTAw
Qjk1MUYwIC8qIEltcG9ydGFuY2VBc3NlcnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMEVD
NkMwMTI0QkJEOUIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBMEVDNzVFMTI0QkM3QjIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHku
aCBpbiBIZWFkZXJzICovLApAQCAtNjkwMCw3ICs2ODkzLDYgQEAKIAkJCQk3NjJCNzQ4RDEyMEJD
NzVDMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTM3QzRDMDg5MTgxNDlGMjMwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1JbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFEMEQ0MzcxODNCMzUzRDAwOTcwNDFEIC8qIERhdGFi
YXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTEz
NEYwMTcxMkVBNUQzMzAwNEVDNThEIC8qIFdLUHJpbnRpbmdWaWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0JBQUNFRDE0NTIyNUUzMDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXBQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNThGQzEyQTg4QTU0MDA2Mjk1MzAgLyogV0tQcm90ZWN0
aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOEFDQUVBMTJBRUU2QkIwMEIwNEI4MyAv
KiBXS1Byb3RlY3Rpb25TcGFjZVR5cGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MjMsNyArNjkx
NSw2IEBACiAJCQkJQkM0MDc2MUExMjRGRjAzNzAwNjhGMjBBIC8qIFdLU3RyaW5nQ0YuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc1OUNDRDU5MTgwOEYxNjkwMDc4RThBOCAvKiBXZWJPcmlnaW5EYXRh
TWFuYWdlclByb3h5Q2hhbmdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzkwOTk4MDEy
NTZBOTgyMDAwODM3NTYgLyogV0tTdHJpbmdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQkx
QTRBOUFBODEyQjdFNzk2MDA4RkU5ODQgLyogV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTc1MDk1QTE4OTcyNDk3MDA0MDhGQUMgLyogSURCSWRlbnRp
Zmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzQzg4ODAxOEE1QUJBRTAwQzRDOTYyIC8qIFdL
UHJlZmVyZW5jZXNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0MDc2MDgxMjRGRjAy
NzAwNjhGMjBBIC8qIFdLVHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTQ0LDYgKzY5MzUsNyBA
QAogCQkJCUM1RTFBRkU5MTZCMjBCNzUwMDZDQzFGMiAvKiBXS1dlYkFyY2hpdmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM1RTFBRkVCMTZCMjBCN0UwMDZDQzFGMiAvKiBXS1dlYkFyY2hpdmVSZXNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5ODlEODIxNjFBN0U1RDAwMEQ0NkQzIC8qIFdL
V2ViUHJvY2Vzc1BsdWdJbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDQjRFNjgxOEJCRTNEOTAw
MEZDRkM5IC8qIFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM4RjJGMkUxNjI3M0FDQzAwNUZBQ0I1IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJD
b250ZXh0Q29udHJvbGxlckludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOTUwMTcyNDE2
MkE0NTA0MDA0QTlENzEgLyogV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9s
bGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUY3NTA2QjYxODU5MTY1NzAwRUMwRkY3
IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CkBAIC03NzUyLDcgKzc3NDQsNiBAQAogCQkJCTFBMUUwOTMzMTg4NjFEMzgwMEQyREM0OSAvKiBX
ZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE5MEMxRjUx
MjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTFBOTEwMDcyMTI2Njc1QzQwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTFBOTEwMTBCMTI2OEM4Q0EwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yV2luZG93
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFODFEOEMxMzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3OEUxQTQ5MTgyMDhDRDYwMDMxMDA3QSAvKiBX
S05TU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwNkY0MzAxMkRCQjlCNjAwMkQ3OERF
IC8qIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzc3NywxMCArNzc2OCwxMiBAQAogCQkJCUNENjdEMzBFMTVDMDhGOUEwMDg0M0FERiAv
KiBJbmplY3RlZEJ1bmRsZVBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMUVFNTNFNzExRjhDRkZCMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTRFMTA5MTIwQjkwNUUwMDgy
NkMwQyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGQ0I0RTY5MThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkzN0QwQjVDODE4NDUyMzI3MDBGNkNFN0QgLyogV0tF
cnJvclJlY292ZXJ5QXR0ZW1wdGluZy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q1QzY2QTAxMzRC
OUQzODAwNEZFMkE4IC8qIEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNzU1NDIyQ0IxODA2NTAwMjAwNDZGNkE4IC8qIFdlYk9yaWdpbkRh
dGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQThDNkE4MTFFM0JBNUYwMDgxMkZC
NyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZDQjRFNjcxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFBQjAzN0MxODVGOTlEODAwRURGNTAxIC8qIEFQSURhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM4MTQ3QUExMkY2NENEQTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxl
UGFnZVBvbGljeUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTlDNTUxRTEzMDAwNjQx
MDAyNUMwQzIgLyogSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzg2MSw3ICs3ODU0LDYgQEAKIAkJCQk1MUUzNTFGNTE4MEY1Qzc1MDBF
NTNCRTkgLyogV2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Mz
ODc0MzQxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M2RDM3RkMxNzJGNTU1RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJNYWMubW0gaW4gU291cmNl
cyAqLywKLQkJCQlCQzExMUI1MTExMkY2MTkyMDAzMzdCQUIgLyogUGFnZUNsaWVudEltcGwubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxQTkwQzIzODEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJs
YXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU3NEE1ODIxMkU2NjY4MTAwMkRGRTk4IC8qIFBh
c3RlYm9hcmRUeXBlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxOTU4MkQ2MTUzQ0MwNTQwMEI2
MDg3NSAvKiBQREZLaXRJbXBvcnRzLm1tIGluIFNvdXJjZXMgKi8sCkBAIC04MTg5LDYgKzgxODEs
NyBAQAogCQkJCUJDQkFBQzcyMTQ0RTYxOTkwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0JBQUNGNTE0NTIzMjRGMDA1M0Y4MkYg
LyogV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMjkwOTky
MTgzQUNFQUYwMDU1MjJBNiAvKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGQ0I0RTYxMThCQkUzRDkwMDBGQ0ZDOSAvKiBGaW5kSW5kaWNhdG9yV2luZG93
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMDRFRUUxMUM4M0VDODAwOEYzMzc1IC8qIFdLQnVu
ZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDNkU3MEZCMThCMkRDN0EwMEYyNEUyRSAvKiBX
ZWJQcm9jZXNzQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzVFRUI5RTEyNzc2MUFDMDAz
MzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04
MjgxLDcgKzgyNzQsNiBAQAogCQkJCTdDMTM1QUE4MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdp
bkluZm9ybWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQzg2RkYzMTMwQjQ2RDMwMDJD
MTI1NyAvKiBXS1BsdWdpblNpdGVEYXRhTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0Q1OTdEMTExMkI1NkFDMDBFQzhDMjMgLyogV0tQcmVmZXJlbmNlcy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlFMTM0RjAxQTEyRUE1RDk5MDA0RUM1OEQgLyogV0tQcmludGluZ1ZpZXcubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQ0JBQUNFQzE0NTIyNUUzMDA1M0Y4MkYgLyogV0tQcm9jZXNzR3Jv
dXAubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNThGQjEyQTg4QTU0MDA2Mjk1MzAgLyogV0tQ
cm90ZWN0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc5NDg0MDgxNTBDNEI5NzAw
RTUyQ0U5IC8qIFdLUmVuZGVyTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjkzLDcgKzgy
ODUsNiBAQAogCQkJCTFBQzEzMzcxMTg1NjZDN0MwMEYzRUMwNSAvKiBBUElGcmFtZUhhbmRsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzYwNTEyNEZGMDI3MDA2OEYyMEEgLyogV0tTdHJp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc2MTkxMjRGRjAzNzAwNjhGMjBBIC8qIFdL
U3RyaW5nQ0YubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQTRBOUFBOTEyQjdFNzk2MDA4RkU5ODQg
LyogV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFD
NzUzN0IxODNBOUZEQjAwNzJDQjE1IC8qIFBhZ2VMb2FkU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM0MDc2MDcxMjRGRjAyNzAwNjhGMjBBIC8qIFdLVHlwZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3Q0Q1RUJCRTE3NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5tbSBp
biBTb3VyY2VzICovLApAQCAtODMwNiw2ICs4Mjk3LDcgQEAKIAkJCQlCQzQwNzYyQTEyNEZGMDQw
MDA2OEYyMEEgLyogV0tVUkxSZXF1ZXN0TlMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJBOTc2
MDE4MEUwMzFEMDAzOUExNDkgLyogRGF0YWJhc2VQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDNDA3NjBEMTI0RkYwMjcwMDY4RjIwQSAvKiBXS1VSTFJlc3Bv
bnNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQ0I0RTYzMThCQkUzRDkwMDBGQ0ZDOSAvKiBQ
YWdlQ2xpZW50SW1wbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBRENCODZBMTg5ODMxQjMwMDIy
RUU1QSAvKiBOYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQw
NzYyQzEyNEZGMDQwMDA2OEYyMEEgLyogV0tVUkxSZXNwb25zZU5TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkQ4MTlCOUUxODYyN0VFOTAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xs
ZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="249197"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>