<?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>129270</bug_id>
          
          <creation_ts>2014-02-24 13:27:24 -0800</creation_ts>
          <short_desc>Remove PDFViewController.*, which is unused</short_desc>
          <delta_ts>2014-02-24 13:31:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>984035</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 13:27:24 -0800</bug_when>
    <thetext>Remove PDFViewController.*, which is unused</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984036</commentid>
    <comment_count>1</comment_count>
      <attachid>225090</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 13:28:07 -0800</bug_when>
    <thetext>Created attachment 225090
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984039</commentid>
    <comment_count>2</comment_count>
      <attachid>225090</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 13:31:49 -0800</bug_when>
    <thetext>Comment on attachment 225090
Patch

Tim said yeah.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984040</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 13:31:53 -0800</bug_when>
    <thetext>https://trac.webkit.org/r164605</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225090</attachid>
            <date>2014-02-24 13:28:07 -0800</date>
            <delta_ts>2014-02-24 13:31:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129270-20140224132803.patch</filename>
            <type>text/plain</type>
            <size>28417</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYWNmZDVjMTA0YjkwNWEx
MzY2MzA3OTRmYTIzMzgwNmEzYzA4ZDAwYS4uMzEwOWU3OTI3MGNiY2MyNmVjZDQ4ZDg5ODU3ZmQz
MTI1YjRjYWU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE0LTAyLTI0ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIFJlbW92ZSBQREZW
aWV3Q29udHJvbGxlci4qLCB3aGljaCBpcyB1bnVzZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTI3MAorCisgICAgICAgIFJldmlld2VkIGJ5IFRp
bSBIb3J0b24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BERlZpZXdDb250cm9sbGVyLmg6
IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QREZWaWV3Q29udHJvbGxlci5tbTog
UmVtb3ZlZC4KKworMjAxNC0wMi0yNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KKwogICAgICAgICBNb3ZlIG5vbi1BUEkgZmlsZXMgb3V0IG9mIFdlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyOTI2NwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BE
RlZpZXdDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BERlZpZXdD
b250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMGM2YWY4MDU0Zjc0
NzU1ZjQyODI2ZTdiMGY1M2NiYmExNjkzZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QREZWaWV3Q29u
dHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgUERGVmlld0NvbnRyb2xsZXJfaAotI2RlZmluZSBQREZWaWV3Q29udHJvbGxl
cl9oCi0KLSNpbmNsdWRlICJXZWJGaW5kT3B0aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLUBjbGFzcyBQREZWaWV3OwotQGNsYXNzIFdLVmlldzsKLUBjbGFzcyBXS1BE
RlZpZXc7Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgRGF0YVJlZmVyZW5jZTsKLX0KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLQotY2xhc3MgUERGVmlld0Nv
bnRyb2xsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBERlZpZXdDb250cm9sbGVyKTsK
LQotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBERlZpZXdDb250cm9sbGVyPiBjcmVh
dGUoV0tWaWV3ICopOwotICAgIH5QREZWaWV3Q29udHJvbGxlcigpOwotCi0gICAgV0tWaWV3KiB3
a1ZpZXcoKSBjb25zdCB7IHJldHVybiBtX3drVmlldzsgfQotICAgIFdlYlBhZ2VQcm94eSogcGFn
ZSgpIGNvbnN0OwotICAgIE5TVmlldyogcGRmVmlldygpIGNvbnN0OwotICAgIAotICAgIHZvaWQg
c2V0UERGRG9jdW1lbnREYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwotCi0gICAgZG91
YmxlIHpvb21GYWN0b3IoKSBjb25zdDsKLSAgICB2b2lkIHNldFpvb21GYWN0b3IoZG91YmxlKTsK
LQotICAgIHN0YXRpYyBDbGFzcyBwZGZQcmV2aWV3Vmlld0NsYXNzKCk7Ci0KLSAgICBib29sIGZv
cndhcmRTY3JvbGxXaGVlbEV2ZW50KE5TRXZlbnQgKik7Ci0KLSAgICBOU1ByaW50T3BlcmF0aW9u
ICptYWtlUHJpbnRPcGVyYXRpb24oTlNQcmludEluZm8gKik7Ci0gICAgdm9pZCBvcGVuUERGSW5G
aW5kZXIoKTsKLSAgICB2b2lkIHNhdmVQREZUb0Rvd25sb2Fkc0ZvbGRlcigpOwotICAgIHZvaWQg
bGlua0NsaWNrZWQoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgcHJpbnQoKTsKLQotICAg
IHZvaWQgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4
TWF0Y2hDb3VudCk7Ci0gICAgdm9pZCBjb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwg
RmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IFBERlZpZXdDb250cm9sbGVyKFdLVmlldyAqKTsKLQotICAgIHN0YXRpYyBDbGFzcyBw
ZGZEb2N1bWVudENsYXNzKCk7Ci0gICAgc3RhdGljIE5TQnVuZGxlKiBwZGZLaXRCdW5kbGUoKTsK
LQotICAgIFdLVmlldyogbV93a1ZpZXc7Ci0KLSAgICBSZXRhaW5QdHI8V0tQREZWaWV3PiBtX3dr
UERGVmlldzsKLSAgICBQREZWaWV3KiBtX3BkZlZpZXc7Ci0KLSAgICBSZXRhaW5QdHI8TlNTdHJp
bmc+IG1fc3VnZ2VzdGVkRmlsZW5hbWU7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbV9wZGZE
YXRhOwotCi0gICAgU3RyaW5nIG1fdGVtcG9yYXJ5UERGVVVJRDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUERGVmlld0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QREZWaWV3Q29udHJvbGxlci5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUERGVmlld0NvbnRyb2xsZXIubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDFmMWJhMzk1ZWFmZDQ4MGQ1YzMwNDE2YjNiMWE2ODg4MjMwNzI5
ZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9QREZWaWV3Q29udHJvbGxlci5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDY3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJQREZWaWV3Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJEYXRhUmVmZXJlbmNl
LmgiCi0jaW1wb3J0ICJXS0FQSUNhc3QuaCIKLSNpbXBvcnQgIldLVmlld1ByaXZhdGUuaCIKLSNp
bXBvcnQgIldlYkRhdGEuaCIKLSNpbXBvcnQgIldlYkV2ZW50RmFjdG9yeS5oIgotI2ltcG9ydCAi
V2ViUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIldlYlBy
ZWZlcmVuY2VzLmgiCi0jaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0xvY2FsaXplZFN0cmluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVVVJRC5oPgotI2ltcG9ydCA8
d3RmL09iamNSdW50aW1lRXh0cmFzLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0j
aW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotLy8gUmVkZWNsYXJhdGlvbnMgb2YgUERG
S2l0IG5vdGlmaWNhdGlvbnMuIFdlIGNhbid0IHVzZSB0aGUgQVBJIHNpbmNlIHdlIHVzZSBhIHdl
YWsgbGluayB0byB0aGUgZnJhbWV3b3JrLgotI2RlZmluZSBfd2Via2l0X1BERlZpZXdEaXNwbGF5
TW9kZUNoYW5nZWROb3RpZmljYXRpb24gQCJQREZWaWV3RGlzcGxheU1vZGVDaGFuZ2VkIgotI2Rl
ZmluZSBfd2Via2l0X1BERlZpZXdTY2FsZUNoYW5nZWROb3RpZmljYXRpb24gQCJQREZWaWV3U2Nh
bGVDaGFuZ2VkIgotI2RlZmluZSBfd2Via2l0X1BERlZpZXdQYWdlQ2hhbmdlZE5vdGlmaWNhdGlv
biBAIlBERlZpZXdDaGFuZ2VkUGFnZSIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1AY2xhc3MgUERGRG9jdW1lbnQ7Ci1AY2xhc3MgUERGVmll
dzsKLQotQGludGVyZmFjZSBQREZEb2N1bWVudCAoUERGRG9jdW1lbnREZXRhaWxzKQotLSAoTlNQ
cmludE9wZXJhdGlvbiAqKWdldFByaW50T3BlcmF0aW9uRm9yUHJpbnRJbmZvOihOU1ByaW50SW5m
byAqKXByaW50SW5mbyBhdXRvUm90YXRlOihCT09MKWRvUm90YXRlOwotQGVuZAotCi1leHRlcm4g
IkMiIE5TU3RyaW5nICpfTlNQYXRoRm9yU3lzdGVtRnJhbWV3b3JrKE5TU3RyaW5nICpmcmFtZXdv
cmspOwotCi0vLyBNQVJLOiBDIFVUSUxJVFkgRlVOQ1RJT05TCi0KLXN0YXRpYyB2b2lkIF9hcHBs
aWNhdGlvbkluZm9Gb3JNSU1FVHlwZShOU1N0cmluZyAqdHlwZSwgTlNTdHJpbmcgKipuYW1lLCBO
U0ltYWdlICoqaW1hZ2UpCi17Ci0gICAgQVNTRVJUKG5hbWUpOwotICAgIEFTU0VSVChpbWFnZSk7
Ci0gICAgCi0gICAgQ0ZVUkxSZWYgYXBwVVJMID0gMDsKLQotICAgIE9TU3RhdHVzIGVycm9yID0g
TFNDb3B5QXBwbGljYXRpb25Gb3JNSU1FVHlwZSgoQ0ZTdHJpbmdSZWYpdHlwZSwga0xTUm9sZXNB
bGwsICZhcHBVUkwpOwotICAgIGlmIChlcnJvciAhPSBub0VycikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgTlNTdHJpbmcgKmFwcFBhdGggPSBbKE5TVVJMICopYXBwVVJMIHBhdGhdOwotICAgIGlm
IChhcHBVUkwpCi0gICAgICAgIENGUmVsZWFzZShhcHBVUkwpOwotCi0gICAgKmltYWdlID0gW1tO
U1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIGljb25Gb3JGaWxlOmFwcFBhdGhdOwotICAgIFsq
aW1hZ2Ugc2V0U2l6ZTpOU01ha2VTaXplKDE2LCAxNildOwotCi0gICAgKm5hbWUgPSBbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGRpc3BsYXlOYW1lQXRQYXRoOmFwcFBhdGhdOwotfQot
Ci0vLyBGSVhNRSA0MTgyODc2OiBXZSBjYW4gZWxpbWluYXRlIHRoaXMgZnVuY3Rpb24gaW4gZmF2
b3IgaWYgLWlzRXF1YWw6IGlmIFtQREZTZWxlY3Rpb24gaXNFcXVhbDpdIGlzIG92ZXJyaWRkZW4K
LS8vIHRvIGNvbXBhcmUgY29udGVudHMuCi1zdGF0aWMgQk9PTCBfUERGU2VsZWN0aW9uc0FyZUVx
dWFsKFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uQSwgUERGU2VsZWN0aW9uICpzZWxlY3Rpb25CKQot
ewotICAgIE5TQXJyYXkgKmFQYWdlcyA9IFtzZWxlY3Rpb25BIHBhZ2VzXTsKLSAgICBOU0FycmF5
ICpiUGFnZXMgPSBbc2VsZWN0aW9uQiBwYWdlc107Ci0KLSAgICBpZiAoIVthUGFnZXMgaXNFcXVh
bDpiUGFnZXNdKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0g
W2FQYWdlcyBjb3VudF07Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBOU1JlY3QgYUJvdW5kcyA9IFtzZWxlY3Rpb25BIGJvdW5kc0ZvclBhZ2U6
W2FQYWdlcyBvYmplY3RBdEluZGV4OmldXTsKLSAgICAgICAgTlNSZWN0IGJCb3VuZHMgPSBbc2Vs
ZWN0aW9uQiBib3VuZHNGb3JQYWdlOltiUGFnZXMgb2JqZWN0QXRJbmRleDppXV07Ci0gICAgICAg
IGlmICghTlNFcXVhbFJlY3RzKGFCb3VuZHMsIGJCb3VuZHMpKQotICAgICAgICAgICAgcmV0dXJu
IE5POwotICAgIH0KLQotICAgIHJldHVybiBZRVM7Ci19Ci0KLUBpbnRlcmZhY2UgV0tQREZWaWV3
IDogTlNWaWV3Ci17Ci0gICAgUERGVmlld0NvbnRyb2xsZXIqIF9wZGZWaWV3Q29udHJvbGxlcjsK
LQotICAgIFJldGFpblB0cjxOU1ZpZXc+IF9wZGZQcmV2aWV3VmlldzsKLSAgICBQREZWaWV3ICpf
cGRmVmlldzsKLSAgICBCT09MIF9pZ25vcmVTY2FsZUFuZERpc3BsYXlNb2RlQW5kUGFnZU5vdGlm
aWNhdGlvbnM7Ci0gICAgQk9PTCBfd2lsbFVwZGF0ZVByZWZlcmVuY2VzU29vbjsKLX0KLQotLSAo
aWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIFBERlZpZXdDb250cm9sbGVyOihQREZWaWV3
Q29udHJvbGxlciopcGRmVmlld0NvbnRyb2xsZXI7Ci0tICh2b2lkKWludmFsaWRhdGU7Ci0tIChQ
REZWaWV3ICopcGRmVmlldzsKLS0gKHZvaWQpc2V0RG9jdW1lbnQ6KFBERkRvY3VtZW50ICopcGRm
RG9jdW1lbnQ7Ci0KLS0gKEJPT0wpZm9yd2FyZFNjcm9sbFdoZWVsRXZlbnQ6KE5TRXZlbnQgKil3
aGVlbEV2ZW50OwotLSAodm9pZClfYXBwbHlQREZQcmVmZXJlbmNlczsKLS0gKFBERlNlbGVjdGlv
biAqKV9uZXh0TWF0Y2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3
YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZyBmcm9t
U2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilpbml0aWFsU2VsZWN0aW9uIHN0YXJ0SW5TZWxlY3Rp
b246KEJPT0wpc3RhcnRJblNlbGVjdGlvbjsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLUERG
VmlldwotCi0tIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgUERGVmlld0NvbnRyb2xs
ZXI6KFBERlZpZXdDb250cm9sbGVyKilwZGZWaWV3Q29udHJvbGxlcgotewotICAgIGlmICgoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXSkpIHsKLSAgICAgICAgX3BkZlZpZXdDb250
cm9sbGVyID0gcGRmVmlld0NvbnRyb2xsZXI7Ci0KLSAgICAgICAgW3NlbGYgc2V0QXV0b3Jlc2l6
aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlXTsKLQotICAg
ICAgICBDbGFzcyBwcmV2aWV3Vmlld0NsYXNzID0gUERGVmlld0NvbnRyb2xsZXI6OnBkZlByZXZp
ZXdWaWV3Q2xhc3MoKTsKLSAgICAgICAgQVNTRVJUKHByZXZpZXdWaWV3Q2xhc3MpOwotCi0gICAg
ICAgIF9wZGZQcmV2aWV3VmlldyA9IGFkb3B0TlMoW1twcmV2aWV3Vmlld0NsYXNzIGFsbG9jXSBp
bml0V2l0aEZyYW1lOmZyYW1lXSk7Ci0gICAgICAgIFtfcGRmUHJldmlld1ZpZXcuZ2V0KCkgc2V0
QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxl
XTsKLSAgICAgICAgW3NlbGYgYWRkU3VidmlldzpfcGRmUHJldmlld1ZpZXcuZ2V0KCldOwotCi0g
ICAgICAgIF9wZGZWaWV3ID0gW19wZGZQcmV2aWV3Vmlldy5nZXQoKSBwZXJmb3JtU2VsZWN0b3I6
QHNlbGVjdG9yKHBkZlZpZXcpXTsKLSAgICAgICAgW19wZGZWaWV3IHNldERlbGVnYXRlOnNlbGZd
OwotICAgIH0KLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsK
LSAgICBfcGRmVmlld0NvbnRyb2xsZXIgPSAwOwotfQotCi0tIChQREZWaWV3ICopcGRmVmlldwot
ewotICAgIHJldHVybiBfcGRmVmlldzsKLX0KLQotLSAodm9pZClzZXREb2N1bWVudDooUERGRG9j
dW1lbnQgKilwZGZEb2N1bWVudAotewotICAgIF9pZ25vcmVTY2FsZUFuZERpc3BsYXlNb2RlQW5k
UGFnZU5vdGlmaWNhdGlvbnMgPSBZRVM7Ci0gICAgW19wZGZWaWV3IHNldERvY3VtZW50OnBkZkRv
Y3VtZW50XTsKLSAgICBbc2VsZiBfYXBwbHlQREZQcmVmZXJlbmNlc107Ci0gICAgX2lnbm9yZVNj
YWxlQW5kRGlzcGxheU1vZGVBbmRQYWdlTm90aWZpY2F0aW9ucyA9IE5POwotfQotCi0tICh2b2lk
KV9hcHBseVBERlByZWZlcmVuY2VzCi17Ci0gICAgaWYgKCFfcGRmVmlld0NvbnRyb2xsZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFdlYlByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IF9wZGZW
aWV3Q29udHJvbGxlci0+cGFnZSgpLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKTsKLQotICAg
IENHRmxvYXQgc2NhbGVGYWN0b3IgPSBwcmVmZXJlbmNlcy0+cGRmU2NhbGVGYWN0b3IoKTsKLSAg
ICBpZiAoIXNjYWxlRmFjdG9yKQotICAgICAgICBbX3BkZlZpZXcgc2V0QXV0b1NjYWxlczpZRVNd
OwotICAgIGVsc2UgewotICAgICAgICBbX3BkZlZpZXcgc2V0QXV0b1NjYWxlczpOT107Ci0gICAg
ICAgIFtfcGRmVmlldyBzZXRTY2FsZUZhY3RvcjpzY2FsZUZhY3Rvcl07Ci0gICAgfQotICAgIFtf
cGRmVmlldyBzZXREaXNwbGF5TW9kZTpwcmVmZXJlbmNlcy0+cGRmRGlzcGxheU1vZGUoKV07Ci19
Ci0KLS0gKHZvaWQpX3VwZGF0ZVByZWZlcmVuY2VzOihpZClpZ25vcmVkCi17Ci0gICAgX3dpbGxV
cGRhdGVQcmVmZXJlbmNlc1Nvb24gPSBOTzsKLQotICAgIGlmICghX3BkZlZpZXdDb250cm9sbGVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMgPSBf
cGRmVmlld0NvbnRyb2xsZXItPnBhZ2UoKS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCk7Ci0K
LSAgICBDR0Zsb2F0IHNjYWxlRmFjdG9yID0gW19wZGZWaWV3IGF1dG9TY2FsZXNdID8gMCA6IFtf
cGRmVmlldyBzY2FsZUZhY3Rvcl07Ci0gICAgcHJlZmVyZW5jZXMtPnNldFBERlNjYWxlRmFjdG9y
KHNjYWxlRmFjdG9yKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0UERGRGlzcGxheU1vZGUoW19wZGZW
aWV3IGRpc3BsYXlNb2RlXSk7Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZVByZWZlcmVuY2VzU29vbgot
eyAgIAotICAgIGlmIChfd2lsbFVwZGF0ZVByZWZlcmVuY2VzU29vbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfdXBkYXRlUHJlZmVyZW5j
ZXM6KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBdOwotICAgIF93aWxsVXBkYXRlUHJlZmVy
ZW5jZXNTb29uID0gWUVTOwotfQotCi0tICh2b2lkKV9zY2FsZU9yRGlzcGxheU1vZGVPclBhZ2VD
aGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIEFTU0VSVF9BUkco
bm90aWZpY2F0aW9uLCBbbm90aWZpY2F0aW9uIG9iamVjdF0gPT0gX3BkZlZpZXcpOwotICAgIGlm
ICghX2lnbm9yZVNjYWxlQW5kRGlzcGxheU1vZGVBbmRQYWdlTm90aWZpY2F0aW9ucykKLSAgICAg
ICAgW3NlbGYgX3VwZGF0ZVByZWZlcmVuY2VzU29vbl07Ci19Ci0KLS0gKHZvaWQpX29wZW5XaXRo
RmluZGVyOihpZClzZW5kZXIKLXsKLSAgICBfcGRmVmlld0NvbnRyb2xsZXItPm9wZW5QREZJbkZp
bmRlcigpOwotfQotCi0tIChQREZTZWxlY3Rpb24gKilfbmV4dE1hdGNoRm9yOihOU1N0cmluZyAq
KXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VG
bGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcgZnJvbVNlbGVjdGlvbjooUERGU2VsZWN0aW9uICopaW5p
dGlhbFNlbGVjdGlvbiBzdGFydEluU2VsZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rpb24KLXsK
LSAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIGlu
dCBvcHRpb25zID0gMDsKLSAgICBpZiAoIWZvcndhcmQpCi0gICAgICAgIG9wdGlvbnMgfD0gTlNC
YWNrd2FyZHNTZWFyY2g7Ci0KLSAgICBpZiAoIWNhc2VGbGFnKQotICAgICAgICBvcHRpb25zIHw9
IE5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoOwotCi0gICAgUERGRG9jdW1lbnQgKmRvY3VtZW50ID0g
W19wZGZWaWV3IGRvY3VtZW50XTsKLQotICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uRm9ySW5p
dGlhbFNlYXJjaCA9IFtpbml0aWFsU2VsZWN0aW9uIGNvcHldOwotICAgIGlmIChzdGFydEluU2Vs
ZWN0aW9uKSB7Ci0gICAgICAgIC8vIEluaXRpYWxseSB3ZSB3YW50IHRvIGluY2x1ZGUgdGhlIHNl
bGVjdGVkIHRleHQgaW4gdGhlIHNlYXJjaC4gIFNvIHdlIG11c3QgbW9kaWZ5IHRoZSBzdGFydGlu
ZyBzZWFyY2ggCi0gICAgICAgIC8vIHNlbGVjdGlvbiB0byBmaXQgUERGRG9jdW1lbnQncyBzZWFy
Y2ggcmVxdWlyZW1lbnRzOiBzZWxlY3Rpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID49IDEsIGJlZ2lu
IGJlZm9yZSAKLSAgICAgICAgLy8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIChpZiBzZWFyY2hpbmcg
Zm9yd2FyZHMpIG9yIGFmdGVyIChpZiBzZWFyY2hpbmcgYmFja3dhcmRzKS4KLSAgICAgICAgaW50
IGluaXRpYWxTZWxlY3Rpb25MZW5ndGggPSBbW2luaXRpYWxTZWxlY3Rpb24gc3RyaW5nXSBsZW5n
dGhdOwotICAgICAgICBpZiAoZm9yd2FyZCkgewotICAgICAgICAgICAgW3NlbGVjdGlvbkZvcklu
aXRpYWxTZWFyY2ggZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDoxXTsKLSAgICAgICAgICAgIFtzZWxl
Y3Rpb25Gb3JJbml0aWFsU2VhcmNoIGV4dGVuZFNlbGVjdGlvbkF0RW5kOi1pbml0aWFsU2VsZWN0
aW9uTGVuZ3RoXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJ
bml0aWFsU2VhcmNoIGV4dGVuZFNlbGVjdGlvbkF0RW5kOjFdOwotICAgICAgICAgICAgW3NlbGVj
dGlvbkZvckluaXRpYWxTZWFyY2ggZXh0ZW5kU2VsZWN0aW9uQXRTdGFydDotaW5pdGlhbFNlbGVj
dGlvbkxlbmd0aF07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgUERGU2VsZWN0aW9uICpmb3VuZFNl
bGVjdGlvbiA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnN0cmluZyBmcm9tU2VsZWN0aW9uOnNlbGVj
dGlvbkZvckluaXRpYWxTZWFyY2ggd2l0aE9wdGlvbnM6b3B0aW9uc107Ci0gICAgW3NlbGVjdGlv
bkZvckluaXRpYWxTZWFyY2ggcmVsZWFzZV07Ci0KLSAgICAvLyBJZiB3ZSBmaXJzdCBzZWFyY2hl
ZCBpbiB0aGUgc2VsZWN0aW9uLCBhbmQgd2UgZm91bmQgdGhlIHNlbGVjdGlvbiwgc2VhcmNoIGFn
YWluIGZyb20ganVzdCBwYXN0IHRoZSBzZWxlY3Rpb24KLSAgICBpZiAoc3RhcnRJblNlbGVjdGlv
biAmJiBfUERGU2VsZWN0aW9uc0FyZUVxdWFsKGZvdW5kU2VsZWN0aW9uLCBpbml0aWFsU2VsZWN0
aW9uKSkKLSAgICAgICAgZm91bmRTZWxlY3Rpb24gPSBbZG9jdW1lbnQgZmluZFN0cmluZzpzdHJp
bmcgZnJvbVNlbGVjdGlvbjppbml0aWFsU2VsZWN0aW9uIHdpdGhPcHRpb25zOm9wdGlvbnNdOwot
Ci0gICAgaWYgKCFmb3VuZFNlbGVjdGlvbiAmJiB3cmFwRmxhZykKLSAgICAgICAgZm91bmRTZWxl
Y3Rpb24gPSBbZG9jdW1lbnQgZmluZFN0cmluZzpzdHJpbmcgZnJvbVNlbGVjdGlvbjpuaWwgd2l0
aE9wdGlvbnM6b3B0aW9uc107Ci0KLSAgICByZXR1cm4gZm91bmRTZWxlY3Rpb247Ci19Ci0KLS0g
KE5TVUludGVnZXIpX2NvdW50TWF0Y2hlczooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2
ZTooQk9PTCljYXNlRmxhZwotewotICAgIGlmICghW3N0cmluZyBsZW5ndGhdKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGludCBvcHRpb25zID0gY2FzZUZsYWcgPyAwIDogTlNDYXNlSW5zZW5z
aXRpdmVTZWFyY2g7Ci0KLSAgICByZXR1cm4gW1tbX3BkZlZpZXcgZG9jdW1lbnRdIGZpbmRTdHJp
bmc6c3RyaW5nIHdpdGhPcHRpb25zOm9wdGlvbnNdIGNvdW50XTsKLX0KLQotLy8gTUFSSzogTlNW
aWV3IG92ZXJyaWRlcwotCi0tICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cKLXsKLSAgICBpZiAo
IVtzZWxmIHdpbmRvd10pCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TTm90aWZpY2F0aW9uQ2Vu
dGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9y
OkBzZWxlY3Rvcihfc2NhbGVPckRpc3BsYXlNb2RlT3JQYWdlQ2hhbmdlZDopIG5hbWU6X3dlYmtp
dF9QREZWaWV3U2NhbGVDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpfcGRmVmlld107Ci0gICAg
W25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihf
c2NhbGVPckRpc3BsYXlNb2RlT3JQYWdlQ2hhbmdlZDopIG5hbWU6X3dlYmtpdF9QREZWaWV3RGlz
cGxheU1vZGVDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpfcGRmVmlld107Ci0gICAgW25vdGlm
aWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfc2NhbGVP
ckRpc3BsYXlNb2RlT3JQYWdlQ2hhbmdlZDopIG5hbWU6X3dlYmtpdF9QREZWaWV3UGFnZUNoYW5n
ZWROb3RpZmljYXRpb24gb2JqZWN0Ol9wZGZWaWV3XTsKLX0KLQotLSAodm9pZCl2aWV3V2lsbE1v
dmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKLXsKLSAgICBpZiAoIVtzZWxmIHdpbmRv
d10pCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmlj
YXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07Ci0gICAg
W25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6X3dlYmtpdF9QREZW
aWV3U2NhbGVDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpfcGRmVmlld107Ci0gICAgW25vdGlm
aWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6X3dlYmtpdF9QREZWaWV3RGlz
cGxheU1vZGVDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpfcGRmVmlld107Ci0gICAgW25vdGlm
aWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6X3dlYmtpdF9QREZWaWV3UGFn
ZUNoYW5nZWROb3RpZmljYXRpb24gb2JqZWN0Ol9wZGZWaWV3XTsKLX0KLQotLSAoTlNWaWV3ICop
aGl0VGVzdDooTlNQb2ludClwb2ludAotewotICAgIC8vIE92ZXJyaWRlIGhpdFRlc3Qgc28gd2Ug
Y2FuIG92ZXJyaWRlIG1lbnVGb3JFdmVudC4KLSAgICBOU0V2ZW50ICpldmVudCA9IFtOU0FwcCBj
dXJyZW50RXZlbnRdOwotICAgIE5TRXZlbnRUeXBlIHR5cGUgPSBbZXZlbnQgdHlwZV07Ci0gICAg
aWYgKHR5cGUgPT0gTlNSaWdodE1vdXNlRG93biB8fCAodHlwZSA9PSBOU0xlZnRNb3VzZURvd24g
JiYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2spKSkKLSAgICAgICAg
cmV0dXJuIHNlbGY7Ci0KLSAgICByZXR1cm4gW3N1cGVyIGhpdFRlc3Q6cG9pbnRdOwotfQotCi1z
dGF0aWMgdm9pZCBpbnNlcnRPcGVuV2l0aERlZmF1bHRQREZNZW51SXRlbShOU01lbnUgKm1lbnUs
IE5TVUludGVnZXIgaW5kZXgpCi17Ci0gICAgLy8gQWRkIGluIGFuICJPcGVuIHdpdGggPGRlZmF1
bHQgUERGIHZpZXdlcj4iIGl0ZW0KLSAgICBOU1N0cmluZyAqYXBwTmFtZSA9IG5pbDsKLSAgICBO
U0ltYWdlICphcHBJY29uID0gbmlsOwotICAgIAotICAgIF9hcHBsaWNhdGlvbkluZm9Gb3JNSU1F
VHlwZShAImFwcGxpY2F0aW9uL3BkZiIsICZhcHBOYW1lLCAmYXBwSWNvbik7Ci0gICAgaWYgKCFh
cHBOYW1lKQotICAgICAgICBhcHBOYW1lID0gV0VCX1VJX1NUUklORygiRmluZGVyIiwgIkRlZmF1
bHQgYXBwbGljYXRpb24gbmFtZSBmb3IgT3BlbiBXaXRoIGNvbnRleHQgbWVudSIpOwotICAgIAot
ICAgIC8vIFRvIG1hdGNoIHRoZSBQREZLaXQgc3R5bGUsIHdlJ2xsIGFkZCBPcGVuIHdpdGggUHJl
dmlldyBldmVuIHdoZW4gdGhlcmUncyBubyBkb2N1bWVudCB5ZXQgdG8gdmlldywgYW5kCi0gICAg
Ly8gZGlzYWJsZSBpdCB1c2luZyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtLgotICAgIE5TU3Ry
aW5nICp0aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIk9w
ZW4gd2l0aCAlQCIsICJjb250ZXh0IG1lbnUgaXRlbSBmb3IgUERGIiksIGFwcE5hbWVdOwotICAg
IAotICAgIE5TTWVudUl0ZW0gKml0ZW0gPSBbW05TTWVudUl0ZW0gYWxsb2NdIGluaXRXaXRoVGl0
bGU6dGl0bGUgYWN0aW9uOkBzZWxlY3Rvcihfb3BlbldpdGhGaW5kZXI6KSBrZXlFcXVpdmFsZW50
OkAiIl07Ci0gICAgaWYgKGFwcEljb24pCi0gICAgICAgIFtpdGVtIHNldEltYWdlOmFwcEljb25d
OwotICAgIFttZW51IGluc2VydEl0ZW06aXRlbSBhdEluZGV4OmluZGV4XTsKLSAgICBbaXRlbSBy
ZWxlYXNlXTsKLX0KLQotLSAoTlNNZW51ICopbWVudUZvckV2ZW50OihOU0V2ZW50ICopdGhlRXZl
bnQKLXsKLSAgICBOU01lbnUgKm1lbnUgPSBbW05TTWVudSBhbGxvY10gaW5pdFdpdGhUaXRsZTpA
IiJdOwotCi0gICAgYm9vbCBpbnNlcnRlZE9wZW5XaXRoSXRlbSA9IGZhbHNlOwotICAgIAotICAg
IE5TRW51bWVyYXRvciAqbWVudUl0ZW1FbnVtZXJhdG9yID0gW1tbX3BkZlZpZXcgbWVudUZvckV2
ZW50OnRoZUV2ZW50XSBpdGVtQXJyYXldIG9iamVjdEVudW1lcmF0b3JdOwotICAgIHdoaWxlIChO
U01lbnVJdGVtICppdGVtID0gW21lbnVJdGVtRW51bWVyYXRvciBuZXh0T2JqZWN0XSkgewotICAg
ICAgICBOU01lbnVJdGVtICppdGVtQ29weSA9IFtpdGVtIGNvcHldOwotICAgICAgICBbbWVudSBh
ZGRJdGVtOml0ZW1Db3B5XTsKLSAgICAgICAgW2l0ZW1Db3B5IHJlbGVhc2VdOwotCi0gICAgICAg
IGlmIChpbnNlcnRlZE9wZW5XaXRoSXRlbSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAKLSAgICAgICAgLy8gSWYgYSAiQ29weSIgaXRlbSBpcyBwcmVzZW50LCBwbGFjZSB0aGUgIk9w
ZW4gV2l0aCIgaXRlbSBqdXN0IGFmdGVyIGl0LCB3aXRoIGFuIGludGVydmVuaW5nIHNlcGFyYXRv
ci4KLSAgICAgICAgaWYgKFtpdGVtIGFjdGlvbl0gIT0gQHNlbGVjdG9yKGNvcHk6KSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgW21lbnUgYWRkSXRlbTpbTlNNZW51
SXRlbSBzZXBhcmF0b3JJdGVtXV07Ci0gICAgICAgIGluc2VydE9wZW5XaXRoRGVmYXVsdFBERk1l
bnVJdGVtKG1lbnUsIFttZW51IG51bWJlck9mSXRlbXNdKTsKLSAgICAgICAgaW5zZXJ0ZWRPcGVu
V2l0aEl0ZW0gPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoIWluc2VydGVkT3BlbldpdGhJ
dGVtKSB7Ci0gICAgICAgIC8vIE5vICJDb3B5IiBpdGVtIHdhcyBmb3VuZDsgcGxhY2UgdGhlICJP
cGVuIFdpdGgiIGl0ZW0gYXQgdGhlIHRvcCBvZiB0aGUgbWVudSwgd2l0aCBhIHRyYWlsaW5nIHNl
cGFyYXRvci4KLSAgICAgICAgaW5zZXJ0T3BlbldpdGhEZWZhdWx0UERGTWVudUl0ZW0obWVudSwg
MCk7Ci0gICAgICAgIFttZW51IGluc2VydEl0ZW06W05TTWVudUl0ZW0gc2VwYXJhdG9ySXRlbV0g
YXRJbmRleDoxXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gW21lbnUgYXV0b3JlbGVhc2VdOwotfQot
Ci0vLyBNQVJLOiBOU1VzZXJJbnRlcmZhY2VWYWxpZGF0aW9ucyBQUk9UT0NPTCBJTVBMRU1FTlRB
VElPTgotCi0tIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxOU1ZhbGlkYXRl
ZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCi17Ci0gICAgU0VMIGFjdGlvbiA9IFtpdGVtIGFjdGlv
bl07Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX29wZW5XaXRoRmluZGVyOikpCi0gICAg
ICAgIHJldHVybiBbX3BkZlZpZXcgZG9jdW1lbnRdICE9IG5pbDsKLSAgICByZXR1cm4gWUVTOwot
fQotCi0vLyBNQVJLOiBQREZWaWV3IGRlbGVnYXRlIG1ldGhvZHMKLQotLSAodm9pZClQREZWaWV3
V2lsbENsaWNrT25MaW5rOihQREZWaWV3ICopc2VuZGVyIHdpdGhVUkw6KE5TVVJMICopVVJMCi17
Ci0gICAgX3BkZlZpZXdDb250cm9sbGVyLT5saW5rQ2xpY2tlZChbVVJMIGFic29sdXRlU3RyaW5n
XSk7Ci19Ci0KLS0gKHZvaWQpUERGVmlld09wZW5QREZJbk5hdGl2ZUFwcGxpY2F0aW9uOihQREZW
aWV3ICopc2VuZGVyCi17Ci0gICAgX3BkZlZpZXdDb250cm9sbGVyLT5vcGVuUERGSW5GaW5kZXIo
KTsKLX0KLQotLSAodm9pZClQREZWaWV3U2F2ZVBERlRvRG93bmxvYWRGb2xkZXI6KFBERlZpZXcg
KilzZW5kZXIKLXsKLSAgICBfcGRmVmlld0NvbnRyb2xsZXItPnNhdmVQREZUb0Rvd25sb2Fkc0Zv
bGRlcigpOwotfQotCi0tICh2b2lkKVBERlZpZXdQZXJmb3JtUHJpbnQ6KFBERlZpZXcgKilzZW5k
ZXIKLXsKLSAgICBfcGRmVmlld0NvbnRyb2xsZXItPnByaW50KCk7Ci19Ci0KLS0gKEJPT0wpZm9y
d2FyZFNjcm9sbFdoZWVsRXZlbnQ6KE5TRXZlbnQgKil3aGVlbEV2ZW50Ci17Ci0gICAgcmV0dXJu
IF9wZGZWaWV3Q29udHJvbGxlci0+Zm9yd2FyZFNjcm9sbFdoZWVsRXZlbnQod2hlZWxFdmVudCk7
Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBhc3NPd25QdHI8UERGVmlld0Nv
bnRyb2xsZXI+IFBERlZpZXdDb250cm9sbGVyOjpjcmVhdGUoV0tWaWV3ICp3a1ZpZXcpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQREZWaWV3Q29udHJvbGxlcih3a1ZpZXcpKTsKLX0KLQot
UERGVmlld0NvbnRyb2xsZXI6OlBERlZpZXdDb250cm9sbGVyKFdLVmlldyAqd2tWaWV3KQotICAg
IDogbV93a1ZpZXcod2tWaWV3KQotICAgICwgbV93a1BERlZpZXcoYWRvcHROUyhbW1dLUERGVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbbV93a1ZpZXcgYm91bmRzXSBQREZWaWV3Q29udHJvbGxl
cjp0aGlzXSkpCi0gICAgLCBtX3BkZlZpZXcoW21fd2tQREZWaWV3LmdldCgpIHBkZlZpZXddKQot
ewotICAgIFttX3drVmlldyBhZGRTdWJ2aWV3Om1fd2tQREZWaWV3LmdldCgpXTsKLX0KLQotUERG
Vmlld0NvbnRyb2xsZXI6On5QREZWaWV3Q29udHJvbGxlcigpCi17Ci0gICAgW21fd2tQREZWaWV3
LmdldCgpIHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgIFttX3drUERGVmlldy5nZXQoKSBpbnZh
bGlkYXRlXTsKLSAgICBtX3drUERGVmlldyA9IG51bGxwdHI7Ci19Ci0KLVdlYlBhZ2VQcm94eSog
UERGVmlld0NvbnRyb2xsZXI6OnBhZ2UoKSBjb25zdAotewotICAgIHJldHVybiB0b0ltcGwoW21f
d2tWaWV3IHBhZ2VSZWZdKTsKLX0KLQotTlNWaWV3KiBQREZWaWV3Q29udHJvbGxlcjo6cGRmVmll
dygpIGNvbnN0Ci17IAotICAgIHJldHVybiBtX3drUERGVmlldy5nZXQoKTsgCi19Ci0gICAgCi1z
dGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY29udmVydFBvc3RTY3JpcHREYXRhU291cmNlVG9Q
REYoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKQotewotICAgIC8vIENv
bnZlcnQgUG9zdFNjcmlwdCB0byBQREYgdXNpbmcgUXVhcnR6IDJEIEFQSQotICAgIC8vIGh0dHA6
Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vR3JhcGhpY3NJbWFnaW5nL0NvbmNl
cHR1YWwvZHJhd2luZ3dpdGhxdWFydHoyZC9kcV9wc19jb252ZXJ0L2NoYXB0ZXJfMTZfc2VjdGlv
bl8xLmh0bWwKLSAgICAKLSAgICBDR1BTQ29udmVydGVyQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OyAgICAKLSAgICBSZXRhaW5QdHI8Q0dQU0NvbnZlcnRl
clJlZj4gY29udmVydGVyID0gYWRvcHRDRihDR1BTQ29udmVydGVyQ3JlYXRlKDAsICZjYWxsYmFj
a3MsIDApKTsKLSAgICBBU1NFUlQoY29udmVydGVyKTsKLQotICAgIFJldGFpblB0cjxOU0RhdGE+
IG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6Y29u
c3RfY2FzdDx1aW50OF90Kj4oZGF0YVJlZmVyZW5jZS5kYXRhKCkpIGxlbmd0aDpkYXRhUmVmZXJl
bmNlLnNpemUoKSBmcmVlV2hlbkRvbmU6Tk9dKTsgICAKLQotICAgIFJldGFpblB0cjxDR0RhdGFQ
cm92aWRlclJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENG
RGF0YSgoQ0ZEYXRhUmVmKW5zRGF0YS5nZXQoKSkpOwotICAgIEFTU0VSVChwcm92aWRlcik7Ci0K
LSAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gcmVzdWx0ID0gYWRvcHRDRihDRkRhdGFD
cmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBBU1NFUlQocmVzdWx0
KTsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0dEYXRhQ29uc3VtZXJSZWY+IGNvbnN1bWVyID0gYWRv
cHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZVdpdGhDRkRhdGEocmVzdWx0LmdldCgpKSk7Ci0gICAg
QVNTRVJUKGNvbnN1bWVyKTsKLSAgICAKLSAgICBDR1BTQ29udmVydGVyQ29udmVydChjb252ZXJ0
ZXIuZ2V0KCksIHByb3ZpZGVyLmdldCgpLCBjb25zdW1lci5nZXQoKSwgMCk7Ci0KLSAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkIFBERlZpZXdDb250cm9sbGVyOjpzZXRQREZEb2N1bWVudERhdGEoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKQotewotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSht
aW1lVHlwZSwgImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiKSkgewotICAgICAgICBtX3BkZkRhdGEg
PSBjb252ZXJ0UG9zdFNjcmlwdERhdGFTb3VyY2VUb1BERihkYXRhUmVmZXJlbmNlKTsKLSAgICAg
ICAgaWYgKCFtX3BkZkRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3VnZ2Vz
dGVkRmlsZW5hbWUgPSBTdHJpbmcoc3VnZ2VzdGVkRmlsZW5hbWUgKyAiLnBkZiIpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0byBjb3B5IHRoZSBkYXRhLgotICAgICAgICBt
X3BkZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCBkYXRhUmVmZXJlbmNlLmRhdGEoKSwg
ZGF0YVJlZmVyZW5jZS5zaXplKCkpKTsKLSAgICAgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1
Z2dlc3RlZEZpbGVuYW1lOwotICAgIH0KLQotICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRm
RG9jdW1lbnQgPSBhZG9wdE5TKFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0aERh
dGE6KE5TRGF0YSAqKW1fcGRmRGF0YS5nZXQoKV0pOwotICAgIFttX3drUERGVmlldy5nZXQoKSBz
ZXREb2N1bWVudDpwZGZEb2N1bWVudC5nZXQoKV07Ci19Ci0KLWRvdWJsZSBQREZWaWV3Q29udHJv
bGxlcjo6em9vbUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFttX3BkZlZpZXcgc2NhbGVG
YWN0b3JdOwotfQotCi12b2lkIFBERlZpZXdDb250cm9sbGVyOjpzZXRab29tRmFjdG9yKGRvdWJs
ZSB6b29tRmFjdG9yKQotewotICAgIFttX3BkZlZpZXcgc2V0U2NhbGVGYWN0b3I6em9vbUZhY3Rv
cl07Ci19Ci0KLUNsYXNzIFBERlZpZXdDb250cm9sbGVyOjpwZGZEb2N1bWVudENsYXNzKCkKLXsK
LSAgICBzdGF0aWMgQ2xhc3MgcGRmRG9jdW1lbnRDbGFzcyA9IFtwZGZLaXRCdW5kbGUoKSBjbGFz
c05hbWVkOkAiUERGRG9jdW1lbnQiXTsKLSAgICAKLSAgICByZXR1cm4gcGRmRG9jdW1lbnRDbGFz
czsKLX0KLQotQ2xhc3MgUERGVmlld0NvbnRyb2xsZXI6OnBkZlByZXZpZXdWaWV3Q2xhc3MoKQot
ewotICAgIHN0YXRpYyBDbGFzcyBwZGZQcmV2aWV3Vmlld0NsYXNzID0gW3BkZktpdEJ1bmRsZSgp
IGNsYXNzTmFtZWQ6QCJQREZQcmV2aWV3VmlldyJdOwotICAgIAotICAgIHJldHVybiBwZGZQcmV2
aWV3Vmlld0NsYXNzOwotfQotCi1ib29sIFBERlZpZXdDb250cm9sbGVyOjpmb3J3YXJkU2Nyb2xs
V2hlZWxFdmVudChOU0V2ZW50ICp3aGVlbEV2ZW50KQotewotICAgIENHRmxvYXQgZGVsdGFYID0g
W3doZWVsRXZlbnQgZGVsdGFYXTsKLSAgICBpZiAoKGRlbHRhWCA+IDAgJiYgIXBhZ2UoKS0+Y2Fu
R29CYWNrKCkpIHx8IChkZWx0YVggPCAwICYmICFwYWdlKCktPmNhbkdvRm9yd2FyZCgpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgW21fd2tWaWV3IHNjcm9sbFdoZWVsOndoZWVsRXZl
bnRdOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgSU1QIG9sZFBERlZpZXdTY3JvbGxW
aWV3X3Njcm9sbFdoZWVsOwotCi1zdGF0aWMgV0tQREZWaWV3ICpmaW5kRW5jbG9zaW5nV0tQREZW
aWV3KE5TVmlldyAqdmlldykKLXsKLSAgICBmb3IgKE5TVmlldyAqc3VwZXJ2aWV3ID0gW3ZpZXcg
c3VwZXJ2aWV3XTsgc3VwZXJ2aWV3OyBzdXBlcnZpZXcgPSBbc3VwZXJ2aWV3IHN1cGVydmlld10p
IHsKLSAgICAgICAgaWYgKFtzdXBlcnZpZXcgaXNLaW5kT2ZDbGFzczpbV0tQREZWaWV3IGNsYXNz
XV0pCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tQREZWaWV3ICo+KHN1cGVydmll
dyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotc3RhdGljIHZvaWQgUERGVmlld1Nj
cm9sbFZpZXdfc2Nyb2xsV2hlZWwoTlNTY3JvbGxWaWV3KiBzZWxmLCBTRUwgX2NtZCwgTlNFdmVu
dCAqd2hlZWxFdmVudCkKLXsKLSAgICBDR0Zsb2F0IGRlbHRhWCA9IFt3aGVlbEV2ZW50IGRlbHRh
WF07Ci0gICAgQ0dGbG9hdCBkZWx0YVkgPSBbd2hlZWxFdmVudCBkZWx0YVldOwotCi0gICAgTlNT
aXplIGNvbnRlbnRzU2l6ZSA9IFtbc2VsZiBkb2N1bWVudFZpZXddIGJvdW5kc10uc2l6ZTsKLSAg
ICBOU1JlY3QgdmlzaWJsZVJlY3QgPSBbc2VsZiBkb2N1bWVudFZpc2libGVSZWN0XTsKLQotICAg
IC8vIFdlIG9ubHkgd2FudCB0byBmb3J3YXJkIHRoZSB3aGVlbCBldmVudHMgaWYgdGhlIGhvcml6
b250YWwgZGVsdGEgaXMgbm9uLXplcm8sCi0gICAgLy8gYW5kIG9ubHkgaWYgd2UncmUgcGlubmVk
IHRvIGVpdGhlciB0aGUgbGVmdCBvciByaWdodCBzaWRlLgotICAgIC8vIFdlIGFsc28gbmV2ZXIg
d2FudCB0byBmb3J3YXJkIG1vbWVudHVtIHNjcm9sbCBldmVudHMuCi0gICAgaWYgKFt3aGVlbEV2
ZW50IG1vbWVudHVtUGhhc2VdID09IE5TRXZlbnRQaGFzZU5vbmUgJiYgZGVsdGFYICYmIGZhYnNm
KGRlbHRhWSkgPCBmYWJzZihkZWx0YVgpCi0gICAgICAgICYmICgoZGVsdGFYID4gMCAmJiB2aXNp
YmxlUmVjdC5vcmlnaW4ueCA8PSAwKSB8fCAoZGVsdGFYIDwgMCAmJiBjb250ZW50c1NpemUud2lk
dGggPD0gTlNNYXhYKHZpc2libGVSZWN0KSkpKSB7Ci0gICAgCi0gICAgICAgIGlmIChXS1BERlZp
ZXcgKnBkZlZpZXcgPSBmaW5kRW5jbG9zaW5nV0tQREZWaWV3KHNlbGYpKSB7Ci0gICAgICAgICAg
ICBpZiAoW3BkZlZpZXcgZm9yd2FyZFNjcm9sbFdoZWVsRXZlbnQ6d2hlZWxFdmVudF0pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd3RmQ2FsbElNUDx2
b2lkPihvbGRQREZWaWV3U2Nyb2xsVmlld19zY3JvbGxXaGVlbCwgc2VsZiwgX2NtZCwgd2hlZWxF
dmVudCk7Ci19Ci0KLU5TQnVuZGxlKiBQREZWaWV3Q29udHJvbGxlcjo6cGRmS2l0QnVuZGxlKCkK
LXsKLSAgICBzdGF0aWMgTlNCdW5kbGUgKnBkZktpdEJ1bmRsZTsKLSAgICBpZiAocGRmS2l0QnVu
ZGxlKQotICAgICAgICByZXR1cm4gcGRmS2l0QnVuZGxlOwotCi0gICAgTlNTdHJpbmcgKnBkZktp
dFBhdGggPSBbX05TUGF0aEZvclN5c3RlbUZyYW1ld29yayhAIlF1YXJ0ei5mcmFtZXdvcmsiKSBz
dHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIi9GcmFtZXdvcmtzL1BERktpdC5mcmFtZXdvcmsiXTsK
LSAgICBpZiAoIXBkZktpdFBhdGgpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBmaW5k
IFBERktpdC5mcmFtZXdvcmsiKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICBw
ZGZLaXRCdW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6cGRmS2l0UGF0aF07Ci0gICAg
aWYgKCFbcGRmS2l0QnVuZGxlIGxvYWRdKQotICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGxv
YWQgUERGS2l0LmZyYW1ld29yayIpOwotCi0gICAgaWYgKENsYXNzIHBkZlZpZXdTY3JvbGxWaWV3
Q2xhc3MgPSBbcGRmS2l0QnVuZGxlIGNsYXNzTmFtZWQ6QCJQREZWaWV3U2Nyb2xsVmlldyJdKSB7
Ci0gICAgICAgIGlmIChNZXRob2Qgc2Nyb2xsV2hlZWwgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhv
ZChwZGZWaWV3U2Nyb2xsVmlld0NsYXNzLCBAc2VsZWN0b3Ioc2Nyb2xsV2hlZWw6KSkpCi0gICAg
ICAgICAgICBvbGRQREZWaWV3U2Nyb2xsVmlld19zY3JvbGxXaGVlbCA9IG1ldGhvZF9zZXRJbXBs
ZW1lbnRhdGlvbihzY3JvbGxXaGVlbCwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KFBERlZpZXdTY3Jv
bGxWaWV3X3Njcm9sbFdoZWVsKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBkZktpdEJ1bmRsZTsK
LX0KLQotTlNQcmludE9wZXJhdGlvbiAqUERGVmlld0NvbnRyb2xsZXI6Om1ha2VQcmludE9wZXJh
dGlvbihOU1ByaW50SW5mbyAqcHJpbnRJbmZvKQotewotICAgIHJldHVybiBbW21fcGRmVmlldyBk
b2N1bWVudF0gZ2V0UHJpbnRPcGVyYXRpb25Gb3JQcmludEluZm86cHJpbnRJbmZvIGF1dG9Sb3Rh
dGU6WUVTXTsKLX0KLQotdm9pZCBQREZWaWV3Q29udHJvbGxlcjo6b3BlblBERkluRmluZGVyKCkK
LXsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIG9wZW4gdGhlIFBERiB1bnRpbCB3ZSBoYXZlIGEg
ZG9jdW1lbnQgdG8gd3JpdGUuIChzZWUgNDg5MjUyNSkuCi0gICAgaWYgKCFbbV9wZGZWaWV3IGRv
Y3VtZW50XSkgewotICAgICAgICBOU0JlZXAoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghbV90ZW1wb3JhcnlQREZVVUlEKSB7Ci0gICAgICAgIEFTU0VSVChtX3BkZkRhdGEp
OwotICAgICAgICBtX3RlbXBvcmFyeVBERlVVSUQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5n
KCk7Ci0gICAgICAgIHBhZ2UoKS0+c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhO
YXRpdmVBcHBsaWNhdGlvblJhdyhtX3N1Z2dlc3RlZEZpbGVuYW1lLmdldCgpLCBwYWdlKCktPm1h
aW5GcmFtZSgpLT51cmwoKSwgQ0ZEYXRhR2V0Qnl0ZVB0cihtX3BkZkRhdGEuZ2V0KCkpLCBDRkRh
dGFHZXRMZW5ndGgobV9wZGZEYXRhLmdldCgpKSwgbV90ZW1wb3JhcnlQREZVVUlEKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBhZ2UoKS0+b3BlblBERkZyb21UZW1wb3JhcnlGb2xk
ZXJXaXRoTmF0aXZlQXBwbGljYXRpb24obV90ZW1wb3JhcnlQREZVVUlEKTsKLX0KLQotc3RhdGlj
IHZvaWQgcmVsZWFzZUNGRGF0YSh1bnNpZ25lZCBjaGFyKiwgY29uc3Qgdm9pZCogZGF0YSkKLXsK
LSAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoZGF0YSkgPT0gQ0ZEYXRhR2V0VHlwZUlEKCkpOwotCi0g
ICAgLy8gQmFsYW5jZWQgYnkgQ0ZSZXRhaW4gaW4gc2F2ZVBERlRvRG93bmxvYWRzRm9sZGVyLgot
ICAgIENGUmVsZWFzZShkYXRhKTsKLX0KLQotdm9pZCBQREZWaWV3Q29udHJvbGxlcjo6c2F2ZVBE
RlRvRG93bmxvYWRzRm9sZGVyKCkKLXsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHdyaXRlIHRo
ZSBmaWxlIHVudGlsIHdlIGhhdmUgYSBkb2N1bWVudCB0byB3cml0ZS4gKHNlZSA1MjY3NjA3KS4K
LSAgICBpZiAoIVttX3BkZlZpZXcgZG9jdW1lbnRdKSB7Ci0gICAgICAgIE5TQmVlcCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fcGRmRGF0YSk7Ci0KLSAgICAvLyBC
YWxhbmNlZCBieSBDRlJlbGVhc2UgaW4gcmVsZWFzZUNGRGF0YS4KLSAgICBDRlJldGFpbihtX3Bk
ZkRhdGEuZ2V0KCkpOwotCi0gICAgUmVmUHRyPFdlYkRhdGE+IGRhdGEgPSBXZWJEYXRhOjpjcmVh
dGVXaXRob3V0Q29weWluZyhDRkRhdGFHZXRCeXRlUHRyKG1fcGRmRGF0YS5nZXQoKSksIENGRGF0
YUdldExlbmd0aChtX3BkZkRhdGEuZ2V0KCkpLCByZWxlYXNlQ0ZEYXRhLCBtX3BkZkRhdGEuZ2V0
KCkpOwotCi0gICAgcGFnZSgpLT5zYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyKG1fc3Vn
Z2VzdGVkRmlsZW5hbWUuZ2V0KCksIHBhZ2UoKS0+bWFpbkZyYW1lKCktPm1pbWVUeXBlKCksIHBh
Z2UoKS0+bWFpbkZyYW1lKCktPnVybCgpLCBkYXRhLmdldCgpKTsKLX0KLQotdm9pZCBQREZWaWV3
Q29udHJvbGxlcjo6bGlua0NsaWNrZWQoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgTlNFdmVu
dCogbnNFdmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwotICAgIFdlYk1vdXNlRXZlbnQgZXZl
bnQ7Ci0gICAgc3dpdGNoIChbbnNFdmVudCB0eXBlXSkgewotICAgIGNhc2UgTlNMZWZ0TW91c2VV
cDoKLSAgICBjYXNlIE5TUmlnaHRNb3VzZVVwOgotICAgIGNhc2UgTlNPdGhlck1vdXNlVXA6Ci0g
ICAgICAgIGV2ZW50ID0gV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KG5zRXZl
bnQsIG1fcGRmVmlldyk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gRm9yIG5vbiBtb3VzZS1j
bGlja3Mgb3IgZm9yIGtleWJvYXJkIGV2ZW50cywgcGFzcyBhbiBlbXB0eSBXZWJNb3VzZUV2ZW50
Ci0gICAgICAgIC8vIHRocm91Z2guICBUaGUgZXZlbnQgaXMgb25seSB1c2VkIGJ5IHRoZSBXZWJG
cmFtZUxvYWRlckNsaWVudCB0byBkZXRlcm1pbmUKLSAgICAgICAgLy8gdGhlIG1vZGlmaWVyIGtl
eXMgYW5kIHdoaWNoIG1vdXNlIGJ1dHRvbiBpcyBkb3duLiAgVGhlc2UgcXVlcmllcyB3aWxsIGJl
Ci0gICAgICAgIC8vIHZhbGlkIHdpdGggYW4gZW1wdHkgZXZlbnQuCi0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAKLSAgICBwYWdlKCktPmxpbmtDbGlja2VkKHVybCwgZXZlbnQpOwotfQotCi12
b2lkIFBERlZpZXdDb250cm9sbGVyOjpwcmludCgpCi17Ci0gICAgcGFnZSgpLT5wcmludE1haW5G
cmFtZSgpOwotfQotCi12b2lkIFBERlZpZXdDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50
KQotewotICAgIEJPT0wgZm9yd2FyZCA9ICEob3B0aW9ucyAmIEZpbmRPcHRpb25zQmFja3dhcmRz
KTsKLSAgICBCT09MIGNhc2VGbGFnID0gIShvcHRpb25zICYgRmluZE9wdGlvbnNDYXNlSW5zZW5z
aXRpdmUpOwotICAgIEJPT0wgd3JhcEZsYWcgPSBvcHRpb25zICYgRmluZE9wdGlvbnNXcmFwQXJv
dW5kOwotCi0gICAgUERGU2VsZWN0aW9uICpzZWxlY3Rpb24gPSBbbV93a1BERlZpZXcuZ2V0KCkg
X25leHRNYXRjaEZvcjpzdHJpbmcgZGlyZWN0aW9uOmZvcndhcmQgY2FzZVNlbnNpdGl2ZTpjYXNl
RmxhZyB3cmFwOndyYXBGbGFnIGZyb21TZWxlY3Rpb246W21fcGRmVmlldyBjdXJyZW50U2VsZWN0
aW9uXSBzdGFydEluU2VsZWN0aW9uOk5PXTsKLSAgICBpZiAoIXNlbGVjdGlvbikgewotICAgICAg
ICBwYWdlKCktPmRpZEZhaWxUb0ZpbmRTdHJpbmcoc3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIE5TVUludGVnZXIgbWF0Y2hDb3VudDsKLSAgICBpZiAoIW1heE1hdGNoQ291
bnQpIHsKLSAgICAgICAgLy8gSWYgdGhlIG1heCB3YXMgemVybywgYW55IHJlc3VsdCBtZWFucyB3
ZSBleGNlZWRlZCB0aGUgbWF4LiBXZSBjYW4gc2tpcCBjb21wdXRpbmcgdGhlIGFjdHVhbCBjb3Vu
dC4KLSAgICAgICAgbWF0Y2hDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrV0tNb3JlVGhh
bk1heGltdW1NYXRjaENvdW50KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtYXRjaENvdW50ID0g
W21fd2tQREZWaWV3LmdldCgpIF9jb3VudE1hdGNoZXM6c3RyaW5nIGNhc2VTZW5zaXRpdmU6Y2Fz
ZUZsYWddOwotICAgICAgICBpZiAobWF0Y2hDb3VudCA+IG1heE1hdGNoQ291bnQpCi0gICAgICAg
ICAgICBtYXRjaENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtXS01vcmVUaGFuTWF4aW11
bU1hdGNoQ291bnQpOwotICAgIH0KLQotICAgIFttX3BkZlZpZXcgc2V0Q3VycmVudFNlbGVjdGlv
bjpzZWxlY3Rpb25dOwotICAgIFttX3BkZlZpZXcgc2Nyb2xsU2VsZWN0aW9uVG9WaXNpYmxlOm5p
bF07Ci0gICAgcGFnZSgpLT5kaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hDb3VudCk7Ci19Ci0K
LXZvaWQgUERGVmlld0NvbnRyb2xsZXI6OmNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcm
IHN0cmluZywgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKLXsK
LSAgICBCT09MIGNhc2VGbGFnID0gIShvcHRpb25zICYgRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRp
dmUpOwotCi0gICAgTlNVSW50ZWdlciBtYXRjaENvdW50ID0gW21fd2tQREZWaWV3LmdldCgpIF9j
b3VudE1hdGNoZXM6c3RyaW5nIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWddOwotICAgIGlmIChtYXRj
aENvdW50ID4gbWF4TWF0Y2hDb3VudCkKLSAgICAgICAgbWF0Y2hDb3VudCA9IG1heE1hdGNoQ291
bnQ7Ci0gICAgcGFnZSgpLT5kaWRDb3VudFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaENvdW50
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="249203"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>