<?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>84099</bug_id>
          
          <creation_ts>2012-04-16 16:55:07 -0700</creation_ts>
          <short_desc>[Mac] USPS Shipping label prints without barcode</short_desc>
          <delta_ts>2012-04-17 20:34:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Printing</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>603575</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-04-16 16:55:07 -0700</bug_when>
    <thetext>USPS Shipping label prints without barcode

&lt;rdar://problem/11133877&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603588</commentid>
    <comment_count>1</comment_count>
      <attachid>137435</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-04-16 17:08:14 -0700</bug_when>
    <thetext>Created attachment 137435
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604247</commentid>
    <comment_count>2</comment_count>
      <attachid>137583</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-04-17 12:32:55 -0700</bug_when>
    <thetext>Created attachment 137583
updated to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604564</commentid>
    <comment_count>3</comment_count>
      <attachid>137583</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-17 20:34:26 -0700</bug_when>
    <thetext>Comment on attachment 137583
updated to ToT

Clearing flags on attachment: 137583

Committed r114476: &lt;http://trac.webkit.org/changeset/114476&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604565</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-17 20:34:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137435</attachid>
            <date>2012-04-16 17:08:14 -0700</date>
            <delta_ts>2012-04-17 12:32:55 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>USPS.txt</filename>
            <type>text/plain</type>
            <size>99454</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNDMyMCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA0LTE2ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIFVTUFMgU2hpcHBp
bmcgbGFiZWwgcHJpbnRzIHdpdGhvdXQgYmFyY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQwOTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEx
MTMzODc3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVzZSBQREZEb2N1ZW1udCBpbnN0ZWFkIG9mIENHUERGRG9jdW1lbnQgd2hlbiBwcmludGluZyBQ
REZzLCBiZWNhdXNlIFBERktpdCBrbm93cworICAgICAgICBob3cgdG8gZHJhdyBQREYgYnV0dG9u
cywgYW5kIENHIGRvZXMgbm90LgorCisgICAgICAgICogU2hhcmVkL21hYy9QREZLaXRJbXBvcnRz
Lmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5tbTogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAg
IE1vdmVkIGNvZGUgZm9yIGRlYWxpbmcgd2l0aCBkeW5hbWljYWxseSBsb2FkZWQgUERGS2l0IGZy
b20gV0tQcmludGluZ1ZpZXcsIGFzIHdlCisgICAgICAgIG5vdyBhbHNvIG5lZWQgaXQgZWxzZXdo
ZXJlLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRl
ZAorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuY3BwOiBS
ZWJhbWVkIHRvIC5tbS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJ
blBERlZpZXcuaDogQ2hhbmdlZCBtX3BkZkRvY3VtZW50IHRvIFBERkRvY3VtZW50LgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbTogQ29waWVkIGZy
b20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5j
cHAuCisgICAgICAgIChXZWJLaXQ6OkJ1aWx0SW5QREZWaWV3OjpwZGZEb2N1bWVudERpZExvYWQp
OgorICAgICAgICAoV2ViS2l0OjpCdWlsdEluUERGVmlldzo6Y2FsY3VsYXRlU2l6ZXMpOgorICAg
ICAgICAoV2ViS2l0OjpCdWlsdEluUERGVmlldzo6cGFpbnRDb250ZW50KToKKyAgICAgICAgQ2hh
bmdlZCBtX3BkZkRvY3VtZW50IHRvIFBERkRvY3VtZW50LCBhbmQgdXBkYXRlZCBmb3IgdGhlIGNo
YW5nZXMuIFdlIHN0aWxsIHVzZQorICAgICAgICBDR1BERiB3aGVuIGRyYXdpbmcgdG8gc2NyZWVu
IHRob3VnaCwgYmVjYXVzZSB0aGF0IGRvZXNuJ3QgYWZmZWN0IFVTUFMuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmg6IChXZWJLaXQ6OlBsdWdpbjo6cGRmRG9jdW1lbnRG
b3JQcmludGluZyk6IFVwZGF0ZWQKKyAgICAgICAgdGhlIHR5cGUsIGFuZCBjaGFuZ2VkIGlmc2Vk
IGZyb20gQ0cgdG8gTUFDLCBhcyB3ZSdyZSBub3cgZnVsbHkgZGVwZW5kZW50IG9uIENvY29hLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaDogKFdlYktpdDo6UGx1
Z2luVmlldzo6cGRmRG9jdW1lbnRGb3JQcmludGluZyk6CisgICAgICAgIERpdHRvLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpwZGZEb2N1bWVudEZvclByaW50aW5nRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpiZWdpblByaW50aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcHV0
ZVBhZ2VzRm9yUHJpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UmVjdFRv
UERGKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREYpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIE1vdmVkIFBERiBkb2N1
bWVudCBwcmludGluZyBjb2RlIHRvIFdlYlBhZ2VNYWMubW0sIGFzIGl0J3Mgbm93IE9iamVjdGl2
ZSBDLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQcmludGluZ1BERkRvY3Vt
ZW50KToKKyAgICAgICAgKFdlYktpdDo6cm91bmRDR0Zsb2F0KToKKyAgICAgICAgKFdlYktpdDo6
ZHJhd1BERlBhZ2UpOiBXaGlsZSBtb3ZpbmcsIGFsc28gZml4ZWQgYSBsb2dpYyBlcnJvciBpbiBj
YWxjdWxhdGluZyB0aGUgYm94CisgICAgICAgIChpdCB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGFu
IGVtcHR5IGJveCkuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRyYXdSZWN0VG9QREZGcm9t
UERGRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UGFnZXNUb1BERkZy
b21QREZEb2N1bWVudCk6CisKIDIwMTItMDQtMTYgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KIAogICAgICAgICBOaWdodGx5IEJhY2svRm9yd2FyZCBubyBsb25nZXIgY2Fs
bHMgcGx1Zy1pbidzIE5QUF9OZXdTdHJlYW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvUERGS2l0SW1wb3J0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvUERGS2l0SW1wb3J0cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9QREZLaXRJbXBvcnRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFBERktpdEltcG9ydHNfaAorI2RlZmluZSBQREZLaXRJbXBvcnRzX2gK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK05TU3RyaW5nICpwZGZLaXRGcmFtZXdvcmtQYXRoKCk7
CitDbGFzcyBjbGFzc0Zyb21QREZLaXQoTlNTdHJpbmcgKmNsYXNzTmFtZSk7CitDbGFzcyBwZGZB
bm5vdGF0aW9uTGlua0NsYXNzKCk7CitDbGFzcyBwZGZEb2N1bWVudENsYXNzKCk7CisKK30KKwor
I2VuZGlmIC8vIFBERktpdEltcG9ydHNfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLmgKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVv
bC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERG
S2l0SW1wb3J0cy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BE
RktpdEltcG9ydHMubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1BERktpdEltcG9ydHMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUERGS2l0SW1wb3J0cy5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworTlNTdHJpbmcgKnBkZktpdEZyYW1ld29ya1BhdGgoKQorewor
ICAgIE5TU3RyaW5nICpzeXN0ZW1MaWJyYXJ5UGF0aCA9IFtOU1NlYXJjaFBhdGhGb3JEaXJlY3Rv
cmllc0luRG9tYWlucyhOU0xpYnJhcnlEaXJlY3RvcnksIE5TU3lzdGVtRG9tYWluTWFzaywgTk8p
IG9iamVjdEF0SW5kZXg6MF07CisgICAgcmV0dXJuIFtzeXN0ZW1MaWJyYXJ5UGF0aCBzdHJpbmdC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJGcmFtZXdvcmtzL1F1YXJ0ei5mcmFtZXdvcmsvRnJh
bWV3b3Jrcy9QREZLaXQuZnJhbWV3b3JrIl07Cit9CisKK0NsYXNzIGNsYXNzRnJvbVBERktpdChO
U1N0cmluZyAqY2xhc3NOYW1lKQoreworICAgIHN0YXRpYyBOU0J1bmRsZSAqcGRmS2l0QnVuZGxl
ID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOnBkZktpdEZyYW1ld29ya1BhdGgoKV07CisgICAg
W3BkZktpdEJ1bmRsZSBsb2FkXTsKKyAgICByZXR1cm4gW3BkZktpdEJ1bmRsZSBjbGFzc05hbWVk
OmNsYXNzTmFtZV07Cit9CisKK0NsYXNzIHBkZkFubm90YXRpb25MaW5rQ2xhc3MoKQoreworICAg
IHN0YXRpYyBDbGFzcyBwZGZBbm5vdGF0aW9uTGlua0NsYXNzID0gY2xhc3NGcm9tUERGS2l0KEAi
UERGQW5ub3RhdGlvbkxpbmsiKTsKKyAgICBBU1NFUlQocGRmQW5ub3RhdGlvbkxpbmtDbGFzcyk7
CisgICAgcmV0dXJuIHBkZkFubm90YXRpb25MaW5rQ2xhc3M7Cit9CisKK0NsYXNzIHBkZkRvY3Vt
ZW50Q2xhc3MoKQoreworICAgIHN0YXRpYyBDbGFzcyBwZGZEb2N1bWVudENsYXNzID0gY2xhc3NG
cm9tUERGS2l0KEAiUERGRG9jdW1lbnQiKTsKKyAgICBBU1NFUlQocGRmRG9jdW1lbnRDbGFzcyk7
CisgICAgcmV0dXJuIHBkZkRvY3VtZW50Q2xhc3M7Cit9CisKK30KClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5tbQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQkocmV2aXNpb24gMTE0Mjg2
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIldLUHJpbnRpbmdWaWV3
LmgiCiAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIKICNp
bXBvcnQgIlByaW50SW5mby5oIgogI2ltcG9ydCAiV2ViRGF0YS5oIgogI2ltcG9ydCAiV2ViUGFn
ZVByb3h5LmgiCkBAIC00MTEsMzMgKzQxMiw2IEBAIC0gKHVuc2lnbmVkKV9wYWdlRm9yUmVjdDoo
TlNSZWN0KXJlY3QKICAgICByZXR1cm4gMDsgLy8gSW52YWxpZCBwYWdlIG51bWJlci4KIH0KIAot
c3RhdGljIE5TU3RyaW5nICpwZGZLaXRGcmFtZXdvcmtQYXRoKCkKLXsKLSAgICBOU1N0cmluZyAq
c3lzdGVtTGlicmFyeVBhdGggPSBbTlNTZWFyY2hQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMo
TlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1N5c3RlbURvbWFpbk1hc2ssIE5PKSBvYmplY3RBdEluZGV4
OjBdOwotICAgIHJldHVybiBbc3lzdGVtTGlicmFyeVBhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OkAiRnJhbWV3b3Jrcy9RdWFydHouZnJhbWV3b3JrL0ZyYW1ld29ya3MvUERGS2l0
LmZyYW1ld29yayJdOwotfQotCi1zdGF0aWMgQ2xhc3MgY2xhc3NGcm9tUERGS2l0KE5TU3RyaW5n
ICpjbGFzc05hbWUpCi17Ci0gICAgc3RhdGljIE5TQnVuZGxlICpwZGZLaXRCdW5kbGUgPSBbTlNC
dW5kbGUgYnVuZGxlV2l0aFBhdGg6cGRmS2l0RnJhbWV3b3JrUGF0aCgpXTsKLSAgICBbcGRmS2l0
QnVuZGxlIGxvYWRdOwotICAgIHJldHVybiBbcGRmS2l0QnVuZGxlIGNsYXNzTmFtZWQ6Y2xhc3NO
YW1lXTsKLX0KLQotc3RhdGljIENsYXNzIHBkZkFubm90YXRpb25MaW5rQ2xhc3MoKQotewotICAg
IHN0YXRpYyBDbGFzcyBwZGZBbm5vdGF0aW9uTGlua0NsYXNzID0gY2xhc3NGcm9tUERGS2l0KEAi
UERGQW5ub3RhdGlvbkxpbmsiKTsKLSAgICBBU1NFUlQocGRmQW5ub3RhdGlvbkxpbmtDbGFzcyk7
Ci0gICAgcmV0dXJuIHBkZkFubm90YXRpb25MaW5rQ2xhc3M7Ci19Ci0KLXN0YXRpYyBDbGFzcyBw
ZGZEb2N1bWVudENsYXNzKCkKLXsKLSAgICBzdGF0aWMgQ2xhc3MgcGRmRG9jdW1lbnRDbGFzcyA9
IGNsYXNzRnJvbVBERktpdChAIlBERkRvY3VtZW50Iik7Ci0gICAgQVNTRVJUKHBkZkRvY3VtZW50
Q2xhc3MpOwotICAgIHJldHVybiBwZGZEb2N1bWVudENsYXNzOwotfQotCiAtICh2b2lkKV9kcmF3
UERGRG9jdW1lbnQ6KFBERkRvY3VtZW50ICopcGRmRG9jdW1lbnQgcGFnZToodW5zaWduZWQpcGFn
ZSBhdFBvaW50OihOU1BvaW50KXBvaW50CiB7CiAgICAgaWYgKCFwZGZEb2N1bWVudCkgewpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTE0Mjg2KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04OTgsOSArODk4LDExIEBACiAJCUUx
N0JGOTk2MTREMEE3M0UwMEE1QTA2OSAvKiBOZXRzY2FwZVNhbmRib3hGdW5jdGlvbnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxN0JGOTk1MTREMEE3
M0UwMEE1QTA2OSAvKiBOZXRzY2FwZVNhbmRib3hGdW5jdGlvbnMuaCAqLzsgfTsKIAkJRTE3QkY5
OTgxNEQwQUE4MzAwQTVBMDY5IC8qIE5ldHNjYXBlU2FuZGJveEZ1bmN0aW9ucy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxN0JGOTk3MTREMEFBODMw
MEE1QTA2OSAvKiBOZXRzY2FwZVNhbmRib3hGdW5jdGlvbnMubW0gKi87IH07CiAJCUUxOEM5MkY0
MTJEQjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4QzkyRjMxMkRCOUU3MTAwQ0YyQUVCIC8qIFByaW50
SW5mby5jcHAgKi87IH07CisJCUUxOTU4MkQzMTUzQ0JGRDcwMEI2MDg3NSAvKiBQREZLaXRJbXBv
cnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk1
ODJEMjE1M0NCRkQ3MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5oICovOyB9OworCQlFMTk1ODJE
NjE1M0NDMDU0MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTU4MkQ0MTUzQ0MwNTMwMEI2MDg3NSAvKiBQ
REZLaXRJbXBvcnRzLm1tICovOyB9OwogCQlFMTk2N0UzNjE1MEFCNUQ1MDBDNzMxNjkgLyogY29t
LmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNiIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk2N0UzNTE1MEFCNUQ1MDBDNzMxNjkgLyogY29tLmFw
cGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNiICovOyB9OwogCQlFMTk2N0UzODE1MEFCNUUyMDBD
NzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTY3RTM3MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20u
YXBwbGUuV2ViUHJvY2Vzcy5zYiAqLzsgfTsKLQkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8q
IEJ1aWx0SW5QREZWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5jcHAg
Ki87IH07CisJCUUxOTk4NzVFMTQyQzA0NTQwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTk4NzVDMTQy
QkZDOTcwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5tbSAqLzsgfTsKIAkJRTFBMzE3MzIxMzRD
RUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRy
aWJ1dGVkU3RyaW5nLmggKi87IH07CiAJCUUxQTMxNzM1MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRy
aWJ1dGVkU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFBMzE3MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi87
IH07CiAJCUUxQUVBMjJGMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dh
dGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
QUVBMjJEMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAq
LzsgfTsKQEAgLTE5NTgsMTAgKzE5NjAsMTIgQEAKIAkJRTE3QkY5OTcxNEQwQUE4MzAwQTVBMDY5
IC8qIE5ldHNjYXBlU2FuZGJveEZ1bmN0aW9ucy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IE5ldHNjYXBlU2FuZGJveEZ1bmN0aW9ucy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTE3QkY5OTkxNEQwQ0JGMTAwQTVBMDY5IC8qIGNvbS5hcHBsZS5X
ZWJLaXQuUGx1Z2luUHJvY2Vzcy5zYi5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20uYXBw
bGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2IuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxOEM5MkYzMTJEQjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTE5NTgyRDIxNTNDQkZENzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUERGS2l0SW1wb3J0cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTk1ODJENDE1M0NDMDUzMDBCNjA4NzUgLyogUERG
S2l0SW1wb3J0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBE
RktpdEltcG9ydHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOTY3RTM1MTUw
QUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2IgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTk2N0UzNzE1MEFCNUUyMDBDNzMxNjkgLyogY29t
LmFwcGxlLldlYlByb2Nlc3Muc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLldl
YlByb2Nlc3Muc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOTk4NzVBMTQyQkY5
QjgwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCdWlsdEluUERGVmlldy5oOyBwYXRoID0gUERGL0J1aWx0SW5QREZWaWV3Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBC
dWlsdEluUERGVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
dWlsdEluUERGVmlldy5jcHA7IHBhdGggPSBQREYvQnVpbHRJblBERlZpZXcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogQnVpbHRJ
blBERlZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBCdWls
dEluUERGVmlldy5tbTsgcGF0aCA9IFBERi9CdWlsdEluUERGVmlldy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTFBMzE3MzExMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRT
dHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXR0cmlidXRlZFN0cmlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUEzMTczNDEzNENFQTgwMDA3QzlB
NEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEF0dHJpYnV0ZWRTdHJpbmcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxQUVBMjJEMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNo
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tGdWxsS2V5Ym9hcmRBY2Nl
c3NXYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMTcyLDYgKzMxNzYs
OCBAQAogCQkJCUMwMkJGRjFEMTI1MTUwMkUwMDlDQ0JFQSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50TWFjLm1tICovLAogCQkJCTMxRUEyNUQwMTM0Rjc4QjIwMDVCMTQ1MiAvKiBOYXRpdmVXZWJN
b3VzZUV2ZW50TWFjLm1tICovLAogCQkJCURGNThDNjM1MTM3MUFDQTAwMEY5QTM3QyAvKiBOYXRp
dmVXZWJXaGVlbEV2ZW50TWFjLm1tICovLAorCQkJCUUxOTU4MkQyMTUzQ0JGRDcwMEI2MDg3NSAv
KiBQREZLaXRJbXBvcnRzLmggKi8sCisJCQkJRTE5NTgyRDQxNTNDQzA1MzAwQjYwODc1IC8qIFBE
RktpdEltcG9ydHMubW0gKi8sCiAJCQkJQzU3NEE1N0YxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3Rl
Ym9hcmRUeXBlcy5oICovLAogCQkJCUM1NzRBNTgwMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJv
YXJkVHlwZXMubW0gKi8sCiAJCQkJQkNGNTA1RTUxMjQzMDQ3QjAwNTk1NUFFIC8qIFBsYXRmb3Jt
Q2VydGlmaWNhdGVJbmZvLmggKi8sCkBAIC0zNzA3LDcgKzM3MTMsNyBAQAogCQlFMTk5ODc1QjE0
MkJGOUNGMDBCQjJERTcgLyogUERGICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQlFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogQnVpbHRJblBERlZpZXcu
Y3BwICovLAorCQkJCUUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5t
bSAqLywKIAkJCQlFMTk5ODc1QTE0MkJGOUI4MDBCQjJERTcgLyogQnVpbHRJblBERlZpZXcuaCAq
LywKIAkJCSk7CiAJCQluYW1lID0gUERGOwpAQCAtNDE4NSw2ICs0MTkxLDcgQEAKIAkJCQkzNzk0
ODQwNDE1MEMzNTA2MDBFNTJDRTkgLyogV2ViUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTM3OTQ4NDA5MTUwQzRCOTcwMEU1MkNFOSAvKiBXS1JlbmRlckxheWVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRURBMTJFMzE1MkNEMUIzMDBEOUUwOEQgLyogV2ViQWx0ZXJuYXRpdmVUZXh0
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTk1ODJEMzE1M0NCRkQ3MDBCNjA4NzUgLyog
UERGS2l0SW1wb3J0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00NTE5LDcgKzQ1MjYsNyBAQAogCQkJ
CTFBNjQyNTY5MTJERTQyRUMwMENBQUUyQyAvKiBCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUE2NDI5MkQxMkRFNUY5ODAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9yZU1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTFBQzQxQUM4MTI2M0M4ODMwMDA1NEU5NCAvKiBCaW5hcnlTZW1h
cGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8q
IEJ1aWx0SW5QREZWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxOTk4NzVFMTQyQzA0NTQw
MEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQTJFNTFF
MTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTJEOTU3MDEyODQ4NTY0MDAxRUI5NjIgLyogQ2hpbGRQcm9jZXNzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBNkY5RkI3MTFFMTQwODUwMERCMTM3MSAvKiBDb21tYW5kTGluZU1hYy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTQ5MjksNiArNDkzNiw3IEBACiAJCQkJMzc5NDg0MDMxNTBDMzUwNjAw
RTUyQ0U5IC8qIFdlYlJlbmRlckxheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3OTQ4NDA4
MTUwQzRCOTcwMEU1MkNFOSAvKiBXS1JlbmRlckxheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUNFREExMkUyMTUyQ0QxQUUwMEQ5RTA4RCAvKiBXZWJBbHRlcm5hdGl2ZVRleHRDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRTE5NTgyRDYxNTNDQzA1NDAwQjYwODc1IC8qIFBERktpdElt
cG9ydHMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luLmgJKHJldmlzaW9uIDExNDI4NikKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBA
QAogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIkxheWVySG9zdGluZ0NvbnRleHQuaCIK
KworT0JKQ19DTEFTUyBQREZEb2N1bWVudDsKICNlbmRpZgogCiBzdHJ1Y3QgTlBPYmplY3Q7CkBA
IC0yMjIsOCArMjI0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFy
KiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgPSAwOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xs
YmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpID0gMDsKIAotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFs
IFJldGFpblB0cjxDR1BERkRvY3VtZW50UmVmPiBwZGZEb2N1bWVudEZvclByaW50aW5nKCkgY29u
c3QgeyByZXR1cm4gMDsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIFJldGFpblB0
cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KICNlbmRpZgogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgJKHJldmlzaW9uIDExNDI4NikKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDEwICs2Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFu
Z2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRl
cywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyk7
CiAgICAgYm9vbCBzZW5kQ29tcGxleFRleHRJbnB1dCh1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4
dElucHV0SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpOwogICAgIHZvaWQgc2V0
TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKTsKLSNlbmRpZgotCi0jaWYgVVNFKENH
KQotICAgIFJldGFpblB0cjxDR1BERkRvY3VtZW50UmVmPiBwZGZEb2N1bWVudEZvclByaW50aW5n
KCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW4tPnBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKTsgfQor
ICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNvbnN0
IHsgcmV0dXJuIG1fcGx1Z2luLT5wZGZEb2N1bWVudEZvclByaW50aW5nKCk7IH0KICNlbmRpZgog
CiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzOyBub2JvZHkgc2hvdWxkIGhhdmUgdG8ga25vdyBh
Ym91dCB0aGUgcGx1Zy1pbiB2aWV3J3MgcmVuZGVyZXIgZXhjZXB0IHRoZSBwbHVnLWluIHZpZXcg
aXRzZWxmLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWls
dEluUERGVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5jcHAJKHJldmlzaW9uIDExNDI4NikKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDg1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkJ1aWx0SW5QREZWaWV3LmgiCi0KLSNpbmNsdWRlICJQbHVn
aW5WaWV3LmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiV2ViRXZl
bnQuaCIKLSNpbmNsdWRlICJXZWJFdmVudENvbnZlcnNpb24uaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVj
dFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQXJj
aGl2ZVJlc291cmNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xs
ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvSFRUUEhlYWRlck1hcC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTG9jYWxpemVkU3Ry
aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGx1
Z2luRGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1Njcm9sbEFuaW1hdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3Jv
bGxiYXJUaGVtZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFj
ZSBzdGQ7Ci0KLXN0YXRpYyB2b2lkIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3Rv
cihDR1BERkRpY3Rpb25hcnlSZWYgc3VidHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFs
dWVzKQotewotICAgIENHUERGQXJyYXlSZWYgbmFtZXM7Ci0gICAgaWYgKENHUERGRGljdGlvbmFy
eUdldEFycmF5KHN1YnRyZWUsICJOYW1lcyIsICZuYW1lcykpIHsKLSAgICAgICAgc2l6ZV90IG5h
bWVDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChuYW1lcykgLyAyOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG5hbWVDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBDR1BERk9iamVj
dFJlZiBvYmplY3Q7Ci0gICAgICAgICAgICBDR1BERkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICog
aSArIDEsICZvYmplY3QpOwotICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChvYmplY3QpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDR1BERkFycmF5UmVmIGtpZHM7
Ci0gICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRz
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdl
dENvdW50KGtpZHMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkg
ewotICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYga2lkOwotICAgICAgICBpZiAoIUNHUERGQXJy
YXlHZXREaWN0aW9uYXJ5KGtpZHMsIGksICZraWQpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7
Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBnZXRBbGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERG
RGljdGlvbmFyeVJlZiB0cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCi17
Ci0gICAgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVl
cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KENHUERGRG9j
dW1lbnRSZWYgcGRmRG9jdW1lbnQsIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4mIHNj
cmlwdHMpCi17Ci0gICAgaWYgKCFwZGZEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Q0dQREZEaWN0aW9uYXJ5UmVmIHBkZkNhdGFsb2cgPSBDR1BERkRvY3VtZW50R2V0Q2F0YWxvZyhw
ZGZEb2N1bWVudCk7Ci0gICAgaWYgKCFwZGZDYXRhbG9nKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBHZXQgdGhlIGRpY3Rpb25hcnkgb2YgYWxsIGRvY3VtZW50LWxldmVsIG5hbWUgdHJlZXMu
Ci0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIG5hbWVzRGljdGlvbmFyeTsKLSAgICBpZiAoIUNHUERG
RGljdGlvbmFyeUdldERpY3Rpb25hcnkocGRmQ2F0YWxvZywgIk5hbWVzIiwgJm5hbWVzRGljdGlv
bmFyeSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdldCB0aGUgZG9jdW1lbnQtbGV2ZWwg
IkphdmFTY3JpcHQiIG5hbWUgdHJlZS4KLSAgICBDR1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlw
dE5hbWVUcmVlOwotICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0RGljdGlvbmFyeShuYW1lc0Rp
Y3Rpb25hcnksICJKYXZhU2NyaXB0IiwgJmphdmFTY3JpcHROYW1lVHJlZSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFRoZSBuYW1lcyBhcmUgYXJiaXRyYXJ5LiBXZSBhcmUgb25seSBpbnRl
cmVzdGVkIGluIHRoZSB2YWx1ZXMuCi0gICAgVmVjdG9yPENHUERGT2JqZWN0UmVmPiBvYmplY3Rz
OwotICAgIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoamF2YVNjcmlwdE5hbWVUcmVlLCBvYmpl
Y3RzKTsKLSAgICBzaXplX3Qgb2JqZWN0Q291bnQgPSBvYmplY3RzLnNpemUoKTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0Q291bnQ7ICsraSkgewotICAgICAgICBDR1BERkRp
Y3Rpb25hcnlSZWYgamF2YVNjcmlwdEFjdGlvbjsKLSAgICAgICAgaWYgKCFDR1BERk9iamVjdEdl
dFZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQREZPYmplY3RSZWY+KG9iamVjdHNbaV0pLCBrQ0dQ
REZPYmplY3RUeXBlRGljdGlvbmFyeSwgJmphdmFTY3JpcHRBY3Rpb24pKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgLy8gQSBKYXZhU2NyaXB0IGFjdGlvbiBtdXN0IGhhdmUgYW4g
YWN0aW9uIHR5cGUgb2YgIkphdmFTY3JpcHQiLgotICAgICAgICBjb25zdCBjaGFyKiBhY3Rpb25U
eXBlOwotICAgICAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldE5hbWUoamF2YVNjcmlwdEFjdGlv
biwgIlMiLCAmYWN0aW9uVHlwZSkgfHwgc3RyY21wKGFjdGlvblR5cGUsICJKYXZhU2NyaXB0Iikp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25zdCBVSW50OCogYnl0ZXMgPSAw
OwotICAgICAgICBDRkluZGV4IGxlbmd0aDsKLSAgICAgICAgQ0dQREZTdHJlYW1SZWYgc3RyZWFt
OwotICAgICAgICBDR1BERlN0cmluZ1JlZiBzdHJpbmc7Ci0gICAgICAgIFJldGFpblB0cjxDRkRh
dGFSZWY+IGRhdGE7Ci0gICAgICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRTdHJlYW0oamF2YVNj
cmlwdEFjdGlvbiwgIkpTIiwgJnN0cmVhbSkpIHsKLSAgICAgICAgICAgIENHUERGRGF0YUZvcm1h
dCBmb3JtYXQ7Ci0gICAgICAgICAgICBkYXRhLmFkb3B0Q0YoQ0dQREZTdHJlYW1Db3B5RGF0YShz
dHJlYW0sICZmb3JtYXQpKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ5dGVzID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdl
dCgpKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsK
LSAgICAgICAgfSBlbHNlIGlmIChDR1BERkRpY3Rpb25hcnlHZXRTdHJpbmcoamF2YVNjcmlwdEFj
dGlvbiwgIkpTIiwgJnN0cmluZykpIHsKLSAgICAgICAgICAgIGJ5dGVzID0gQ0dQREZTdHJpbmdH
ZXRCeXRlUHRyKHN0cmluZyk7Ci0gICAgICAgICAgICBsZW5ndGggPSBDR1BERlN0cmluZ0dldExl
bmd0aChzdHJpbmcpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghYnl0ZXMpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBDRlN0cmluZ0VuY29kaW5nIGVuY29kaW5nID0gKGxlbmd0
aCA+IDEgJiYgYnl0ZXNbMF0gPT0gMHhGRSAmJiBieXRlc1sxXSA9PSAweEZGKSA/IGtDRlN0cmlu
Z0VuY29kaW5nVW5pY29kZSA6IGtDRlN0cmluZ0VuY29kaW5nVVRGODsKLSAgICAgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBzY3JpcHQoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgYnl0ZXMsIGxlbmd0aCwgZW5jb2RpbmcsIHRydWUpKTsKLSAg
ICAgICAgaWYgKCFzY3JpcHQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBzY3Jp
cHRzLmFwcGVuZChzY3JpcHQpOwotICAgIH0KLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNv
bnN0IHVpbnQ2NF90IHBkZkRvY3VtZW50UmVxdWVzdElEID0gMTsgLy8gUGx1Z2luQ29udHJvbGxl
ciBzdXBwb3J0cyBsb2FkaW5nIG11bHRpcGxlIHN0cmVhbXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25l
IGZvciBQREYuCi0KLWNvbnN0IGludCBndXR0ZXJIZWlnaHQgPSAxMDsKLWNvbnN0IGludCBzaGFk
b3dPZmZzZXRYID0gMDsKLWNvbnN0IGludCBzaGFkb3dPZmZzZXRZID0gLTI7Ci1jb25zdCBpbnQg
c2hhZG93U2l6ZSA9IDc7Ci0KLVBhc3NSZWZQdHI8QnVpbHRJblBERlZpZXc+IEJ1aWx0SW5QREZW
aWV3OjpjcmVhdGUoV2ViRnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QnVpbHRJblBERlZpZXcoZnJhbWUpKTsKLX0KLQotQnVpbHRJblBERlZpZXc6OkJ1aWx0SW5QREZW
aWV3KFdlYkZyYW1lKiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCi17Ci19Ci0KLUJ1aWx0
SW5QREZWaWV3Ojp+QnVpbHRJblBERlZpZXcoKQotewotfQotCi1QbHVnaW5JbmZvIEJ1aWx0SW5Q
REZWaWV3OjpwbHVnaW5JbmZvKCkKLXsKLSAgICBQbHVnaW5JbmZvIGluZm87Ci0gICAgaW5mby5u
YW1lID0gYnVpbHRJblBERlBsdWdpbk5hbWUoKTsKLQotICAgIE1pbWVDbGFzc0luZm8gbWltZUNs
YXNzSW5mbzsKLSAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSJhcHBsaWNhdGlvbi9wZGYiOwotICAg
IG1pbWVDbGFzc0luZm8uZGVzYyA9IHBkZkRvY3VtZW50VHlwZURlc2NyaXB0aW9uKCk7Ci0gICAg
bWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFwcGVuZCgicGRmIik7Ci0KLSAgICBpbmZvLm1pbWVz
LmFwcGVuZChtaW1lQ2xhc3NJbmZvKTsKLSAgICByZXR1cm4gaW5mbzsKLX0KLQotUGx1Z2luVmll
dyogQnVpbHRJblBERlZpZXc6OnBsdWdpblZpZXcoKQotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKLX0KLQotY29uc3QgUGx1Z2luVmlldyogQnVp
bHRJblBERlZpZXc6OnBsdWdpblZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKLX0KLQotdm9pZCBCdWlsdEluUERG
Vmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCi17Ci0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJh
cikgewotICAgICAgICBpZiAobV9wbHVnaW5TaXplLndpZHRoKCkgPj0gbV9wZGZEb2N1bWVudFNp
emUud2lkdGgoKSkKLSAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9s
bGJhcik7Ci0gICAgfSBlbHNlIGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA8IG1fcGRmRG9jdW1l
bnRTaXplLndpZHRoKCkpCi0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNyZWF0ZVNj
cm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xs
YmFyKSB7Ci0gICAgICAgIGlmIChtX3BsdWdpblNpemUuaGVpZ2h0KCkgPj0gbV9wZGZEb2N1bWVu
dFNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Ny
b2xsYmFyKTsKLSAgICB9IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA8IG1fcGRmRG9j
dW1lbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3JlYXRl
U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGludCBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdo
dCgpIDogMDsKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Ny
b2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKLQotICAgIGludCBwYWdlU3RlcCA9IG1f
cGFnZUJveGVzLmlzRW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKLQotICAg
IGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsK
LSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fcGx1Z2luU2l6
ZS53aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lk
dGgoKSk7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwg
cGx1Z2luVmlldygpLT55KCkgKyBtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxT
Y3JvbGxiYXItPmhlaWdodCgpLCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAg
ICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0
aCgpLCAwKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Ny
b2xsYmFyUmVjdCk7Ci0gICAgfQotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9w
b3J0aW9uKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQs
IG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJS
ZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3BsdWdpblNpemUud2lkdGgoKSAtIG1f
dmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgaWYg
KG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29udHJh
Y3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKLSAgICB9Ci0gICAgCi0g
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpOwot
ICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV92ZXJ0aWNh
bFNjcm9sbGJhciB8fCBtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIGZyYW1lVmlldy0+
YWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgZWxzZQotICAgICAgICBmcmFtZVZpZXctPnJl
bW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotfQotCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gQnVp
bHRJblBERlZpZXc6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0
ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7Ci0g
ICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIGRpZEFk
ZEhvcml6b250YWxTY3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKLSAgICBlbHNlIAotICAgICAgICBk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOwotICAgIHBsdWdpblZpZXcoKS0+
ZnJhbWUoKS0+dmlldygpLT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwotICAgIHJldHVybiB3aWRn
ZXQucmVsZWFzZSgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpkZXN0cm95U2Nyb2xsYmFy
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxi
YXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICBpZiAoIXNjcm9s
bGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIpCi0gICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9s
bGJhci5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxi
YXIoc2Nyb2xsYmFyLmdldCgpKTsKLQotICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgp
OwotICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOwotICAgIHNj
cm9sbGJhciA9IDA7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OmFkZEFyY2hpdmVSZXNvdXJj
ZSgpCi17Ci0gICAgLy8gRklYTUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNl
IHRvIERvY3VtZW50TG9hZGVyLiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQg
YXMgQ2FjaGVkUmVzb3VyY2VzLgotCi0gICAgLy8gQWRkIGp1c3QgZW5vdWdoIGRhdGEgZm9yIGNv
bnRleHQgbWVudSBoYW5kbGluZyBhbmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsuCi0gICAgUmVzb3Vy
Y2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlOwotICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uu
c2V0U3VnZ2VzdGVkRmlsZW5hbWUobV9zdWdnZXN0ZWRGaWxlbmFtZSk7Ci0gICAgc3ludGhlc2l6
ZWRSZXNwb25zZS5zZXRVUkwobV9zb3VyY2VVUkwpOyAvLyBOZWVkcyB0byBtYXRjaCB0aGUgSGl0
VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwuCi0gICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRN
aW1lVHlwZSgiYXBwbGljYXRpb24vcGRmIik7Ci0KLSAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNl
PiByZXNvdXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcENG
RGF0YShtX2RhdGFCdWZmZXIuZ2V0KCkpLCBtX3NvdXJjZVVSTCwgImFwcGxpY2F0aW9uL3BkZiIs
IFN0cmluZygpLCBTdHJpbmcoKSwgc3ludGhlc2l6ZWRSZXNwb25zZSk7Ci0gICAgcGx1Z2luVmll
dygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+YWRkQXJjaGl2ZVJlc291cmNlKHJl
c291cmNlLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnBkZkRvY3VtZW50
RGlkTG9hZCgpCi17Ci0gICAgYWRkQXJjaGl2ZVJlc291cmNlKCk7Ci0KLSAgICBSZXRhaW5QdHI8
Q0dEYXRhUHJvdmlkZXJSZWY+IHBkZkRhdGFQcm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRl
ckNyZWF0ZVdpdGhDRkRhdGEobV9kYXRhQnVmZmVyLmdldCgpKSk7Ci0gICAgbV9wZGZEb2N1bWVu
dC5hZG9wdENGKENHUERGRG9jdW1lbnRDcmVhdGVXaXRoUHJvdmlkZXIocGRmRGF0YVByb3ZpZGVy
LmdldCgpKSk7Ci0KLSAgICBjYWxjdWxhdGVTaXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMo
KTsKLQotICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KDAsIDAsIG1fcGx1Z2lu
U2l6ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKLQotICAgIFZlY3RvcjxSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+ID4gc2NyaXB0czsKLSAgICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1
bWVudChtX3BkZkRvY3VtZW50LmdldCgpLCBzY3JpcHRzKTsKLQotICAgIHNpemVfdCBzY3JpcHRD
b3VudCA9IHNjcmlwdHMuc2l6ZSgpOwotICAgIGlmICghc2NyaXB0Q291bnQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENvbnRleHRDcmVh
dGUoMCk7Ci0gICAgSlNPYmplY3RSZWYganNQREZEb2MgPSBtYWtlSlNQREZEb2MoY3R4KTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsraSkgewotICAgICAgICBK
U1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhzY3JpcHRzW2ld
LmdldCgpKTsKLSAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwganNQREZEb2Ms
IDAsIDAsIDApOwotICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKLSAgICB9Ci0KLSAg
ICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6
OmNhbGN1bGF0ZVNpemVzKCkKLXsKLSAgICBzaXplX3QgcGFnZUNvdW50ID0gQ0dQREZEb2N1bWVu
dEdldE51bWJlck9mUGFnZXMobV9wZGZEb2N1bWVudC5nZXQoKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgewotICAgICAgICBDR1BERlBhZ2VSZWYgcGRmUGFn
ZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKG1fcGRmRG9jdW1lbnQuZ2V0KCksIGkgKyAxKTsKLSAg
ICAgICAgQVNTRVJUKHBkZlBhZ2UpOwotCi0gICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VH
ZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BCb3gpOwotICAgICAgICBpZiAoQ0dSZWN0SXNF
bXB0eShib3gpKQotICAgICAgICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdl
LCBrQ0dQREZNZWRpYUJveCk7Ci0gICAgICAgIG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJv
eCkpOwotICAgICAgICBtX3BkZkRvY3VtZW50U2l6ZS5zZXRXaWR0aChtYXgobV9wZGZEb2N1bWVu
dFNpemUud2lkdGgoKSwgc3RhdGljX2Nhc3Q8aW50Pihib3guc2l6ZS53aWR0aCkpKTsKLSAgICAg
ICAgbV9wZGZEb2N1bWVudFNpemUuZXhwYW5kKDAsIGJveC5zaXplLmhlaWdodCk7Ci0gICAgfQot
ICAgIG1fcGRmRG9jdW1lbnRTaXplLmV4cGFuZCgwLCBndXR0ZXJIZWlnaHQgKiAobV9wYWdlQm94
ZXMuc2l6ZSgpIC0gMSkpOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3Ojppbml0aWFsaXplKGNv
bnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgLy8gTG9hZCB0aGUgc3JjIFVSTCBp
ZiBuZWVkZWQuCi0gICAgbV9zb3VyY2VVUkwgPSBwYXJhbWV0ZXJzLnVybDsKLSAgICBpZiAoIXBh
cmFtZXRlcnMubG9hZE1hbnVhbGx5ICYmICFwYXJhbWV0ZXJzLnVybC5pc0VtcHR5KCkpCi0gICAg
ICAgIGNvbnRyb2xsZXIoKS0+bG9hZFVSTChwZGZEb2N1bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBh
cmFtZXRlcnMudXJsLnN0cmluZygpLCBTdHJpbmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8
dWludDhfdD4oKSwgZmFsc2UpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQnVpbHRJ
blBERlZpZXc6OmRlc3Ryb3koKQotewotICAgIGlmIChtX2ZyYW1lKSB7Ci0gICAgICAgIGlmIChG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCkpCi0gICAg
ICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgIH0KLQot
ICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgZGVzdHJveVNj
cm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0
eVJlY3QpCi17Ci0gICAgY29udGVudEFyZWFXaWxsUGFpbnQoKTsKLQotICAgIHBhaW50QmFja2dy
b3VuZChncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Ci0KLSAgICBpZiAoIW1fcGRmRG9jdW1l
bnQpIC8vIEZJWE1FOiBEcmF3IGxvYWRpbmcgcHJvZ3Jlc3MuCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHBhaW50Q29udGVudChncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Ci0gICAgcGFpbnRD
b250cm9scyhncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBE
RlZpZXc6OnBhaW50QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNl
dEZpbGxDb2xvcihDb2xvcjo6Z3JheSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgZ3JhcGhp
Y3NDb250ZXh0LT5maWxsUmVjdChkaXJ0eVJlY3QpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3
OjpwYWludENvbnRlbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBncmFw
aGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25IaWdoKTsKLSAgICBncmFw
aGljc0NvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKLSAgICBncmFwaGljc0NvbnRl
eHQtPnNldFNob3VsZFNtb290aEZvbnRzKHRydWUpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0
RmlsbENvbG9yKENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0KLSAgICBncmFw
aGljc0NvbnRleHQtPmNsaXAoZGlydHlSZWN0KTsKLSAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KGRp
cnR5UmVjdCk7Ci0gICAgY29udGVudFJlY3QubW92ZUJ5KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0
KSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1fc2Nyb2xsT2Zmc2V0LndpZHRo
KCksIC1tX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7Ci0KLSAgICBDR0NvbnRleHRTY2FsZUNUTShj
b250ZXh0LCAxLCAtMSk7Ci0KLSAgICBpbnQgcGFnZVRvcCA9IDA7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3BhZ2VCb3hlcy5zaXplKCk7ICsraSkgewotICAgICAgICBJbnRSZWN0IHBh
Z2VCb3ggPSBtX3BhZ2VCb3hlc1tpXTsKLSAgICAgICAgZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50
ZXJpbmdYID0gbWF4KHJvdW5kZigobV9wbHVnaW5TaXplLndpZHRoKCkgLSBwYWdlQm94LndpZHRo
KCkpIC8gMi4wZiksIDAuMGYpOwotICAgICAgICBmbG9hdCBleHRyYU9mZnNldEZvckNlbnRlcmlu
Z1kgPSAobV9wYWdlQm94ZXMuc2l6ZSgpID09IDEpID8gbWF4KHJvdW5kZigobV9wbHVnaW5TaXpl
LmhlaWdodCgpIC0gcGFnZUJveC5oZWlnaHQoKSArIHNoYWRvd09mZnNldFkpIC8gMi4wZiksIDAu
MGYpIDogMDsKLQotICAgICAgICBpZiAocGFnZVRvcCA+IGNvbnRlbnRSZWN0Lm1heFkoKSkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAocGFnZVRvcCArIHBhZ2VCb3guaGVpZ2h0KCkg
KyBleHRyYU9mZnNldEZvckNlbnRlcmluZ1kgKyBndXR0ZXJIZWlnaHQgPj0gY29udGVudFJlY3Qu
eSgpKSB7Ci0gICAgICAgICAgICBDR1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRH
ZXRQYWdlKG1fcGRmRG9jdW1lbnQuZ2V0KCksIGkgKyAxKTsKLQotICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0
ZShleHRyYU9mZnNldEZvckNlbnRlcmluZ1ggLSBwYWdlQm94LngoKSwgLWV4dHJhT2Zmc2V0Rm9y
Q2VudGVyaW5nWSAtIHBhZ2VCb3gueSgpIC0gcGFnZUJveC5oZWlnaHQoKSk7Ci0KLSAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBz
aGFkb3dPZmZzZXRZKSwgc2hhZG93U2l6ZSwgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocGFnZUJveCk7Ci0g
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsZWFyU2hhZG93KCk7Ci0KLSAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+Y2xpcChwYWdlQm94KTsKLQotICAgICAgICAgICAgQ0dDb250ZXh0
RHJhd1BERlBhZ2UoY29udGV4dCwgcGRmUGFnZSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnJlc3RvcmUoKTsKLSAgICAgICAgfQotICAgICAgICBwYWdlVG9wICs9IHBhZ2VCb3guaGVp
Z2h0KCkgKyBndXR0ZXJIZWlnaHQ7Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250
ZXh0LCAwLCAtcGFnZUJveC5oZWlnaHQoKSAtIGd1dHRlckhlaWdodCk7Ci0gICAgfQotfQotCi12
b2lkIEJ1aWx0SW5QREZWaWV3OjpwYWludENvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgewotICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7Ci0g
ICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyRGlydHlSZWN0ID0gZGlydHlSZWN0OwotICAgICAgICBz
Y3JvbGxiYXJEaXJ0eVJlY3QubW92ZUJ5KHBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkubG9jYXRp
b24oKSk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1wbHVnaW5WaWV3KCkt
PmZyYW1lUmVjdCgpLngoKSwgLXBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkueSgpKTsKLQotICAg
ICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhckRpcnR5UmVjdCk7Ci0K
LSAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhckRpcnR5UmVjdCk7Ci0g
ICAgfQotCi0gICAgSW50UmVjdCBkaXJ0eUNvcm5lclJlY3QgPSBpbnRlcnNlY3Rpb24oc2Nyb2xs
Q29ybmVyUmVjdCgpLCBkaXJ0eVJlY3QpOwotICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5w
YWludFNjcm9sbENvcm5lcigwLCBncmFwaGljc0NvbnRleHQsIGRpcnR5Q29ybmVyUmVjdCk7Ci19
Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnVwZGF0ZUNvbnRyb2xUaW50cyhHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCkKLXsKLSAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0LT51cGRh
dGluZ0NvbnRyb2xUaW50cygpKTsKLQotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0g
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgIGlmIChtX3Zl
cnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRl
KCk7Ci0gICAgaW52YWxpZGF0ZVNjcm9sbENvcm5lcihzY3JvbGxDb3JuZXJSZWN0KCkpOwotfQot
Ci1QYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gQnVpbHRJblBERlZpZXc6OnNuYXBzaG90KCkK
LXsKLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLVBsYXRmb3JtTGF5ZXIq
IEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5MYXllcigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5k
aWYKLQotCi1ib29sIEJ1aWx0SW5QREZWaWV3Ojppc1RyYW5zcGFyZW50KCkKLXsKLSAgICAvLyBU
aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZnJvbSB0aGUgd2ViIHByb2Nlc3MuCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEJ1aWx0SW5Q
REZWaWV3OjpnZW9tZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RW
aWV3VHJhbnNmb3JtKQotewotICAgIGlmIChtX3BsdWdpblNpemUgPT0gcGx1Z2luU2l6ZSkgewot
ICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9wbHVnaW5TaXplID0gcGx1Z2luU2l6ZTsKLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Ci19Ci0K
LXZvaWQgQnVpbHRJblBERlZpZXc6OnZpc2liaWxpdHlEaWRDaGFuZ2UoKQotewotfQotCi12b2lk
IEJ1aWx0SW5QREZWaWV3OjpmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QpCi17Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OmZyYW1lRGlk
RmFpbCh1aW50NjRfdCwgYm9vbCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBCdWlsdEluUERGVmlldzo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90LCBjb25z
dCBXVEY6OlN0cmluZyYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQg
QnVpbHRJblBERlZpZXc6OnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1J
RCwgY29uc3QgS1VSTCYsIHVpbnQzMl90LCB1aW50MzJfdCwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKLXsKLSAgICBBU1NFUlRf
VU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7Ci0KLSAg
ICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Ci19Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpz
dHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMs
IGludCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0g
cGRmRG9jdW1lbnRSZXF1ZXN0SUQpOwotCi0gICAgaWYgKCFtX2RhdGFCdWZmZXIpCi0gICAgICAg
IG1fZGF0YUJ1ZmZlci5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotCi0gICAg
Q0ZEYXRhQXBwZW5kQnl0ZXMobV9kYXRhQnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGNv
bnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpz
dHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQotewotICAgIEFTU0VSVF9V
TlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAg
IHBkZkRvY3VtZW50RGlkTG9hZCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpzdHJlYW1E
aWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAgICBBU1NF
UlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7Ci0K
LSAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6bWFu
dWFsU3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMLCB1aW50
MzJfdCBzdHJlYW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkRmlsZW5hbWUpCi17Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVu
YW1lOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAoIW1fZGF0YUJ1ZmZl
cikKLSAgICAgICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAw
KSk7Ci0KLSAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQnVpbHRJ
blBERlZpZXc6Om1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKQotewotICAgIHBkZkRvY3Vt
ZW50RGlkTG9hZCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRG
YWlsKGJvb2wpCi17Ci0gICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Ci19Ci0KLWJvb2wgQnVpbHRJ
blBERlZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCi17
Ci0gICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLSAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1v
dmU6Ci0gICAgICAgIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7Ci0gICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgYWxzbyBub3RpZnkgc2Nyb2xsYmFyIHRvIHNob3cgaG92ZXIgZWZmZWN0LiBTaG91
bGQgYWxzbyBzZW5kIG1vdXNlRXhpdGVkIHRvIGhpZGUgaXQuCi0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjogewotICAgICAgICAvLyBSZXR1cm5pbmcgZmFsc2Ug
YXMgd2lsbCBtYWtlIEV2ZW50SGFuZGxlciB1bmZvY3VzIHRoZSBwbHVnLWluLCB3aGljaCBpcyBh
cHByb3ByaWF0ZSB3aGVuIGNsaWNraW5nIHNjcm9sbGJhcnMuCi0gICAgICAgIC8vIElkZWFsbHks
IHdlIHdvdWxkbid0IGNoYW5nZSBmb2N1cyBhdCBhbGwsIGJ1dCBQbHVnaW5WaWV3IGFscmVhZHkg
ZGlkIHRoYXQgZm9yIHVzLgotICAgICAgICAvLyBXaGVuIHN1cHBvcnQgZm9yIFBERiBmb3JtcyBp
cyBhZGRlZCwgd2UnbGwgbmVlZCB0byBhY3R1YWxseSBmb2N1cyB0aGUgcGx1Zy1pbiB3aGVuIGNs
aWNraW5nIGluIGEgZm9ybS4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2ViRXZl
bnQ6Ok1vdXNlVXA6IHsKLSAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQg
PSBwbGF0Zm9ybShldmVudCk7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0g
ICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7
Ci0gICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVXaGVlbEV2ZW50KGNv
bnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQotewotICAgIFBsYXRmb3JtV2hlZWxFdmVudCBwbGF0
Zm9ybUV2ZW50ID0gcGxhdGZvcm0oZXZlbnQpOwotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybUV2ZW50KTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmll
dzo6aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQotewotICAgIG1v
dXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1
aWx0SW5QREZWaWV3OjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYp
Ci17Ci0gICAgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50JikKLXsKLSAgICAvLyBVc2UgZGVmYXVsdCBXZWJLaXQgY29udGV4dCBtZW51Lgot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlS2V5Ym9h
cmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCi17Ci19Ci0K
LU5QT2JqZWN0KiBCdWlsdEluUERGVmlldzo6cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLQotdm9pZCBCdWlsdEluUERG
Vmlldzo6d2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZp
ZXc6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdp
bmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmll
d0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6
d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCkKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmll
dzo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpCi17Ci19Ci0KLXVpbnQ2NF90IEJ1
aWx0SW5QREZWaWV3OjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNlbmRDb21wbGV4VGV4
dElucHV0KGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNldExh
eWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkKLXsKLX0KLQotI2VuZGlmCi0KLXZvaWQg
QnVpbHRJblBERlZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKQotewotfQot
Ci1ib29sIEJ1aWx0SW5QREZWaWV3OjpnZXRGb3JtVmFsdWUoU3RyaW5nJikKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZVNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKLXsKLSAg
ICByZXR1cm4gc2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotfQotCi1TY3JvbGxiYXIq
IEJ1aWx0SW5QREZWaWV3Ojpob3Jpem9udGFsU2Nyb2xsYmFyKCkKLXsKLSAgICByZXR1cm4gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOwotfQotCi1TY3JvbGxiYXIqIEJ1aWx0SW5QREZWaWV3
Ojp2ZXJ0aWNhbFNjcm9sbGJhcigpCi17Ci0gICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIu
Z2V0KCk7Ci19Ci0KLUludFJlY3QgQnVpbHRJblBERlZpZXc6OnNjcm9sbENvcm5lclJlY3QoKSBj
b25zdAotewotICAgIGlmICghbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2FsU2Ny
b2xsYmFyKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSB7Ci0gICAgICAgIEFTU0VSVChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSk7Ci0gICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiBJbnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgoKSAt
IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkgLSBt
X2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0
aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLX0KLQotU2Nyb2xsYWJsZUFy
ZWEqIEJ1aWx0SW5QREZWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0g
ICAgLy8gRklYTUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUgYW5kIGxvb2sgZm9yIGEgc2Nyb2xs
YWJsZSBwYXJlbnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZv
aWQgQnVpbHRJblBERlZpZXc6OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0
KQotewotICAgIG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZShvZmZzZXQueCgpLCBvZmZzZXQueSgp
KTsKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgYmV0dGVyIGZvciBwZXJmb3JtYW5jZSB0byBi
bGl0IHBhcnRzIHRoYXQgcmVtYWluIHZpc2libGUuCi0gICAgY29udHJvbGxlcigpLT5pbnZhbGlk
YXRlKEludFJlY3QoMCwgMCwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1fcGx1Z2luU2l6ZS5oZWln
aHQoKSkpOwotfQotCi1pbnQgQnVpbHRJblBERlZpZXc6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Ci17Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIg
PSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7Ci0gICAgcmV0dXJuIHNjcm9sbGJh
ciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6
IDA7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICBp
ZiAoRnJhbWUqIGNvcmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpKSB7Ci0gICAgICAgIGlm
IChQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBJbnRSZWN0
IGRpcnR5UmVjdCA9IHJlY3Q7Ci0gICAgZGlydHlSZWN0Lm1vdmVCeShzY3JvbGxiYXItPmxvY2F0
aW9uKCkpOwotICAgIGRpcnR5UmVjdC5tb3ZlQnkoLXBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSk7
Ci0gICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgQnVp
bHRJblBERlZpZXc6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKHJlY3QpOwotfQotCi1ib29sIEJ1
aWx0SW5QREZWaWV3Ojppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAotewotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotaW50IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxQb3NpdGlvbihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC53
aWR0aCgpOwotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3Jv
bGxiYXIpCi0gICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKTsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSW50UG9pbnQgQnVpbHRJblBE
RlZpZXc6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50UG9pbnQobV9z
Y3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOwotfQotCi1JbnRQ
b2ludCBCdWlsdEluUERGVmlldzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSW50UG9pbnQoMCwgMCk7Ci19Ci0KLUludFBvaW50IEJ1aWx0SW5QREZWaWV3Ojpt
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIGludCBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdo
dCgpIDogMDsKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Ny
b2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKLQotICAgIEludFBvaW50IG1heGltdW1P
ZmZzZXQobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSAtIG1fcGx1Z2luU2l6ZS53aWR0aCgpICsg
dmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkgLSBtX3Bs
dWdpblNpemUuaGVpZ2h0KCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKLSAgICBtYXhp
bXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKLSAgICByZXR1cm4gbWF4aW11bU9mZnNl
dDsKLX0KLQotaW50IEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wbHVnaW5TaXplLmhlaWdodCgpOwotfQotCi1pbnQgQnVpbHRJblBERlZpZXc6
OnZpc2libGVXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGx1Z2luU2l6ZS53aWR0aCgp
OwotfQotCi1JbnRTaXplIEJ1aWx0SW5QREZWaWV3Ojpjb250ZW50c1NpemUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3BkZkRvY3VtZW50U2l6ZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6
aXNPbkFjdGl2ZVBhZ2UoKSBjb25zdAotewotICAgIHJldHVybiAhcGx1Z2luVmlldygpLT5mcmFt
ZSgpLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3
OjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoaW50LCBib29sIGZvcmNlVXBkYXRlKQotewotICAgIGlm
ICghZm9yY2VVcGRhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBQREYgd2Fz
IHNjcm9sbGVkIGFsbCB0aGUgd2F5IHRvIGJvdHRvbSByaWdodCBhbmQgc2Nyb2xsYmFycyBjaGFu
Z2UgdG8gb3ZlcmxheSBzdHlsZSwgd2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IHdoaXRlIHJlY3Rh
bmdsZXMgd2hlcmUgc2Nyb2xsYmFycyB3ZXJlLgotICAgIEludFBvaW50IG5ld1Njcm9sbE9mZnNl
dCA9IEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KS5zaHJ1bmtUbyhtYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKSk7Ci0gICAgc2V0U2Nyb2xsT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7Ci0KLSAgICAvLyBB
cyBzaXplIG9mIHRoZSBjb250ZW50IGFyZWEgY2hhbmdlcywgc2Nyb2xsYmFycyBtYXkgbmVlZCB0
byBhcHBlYXIgb3IgdG8gZGlzYXBwZWFyLgotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLQotICAg
IFNjcm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQoKTsKLX0KLQotSW50UG9pbnQgQnVpbHRJ
blBERlZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewot
ICAgIEludFBvaW50IHBvaW50ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZl
cnRUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAg
IHBvaW50Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlv
bigpKTsKLQotICAgIHJldHVybiBwb2ludDsKLX0KLQotc3RhdGljIHZvaWQganNQREZEb2NJbml0
aWFsaXplKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAgICBCdWls
dEluUERGVmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3Kj4oSlNPYmpl
Y3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIHBkZlZpZXctPnJlZigpOwotfQotCi1zdGF0aWMg
dm9pZCBqc1BERkRvY0ZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAgICBCdWlsdElu
UERGVmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3Kj4oSlNPYmplY3RH
ZXRQcml2YXRlKG9iamVjdCkpOwotICAgIHBkZlZpZXctPmRlcmVmKCk7Ci19Ci0KLUpTVmFsdWVS
ZWYgQnVpbHRJblBERlZpZXc6OmpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Ci17Ci0gICAgQnVpbHRJblBERlZpZXcqIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluUERG
Vmlldyo+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0KLSAgICBXZWJGcmFtZSog
ZnJhbWUgPSBwZGZWaWV3LT5tX2ZyYW1lOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZy
YW1lLT5jb3JlRnJhbWUoKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5w
YWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY3R4KTsKLQotICAgIHBhZ2UtPmNocm9tZSgpLT5wcmludChjb3JlRnJhbWUpOwotCi0gICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci19Ci0KLUpTT2JqZWN0UmVmIEJ1aWx0
SW5QREZWaWV3OjptYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmIGN0eCkKLXsKLSAgICBzdGF0aWMg
SlNTdGF0aWNGdW5jdGlvbiBqc1BERkRvY1N0YXRpY0Z1bmN0aW9uc1tdID0gewotICAgICAgICB7
ICJwcmludCIsIGpzUERGRG9jUHJpbnQsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAwLCAwLCAwIH0sCi0g
ICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBqc1BERkRvY0NsYXNzRGVmaW5p
dGlvbiA9IHsKLSAgICAgICAgMCwKLSAgICAgICAga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLAotICAg
ICAgICAiRG9jIiwKLSAgICAgICAgMCwKLSAgICAgICAgMCwKLSAgICAgICAganNQREZEb2NTdGF0
aWNGdW5jdGlvbnMsCi0gICAgICAgIGpzUERGRG9jSW5pdGlhbGl6ZSwganNQREZEb2NGaW5hbGl6
ZSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotICAgIH07Ci0KLSAgICBzdGF0aWMgSlNDbGFz
c1JlZiBqc1BERkRvY0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmanNQREZEb2NDbGFzc0RlZmluaXRp
b24pOwotCi0gICAgcmV0dXJuIEpTT2JqZWN0TWFrZShjdHgsIGpzUERGRG9jQ2xhc3MsIHRoaXMp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3LmgJKHJldmlzaW9u
IDExNDI4NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJ
blBERlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE0LDcgKzExNCw3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKTsKICAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKTsKIAotICAgIHZp
cnR1YWwgUmV0YWluUHRyPENHUERGRG9jdW1lbnRSZWY+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmco
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CisgICAgdmlydHVhbCBS
ZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CiAKICAgICAvLyBTY3JvbGxhYmxlQXJlYSBt
ZXRob2RzLgogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkg
Y29uc3Q7CkBAIC0xNTEsNyArMTUxLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9zdWdnZXN0
ZWRGaWxlbmFtZTsKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRhQnVmZmVy
OwogCi0gICAgUmV0YWluUHRyPENHUERGRG9jdW1lbnRSZWY+IG1fcGRmRG9jdW1lbnQ7CisgICAg
UmV0YWluUHRyPFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OwogICAgIFZlY3RvcjxXZWJDb3Jl
OjpJbnRSZWN0PiBtX3BhZ2VCb3hlczsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGRmRG9jdW1l
bnRTaXplOyAvLyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBzLgogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcu
bW0JKHJldmlzaW9uIDExNDI4NikJKGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9CdWlsdEluUERGVmlldy5jcHA6MTE0Mjg2KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDg1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCdWlsdEluUERGVmlldy5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIldlYkV2ZW50LmgiCisjaW5jbHVk
ZSAiV2ViRXZlbnRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250
ZXh0UmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTU3RyaW5nUmVmQ0YuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dExvYWRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUVFBI
ZWFkZXJNYXAuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TY3JvbGxBbmltYXRvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0
aWMgdm9pZCBhcHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IoQ0dQREZEaWN0aW9u
YXJ5UmVmIHN1YnRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIHZhbHVlcykKK3sKKyAgICBD
R1BERkFycmF5UmVmIG5hbWVzOworICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0
cmVlLCAiTmFtZXMiLCAmbmFtZXMpKSB7CisgICAgICAgIHNpemVfdCBuYW1lQ291bnQgPSBDR1BE
RkFycmF5R2V0Q291bnQobmFtZXMpIC8gMjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBuYW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAgQ0dQREZPYmplY3RSZWYgb2JqZWN0Owor
ICAgICAgICAgICAgQ0dQREZBcnJheUdldE9iamVjdChuYW1lcywgMiAqIGkgKyAxLCAmb2JqZWN0
KTsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQob2JqZWN0KTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQ0dQREZBcnJheVJlZiBraWRzOworICAgIGlmICghQ0dQ
REZEaWN0aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwgIktpZHMiLCAma2lkcykpCisgICAgICAgIHJl
dHVybjsKKworICAgIHNpemVfdCBraWRDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChraWRzKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtpZENvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQ
REZEaWN0aW9uYXJ5UmVmIGtpZDsKKyAgICAgICAgaWYgKCFDR1BERkFycmF5R2V0RGljdGlvbmFy
eShraWRzLCBpLCAma2lkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhcHBlbmRW
YWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3Ioa2lkLCB2YWx1ZXMpOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgZ2V0QWxsVmFsdWVzSW5QREZOYW1lVHJlZShDR1BERkRpY3Rpb25hcnlSZWYg
dHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgYWxsVmFsdWVzKQoreworICAgIGFwcGVuZFZh
bHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3Rvcih0cmVlLCBhbGxWYWx1ZXMpOworfQorCitzdGF0
aWMgdm9pZCBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChDR1BERkRvY3VtZW50UmVmIHBkZkRv
Y3VtZW50LCBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5nUmVmPiA+JiBzY3JpcHRzKQoreworICAg
IGlmICghcGRmRG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIENHUERGRGljdGlvbmFy
eVJlZiBwZGZDYXRhbG9nID0gQ0dQREZEb2N1bWVudEdldENhdGFsb2cocGRmRG9jdW1lbnQpOwor
ICAgIGlmICghcGRmQ2F0YWxvZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR2V0IHRoZSBk
aWN0aW9uYXJ5IG9mIGFsbCBkb2N1bWVudC1sZXZlbCBuYW1lIHRyZWVzLgorICAgIENHUERGRGlj
dGlvbmFyeVJlZiBuYW1lc0RpY3Rpb25hcnk7CisgICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXRE
aWN0aW9uYXJ5KHBkZkNhdGFsb2csICJOYW1lcyIsICZuYW1lc0RpY3Rpb25hcnkpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBHZXQgdGhlIGRvY3VtZW50LWxldmVsICJKYXZhU2NyaXB0IiBu
YW1lIHRyZWUuCisgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3JpcHROYW1lVHJlZTsKKyAg
ICBpZiAoIUNHUERGRGljdGlvbmFyeUdldERpY3Rpb25hcnkobmFtZXNEaWN0aW9uYXJ5LCAiSmF2
YVNjcmlwdCIsICZqYXZhU2NyaXB0TmFtZVRyZWUpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBUaGUgbmFtZXMgYXJlIGFyYml0cmFyeS4gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUg
dmFsdWVzLgorICAgIFZlY3RvcjxDR1BERk9iamVjdFJlZj4gb2JqZWN0czsKKyAgICBnZXRBbGxW
YWx1ZXNJblBERk5hbWVUcmVlKGphdmFTY3JpcHROYW1lVHJlZSwgb2JqZWN0cyk7CisgICAgc2l6
ZV90IG9iamVjdENvdW50ID0gb2JqZWN0cy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9iamVjdENvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGph
dmFTY3JpcHRBY3Rpb247CisgICAgICAgIGlmICghQ0dQREZPYmplY3RHZXRWYWx1ZShyZWludGVy
cHJldF9jYXN0PENHUERGT2JqZWN0UmVmPihvYmplY3RzW2ldKSwga0NHUERGT2JqZWN0VHlwZURp
Y3Rpb25hcnksICZqYXZhU2NyaXB0QWN0aW9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIC8vIEEgSmF2YVNjcmlwdCBhY3Rpb24gbXVzdCBoYXZlIGFuIGFjdGlvbiB0eXBlIG9m
ICJKYXZhU2NyaXB0Ii4KKyAgICAgICAgY29uc3QgY2hhciogYWN0aW9uVHlwZTsKKyAgICAgICAg
aWYgKCFDR1BERkRpY3Rpb25hcnlHZXROYW1lKGphdmFTY3JpcHRBY3Rpb24sICJTIiwgJmFjdGlv
blR5cGUpIHx8IHN0cmNtcChhY3Rpb25UeXBlLCAiSmF2YVNjcmlwdCIpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgY29uc3QgVUludDgqIGJ5dGVzID0gMDsKKyAgICAgICAgQ0ZJ
bmRleCBsZW5ndGg7CisgICAgICAgIENHUERGU3RyZWFtUmVmIHN0cmVhbTsKKyAgICAgICAgQ0dQ
REZTdHJpbmdSZWYgc3RyaW5nOworICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwor
ICAgICAgICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyZWFtKGphdmFTY3JpcHRBY3Rpb24sICJK
UyIsICZzdHJlYW0pKSB7CisgICAgICAgICAgICBDR1BERkRhdGFGb3JtYXQgZm9ybWF0OworICAg
ICAgICAgICAgZGF0YS5hZG9wdENGKENHUERGU3RyZWFtQ29weURhdGEoc3RyZWFtLCAmZm9ybWF0
KSk7CisgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7CisgICAgICAg
ICAgICBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyaW5nKGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZz
dHJpbmcpKSB7CisgICAgICAgICAgICBieXRlcyA9IENHUERGU3RyaW5nR2V0Qnl0ZVB0cihzdHJp
bmcpOworICAgICAgICAgICAgbGVuZ3RoID0gQ0dQREZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIWJ5dGVzKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYmIGJ5dGVz
WzBdID09IDB4RkUgJiYgYnl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGluZ1VuaWNv
ZGUgOiBrQ0ZTdHJpbmdFbmNvZGluZ1VURjg7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gc2NyaXB0KEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGJ5dGVzLCBsZW5ndGgsIGVuY29kaW5nLCB0cnVlKSk7CisgICAgICAgIGlmICghc2Ny
aXB0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc2NyaXB0cy5hcHBlbmQoc2Ny
aXB0KTsKKyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdCB1aW50NjRfdCBw
ZGZEb2N1bWVudFJlcXVlc3RJRCA9IDE7IC8vIFBsdWdpbkNvbnRyb2xsZXIgc3VwcG9ydHMgbG9h
ZGluZyBtdWx0aXBsZSBzdHJlYW1zLCBidXQgd2Ugb25seSBuZWVkIG9uZSBmb3IgUERGLgorCitj
b25zdCBpbnQgZ3V0dGVySGVpZ2h0ID0gMTA7Citjb25zdCBpbnQgc2hhZG93T2Zmc2V0WCA9IDA7
Citjb25zdCBpbnQgc2hhZG93T2Zmc2V0WSA9IC0yOworY29uc3QgaW50IHNoYWRvd1NpemUgPSA3
OworCitQYXNzUmVmUHRyPEJ1aWx0SW5QREZWaWV3PiBCdWlsdEluUERGVmlldzo6Y3JlYXRlKFdl
YkZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1aWx0SW5QREZWaWV3
KGZyYW1lKSk7Cit9CisKK0J1aWx0SW5QREZWaWV3OjpCdWlsdEluUERGVmlldyhXZWJGcmFtZSog
ZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQoreworfQorCitCdWlsdEluUERGVmlldzo6fkJ1
aWx0SW5QREZWaWV3KCkKK3sKK30KKworUGx1Z2luSW5mbyBCdWlsdEluUERGVmlldzo6cGx1Z2lu
SW5mbygpCit7CisgICAgUGx1Z2luSW5mbyBpbmZvOworICAgIGluZm8ubmFtZSA9IGJ1aWx0SW5Q
REZQbHVnaW5OYW1lKCk7CisKKyAgICBNaW1lQ2xhc3NJbmZvIG1pbWVDbGFzc0luZm87CisgICAg
bWltZUNsYXNzSW5mby50eXBlID0iYXBwbGljYXRpb24vcGRmIjsKKyAgICBtaW1lQ2xhc3NJbmZv
LmRlc2MgPSBwZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIG1pbWVDbGFzc0luZm8u
ZXh0ZW5zaW9ucy5hcHBlbmQoInBkZiIpOworCisgICAgaW5mby5taW1lcy5hcHBlbmQobWltZUNs
YXNzSW5mbyk7CisgICAgcmV0dXJuIGluZm87Cit9CisKK1BsdWdpblZpZXcqIEJ1aWx0SW5QREZW
aWV3OjpwbHVnaW5WaWV3KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+
KGNvbnRyb2xsZXIoKSk7Cit9CisKK2NvbnN0IFBsdWdpblZpZXcqIEJ1aWx0SW5QREZWaWV3Ojpw
bHVnaW5WaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2lu
Vmlldyo+KGNvbnRyb2xsZXIoKSk7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OnVwZGF0ZVNj
cm9sbGJhcnMoKQoreworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAg
aWYgKG1fcGx1Z2luU2l6ZS53aWR0aCgpID49IG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkpCisg
ICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIH0g
ZWxzZSBpZiAobV9wbHVnaW5TaXplLndpZHRoKCkgPCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgp
KQorICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpv
bnRhbFNjcm9sbGJhcik7CisKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAg
ICBpZiAobV9wbHVnaW5TaXplLmhlaWdodCgpID49IG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgp
KQorICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAg
fSBlbHNlIGlmIChtX3BsdWdpblNpemUuaGVpZ2h0KCkgPCBtX3BkZkRvY3VtZW50U2l6ZS5oZWln
aHQoKSkKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0
aWNhbFNjcm9sbGJhcik7CisKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9ICht
X2hvcml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7CisgICAg
aW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92
ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBpbnQgcGFnZVN0ZXAgPSBtX3BhZ2VCb3hlcy5pc0Vt
cHR5KCkgPyAwIDogbV9wYWdlQm94ZXNbMF0uaGVpZ2h0KCk7CisKKyAgICBpZiAobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMo
U2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihtX3BsdWdpblNpemUud2lkdGgoKSAtIHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkpOworICAgICAg
ICBJbnRSZWN0IHNjcm9sbGJhclJlY3QocGx1Z2luVmlldygpLT54KCksIHBsdWdpblZpZXcoKS0+
eSgpICsgbV9wbHVnaW5TaXplLmhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0
KCkpOworICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHNjcm9s
bGJhclJlY3QuY29udHJhY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgMCk7CisgICAg
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOwor
ICAgIH0KKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VT
dGVwKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihtX3BsdWdp
blNpemUuaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LCBtX3BkZkRvY3VtZW50
U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChJbnRSZWN0KHBs
dWdpblZpZXcoKS0+eCgpICsgbV9wbHVnaW5TaXplLndpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT53aWR0aCgpLCBwbHVnaW5WaWV3KCktPnkoKSwgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lk
dGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7CisgICAgICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXJSZWN0LmNvbnRyYWN0KDAsIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7CisgICAgfQorICAgIAorICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAoIWZyYW1l
VmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIgfHwg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVB
cmVhKHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3JvbGxhYmxl
QXJlYSh0aGlzKTsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEJ1aWx0SW5QREZWaWV3Ojpj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAg
UmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxi
YXIodGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIGlmIChvcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBkaWRBZGRIb3Jpem9udGFsU2Ny
b2xsYmFyKHdpZGdldC5nZXQoKSk7CisgICAgZWxzZSAKKyAgICAgICAgZGlkQWRkVmVydGljYWxT
Y3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKKyAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXco
KS0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsK
K30KKwordm9pZCBCdWlsdEluUERGVmlldzo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFy
ID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9s
bGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQor
ICAgICAgICB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOwor
ICAgIGVsc2UKKyAgICAgICAgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhci5n
ZXQoKSk7CisKKyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxi
YXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBzY3JvbGxiYXIgPSAwOwor
fQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjphZGRBcmNoaXZlUmVzb3VyY2UoKQoreworICAgIC8v
IEZJWE1FOiBJdCdzIGEgaGFjayB0byBmb3JjZSBhZGQgYSByZXNvdXJjZSB0byBEb2N1bWVudExv
YWRlci4gUERGIGRvY3VtZW50cyBzaG91bGQganVzdCBiZSBmZXRjaGVkIGFzIENhY2hlZFJlc291
cmNlcy4KKworICAgIC8vIEFkZCBqdXN0IGVub3VnaCBkYXRhIGZvciBjb250ZXh0IG1lbnUgaGFu
ZGxpbmcgYW5kIHdlYiBhcmNoaXZlcyB0byB3b3JrLgorICAgIFJlc291cmNlUmVzcG9uc2Ugc3lu
dGhlc2l6ZWRSZXNwb25zZTsKKyAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldFN1Z2dlc3RlZEZp
bGVuYW1lKG1fc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0
VVJMKG1fc291cmNlVVJMKTsgLy8gTmVlZHMgdG8gbWF0Y2ggdGhlIEhpdFRlc3RSZXN1bHQ6OmFi
c29sdXRlUERGVVJMLgorICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0TWltZVR5cGUoImFwcGxp
Y2F0aW9uL3BkZiIpOworCisgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UgPSBB
cmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEobV9kYXRhQnVm
ZmVyLmdldCgpKSwgbV9zb3VyY2VVUkwsICJhcHBsaWNhdGlvbi9wZGYiLCBTdHJpbmcoKSwgU3Ry
aW5nKCksIHN5bnRoZXNpemVkUmVzcG9uc2UpOworICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+
ZG9jdW1lbnQoKS0+bG9hZGVyKCktPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZS5yZWxlYXNl
KCkpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpwZGZEb2N1bWVudERpZExvYWQoKQorewor
ICAgIGFkZEFyY2hpdmVSZXNvdXJjZSgpOworCisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVy
UmVmPiBwZGZEYXRhUHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZE
YXRhKG1fZGF0YUJ1ZmZlci5nZXQoKSkpOworICAgIG1fcGRmRG9jdW1lbnQuYWRvcHRDRihDR1BE
RkRvY3VtZW50Q3JlYXRlV2l0aFByb3ZpZGVyKHBkZkRhdGFQcm92aWRlci5nZXQoKSkpOworCisg
ICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisKKyAgICBjb250
cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAwLCBtX3BsdWdpblNpemUud2lkdGgoKSwg
bV9wbHVnaW5TaXplLmhlaWdodCgpKSk7CisKKyAgICBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5n
UmVmPiA+IHNjcmlwdHM7CisgICAgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQobV9wZGZEb2N1
bWVudC5nZXQoKSwgc2NyaXB0cyk7CisKKyAgICBzaXplX3Qgc2NyaXB0Q291bnQgPSBzY3JpcHRz
LnNpemUoKTsKKyAgICBpZiAoIXNjcmlwdENvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBK
U0dsb2JhbENvbnRleHRSZWYgY3R4ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlKDApOworICAgIEpT
T2JqZWN0UmVmIGpzUERGRG9jID0gbWFrZUpTUERGRG9jKGN0eCk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNjcmlwdENvdW50OyArK2kpIHsKKyAgICAgICAgSlNTdHJpbmdSZWYgc2Ny
aXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoc2NyaXB0c1tpXS5nZXQoKSk7CisgICAg
ICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4LCBzY3JpcHQsIGpzUERGRG9jLCAwLCAwLCAwKTsKKyAg
ICAgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdCk7CisgICAgfQorCisgICAgSlNHbG9iYWxDb250
ZXh0UmVsZWFzZShjdHgpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpjYWxjdWxhdGVTaXpl
cygpCit7CisgICAgc2l6ZV90IHBhZ2VDb3VudCA9IENHUERGRG9jdW1lbnRHZXROdW1iZXJPZlBh
Z2VzKG1fcGRmRG9jdW1lbnQuZ2V0KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFn
ZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3Vt
ZW50R2V0UGFnZShtX3BkZkRvY3VtZW50LmdldCgpLCBpICsgMSk7CisgICAgICAgIEFTU0VSVChw
ZGZQYWdlKTsKKworICAgICAgICBDR1JlY3QgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQ
YWdlLCBrQ0dQREZDcm9wQm94KTsKKyAgICAgICAgaWYgKENHUmVjdElzRW1wdHkoYm94KSkKKyAg
ICAgICAgICAgIGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGTWVkaWFC
b3gpOworICAgICAgICBtX3BhZ2VCb3hlcy5hcHBlbmQoSW50UmVjdChib3gpKTsKKyAgICAgICAg
bV9wZGZEb2N1bWVudFNpemUuc2V0V2lkdGgobWF4KG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCks
IHN0YXRpY19jYXN0PGludD4oYm94LnNpemUud2lkdGgpKSk7CisgICAgICAgIG1fcGRmRG9jdW1l
bnRTaXplLmV4cGFuZCgwLCBib3guc2l6ZS5oZWlnaHQpOworICAgIH0KKyAgICBtX3BkZkRvY3Vt
ZW50U2l6ZS5leHBhbmQoMCwgZ3V0dGVySGVpZ2h0ICogKG1fcGFnZUJveGVzLnNpemUoKSAtIDEp
KTsKK30KKworYm9vbCBCdWlsdEluUERGVmlldzo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQoreworICAgIC8vIExvYWQgdGhlIHNyYyBVUkwgaWYgbmVlZGVkLgorICAg
IG1fc291cmNlVVJMID0gcGFyYW1ldGVycy51cmw7CisgICAgaWYgKCFwYXJhbWV0ZXJzLmxvYWRN
YW51YWxseSAmJiAhcGFyYW1ldGVycy51cmwuaXNFbXB0eSgpKQorICAgICAgICBjb250cm9sbGVy
KCktPmxvYWRVUkwocGRmRG9jdW1lbnRSZXF1ZXN0SUQsICJHRVQiLCBwYXJhbWV0ZXJzLnVybC5z
dHJpbmcoKSwgU3RyaW5nKCksIEhUVFBIZWFkZXJNYXAoKSwgVmVjdG9yPHVpbnQ4X3Q+KCksIGZh
bHNlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpkZXN0
cm95KCkKK3sKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpKQorICAgICAgICAgICAgZnJhbWVW
aWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICB9CisKKyAgICBkZXN0cm95U2Ny
b2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGlj
YWxTY3JvbGxiYXIpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpwYWludChHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAg
IGNvbnRlbnRBcmVhV2lsbFBhaW50KCk7CisKKyAgICBwYWludEJhY2tncm91bmQoZ3JhcGhpY3ND
b250ZXh0LCBkaXJ0eVJlY3QpOworCisgICAgaWYgKCFtX3BkZkRvY3VtZW50KSAvLyBGSVhNRTog
RHJhdyBsb2FkaW5nIHByb2dyZXNzLgorICAgICAgICByZXR1cm47CisKKyAgICBwYWludENvbnRl
bnQoZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOworICAgIHBhaW50Q29udHJvbHMoZ3JhcGhp
Y3NDb250ZXh0LCBkaXJ0eVJlY3QpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpwYWludEJh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KmdyYXBoaWNzQ29udGV4dCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29s
b3I6OmdyYXksIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGdyYXBoaWNzQ29udGV4dC0+Zmls
bFJlY3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBCdWlsdEluUERGVmlldzo6cGFpbnRDb250ZW50
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGlj
c0NvbnRleHQpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uSGlnaCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTaG91bGRT
bW9vdGhGb250cyh0cnVlKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xv
cjo6d2hpdGUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LT5j
bGlwKGRpcnR5UmVjdCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdChkaXJ0eVJlY3QpOworICAg
IGNvbnRlbnRSZWN0Lm1vdmVCeShJbnRQb2ludChtX3Njcm9sbE9mZnNldCkpOworICAgIGdyYXBo
aWNzQ29udGV4dC0+dHJhbnNsYXRlKC1tX3Njcm9sbE9mZnNldC53aWR0aCgpLCAtbV9zY3JvbGxP
ZmZzZXQuaGVpZ2h0KCkpOworCisgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEp
OworCisgICAgaW50IHBhZ2VUb3AgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9w
YWdlQm94ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSW50UmVjdCBwYWdlQm94ID0gbV9wYWdl
Qm94ZXNbaV07CisgICAgICAgIGZsb2F0IGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWCA9IG1heChy
b3VuZGYoKG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gcGFnZUJveC53aWR0aCgpKSAvIDIuMGYpLCAw
LjBmKTsKKyAgICAgICAgZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdZID0gKG1fcGFnZUJv
eGVzLnNpemUoKSA9PSAxKSA/IG1heChyb3VuZGYoKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIHBh
Z2VCb3guaGVpZ2h0KCkgKyBzaGFkb3dPZmZzZXRZKSAvIDIuMGYpLCAwLjBmKSA6IDA7CisKKyAg
ICAgICAgaWYgKHBhZ2VUb3AgPiBjb250ZW50UmVjdC5tYXhZKCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKHBhZ2VUb3AgKyBwYWdlQm94LmhlaWdodCgpICsgZXh0cmFPZmZzZXRG
b3JDZW50ZXJpbmdZICsgZ3V0dGVySGVpZ2h0ID49IGNvbnRlbnRSZWN0LnkoKSkgeworICAgICAg
ICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShtX3BkZkRv
Y3VtZW50LmdldCgpLCBpICsgMSk7CisKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2
ZSgpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoZXh0cmFPZmZzZXRG
b3JDZW50ZXJpbmdYIC0gcGFnZUJveC54KCksIC1leHRyYU9mZnNldEZvckNlbnRlcmluZ1kgLSBw
YWdlQm94LnkoKSAtIHBhZ2VCb3guaGVpZ2h0KCkpOworCisgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSks
IHNoYWRvd1NpemUsIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0KHBhZ2VCb3gpOworICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5jbGVhclNoYWRvdygpOworCisgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPmNsaXAocGFnZUJveCk7CisKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdQREZQYWdlKGNv
bnRleHQsIHBkZlBhZ2UpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7
CisgICAgICAgIH0KKyAgICAgICAgcGFnZVRvcCArPSBwYWdlQm94LmhlaWdodCgpICsgZ3V0dGVy
SGVpZ2h0OworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLXBhZ2VC
b3guaGVpZ2h0KCkgLSBndXR0ZXJIZWlnaHQpOworICAgIH0KK30KKwordm9pZCBCdWlsdEluUERG
Vmlldzo6cGFpbnRDb250cm9scyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOworICAgICAgICBJbnRSZWN0
IHNjcm9sbGJhckRpcnR5UmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAgc2Nyb2xsYmFyRGlydHlS
ZWN0Lm1vdmVCeShwbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOworICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS54
KCksIC1wbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpLnkoKSk7CisKKyAgICAgICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+cGFp
bnQoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOworCisgICAgICAgIGlmICht
X3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+cGFp
bnQoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOworICAgIH0KKworICAgIElu
dFJlY3QgZGlydHlDb3JuZXJSZWN0ID0gaW50ZXJzZWN0aW9uKHNjcm9sbENvcm5lclJlY3QoKSwg
ZGlydHlSZWN0KTsKKyAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS0+cGFpbnRTY3JvbGxDb3Ju
ZXIoMCwgZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eUNvcm5lclJlY3QpOworfQorCit2b2lkIEJ1aWx0
SW5QREZWaWV3Ojp1cGRhdGVDb250cm9sVGludHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQpCit7CisgICAgQVNTRVJUKGdyYXBoaWNzQ29udGV4dC0+dXBkYXRpbmdDb250cm9sVGlu
dHMoKSk7CisKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJh
cikKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgIGludmFs
aWRhdGVTY3JvbGxDb3JuZXIoc2Nyb2xsQ29ybmVyUmVjdCgpKTsKK30KKworUGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IEJ1aWx0SW5QREZWaWV3OjpzbmFwc2hvdCgpCit7CisgICAgcmV0dXJu
IDA7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCitQbGF0Zm9ybUxheWVyKiBCdWlsdEluUERGVmll
dzo6cGx1Z2luTGF5ZXIoKQoreworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKKworYm9vbCBC
dWlsdEluUERGVmlldzo6aXNUcmFuc3BhcmVudCgpCit7CisgICAgLy8gVGhpcyBzaG91bGQgbmV2
ZXIgYmUgY2FsbGVkIGZyb20gdGhlIHdlYiBwcm9jZXNzLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCdWlsdEluUERGVmlldzo6Z2VvbWV0
cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSkK
K3sKKyAgICBpZiAobV9wbHVnaW5TaXplID09IHBsdWdpblNpemUpIHsKKyAgICAgICAgLy8gTm90
aGluZyB0byBkby4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGx1Z2luU2l6ZSA9
IHBsdWdpblNpemU7CisgICAgdXBkYXRlU2Nyb2xsYmFycygpOworfQorCit2b2lkIEJ1aWx0SW5Q
REZWaWV3Ojp2aXNpYmlsaXR5RGlkQ2hhbmdlKCkKK3sKK30KKwordm9pZCBCdWlsdEluUERGVmll
dzo6ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90KQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpmcmFtZURpZEZhaWwodWludDY0X3Qs
IGJvb2wpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQnVpbHRJblBE
RlZpZXc6OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCwgY29uc3QgV1RGOjpTdHJpbmcm
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3
OjpzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IEtVUkwm
LCB1aW50MzJfdCwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1J
RCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgbV9zdWdnZXN0ZWRG
aWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOworfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAordm9pZCBCdWlsdEluUERGVmlldzo6c3RyZWFtRGlkUmVjZWl2
ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQor
eworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVx
dWVzdElEKTsKKworICAgIGlmICghbV9kYXRhQnVmZmVyKQorICAgICAgICBtX2RhdGFCdWZmZXIu
YWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKworICAgIENGRGF0YUFwcGVuZEJ5
dGVzKG1fZGF0YUJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGJ5
dGVzKSwgbGVuZ3RoKTsKK30KKwordm9pZCBCdWlsdEluUERGVmlldzo6c3RyZWFtRGlkRmluaXNo
TG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlE
LCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBwZGZEb2N1bWVudERp
ZExvYWQoKTsKK30KKwordm9pZCBCdWlsdEluUERGVmlldzo6c3RyZWFtRGlkRmFpbCh1aW50NjRf
dCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJl
YW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgbV9kYXRhQnVm
ZmVyLmNsZWFyKCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6Om1hbnVhbFN0cmVhbURpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBLVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVu
Z3RoLCAgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQor
eworICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKK30KKwordm9p
ZCBCdWlsdEluUERGVmlldzo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciog
Ynl0ZXMsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFtX2RhdGFCdWZmZXIpCisgICAgICAgIG1f
ZGF0YUJ1ZmZlci5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOworCisgICAgQ0ZE
YXRhQXBwZW5kQnl0ZXMobV9kYXRhQnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0
IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51
YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBwZGZEb2N1bWVudERpZExvYWQoKTsK
K30KKwordm9pZCBCdWlsdEluUERGVmlldzo6bWFudWFsU3RyZWFtRGlkRmFpbChib29sKQorewor
ICAgIG1fZGF0YUJ1ZmZlci5jbGVhcigpOworfQorCitib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5k
bGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQoreworICAgIHN3aXRjaCAo
ZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VNb3ZlOgorICAgICAgICBt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIGFsc28g
bm90aWZ5IHNjcm9sbGJhciB0byBzaG93IGhvdmVyIGVmZmVjdC4gU2hvdWxkIGFsc28gc2VuZCBt
b3VzZUV4aXRlZCB0byBoaWRlIGl0LgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkV2ZW50
OjpNb3VzZURvd246IHsKKyAgICAgICAgLy8gUmV0dXJuaW5nIGZhbHNlIGFzIHdpbGwgbWFrZSBF
dmVudEhhbmRsZXIgdW5mb2N1cyB0aGUgcGx1Zy1pbiwgd2hpY2ggaXMgYXBwcm9wcmlhdGUgd2hl
biBjbGlja2luZyBzY3JvbGxiYXJzLgorICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZG4ndCBj
aGFuZ2UgZm9jdXMgYXQgYWxsLCBidXQgUGx1Z2luVmlldyBhbHJlYWR5IGRpZCB0aGF0IGZvciB1
cy4KKyAgICAgICAgLy8gV2hlbiBzdXBwb3J0IGZvciBQREYgZm9ybXMgaXMgYWRkZWQsIHdlJ2xs
IG5lZWQgdG8gYWN0dWFsbHkgZm9jdXMgdGhlIHBsdWctaW4gd2hlbiBjbGlja2luZyBpbiBhIGZv
cm0uCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7
CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBwbGF0Zm9ybUV2ZW50ID0gcGxhdGZvcm0oZXZl
bnQpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZlbnQpOworICAgICAgICBpZiAo
bV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPm1v
dXNlVXAocGxhdGZvcm1FdmVudCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2
ZW50JiBldmVudCkKK3sKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGxhdGZvcm1FdmVudCA9IHBs
YXRmb3JtKGV2ZW50KTsKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZl
bnQocGxhdGZvcm1FdmVudCk7Cit9CisKK2Jvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZU1vdXNl
RW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sKKyAgICBtb3VzZUVudGVyZWRDb250
ZW50QXJlYSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCdWlsdEluUERGVmlldzo6
aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQoreworICAgIG1vdXNl
RXhpdGVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJ
blBERlZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCit7
CisgICAgLy8gVXNlIGRlZmF1bHQgV2ViS2l0IGNvbnRleHQgbWVudS4KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3Qg
V2ViS2V5Ym9hcmRFdmVudCYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEJ1aWx0
SW5QREZWaWV3OjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQoreworfQorCitOUE9iamVjdCogQnVp
bHRJblBERlZpZXc6OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpCit7CisgICAgcmV0dXJuIDA7
Cit9CisKKyNpZiBQTEFURk9STShNQUMpCisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OndpbmRvd0Zv
Y3VzQ2hhbmdlZChib29sKQoreworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3Ojp3aW5kb3dBbmRW
aWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2Ny
ZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93
Q29vcmRpbmF0ZXMpCit7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OndpbmRvd1Zpc2liaWxp
dHlDaGFuZ2VkKGJvb2wpCit7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OmNvbnRlbnRzU2Nh
bGVGYWN0b3JDaGFuZ2VkKGZsb2F0KQoreworfQorCit1aW50NjRfdCBCdWlsdEluUERGVmlldzo6
cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiAw
OworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpzZW5kQ29tcGxleFRleHRJbnB1dChjb25zdCBT
dHJpbmcmKQoreworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpzZXRMYXllckhvc3RpbmdNb2Rl
KExheWVySG9zdGluZ01vZGUpCit7Cit9CisKKyNlbmRpZgorCit2b2lkIEJ1aWx0SW5QREZWaWV3
Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCkKK3sKK30KKworYm9vbCBCdWlsdElu
UERGVmlldzo6Z2V0Rm9ybVZhbHVlKFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgcmV0dXJuIHNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKK30KKworU2Nyb2xsYmFyKiBCdWlsdEluUERGVmll
dzo6aG9yaXpvbnRhbFNjcm9sbGJhcigpCit7CisgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9s
bGJhci5nZXQoKTsKK30KKworU2Nyb2xsYmFyKiBCdWlsdEluUERGVmlldzo6dmVydGljYWxTY3Jv
bGxiYXIoKQoreworICAgIHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOworfQorCitJ
bnRSZWN0IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCAhbV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092
ZXJsYXlTY3JvbGxiYXIoKSkgeworICAgICAgICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGJhci0+
aXNPdmVybGF5U2Nyb2xsYmFyKCkpOworICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIH0K
KyAgICByZXR1cm4gSW50UmVjdChwbHVnaW5WaWV3KCktPndpZHRoKCkgLSBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT53aWR0aCgpLCBwbHVnaW5WaWV3KCktPmhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5oZWlnaHQoKSwgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Cit9CisKK1Njcm9sbGFibGVBcmVhKiBCdWlsdEluUERG
Vmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBX
YWxrIHVwIHRoZSBmcmFtZSB0cmVlIGFuZCBsb29rIGZvciBhIHNjcm9sbGFibGUgcGFyZW50IGZy
YW1lIG9yIFJlbmRlckxheWVyLgorICAgIHJldHVybiAwOworfQorCit2b2lkIEJ1aWx0SW5QREZW
aWV3OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Nj
cm9sbE9mZnNldCA9IEludFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CisgICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgdG8gYmxpdCBwYXJ0cyB0aGF0
IHJlbWFpbiB2aXNpYmxlLgorICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KDAs
IDAsIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKK30KKwor
aW50IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSBjb25zdAoreworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlv
biA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVy
dGljYWxTY3JvbGxiYXIpLmdldCgpOworICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFy
LT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCitib29s
IEJ1aWx0SW5QREZWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKEZyYW1lKiBjb3Jl
RnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9
IGNvcmVGcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5pc0FjdGl2ZSgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBCdWlsdEluUERGVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBy
ZWN0OworICAgIGRpcnR5UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKyAgICBk
aXJ0eVJlY3QubW92ZUJ5KC1wbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOworICAgIGNvbnRyb2xs
ZXIoKS0+aW52YWxpZGF0ZShkaXJ0eVJlY3QpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3Ojpp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGNv
bnRyb2xsZXIoKS0+aW52YWxpZGF0ZShyZWN0KTsKK30KKworYm9vbCBCdWlsdEluUERGVmlldzo6
aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2ludCBCdWlsdEluUERGVmlldzo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
IGNvbnN0Cit7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQud2lkdGgoKTsKKyAgICBp
ZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAg
ICByZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0Lndp
ZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKK30KKworSW50UG9pbnQgQnVpbHRJblBE
RlZpZXc6Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFBv
aW50KDAsIDApOworfQorCitJbnRQb2ludCBCdWlsdEluUERGVmlldzo6bWF4aW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKK3sKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9ICht
X2hvcml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7CisgICAg
aW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92
ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KG1fcGRmRG9j
dW1lbnRTaXplLndpZHRoKCkgLSBtX3BsdWdpblNpemUud2lkdGgoKSArIHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gbV9wbHVnaW5TaXplLmhlaWdo
dCgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7CisgICAgbWF4aW11bU9mZnNldC5jbGFt
cE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgcmV0dXJuIG1heGltdW1PZmZzZXQ7Cit9CisKK2ludCBC
dWlsdEluUERGVmlldzo6dmlzaWJsZUhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1
Z2luU2l6ZS5oZWlnaHQoKTsKK30KKworaW50IEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxlV2lkdGgo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdpblNpemUud2lkdGgoKTsKK30KKworSW50U2l6
ZSBCdWlsdEluUERGVmlldzo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
ZGZEb2N1bWVudFNpemU7Cit9CisKK2Jvb2wgQnVpbHRJblBERlZpZXc6OmlzT25BY3RpdmVQYWdl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIXBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQo
KS0+aW5QYWdlQ2FjaGUoKTsKK30KKwordm9pZCBCdWlsdEluUERGVmlldzo6c2Nyb2xsYmFyU3R5
bGVDaGFuZ2VkKGludCwgYm9vbCBmb3JjZVVwZGF0ZSkKK3sKKyAgICBpZiAoIWZvcmNlVXBkYXRl
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgUERGIHdhcyBzY3JvbGxlZCBhbGwg
dGhlIHdheSB0byBib3R0b20gcmlnaHQgYW5kIHNjcm9sbGJhcnMgY2hhbmdlIHRvIG92ZXJsYXkg
c3R5bGUsIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB3aGl0ZSByZWN0YW5nbGVzIHdoZXJlIHNj
cm9sbGJhcnMgd2VyZS4KKyAgICBJbnRQb2ludCBuZXdTY3JvbGxPZmZzZXQgPSBJbnRQb2ludCht
X3Njcm9sbE9mZnNldCkuc2hydW5rVG8obWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOworICAgIHNl
dFNjcm9sbE9mZnNldChuZXdTY3JvbGxPZmZzZXQpOworCisgICAgLy8gQXMgc2l6ZSBvZiB0aGUg
Y29udGVudCBhcmVhIGNoYW5nZXMsIHNjcm9sbGJhcnMgbWF5IG5lZWQgdG8gYXBwZWFyIG9yIHRv
IGRpc2FwcGVhci4KKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisKKyAgICBTY3JvbGxhYmxlQXJl
YTo6Y29udGVudHNSZXNpemVkKCk7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5QREZWaWV3Ojpjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBw
b2ludCA9IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0VG9SZW5kZXJlcihw
bHVnaW5WaWV3KCktPnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKHBs
dWdpblZpZXcoKS0+bG9jYXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisKKyAgICBy
ZXR1cm4gcG9pbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jSW5pdGlhbGl6ZShKU0NvbnRl
eHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgQnVpbHRJblBERlZpZXcqIHBk
ZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluUERGVmlldyo+KEpTT2JqZWN0R2V0UHJpdmF0ZShv
YmplY3QpKTsKKyAgICBwZGZWaWV3LT5yZWYoKTsKK30KKworc3RhdGljIHZvaWQganNQREZEb2NG
aW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgQnVpbHRJblBERlZpZXcqIHBkZlZp
ZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluUERGVmlldyo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmpl
Y3QpKTsKKyAgICBwZGZWaWV3LT5kZXJlZigpOworfQorCitKU1ZhbHVlUmVmIEJ1aWx0SW5QREZW
aWV3Ojpqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEJ1aWx0
SW5QREZWaWV3KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERlZpZXcqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworCisgICAgV2ViRnJhbWUqIGZyYW1lID0gcGRmVmll
dy0+bV9mcmFtZTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY3R4KTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBmcmFtZS0+Y29yZUZyYW1l
KCk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjdHgpOworCisgICAgUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpOworICAgIGlm
ICghcGFnZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAg
ICBwYWdlLT5jaHJvbWUoKS0+cHJpbnQoY29yZUZyYW1lKTsKKworICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjdHgpOworfQorCitKU09iamVjdFJlZiBCdWlsdEluUERGVmlldzo6bWFr
ZUpTUERGRG9jKEpTQ29udGV4dFJlZiBjdHgpCit7CisgICAgc3RhdGljIEpTU3RhdGljRnVuY3Rp
b24ganNQREZEb2NTdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICAgICAgeyAicHJpbnQiLCBqc1BE
RkRvY1ByaW50LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgMCwgMCwgMCB9LAorICAgIH07CisKKyAgICBz
dGF0aWMgSlNDbGFzc0RlZmluaXRpb24ganNQREZEb2NDbGFzc0RlZmluaXRpb24gPSB7CisgICAg
ICAgIDAsCisgICAgICAgIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwKKyAgICAgICAgIkRvYyIsCisg
ICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zLAor
ICAgICAgICBqc1BERkRvY0luaXRpYWxpemUsIGpzUERGRG9jRmluYWxpemUsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAKKyAgICB9OworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYganNQREZEb2ND
bGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmpzUERGRG9jQ2xhc3NEZWZpbml0aW9uKTsKKworICAgIHJl
dHVybiBKU09iamVjdE1ha2UoY3R4LCBqc1BERkRvY0NsYXNzLCB0aGlzKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL0J1aWx0SW5QREZWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcubW0JKHJldmlzaW9uIDExNDI4NikKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDMxICsyMywzMyBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJCdWlsdEluUERGVmlldy5oIgorI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJCdWls
dEluUERGVmlldy5oIgogCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotI2luY2x1ZGUgIlNoYXJl
YWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIldlYkV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViRXZlbnRD
b252ZXJzaW9uLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
UmVmQ0YuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvQ2hyb21lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUVFBIZWFkZXJNYXAuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxBbmlt
YXRvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KKyNpbXBvcnQgIlBE
RktpdEltcG9ydHMuaCIKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKKyNpbXBvcnQgIlNoYXJlYWJs
ZUJpdG1hcC5oIgorI2ltcG9ydCAiV2ViRXZlbnQuaCIKKyNpbXBvcnQgIldlYkV2ZW50Q29udmVy
c2lvbi5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNTdHJpbmdSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4K
KyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXJjaGl2ZVJlc291
cmNlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Eb2N1
bWVudExvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVFRQSGVh
ZGVyTWFwLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9s
bEFuaW1hdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTI4Myw4ICsyODUs
NyBAQCB2b2lkIEJ1aWx0SW5QREZWaWV3OjpwZGZEb2N1bWVudERpZExvYWQoCiB7CiAgICAgYWRk
QXJjaGl2ZVJlc291cmNlKCk7CiAKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IHBk
ZkRhdGFQcm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEobV9k
YXRhQnVmZmVyLmdldCgpKSk7Ci0gICAgbV9wZGZEb2N1bWVudC5hZG9wdENGKENHUERGRG9jdW1l
bnRDcmVhdGVXaXRoUHJvdmlkZXIocGRmRGF0YVByb3ZpZGVyLmdldCgpKSk7CisgICAgbV9wZGZE
b2N1bWVudC5hZG9wdE5TKFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6
KE5TRGF0YSAqKW1fZGF0YUJ1ZmZlci5nZXQoKV0pOwogCiAgICAgY2FsY3VsYXRlU2l6ZXMoKTsK
ICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CkBAIC0yOTIsNyArMjkzLDcgQEAgdm9pZCBCdWlsdElu
UERGVmlldzo6cGRmRG9jdW1lbnREaWRMb2FkKAogICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0
ZShJbnRSZWN0KDAsIDAsIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0
KCkpKTsKIAogICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4gc2NyaXB0czsKLSAg
ICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChtX3BkZkRvY3VtZW50LmdldCgpLCBzY3JpcHRz
KTsKKyAgICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChbbV9wZGZEb2N1bWVudC5nZXQoKSBk
b2N1bWVudFJlZl0sIHNjcmlwdHMpOwogCiAgICAgc2l6ZV90IHNjcmlwdENvdW50ID0gc2NyaXB0
cy5zaXplKCk7CiAgICAgaWYgKCFzY3JpcHRDb3VudCkKQEAgLTMxMiw5ICszMTMsOSBAQCB2b2lk
IEJ1aWx0SW5QREZWaWV3OjpwZGZEb2N1bWVudERpZExvYWQoCiAKIHZvaWQgQnVpbHRJblBERlZp
ZXc6OmNhbGN1bGF0ZVNpemVzKCkKIHsKLSAgICBzaXplX3QgcGFnZUNvdW50ID0gQ0dQREZEb2N1
bWVudEdldE51bWJlck9mUGFnZXMobV9wZGZEb2N1bWVudC5nZXQoKSk7CisgICAgc2l6ZV90IHBh
Z2VDb3VudCA9IENHUERGRG9jdW1lbnRHZXROdW1iZXJPZlBhZ2VzKFttX3BkZkRvY3VtZW50Lmdl
dCgpIGRvY3VtZW50UmVmXSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWdlQ291bnQ7
ICsraSkgewotICAgICAgICBDR1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQ
YWdlKG1fcGRmRG9jdW1lbnQuZ2V0KCksIGkgKyAxKTsKKyAgICAgICAgQ0dQREZQYWdlUmVmIHBk
ZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVu
dFJlZl0sIGkgKyAxKTsKICAgICAgICAgQVNTRVJUKHBkZlBhZ2UpOwogCiAgICAgICAgIENHUmVj
dCBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BCb3gpOwpAQCAt
Mzk0LDcgKzM5NSw3IEBAIHZvaWQgQnVpbHRJblBERlZpZXc6OnBhaW50Q29udGVudChHcmFwaGkK
ICAgICAgICAgaWYgKHBhZ2VUb3AgPiBjb250ZW50UmVjdC5tYXhZKCkpCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgaWYgKHBhZ2VUb3AgKyBwYWdlQm94LmhlaWdodCgpICsgZXh0cmFPZmZz
ZXRGb3JDZW50ZXJpbmdZICsgZ3V0dGVySGVpZ2h0ID49IGNvbnRlbnRSZWN0LnkoKSkgewotICAg
ICAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShtX3Bk
ZkRvY3VtZW50LmdldCgpLCBpICsgMSk7CisgICAgICAgICAgICBDR1BERlBhZ2VSZWYgcGRmUGFn
ZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3VtZW50UmVm
XSwgaSArIDEpOwogCiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKICAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5n
WCAtIHBhZ2VCb3gueCgpLCAtZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdZIC0gcGFnZUJveC55KCkg
LSBwYWdlQm94LmhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDExNDI4NikKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3OSw4
ICsyNzc5LDggQEAgdm9pZCBXZWJQYWdlOjpzdG9wU3BlYWtpbmcoKQogCiAjZW5kaWYKIAotI2lm
IFVTRShDRykKLXN0YXRpYyBSZXRhaW5QdHI8Q0dQREZEb2N1bWVudFJlZj4gcGRmRG9jdW1lbnRG
b3JQcmludGluZ0ZyYW1lKEZyYW1lKiBjb3JlRnJhbWUpCisjaWYgUExBVEZPUk0oTUFDKQorUmV0
YWluUHRyPFBERkRvY3VtZW50PiBXZWJQYWdlOjpwZGZEb2N1bWVudEZvclByaW50aW5nRnJhbWUo
RnJhbWUqIGNvcmVGcmFtZSkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUt
PmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTI3OTUsNyArMjc5NSw3IEBAIHN0
YXRpYyBSZXRhaW5QdHI8Q0dQREZEb2N1bWVudFJlZj4gcGRmRG8KIAogICAgIHJldHVybiBwbHVn
aW5WaWV3LT5wZGZEb2N1bWVudEZvclByaW50aW5nKCk7CiB9Ci0jZW5kaWYgLy8gVVNFKENHKQor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogdm9pZCBXZWJQYWdlOjpiZWdpblByaW50aW5nKHVp
bnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvKQogewpAQCAtMjgwNywx
MCArMjgwNywxMCBAQCB2b2lkIFdlYlBhZ2U6OmJlZ2luUHJpbnRpbmcodWludDY0X3QgZnJhCiAg
ICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotI2lmIFVTRShDRykKKyNpZiBQ
TEFURk9STShNQUMpCiAgICAgaWYgKHBkZkRvY3VtZW50Rm9yUHJpbnRpbmdGcmFtZShjb3JlRnJh
bWUpKQogICAgICAgICByZXR1cm47Ci0jZW5kaWYgLy8gVVNFKENHKQorI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKIAogICAgIGlmICghbV9wcmludENvbnRleHQpCiAgICAgICAgIG1fcHJpbnRDb250
ZXh0ID0gYWRvcHRQdHIobmV3IFByaW50Q29udGV4dChjb3JlRnJhbWUpKTsKQEAgLTI4NDcsMjEg
KzI4NDcsMTAgQEAgdm9pZCBXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQcmludGluZyh1aQogICAg
ICAgICByZXN1bHRQYWdlUmVjdHMgPSBtX3ByaW50Q29udGV4dC0+cGFnZVJlY3RzKCk7CiAgICAg
ICAgIHJlc3VsdFRvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyA9IG1fcHJpbnRDb250ZXh0LT5j
b21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3IoRmxvYXRTaXplKHByaW50SW5mby5hdmFpbGFibGVQ
YXBlcldpZHRoLCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJIZWlnaHQpKSAqIHByaW50SW5mby5w
YWdlU2V0dXBTY2FsZUZhY3RvcjsKICAgICB9Ci0jaWYgVVNFKENHKQotICAgIGVsc2UgewotICAg
ICAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFt
ZUlEKTsKLSAgICAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1lID8gZnJhbWUtPmNvcmVGcmFt
ZSgpIDogMDsKLSAgICAgICAgUmV0YWluUHRyPENHUERGRG9jdW1lbnRSZWY+IHBkZkRvY3VtZW50
ID0gY29yZUZyYW1lID8gcGRmRG9jdW1lbnRGb3JQcmludGluZ0ZyYW1lKGNvcmVGcmFtZSkgOiAw
OwotICAgICAgICBpZiAocGRmRG9jdW1lbnQgJiYgQ0dQREZEb2N1bWVudEFsbG93c1ByaW50aW5n
KHBkZkRvY3VtZW50LmdldCgpKSkgewotICAgICAgICAgICAgQ0ZJbmRleCBwYWdlQ291bnQgPSBD
R1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhwZGZEb2N1bWVudC5nZXQoKSk7Ci0gICAgICAg
ICAgICBJbnRSZWN0IHBhZ2VSZWN0KDAsIDAsIGNlaWxmKHByaW50SW5mby5hdmFpbGFibGVQYXBl
cldpZHRoKSwgY2VpbGYocHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVySGVpZ2h0KSk7Ci0gICAgICAg
ICAgICBmb3IgKENGSW5kZXggaSA9IDE7IGkgPD0gcGFnZUNvdW50OyArK2kpIHsKLSAgICAgICAg
ICAgICAgICByZXN1bHRQYWdlUmVjdHMuYXBwZW5kKHBhZ2VSZWN0KTsKLSAgICAgICAgICAgICAg
ICBwYWdlUmVjdC5tb3ZlKDAsIHBhZ2VSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBVU0UoQ0cpCisjaWYgUExBVEZPUk0oTUFDKQorICAg
IGVsc2UKKyAgICAgICAgY29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmdQREZEb2N1bWVudChmcmFtZUlE
LCBwcmludEluZm8sIHJlc3VsdFBhZ2VSZWN0cyk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQog
CiAgICAgLy8gSWYgd2UncmUgYXNrZWQgdG8gcHJpbnQsIHdlIHNob3VsZCBhY3R1YWxseSBwcmlu
dCBhdCBsZWFzdCBhIGJsYW5rIHBhZ2UuCiAgICAgaWYgKHJlc3VsdFBhZ2VSZWN0cy5pc0VtcHR5
KCkpCkBAIC0yODcwLDQ4ICsyODU5LDYgQEAgdm9pZCBXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQ
cmludGluZyh1aQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q29tcHV0ZWRQYWdl
c0NhbGxiYWNrKHJlc3VsdFBhZ2VSZWN0cywgcmVzdWx0VG90YWxTY2FsZUZhY3RvckZvclByaW50
aW5nLCBjYWxsYmFja0lEKSk7CiB9CiAKLSNpZiBVU0UoQ0cpCi1zdGF0aWMgaW5saW5lIENHRmxv
YXQgcm91bmRDR0Zsb2F0KENHRmxvYXQgZikKLXsKLSAgICBpZiAoc2l6ZW9mKENHRmxvYXQpID09
IHNpemVvZihmbG9hdCkpCi0gICAgICAgIHJldHVybiByb3VuZGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGYpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4ocm91bmQoZikpOwotfQotCi1z
dGF0aWMgdm9pZCBkcmF3UERGUGFnZShDR1BERkRvY3VtZW50UmVmIHBkZkRvY3VtZW50LCBDRklu
ZGV4IHBhZ2VJbmRleCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHRmxvYXQgcGFnZVNldHVwU2Nh
bGVGYWN0b3IsIENHU2l6ZSBwYXBlclNpemUpCi17Ci0gICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShj
b250ZXh0KTsKLQotICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIHBhZ2VTZXR1cFNjYWxl
RmFjdG9yLCBwYWdlU2V0dXBTY2FsZUZhY3Rvcik7Ci0KLSAgICBDR1BERlBhZ2VSZWYgcGFnZSA9
IENHUERGRG9jdW1lbnRHZXRQYWdlKHBkZkRvY3VtZW50LCBwYWdlSW5kZXggKyAxKTsKLSAgICBD
R1JlY3QgY3JvcEJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGFnZSwga0NHUERGQ3JvcEJveCk7
Ci0gICAgaWYgKENHUmVjdElzRW1wdHkoY3JvcEJveCkpCi0gICAgICAgIGNyb3BCb3ggPSBDR1Jl
Y3RJbnRlcnNlY3Rpb24oY3JvcEJveCwgQ0dQREZQYWdlR2V0Qm94UmVjdChwYWdlLCBrQ0dQREZN
ZWRpYUJveCkpOwotICAgIGVsc2UKLSAgICAgICAgY3JvcEJveCA9IENHUERGUGFnZUdldEJveFJl
Y3QocGFnZSwga0NHUERGTWVkaWFCb3gpOwotCi0gICAgYm9vbCBzaG91bGRSb3RhdGUgPSAocGFw
ZXJTaXplLndpZHRoIDwgcGFwZXJTaXplLmhlaWdodCkgIT0gKGNyb3BCb3guc2l6ZS53aWR0aCA8
IGNyb3BCb3guc2l6ZS5oZWlnaHQpOwotICAgIGlmIChzaG91bGRSb3RhdGUpCi0gICAgICAgIHN3
YXAoY3JvcEJveC5zaXplLndpZHRoLCBjcm9wQm94LnNpemUuaGVpZ2h0KTsKLQotICAgIC8vIENl
bnRlci4KLSAgICBDR0Zsb2F0IHdpZHRoRGlmZmVyZW5jZSA9IHBhcGVyU2l6ZS53aWR0aCAvIHBh
Z2VTZXR1cFNjYWxlRmFjdG9yIC0gY3JvcEJveC5zaXplLndpZHRoOwotICAgIENHRmxvYXQgaGVp
Z2h0RGlmZmVyZW5jZSA9IHBhcGVyU2l6ZS5oZWlnaHQgLyBwYWdlU2V0dXBTY2FsZUZhY3RvciAt
IGNyb3BCb3guc2l6ZS5oZWlnaHQ7Ci0gICAgaWYgKHdpZHRoRGlmZmVyZW5jZSB8fCBoZWlnaHRE
aWZmZXJlbmNlKQotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgcm91bmRD
R0Zsb2F0KHdpZHRoRGlmZmVyZW5jZSAvIDIpLCByb3VuZENHRmxvYXQoaGVpZ2h0RGlmZmVyZW5j
ZSAvIDIpKTsKLQotICAgIGlmIChzaG91bGRSb3RhdGUpIHsKLSAgICAgICAgQ0dDb250ZXh0Um90
YXRlQ1RNKGNvbnRleHQsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHBpT3ZlclR3b0RvdWJsZSkpOwot
ICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWNyb3BCb3guc2l6ZS53
aWR0aCk7Ci0gICAgfQotCi0gICAgQ0dDb250ZXh0RHJhd1BERlBhZ2UoY29udGV4dCwgcGFnZSk7
Ci0KLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwotfQotI2VuZGlmIC8vIFVT
RShDRykKLQogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKQogdm9pZCBXZWJQYWdl
OjpkcmF3UmVjdFRvUERGKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJ
bmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0LCB1aW50NjRfdCBjYWxsYmFja0lEKQog
ewpAQCAtMjkyMSwxMiArMjg2OCwxMSBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdSZWN0VG9QREYodWlu
dDY0X3QgZnJhCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IHBkZlBhZ2VEYXRhKEFk
b3B0Q0YsIENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwogCiAgICAgaWYgKGNvcmVGcmFtZSkg
ewotI2lmICFVU0UoQ0cpCi0gICAgICAgIFVOVVNFRF9QQVJBTShwcmludEluZm8pOwotCi0gICAg
ICAgIEFTU0VSVChjb3JlRnJhbWUtPmRvY3VtZW50KCktPnByaW50aW5nKCkpOwotI2Vsc2UKKyNp
ZiBQTEFURk9STShNQUMpCiAgICAgICAgIEFTU0VSVChjb3JlRnJhbWUtPmRvY3VtZW50KCktPnBy
aW50aW5nKCkgfHwgcGRmRG9jdW1lbnRGb3JQcmludGluZ0ZyYW1lKGNvcmVGcmFtZSkpOworI2Vs
c2UKKyAgICAgICAgQVNTRVJUKGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSk7Cisj
ZW5kaWYKIAogICAgICAgICAvLyBGSVhNRTogVXNlIENHRGF0YUNvbnN1bWVyQ3JlYXRlIHdpdGgg
Y2FsbGJhY2tzIHRvIGF2b2lkIGNvcHlpbmcgdGhlIGRhdGEuCiAgICAgICAgIFJldGFpblB0cjxD
R0RhdGFDb25zdW1lclJlZj4gcGRmRGF0YUNvbnN1bWVyKEFkb3B0Q0YsIENHRGF0YUNvbnN1bWVy
Q3JlYXRlV2l0aENGRGF0YShwZGZQYWdlRGF0YS5nZXQoKSkpOwpAQCAtMjkzNiwyMiArMjg4Miwx
MyBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdSZWN0VG9QREYodWludDY0X3QgZnJhCiAgICAgICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHBhZ2VJbmZvKEFkb3B0Q0YsIENGRGljdGlvbmFyeUNy
ZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlw
ZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogICAgICAgICBDR1BERkNvbnRleHRCZWdpblBh
Z2UoY29udGV4dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkpOwogCi0gICAgICAgIGlmIChSZXRhaW5Q
dHI8Q0dQREZEb2N1bWVudFJlZj4gcGRmRG9jdW1lbnQgPSBwZGZEb2N1bWVudEZvclByaW50aW5n
RnJhbWUoY29yZUZyYW1lKSkgewotICAgICAgICAgICAgQ0ZJbmRleCBwYWdlQ291bnQgPSBDR1BE
RkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhwZGZEb2N1bWVudC5nZXQoKSk7Ci0gICAgICAgICAg
ICBJbnRTaXplIHBhcGVyU2l6ZShjZWlsZihwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCks
IGNlaWxmKHByaW50SW5mby5hdmFpbGFibGVQYXBlckhlaWdodCkpOwotICAgICAgICAgICAgSW50
UmVjdCBwYWdlUmVjdChJbnRQb2ludCgpLCBwYXBlclNpemUpOwotICAgICAgICAgICAgZm9yIChD
RkluZGV4IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAo
cGFnZVJlY3QuaW50ZXJzZWN0cyhyZWN0KSkgewotICAgICAgICAgICAgICAgICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNvbnRleHQuZ2V0KCkpOwotCi0gICAgICAgICAgICAgICAgICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LmdldCgpLCBwYWdlUmVjdC54KCkgLSByZWN0LngoKSwg
cGFnZVJlY3QueSgpIC0gcmVjdC55KCkpOwotICAgICAgICAgICAgICAgICAgICBkcmF3UERGUGFn
ZShwZGZEb2N1bWVudC5nZXQoKSwgaSwgY29udGV4dC5nZXQoKSwgcHJpbnRJbmZvLnBhZ2VTZXR1
cFNjYWxlRmFjdG9yLCBwYXBlclNpemUpOwotCi0gICAgICAgICAgICAgICAgICAgIENHQ29udGV4
dFJlc3RvcmVHU3RhdGUoY29udGV4dC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHBhZ2VSZWN0Lm1vdmUoMCwgcGFnZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgaWYgKFJl
dGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQgPSBwZGZEb2N1bWVudEZvclByaW50aW5n
RnJhbWUoY29yZUZyYW1lKSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX3ByaW50Q29udGV4dCk7
CisgICAgICAgICAgICBkcmF3UmVjdFRvUERGRnJvbVBERkRvY3VtZW50KGNvbnRleHQuZ2V0KCks
IHBkZkRvY3VtZW50LmdldCgpLCBwcmludEluZm8sIHJlY3QpOworICAgICAgICB9IGVsc2UKKyNl
bmRpZgorICAgICAgICB7CiAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNvbnRleHQu
Z2V0KCkpOwogICAgICAgICAgICAgY3R4LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogICAgICAg
ICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAtcmVjdC5oZWlnaHQoKSk7CkBAIC0yOTYwLDcgKzI4OTcs
NiBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdSZWN0VG9QREYodWludDY0X3QgZnJhCiAKICAgICAgICAg
Q0dQREZDb250ZXh0RW5kUGFnZShjb250ZXh0LmdldCgpKTsKICAgICAgICAgQ0dQREZDb250ZXh0
Q2xvc2UoY29udGV4dC5nZXQoKSk7Ci0jZW5kaWYKICAgICB9CiAKICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRhdGFDYWxsYmFjayhDb3JlSVBDOjpEYXRhUmVmZXJlbmNlKENGRGF0
YUdldEJ5dGVQdHIocGRmUGFnZURhdGEuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgocGRmUGFnZURh
dGEuZ2V0KCkpKSwgY2FsbGJhY2tJRCkpOwpAQCAtMjk3NSw0NCArMjkxMSw0OSBAQCB2b2lkIFdl
YlBhZ2U6OmRyYXdQYWdlc1RvUERGKHVpbnQ2NF90IGZyCiAKICAgICBpZiAoY29yZUZyYW1lKSB7
CiAKLSNpZiAhVVNFKENHKQotICAgICAgICBBU1NFUlQoY29yZUZyYW1lLT5kb2N1bWVudCgpLT5w
cmludGluZygpKTsKLSNlbHNlCisjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBBU1NFUlQoY29y
ZUZyYW1lLT5kb2N1bWVudCgpLT5wcmludGluZygpIHx8IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmdG
cmFtZShjb3JlRnJhbWUpKTsKLQotICAgICAgICBSZXRhaW5QdHI8Q0dQREZEb2N1bWVudFJlZj4g
cGRmRG9jdW1lbnQgPSBwZGZEb2N1bWVudEZvclByaW50aW5nRnJhbWUoY29yZUZyYW1lKTsKKyNl
bHNlCisgICAgICAgIEFTU0VSVChjb3JlRnJhbWUtPmRvY3VtZW50KCktPnByaW50aW5nKCkpOwor
I2VuZGlmCiAKICAgICAgICAgLy8gRklYTUU6IFVzZSBDR0RhdGFDb25zdW1lckNyZWF0ZSB3aXRo
IGNhbGxiYWNrcyB0byBhdm9pZCBjb3B5aW5nIHRoZSBkYXRhLgogICAgICAgICBSZXRhaW5QdHI8
Q0dEYXRhQ29uc3VtZXJSZWY+IHBkZkRhdGFDb25zdW1lcihBZG9wdENGLCBDR0RhdGFDb25zdW1l
ckNyZWF0ZVdpdGhDRkRhdGEocGRmUGFnZURhdGEuZ2V0KCkpKTsKIAotICAgICAgICBDR1JlY3Qg
bWVkaWFCb3ggPSBtX3ByaW50Q29udGV4dCAmJiBtX3ByaW50Q29udGV4dC0+cGFnZUNvdW50KCkg
PyBtX3ByaW50Q29udGV4dC0+cGFnZVJlY3QoMCkgOiBDR1JlY3RNYWtlKDAsIDAsIHByaW50SW5m
by5hdmFpbGFibGVQYXBlcldpZHRoLCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJIZWlnaHQpOwor
ICAgICAgICBDR1JlY3QgbWVkaWFCb3ggPSAobV9wcmludENvbnRleHQgJiYgbV9wcmludENvbnRl
eHQtPnBhZ2VDb3VudCgpKSA/IG1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdCgwKSA6IENHUmVjdE1h
a2UoMCwgMCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50SW5mby5hdmFpbGFi
bGVQYXBlckhlaWdodCk7CiAgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHQo
QWRvcHRDRiwgQ0dQREZDb250ZXh0Q3JlYXRlKHBkZkRhdGFDb25zdW1lci5nZXQoKSwgJm1lZGlh
Qm94LCAwKSk7Ci0gICAgICAgIHNpemVfdCBwYWdlQ291bnQgPSBtX3ByaW50Q29udGV4dCA/IG1f
cHJpbnRDb250ZXh0LT5wYWdlQ291bnQoKSA6IENHUERGRG9jdW1lbnRHZXROdW1iZXJPZlBhZ2Vz
KHBkZkRvY3VtZW50LmdldCgpKTsKLSAgICAgICAgZm9yICh1aW50MzJfdCBwYWdlID0gZmlyc3Q7
IHBhZ2UgPCBmaXJzdCArIGNvdW50OyArK3BhZ2UpIHsKLSAgICAgICAgICAgIGlmIChwYWdlID49
IHBhZ2VDb3VudCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gcGFnZUluZm8oQWRvcHRDRiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRl
TXV0YWJsZSgwLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgICAgICBDR1BERkNvbnRleHRCZWdpblBh
Z2UoY29udGV4dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkpOwotCi0gICAgICAgICAgICBpZiAocGRm
RG9jdW1lbnQpCi0gICAgICAgICAgICAgICAgZHJhd1BERlBhZ2UocGRmRG9jdW1lbnQuZ2V0KCks
IHBhZ2UsIGNvbnRleHQuZ2V0KCksIHByaW50SW5mby5wYWdlU2V0dXBTY2FsZUZhY3RvciwgQ0dT
aXplTWFrZShwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2YWlsYWJs
ZVBhcGVySGVpZ2h0KSk7Ci0gICAgICAgICAgICBlbHNlIHsKKworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICAgICAgaWYgKFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQgPSBwZGZEb2N1
bWVudEZvclByaW50aW5nRnJhbWUoY29yZUZyYW1lKSkgeworICAgICAgICAgICAgQVNTRVJUKCFt
X3ByaW50Q29udGV4dCk7CisgICAgICAgICAgICBkcmF3UGFnZXNUb1BERkZyb21QREZEb2N1bWVu
dChjb250ZXh0LmdldCgpLCBwZGZEb2N1bWVudC5nZXQoKSwgcHJpbnRJbmZvLCBmaXJzdCwgY291
bnQpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBzaXpl
X3QgcGFnZUNvdW50ID0gbV9wcmludENvbnRleHQtPnBhZ2VDb3VudCgpOworICAgICAgICAgICAg
Zm9yICh1aW50MzJfdCBwYWdlID0gZmlyc3Q7IHBhZ2UgPCBmaXJzdCArIGNvdW50OyArK3BhZ2Up
IHsKKyAgICAgICAgICAgICAgICBpZiAocGFnZSA+PSBwYWdlQ291bnQpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gcGFnZUluZm8oQWRvcHRDRiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NG
VHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJh
Y2tzKSk7CisgICAgICAgICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKGNvbnRleHQuZ2V0
KCksIHBhZ2VJbmZvLmdldCgpKTsKKwogICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBj
dHgoY29udGV4dC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKEZsb2F0U2l6ZSgx
LCAtMSkpOwogICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgLW1fcHJpbnRDb250ZXh0
LT5wYWdlUmVjdChwYWdlKS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgbV9wcmludENvbnRl
eHQtPnNwb29sUGFnZShjdHgsIHBhZ2UsIG1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdChwYWdlKS53
aWR0aCgpKTsKLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQ0dQREZDb250ZXh0RW5kUGFn
ZShjb250ZXh0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBDR1BERkNvbnRleHRFbmRQYWdlKGNv
bnRleHQuZ2V0KCkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIENHUERGQ29u
dGV4dENsb3NlKGNvbnRleHQuZ2V0KCkpOwotI2VuZGlmCiAgICAgfQogCiAgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEYXRhQ2FsbGJhY2soQ29yZUlQQzo6RGF0YVJlZmVyZW5jZShD
RkRhdGFHZXRCeXRlUHRyKHBkZlBhZ2VEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKHBkZlBh
Z2VEYXRhLmdldCgpKSksIGNhbGxiYWNrSUQpKTsKIH0KKwogI2VsaWYgUExBVEZPUk0oR1RLKQor
CiB2b2lkIFdlYlBhZ2U6OmRyYXdQYWdlc0ZvclByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIGNv
bnN0IFByaW50SW5mbyYgcHJpbnRJbmZvLCB1aW50NjRfdCBjYWxsYmFja0lEKQogewogICAgIGJl
Z2luUHJpbnRpbmcoZnJhbWVJRCwgcHJpbnRJbmZvKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMTE0Mjg2KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NjIzLDYgKzYyMywxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRXaW5kb3dJc1Zpc2libGUo
Ym9vbCB3aW5kb3dJc1Zpc2libGUpOwogICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5n
ZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVz
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGluYXRlcyk7CisK
KyAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmdGcmFtZShX
ZWJDb3JlOjpGcmFtZSopOworICAgIHZvaWQgY29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmdQREZEb2N1
bWVudCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mLCBWZWN0b3I8V2ViQ29yZTo6
SW50UmVjdD4mIHJlc3VsdFBhZ2VSZWN0cyk7CisgICAgdm9pZCBkcmF3UmVjdFRvUERGRnJvbVBE
RkRvY3VtZW50KENHQ29udGV4dFJlZiwgUERGRG9jdW1lbnQgKiwgY29uc3QgUHJpbnRJbmZvJiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZHJhd1BhZ2VzVG9QREZGcm9tUERG
RG9jdW1lbnQoQ0dDb250ZXh0UmVmLCBQREZEb2N1bWVudCAqLCBjb25zdCBQcmludEluZm8mLCB1
aW50MzJfdCBmaXJzdCwgdWludDMyX3QgY291bnQpOwogI2VuZGlmCiAKICAgICB2b2lkIHVuYXBw
bHlFZGl0Q29tbWFuZCh1aW50NjRfdCBjb21tYW5kSUQpOwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24g
MTE0Mjg2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw5IEBACiAjaW1wb3J0
ICJBdHRyaWJ1dGVkU3RyaW5nLmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0
ICJFZGl0b3JTdGF0ZS5oIgorI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5oIgogI2ltcG9ydCAiUGx1
Z2luVmlldy5oIgorI2ltcG9ydCAiUHJpbnRJbmZvLmgiCiAjaW1wb3J0ICJXS0FjY2Vzc2liaWxp
dHlXZWJQYWdlT2JqZWN0LmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNp
bXBvcnQgIldlYkV2ZW50LmgiCkBAIC0zOSw2ICs0MSw3IEBACiAjaW1wb3J0ICJXZWJQYWdlUHJv
eHlNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNTdG9yZS5oIgogI2ltcG9ydCAi
V2ViUHJvY2Vzcy5oIgorI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9BWE9iamVjdENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgpAQCAtNTgsNiArNjEsNyBAQAogI2ltcG9ydCA8V2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTcxOSw0ICs3MjMsMTEy
IEBAIHZvaWQgV2ViUGFnZTo6c2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckgKICAgICAgICAgKCpp
dCktPnNldExheWVySG9zdGluZ01vZGUobGF5ZXJIb3N0aW5nTW9kZSk7CiB9CiAKK3ZvaWQgV2Vi
UGFnZTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmdQREZEb2N1bWVudCh1aW50NjRfdCBmcmFtZUlE
LCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbywgVmVjdG9yPEludFJlY3Q+JiByZXN1bHRQYWdl
UmVjdHMpCit7CisgICAgQVNTRVJUKHJlc3VsdFBhZ2VSZWN0cy5pc0VtcHR5KCkpOworICAgIFdl
YkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpOwor
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBmcmFtZSA/IGZyYW1lLT5jb3JlRnJhbWUoKSA6IDA7Cisg
ICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudCA9IGNvcmVGcmFtZSA/IHBkZkRv
Y3VtZW50Rm9yUHJpbnRpbmdGcmFtZShjb3JlRnJhbWUpIDogMDsKKyAgICBpZiAoW3BkZkRvY3Vt
ZW50LmdldCgpIGFsbG93c1ByaW50aW5nXSkgeworICAgICAgICBOU1VJbnRlZ2VyIHBhZ2VDb3Vu
dCA9IFtwZGZEb2N1bWVudC5nZXQoKSBwYWdlQ291bnRdOworICAgICAgICBJbnRSZWN0IHBhZ2VS
ZWN0KDAsIDAsIGNlaWxmKHByaW50SW5mby5hdmFpbGFibGVQYXBlcldpZHRoKSwgY2VpbGYocHJp
bnRJbmZvLmF2YWlsYWJsZVBhcGVySGVpZ2h0KSk7CisgICAgICAgIGZvciAoTlNVSW50ZWdlciBp
ID0gMTsgaSA8PSBwYWdlQ291bnQ7ICsraSkgeworICAgICAgICAgICAgcmVzdWx0UGFnZVJlY3Rz
LmFwcGVuZChwYWdlUmVjdCk7CisgICAgICAgICAgICBwYWdlUmVjdC5tb3ZlKDAsIHBhZ2VSZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGlubGluZSBDR0Zsb2F0
IHJvdW5kQ0dGbG9hdChDR0Zsb2F0IGYpCit7CisgICAgaWYgKHNpemVvZihDR0Zsb2F0KSA9PSBz
aXplb2YoZmxvYXQpKQorICAgICAgICByZXR1cm4gcm91bmRmKHN0YXRpY19jYXN0PGZsb2F0Pihm
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENHRmxvYXQ+KHJvdW5kKGYpKTsKK30KKworc3Rh
dGljIHZvaWQgZHJhd1BERlBhZ2UoUERGRG9jdW1lbnQgKnBkZkRvY3VtZW50LCBDRkluZGV4IHBh
Z2VJbmRleCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHRmxvYXQgcGFnZVNldHVwU2NhbGVGYWN0
b3IsIENHU2l6ZSBwYXBlclNpemUpCit7CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0
KTsKKworICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIHBhZ2VTZXR1cFNjYWxlRmFjdG9y
LCBwYWdlU2V0dXBTY2FsZUZhY3Rvcik7CisKKyAgICBQREZQYWdlICpwZGZQYWdlID0gW3BkZkRv
Y3VtZW50IHBhZ2VBdEluZGV4OnBhZ2VJbmRleF07CisgICAgTlNSZWN0IGNyb3BCb3ggPSBbcGRm
UGFnZSBib3VuZHNGb3JCb3g6a1BERkRpc3BsYXlCb3hDcm9wQm94XTsKKyAgICBpZiAoTlNJc0Vt
cHR5UmVjdChjcm9wQm94KSkKKyAgICAgICAgY3JvcEJveCA9IFtwZGZQYWdlIGJvdW5kc0ZvckJv
eDprUERGRGlzcGxheUJveE1lZGlhQm94XTsKKyAgICBlbHNlCisgICAgICAgIGNyb3BCb3ggPSBO
U0ludGVyc2VjdGlvblJlY3QoY3JvcEJveCwgW3BkZlBhZ2UgYm91bmRzRm9yQm94OmtQREZEaXNw
bGF5Qm94TWVkaWFCb3hdKTsKKworICAgIGJvb2wgc2hvdWxkUm90YXRlID0gKHBhcGVyU2l6ZS53
aWR0aCA8IHBhcGVyU2l6ZS5oZWlnaHQpICE9IChjcm9wQm94LnNpemUud2lkdGggPCBjcm9wQm94
LnNpemUuaGVpZ2h0KTsKKyAgICBpZiAoc2hvdWxkUm90YXRlKQorICAgICAgICBzd2FwKGNyb3BC
b3guc2l6ZS53aWR0aCwgY3JvcEJveC5zaXplLmhlaWdodCk7CisKKyAgICAvLyBDZW50ZXIuCisg
ICAgQ0dGbG9hdCB3aWR0aERpZmZlcmVuY2UgPSBwYXBlclNpemUud2lkdGggLyBwYWdlU2V0dXBT
Y2FsZUZhY3RvciAtIGNyb3BCb3guc2l6ZS53aWR0aDsKKyAgICBDR0Zsb2F0IGhlaWdodERpZmZl
cmVuY2UgPSBwYXBlclNpemUuaGVpZ2h0IC8gcGFnZVNldHVwU2NhbGVGYWN0b3IgLSBjcm9wQm94
LnNpemUuaGVpZ2h0OworICAgIGlmICh3aWR0aERpZmZlcmVuY2UgfHwgaGVpZ2h0RGlmZmVyZW5j
ZSkKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIHJvdW5kQ0dGbG9hdCh3
aWR0aERpZmZlcmVuY2UgLyAyKSwgcm91bmRDR0Zsb2F0KGhlaWdodERpZmZlcmVuY2UgLyAyKSk7
CisKKyAgICBpZiAoc2hvdWxkUm90YXRlKSB7CisgICAgICAgIENHQ29udGV4dFJvdGF0ZUNUTShj
b250ZXh0LCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihwaU92ZXJUd29Eb3VibGUpKTsKKyAgICAgICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1jcm9wQm94LnNpemUud2lkdGgpOwor
ICAgIH0KKworICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CisgICAg
W05TR3JhcGhpY3NDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OltOU0dyYXBoaWNzQ29udGV4dCBn
cmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0OmNvbnRleHQgZmxpcHBlZDpOT11dOworICAg
IFtwZGZQYWdlIGRyYXdXaXRoQm94OmtQREZEaXNwbGF5Qm94Q3JvcEJveF07CisgICAgW05TR3Jh
cGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKKworICAgIENHQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybSA9IENHQ29udGV4dEdldENUTShjb250ZXh0KTsKKworICAgIGZvciAoUERG
QW5ub3RhdGlvbiAqYW5ub3RhdGlvbiBpbiBbcGRmUGFnZSBhbm5vdGF0aW9uc10pIHsKKyAgICAg
ICAgaWYgKCFbYW5ub3RhdGlvbiBpc0tpbmRPZkNsYXNzOnBkZkFubm90YXRpb25MaW5rQ2xhc3Mo
KV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBQREZBbm5vdGF0aW9uTGluayAq
bGlua0Fubm90YXRpb24gPSAoUERGQW5ub3RhdGlvbkxpbmsgKilhbm5vdGF0aW9uOworICAgICAg
ICBOU1VSTCAqdXJsID0gW2xpbmtBbm5vdGF0aW9uIFVSTF07CisgICAgICAgIGlmICghdXJsKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ0dSZWN0IHVybFJlY3QgPSBOU1JlY3RU
b0NHUmVjdChbbGlua0Fubm90YXRpb24gYm91bmRzXSk7CisgICAgICAgIENHUmVjdCB0cmFuc2Zv
cm1lZFJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybSh1cmxSZWN0LCB0cmFuc2Zvcm0p
OworICAgICAgICBDR1BERkNvbnRleHRTZXRVUkxGb3JSZWN0KGNvbnRleHQsIChDRlVSTFJlZil1
cmwsIHRyYW5zZm9ybWVkUmVjdCk7CisgICAgfQorCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShjb250ZXh0KTsKK30KKwordm9pZCBXZWJQYWdlOjpkcmF3UmVjdFRvUERGRnJvbVBERkRvY3Vt
ZW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBQREZEb2N1bWVudCAqcGRmRG9jdW1lbnQsIGNvbnN0
IFByaW50SW5mbyYgcHJpbnRJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQorewor
ICAgIE5TVUludGVnZXIgcGFnZUNvdW50ID0gW3BkZkRvY3VtZW50IHBhZ2VDb3VudF07CisgICAg
SW50U2l6ZSBwYXBlclNpemUoY2VpbGYocHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgpLCBj
ZWlsZihwcmludEluZm8uYXZhaWxhYmxlUGFwZXJIZWlnaHQpKTsKKyAgICBJbnRSZWN0IHBhZ2VS
ZWN0KEludFBvaW50KCksIHBhcGVyU2l6ZSk7CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBp
IDwgcGFnZUNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKHBhZ2VSZWN0LmludGVyc2VjdHMocmVj
dCkpIHsKKyAgICAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAgICAg
ICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBwYWdlUmVjdC54KCkgLSByZWN0
LngoKSwgcGFnZVJlY3QueSgpIC0gcmVjdC55KCkpOworICAgICAgICAgICAgZHJhd1BERlBhZ2Uo
cGRmRG9jdW1lbnQsIGksIGNvbnRleHQsIHByaW50SW5mby5wYWdlU2V0dXBTY2FsZUZhY3Rvciwg
cGFwZXJTaXplKTsKKworICAgICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0
KTsKKyAgICAgICAgfQorICAgICAgICBwYWdlUmVjdC5tb3ZlKDAsIHBhZ2VSZWN0LmhlaWdodCgp
KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZGcm9tUERGRG9jdW1l
bnQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFBERkRvY3VtZW50ICpwZGZEb2N1bWVudCwgY29uc3Qg
UHJpbnRJbmZvJiBwcmludEluZm8sIHVpbnQzMl90IGZpcnN0LCB1aW50MzJfdCBjb3VudCkKK3sK
KyAgICBOU1VJbnRlZ2VyIHBhZ2VDb3VudCA9IFtwZGZEb2N1bWVudCBwYWdlQ291bnRdOworICAg
IGZvciAodWludDMyX3QgcGFnZSA9IGZpcnN0OyBwYWdlIDwgZmlyc3QgKyBjb3VudDsgKytwYWdl
KSB7CisgICAgICAgIGlmIChwYWdlID49IHBhZ2VDb3VudCkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHBhZ2VJbmZvKEFkb3B0Q0YsIENG
RGljdGlvbmFyeUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJh
Y2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisgICAgICAgIENHUERG
Q29udGV4dEJlZ2luUGFnZShjb250ZXh0LCBwYWdlSW5mby5nZXQoKSk7CisgICAgICAgIGRyYXdQ
REZQYWdlKHBkZkRvY3VtZW50LCBwYWdlLCBjb250ZXh0LCBwcmludEluZm8ucGFnZVNldHVwU2Nh
bGVGYWN0b3IsIENHU2l6ZU1ha2UocHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50
SW5mby5hdmFpbGFibGVQYXBlckhlaWdodCkpOworICAgICAgICBDR1BERkNvbnRleHRFbmRQYWdl
KGNvbnRleHQpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137583</attachid>
            <date>2012-04-17 12:32:55 -0700</date>
            <delta_ts>2012-04-17 20:34:25 -0700</delta_ts>
            <desc>updated to ToT</desc>
            <filename>USPS2.txt</filename>
            <type>text/plain</type>
            <size>99516</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNDQxNCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA0LTE2ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIFVTUFMgU2hpcHBp
bmcgbGFiZWwgcHJpbnRzIHdpdGhvdXQgYmFyY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQwOTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEx
MTMzODc3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVzZSBQREZEb2N1ZW1udCBpbnN0ZWFkIG9mIENHUERGRG9jdW1lbnQgd2hlbiBwcmludGluZyBQ
REZzLCBiZWNhdXNlIFBERktpdCBrbm93cworICAgICAgICBob3cgdG8gZHJhdyBQREYgYnV0dG9u
cywgYW5kIENHIGRvZXMgbm90LgorCisgICAgICAgICogU2hhcmVkL21hYy9QREZLaXRJbXBvcnRz
Lmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5tbTogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAg
IE1vdmVkIGNvZGUgZm9yIGRlYWxpbmcgd2l0aCBkeW5hbWljYWxseSBsb2FkZWQgUERGS2l0IGZy
b20gV0tQcmludGluZ1ZpZXcsIGFzIHdlCisgICAgICAgIG5vdyBhbHNvIG5lZWQgaXQgZWxzZXdo
ZXJlLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRl
ZAorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuY3BwOiBS
ZWJhbWVkIHRvIC5tbS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJ
blBERlZpZXcuaDogQ2hhbmdlZCBtX3BkZkRvY3VtZW50IHRvIFBERkRvY3VtZW50LgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbTogQ29waWVkIGZy
b20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5j
cHAuCisgICAgICAgIChXZWJLaXQ6OkJ1aWx0SW5QREZWaWV3OjpwZGZEb2N1bWVudERpZExvYWQp
OgorICAgICAgICAoV2ViS2l0OjpCdWlsdEluUERGVmlldzo6Y2FsY3VsYXRlU2l6ZXMpOgorICAg
ICAgICAoV2ViS2l0OjpCdWlsdEluUERGVmlldzo6cGFpbnRDb250ZW50KToKKyAgICAgICAgQ2hh
bmdlZCBtX3BkZkRvY3VtZW50IHRvIFBERkRvY3VtZW50LCBhbmQgdXBkYXRlZCBmb3IgdGhlIGNo
YW5nZXMuIFdlIHN0aWxsIHVzZQorICAgICAgICBDR1BERiB3aGVuIGRyYXdpbmcgdG8gc2NyZWVu
IHRob3VnaCwgYmVjYXVzZSB0aGF0IGRvZXNuJ3QgYWZmZWN0IFVTUFMuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmg6IChXZWJLaXQ6OlBsdWdpbjo6cGRmRG9jdW1lbnRG
b3JQcmludGluZyk6IFVwZGF0ZWQKKyAgICAgICAgdGhlIHR5cGUsIGFuZCBjaGFuZ2VkIGlmc2Vk
IGZyb20gQ0cgdG8gTUFDLCBhcyB3ZSdyZSBub3cgZnVsbHkgZGVwZW5kZW50IG9uIENvY29hLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaDogKFdlYktpdDo6UGx1
Z2luVmlldzo6cGRmRG9jdW1lbnRGb3JQcmludGluZyk6CisgICAgICAgIERpdHRvLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpwZGZEb2N1bWVudEZvclByaW50aW5nRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpiZWdpblByaW50aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcHV0
ZVBhZ2VzRm9yUHJpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UmVjdFRv
UERGKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREYpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIE1vdmVkIFBERiBkb2N1
bWVudCBwcmludGluZyBjb2RlIHRvIFdlYlBhZ2VNYWMubW0sIGFzIGl0J3Mgbm93IE9iamVjdGl2
ZSBDLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQcmludGluZ1BERkRvY3Vt
ZW50KToKKyAgICAgICAgKFdlYktpdDo6cm91bmRDR0Zsb2F0KToKKyAgICAgICAgKFdlYktpdDo6
ZHJhd1BERlBhZ2UpOiBXaGlsZSBtb3ZpbmcsIGFsc28gZml4ZWQgYSBsb2dpYyBlcnJvciBpbiBj
YWxjdWxhdGluZyB0aGUgYm94CisgICAgICAgIChpdCB1c2VkIHRvIGludGVyc2VjdCB3aXRoIGFu
IGVtcHR5IGJveCkuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRyYXdSZWN0VG9QREZGcm9t
UERGRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UGFnZXNUb1BERkZy
b21QREZEb2N1bWVudCk6CisKIDIwMTItMDQtMTcgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgaG9zdGluZyBt
b2RlIGlzIGtlcHQgdXAgdG8gZGF0ZSBpZiBpdCBjaGFuZ2VzIGJlZm9yZSB0aGUgcGx1Zy1pbiBp
cyBpbml0aWFsaXplZApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBv
cnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBv
cnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdElt
cG9ydHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUERGS2l0SW1wb3J0c19oCisjZGVmaW5lIFBERktpdEltcG9ydHNfaAorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworTlNTdHJpbmcgKnBkZktpdEZyYW1ld29ya1BhdGgoKTsKK0NsYXNzIGNsYXNz
RnJvbVBERktpdChOU1N0cmluZyAqY2xhc3NOYW1lKTsKK0NsYXNzIHBkZkFubm90YXRpb25MaW5r
Q2xhc3MoKTsKK0NsYXNzIHBkZkRvY3VtZW50Q2xhc3MoKTsKKworfQorCisjZW5kaWYgLy8gUERG
S2l0SW1wb3J0c19oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1BERktpdEltcG9ydHMuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsg
bmF0aXZlCgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5t
bQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0
cy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQREZLaXRJbXBvcnRzLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitOU1N0cmluZyAqcGRmS2l0RnJhbWV3b3JrUGF0aCgpCit7CisgICAgTlNTdHJpbmcg
KnN5c3RlbUxpYnJhcnlQYXRoID0gW05TU2VhcmNoUGF0aEZvckRpcmVjdG9yaWVzSW5Eb21haW5z
KE5TTGlicmFyeURpcmVjdG9yeSwgTlNTeXN0ZW1Eb21haW5NYXNrLCBOTykgb2JqZWN0QXRJbmRl
eDowXTsKKyAgICByZXR1cm4gW3N5c3RlbUxpYnJhcnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDpAIkZyYW1ld29ya3MvUXVhcnR6LmZyYW1ld29yay9GcmFtZXdvcmtzL1BERktp
dC5mcmFtZXdvcmsiXTsKK30KKworQ2xhc3MgY2xhc3NGcm9tUERGS2l0KE5TU3RyaW5nICpjbGFz
c05hbWUpCit7CisgICAgc3RhdGljIE5TQnVuZGxlICpwZGZLaXRCdW5kbGUgPSBbTlNCdW5kbGUg
YnVuZGxlV2l0aFBhdGg6cGRmS2l0RnJhbWV3b3JrUGF0aCgpXTsKKyAgICBbcGRmS2l0QnVuZGxl
IGxvYWRdOworICAgIHJldHVybiBbcGRmS2l0QnVuZGxlIGNsYXNzTmFtZWQ6Y2xhc3NOYW1lXTsK
K30KKworQ2xhc3MgcGRmQW5ub3RhdGlvbkxpbmtDbGFzcygpCit7CisgICAgc3RhdGljIENsYXNz
IHBkZkFubm90YXRpb25MaW5rQ2xhc3MgPSBjbGFzc0Zyb21QREZLaXQoQCJQREZBbm5vdGF0aW9u
TGluayIpOworICAgIEFTU0VSVChwZGZBbm5vdGF0aW9uTGlua0NsYXNzKTsKKyAgICByZXR1cm4g
cGRmQW5ub3RhdGlvbkxpbmtDbGFzczsKK30KKworQ2xhc3MgcGRmRG9jdW1lbnRDbGFzcygpCit7
CisgICAgc3RhdGljIENsYXNzIHBkZkRvY3VtZW50Q2xhc3MgPSBjbGFzc0Zyb21QREZLaXQoQCJQ
REZEb2N1bWVudCIpOworICAgIEFTU0VSVChwZGZEb2N1bWVudENsYXNzKTsKKyAgICByZXR1cm4g
cGRmRG9jdW1lbnRDbGFzczsKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLm1tCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
b2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLUHJpbnRpbmdWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCShyZXZpc2lvbiAxMTQ0MTQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiV0tQcmludGluZ1ZpZXcuaCIKIAogI2ltcG9y
dCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5oIgogI2ltcG9ydCAiUHJpbnRJ
bmZvLmgiCiAjaW1wb3J0ICJXZWJEYXRhLmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKQEAg
LTQxMSwzMyArNDEyLDYgQEAgLSAodW5zaWduZWQpX3BhZ2VGb3JSZWN0OihOU1JlY3QpcmVjdAog
ICAgIHJldHVybiAwOyAvLyBJbnZhbGlkIHBhZ2UgbnVtYmVyLgogfQogCi1zdGF0aWMgTlNTdHJp
bmcgKnBkZktpdEZyYW1ld29ya1BhdGgoKQotewotICAgIE5TU3RyaW5nICpzeXN0ZW1MaWJyYXJ5
UGF0aCA9IFtOU1NlYXJjaFBhdGhGb3JEaXJlY3Rvcmllc0luRG9tYWlucyhOU0xpYnJhcnlEaXJl
Y3RvcnksIE5TU3lzdGVtRG9tYWluTWFzaywgTk8pIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgcmV0
dXJuIFtzeXN0ZW1MaWJyYXJ5UGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJG
cmFtZXdvcmtzL1F1YXJ0ei5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9QREZLaXQuZnJhbWV3b3JrIl07
Ci19Ci0KLXN0YXRpYyBDbGFzcyBjbGFzc0Zyb21QREZLaXQoTlNTdHJpbmcgKmNsYXNzTmFtZSkK
LXsKLSAgICBzdGF0aWMgTlNCdW5kbGUgKnBkZktpdEJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVX
aXRoUGF0aDpwZGZLaXRGcmFtZXdvcmtQYXRoKCldOwotICAgIFtwZGZLaXRCdW5kbGUgbG9hZF07
Ci0gICAgcmV0dXJuIFtwZGZLaXRCdW5kbGUgY2xhc3NOYW1lZDpjbGFzc05hbWVdOwotfQotCi1z
dGF0aWMgQ2xhc3MgcGRmQW5ub3RhdGlvbkxpbmtDbGFzcygpCi17Ci0gICAgc3RhdGljIENsYXNz
IHBkZkFubm90YXRpb25MaW5rQ2xhc3MgPSBjbGFzc0Zyb21QREZLaXQoQCJQREZBbm5vdGF0aW9u
TGluayIpOwotICAgIEFTU0VSVChwZGZBbm5vdGF0aW9uTGlua0NsYXNzKTsKLSAgICByZXR1cm4g
cGRmQW5ub3RhdGlvbkxpbmtDbGFzczsKLX0KLQotc3RhdGljIENsYXNzIHBkZkRvY3VtZW50Q2xh
c3MoKQotewotICAgIHN0YXRpYyBDbGFzcyBwZGZEb2N1bWVudENsYXNzID0gY2xhc3NGcm9tUERG
S2l0KEAiUERGRG9jdW1lbnQiKTsKLSAgICBBU1NFUlQocGRmRG9jdW1lbnRDbGFzcyk7Ci0gICAg
cmV0dXJuIHBkZkRvY3VtZW50Q2xhc3M7Ci19Ci0KIC0gKHZvaWQpX2RyYXdQREZEb2N1bWVudDoo
UERGRG9jdW1lbnQgKilwZGZEb2N1bWVudCBwYWdlOih1bnNpZ25lZClwYWdlIGF0UG9pbnQ6KE5T
UG9pbnQpcG9pbnQKIHsKICAgICBpZiAoIXBkZkRvY3VtZW50KSB7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
MTQ0MTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTg5OCw5ICs4OTgsMTEgQEAKIAkJRTE3QkY5OTYxNEQwQTcz
RTAwQTVBMDY5IC8qIE5ldHNjYXBlU2FuZGJveEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3QkY5OTUxNEQwQTczRTAwQTVBMDY5IC8q
IE5ldHNjYXBlU2FuZGJveEZ1bmN0aW9ucy5oICovOyB9OwogCQlFMTdCRjk5ODE0RDBBQTgzMDBB
NUEwNjkgLyogTmV0c2NhcGVTYW5kYm94RnVuY3Rpb25zLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3QkY5OTcxNEQwQUE4MzAwQTVBMDY5IC8qIE5l
dHNjYXBlU2FuZGJveEZ1bmN0aW9ucy5tbSAqLzsgfTsKIAkJRTE4QzkyRjQxMkRCOUU3MTAwQ0Yy
QUVCIC8qIFByaW50SW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMThDOTJGMzEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCAqLzsg
fTsKKwkJRTE5NTgyRDMxNTNDQkZENzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTU4MkQyMTUzQ0JGRDcw
MEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLmggKi87IH07CisJCUUxOTU4MkQ2MTUzQ0MwNTQwMEI2
MDg3NSAvKiBQREZLaXRJbXBvcnRzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTE5NTgyRDQxNTNDQzA1MzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMu
bW0gKi87IH07CiAJCUUxOTY3RTM2MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0
LlBsdWdpblByb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxOTY3RTM1MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBs
dWdpblByb2Nlc3Muc2IgKi87IH07CiAJCUUxOTY3RTM4MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20u
YXBwbGUuV2ViUHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTE5NjdFMzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9j
ZXNzLnNiICovOyB9OwotCQlFMTk5ODc1RTE0MkMwNDU0MDBCQjJERTcgLyogQnVpbHRJblBERlZp
ZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5
OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3LmNwcCAqLzsgfTsKKwkJRTE5
OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3
IC8qIEJ1aWx0SW5QREZWaWV3Lm1tICovOyB9OwogCQlFMUEzMTczMjEzNENFQTZDMDA3QzlBNEYg
LyogQXR0cmlidXRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFBMzE3MzExMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcu
aCAqLzsgfTsKIAkJRTFBMzE3MzUxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUEzMTcz
NDEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSAqLzsgfTsKIAkJRTFBRUEy
MkYxNDY4N0JEQjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBRUEyMkQxNDY4N0JE
QjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5oICovOyB9OwpAQCAtMTk1
OCwxMCArMTk2MCwxMiBAQAogCQlFMTdCRjk5NzE0RDBBQTgzMDBBNUEwNjkgLyogTmV0c2NhcGVT
YW5kYm94RnVuY3Rpb25zLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gTmV0c2NhcGVTYW5kYm94RnVuY3Rpb25zLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMTdCRjk5OTE0RDBDQkYxMDBBNUEwNjkgLyogY29tLmFwcGxlLldlYktpdC5QbHVnaW5Q
cm9jZXNzLnNiLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5XZWJLaXQuUGx1
Z2luUHJvY2Vzcy5zYi5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4QzkyRjMx
MkRCOUU3MTAwQ0YyQUVCIC8qIFByaW50SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQcmludEluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFMTk1ODJEMjE1M0NCRkQ3MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQREZLaXRJbXBvcnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUxOTU4MkQ0MTUzQ0MwNTMwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUERGS2l0SW1wb3J0cy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE5NjdFMzUxNTBBQjVENTAwQzczMTY5
IC8qIGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luUHJvY2Vzcy5zYiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2I7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUxOTY3RTM3MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViUHJv
Y2Vzcy5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE5OTg3NUExNDJCRjlCODAwQkIyREU3IC8q
IEJ1aWx0SW5QREZWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJ1aWx0
SW5QREZWaWV3Lmg7IHBhdGggPSBQREYvQnVpbHRJblBERlZpZXcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJ1aWx0SW5QREZWaWV3
LmNwcDsgcGF0aCA9IFBERi9CdWlsdEluUERGVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEJ1aWx0SW5QREZWaWV3Lm1t
OyBwYXRoID0gUERGL0J1aWx0SW5QREZWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUEzMTczMTEzNENFQTZDMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdHRyaWJ1dGVkU3RyaW5nLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQTMxNzM0MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1
dGVkU3RyaW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXR0
cmlidXRlZFN0cmluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBRUEyMkQx
NDY4N0JEQjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxNzIsNiArMzE3Niw4IEBACiAJCQkJQzAy
QkZGMUQxMjUxNTAyRTAwOUNDQkVBIC8qIE5hdGl2ZVdlYktleWJvYXJkRXZlbnRNYWMubW0gKi8s
CiAJCQkJMzFFQTI1RDAxMzRGNzhCMjAwNUIxNDUyIC8qIE5hdGl2ZVdlYk1vdXNlRXZlbnRNYWMu
bW0gKi8sCiAJCQkJREY1OEM2MzUxMzcxQUNBMDAwRjlBMzdDIC8qIE5hdGl2ZVdlYldoZWVsRXZl
bnRNYWMubW0gKi8sCisJCQkJRTE5NTgyRDIxNTNDQkZENzAwQjYwODc1IC8qIFBERktpdEltcG9y
dHMuaCAqLywKKwkJCQlFMTk1ODJENDE1M0NDMDUzMDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5t
bSAqLywKIAkJCQlDNTc0QTU3RjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmgg
Ki8sCiAJCQkJQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSAq
LywKIAkJCQlCQ0Y1MDVFNTEyNDMwNDdCMDA1OTU1QUUgLyogUGxhdGZvcm1DZXJ0aWZpY2F0ZUlu
Zm8uaCAqLywKQEAgLTM3MDcsNyArMzcxMyw3IEBACiAJCUUxOTk4NzVCMTQyQkY5Q0YwMEJCMkRF
NyAvKiBQREYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJ
CUUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5jcHAgKi8sCisJCQkJ
RTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1tICovLAogCQkJCUUx
OTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5oICovLAogCQkJKTsKIAkJ
CW5hbWUgPSBQREY7CkBAIC00MTg1LDYgKzQxOTEsNyBAQAogCQkJCTM3OTQ4NDA0MTUwQzM1MDYw
MEU1MkNFOSAvKiBXZWJSZW5kZXJMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5NDg0MDkx
NTBDNEI5NzAwRTUyQ0U5IC8qIFdLUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNF
REExMkUzMTUyQ0QxQjMwMEQ5RTA4RCAvKiBXZWJBbHRlcm5hdGl2ZVRleHRDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUUxOTU4MkQzMTUzQ0JGRDcwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRz
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ1MTksNyArNDUyNiw3IEBACiAJCQkJMUE2NDI1NjkxMkRF
NDJFQzAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY0
MjkyRDEyREU1Rjk4MDBDQUFFMkMgLyogQmFja2luZ1N0b3JlTWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFDNDFBQzgxMjYzQzg4MzAwMDU0RTk0IC8qIEJpbmFyeVNlbWFwaG9yZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlFMTk5ODc1RTE0MkMwNDU0MDBCQjJERTcgLyogQnVpbHRJblBERlZp
ZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1
aWx0SW5QREZWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBMkU1MUUxMkU0QzA1RTAwQkM0
OTY2IC8qIENHVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5NTcwMTI4NDg1
NjQwMDFFQjk2MiAvKiBDaGlsZFByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2RjlG
QjcxMUUxNDA4NTAwREIxMzcxIC8qIENvbW1hbmRMaW5lTWFjLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNDkyOSw2ICs0OTM2LDcgQEAKIAkJCQkzNzk0ODQwMzE1MEMzNTA2MDBFNTJDRTkgLyogV2Vi
UmVuZGVyTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc5NDg0MDgxNTBDNEI5NzAwRTUy
Q0U5IC8qIFdLUmVuZGVyTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0VEQTEyRTIxNTJD
RDFBRTAwRDlFMDhEIC8qIFdlYkFsdGVybmF0aXZlVGV4dENsaWVudC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlFMTk1ODJENjE1M0NDMDU0MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW4uaAkocmV2aXNpb24gMTE0NDE0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBACiAKICNpZiBQTEFU
Rk9STShNQUMpCiAjaW5jbHVkZSAiTGF5ZXJIb3N0aW5nQ29udGV4dC5oIgorCitPQkpDX0NMQVNT
IFBERkRvY3VtZW50OwogI2VuZGlmCiAKIHN0cnVjdCBOUE9iamVjdDsKQEAgLTIyMyw4ICsyMjUs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxT
Y3JvbGxiYXIoKSA9IDA7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2Fs
U2Nyb2xsYmFyKCkgPSAwOwogCi0jaWYgVVNFKENHKQotICAgIHZpcnR1YWwgUmV0YWluUHRyPENH
UERGRG9jdW1lbnRSZWY+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiAw
OyB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgUmV0YWluUHRyPFBERkRvY3VtZW50
PiBwZGZEb2N1bWVudEZvclByaW50aW5nKCkgY29uc3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAK
IHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuaAkocmV2aXNpb24gMTE0NDE0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTAgKzY2LDcg
QEAgcHVibGljOgogICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsKICAgICBib29sIHNl
bmRDb21wbGV4VGV4dElucHV0KHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7CiAgICAgdm9pZCBzZXRMYXllckhvc3RpbmdN
b2RlKExheWVySG9zdGluZ01vZGUpOwotI2VuZGlmCi0KLSNpZiBVU0UoQ0cpCi0gICAgUmV0YWlu
UHRyPENHUERGRG9jdW1lbnRSZWY+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3BsdWdpbi0+cGRmRG9jdW1lbnRGb3JQcmludGluZygpOyB9CisgICAgUmV0YWluUHRy
PFBERkRvY3VtZW50PiBwZGZEb2N1bWVudEZvclByaW50aW5nKCkgY29uc3QgeyByZXR1cm4gbV9w
bHVnaW4tPnBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKTsgfQogI2VuZGlmCiAKICAgICAvLyBGSVhN
RTogUmVtb3ZlIHRoaXM7IG5vYm9keSBzaG91bGQgaGF2ZSB0byBrbm93IGFib3V0IHRoZSBwbHVn
LWluIHZpZXcncyByZW5kZXJlciBleGNlcHQgdGhlIHBsdWctaW4gdmlldyBpdHNlbGYuCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1
aWx0SW5QREZWaWV3LmNwcAkocmV2aXNpb24gMTE0NDE0KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsODU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQnVpbHRJblBERlZpZXcuaCIKLQotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNp
bmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJXZWJFdmVudC5oIgotI2luY2x1
ZGUgIldlYkV2ZW50Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29u
dGV4dFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU1N0cmluZ1JlZkNGLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2Uu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnRMb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVFRQ
SGVhZGVyTWFwLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJCb3hNb2RlbE9iamVjdC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvU2Nyb2xsQW5pbWF0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotc3Rh
dGljIHZvaWQgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKENHUERGRGljdGlv
bmFyeVJlZiBzdWJ0cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiB2YWx1ZXMpCi17Ci0gICAg
Q0dQREZBcnJheVJlZiBuYW1lczsKLSAgICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0QXJyYXkoc3Vi
dHJlZSwgIk5hbWVzIiwgJm5hbWVzKSkgewotICAgICAgICBzaXplX3QgbmFtZUNvdW50ID0gQ0dQ
REZBcnJheUdldENvdW50KG5hbWVzKSAvIDI7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbmFtZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIENHUERGT2JqZWN0UmVmIG9iamVjdDsK
LSAgICAgICAgICAgIENHUERGQXJyYXlHZXRPYmplY3QobmFtZXMsIDIgKiBpICsgMSwgJm9iamVj
dCk7Ci0gICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKG9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIENHUERGQXJyYXlSZWYga2lkczsKLSAgICBpZiAoIUNH
UERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUsICJLaWRzIiwgJmtpZHMpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBzaXplX3Qga2lkQ291bnQgPSBDR1BERkFycmF5R2V0Q291bnQoa2lkcyk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBraWRDb3VudDsgKytpKSB7Ci0gICAgICAgIENH
UERGRGljdGlvbmFyeVJlZiBraWQ7Ci0gICAgICAgIGlmICghQ0dQREZBcnJheUdldERpY3Rpb25h
cnkoa2lkcywgaSwgJmtpZCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXBwZW5k
VmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKGtpZCwgdmFsdWVzKTsKLSAgICB9Ci19Ci0K
LXN0YXRpYyB2b2lkIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoQ0dQREZEaWN0aW9uYXJ5UmVm
IHRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIGFsbFZhbHVlcykKLXsKLSAgICBhcHBlbmRW
YWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IodHJlZSwgYWxsVmFsdWVzKTsKLX0KLQotc3Rh
dGljIHZvaWQgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoQ0dQREZEb2N1bWVudFJlZiBwZGZE
b2N1bWVudCwgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4gPiYgc2NyaXB0cykKLXsKLSAg
ICBpZiAoIXBkZkRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR1BERkRpY3Rpb25h
cnlSZWYgcGRmQ2F0YWxvZyA9IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRvY3VtZW50KTsK
LSAgICBpZiAoIXBkZkNhdGFsb2cpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdldCB0aGUg
ZGljdGlvbmFyeSBvZiBhbGwgZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KLSAgICBDR1BERkRp
Y3Rpb25hcnlSZWYgbmFtZXNEaWN0aW9uYXJ5OwotICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0
RGljdGlvbmFyeShwZGZDYXRhbG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gR2V0IHRoZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlwdCIg
bmFtZSB0cmVlLgotICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7Ci0g
ICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwgIkph
dmFTY3JpcHQiLCAmamF2YVNjcmlwdE5hbWVUcmVlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gVGhlIG5hbWVzIGFyZSBhcmJpdHJhcnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhl
IHZhbHVlcy4KLSAgICBWZWN0b3I8Q0dQREZPYmplY3RSZWY+IG9iamVjdHM7Ci0gICAgZ2V0QWxs
VmFsdWVzSW5QREZOYW1lVHJlZShqYXZhU2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOwotICAgIHNp
emVfdCBvYmplY3RDb3VudCA9IG9iamVjdHMuc2l6ZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7Ci0gICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBq
YXZhU2NyaXB0QWN0aW9uOwotICAgICAgICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUocmVpbnRl
cnByZXRfY2FzdDxDR1BERk9iamVjdFJlZj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVjdFR5cGVE
aWN0aW9uYXJ5LCAmamF2YVNjcmlwdEFjdGlvbikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAvLyBBIEphdmFTY3JpcHQgYWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24gdHlwZSBv
ZiAiSmF2YVNjcmlwdCIuCi0gICAgICAgIGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7Ci0gICAgICAg
IGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIsICZhY3Rp
b25UeXBlKSB8fCBzdHJjbXAoYWN0aW9uVHlwZSwgIkphdmFTY3JpcHQiKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7Ci0gICAgICAgIENG
SW5kZXggbGVuZ3RoOwotICAgICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07Ci0gICAgICAgIENH
UERGU3RyaW5nUmVmIHN0cmluZzsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsK
LSAgICAgICAgaWYgKENHUERGRGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9uLCAi
SlMiLCAmc3RyZWFtKSkgewotICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsKLSAg
ICAgICAgICAgIGRhdGEuYWRvcHRDRihDR1BERlN0cmVhbUNvcHlEYXRhKHN0cmVhbSwgJmZvcm1h
dCkpOwotICAgICAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOwotICAgICAg
ICAgICAgbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOwotICAgICAgICB9IGVs
c2UgaWYgKENHUERGRGljdGlvbmFyeUdldFN0cmluZyhqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAm
c3RyaW5nKSkgewotICAgICAgICAgICAgYnl0ZXMgPSBDR1BERlN0cmluZ0dldEJ5dGVQdHIoc3Ry
aW5nKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IENHUERGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFieXRlcykKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIENGU3RyaW5nRW5jb2RpbmcgZW5jb2RpbmcgPSAobGVuZ3RoID4gMSAmJiBieXRl
c1swXSA9PSAweEZFICYmIGJ5dGVzWzFdID09IDB4RkYpID8ga0NGU3RyaW5nRW5jb2RpbmdVbmlj
b2RlIDoga0NGU3RyaW5nRW5jb2RpbmdVVEY4OwotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHNjcmlwdChBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBieXRlcywgbGVuZ3RoLCBlbmNvZGluZywgdHJ1ZSkpOwotICAgICAgICBpZiAoIXNj
cmlwdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHNjcmlwdHMuYXBwZW5kKHNj
cmlwdCk7Ci0gICAgfQotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY29uc3QgdWludDY0X3Qg
cGRmRG9jdW1lbnRSZXF1ZXN0SUQgPSAxOyAvLyBQbHVnaW5Db250cm9sbGVyIHN1cHBvcnRzIGxv
YWRpbmcgbXVsdGlwbGUgc3RyZWFtcywgYnV0IHdlIG9ubHkgbmVlZCBvbmUgZm9yIFBERi4KLQot
Y29uc3QgaW50IGd1dHRlckhlaWdodCA9IDEwOwotY29uc3QgaW50IHNoYWRvd09mZnNldFggPSAw
OwotY29uc3QgaW50IHNoYWRvd09mZnNldFkgPSAtMjsKLWNvbnN0IGludCBzaGFkb3dTaXplID0g
NzsKLQotUGFzc1JlZlB0cjxCdWlsdEluUERGVmlldz4gQnVpbHRJblBERlZpZXc6OmNyZWF0ZShX
ZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWlsdEluUERGVmll
dyhmcmFtZSkpOwotfQotCi1CdWlsdEluUERGVmlldzo6QnVpbHRJblBERlZpZXcoV2ViRnJhbWUq
IGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKLXsKLX0KLQotQnVpbHRJblBERlZpZXc6On5C
dWlsdEluUERGVmlldygpCi17Ci19Ci0KLVBsdWdpbkluZm8gQnVpbHRJblBERlZpZXc6OnBsdWdp
bkluZm8oKQotewotICAgIFBsdWdpbkluZm8gaW5mbzsKLSAgICBpbmZvLm5hbWUgPSBidWlsdElu
UERGUGx1Z2luTmFtZSgpOwotCi0gICAgTWltZUNsYXNzSW5mbyBtaW1lQ2xhc3NJbmZvOwotICAg
IG1pbWVDbGFzc0luZm8udHlwZSA9ImFwcGxpY2F0aW9uL3BkZiI7Ci0gICAgbWltZUNsYXNzSW5m
by5kZXNjID0gcGRmRG9jdW1lbnRUeXBlRGVzY3JpcHRpb24oKTsKLSAgICBtaW1lQ2xhc3NJbmZv
LmV4dGVuc2lvbnMuYXBwZW5kKCJwZGYiKTsKLQotICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWVD
bGFzc0luZm8pOwotICAgIHJldHVybiBpbmZvOwotfQotCi1QbHVnaW5WaWV3KiBCdWlsdEluUERG
Vmlldzo6cGx1Z2luVmlldygpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcq
Pihjb250cm9sbGVyKCkpOwotfQotCi1jb25zdCBQbHVnaW5WaWV3KiBCdWlsdEluUERGVmlldzo6
cGx1Z2luVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFBsdWdp
blZpZXcqPihjb250cm9sbGVyKCkpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp1cGRhdGVT
Y3JvbGxiYXJzKCkKLXsKLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAg
IGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKQot
ICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICB9
IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS53aWR0aCgpIDwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgo
KSkKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6
b250YWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAg
ICAgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQo
KSkKLSAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotICAg
IH0gZWxzZSBpZiAobV9wbHVnaW5TaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVy
dGljYWxTY3JvbGxiYXIpOwotCi0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAo
bV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOwotICAg
IGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgIW1f
dmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxTY3Jv
bGxiYXItPndpZHRoKCkgOiAwOwotCi0gICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94ZXMuaXNF
bXB0eSgpID8gMCA6IG1fcGFnZUJveGVzWzBdLmhlaWdodCgpOwotCi0gICAgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbGJhcikgewotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBz
KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLndpZHRoKCkgLSB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKLSAgICAg
ICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3KCkt
PnkoKSArIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCksIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdo
dCgpKTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBzY3Jv
bGxiYXJSZWN0LmNvbnRyYWN0KG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIDApOwotICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsK
LSAgICB9Ci0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdl
U3RlcCk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVn
aW5TaXplLmhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwgbV9wZGZEb2N1bWVu
dFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QoSW50UmVjdChw
bHVnaW5WaWV3KCktPngoKSArIG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT55KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCksIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBpZiAobV9ob3Jpem9udGFs
U2Nyb2xsYmFyKQotICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdCgwLCBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
c2V0RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOwotICAgIH0KLSAgICAKLSAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7Ci0gICAgaWYgKCFmcmFt
ZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyIHx8
IG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgZnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxl
QXJlYSh0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJs
ZUFyZWEodGhpcyk7Ci19Ci0KLVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBCdWlsdEluUERGVmlldzo6
Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAg
IFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xs
YmFyKHRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKLSAgICBpZiAob3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcih3aWRnZXQuZ2V0KCkpOwotICAgIGVsc2UgCi0gICAgICAgIGRpZEFkZFZlcnRpY2Fs
U2Nyb2xsYmFyKHdpZGdldC5nZXQoKSk7Ci0gICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3
KCktPmFkZENoaWxkKHdpZGdldC5nZXQoKSk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7
Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJh
ciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3Jv
bGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikK
LSAgICAgICAgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIu
Z2V0KCkpOwotCi0gICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgc2Nyb2xs
YmFyLT5kaXNjb25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKCk7Ci0gICAgc2Nyb2xsYmFyID0gMDsK
LX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6YWRkQXJjaGl2ZVJlc291cmNlKCkKLXsKLSAgICAv
LyBGSVhNRTogSXQncyBhIGhhY2sgdG8gZm9yY2UgYWRkIGEgcmVzb3VyY2UgdG8gRG9jdW1lbnRM
b2FkZXIuIFBERiBkb2N1bWVudHMgc2hvdWxkIGp1c3QgYmUgZmV0Y2hlZCBhcyBDYWNoZWRSZXNv
dXJjZXMuCi0KLSAgICAvLyBBZGQganVzdCBlbm91Z2ggZGF0YSBmb3IgY29udGV4dCBtZW51IGhh
bmRsaW5nIGFuZCB3ZWIgYXJjaGl2ZXMgdG8gd29yay4KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHN5
bnRoZXNpemVkUmVzcG9uc2U7Ci0gICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRTdWdnZXN0ZWRG
aWxlbmFtZShtX3N1Z2dlc3RlZEZpbGVuYW1lKTsKLSAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNl
dFVSTChtX3NvdXJjZVVSTCk7IC8vIE5lZWRzIHRvIG1hdGNoIHRoZSBIaXRUZXN0UmVzdWx0Ojph
YnNvbHV0ZVBERlVSTC4KLSAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldE1pbWVUeXBlKCJhcHBs
aWNhdGlvbi9wZGYiKTsKLQotICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlID0g
QXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKG1fZGF0YUJ1
ZmZlci5nZXQoKSksIG1fc291cmNlVVJMLCAiYXBwbGljYXRpb24vcGRmIiwgU3RyaW5nKCksIFN0
cmluZygpLCBzeW50aGVzaXplZFJlc3BvbnNlKTsKLSAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCkt
PmRvY3VtZW50KCktPmxvYWRlcigpLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFz
ZSgpKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6cGRmRG9jdW1lbnREaWRMb2FkKCkKLXsK
LSAgICBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKLQotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRl
clJlZj4gcGRmRGF0YVByb3ZpZGVyKEFkb3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENG
RGF0YShtX2RhdGFCdWZmZXIuZ2V0KCkpKTsKLSAgICBtX3BkZkRvY3VtZW50LmFkb3B0Q0YoQ0dQ
REZEb2N1bWVudENyZWF0ZVdpdGhQcm92aWRlcihwZGZEYXRhUHJvdmlkZXIuZ2V0KCkpKTsKLQot
ICAgIGNhbGN1bGF0ZVNpemVzKCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygpOwotCi0gICAgY29u
dHJvbGxlcigpLT5pbnZhbGlkYXRlKEludFJlY3QoMCwgMCwgbV9wbHVnaW5TaXplLndpZHRoKCks
IG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gPiBzY3JpcHRzOwotICAgIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KG1fcGRmRG9j
dW1lbnQuZ2V0KCksIHNjcmlwdHMpOwotCi0gICAgc2l6ZV90IHNjcmlwdENvdW50ID0gc2NyaXB0
cy5zaXplKCk7Ci0gICAgaWYgKCFzY3JpcHRDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZSgwKTsKLSAgICBK
U09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzY3JpcHRDb3VudDsgKytpKSB7Ci0gICAgICAgIEpTU3RyaW5nUmVmIHNj
cmlwdCA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHNjcmlwdHNbaV0uZ2V0KCkpOwotICAg
ICAgICBKU0V2YWx1YXRlU2NyaXB0KGN0eCwgc2NyaXB0LCBqc1BERkRvYywgMCwgMCwgMCk7Ci0g
ICAgICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHQpOwotICAgIH0KLQotICAgIEpTR2xvYmFsQ29u
dGV4dFJlbGVhc2UoY3R4KTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6Y2FsY3VsYXRlU2l6
ZXMoKQotewotICAgIHNpemVfdCBwYWdlQ291bnQgPSBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQ
YWdlcyhtX3BkZkRvY3VtZW50LmdldCgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBh
Z2VDb3VudDsgKytpKSB7Ci0gICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1
bWVudEdldFBhZ2UobV9wZGZEb2N1bWVudC5nZXQoKSwgaSArIDEpOwotICAgICAgICBBU1NFUlQo
cGRmUGFnZSk7Ci0KLSAgICAgICAgQ0dSZWN0IGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRm
UGFnZSwga0NHUERGQ3JvcEJveCk7Ci0gICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KGJveCkpCi0g
ICAgICAgICAgICBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERk1lZGlh
Qm94KTsKLSAgICAgICAgbV9wYWdlQm94ZXMuYXBwZW5kKEludFJlY3QoYm94KSk7Ci0gICAgICAg
IG1fcGRmRG9jdW1lbnRTaXplLnNldFdpZHRoKG1heChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgp
LCBzdGF0aWNfY2FzdDxpbnQ+KGJveC5zaXplLndpZHRoKSkpOwotICAgICAgICBtX3BkZkRvY3Vt
ZW50U2l6ZS5leHBhbmQoMCwgYm94LnNpemUuaGVpZ2h0KTsKLSAgICB9Ci0gICAgbV9wZGZEb2N1
bWVudFNpemUuZXhwYW5kKDAsIGd1dHRlckhlaWdodCAqIChtX3BhZ2VCb3hlcy5zaXplKCkgLSAx
KSk7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKLXsKLSAgICAvLyBMb2FkIHRoZSBzcmMgVVJMIGlmIG5lZWRlZC4KLSAg
ICBtX3NvdXJjZVVSTCA9IHBhcmFtZXRlcnMudXJsOwotICAgIGlmICghcGFyYW1ldGVycy5zaG91
bGRVc2VNYW51YWxMb2FkZXIgJiYgIXBhcmFtZXRlcnMudXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
Y29udHJvbGxlcigpLT5sb2FkVVJMKHBkZkRvY3VtZW50UmVxdWVzdElELCAiR0VUIiwgcGFyYW1l
dGVycy51cmwuc3RyaW5nKCksIFN0cmluZygpLCBIVFRQSGVhZGVyTWFwKCksIFZlY3Rvcjx1aW50
OF90PigpLCBmYWxzZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBCdWlsdEluUERG
Vmlldzo6ZGVzdHJveSgpCi17Ci0gICAgaWYgKG1fZnJhbWUpIHsKLSAgICAgICAgaWYgKEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKSkKLSAgICAgICAg
ICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgfQotCi0gICAg
ZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBkZXN0cm95U2Nyb2xs
YmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVj
dCkKLXsKLSAgICBjb250ZW50QXJlYVdpbGxQYWludCgpOwotCi0gICAgcGFpbnRCYWNrZ3JvdW5k
KGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLQotICAgIGlmICghbV9wZGZEb2N1bWVudCkg
Ly8gRklYTUU6IERyYXcgbG9hZGluZyBwcm9ncmVzcy4KLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cGFpbnRDb250ZW50KGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLSAgICBwYWludENvbnRy
b2xzKGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmll
dzo6cGFpbnRCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Rmls
bENvbG9yKENvbG9yOjpncmF5LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBncmFwaGljc0Nv
bnRleHQtPmZpbGxSZWN0KGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnBh
aW50Q29udGVudChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KQotewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cigqZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGdyYXBoaWNz
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBncmFwaGljc0NvbnRleHQtPnNldElt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbkhpZ2gpOwotICAgIGdyYXBoaWNz
Q29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+
c2V0U2hvdWxkU21vb3RoRm9udHModHJ1ZSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRGaWxs
Q29sb3IoQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLQotICAgIGdyYXBoaWNz
Q29udGV4dC0+Y2xpcChkaXJ0eVJlY3QpOwotICAgIEludFJlY3QgY29udGVudFJlY3QoZGlydHlS
ZWN0KTsKLSAgICBjb250ZW50UmVjdC5tb3ZlQnkoSW50UG9pbnQobV9zY3JvbGxPZmZzZXQpKTsK
LSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9zY3JvbGxPZmZzZXQud2lkdGgoKSwg
LW1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKLQotICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRl
eHQsIDEsIC0xKTsKLQotICAgIGludCBwYWdlVG9wID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fcGFnZUJveGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEludFJlY3QgcGFnZUJv
eCA9IG1fcGFnZUJveGVzW2ldOwotICAgICAgICBmbG9hdCBleHRyYU9mZnNldEZvckNlbnRlcmlu
Z1ggPSBtYXgocm91bmRmKChtX3BsdWdpblNpemUud2lkdGgoKSAtIHBhZ2VCb3gud2lkdGgoKSkg
LyAyLjBmKSwgMC4wZik7Ci0gICAgICAgIGZsb2F0IGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWSA9
IChtX3BhZ2VCb3hlcy5zaXplKCkgPT0gMSkgPyBtYXgocm91bmRmKChtX3BsdWdpblNpemUuaGVp
Z2h0KCkgLSBwYWdlQm94LmhlaWdodCgpICsgc2hhZG93T2Zmc2V0WSkgLyAyLjBmKSwgMC4wZikg
OiAwOwotCi0gICAgICAgIGlmIChwYWdlVG9wID4gY29udGVudFJlY3QubWF4WSgpKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChwYWdlVG9wICsgcGFnZUJveC5oZWlnaHQoKSArIGV4
dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWSArIGd1dHRlckhlaWdodCA+PSBjb250ZW50UmVjdC55KCkp
IHsKLSAgICAgICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVudEdldFBh
Z2UobV9wZGZEb2N1bWVudC5nZXQoKSwgaSArIDEpOwotCi0gICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKGV4
dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWCAtIHBhZ2VCb3gueCgpLCAtZXh0cmFPZmZzZXRGb3JDZW50
ZXJpbmdZIC0gcGFnZUJveC55KCkgLSBwYWdlQm94LmhlaWdodCgpKTsKLQotICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRv
d09mZnNldFkpLCBzaGFkb3dTaXplLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChwYWdlQm94KTsKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xlYXJTaGFkb3coKTsKLQotICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5jbGlwKHBhZ2VCb3gpOwotCi0gICAgICAgICAgICBDR0NvbnRleHREcmF3
UERGUGFnZShjb250ZXh0LCBwZGZQYWdlKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
cmVzdG9yZSgpOwotICAgICAgICB9Ci0gICAgICAgIHBhZ2VUb3AgKz0gcGFnZUJveC5oZWlnaHQo
KSArIGd1dHRlckhlaWdodDsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQs
IDAsIC1wYWdlQm94LmhlaWdodCgpIC0gZ3V0dGVySGVpZ2h0KTsKLSAgICB9Ci19Ci0KLXZvaWQg
QnVpbHRJblBERlZpZXc6OnBhaW50Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICB7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAg
ICAgSW50UmVjdCBzY3JvbGxiYXJEaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgICAgIHNjcm9s
bGJhckRpcnR5UmVjdC5tb3ZlQnkocGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS5sb2NhdGlvbigp
KTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLXBsdWdpblZpZXcoKS0+ZnJh
bWVSZWN0KCkueCgpLCAtcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS55KCkpOwotCi0gICAgICAg
IGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXItPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsKLQotICAg
ICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsKLSAgICB9
Ci0KLSAgICBJbnRSZWN0IGRpcnR5Q29ybmVyUmVjdCA9IGludGVyc2VjdGlvbihzY3JvbGxDb3Ju
ZXJSZWN0KCksIGRpcnR5UmVjdCk7Ci0gICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnBhaW50
U2Nyb2xsQ29ybmVyKDAsIGdyYXBoaWNzQ29udGV4dCwgZGlydHlDb3JuZXJSZWN0KTsKLX0KLQot
dm9pZCBCdWlsdEluUERGVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0KQotewotICAgIEFTU0VSVChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5n
Q29udHJvbFRpbnRzKCkpOwotCi0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgaWYgKG1fdmVydGlj
YWxTY3JvbGxiYXIpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsK
LSAgICBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3QoKSk7Ci19Ci0KLVBh
c3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBCdWlsdEluUERGVmlldzo6c25hcHNob3QoKQotewot
ICAgIHJldHVybiAwOwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotUGxhdGZvcm1MYXllciogQnVp
bHRJblBERlZpZXc6OnBsdWdpbkxheWVyKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgot
Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmlzVHJhbnNwYXJlbnQoKQotewotICAgIC8vIFRoaXMg
c2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy4KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZp
ZXc6Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdU
cmFuc2Zvcm0pCi17Ci0gICAgaWYgKG1fcGx1Z2luU2l6ZSA9PSBwbHVnaW5TaXplKSB7Ci0gICAg
ICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Bs
dWdpblNpemUgPSBwbHVnaW5TaXplOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLX0KLQotdm9p
ZCBCdWlsdEluUERGVmlldzo6dmlzaWJpbGl0eURpZENoYW5nZSgpCi17Ci19Ci0KLXZvaWQgQnVp
bHRJblBERlZpZXc6OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCkKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6ZnJhbWVEaWRGYWls
KHVpbnQ2NF90LCBib29sKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lk
IEJ1aWx0SW5QREZWaWV3OjpkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdU
Rjo6U3RyaW5nJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBCdWls
dEluUERGVmlldzo6c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBj
b25zdCBLVVJMJiwgdWludDMyX3QsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQotewotICAgIEFTU0VSVF9VTlVT
RUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIG1f
c3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKLX0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVh
bURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50
IGxlbmd0aCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZE
b2N1bWVudFJlcXVlc3RJRCk7Ci0KLSAgICBpZiAoIW1fZGF0YUJ1ZmZlcikKLSAgICAgICAgbV9k
YXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7Ci0KLSAgICBDRkRh
dGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VUludDgqPihieXRlcyksIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVh
bURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQpCi17Ci0gICAgQVNTRVJUX1VOVVNF
RChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOwotCi0gICAgcGRm
RG9jdW1lbnREaWRMb2FkKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVhbURpZEZh
aWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQotewotICAgIEFTU0VSVF9V
TlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAg
IG1fZGF0YUJ1ZmZlci5jbGVhcigpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxT
dHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90
IHN0cmVhbUxlbmd0aCwgIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlbmFtZSkKLXsKLSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7
Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghbV9kYXRhQnVmZmVyKQot
ICAgICAgICBtX2RhdGFCdWZmZXIuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsK
LQotICAgIENGRGF0YUFwcGVuZEJ5dGVzKG1fZGF0YUJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVSW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBCdWlsdEluUERG
Vmlldzo6bWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpCi17Ci0gICAgcGRmRG9jdW1lbnRE
aWRMb2FkKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6Om1hbnVhbFN0cmVhbURpZEZhaWwo
Ym9vbCkKLXsKLSAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKLX0KLQotYm9vbCBCdWlsdEluUERG
Vmlldzo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKLXsKLSAg
ICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToK
LSAgICAgICAgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKLSAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCBhbHNvIG5vdGlmeSBzY3JvbGxiYXIgdG8gc2hvdyBob3ZlciBlZmZlY3QuIFNob3VsZCBh
bHNvIHNlbmQgbW91c2VFeGl0ZWQgdG8gaGlkZSBpdC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBXZWJFdmVudDo6TW91c2VEb3duOiB7Ci0gICAgICAgIC8vIFJldHVybmluZyBmYWxzZSBhcyB3
aWxsIG1ha2UgRXZlbnRIYW5kbGVyIHVuZm9jdXMgdGhlIHBsdWctaW4sIHdoaWNoIGlzIGFwcHJv
cHJpYXRlIHdoZW4gY2xpY2tpbmcgc2Nyb2xsYmFycy4KLSAgICAgICAgLy8gSWRlYWxseSwgd2Ug
d291bGRuJ3QgY2hhbmdlIGZvY3VzIGF0IGFsbCwgYnV0IFBsdWdpblZpZXcgYWxyZWFkeSBkaWQg
dGhhdCBmb3IgdXMuCi0gICAgICAgIC8vIFdoZW4gc3VwcG9ydCBmb3IgUERGIGZvcm1zIGlzIGFk
ZGVkLCB3ZSdsbCBuZWVkIHRvIGFjdHVhbGx5IGZvY3VzIHRoZSBwbHVnLWluIHdoZW4gY2xpY2tp
bmcgaW4gYSBmb3JtLgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXZWJFdmVudDo6
TW91c2VVcDogewotICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1FdmVudCA9IHBs
YXRmb3JtKGV2ZW50KTsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKLSAg
ICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZlbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
V2ViV2hlZWxFdmVudCYgZXZlbnQpCi17Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50IHBsYXRmb3Jt
RXZlbnQgPSBwbGF0Zm9ybShldmVudCk7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5k
bGVXaGVlbEV2ZW50KHBsYXRmb3JtRXZlbnQpOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3Ojpo
YW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCi17Ci0gICAgbW91c2VF
bnRlcmVkQ29udGVudEFyZWEoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQnVpbHRJ
blBERlZpZXc6OmhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKLXsK
LSAgICBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmKQotewotICAgIC8vIFVzZSBkZWZhdWx0IFdlYktpdCBjb250ZXh0IG1lbnUuCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVLZXlib2FyZEV2
ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBCdWlsdEluUERGVmlldzo6c2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykKLXsKLX0KLQotTlBP
YmplY3QqIEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKQotewotICAg
IHJldHVybiAwOwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotCi12b2lkIEJ1aWx0SW5QREZWaWV3
Ojp3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6
d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93
RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJh
bWVJbldpbmRvd0Nvb3JkaW5hdGVzKQotewotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp3aW5k
b3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKQotewotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpj
b250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkKLXsKLX0KLQotdWludDY0X3QgQnVpbHRJ
blBERlZpZXc6OnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6c2VuZENvbXBsZXhUZXh0SW5w
dXQoY29uc3QgU3RyaW5nJikKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6c2V0TGF5ZXJI
b3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKQotewotfQotCi0jZW5kaWYKLQotdm9pZCBCdWls
dEluUERGVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpCi17Ci19Ci0KLWJv
b2wgQnVpbHRJblBERlZpZXc6OmdldEZvcm1WYWx1ZShTdHJpbmcmKQotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlU2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewotICAgIHJl
dHVybiBzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci19Ci0KLVNjcm9sbGJhciogQnVp
bHRJblBERlZpZXc6Omhvcml6b250YWxTY3JvbGxiYXIoKQotewotICAgIHJldHVybiBtX2hvcml6
b250YWxTY3JvbGxiYXIuZ2V0KCk7Ci19Ci0KLVNjcm9sbGJhciogQnVpbHRJblBERlZpZXc6OnZl
cnRpY2FsU2Nyb2xsYmFyKCkKLXsKLSAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQo
KTsKLX0KLQotSW50UmVjdCBCdWlsdEluUERGVmlldzo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgIW1fdmVydGljYWxTY3JvbGxi
YXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fdmVydGljYWxT
Y3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKTsKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIEludFJlY3QocGx1Z2luVmlldygpLT53aWR0aCgpIC0gbV92
ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT5oZWlnaHQoKSAtIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCks
IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwotfQotCi1TY3JvbGxhYmxlQXJlYSog
QnVpbHRJblBERlZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogV2FsayB1cCB0aGUgZnJhbWUgdHJlZSBhbmQgbG9vayBmb3IgYSBzY3JvbGxhYmxl
IHBhcmVudCBmcmFtZSBvciBSZW5kZXJMYXllci4KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBC
dWlsdEluUERGVmlldzo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCi17
Ci0gICAgbV9zY3JvbGxPZmZzZXQgPSBJbnRTaXplKG9mZnNldC54KCksIG9mZnNldC55KCkpOwot
ICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgZm9yIHBlcmZvcm1hbmNlIHRvIGJsaXQg
cGFydHMgdGhhdCByZW1haW4gdmlzaWJsZS4KLSAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUo
SW50UmVjdCgwLCAwLCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgp
KSk7Ci19Ci0KLWludCBCdWlsdEluUERGVmlldzo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikgY29uc3QKLXsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgo
b3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hvcml6b250YWxTY3JvbGxi
YXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyID8g
KHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsK
LX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gbV9mcmFtZS0+Y29yZUZyYW1lKCkpIHsKLSAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEludFJlY3QgZGly
dHlSZWN0ID0gcmVjdDsKLSAgICBkaXJ0eVJlY3QubW92ZUJ5KHNjcm9sbGJhci0+bG9jYXRpb24o
KSk7Ci0gICAgZGlydHlSZWN0Lm1vdmVCeSgtcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKLSAg
ICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoZGlydHlSZWN0KTsKLX0KLQotdm9pZCBCdWlsdElu
UERGVmlldzo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUocmVjdCk7Ci19Ci0KLWJvb2wgQnVpbHRJ
blBERlZpZXc6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1pbnQgQnVpbHRJblBERlZpZXc6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciog
c2Nyb2xsYmFyKSBjb25zdAotewotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRo
KCk7Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJh
cikKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpOwotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1JbnRQb2ludCBCdWlsdEluUERGVmll
dzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBJbnRQb2ludChtX3Njcm9s
bE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7Ci19Ci0KLUludFBvaW50
IEJ1aWx0SW5QREZWaWV3OjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBJbnRQb2ludCgwLCAwKTsKLX0KLQotSW50UG9pbnQgQnVpbHRJblBERlZpZXc6Om1heGlt
dW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQgPSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkg
OiAwOwotICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxi
YXIgJiYgIW1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVy
dGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwOwotCi0gICAgSW50UG9pbnQgbWF4aW11bU9mZnNl
dChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpIC0gbV9wbHVnaW5TaXplLndpZHRoKCkgKyB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSAtIG1fcGx1Z2lu
U2l6ZS5oZWlnaHQoKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOwotICAgIG1heGltdW1P
ZmZzZXQuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwotICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0Owot
fQotCi1pbnQgQnVpbHRJblBERlZpZXc6OnZpc2libGVIZWlnaHQoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3BsdWdpblNpemUuaGVpZ2h0KCk7Ci19Ci0KLWludCBCdWlsdEluUERGVmlldzo6dmlz
aWJsZVdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbHVnaW5TaXplLndpZHRoKCk7Ci19
Ci0KLUludFNpemUgQnVpbHRJblBERlZpZXc6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcGRmRG9jdW1lbnRTaXplOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3Ojppc09u
QWN0aXZlUGFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFwbHVnaW5WaWV3KCktPmZyYW1lKCkt
PmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNj
cm9sbGJhclN0eWxlQ2hhbmdlZChpbnQsIGJvb2wgZm9yY2VVcGRhdGUpCi17Ci0gICAgaWYgKCFm
b3JjZVVwZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIFBERiB3YXMgc2Ny
b2xsZWQgYWxsIHRoZSB3YXkgdG8gYm90dG9tIHJpZ2h0IGFuZCBzY3JvbGxiYXJzIGNoYW5nZSB0
byBvdmVybGF5IHN0eWxlLCB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgd2hpdGUgcmVjdGFuZ2xl
cyB3aGVyZSBzY3JvbGxiYXJzIHdlcmUuCi0gICAgSW50UG9pbnQgbmV3U2Nyb2xsT2Zmc2V0ID0g
SW50UG9pbnQobV9zY3JvbGxPZmZzZXQpLnNocnVua1RvKG1heGltdW1TY3JvbGxQb3NpdGlvbigp
KTsKLSAgICBzZXRTY3JvbGxPZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKLQotICAgIC8vIEFzIHNp
emUgb2YgdGhlIGNvbnRlbnQgYXJlYSBjaGFuZ2VzLCBzY3JvbGxiYXJzIG1heSBuZWVkIHRvIGFw
cGVhciBvciB0byBkaXNhcHBlYXIuCi0gICAgdXBkYXRlU2Nyb2xsYmFycygpOwotCi0gICAgU2Ny
b2xsYWJsZUFyZWE6OmNvbnRlbnRzUmVzaXplZCgpOwotfQotCi1JbnRQb2ludCBCdWlsdEluUERG
Vmlldzo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAg
SW50UG9pbnQgcG9pbnQgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydFRv
UmVuZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0gICAgcG9p
bnQubW92ZShwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkp
OwotCi0gICAgcmV0dXJuIHBvaW50OwotfQotCi1zdGF0aWMgdm9pZCBqc1BERkRvY0luaXRpYWxp
emUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIEJ1aWx0SW5Q
REZWaWV3KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERlZpZXcqPihKU09iamVjdEdl
dFByaXZhdGUob2JqZWN0KSk7Ci0gICAgcGRmVmlldy0+cmVmKCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGpzUERGRG9jRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIEJ1aWx0SW5QREZW
aWV3KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERlZpZXcqPihKU09iamVjdEdldFBy
aXZhdGUob2JqZWN0KSk7Ci0gICAgcGRmVmlldy0+ZGVyZWYoKTsKLX0KLQotSlNWYWx1ZVJlZiBC
dWlsdEluUERGVmlldzo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsK
LSAgICBCdWlsdEluUERGVmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLQotICAgIFdlYkZyYW1lKiBmcmFt
ZSA9IHBkZlZpZXctPm1fZnJhbWU7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gZnJhbWUt
PmNvcmVGcmFtZSgpOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2Uo
KTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
dHgpOwotCi0gICAgcGFnZS0+Y2hyb21lKCktPnByaW50KGNvcmVGcmFtZSk7Ci0KLSAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLX0KLQotSlNPYmplY3RSZWYgQnVpbHRJblBE
RlZpZXc6Om1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4KQotewotICAgIHN0YXRpYyBKU1N0
YXRpY0Z1bmN0aW9uIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zW10gPSB7Ci0gICAgICAgIHsgInBy
aW50IiwganNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7IDAsIDAsIDAgfSwKLSAgICB9
OwotCi0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGpzUERGRG9jQ2xhc3NEZWZpbml0aW9u
ID0gewotICAgICAgICAwLAotICAgICAgICBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsCi0gICAgICAg
ICJEb2MiLAotICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICBqc1BERkRvY1N0YXRpY0Z1
bmN0aW9ucywKLSAgICAgICAganNQREZEb2NJbml0aWFsaXplLCBqc1BERkRvY0ZpbmFsaXplLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCi0gICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzUmVm
IGpzUERGRG9jQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZqc1BERkRvY0NsYXNzRGVmaW5pdGlvbik7
Ci0KLSAgICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNQREZEb2NDbGFzcywgdGhpcyk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuaAkocmV2aXNpb24gMTE0
NDE0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERG
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTQsNyArMTE0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAgIHZpcnR1
YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpOwogCi0gICAgdmlydHVh
bCBSZXRhaW5QdHI8Q0dQREZEb2N1bWVudFJlZj4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KKyAgICB2aXJ0dWFsIFJldGFp
blB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KIAogICAgIC8vIFNjcm9sbGFibGVBcmVhIG1ldGhv
ZHMuCiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25z
dDsKQEAgLTE1MSw3ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3N1Z2dlc3RlZEZp
bGVuYW1lOwogICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2RhdGFCdWZmZXI7CiAK
LSAgICBSZXRhaW5QdHI8Q0dQREZEb2N1bWVudFJlZj4gbV9wZGZEb2N1bWVudDsKKyAgICBSZXRh
aW5QdHI8UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7CiAgICAgVmVjdG9yPFdlYkNvcmU6Oklu
dFJlY3Q+IG1fcGFnZUJveGVzOwogICAgIFdlYkNvcmU6OkludFNpemUgbV9wZGZEb2N1bWVudFNp
emU7IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbQko
cmV2aXNpb24gMTE0Mjg2KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL0J1aWx0SW5QREZWaWV3LmNwcDoxMTQyODYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkJ1aWx0SW5QREZWaWV3LmgiCisKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVk
ZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiV2ViRXZlbnQuaCIKKyNpbmNsdWRlICJX
ZWJFdmVudENvbnZlcnNpb24uaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRS
ZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNTdHJpbmdSZWZDRi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQXJjaGl2ZVJlc291cmNlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9h
ZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRl
ck1hcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nj
cm9sbEFuaW1hdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK3N0YXRpYyB2
b2lkIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRpY3Rpb25hcnlS
ZWYgc3VidHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQoreworICAgIENHUERG
QXJyYXlSZWYgbmFtZXM7CisgICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUs
ICJOYW1lcyIsICZuYW1lcykpIHsKKyAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9IENHUERGQXJy
YXlHZXRDb3VudChuYW1lcykgLyAyOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5h
bWVDb3VudDsgKytpKSB7CisgICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmplY3Q7CisgICAg
ICAgICAgICBDR1BERkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZvYmplY3QpOwor
ICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChvYmplY3QpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBDR1BERkFycmF5UmVmIGtpZHM7CisgICAgaWYgKCFDR1BERkRp
Y3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRzKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc2l6ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdldENvdW50KGtpZHMpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkgeworICAgICAgICBDR1BERkRp
Y3Rpb25hcnlSZWYga2lkOworICAgICAgICBpZiAoIUNHUERGQXJyYXlHZXREaWN0aW9uYXJ5KGtp
ZHMsIGksICZraWQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGFwcGVuZFZhbHVl
c0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCBnZXRBbGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERGRGljdGlvbmFyeVJlZiB0cmVl
LCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCit7CisgICAgYXBwZW5kVmFsdWVz
SW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVlcyk7Cit9CisKK3N0YXRpYyB2
b2lkIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KENHUERGRG9jdW1lbnRSZWYgcGRmRG9jdW1l
bnQsIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4mIHNjcmlwdHMpCit7CisgICAgaWYg
KCFwZGZEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dQREZEaWN0aW9uYXJ5UmVm
IHBkZkNhdGFsb2cgPSBDR1BERkRvY3VtZW50R2V0Q2F0YWxvZyhwZGZEb2N1bWVudCk7CisgICAg
aWYgKCFwZGZDYXRhbG9nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBHZXQgdGhlIGRpY3Rp
b25hcnkgb2YgYWxsIGRvY3VtZW50LWxldmVsIG5hbWUgdHJlZXMuCisgICAgQ0dQREZEaWN0aW9u
YXJ5UmVmIG5hbWVzRGljdGlvbmFyeTsKKyAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldERpY3Rp
b25hcnkocGRmQ2F0YWxvZywgIk5hbWVzIiwgJm5hbWVzRGljdGlvbmFyeSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIEdldCB0aGUgZG9jdW1lbnQtbGV2ZWwgIkphdmFTY3JpcHQiIG5hbWUg
dHJlZS4KKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlwdE5hbWVUcmVlOworICAgIGlm
ICghQ0dQREZEaWN0aW9uYXJ5R2V0RGljdGlvbmFyeShuYW1lc0RpY3Rpb25hcnksICJKYXZhU2Ny
aXB0IiwgJmphdmFTY3JpcHROYW1lVHJlZSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRo
ZSBuYW1lcyBhcmUgYXJiaXRyYXJ5LiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSB2YWx1
ZXMuCisgICAgVmVjdG9yPENHUERGT2JqZWN0UmVmPiBvYmplY3RzOworICAgIGdldEFsbFZhbHVl
c0luUERGTmFtZVRyZWUoamF2YVNjcmlwdE5hbWVUcmVlLCBvYmplY3RzKTsKKyAgICBzaXplX3Qg
b2JqZWN0Q291bnQgPSBvYmplY3RzLnNpemUoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgb2JqZWN0Q291bnQ7ICsraSkgeworICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYgamF2YVNj
cmlwdEFjdGlvbjsKKyAgICAgICAgaWYgKCFDR1BERk9iamVjdEdldFZhbHVlKHJlaW50ZXJwcmV0
X2Nhc3Q8Q0dQREZPYmplY3RSZWY+KG9iamVjdHNbaV0pLCBrQ0dQREZPYmplY3RUeXBlRGljdGlv
bmFyeSwgJmphdmFTY3JpcHRBY3Rpb24pKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgLy8gQSBKYXZhU2NyaXB0IGFjdGlvbiBtdXN0IGhhdmUgYW4gYWN0aW9uIHR5cGUgb2YgIkph
dmFTY3JpcHQiLgorICAgICAgICBjb25zdCBjaGFyKiBhY3Rpb25UeXBlOworICAgICAgICBpZiAo
IUNHUERGRGljdGlvbmFyeUdldE5hbWUoamF2YVNjcmlwdEFjdGlvbiwgIlMiLCAmYWN0aW9uVHlw
ZSkgfHwgc3RyY21wKGFjdGlvblR5cGUsICJKYXZhU2NyaXB0IikpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBjb25zdCBVSW50OCogYnl0ZXMgPSAwOworICAgICAgICBDRkluZGV4
IGxlbmd0aDsKKyAgICAgICAgQ0dQREZTdHJlYW1SZWYgc3RyZWFtOworICAgICAgICBDR1BERlN0
cmluZ1JlZiBzdHJpbmc7CisgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7CisgICAg
ICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRTdHJlYW0oamF2YVNjcmlwdEFjdGlvbiwgIkpTIiwg
JnN0cmVhbSkpIHsKKyAgICAgICAgICAgIENHUERGRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAg
ICAgICBkYXRhLmFkb3B0Q0YoQ0dQREZTdHJlYW1Db3B5RGF0YShzdHJlYW0sICZmb3JtYXQpKTsK
KyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGJ5dGVzID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKTsKKyAgICAgICAgICAg
IGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIGlm
IChDR1BERkRpY3Rpb25hcnlHZXRTdHJpbmcoamF2YVNjcmlwdEFjdGlvbiwgIkpTIiwgJnN0cmlu
ZykpIHsKKyAgICAgICAgICAgIGJ5dGVzID0gQ0dQREZTdHJpbmdHZXRCeXRlUHRyKHN0cmluZyk7
CisgICAgICAgICAgICBsZW5ndGggPSBDR1BERlN0cmluZ0dldExlbmd0aChzdHJpbmcpOworICAg
ICAgICB9CisgICAgICAgIGlmICghYnl0ZXMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBDRlN0cmluZ0VuY29kaW5nIGVuY29kaW5nID0gKGxlbmd0aCA+IDEgJiYgYnl0ZXNbMF0g
PT0gMHhGRSAmJiBieXRlc1sxXSA9PSAweEZGKSA/IGtDRlN0cmluZ0VuY29kaW5nVW5pY29kZSA6
IGtDRlN0cmluZ0VuY29kaW5nVVRGODsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBz
Y3JpcHQoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgYnl0ZXMsIGxlbmd0aCwgZW5jb2RpbmcsIHRydWUpKTsKKyAgICAgICAgaWYgKCFzY3JpcHQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzY3JpcHRzLmFwcGVuZChzY3JpcHQp
OworICAgIH0KK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NvbnN0IHVpbnQ2NF90IHBkZkRv
Y3VtZW50UmVxdWVzdElEID0gMTsgLy8gUGx1Z2luQ29udHJvbGxlciBzdXBwb3J0cyBsb2FkaW5n
IG11bHRpcGxlIHN0cmVhbXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25lIGZvciBQREYuCisKK2NvbnN0
IGludCBndXR0ZXJIZWlnaHQgPSAxMDsKK2NvbnN0IGludCBzaGFkb3dPZmZzZXRYID0gMDsKK2Nv
bnN0IGludCBzaGFkb3dPZmZzZXRZID0gLTI7Citjb25zdCBpbnQgc2hhZG93U2l6ZSA9IDc7CisK
K1Bhc3NSZWZQdHI8QnVpbHRJblBERlZpZXc+IEJ1aWx0SW5QREZWaWV3OjpjcmVhdGUoV2ViRnJh
bWUqIGZyYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVpbHRJblBERlZpZXcoZnJh
bWUpKTsKK30KKworQnVpbHRJblBERlZpZXc6OkJ1aWx0SW5QREZWaWV3KFdlYkZyYW1lKiBmcmFt
ZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK0J1aWx0SW5QREZWaWV3Ojp+QnVpbHRJ
blBERlZpZXcoKQoreworfQorCitQbHVnaW5JbmZvIEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5JbmZv
KCkKK3sKKyAgICBQbHVnaW5JbmZvIGluZm87CisgICAgaW5mby5uYW1lID0gYnVpbHRJblBERlBs
dWdpbk5hbWUoKTsKKworICAgIE1pbWVDbGFzc0luZm8gbWltZUNsYXNzSW5mbzsKKyAgICBtaW1l
Q2xhc3NJbmZvLnR5cGUgPSJhcHBsaWNhdGlvbi9wZGYiOworICAgIG1pbWVDbGFzc0luZm8uZGVz
YyA9IHBkZkRvY3VtZW50VHlwZURlc2NyaXB0aW9uKCk7CisgICAgbWltZUNsYXNzSW5mby5leHRl
bnNpb25zLmFwcGVuZCgicGRmIik7CisKKyAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lQ2xhc3NJ
bmZvKTsKKyAgICByZXR1cm4gaW5mbzsKK30KKworUGx1Z2luVmlldyogQnVpbHRJblBERlZpZXc6
OnBsdWdpblZpZXcoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oY29u
dHJvbGxlcigpKTsKK30KKworY29uc3QgUGx1Z2luVmlldyogQnVpbHRJblBERlZpZXc6OnBsdWdp
blZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3
Kj4oY29udHJvbGxlcigpKTsKK30KKwordm9pZCBCdWlsdEluUERGVmlldzo6dXBkYXRlU2Nyb2xs
YmFycygpCit7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBpZiAo
bV9wbHVnaW5TaXplLndpZHRoKCkgPj0gbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSkKKyAgICAg
ICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgfSBlbHNl
IGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA8IG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkpCisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFs
U2Nyb2xsYmFyKTsKKworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlm
IChtX3BsdWdpblNpemUuaGVpZ2h0KCkgPj0gbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpCisg
ICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9IGVs
c2UgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA8IG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgp
KQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9y
aXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsKKyAgICBpbnQg
dmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT53aWR0aCgpIDogMDsKKworICAgIGludCBwYWdlU3RlcCA9IG1fcGFnZUJveGVzLmlzRW1wdHko
KSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKKworICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSk7CisgICAgICAgIElu
dFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwgcGx1Z2luVmlldygpLT55KCkg
KyBtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgp
LCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7
CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgc2Nyb2xsYmFy
UmVjdC5jb250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAwKTsKKyAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7CisgICAg
fQorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXAp
OworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fcGx1Z2luU2l6
ZS5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXpl
LmhlaWdodCgpKTsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KEludFJlY3QocGx1Z2lu
VmlldygpLT54KCkgKyBtX3BsdWdpblNpemUud2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXIt
PndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgp
LCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhcikKKyAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29udHJhY3QoMCwgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZy
YW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9CisgICAgCisgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciB8fCBtX2hv
cml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIGZyYW1lVmlldy0+YWRkU2Nyb2xsYWJsZUFyZWEo
dGhpcyk7CisgICAgZWxzZQorICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVh
KHRoaXMpOworfQorCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gQnVpbHRJblBERlZpZXc6OmNyZWF0
ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0
aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgaWYgKG9yaWVudGF0aW9u
ID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIGRpZEFkZEhvcml6b250YWxTY3JvbGxi
YXIod2lkZ2V0LmdldCgpKTsKKyAgICBlbHNlIAorICAgICAgICBkaWRBZGRWZXJ0aWNhbFNjcm9s
bGJhcih3aWRnZXQuZ2V0KCkpOworICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5h
ZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOworfQor
Cit2b2lkIEJ1aWx0SW5QREZWaWV3OjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBv
cmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFy
IDogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAg
ICAgIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSk7CisgICAg
ZWxzZQorICAgICAgICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgp
KTsKKworICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHNjcm9sbGJhci0+
ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOworICAgIHNjcm9sbGJhciA9IDA7Cit9CisK
K3ZvaWQgQnVpbHRJblBERlZpZXc6OmFkZEFyY2hpdmVSZXNvdXJjZSgpCit7CisgICAgLy8gRklY
TUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNlIHRvIERvY3VtZW50TG9hZGVy
LiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQgYXMgQ2FjaGVkUmVzb3VyY2Vz
LgorCisgICAgLy8gQWRkIGp1c3QgZW5vdWdoIGRhdGEgZm9yIGNvbnRleHQgbWVudSBoYW5kbGlu
ZyBhbmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsuCisgICAgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVz
aXplZFJlc3BvbnNlOworICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5h
bWUobV9zdWdnZXN0ZWRGaWxlbmFtZSk7CisgICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRVUkwo
bV9zb3VyY2VVUkwpOyAvLyBOZWVkcyB0byBtYXRjaCB0aGUgSGl0VGVzdFJlc3VsdDo6YWJzb2x1
dGVQREZVUkwuCisgICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRNaW1lVHlwZSgiYXBwbGljYXRp
b24vcGRmIik7CisKKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IEFyY2hp
dmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShtX2RhdGFCdWZmZXIu
Z2V0KCkpLCBtX3NvdXJjZVVSTCwgImFwcGxpY2F0aW9uL3BkZiIsIFN0cmluZygpLCBTdHJpbmco
KSwgc3ludGhlc2l6ZWRSZXNwb25zZSk7CisgICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1
bWVudCgpLT5sb2FkZXIoKS0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7
Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OnBkZkRvY3VtZW50RGlkTG9hZCgpCit7CisgICAg
YWRkQXJjaGl2ZVJlc291cmNlKCk7CisKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+
IHBkZkRhdGFQcm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEo
bV9kYXRhQnVmZmVyLmdldCgpKSk7CisgICAgbV9wZGZEb2N1bWVudC5hZG9wdENGKENHUERGRG9j
dW1lbnRDcmVhdGVXaXRoUHJvdmlkZXIocGRmRGF0YVByb3ZpZGVyLmdldCgpKSk7CisKKyAgICBj
YWxjdWxhdGVTaXplcygpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKworICAgIGNvbnRyb2xs
ZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KDAsIDAsIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX3Bs
dWdpblNpemUuaGVpZ2h0KCkpKTsKKworICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
ID4gc2NyaXB0czsKKyAgICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChtX3BkZkRvY3VtZW50
LmdldCgpLCBzY3JpcHRzKTsKKworICAgIHNpemVfdCBzY3JpcHRDb3VudCA9IHNjcmlwdHMuc2l6
ZSgpOworICAgIGlmICghc2NyaXB0Q291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEpTR2xv
YmFsQ29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENvbnRleHRDcmVhdGUoMCk7CisgICAgSlNPYmpl
Y3RSZWYganNQREZEb2MgPSBtYWtlSlNQREZEb2MoY3R4KTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsraSkgeworICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQg
PSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhzY3JpcHRzW2ldLmdldCgpKTsKKyAgICAgICAg
SlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwganNQREZEb2MsIDAsIDAsIDApOworICAgICAg
ICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKKyAgICB9CisKKyAgICBKU0dsb2JhbENvbnRleHRS
ZWxlYXNlKGN0eCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OmNhbGN1bGF0ZVNpemVzKCkK
K3sKKyAgICBzaXplX3QgcGFnZUNvdW50ID0gQ0dQREZEb2N1bWVudEdldE51bWJlck9mUGFnZXMo
bV9wZGZEb2N1bWVudC5nZXQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWdlQ291
bnQ7ICsraSkgeworICAgICAgICBDR1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRH
ZXRQYWdlKG1fcGRmRG9jdW1lbnQuZ2V0KCksIGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKHBkZlBh
Z2UpOworCisgICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2Us
IGtDR1BERkNyb3BCb3gpOworICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAgICAg
ICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7
CisgICAgICAgIG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJveCkpOworICAgICAgICBtX3Bk
ZkRvY3VtZW50U2l6ZS5zZXRXaWR0aChtYXgobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSwgc3Rh
dGljX2Nhc3Q8aW50Pihib3guc2l6ZS53aWR0aCkpKTsKKyAgICAgICAgbV9wZGZEb2N1bWVudFNp
emUuZXhwYW5kKDAsIGJveC5zaXplLmhlaWdodCk7CisgICAgfQorICAgIG1fcGRmRG9jdW1lbnRT
aXplLmV4cGFuZCgwLCBndXR0ZXJIZWlnaHQgKiAobV9wYWdlQm94ZXMuc2l6ZSgpIC0gMSkpOwor
fQorCitib29sIEJ1aWx0SW5QREZWaWV3Ojppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMpCit7CisgICAgLy8gTG9hZCB0aGUgc3JjIFVSTCBpZiBuZWVkZWQuCisgICAgbV9z
b3VyY2VVUkwgPSBwYXJhbWV0ZXJzLnVybDsKKyAgICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNl
TWFudWFsTG9hZGVyICYmICFwYXJhbWV0ZXJzLnVybC5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRy
b2xsZXIoKS0+bG9hZFVSTChwZGZEb2N1bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMu
dXJsLnN0cmluZygpLCBTdHJpbmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4o
KSwgZmFsc2UpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6
OmRlc3Ryb3koKQoreworICAgIGlmIChtX2ZyYW1lKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCkpCisgICAgICAgICAgICBm
cmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0KKworICAgIGRlc3Ry
b3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihW
ZXJ0aWNhbFNjcm9sbGJhcik7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7
CisgICAgY29udGVudEFyZWFXaWxsUGFpbnQoKTsKKworICAgIHBhaW50QmFja2dyb3VuZChncmFw
aGljc0NvbnRleHQsIGRpcnR5UmVjdCk7CisKKyAgICBpZiAoIW1fcGRmRG9jdW1lbnQpIC8vIEZJ
WE1FOiBEcmF3IGxvYWRpbmcgcHJvZ3Jlc3MuCisgICAgICAgIHJldHVybjsKKworICAgIHBhaW50
Q29udGVudChncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgcGFpbnRDb250cm9scyhn
cmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OnBh
aW50QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQoreworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xv
cihDb2xvcjo6Z3JheSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgZ3JhcGhpY3NDb250ZXh0
LT5maWxsUmVjdChkaXJ0eVJlY3QpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpwYWludENv
bnRlbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdy
YXBoaWNzQ29udGV4dCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRJbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25IaWdoKTsKKyAgICBncmFwaGljc0NvbnRl
eHQtPnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFNo
b3VsZFNtb290aEZvbnRzKHRydWUpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9y
KENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisKKyAgICBncmFwaGljc0NvbnRl
eHQtPmNsaXAoZGlydHlSZWN0KTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KGRpcnR5UmVjdCk7
CisgICAgY29udGVudFJlY3QubW92ZUJ5KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KSk7CisgICAg
Z3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1tX3Nj
cm9sbE9mZnNldC5oZWlnaHQoKSk7CisKKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAx
LCAtMSk7CisKKyAgICBpbnQgcGFnZVRvcCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3BhZ2VCb3hlcy5zaXplKCk7ICsraSkgeworICAgICAgICBJbnRSZWN0IHBhZ2VCb3ggPSBt
X3BhZ2VCb3hlc1tpXTsKKyAgICAgICAgZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdYID0g
bWF4KHJvdW5kZigobV9wbHVnaW5TaXplLndpZHRoKCkgLSBwYWdlQm94LndpZHRoKCkpIC8gMi4w
ZiksIDAuMGYpOworICAgICAgICBmbG9hdCBleHRyYU9mZnNldEZvckNlbnRlcmluZ1kgPSAobV9w
YWdlQm94ZXMuc2l6ZSgpID09IDEpID8gbWF4KHJvdW5kZigobV9wbHVnaW5TaXplLmhlaWdodCgp
IC0gcGFnZUJveC5oZWlnaHQoKSArIHNoYWRvd09mZnNldFkpIC8gMi4wZiksIDAuMGYpIDogMDsK
KworICAgICAgICBpZiAocGFnZVRvcCA+IGNvbnRlbnRSZWN0Lm1heFkoKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBpZiAocGFnZVRvcCArIHBhZ2VCb3guaGVpZ2h0KCkgKyBleHRyYU9m
ZnNldEZvckNlbnRlcmluZ1kgKyBndXR0ZXJIZWlnaHQgPj0gY29udGVudFJlY3QueSgpKSB7Cisg
ICAgICAgICAgICBDR1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKG1f
cGRmRG9jdW1lbnQuZ2V0KCksIGkgKyAxKTsKKworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5zYXZlKCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZShleHRyYU9m
ZnNldEZvckNlbnRlcmluZ1ggLSBwYWdlQm94LngoKSwgLWV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5n
WSAtIHBhZ2VCb3gueSgpIC0gcGFnZUJveC5oZWlnaHQoKSk7CisKKyAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZz
ZXRZKSwgc2hhZG93U2l6ZSwgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocGFnZUJveCk7CisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPmNsZWFyU2hhZG93KCk7CisKKyAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+Y2xpcChwYWdlQm94KTsKKworICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BERlBh
Z2UoY29udGV4dCwgcGRmUGFnZSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3Rv
cmUoKTsKKyAgICAgICAgfQorICAgICAgICBwYWdlVG9wICs9IHBhZ2VCb3guaGVpZ2h0KCkgKyBn
dXR0ZXJIZWlnaHQ7CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAt
cGFnZUJveC5oZWlnaHQoKSAtIGd1dHRlckhlaWdodCk7CisgICAgfQorfQorCit2b2lkIEJ1aWx0
SW5QREZWaWV3OjpwYWludENvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgeworICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7CisgICAgICAgIElu
dFJlY3Qgc2Nyb2xsYmFyRGlydHlSZWN0ID0gZGlydHlSZWN0OworICAgICAgICBzY3JvbGxiYXJE
aXJ0eVJlY3QubW92ZUJ5KHBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7Cisg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1wbHVnaW5WaWV3KCktPmZyYW1lUmVj
dCgpLngoKSwgLXBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkueSgpKTsKKworICAgICAgICBpZiAo
bV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhckRpcnR5UmVjdCk7CisKKyAgICAgICAg
aWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhckRpcnR5UmVjdCk7CisgICAgfQorCisg
ICAgSW50UmVjdCBkaXJ0eUNvcm5lclJlY3QgPSBpbnRlcnNlY3Rpb24oc2Nyb2xsQ29ybmVyUmVj
dCgpLCBkaXJ0eVJlY3QpOworICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5wYWludFNjcm9s
bENvcm5lcigwLCBncmFwaGljc0NvbnRleHQsIGRpcnR5Q29ybmVyUmVjdCk7Cit9CisKK3ZvaWQg
QnVpbHRJblBERlZpZXc6OnVwZGF0ZUNvbnRyb2xUaW50cyhHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNzQ29udGV4dCkKK3sKKyAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0LT51cGRhdGluZ0NvbnRy
b2xUaW50cygpKTsKKworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgIGlmIChtX3ZlcnRpY2FsU2Ny
b2xsYmFyKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAg
aW52YWxpZGF0ZVNjcm9sbENvcm5lcihzY3JvbGxDb3JuZXJSZWN0KCkpOworfQorCitQYXNzUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4gQnVpbHRJblBERlZpZXc6OnNuYXBzaG90KCkKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKK1BsYXRmb3JtTGF5ZXIqIEJ1aWx0SW5Q
REZWaWV3OjpwbHVnaW5MYXllcigpCit7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCiti
b29sIEJ1aWx0SW5QREZWaWV3Ojppc1RyYW5zcGFyZW50KCkKK3sKKyAgICAvLyBUaGlzIHNob3Vs
ZCBuZXZlciBiZSBjYWxsZWQgZnJvbSB0aGUgd2ViIHByb2Nlc3MuCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3Ojpn
ZW9tZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNm
b3JtKQoreworICAgIGlmIChtX3BsdWdpblNpemUgPT0gcGx1Z2luU2l6ZSkgeworICAgICAgICAv
LyBOb3RoaW5nIHRvIGRvLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wbHVnaW5T
aXplID0gcGx1Z2luU2l6ZTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgQnVp
bHRJblBERlZpZXc6OnZpc2liaWxpdHlEaWRDaGFuZ2UoKQoreworfQorCit2b2lkIEJ1aWx0SW5Q
REZWaWV3OjpmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OmZyYW1lRGlkRmFpbCh1aW50
NjRfdCwgYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBCdWls
dEluUERGVmlldzo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90LCBjb25zdCBXVEY6OlN0
cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQnVpbHRJblBE
RlZpZXc6OnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3Qg
S1VSTCYsIHVpbnQzMl90LCB1aW50MzJfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0
cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBtX3N1Z2dl
c3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Cit9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpzdHJlYW1EaWRS
ZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5n
dGgpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1l
bnRSZXF1ZXN0SUQpOworCisgICAgaWYgKCFtX2RhdGFCdWZmZXIpCisgICAgICAgIG1fZGF0YUJ1
ZmZlci5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOworCisgICAgQ0ZEYXRhQXBw
ZW5kQnl0ZXMobV9kYXRhQnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4
Kj4oYnl0ZXMpLCBsZW5ndGgpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpzdHJlYW1EaWRG
aW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3Ry
ZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIHBkZkRvY3Vt
ZW50RGlkTG9hZCgpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpzdHJlYW1EaWRGYWlsKHVp
bnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCkKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBtX2Rh
dGFCdWZmZXIuY2xlYXIoKTsKK30KKwordm9pZCBCdWlsdEluUERGVmlldzo6bWFudWFsU3RyZWFt
RGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJl
YW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5h
bWUpCit7CisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOworfQor
Cit2b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIW1fZGF0YUJ1ZmZlcikKKyAgICAg
ICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisKKyAg
ICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6
Om1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKQoreworICAgIHBkZkRvY3VtZW50RGlkTG9h
ZCgpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wp
Cit7CisgICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Cit9CisKK2Jvb2wgQnVpbHRJblBERlZpZXc6
OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgc3dp
dGNoIChldmVudC50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6CisgICAg
ICAgIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
YWxzbyBub3RpZnkgc2Nyb2xsYmFyIHRvIHNob3cgaG92ZXIgZWZmZWN0LiBTaG91bGQgYWxzbyBz
ZW5kIG1vdXNlRXhpdGVkIHRvIGhpZGUgaXQuCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2Vi
RXZlbnQ6Ok1vdXNlRG93bjogeworICAgICAgICAvLyBSZXR1cm5pbmcgZmFsc2UgYXMgd2lsbCBt
YWtlIEV2ZW50SGFuZGxlciB1bmZvY3VzIHRoZSBwbHVnLWluLCB3aGljaCBpcyBhcHByb3ByaWF0
ZSB3aGVuIGNsaWNraW5nIHNjcm9sbGJhcnMuCisgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxk
bid0IGNoYW5nZSBmb2N1cyBhdCBhbGwsIGJ1dCBQbHVnaW5WaWV3IGFscmVhZHkgZGlkIHRoYXQg
Zm9yIHVzLgorICAgICAgICAvLyBXaGVuIHN1cHBvcnQgZm9yIFBERiBmb3JtcyBpcyBhZGRlZCwg
d2UnbGwgbmVlZCB0byBhY3R1YWxseSBmb2N1cyB0aGUgcGx1Zy1pbiB3aGVuIGNsaWNraW5nIGlu
IGEgZm9ybS4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNl
VXA6IHsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0Zm9y
bShldmVudCk7CisgICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7CisgICAgICAg
IGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldo
ZWVsRXZlbnQmIGV2ZW50KQoreworICAgIFBsYXRmb3JtV2hlZWxFdmVudCBwbGF0Zm9ybUV2ZW50
ID0gcGxhdGZvcm0oZXZlbnQpOworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hl
ZWxFdmVudChwbGF0Zm9ybUV2ZW50KTsKK30KKworYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxl
TW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQoreworICAgIG1vdXNlRW50ZXJl
ZENvbnRlbnRBcmVhKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJ1aWx0SW5QREZW
aWV3OjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCit7CisgICAg
bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBC
dWlsdEluUERGVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
JikKK3sKKyAgICAvLyBVc2UgZGVmYXVsdCBXZWJLaXQgY29udGV4dCBtZW51LgorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChj
b25zdCBXZWJLZXlib2FyZEV2ZW50JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
QnVpbHRJblBERlZpZXc6OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCit7Cit9CisKK05QT2JqZWN0
KiBCdWlsdEluUERGVmlldzo6cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkKK3sKKyAgICByZXR1
cm4gMDsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKwordm9pZCBCdWlsdEluUERGVmlldzo6d2lu
ZG93Rm9jdXNDaGFuZ2VkKGJvb2wpCit7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OndpbmRv
d0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1l
SW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5X
aW5kb3dDb29yZGluYXRlcykKK3sKK30KKwordm9pZCBCdWlsdEluUERGVmlldzo6d2luZG93Vmlz
aWJpbGl0eUNoYW5nZWQoYm9vbCkKK3sKK30KKwordm9pZCBCdWlsdEluUERGVmlldzo6Y29udGVu
dHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpCit7Cit9CisKK3VpbnQ2NF90IEJ1aWx0SW5QREZW
aWV3OjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OnNlbmRDb21wbGV4VGV4dElucHV0KGNv
bnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZpZXc6OnNldExheWVySG9zdGlu
Z01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkKK3sKK30KKworI2VuZGlmCisKK3ZvaWQgQnVpbHRJblBE
RlZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKQoreworfQorCitib29sIEJ1
aWx0SW5QREZWaWV3OjpnZXRGb3JtVmFsdWUoU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICByZXR1cm4g
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworfQorCitTY3JvbGxiYXIqIEJ1aWx0SW5Q
REZWaWV3Ojpob3Jpem9udGFsU2Nyb2xsYmFyKCkKK3sKKyAgICByZXR1cm4gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLmdldCgpOworfQorCitTY3JvbGxiYXIqIEJ1aWx0SW5QREZWaWV3Ojp2ZXJ0aWNh
bFNjcm9sbGJhcigpCit7CisgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7Cit9
CisKK0ludFJlY3QgQnVpbHRJblBERlZpZXc6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAorewor
ICAgIGlmICghbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2FsU2Nyb2xsYmFyKQor
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKSB7CisgICAgICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSk7CisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Cisg
ICAgfQorICAgIHJldHVybiBJbnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgoKSAtIG1fdmVydGlj
YWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkgLSBtX2hvcml6b250
YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX2hv
cml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIEJ1aWx0
SW5QREZWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUgYW5kIGxvb2sgZm9yIGEgc2Nyb2xsYWJsZSBwYXJl
bnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQnVpbHRJ
blBERlZpZXc6OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAg
IG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKKyAgICAv
LyBGSVhNRTogSXQgd291bGQgYmUgYmV0dGVyIGZvciBwZXJmb3JtYW5jZSB0byBibGl0IHBhcnRz
IHRoYXQgcmVtYWluIHZpc2libGUuCisgICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKEludFJl
Y3QoMCwgMCwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSkpOwor
fQorCitpbnQgQnVpbHRJblBERlZpZXc6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVu
dGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDog
bV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7CisgICAgcmV0dXJuIHNjcm9sbGJhciA/IChzY3Jv
bGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisK
K2Jvb2wgQnVpbHRJblBERlZpZXc6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICBpZiAoRnJhbWUq
IGNvcmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpKSB7CisgICAgICAgIGlmIChQYWdlKiBw
YWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICByZXR1cm4gcGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPmlzQWN0aXZlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIEJ1aWx0SW5QREZWaWV3OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIq
IHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0IGRpcnR5UmVj
dCA9IHJlY3Q7CisgICAgZGlydHlSZWN0Lm1vdmVCeShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwor
ICAgIGRpcnR5UmVjdC5tb3ZlQnkoLXBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSk7CisgICAgY29u
dHJvbGxlcigpLT5pbnZhbGlkYXRlKGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERlZp
ZXc6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKHJlY3QpOworfQorCitib29sIEJ1aWx0SW5QREZW
aWV3Ojppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworaW50IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9s
bGJhcikgY29uc3QKK3sKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC53aWR0aCgpOwor
ICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisg
ICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKTsKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSW50UG9pbnQgQnVpbHRJblBERlZpZXc6OnNj
cm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQobV9zY3JvbGxPZmZz
ZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOworfQorCitJbnRQb2ludCBCdWls
dEluUERGVmlldzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
SW50UG9pbnQoMCwgMCk7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5QREZWaWV3OjptYXhpbXVtU2Ny
b2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092
ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsK
KyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYm
ICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKKworICAgIEludFBvaW50IG1heGltdW1PZmZzZXQobV9w
ZGZEb2N1bWVudFNpemUud2lkdGgoKSAtIG1fcGx1Z2luU2l6ZS53aWR0aCgpICsgdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkgLSBtX3BsdWdpblNpemUu
aGVpZ2h0KCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKKyAgICBtYXhpbXVtT2Zmc2V0
LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKyAgICByZXR1cm4gbWF4aW11bU9mZnNldDsKK30KKwor
aW50IEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wbHVnaW5TaXplLmhlaWdodCgpOworfQorCitpbnQgQnVpbHRJblBERlZpZXc6OnZpc2libGVX
aWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luU2l6ZS53aWR0aCgpOworfQorCitJ
bnRTaXplIEJ1aWx0SW5QREZWaWV3Ojpjb250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BkZkRvY3VtZW50U2l6ZTsKK30KKworYm9vbCBCdWlsdEluUERGVmlldzo6aXNPbkFjdGl2
ZVBhZ2UoKSBjb25zdAoreworICAgIHJldHVybiAhcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1
bWVudCgpLT5pblBhZ2VDYWNoZSgpOworfQorCit2b2lkIEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxi
YXJTdHlsZUNoYW5nZWQoaW50LCBib29sIGZvcmNlVXBkYXRlKQoreworICAgIGlmICghZm9yY2VV
cGRhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBQREYgd2FzIHNjcm9sbGVk
IGFsbCB0aGUgd2F5IHRvIGJvdHRvbSByaWdodCBhbmQgc2Nyb2xsYmFycyBjaGFuZ2UgdG8gb3Zl
cmxheSBzdHlsZSwgd2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IHdoaXRlIHJlY3RhbmdsZXMgd2hl
cmUgc2Nyb2xsYmFycyB3ZXJlLgorICAgIEludFBvaW50IG5ld1Njcm9sbE9mZnNldCA9IEludFBv
aW50KG1fc2Nyb2xsT2Zmc2V0KS5zaHJ1bmtUbyhtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSk7Cisg
ICAgc2V0U2Nyb2xsT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7CisKKyAgICAvLyBBcyBzaXplIG9m
IHRoZSBjb250ZW50IGFyZWEgY2hhbmdlcywgc2Nyb2xsYmFycyBtYXkgbmVlZCB0byBhcHBlYXIg
b3IgdG8gZGlzYXBwZWFyLgorICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKworICAgIFNjcm9sbGFi
bGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQoKTsKK30KKworSW50UG9pbnQgQnVpbHRJblBERlZpZXc6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIEludFBv
aW50IHBvaW50ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRUb1JlbmRl
cmVyKHBsdWdpblZpZXcoKS0+cmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1v
dmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKwor
ICAgIHJldHVybiBwb2ludDsKK30KKworc3RhdGljIHZvaWQganNQREZEb2NJbml0aWFsaXplKEpT
Q29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBCdWlsdEluUERGVmll
dyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3Kj4oSlNPYmplY3RHZXRQcml2
YXRlKG9iamVjdCkpOworICAgIHBkZlZpZXctPnJlZigpOworfQorCitzdGF0aWMgdm9pZCBqc1BE
RkRvY0ZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBCdWlsdEluUERGVmlldyog
cGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3Kj4oSlNPYmplY3RHZXRQcml2YXRl
KG9iamVjdCkpOworICAgIHBkZlZpZXctPmRlcmVmKCk7Cit9CisKK0pTVmFsdWVSZWYgQnVpbHRJ
blBERlZpZXc6OmpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
QnVpbHRJblBERlZpZXcqIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluUERGVmlldyo+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBw
ZGZWaWV3LT5tX2ZyYW1lOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjdHgpOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1lLT5jb3Jl
RnJhbWUoKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGN0eCk7CisKKyAgICBQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCk7Cisg
ICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsK
KworICAgIHBhZ2UtPmNocm9tZSgpLT5wcmludChjb3JlRnJhbWUpOworCisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Cit9CisKK0pTT2JqZWN0UmVmIEJ1aWx0SW5QREZWaWV3
OjptYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmIGN0eCkKK3sKKyAgICBzdGF0aWMgSlNTdGF0aWNG
dW5jdGlvbiBqc1BERkRvY1N0YXRpY0Z1bmN0aW9uc1tdID0geworICAgICAgICB7ICJwcmludCIs
IGpzUERGRG9jUHJpbnQsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAwLCAwLCAwIH0sCisgICAgfTsKKwor
ICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBqc1BERkRvY0NsYXNzRGVmaW5pdGlvbiA9IHsK
KyAgICAgICAgMCwKKyAgICAgICAga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLAorICAgICAgICAiRG9j
IiwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAganNQREZEb2NTdGF0aWNGdW5jdGlv
bnMsCisgICAgICAgIGpzUERGRG9jSW5pdGlhbGl6ZSwganNQREZEb2NGaW5hbGl6ZSwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMAorICAgIH07CisKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBqc1BE
RkRvY0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmanNQREZEb2NDbGFzc0RlZmluaXRpb24pOworCisg
ICAgcmV0dXJuIEpTT2JqZWN0TWFrZShjdHgsIGpzUERGRG9jQ2xhc3MsIHRoaXMpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvQnVpbHRJblBERlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbQkocmV2aXNpb24gMTE0Mjg2
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMzEgKzIzLDMzIEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkJ1aWx0SW5QREZWaWV3LmgiCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IkJ1aWx0SW5QREZWaWV3LmgiCiAKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSAi
U2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiV2ViRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJF
dmVudENvbnZlcnNpb24uaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNT
dHJpbmdSZWZDRi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQXJjaGl2ZVJlc291cmNlLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVy
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck1h
cC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9s
bEFuaW1hdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgorI2ltcG9y
dCAiUERGS2l0SW1wb3J0cy5oIgorI2ltcG9ydCAiUGx1Z2luVmlldy5oIgorI2ltcG9ydCAiU2hh
cmVhYmxlQml0bWFwLmgiCisjaW1wb3J0ICJXZWJFdmVudC5oIgorI2ltcG9ydCAiV2ViRXZlbnRD
b252ZXJzaW9uLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9KU1N0cmluZ1JlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZD
Ri5oPgorI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9BcmNoaXZl
UmVzb3VyY2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0RvY3VtZW50TG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hU
VFBIZWFkZXJNYXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
U2Nyb2xsQW5pbWF0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMjgzLDgg
KzI4NSw3IEBAIHZvaWQgQnVpbHRJblBERlZpZXc6OnBkZkRvY3VtZW50RGlkTG9hZCgKIHsKICAg
ICBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKIAotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJl
Zj4gcGRmRGF0YVByb3ZpZGVyKEFkb3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0
YShtX2RhdGFCdWZmZXIuZ2V0KCkpKTsKLSAgICBtX3BkZkRvY3VtZW50LmFkb3B0Q0YoQ0dQREZE
b2N1bWVudENyZWF0ZVdpdGhQcm92aWRlcihwZGZEYXRhUHJvdmlkZXIuZ2V0KCkpKTsKKyAgICBt
X3BkZkRvY3VtZW50LmFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRo
RGF0YTooTlNEYXRhICopbV9kYXRhQnVmZmVyLmdldCgpXSk7CiAKICAgICBjYWxjdWxhdGVTaXpl
cygpOwogICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKQEAgLTI5Miw3ICsyOTMsNyBAQCB2b2lkIEJ1
aWx0SW5QREZWaWV3OjpwZGZEb2N1bWVudERpZExvYWQoCiAgICAgY29udHJvbGxlcigpLT5pbnZh
bGlkYXRlKEludFJlY3QoMCwgMCwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1fcGx1Z2luU2l6ZS5o
ZWlnaHQoKSkpOwogCiAgICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4gPiBzY3JpcHRz
OwotICAgIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KG1fcGRmRG9jdW1lbnQuZ2V0KCksIHNj
cmlwdHMpOworICAgIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KFttX3BkZkRvY3VtZW50Lmdl
dCgpIGRvY3VtZW50UmVmXSwgc2NyaXB0cyk7CiAKICAgICBzaXplX3Qgc2NyaXB0Q291bnQgPSBz
Y3JpcHRzLnNpemUoKTsKICAgICBpZiAoIXNjcmlwdENvdW50KQpAQCAtMzEyLDkgKzMxMyw5IEBA
IHZvaWQgQnVpbHRJblBERlZpZXc6OnBkZkRvY3VtZW50RGlkTG9hZCgKIAogdm9pZCBCdWlsdElu
UERGVmlldzo6Y2FsY3VsYXRlU2l6ZXMoKQogewotICAgIHNpemVfdCBwYWdlQ291bnQgPSBDR1BE
RkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhtX3BkZkRvY3VtZW50LmdldCgpKTsKKyAgICBzaXpl
X3QgcGFnZUNvdW50ID0gQ0dQREZEb2N1bWVudEdldE51bWJlck9mUGFnZXMoW21fcGRmRG9jdW1l
bnQuZ2V0KCkgZG9jdW1lbnRSZWZdKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VD
b3VudDsgKytpKSB7Ci0gICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVu
dEdldFBhZ2UobV9wZGZEb2N1bWVudC5nZXQoKSwgaSArIDEpOworICAgICAgICBDR1BERlBhZ2VS
ZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50LmdldCgpIGRv
Y3VtZW50UmVmXSwgaSArIDEpOwogICAgICAgICBBU1NFUlQocGRmUGFnZSk7CiAKICAgICAgICAg
Q0dSZWN0IGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGQ3JvcEJveCk7
CkBAIC0zOTQsNyArMzk1LDcgQEAgdm9pZCBCdWlsdEluUERGVmlldzo6cGFpbnRDb250ZW50KEdy
YXBoaQogICAgICAgICBpZiAocGFnZVRvcCA+IGNvbnRlbnRSZWN0Lm1heFkoKSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBpZiAocGFnZVRvcCArIHBhZ2VCb3guaGVpZ2h0KCkgKyBleHRy
YU9mZnNldEZvckNlbnRlcmluZ1kgKyBndXR0ZXJIZWlnaHQgPj0gY29udGVudFJlY3QueSgpKSB7
Ci0gICAgICAgICAgICBDR1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdl
KG1fcGRmRG9jdW1lbnQuZ2V0KCksIGkgKyAxKTsKKyAgICAgICAgICAgIENHUERGUGFnZVJlZiBw
ZGZQYWdlID0gQ0dQREZEb2N1bWVudEdldFBhZ2UoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1l
bnRSZWZdLCBpICsgMSk7CiAKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwog
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoZXh0cmFPZmZzZXRGb3JDZW50
ZXJpbmdYIC0gcGFnZUJveC54KCksIC1leHRyYU9mZnNldEZvckNlbnRlcmluZ1kgLSBwYWdlQm94
LnkoKSAtIHBhZ2VCb3guaGVpZ2h0KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTE0NDE0KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nzk3LDggKzI3OTcsOCBAQCB2b2lkIFdlYlBhZ2U6OnN0b3BTcGVha2luZygpCiAKICNlbmRpZgog
Ci0jaWYgVVNFKENHKQotc3RhdGljIFJldGFpblB0cjxDR1BERkRvY3VtZW50UmVmPiBwZGZEb2N1
bWVudEZvclByaW50aW5nRnJhbWUoRnJhbWUqIGNvcmVGcmFtZSkKKyNpZiBQTEFURk9STShNQUMp
CitSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IFdlYlBhZ2U6OnBkZkRvY3VtZW50Rm9yUHJpbnRpbmdG
cmFtZShGcmFtZSogY29yZUZyYW1lKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVG
cmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQpAQCAtMjgxMyw3ICsyODEzLDcg
QEAgc3RhdGljIFJldGFpblB0cjxDR1BERkRvY3VtZW50UmVmPiBwZGZEbwogCiAgICAgcmV0dXJu
IHBsdWdpblZpZXctPnBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKTsKIH0KLSNlbmRpZiAvLyBVU0Uo
Q0cpCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiB2b2lkIFdlYlBhZ2U6OmJlZ2luUHJpbnRp
bmcodWludDY0X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8pCiB7CkBAIC0y
ODI1LDEwICsyODI1LDEwIEBAIHZvaWQgV2ViUGFnZTo6YmVnaW5QcmludGluZyh1aW50NjRfdCBm
cmEKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNFKENHKQor
I2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAocGRmRG9jdW1lbnRGb3JQcmludGluZ0ZyYW1lKGNv
cmVGcmFtZSkpCiAgICAgICAgIHJldHVybjsKLSNlbmRpZiAvLyBVU0UoQ0cpCisjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQogCiAgICAgaWYgKCFtX3ByaW50Q29udGV4dCkKICAgICAgICAgbV9wcmlu
dENvbnRleHQgPSBhZG9wdFB0cihuZXcgUHJpbnRDb250ZXh0KGNvcmVGcmFtZSkpOwpAQCAtMjg2
NSwyMSArMjg2NSwxMCBAQCB2b2lkIFdlYlBhZ2U6OmNvbXB1dGVQYWdlc0ZvclByaW50aW5nKHVp
CiAgICAgICAgIHJlc3VsdFBhZ2VSZWN0cyA9IG1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdHMoKTsK
ICAgICAgICAgcmVzdWx0VG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nID0gbV9wcmludENvbnRl
eHQtPmNvbXB1dGVBdXRvbWF0aWNTY2FsZUZhY3RvcihGbG9hdFNpemUocHJpbnRJbmZvLmF2YWls
YWJsZVBhcGVyV2lkdGgsIHByaW50SW5mby5hdmFpbGFibGVQYXBlckhlaWdodCkpICogcHJpbnRJ
bmZvLnBhZ2VTZXR1cFNjYWxlRmFjdG9yOwogICAgIH0KLSNpZiBVU0UoQ0cpCi0gICAgZWxzZSB7
Ci0gICAgICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1l
KGZyYW1lSUQpOwotICAgICAgICBGcmFtZSogY29yZUZyYW1lID0gZnJhbWUgPyBmcmFtZS0+Y29y
ZUZyYW1lKCkgOiAwOwotICAgICAgICBSZXRhaW5QdHI8Q0dQREZEb2N1bWVudFJlZj4gcGRmRG9j
dW1lbnQgPSBjb3JlRnJhbWUgPyBwZGZEb2N1bWVudEZvclByaW50aW5nRnJhbWUoY29yZUZyYW1l
KSA6IDA7Ci0gICAgICAgIGlmIChwZGZEb2N1bWVudCAmJiBDR1BERkRvY3VtZW50QWxsb3dzUHJp
bnRpbmcocGRmRG9jdW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBDRkluZGV4IHBhZ2VDb3Vu
dCA9IENHUERGRG9jdW1lbnRHZXROdW1iZXJPZlBhZ2VzKHBkZkRvY3VtZW50LmdldCgpKTsKLSAg
ICAgICAgICAgIEludFJlY3QgcGFnZVJlY3QoMCwgMCwgY2VpbGYocHJpbnRJbmZvLmF2YWlsYWJs
ZVBhcGVyV2lkdGgpLCBjZWlsZihwcmludEluZm8uYXZhaWxhYmxlUGFwZXJIZWlnaHQpKTsKLSAg
ICAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMTsgaSA8PSBwYWdlQ291bnQ7ICsraSkgewotICAg
ICAgICAgICAgICAgIHJlc3VsdFBhZ2VSZWN0cy5hcHBlbmQocGFnZVJlY3QpOwotICAgICAgICAg
ICAgICAgIHBhZ2VSZWN0Lm1vdmUoMCwgcGFnZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8vIFVTRShDRykKKyNpZiBQTEFURk9STShNQUMp
CisgICAgZWxzZQorICAgICAgICBjb21wdXRlUGFnZXNGb3JQcmludGluZ1BERkRvY3VtZW50KGZy
YW1lSUQsIHByaW50SW5mbywgcmVzdWx0UGFnZVJlY3RzKTsKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCiAKICAgICAvLyBJZiB3ZSdyZSBhc2tlZCB0byBwcmludCwgd2Ugc2hvdWxkIGFjdHVhbGx5
IHByaW50IGF0IGxlYXN0IGEgYmxhbmsgcGFnZS4KICAgICBpZiAocmVzdWx0UGFnZVJlY3RzLmlz
RW1wdHkoKSkKQEAgLTI4ODgsNDggKzI4NzcsNiBAQCB2b2lkIFdlYlBhZ2U6OmNvbXB1dGVQYWdl
c0ZvclByaW50aW5nKHVpCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDb21wdXRl
ZFBhZ2VzQ2FsbGJhY2socmVzdWx0UGFnZVJlY3RzLCByZXN1bHRUb3RhbFNjYWxlRmFjdG9yRm9y
UHJpbnRpbmcsIGNhbGxiYWNrSUQpKTsKIH0KIAotI2lmIFVTRShDRykKLXN0YXRpYyBpbmxpbmUg
Q0dGbG9hdCByb3VuZENHRmxvYXQoQ0dGbG9hdCBmKQotewotICAgIGlmIChzaXplb2YoQ0dGbG9h
dCkgPT0gc2l6ZW9mKGZsb2F0KSkKLSAgICAgICAgcmV0dXJuIHJvdW5kZihzdGF0aWNfY2FzdDxm
bG9hdD4oZikpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDR0Zsb2F0Pihyb3VuZChmKSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGRyYXdQREZQYWdlKENHUERGRG9jdW1lbnRSZWYgcGRmRG9jdW1lbnQs
IENGSW5kZXggcGFnZUluZGV4LCBDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCBwYWdlU2V0
dXBTY2FsZUZhY3RvciwgQ0dTaXplIHBhcGVyU2l6ZSkKLXsKLSAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKGNvbnRleHQpOwotCi0gICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgcGFnZVNldHVw
U2NhbGVGYWN0b3IsIHBhZ2VTZXR1cFNjYWxlRmFjdG9yKTsKLQotICAgIENHUERGUGFnZVJlZiBw
YWdlID0gQ0dQREZEb2N1bWVudEdldFBhZ2UocGRmRG9jdW1lbnQsIHBhZ2VJbmRleCArIDEpOwot
ICAgIENHUmVjdCBjcm9wQm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwYWdlLCBrQ0dQREZDcm9w
Qm94KTsKLSAgICBpZiAoQ0dSZWN0SXNFbXB0eShjcm9wQm94KSkKLSAgICAgICAgY3JvcEJveCA9
IENHUmVjdEludGVyc2VjdGlvbihjcm9wQm94LCBDR1BERlBhZ2VHZXRCb3hSZWN0KHBhZ2UsIGtD
R1BERk1lZGlhQm94KSk7Ci0gICAgZWxzZQotICAgICAgICBjcm9wQm94ID0gQ0dQREZQYWdlR2V0
Qm94UmVjdChwYWdlLCBrQ0dQREZNZWRpYUJveCk7Ci0KLSAgICBib29sIHNob3VsZFJvdGF0ZSA9
IChwYXBlclNpemUud2lkdGggPCBwYXBlclNpemUuaGVpZ2h0KSAhPSAoY3JvcEJveC5zaXplLndp
ZHRoIDwgY3JvcEJveC5zaXplLmhlaWdodCk7Ci0gICAgaWYgKHNob3VsZFJvdGF0ZSkKLSAgICAg
ICAgc3dhcChjcm9wQm94LnNpemUud2lkdGgsIGNyb3BCb3guc2l6ZS5oZWlnaHQpOwotCi0gICAg
Ly8gQ2VudGVyLgotICAgIENHRmxvYXQgd2lkdGhEaWZmZXJlbmNlID0gcGFwZXJTaXplLndpZHRo
IC8gcGFnZVNldHVwU2NhbGVGYWN0b3IgLSBjcm9wQm94LnNpemUud2lkdGg7Ci0gICAgQ0dGbG9h
dCBoZWlnaHREaWZmZXJlbmNlID0gcGFwZXJTaXplLmhlaWdodCAvIHBhZ2VTZXR1cFNjYWxlRmFj
dG9yIC0gY3JvcEJveC5zaXplLmhlaWdodDsKLSAgICBpZiAod2lkdGhEaWZmZXJlbmNlIHx8IGhl
aWdodERpZmZlcmVuY2UpCi0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBy
b3VuZENHRmxvYXQod2lkdGhEaWZmZXJlbmNlIC8gMiksIHJvdW5kQ0dGbG9hdChoZWlnaHREaWZm
ZXJlbmNlIC8gMikpOwotCi0gICAgaWYgKHNob3VsZFJvdGF0ZSkgewotICAgICAgICBDR0NvbnRl
eHRSb3RhdGVDVE0oY29udGV4dCwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4ocGlPdmVyVHdvRG91Ymxl
KSk7Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtY3JvcEJveC5z
aXplLndpZHRoKTsKLSAgICB9Ci0KLSAgICBDR0NvbnRleHREcmF3UERGUGFnZShjb250ZXh0LCBw
YWdlKTsKLQotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Ci19Ci0jZW5kaWYg
Ly8gVVNFKENHKQotCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4pCiB2b2lkIFdl
YlBhZ2U6OmRyYXdSZWN0VG9QREYodWludDY0X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBw
cmludEluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QsIHVpbnQ2NF90IGNhbGxiYWNr
SUQpCiB7CkBAIC0yOTM5LDEyICsyODg2LDExIEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1JlY3RUb1BE
Rih1aW50NjRfdCBmcmEKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gcGRmUGFnZURh
dGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CiAKICAgICBpZiAoY29yZUZy
YW1lKSB7Ci0jaWYgIVVTRShDRykKLSAgICAgICAgVU5VU0VEX1BBUkFNKHByaW50SW5mbyk7Ci0K
LSAgICAgICAgQVNTRVJUKGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSk7Ci0jZWxz
ZQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgQVNTRVJUKGNvcmVGcmFtZS0+ZG9jdW1lbnQo
KS0+cHJpbnRpbmcoKSB8fCBwZGZEb2N1bWVudEZvclByaW50aW5nRnJhbWUoY29yZUZyYW1lKSk7
CisjZWxzZQorICAgICAgICBBU1NFUlQoY29yZUZyYW1lLT5kb2N1bWVudCgpLT5wcmludGluZygp
KTsKKyNlbmRpZgogCiAgICAgICAgIC8vIEZJWE1FOiBVc2UgQ0dEYXRhQ29uc3VtZXJDcmVhdGUg
d2l0aCBjYWxsYmFja3MgdG8gYXZvaWQgY29weWluZyB0aGUgZGF0YS4KICAgICAgICAgUmV0YWlu
UHRyPENHRGF0YUNvbnN1bWVyUmVmPiBwZGZEYXRhQ29uc3VtZXIoQWRvcHRDRiwgQ0dEYXRhQ29u
c3VtZXJDcmVhdGVXaXRoQ0ZEYXRhKHBkZlBhZ2VEYXRhLmdldCgpKSk7CkBAIC0yOTU0LDIyICsy
OTAwLDEzIEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1JlY3RUb1BERih1aW50NjRfdCBmcmEKICAgICAg
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcGFnZUluZm8oQWRvcHRDRiwgQ0ZEaWN0aW9u
YXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgICAgIENHUERGQ29udGV4dEJl
Z2luUGFnZShjb250ZXh0LmdldCgpLCBwYWdlSW5mby5nZXQoKSk7CiAKLSAgICAgICAgaWYgKFJl
dGFpblB0cjxDR1BERkRvY3VtZW50UmVmPiBwZGZEb2N1bWVudCA9IHBkZkRvY3VtZW50Rm9yUHJp
bnRpbmdGcmFtZShjb3JlRnJhbWUpKSB7Ci0gICAgICAgICAgICBDRkluZGV4IHBhZ2VDb3VudCA9
IENHUERGRG9jdW1lbnRHZXROdW1iZXJPZlBhZ2VzKHBkZkRvY3VtZW50LmdldCgpKTsKLSAgICAg
ICAgICAgIEludFNpemUgcGFwZXJTaXplKGNlaWxmKHByaW50SW5mby5hdmFpbGFibGVQYXBlcldp
ZHRoKSwgY2VpbGYocHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVySGVpZ2h0KSk7Ci0gICAgICAgICAg
ICBJbnRSZWN0IHBhZ2VSZWN0KEludFBvaW50KCksIHBhcGVyU2l6ZSk7Ci0gICAgICAgICAgICBm
b3IgKENGSW5kZXggaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAg
IGlmIChwYWdlUmVjdC5pbnRlcnNlY3RzKHJlY3QpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENH
Q29udGV4dFNhdmVHU3RhdGUoY29udGV4dC5nZXQoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQuZ2V0KCksIHBhZ2VSZWN0LngoKSAtIHJlY3Qu
eCgpLCBwYWdlUmVjdC55KCkgLSByZWN0LnkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRyYXdQ
REZQYWdlKHBkZkRvY3VtZW50LmdldCgpLCBpLCBjb250ZXh0LmdldCgpLCBwcmludEluZm8ucGFn
ZVNldHVwU2NhbGVGYWN0b3IsIHBhcGVyU2l6ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQ0dD
b250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0LmdldCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcGFnZVJlY3QubW92ZSgwLCBwYWdlUmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBp
ZiAoUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudCA9IHBkZkRvY3VtZW50Rm9yUHJp
bnRpbmdGcmFtZShjb3JlRnJhbWUpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fcHJpbnRDb250
ZXh0KTsKKyAgICAgICAgICAgIGRyYXdSZWN0VG9QREZGcm9tUERGRG9jdW1lbnQoY29udGV4dC5n
ZXQoKSwgcGRmRG9jdW1lbnQuZ2V0KCksIHByaW50SW5mbywgcmVjdCk7CisgICAgICAgIH0gZWxz
ZQorI2VuZGlmCisgICAgICAgIHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjdHgoY29u
dGV4dC5nZXQoKSk7CiAgICAgICAgICAgICBjdHguc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAg
ICAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIC1yZWN0LmhlaWdodCgpKTsKQEAgLTI5NzgsNyAr
MjkxNSw2IEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1JlY3RUb1BERih1aW50NjRfdCBmcmEKIAogICAg
ICAgICBDR1BERkNvbnRleHRFbmRQYWdlKGNvbnRleHQuZ2V0KCkpOwogICAgICAgICBDR1BERkNv
bnRleHRDbG9zZShjb250ZXh0LmdldCgpKTsKLSNlbmRpZgogICAgIH0KIAogICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGF0YUNhbGxiYWNrKENvcmVJUEM6OkRhdGFSZWZlcmVuY2Uo
Q0ZEYXRhR2V0Qnl0ZVB0cihwZGZQYWdlRGF0YS5nZXQoKSksIENGRGF0YUdldExlbmd0aChwZGZQ
YWdlRGF0YS5nZXQoKSkpLCBjYWxsYmFja0lEKSk7CkBAIC0yOTkzLDQ0ICsyOTI5LDQ5IEBAIHZv
aWQgV2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREYodWludDY0X3QgZnIKIAogICAgIGlmIChjb3JlRnJh
bWUpIHsKIAotI2lmICFVU0UoQ0cpCi0gICAgICAgIEFTU0VSVChjb3JlRnJhbWUtPmRvY3VtZW50
KCktPnByaW50aW5nKCkpOwotI2Vsc2UKKyNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIEFTU0VS
VChjb3JlRnJhbWUtPmRvY3VtZW50KCktPnByaW50aW5nKCkgfHwgcGRmRG9jdW1lbnRGb3JQcmlu
dGluZ0ZyYW1lKGNvcmVGcmFtZSkpOwotCi0gICAgICAgIFJldGFpblB0cjxDR1BERkRvY3VtZW50
UmVmPiBwZGZEb2N1bWVudCA9IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmdGcmFtZShjb3JlRnJhbWUp
OworI2Vsc2UKKyAgICAgICAgQVNTRVJUKGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmco
KSk7CisjZW5kaWYKIAogICAgICAgICAvLyBGSVhNRTogVXNlIENHRGF0YUNvbnN1bWVyQ3JlYXRl
IHdpdGggY2FsbGJhY2tzIHRvIGF2b2lkIGNvcHlpbmcgdGhlIGRhdGEuCiAgICAgICAgIFJldGFp
blB0cjxDR0RhdGFDb25zdW1lclJlZj4gcGRmRGF0YUNvbnN1bWVyKEFkb3B0Q0YsIENHRGF0YUNv
bnN1bWVyQ3JlYXRlV2l0aENGRGF0YShwZGZQYWdlRGF0YS5nZXQoKSkpOwogCi0gICAgICAgIENH
UmVjdCBtZWRpYUJveCA9IG1fcHJpbnRDb250ZXh0ICYmIG1fcHJpbnRDb250ZXh0LT5wYWdlQ291
bnQoKSA/IG1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdCgwKSA6IENHUmVjdE1ha2UoMCwgMCwgcHJp
bnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50SW5mby5hdmFpbGFibGVQYXBlckhlaWdo
dCk7CisgICAgICAgIENHUmVjdCBtZWRpYUJveCA9IChtX3ByaW50Q29udGV4dCAmJiBtX3ByaW50
Q29udGV4dC0+cGFnZUNvdW50KCkpID8gbV9wcmludENvbnRleHQtPnBhZ2VSZWN0KDApIDogQ0dS
ZWN0TWFrZSgwLCAwLCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2
YWlsYWJsZVBhcGVySGVpZ2h0KTsKICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29u
dGV4dChBZG9wdENGLCBDR1BERkNvbnRleHRDcmVhdGUocGRmRGF0YUNvbnN1bWVyLmdldCgpLCAm
bWVkaWFCb3gsIDApKTsKLSAgICAgICAgc2l6ZV90IHBhZ2VDb3VudCA9IG1fcHJpbnRDb250ZXh0
ID8gbV9wcmludENvbnRleHQtPnBhZ2VDb3VudCgpIDogQ0dQREZEb2N1bWVudEdldE51bWJlck9m
UGFnZXMocGRmRG9jdW1lbnQuZ2V0KCkpOwotICAgICAgICBmb3IgKHVpbnQzMl90IHBhZ2UgPSBm
aXJzdDsgcGFnZSA8IGZpcnN0ICsgY291bnQ7ICsrcGFnZSkgewotICAgICAgICAgICAgaWYgKHBh
Z2UgPj0gcGFnZUNvdW50KQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwYWdlSW5mbyhBZG9wdENGLCBDRkRpY3Rpb25hcnlD
cmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgICAgIENHUERGQ29udGV4dEJl
Z2luUGFnZShjb250ZXh0LmdldCgpLCBwYWdlSW5mby5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGlm
IChwZGZEb2N1bWVudCkKLSAgICAgICAgICAgICAgICBkcmF3UERGUGFnZShwZGZEb2N1bWVudC5n
ZXQoKSwgcGFnZSwgY29udGV4dC5nZXQoKSwgcHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFjdG9y
LCBDR1NpemVNYWtlKHByaW50SW5mby5hdmFpbGFibGVQYXBlcldpZHRoLCBwcmludEluZm8uYXZh
aWxhYmxlUGFwZXJIZWlnaHQpKTsKLSAgICAgICAgICAgIGVsc2UgeworCisjaWYgUExBVEZPUk0o
TUFDKQorICAgICAgICBpZiAoUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudCA9IHBk
ZkRvY3VtZW50Rm9yUHJpbnRpbmdGcmFtZShjb3JlRnJhbWUpKSB7CisgICAgICAgICAgICBBU1NF
UlQoIW1fcHJpbnRDb250ZXh0KTsKKyAgICAgICAgICAgIGRyYXdQYWdlc1RvUERGRnJvbVBERkRv
Y3VtZW50KGNvbnRleHQuZ2V0KCksIHBkZkRvY3VtZW50LmdldCgpLCBwcmludEluZm8sIGZpcnN0
LCBjb3VudCk7CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAg
IHNpemVfdCBwYWdlQ291bnQgPSBtX3ByaW50Q29udGV4dC0+cGFnZUNvdW50KCk7CisgICAgICAg
ICAgICBmb3IgKHVpbnQzMl90IHBhZ2UgPSBmaXJzdDsgcGFnZSA8IGZpcnN0ICsgY291bnQ7ICsr
cGFnZSkgeworICAgICAgICAgICAgICAgIGlmIChwYWdlID49IHBhZ2VDb3VudCkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiBwYWdlSW5mbyhBZG9wdENGLCBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDAs
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpKTsKKyAgICAgICAgICAgICAgICBDR1BERkNvbnRleHRCZWdpblBhZ2UoY29udGV4
dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkpOworCiAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGN0eChjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgICAgICBjdHguc2NhbGUoRmxvYXRT
aXplKDEsIC0xKSk7CiAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAtbV9wcmludENv
bnRleHQtPnBhZ2VSZWN0KHBhZ2UpLmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICBtX3ByaW50
Q29udGV4dC0+c3Bvb2xQYWdlKGN0eCwgcGFnZSwgbV9wcmludENvbnRleHQtPnBhZ2VSZWN0KHBh
Z2UpLndpZHRoKCkpOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDR1BERkNvbnRleHRF
bmRQYWdlKGNvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAgICAgIENHUERGQ29udGV4dEVuZFBh
Z2UoY29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgQ0dQ
REZDb250ZXh0Q2xvc2UoY29udGV4dC5nZXQoKSk7Ci0jZW5kaWYKICAgICB9CiAKICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRhdGFDYWxsYmFjayhDb3JlSVBDOjpEYXRhUmVmZXJl
bmNlKENGRGF0YUdldEJ5dGVQdHIocGRmUGFnZURhdGEuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgo
cGRmUGFnZURhdGEuZ2V0KCkpKSwgY2FsbGJhY2tJRCkpOwogfQorCiAjZWxpZiBQTEFURk9STShH
VEspCisKIHZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VzRm9yUHJpbnRpbmcodWludDY0X3QgZnJhbWVJ
RCwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAg
ICAgYmVnaW5QcmludGluZyhmcmFtZUlELCBwcmludEluZm8pOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAxMTQ0MTQpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MzUsNiArNjM1LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFdpbmRvd0lzVmlz
aWJsZShib29sIHdpbmRvd0lzVmlzaWJsZSk7CiAgICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVz
Q2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRp
bmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0
ZXMsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVz
KTsKKworICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZ0Zy
YW1lKFdlYkNvcmU6OkZyYW1lKik7CisgICAgdm9pZCBjb21wdXRlUGFnZXNGb3JQcmludGluZ1BE
RkRvY3VtZW50KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYsIFZlY3RvcjxXZWJD
b3JlOjpJbnRSZWN0PiYgcmVzdWx0UGFnZVJlY3RzKTsKKyAgICB2b2lkIGRyYXdSZWN0VG9QREZG
cm9tUERGRG9jdW1lbnQoQ0dDb250ZXh0UmVmLCBQREZEb2N1bWVudCAqLCBjb25zdCBQcmludElu
Zm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBkcmF3UGFnZXNUb1BERkZy
b21QREZEb2N1bWVudChDR0NvbnRleHRSZWYsIFBERkRvY3VtZW50ICosIGNvbnN0IFByaW50SW5m
byYsIHVpbnQzMl90IGZpcnN0LCB1aW50MzJfdCBjb3VudCk7CiAjZW5kaWYKIAogICAgIHZvaWQg
dW5hcHBseUVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZp
c2lvbiAxMTQ0MTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDkgQEAKICNp
bXBvcnQgIkF0dHJpYnV0ZWRTdHJpbmcuaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bXBvcnQgIkVkaXRvclN0YXRlLmgiCisjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCiAjaW1wb3J0
ICJQbHVnaW5WaWV3LmgiCisjaW1wb3J0ICJQcmludEluZm8uaCIKICNpbXBvcnQgIldLQWNjZXNz
aWJpbGl0eVdlYlBhZ2VPYmplY3QuaCIKICNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5o
IgogI2ltcG9ydCAiV2ViRXZlbnQuaCIKQEAgLTM5LDYgKzQxLDcgQEAKICNpbXBvcnQgIldlYlBh
Z2VQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgiCiAjaW1w
b3J0ICJXZWJQcm9jZXNzLmgiCisjaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CkBAIC01OCw2ICs2MSw3IEBACiAjaW1wb3J0
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNzE5LDQgKzcy
MywxMTIgQEAgdm9pZCBXZWJQYWdlOjpzZXRMYXllckhvc3RpbmdNb2RlKExheWVySAogICAgICAg
ICAoKml0KS0+c2V0TGF5ZXJIb3N0aW5nTW9kZShsYXllckhvc3RpbmdNb2RlKTsKIH0KIAordm9p
ZCBXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQcmludGluZ1BERkRvY3VtZW50KHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvLCBWZWN0b3I8SW50UmVjdD4mIHJlc3Vs
dFBhZ2VSZWN0cykKK3sKKyAgICBBU1NFUlQocmVzdWx0UGFnZVJlY3RzLmlzRW1wdHkoKSk7Cisg
ICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJhbWVJ
RCk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1lID8gZnJhbWUtPmNvcmVGcmFtZSgpIDog
MDsKKyAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50ID0gY29yZUZyYW1lID8g
cGRmRG9jdW1lbnRGb3JQcmludGluZ0ZyYW1lKGNvcmVGcmFtZSkgOiAwOworICAgIGlmIChbcGRm
RG9jdW1lbnQuZ2V0KCkgYWxsb3dzUHJpbnRpbmddKSB7CisgICAgICAgIE5TVUludGVnZXIgcGFn
ZUNvdW50ID0gW3BkZkRvY3VtZW50LmdldCgpIHBhZ2VDb3VudF07CisgICAgICAgIEludFJlY3Qg
cGFnZVJlY3QoMCwgMCwgY2VpbGYocHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgpLCBjZWls
ZihwcmludEluZm8uYXZhaWxhYmxlUGFwZXJIZWlnaHQpKTsKKyAgICAgICAgZm9yIChOU1VJbnRl
Z2VyIGkgPSAxOyBpIDw9IHBhZ2VDb3VudDsgKytpKSB7CisgICAgICAgICAgICByZXN1bHRQYWdl
UmVjdHMuYXBwZW5kKHBhZ2VSZWN0KTsKKyAgICAgICAgICAgIHBhZ2VSZWN0Lm1vdmUoMCwgcGFn
ZVJlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIENH
RmxvYXQgcm91bmRDR0Zsb2F0KENHRmxvYXQgZikKK3sKKyAgICBpZiAoc2l6ZW9mKENHRmxvYXQp
ID09IHNpemVvZihmbG9hdCkpCisgICAgICAgIHJldHVybiByb3VuZGYoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0dGbG9hdD4ocm91bmQoZikpOworfQor
CitzdGF0aWMgdm9pZCBkcmF3UERGUGFnZShQREZEb2N1bWVudCAqcGRmRG9jdW1lbnQsIENGSW5k
ZXggcGFnZUluZGV4LCBDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCBwYWdlU2V0dXBTY2Fs
ZUZhY3RvciwgQ0dTaXplIHBhcGVyU2l6ZSkKK3sKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNv
bnRleHQpOworCisgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgcGFnZVNldHVwU2NhbGVG
YWN0b3IsIHBhZ2VTZXR1cFNjYWxlRmFjdG9yKTsKKworICAgIFBERlBhZ2UgKnBkZlBhZ2UgPSBb
cGRmRG9jdW1lbnQgcGFnZUF0SW5kZXg6cGFnZUluZGV4XTsKKyAgICBOU1JlY3QgY3JvcEJveCA9
IFtwZGZQYWdlIGJvdW5kc0ZvckJveDprUERGRGlzcGxheUJveENyb3BCb3hdOworICAgIGlmIChO
U0lzRW1wdHlSZWN0KGNyb3BCb3gpKQorICAgICAgICBjcm9wQm94ID0gW3BkZlBhZ2UgYm91bmRz
Rm9yQm94OmtQREZEaXNwbGF5Qm94TWVkaWFCb3hdOworICAgIGVsc2UKKyAgICAgICAgY3JvcEJv
eCA9IE5TSW50ZXJzZWN0aW9uUmVjdChjcm9wQm94LCBbcGRmUGFnZSBib3VuZHNGb3JCb3g6a1BE
RkRpc3BsYXlCb3hNZWRpYUJveF0pOworCisgICAgYm9vbCBzaG91bGRSb3RhdGUgPSAocGFwZXJT
aXplLndpZHRoIDwgcGFwZXJTaXplLmhlaWdodCkgIT0gKGNyb3BCb3guc2l6ZS53aWR0aCA8IGNy
b3BCb3guc2l6ZS5oZWlnaHQpOworICAgIGlmIChzaG91bGRSb3RhdGUpCisgICAgICAgIHN3YXAo
Y3JvcEJveC5zaXplLndpZHRoLCBjcm9wQm94LnNpemUuaGVpZ2h0KTsKKworICAgIC8vIENlbnRl
ci4KKyAgICBDR0Zsb2F0IHdpZHRoRGlmZmVyZW5jZSA9IHBhcGVyU2l6ZS53aWR0aCAvIHBhZ2VT
ZXR1cFNjYWxlRmFjdG9yIC0gY3JvcEJveC5zaXplLndpZHRoOworICAgIENHRmxvYXQgaGVpZ2h0
RGlmZmVyZW5jZSA9IHBhcGVyU2l6ZS5oZWlnaHQgLyBwYWdlU2V0dXBTY2FsZUZhY3RvciAtIGNy
b3BCb3guc2l6ZS5oZWlnaHQ7CisgICAgaWYgKHdpZHRoRGlmZmVyZW5jZSB8fCBoZWlnaHREaWZm
ZXJlbmNlKQorICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgcm91bmRDR0Zs
b2F0KHdpZHRoRGlmZmVyZW5jZSAvIDIpLCByb3VuZENHRmxvYXQoaGVpZ2h0RGlmZmVyZW5jZSAv
IDIpKTsKKworICAgIGlmIChzaG91bGRSb3RhdGUpIHsKKyAgICAgICAgQ0dDb250ZXh0Um90YXRl
Q1RNKGNvbnRleHQsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHBpT3ZlclR3b0RvdWJsZSkpOworICAg
ICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWNyb3BCb3guc2l6ZS53aWR0
aCk7CisgICAgfQorCisgICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsK
KyAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6W05TR3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Y29udGV4dCBmbGlwcGVkOk5PXV07
CisgICAgW3BkZlBhZ2UgZHJhd1dpdGhCb3g6a1BERkRpc3BsYXlCb3hDcm9wQm94XTsKKyAgICBb
TlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOworCisgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpOworCisgICAgZm9y
IChQREZBbm5vdGF0aW9uICphbm5vdGF0aW9uIGluIFtwZGZQYWdlIGFubm90YXRpb25zXSkgewor
ICAgICAgICBpZiAoIVthbm5vdGF0aW9uIGlzS2luZE9mQ2xhc3M6cGRmQW5ub3RhdGlvbkxpbmtD
bGFzcygpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFBERkFubm90YXRpb25M
aW5rICpsaW5rQW5ub3RhdGlvbiA9IChQREZBbm5vdGF0aW9uTGluayAqKWFubm90YXRpb247Cisg
ICAgICAgIE5TVVJMICp1cmwgPSBbbGlua0Fubm90YXRpb24gVVJMXTsKKyAgICAgICAgaWYgKCF1
cmwpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBDR1JlY3QgdXJsUmVjdCA9IE5T
UmVjdFRvQ0dSZWN0KFtsaW5rQW5ub3RhdGlvbiBib3VuZHNdKTsKKyAgICAgICAgQ0dSZWN0IHRy
YW5zZm9ybWVkUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHVybFJlY3QsIHRyYW5z
Zm9ybSk7CisgICAgICAgIENHUERGQ29udGV4dFNldFVSTEZvclJlY3QoY29udGV4dCwgKENGVVJM
UmVmKXVybCwgdHJhbnNmb3JtZWRSZWN0KTsKKyAgICB9CisKKyAgICBDR0NvbnRleHRSZXN0b3Jl
R1N0YXRlKGNvbnRleHQpOworfQorCit2b2lkIFdlYlBhZ2U6OmRyYXdSZWN0VG9QREZGcm9tUERG
RG9jdW1lbnQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFBERkRvY3VtZW50ICpwZGZEb2N1bWVudCwg
Y29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3Qp
Cit7CisgICAgTlNVSW50ZWdlciBwYWdlQ291bnQgPSBbcGRmRG9jdW1lbnQgcGFnZUNvdW50XTsK
KyAgICBJbnRTaXplIHBhcGVyU2l6ZShjZWlsZihwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0
aCksIGNlaWxmKHByaW50SW5mby5hdmFpbGFibGVQYXBlckhlaWdodCkpOworICAgIEludFJlY3Qg
cGFnZVJlY3QoSW50UG9pbnQoKSwgcGFwZXJTaXplKTsKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9
IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgeworICAgICAgICBpZiAocGFnZVJlY3QuaW50ZXJzZWN0
cyhyZWN0KSkgeworICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKwor
ICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIHBhZ2VSZWN0LngoKSAt
IHJlY3QueCgpLCBwYWdlUmVjdC55KCkgLSByZWN0LnkoKSk7CisgICAgICAgICAgICBkcmF3UERG
UGFnZShwZGZEb2N1bWVudCwgaSwgY29udGV4dCwgcHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFj
dG9yLCBwYXBlclNpemUpOworCisgICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNv
bnRleHQpOworICAgICAgICB9CisgICAgICAgIHBhZ2VSZWN0Lm1vdmUoMCwgcGFnZVJlY3QuaGVp
Z2h0KCkpOworICAgIH0KK30KKwordm9pZCBXZWJQYWdlOjpkcmF3UGFnZXNUb1BERkZyb21QREZE
b2N1bWVudChDR0NvbnRleHRSZWYgY29udGV4dCwgUERGRG9jdW1lbnQgKnBkZkRvY3VtZW50LCBj
b25zdCBQcmludEluZm8mIHByaW50SW5mbywgdWludDMyX3QgZmlyc3QsIHVpbnQzMl90IGNvdW50
KQoreworICAgIE5TVUludGVnZXIgcGFnZUNvdW50ID0gW3BkZkRvY3VtZW50IHBhZ2VDb3VudF07
CisgICAgZm9yICh1aW50MzJfdCBwYWdlID0gZmlyc3Q7IHBhZ2UgPCBmaXJzdCArIGNvdW50OyAr
K3BhZ2UpIHsKKyAgICAgICAgaWYgKHBhZ2UgPj0gcGFnZUNvdW50KQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcGFnZUluZm8oQWRvcHRD
RiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICAgICAg
Q0dQREZDb250ZXh0QmVnaW5QYWdlKGNvbnRleHQsIHBhZ2VJbmZvLmdldCgpKTsKKyAgICAgICAg
ZHJhd1BERlBhZ2UocGRmRG9jdW1lbnQsIHBhZ2UsIGNvbnRleHQsIHByaW50SW5mby5wYWdlU2V0
dXBTY2FsZUZhY3RvciwgQ0dTaXplTWFrZShwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwg
cHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVySGVpZ2h0KSk7CisgICAgICAgIENHUERGQ29udGV4dEVu
ZFBhZ2UoY29udGV4dCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
      

    </bug>

</bugzilla>