<?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>43170</bug_id>
          
          <creation_ts>2010-07-28 21:19:36 -0700</creation_ts>
          <short_desc>[Qt] Factor LauncherWindow class out of main.cpp (QtTestBrowser)</short_desc>
          <delta_ts>2010-07-29 11:01:39 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>43199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antonio Gomes">tonikitoo</reporter>
          <assigned_to name="Antonio Gomes">tonikitoo</assigned_to>
          <cc>kenneth</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>257537</commentid>
    <comment_count>0</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-28 21:19:36 -0700</bug_when>
    <thetext>In my opinion, it does not belongs to this file and has grown enough to desive its own file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257724</commentid>
    <comment_count>1</comment_count>
      <attachid>62959</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-29 09:29:55 -0700</bug_when>
    <thetext>Created attachment 62959
(commit=r64291 , r=kenneth) patch v1 - add launcherwindow.cpp and h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257729</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-29 09:32:23 -0700</bug_when>
    <thetext>Attachment 62959 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/QtTestBrowser/launcherwindow.h:70:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/QtTestBrowser/launcherwindow.cpp:33:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKitTools/QtTestBrowser/main.cpp:33:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257758</commentid>
    <comment_count>3</comment_count>
      <attachid>62959</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-07-29 10:37:45 -0700</bug_when>
    <thetext>Comment on attachment 62959
(commit=r64291 , r=kenneth) patch v1 - add launcherwindow.cpp and h

we probably want to handle the globals differently? Are you planning this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257768</commentid>
    <comment_count>4</comment_count>
      <attachid>62959</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-29 11:01:01 -0700</bug_when>
    <thetext>Comment on attachment 62959
(commit=r64291 , r=kenneth) patch v1 - add launcherwindow.cpp and h

Clearing flags on attachment: 62959

Committed r64291: &lt;http://trac.webkit.org/changeset/64291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257769</commentid>
    <comment_count>5</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-29 11:01:39 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 62959 [details])
&gt; we probably want to handle the globals differently? Are you planning this?

Yes, in a follow up.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62959</attachid>
            <date>2010-07-29 09:29:55 -0700</date>
            <delta_ts>2010-07-29 11:01:01 -0700</delta_ts>
            <desc>(commit=r64291 , r=kenneth) patch v1 - add launcherwindow.cpp and h</desc>
            <filename>0001-2010-07-29-Antonio-Gomes-tonikitoo-webkit.org.patch</filename>
            <type>text/plain</type>
            <size>81088</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBlN2M1MGFhODkxYzBlMzM5Y2JkMmM1ODZhMjIzNDhhZWI0OWRmN2Q4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogVGh1LCAyOSBKdWwgMjAxMCAwODo0MjoyMSAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIDIw
MTAtMDctMjkgIEFudG9uaW8gR29tZXMgIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KCiAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtRdF0gRmFjdG9yIG91dCBMYXVu
Y2hlcldpbmRvdyBjbGFzcyBvdXQgb2YgbWFpbi5jcHAgKFF0VGVzdEJyb3dzZXIpCiAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMTcwCgogICAgICAgIE1v
dmluZyBMYXVuY2hlcldpbmRvdyBjbGFzcyBvdXQgb2YgbWFpbi5jcHAgdG8gaXRzIG93biAuY3Bw
IGFuZCAuaCBmaWxlczoKICAgICAgICBsYXVuY2hlcndpbmRvdy57Y3BwfGh9CgogICAgICAgIE5v
IGJlaGF2aW9yIGNoYW5nZS4KCiAgICAgICAgQWxzbyBjaGFuZ2VkIGFsbCBnbG9iYWwgc3RhdGlj
IHZhcmlhYmxlcyAobmFtZWQgImdYWFgiKSBmcm9tIG1haW4uY3BwIHRvCiAgICAgICAgc3RhdGlj
IHB1YmxpYyB2YXJpYWJsZXMgb2YgdGhlIExhdW5jaGVyV2luZG93IGNsYXNzLgoKICAgICAgICAq
IFF0VGVzdEJyb3dzZXIvUXRUZXN0QnJvd3Nlci5wcm86CiAgICAgICAgKiBRdFRlc3RCcm93c2Vy
L2xhdW5jaGVyd2luZG93LmNwcDogQWRkZWQuCiAgICAgICAgKiBRdFRlc3RCcm93c2VyL2xhdW5j
aGVyd2luZG93Lmg6IEFkZGVkLgogICAgICAgICogUXRUZXN0QnJvd3Nlci9tYWluLmNwcDoKICAg
ICAgICAoTGF1bmNoZXJBcHBsaWNhdGlvbjo6aGFuZGxlVXNlck9wdGlvbnMpOgogICAgICAgICht
YWluKToKLS0tCiBXZWJLaXRUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgMjIgKwogV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9RdFRlc3RCcm93c2VyLnBybyAgfCAg
ICAyICsKIFdlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvbGF1bmNoZXJ3aW5kb3cuY3BwIHwgIDg3
OCArKysrKysrKysrKysrKysrKysrKysrKwogV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVu
Y2hlcndpbmRvdy5oICAgfCAgMTg3ICsrKysrCiBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL21h
aW4uY3BwICAgICAgICAgICB8ICA5OTcgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDUgZmls
ZXMgY2hhbmdlZCwgMTA5OSBpbnNlcnRpb25zKCspLCA5ODcgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2lu
ZG93LmgKCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9D
aGFuZ2VMb2cKaW5kZXggNDY5ZDVhZi4uNmI4NDBiOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisy
MDEwLTA3LTI5ICBBbnRvbmlvIEdvbWVzICA8dG9uaWtpdG9vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBGYWN0b3Igb3V0
IExhdW5jaGVyV2luZG93IGNsYXNzIG91dCBvZiBtYWluLmNwcCAoUXRUZXN0QnJvd3NlcikKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMTcwCisKKyAg
ICAgICAgTW92aW5nIExhdW5jaGVyV2luZG93IGNsYXNzIG91dCBvZiBtYWluLmNwcCB0byBpdHMg
b3duIC5jcHAgYW5kIC5oIGZpbGVzOgorICAgICAgICBsYXVuY2hlcndpbmRvdy57Y3BwfGh9CisK
KyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgIEFsc28gY2hhbmdlZCBhbGwg
Z2xvYmFsIHN0YXRpYyB2YXJpYWJsZXMgKG5hbWVkICJnWFhYIikgZnJvbSBtYWluLmNwcCB0bwor
ICAgICAgICBzdGF0aWMgcHVibGljIHZhcmlhYmxlcyBvZiB0aGUgTGF1bmNoZXJXaW5kb3cgY2xh
c3MuCisKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL1F0VGVzdEJyb3dzZXIucHJvOgorICAgICAg
ICAqIFF0VGVzdEJyb3dzZXIvbGF1bmNoZXJ3aW5kb3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBR
dFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93Lmg6IEFkZGVkLgorICAgICAgICAqIFF0VGVzdEJy
b3dzZXIvbWFpbi5jcHA6CisgICAgICAgIChMYXVuY2hlckFwcGxpY2F0aW9uOjpoYW5kbGVVc2Vy
T3B0aW9ucyk6CisgICAgICAgIChtYWluKToKKwogMjAxMC0wNy0yOSAgQ3NhYmEgT3N6dHJvZ29u
w6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudG9uaW8gR29t
ZXMuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL1F0VGVzdEJyb3dzZXIu
cHJvIGIvV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9RdFRlc3RCcm93c2VyLnBybwppbmRleCBm
YTE2YzgyLi5kMzcxZjQyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL1F0
VGVzdEJyb3dzZXIucHJvCisrKyBiL1dlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvUXRUZXN0QnJv
d3Nlci5wcm8KQEAgLTIsNiArMiw3IEBAIFRFTVBMQVRFID0gYXBwCiAKIFNPVVJDRVMgKz0gXAog
ICAgIGxvY2F0aW9uZWRpdC5jcHAgXAorICAgIGxhdW5jaGVyd2luZG93LmNwcCBcCiAgICAgbWFp
bi5jcHAgXAogICAgIG1haW53aW5kb3cuY3BwIFwKICAgICB1cmxsb2FkZXIuY3BwIFwKQEAgLTEy
LDYgKzEzLDcgQEAgU09VUkNFUyArPSBcCiAKIEhFQURFUlMgKz0gXAogICAgIGxvY2F0aW9uZWRp
dC5oIFwKKyAgICBsYXVuY2hlcndpbmRvdy5oIFwKICAgICBtYWlud2luZG93LmggXAogICAgIHVy
bGxvYWRlci5oIFwKICAgICB1dGlscy5oIFwKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1F0VGVz
dEJyb3dzZXIvbGF1bmNoZXJ3aW5kb3cuY3BwIGIvV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9s
YXVuY2hlcndpbmRvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYx
OWQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvbGF1bmNo
ZXJ3aW5kb3cuY3BwCkBAIC0wLDAgKzEsODc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJsYXVuY2hlcndpbmRvdy5oIgorCiti
b29sIExhdW5jaGVyV2luZG93OjpnVXNlR3JhcGhpY3NWaWV3ID0gZmFsc2U7Citib29sIExhdW5j
aGVyV2luZG93OjpnVXNlQ29tcG9zaXRpbmcgPSB0cnVlOworYm9vbCBMYXVuY2hlcldpbmRvdzo6
Z0NhY2hlV2ViVmlldyA9IGZhbHNlOworYm9vbCBMYXVuY2hlcldpbmRvdzo6Z1Nob3dGcmFtZVJh
dGUgPSBmYWxzZTsKK2Jvb2wgTGF1bmNoZXJXaW5kb3c6OmdSZXNpemVzVG9Db250ZW50cyA9IGZh
bHNlOworYm9vbCBMYXVuY2hlcldpbmRvdzo6Z1VzZVRpbGVkQmFja2luZ1N0b3JlID0gZmFsc2U7
CitRR3JhcGhpY3NWaWV3OjpWaWV3cG9ydFVwZGF0ZU1vZGUgTGF1bmNoZXJXaW5kb3c6OmdWaWV3
cG9ydFVwZGF0ZU1vZGUgPSBRR3JhcGhpY3NWaWV3OjpNaW5pbWFsVmlld3BvcnRVcGRhdGU7CitR
VXJsIExhdW5jaGVyV2luZG93OjpnSW5zcGVjdG9yVXJsOworCisjaWYgZGVmaW5lZChRX1dTX01B
RU1PXzUpIHx8IGRlZmluZWQoUV9XU19TNjApCitib29sIExhdW5jaGVyV2luZG93OjpnVXNlRnJh
bWVGbGF0dGVuaW5nID0gdHJ1ZTsKKyNlbHNlCitib29sIExhdW5jaGVyV2luZG93OjpnVXNlRnJh
bWVGbGF0dGVuaW5nID0gZmFsc2U7CisjZW5kaWYKKworI2lmIGRlZmluZWQoUVRfQ09ORklHVVJF
RF9XSVRIX09QRU5HTCkKK2Jvb2wgTGF1bmNoZXJXaW5kb3c6OmdVc2VRR0xXaWRnZXRWaWV3cG9y
dCA9IGZhbHNlOworI2VuZGlmCisKK0xhdW5jaGVyV2luZG93OjpMYXVuY2hlcldpbmRvdyhMYXVu
Y2hlcldpbmRvdyogb3RoZXIsIGJvb2wgc2hhcmVTY2VuZSkKKyAgICA6IE1haW5XaW5kb3coKQor
ICAgICwgbV9jdXJyZW50Wm9vbSgxMDApCisgICAgLCBtX3ZpZXcoMCkKKyAgICAsIG1faW5zcGVj
dG9yKDApCisgICAgLCBtX2Zvcm1hdE1lbnVBY3Rpb24oMCkKKyAgICAsIG1fZmxpcEFuaW1hdGVk
KDApCisgICAgLCBtX2ZsaXBZQW5pbWF0ZWQoMCkKKyNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJ
T05fQ0hFQ0soNCwgNiwgMCkKKyAgICAsIG1fem9vbUFuaW1hdGlvbigwKQorI2VuZGlmCit7Cisg
ICAgaWYgKG90aGVyKSB7CisgICAgICAgIGluaXQob3RoZXItPmlzR3JhcGhpY3NCYXNlZCgpKTsK
KyAgICAgICAgYXBwbHlQcmVmcyhvdGhlcik7CisgICAgICAgIGlmIChzaGFyZVNjZW5lICYmIG90
aGVyLT5pc0dyYXBoaWNzQmFzZWQoKSkgeworICAgICAgICAgICAgUUdyYXBoaWNzVmlldyogb3Ro
ZXJWaWV3ID0gc3RhdGljX2Nhc3Q8UUdyYXBoaWNzVmlldyo+KG90aGVyLT5tX3ZpZXcpOworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8UUdyYXBoaWNzVmlldyo+KG1fdmlldyktPnNldFNjZW5lKG90
aGVyVmlldy0+c2NlbmUoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbml0
KGdVc2VHcmFwaGljc1ZpZXcpOworICAgICAgICBhcHBseVByZWZzKCk7CisgICAgfQorCisgICAg
Y3JlYXRlQ2hyb21lKCk7Cit9CisKK0xhdW5jaGVyV2luZG93Ojp+TGF1bmNoZXJXaW5kb3coKQor
eworICAgIGdyYWJab29tS2V5cyhmYWxzZSk7Cit9CisKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6Omlu
aXQoYm9vbCB1c2VHcmFwaGljc1ZpZXcpCit7CisgICAgUVNwbGl0dGVyKiBzcGxpdHRlciA9IG5l
dyBRU3BsaXR0ZXIoUXQ6OlZlcnRpY2FsLCB0aGlzKTsKKyAgICBzZXRDZW50cmFsV2lkZ2V0KHNw
bGl0dGVyKTsKKworI2lmIGRlZmluZWQoUV9XU19TNjApCisgICAgc2V0V2luZG93U3RhdGUoUXQ6
OldpbmRvd01heGltaXplZCk7CisjZWxzZQorICAgIHNldFdpbmRvd1N0YXRlKFF0OjpXaW5kb3dO
b1N0YXRlKTsKKyAgICByZXNpemUoODAwLCA2MDApOworI2VuZGlmCisKKyAgICBpbml0aWFsaXpl
Vmlldyh1c2VHcmFwaGljc1ZpZXcpOworCisgICAgY29ubmVjdChwYWdlKCksIFNJR05BTChsb2Fk
U3RhcnRlZCgpKSwgdGhpcywgU0xPVChsb2FkU3RhcnRlZCgpKSk7CisgICAgY29ubmVjdChwYWdl
KCksIFNJR05BTChsb2FkRmluaXNoZWQoYm9vbCkpLCB0aGlzLCBTTE9UKGxvYWRGaW5pc2hlZCgp
KSk7CisgICAgY29ubmVjdChwYWdlKCksIFNJR05BTChsaW5rSG92ZXJlZChjb25zdCBRU3RyaW5n
JiwgY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmKSksCisgICAgICAgICAgICB0aGlzLCBT
TE9UKHNob3dMaW5rSG92ZXIoY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcmKSkpOworICAg
IGNvbm5lY3QodGhpcywgU0lHTkFMKGVudGVyZWRGdWxsU2NyZWVuTW9kZShib29sKSksIHRoaXMs
IFNMT1QodG9nZ2xlRnVsbFNjcmVlbk1vZGUoYm9vbCkpKTsKKworICAgIG1faW5zcGVjdG9yID0g
bmV3IFdlYkluc3BlY3RvcihzcGxpdHRlcik7CisjaWZuZGVmIFFUX05PX1BST1BFUlRJRVMKKyAg
ICBpZiAoIWdJbnNwZWN0b3JVcmwuaXNFbXB0eSgpKQorICAgICAgICBtX2luc3BlY3Rvci0+c2V0
UHJvcGVydHkoIl9xX2luc3BlY3RvclVybCIsIGdJbnNwZWN0b3JVcmwpOworI2VuZGlmCisgICAg
bV9pbnNwZWN0b3ItPnNldFBhZ2UocGFnZSgpKTsKKyAgICBtX2luc3BlY3Rvci0+aGlkZSgpOwor
ICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGRlc3Ryb3llZCgpKSwgbV9pbnNwZWN0b3IsIFNMT1Qo
ZGVsZXRlTGF0ZXIoKSkpOworCisgICAgLy8gdGhlIHpvb20gdmFsdWVzIGFyZSBjaG9zZW4gdG8g
YmUgbGlrZSBpbiBNb3ppbGxhIEZpcmVmb3ggMworICAgIG1fem9vbUxldmVscyA8PCAzMCA8PCA1
MCA8PCA2NyA8PCA4MCA8PCA5MDsKKyAgICBtX3pvb21MZXZlbHMgPDwgMTAwOworICAgIG1fem9v
bUxldmVscyA8PCAxMTAgPDwgMTIwIDw8IDEzMyA8PCAxNTAgPDwgMTcwIDw8IDIwMCA8PCAyNDAg
PDwgMzAwOworCisgICAgZ3JhYlpvb21LZXlzKHRydWUpOworfQorCitib29sIExhdW5jaGVyV2lu
ZG93Ojppc0dyYXBoaWNzQmFzZWQoKSBjb25zdAoreworICAgIHJldHVybiBib29sKHFvYmplY3Rf
Y2FzdDxRR3JhcGhpY3NWaWV3Kj4obV92aWV3KSk7Cit9CisKK2lubGluZSB2b2lkIGFwcGx5U2V0
dGluZyhRV2ViU2V0dGluZ3M6OldlYkF0dHJpYnV0ZSB0eXBlLCBRV2ViU2V0dGluZ3MqIHNldHRp
bmdzLCBRV2ViU2V0dGluZ3MqIG90aGVyLCBib29sIGRlZmF1bHRWYWx1ZSkKK3sKKyAgICBzZXR0
aW5ncy0+c2V0QXR0cmlidXRlKHR5cGUsIG90aGVyID8gb3RoZXItPnRlc3RBdHRyaWJ1dGUodHlw
ZSkgOiBkZWZhdWx0VmFsdWUpOworfQorCit2b2lkIExhdW5jaGVyV2luZG93OjphcHBseVByZWZz
KExhdW5jaGVyV2luZG93KiBzb3VyY2UpCit7CisgICAgUVdlYlNldHRpbmdzKiBvdGhlciA9IHNv
dXJjZSA/IHNvdXJjZS0+cGFnZSgpLT5zZXR0aW5ncygpIDogMDsKKyAgICBRV2ViU2V0dGluZ3Mq
IHNldHRpbmdzID0gcGFnZSgpLT5zZXR0aW5ncygpOworCisgICAgYXBwbHlTZXR0aW5nKFFXZWJT
ZXR0aW5nczo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIHNldHRpbmdzLCBvdGhlciwg
Z1VzZUNvbXBvc2l0aW5nKTsKKyAgICBhcHBseVNldHRpbmcoUVdlYlNldHRpbmdzOjpUaWxlZEJh
Y2tpbmdTdG9yZUVuYWJsZWQsIHNldHRpbmdzLCBvdGhlciwgZ1VzZVRpbGVkQmFja2luZ1N0b3Jl
KTsKKyAgICBhcHBseVNldHRpbmcoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsIHNldHRpbmdz
LCBvdGhlciwgZmFsc2UpOworICAgIGFwcGx5U2V0dGluZyhRV2ViU2V0dGluZ3M6OkZyYW1lRmxh
dHRlbmluZ0VuYWJsZWQsIHNldHRpbmdzLCBvdGhlciwgZ1VzZUZyYW1lRmxhdHRlbmluZyk7CisK
KyAgICBpZiAoIWlzR3JhcGhpY3NCYXNlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJW
aWV3R3JhcGhpY3NCYXNlZCogdmlldyA9IHN0YXRpY19jYXN0PFdlYlZpZXdHcmFwaGljc0Jhc2Vk
Kj4obV92aWV3KTsKKyAgICBXZWJWaWV3R3JhcGhpY3NCYXNlZCogb3RoZXJWaWV3ID0gc291cmNl
ID8gcW9iamVjdF9jYXN0PFdlYlZpZXdHcmFwaGljc0Jhc2VkKj4oc291cmNlLT5tX3ZpZXcpIDog
MDsKKworICAgIHZpZXctPnNldFZpZXdwb3J0VXBkYXRlTW9kZShvdGhlclZpZXcgPyBvdGhlclZp
ZXctPnZpZXdwb3J0VXBkYXRlTW9kZSgpIDogZ1ZpZXdwb3J0VXBkYXRlTW9kZSk7CisgICAgdmll
dy0+c2V0RnJhbWVSYXRlTWVhc3VyZW1lbnRFbmFibGVkKG90aGVyVmlldyA/IG90aGVyVmlldy0+
ZnJhbWVSYXRlTWVhc3VyZW1lbnRFbmFibGVkKCkgOiBnU2hvd0ZyYW1lUmF0ZSk7CisKKyAgICBp
ZiAob3RoZXJWaWV3KQorICAgICAgICB2aWV3LT5zZXRJdGVtQ2FjaGVNb2RlKG90aGVyVmlldy0+
aXRlbUNhY2hlTW9kZSgpKTsKKyAgICBlbHNlCisgICAgICAgIHZpZXctPnNldEl0ZW1DYWNoZU1v
ZGUoZ0NhY2hlV2ViVmlldyA/IFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5hdGVDYWNoZSA6
IFFHcmFwaGljc0l0ZW06Ok5vQ2FjaGUpOworfQorCit2b2lkIExhdW5jaGVyV2luZG93OjprZXlQ
cmVzc0V2ZW50KFFLZXlFdmVudCogZXZlbnQpCit7CisjaWZkZWYgUV9XU19NQUVNT181CisgICAg
c3dpdGNoIChldmVudC0+a2V5KCkpIHsKKyAgICBjYXNlIFF0OjpLZXlfRjc6CisgICAgICAgIHpv
b21JbigpOworICAgICAgICBldmVudC0+YWNjZXB0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUXQ6OktleV9GODoKKyAgICAgICAgem9vbU91dCgpOworICAgICAgICBldmVudC0+YWNjZXB0
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorICAgIE1haW5XaW5kb3c6OmtleVBy
ZXNzRXZlbnQoZXZlbnQpOworfQorCit2b2lkIExhdW5jaGVyV2luZG93OjpncmFiWm9vbUtleXMo
Ym9vbCBncmFiKQoreworI2lmZGVmIFFfV1NfTUFFTU9fNQorICAgIGlmICghd2luSWQoKSkgewor
ICAgICAgICBxV2FybmluZygiQ2FuJ3QgZ3JhYiBrZXlzIHVubGVzcyB3ZSBoYXZlIGEgd2luZG93
IGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBdG9tIGF0b20gPSBYSW50ZXJu
QXRvbShRWDExSW5mbzo6ZGlzcGxheSgpLCAiX0hJTERPTl9aT09NX0tFWV9BVE9NIiwgRmFsc2Up
OworICAgIGlmICghYXRvbSkgeworICAgICAgICBxV2FybmluZygiVW5hYmxlIHRvIG9idGFpbiBf
SElMRE9OX1pPT01fS0VZX0FUT00iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVu
c2lnbmVkIGxvbmcgdmFsID0gKGdyYWIpID8gMSA6IDA7CisgICAgWENoYW5nZVByb3BlcnR5KFFY
MTFJbmZvOjpkaXNwbGF5KCksIHdpbklkKCksIGF0b20sIFhBX0lOVEVHRVIsIDMyLCBQcm9wTW9k
ZVJlcGxhY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KCZ2YWwpLCAxKTsKKyNl
bmRpZgorfQorCisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDApCit2
b2lkIExhdW5jaGVyV2luZG93OjpzZW5kVG91Y2hFdmVudCgpCit7CisgICAgaWYgKG1fdG91Y2hQ
b2ludHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRRXZlbnQ6OlR5cGUgdHlw
ZSA9IFFFdmVudDo6VG91Y2hVcGRhdGU7CisgICAgaWYgKG1fdG91Y2hQb2ludHMuc2l6ZSgpID09
IDEpIHsKKyAgICAgICAgaWYgKG1fdG91Y2hQb2ludHNbMF0uc3RhdGUoKSA9PSBRdDo6VG91Y2hQ
b2ludFJlbGVhc2VkKQorICAgICAgICAgICAgdHlwZSA9IFFFdmVudDo6VG91Y2hFbmQ7CisgICAg
ICAgIGVsc2UgaWYgKG1fdG91Y2hQb2ludHNbMF0uc3RhdGUoKSA9PSBRdDo6VG91Y2hQb2ludFBy
ZXNzZWQpCisgICAgICAgICAgICB0eXBlID0gUUV2ZW50OjpUb3VjaEJlZ2luOworICAgIH0KKwor
ICAgIFFUb3VjaEV2ZW50IHRvdWNoRXYodHlwZSk7CisgICAgdG91Y2hFdi5zZXRUb3VjaFBvaW50
cyhtX3RvdWNoUG9pbnRzKTsKKyAgICBRQ29yZUFwcGxpY2F0aW9uOjpzZW5kRXZlbnQocGFnZSgp
LCAmdG91Y2hFdik7CisKKyAgICAvLyBBZnRlciBzZW5kaW5nIHRoZSBldmVudCwgcmVtb3ZlIGFs
bCB0b3VjaHBvaW50cyB0aGF0IHdlcmUgcmVsZWFzZWQKKyAgICBpZiAobV90b3VjaFBvaW50c1sw
XS5zdGF0ZSgpID09IFF0OjpUb3VjaFBvaW50UmVsZWFzZWQpCisgICAgICAgIG1fdG91Y2hQb2lu
dHMucmVtb3ZlQXQoMCk7CisgICAgaWYgKG1fdG91Y2hQb2ludHMuc2l6ZSgpID4gMSAmJiBtX3Rv
dWNoUG9pbnRzWzFdLnN0YXRlKCkgPT0gUXQ6OlRvdWNoUG9pbnRSZWxlYXNlZCkKKyAgICAgICAg
bV90b3VjaFBvaW50cy5yZW1vdmVBdCgxKTsKK30KKyNlbmRpZiAvLyBRVF9WRVJTSU9OID49IFFU
X1ZFUlNJT05fQ0hFQ0soNCwgNiwgMCkKKworYm9vbCBMYXVuY2hlcldpbmRvdzo6ZXZlbnRGaWx0
ZXIoUU9iamVjdCogb2JqLCBRRXZlbnQqIGV2ZW50KQoreworICAgIC8vIElmIGNsaWNrIHBvcyBp
cyB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciAoc3F1YXJlIHdpdGggc2l6ZSBkZWZpbmVkIGJ5IGdF
eGl0Q2xpY2tBcmVhKQorICAgIC8vIGFuZCB0aGUgd2luZG93IGlzIG9uIEZ1bGxTY3JlZW4sIHRo
ZSB3aW5kb3cgbXVzdCByZXR1cm4gdG8gaXRzIG9yaWdpbmFsIHN0YXRlLgorICAgIGlmIChldmVu
dC0+dHlwZSgpID09IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlKSB7CisgICAgICAgIFFNb3Vz
ZUV2ZW50KiBldiA9IHN0YXRpY19jYXN0PFFNb3VzZUV2ZW50Kj4oZXZlbnQpOworICAgICAgICBp
ZiAod2luZG93U3RhdGUoKSA9PSBRdDo6V2luZG93RnVsbFNjcmVlbgorICAgICAgICAgICAgJiYg
ZXYtPnBvcygpLngoKSA+ICh3aWR0aCgpIC0gZ0V4aXRDbGlja0FyZWEpCisgICAgICAgICAgICAm
JiBldi0+cG9zKCkueSgpID4gKGhlaWdodCgpIC0gZ0V4aXRDbGlja0FyZWEpKSB7CisKKyAgICAg
ICAgICAgIGVtaXQgZW50ZXJlZEZ1bGxTY3JlZW5Nb2RlKGZhbHNlKTsKKyAgICAgICAgfQorICAg
IH0KKworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA2LCAwKQorICAgIGlm
ICghbV90b3VjaE1vY2tpbmcpCisgICAgICAgIHJldHVybiBRT2JqZWN0OjpldmVudEZpbHRlcihv
YmosIGV2ZW50KTsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IFFFdmVudDo6TW91c2VCdXR0
b25QcmVzcworICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IFFFdmVudDo6TW91c2VCdXR0b25S
ZWxlYXNlCisgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1dHRvbkRi
bENsaWNrCisgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZU1vdmUpIHsK
KworICAgICAgICBRTW91c2VFdmVudCogZXYgPSBzdGF0aWNfY2FzdDxRTW91c2VFdmVudCo+KGV2
ZW50KTsKKyAgICAgICAgaWYgKGV2LT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZU1vdmUKKyAgICAg
ICAgICAgICYmICEoZXYtPmJ1dHRvbnMoKSAmIFF0OjpMZWZ0QnV0dG9uKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCB0b3VjaFBv
aW50OworICAgICAgICB0b3VjaFBvaW50LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50TW92ZWQpOwor
ICAgICAgICBpZiAoKGV2LT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzCisgICAg
ICAgICAgICAgfHwgZXYtPnR5cGUoKSA9PSBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xpY2spKQor
ICAgICAgICAgICAgdG91Y2hQb2ludC5zZXRTdGF0ZShRdDo6VG91Y2hQb2ludFByZXNzZWQpOwor
ICAgICAgICBlbHNlIGlmIChldi0+dHlwZSgpID09IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNl
KQorICAgICAgICAgICAgdG91Y2hQb2ludC5zZXRTdGF0ZShRdDo6VG91Y2hQb2ludFJlbGVhc2Vk
KTsKKworICAgICAgICB0b3VjaFBvaW50LnNldElkKDApOworICAgICAgICB0b3VjaFBvaW50LnNl
dFNjcmVlblBvcyhldi0+Z2xvYmFsUG9zKCkpOworICAgICAgICB0b3VjaFBvaW50LnNldFBvcyhl
di0+cG9zKCkpOworICAgICAgICB0b3VjaFBvaW50LnNldFByZXNzdXJlKDEpOworCisgICAgICAg
IC8vIElmIHRoZSBwb2ludCBhbHJlYWR5IGV4aXN0cywgdXBkYXRlIGl0LiBPdGhlcndpc2UgY3Jl
YXRlIGl0LgorICAgICAgICBpZiAobV90b3VjaFBvaW50cy5zaXplKCkgPiAwICYmICFtX3RvdWNo
UG9pbnRzWzBdLmlkKCkpCisgICAgICAgICAgICBtX3RvdWNoUG9pbnRzWzBdID0gdG91Y2hQb2lu
dDsKKyAgICAgICAgZWxzZSBpZiAobV90b3VjaFBvaW50cy5zaXplKCkgPiAxICYmICFtX3RvdWNo
UG9pbnRzWzFdLmlkKCkpCisgICAgICAgICAgICBtX3RvdWNoUG9pbnRzWzFdID0gdG91Y2hQb2lu
dDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV90b3VjaFBvaW50cy5hcHBlbmQodG91Y2hQ
b2ludCk7CisKKyAgICAgICAgc2VuZFRvdWNoRXZlbnQoKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gUUV2ZW50OjpLZXlQcmVzcworICAgICAgICAmJiBzdGF0aWNfY2FzdDxRS2V5
RXZlbnQqPihldmVudCktPmtleSgpID09IFF0OjpLZXlfRgorICAgICAgICAmJiBzdGF0aWNfY2Fz
dDxRS2V5RXZlbnQqPihldmVudCktPm1vZGlmaWVycygpID09IFF0OjpDb250cm9sTW9kaWZpZXIp
IHsKKworICAgICAgICAvLyBJZiB0aGUga2V5Ym9hcmQgcG9pbnQgaXMgYWxyZWFkeSBwcmVzc2Vk
LCByZWxlYXNlIGl0LgorICAgICAgICAvLyBPdGhlcndpc2UgY3JlYXRlIGl0IGFuZCBhcHBlbmQg
dG8gbV90b3VjaFBvaW50cy4KKyAgICAgICAgaWYgKG1fdG91Y2hQb2ludHMuc2l6ZSgpID4gMCAm
JiBtX3RvdWNoUG9pbnRzWzBdLmlkKCkgPT0gMSkgeworICAgICAgICAgICAgbV90b3VjaFBvaW50
c1swXS5zZXRTdGF0ZShRdDo6VG91Y2hQb2ludFJlbGVhc2VkKTsKKyAgICAgICAgICAgIHNlbmRU
b3VjaEV2ZW50KCk7CisgICAgICAgIH0gZWxzZSBpZiAobV90b3VjaFBvaW50cy5zaXplKCkgPiAx
ICYmIG1fdG91Y2hQb2ludHNbMV0uaWQoKSA9PSAxKSB7CisgICAgICAgICAgICBtX3RvdWNoUG9p
bnRzWzFdLnNldFN0YXRlKFF0OjpUb3VjaFBvaW50UmVsZWFzZWQpOworICAgICAgICAgICAgc2Vu
ZFRvdWNoRXZlbnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFFUb3VjaEV2ZW50
OjpUb3VjaFBvaW50IHRvdWNoUG9pbnQ7CisgICAgICAgICAgICB0b3VjaFBvaW50LnNldFN0YXRl
KFF0OjpUb3VjaFBvaW50UHJlc3NlZCk7CisgICAgICAgICAgICB0b3VjaFBvaW50LnNldElkKDEp
OworICAgICAgICAgICAgdG91Y2hQb2ludC5zZXRTY3JlZW5Qb3MoUUN1cnNvcjo6cG9zKCkpOwor
ICAgICAgICAgICAgdG91Y2hQb2ludC5zZXRQb3MobV92aWV3LT5tYXBGcm9tR2xvYmFsKFFDdXJz
b3I6OnBvcygpKSk7CisgICAgICAgICAgICB0b3VjaFBvaW50LnNldFByZXNzdXJlKDEpOworICAg
ICAgICAgICAgbV90b3VjaFBvaW50cy5hcHBlbmQodG91Y2hQb2ludCk7CisgICAgICAgICAgICBz
ZW5kVG91Y2hFdmVudCgpOworCisgICAgICAgICAgICAvLyBBZnRlciBzZW5kaW5nIHRoZSBldmVu
dCwgY2hhbmdlIHRoZSB0b3VjaHBvaW50IHN0YXRlIHRvIHN0YXRpb25hcnkKKyAgICAgICAgICAg
IG1fdG91Y2hQb2ludHMubGFzdCgpLnNldFN0YXRlKFF0OjpUb3VjaFBvaW50U3RhdGlvbmFyeSk7
CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NI
RUNLKDQsIDYsIDApCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTGF1bmNoZXJXaW5k
b3c6OmxvYWRTdGFydGVkKCkKK3sKKyAgICBtX3ZpZXctPnNldEZvY3VzKFF0OjpPdGhlckZvY3Vz
UmVhc29uKTsKK30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6bG9hZEZpbmlzaGVkKCkKK3sKKyAg
ICBRVXJsIHVybCA9IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgpOworICAgIHNldEFkZHJlc3NV
cmwodXJsLnRvU3RyaW5nKFFVcmw6OlJlbW92ZVVzZXJJbmZvKSk7CisgICAgYWRkQ29tcGxldGVy
RW50cnkodXJsKTsKK30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6c2hvd0xpbmtIb3Zlcihjb25z
dCBRU3RyaW5nICZsaW5rLCBjb25zdCBRU3RyaW5nICZ0b29sVGlwKQoreworI2lmbmRlZiBRX1dT
X01BRU1PXzUKKyAgICBzdGF0dXNCYXIoKS0+c2hvd01lc3NhZ2UobGluayk7CisjZW5kaWYKKyNp
Zm5kZWYgUVRfTk9fVE9PTFRJUAorICAgIGlmICghdG9vbFRpcC5pc0VtcHR5KCkpCisgICAgICAg
IFFUb29sVGlwOjpzaG93VGV4dChRQ3Vyc29yOjpwb3MoKSwgdG9vbFRpcCk7CisjZW5kaWYKK30K
Kwordm9pZCBMYXVuY2hlcldpbmRvdzo6em9vbUFuaW1hdGlvbkZpbmlzaGVkKCkKK3sKKyAgICBp
ZiAoIWlzR3JhcGhpY3NCYXNlZCgpKQorICAgICAgICByZXR1cm47CisgICAgUUdyYXBoaWNzV2Vi
VmlldyogdmlldyA9IHN0YXRpY19jYXN0PFdlYlZpZXdHcmFwaGljc0Jhc2VkKj4obV92aWV3KS0+
Z3JhcGhpY3NXZWJWaWV3KCk7CisgICAgdmlldy0+c2V0VGlsZWRCYWNraW5nU3RvcmVGcm96ZW4o
ZmFsc2UpOworfQorCit2b2lkIExhdW5jaGVyV2luZG93OjphcHBseVpvb20oKQoreworI2lmIFFU
X1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA2LCAwKQorICAgIGlmIChpc0dyYXBoaWNz
QmFzZWQoKSAmJiBwYWdlKCktPnNldHRpbmdzKCktPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdz
OjpUaWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQpKSB7CisgICAgICAgIFFHcmFwaGljc1dlYlZpZXcq
IHZpZXcgPSBzdGF0aWNfY2FzdDxXZWJWaWV3R3JhcGhpY3NCYXNlZCo+KG1fdmlldyktPmdyYXBo
aWNzV2ViVmlldygpOworICAgICAgICB2aWV3LT5zZXRUaWxlZEJhY2tpbmdTdG9yZUZyb3plbih0
cnVlKTsKKyAgICAgICAgaWYgKCFtX3pvb21BbmltYXRpb24pIHsKKyAgICAgICAgICAgIG1fem9v
bUFuaW1hdGlvbiA9IG5ldyBRUHJvcGVydHlBbmltYXRpb24odmlldywgInNjYWxlIik7CisgICAg
ICAgICAgICBtX3pvb21BbmltYXRpb24tPnNldFN0YXJ0VmFsdWUodmlldy0+c2NhbGUoKSk7Cisg
ICAgICAgICAgICBjb25uZWN0KG1fem9vbUFuaW1hdGlvbiwgU0lHTkFMKGZpbmlzaGVkKCkpLCB0
aGlzLCBTTE9UKHpvb21BbmltYXRpb25GaW5pc2hlZCgpKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBtX3pvb21BbmltYXRpb24tPnN0b3AoKTsKKyAgICAgICAgICAgIG1fem9vbUFu
aW1hdGlvbi0+c2V0U3RhcnRWYWx1ZShtX3pvb21BbmltYXRpb24tPmN1cnJlbnRWYWx1ZSgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1fem9vbUFuaW1hdGlvbi0+c2V0RHVyYXRpb24oMzAwKTsK
KyAgICAgICAgbV96b29tQW5pbWF0aW9uLT5zZXRFbmRWYWx1ZShxcmVhbChtX2N1cnJlbnRab29t
KSAvIDEwMC4pOworICAgICAgICBtX3pvb21BbmltYXRpb24tPnN0YXJ0KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBwYWdlKCktPm1haW5GcmFtZSgpLT5zZXRab29tRmFj
dG9yKHFyZWFsKG1fY3VycmVudFpvb20pIC8gMTAwLjApOworfQorCit2b2lkIExhdW5jaGVyV2lu
ZG93Ojp6b29tSW4oKQoreworICAgIGludCBpID0gbV96b29tTGV2ZWxzLmluZGV4T2YobV9jdXJy
ZW50Wm9vbSk7CisgICAgUV9BU1NFUlQoaSA+PSAwKTsKKyAgICBpZiAoaSA8IG1fem9vbUxldmVs
cy5jb3VudCgpIC0gMSkKKyAgICAgICAgbV9jdXJyZW50Wm9vbSA9IG1fem9vbUxldmVsc1tpICsg
MV07CisKKyAgICBhcHBseVpvb20oKTsKK30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6em9vbU91
dCgpCit7CisgICAgaW50IGkgPSBtX3pvb21MZXZlbHMuaW5kZXhPZihtX2N1cnJlbnRab29tKTsK
KyAgICBRX0FTU0VSVChpID49IDApOworICAgIGlmIChpID4gMCkKKyAgICAgICAgbV9jdXJyZW50
Wm9vbSA9IG1fem9vbUxldmVsc1tpIC0gMV07CisKKyAgICBhcHBseVpvb20oKTsKK30KKwordm9p
ZCBMYXVuY2hlcldpbmRvdzo6cmVzZXRab29tKCkKK3sKKyAgICBtX2N1cnJlbnRab29tID0gMTAw
OworICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnNldFpvb21GYWN0b3IoMS4wKTsKK30KKwordm9p
ZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlWm9vbVRleHRPbmx5KGJvb2wgYikKK3sKKyAgICBwYWdl
KCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Olpvb21UZXh0T25seSwg
Yik7Cit9CisKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6OnByaW50KCkKK3sKKyNpZiAhZGVmaW5lZChR
VF9OT19QUklOVEVSKQorICAgIFFQcmludFByZXZpZXdEaWFsb2cgZGxnKHRoaXMpOworICAgIGNv
bm5lY3QoJmRsZywgU0lHTkFMKHBhaW50UmVxdWVzdGVkKFFQcmludGVyKikpLAorICAgICAgICAg
ICAgcGFnZSgpLT5tYWluRnJhbWUoKSwgU0xPVChwcmludChRUHJpbnRlciopKSk7CisgICAgZGxn
LmV4ZWMoKTsKKyNlbmRpZgorfQorCit2b2lkIExhdW5jaGVyV2luZG93OjpzY3JlZW5zaG90KCkK
K3sKKyAgICBRUGl4bWFwIHBpeG1hcCA9IFFQaXhtYXA6OmdyYWJXaWRnZXQobV92aWV3KTsKKyAg
ICBRTGFiZWwqIGxhYmVsID0gbmV3IFFMYWJlbDsKKyAgICBsYWJlbC0+c2V0QXR0cmlidXRlKFF0
OjpXQV9EZWxldGVPbkNsb3NlKTsKKyAgICBsYWJlbC0+c2V0V2luZG93VGl0bGUoIlNjcmVlbnNo
b3QgLSBQcmV2aWV3Iik7CisgICAgbGFiZWwtPnNldFBpeG1hcChwaXhtYXApOworICAgIGxhYmVs
LT5zaG93KCk7CisKKyAgICBRU3RyaW5nIGZpbGVOYW1lID0gUUZpbGVEaWFsb2c6OmdldFNhdmVG
aWxlTmFtZShsYWJlbCwgIlNjcmVlbnNob3QiKTsKKyAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHko
KSkgeworICAgICAgICBwaXhtYXAuc2F2ZShmaWxlTmFtZSwgInBuZyIpOworICAgICAgICBsYWJl
bC0+c2V0V2luZG93VGl0bGUoUVN0cmluZygiU2NyZWVuc2hvdCAtIFNhdmVkIGF0ICUxIikuYXJn
KGZpbGVOYW1lKSk7CisgICAgfQorfQorCit2b2lkIExhdW5jaGVyV2luZG93OjpzZXRFZGl0YWJs
ZShib29sIG9uKQoreworICAgIHBhZ2UoKS0+c2V0Q29udGVudEVkaXRhYmxlKG9uKTsKKyAgICBt
X2Zvcm1hdE1lbnVBY3Rpb24tPnNldFZpc2libGUob24pOworfQorCisvKgordm9pZCBMYXVuY2hl
cldpbmRvdzo6ZHVtcFBsdWdpbnMoKSB7CisgICAgUUxpc3Q8UVdlYlBsdWdpbkluZm8+IHBsdWdp
bnMgPSBRV2ViU2V0dGluZ3M6OnBsdWdpbkRhdGFiYXNlKCktPnBsdWdpbnMoKTsKKyAgICBmb3Jl
YWNoIChjb25zdCBRV2ViUGx1Z2luSW5mbyBwbHVnaW4sIHBsdWdpbnMpIHsKKyAgICAgICAgcURl
YnVnKCkgPDwgIlBsdWdpbjoiIDw8IHBsdWdpbi5uYW1lKCk7CisgICAgICAgIGZvcmVhY2ggKGNv
bnN0IFFXZWJQbHVnaW5JbmZvOjpNaW1lVHlwZSBtaW1lLCBwbHVnaW4ubWltZVR5cGVzKCkpIHsK
KyAgICAgICAgICAgIHFEZWJ1ZygpIDw8ICIgICAiIDw8IG1pbWUubmFtZTsKKyAgICAgICAgfQor
ICAgIH0KK30KKyovCisKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6OmR1bXBIdG1sKCkKK3sKKyAgICBx
RGVidWcoKSA8PCAiSFRNTDogIiA8PCBwYWdlKCktPm1haW5GcmFtZSgpLT50b0h0bWwoKTsKK30K
Kwordm9pZCBMYXVuY2hlcldpbmRvdzo6c2VsZWN0RWxlbWVudHMoKQoreworICAgIGJvb2wgb2s7
CisgICAgUVN0cmluZyBzdHIgPSBRSW5wdXREaWFsb2c6OmdldFRleHQodGhpcywgIlNlbGVjdCBl
bGVtZW50cyIsICJDaG9vc2UgZWxlbWVudHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFFMaW5lRWRpdDo6Tm9ybWFsLCAiYSIsICZvayk7CisKKyAgICBpZiAob2sg
JiYgIXN0ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgUVdlYkVsZW1lbnRDb2xsZWN0aW9uIHJlc3Vs
dCA9ICBwYWdlKCktPm1haW5GcmFtZSgpLT5maW5kQWxsRWxlbWVudHMoc3RyKTsKKyAgICAgICAg
Zm9yZWFjaCAoUVdlYkVsZW1lbnQgZSwgcmVzdWx0KQorICAgICAgICAgICAgZS5zZXRTdHlsZVBy
b3BlcnR5KCJiYWNrZ3JvdW5kLWNvbG9yIiwgInllbGxvdyIpOworI2lmbmRlZiBRX1dTX01BRU1P
XzUKKyAgICAgICAgc3RhdHVzQmFyKCktPnNob3dNZXNzYWdlKFFTdHJpbmcoIiUxIGVsZW1lbnQo
cykgc2VsZWN0ZWQiKS5hcmcocmVzdWx0LmNvdW50KCkpLCA1MDAwKTsKKyNlbmRpZgorICAgIH0K
K30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6c2V0VG91Y2hNb2NraW5nKGJvb2wgb24pCit7Cisj
aWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDApCisgICAgbV90b3VjaE1v
Y2tpbmcgPSBvbjsKKyNlbmRpZgorfQorCit2b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nKGJvb2wgdG9nZ2xlKQoreworICAgIGdVc2VDb21wb3NpdGluZyA9
IHRvZ2dsZTsKKyAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCB0b2dnbGUpOworfQorCit2b2lkIExh
dW5jaGVyV2luZG93Ojp0b2dnbGVUaWxlZEJhY2tpbmdTdG9yZShib29sIHRvZ2dsZSkKK3sKKyAg
ICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlRpbGVkQmFj
a2luZ1N0b3JlRW5hYmxlZCwgdG9nZ2xlKTsKK30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6dG9n
Z2xlUmVzaXplc1RvQ29udGVudHMoYm9vbCB0b2dnbGUpCit7CisgICAgc3RhdGljX2Nhc3Q8V2Vi
Vmlld0dyYXBoaWNzQmFzZWQqPihtX3ZpZXcpLT5zZXRSZXNpemVzVG9Db250ZW50cyh0b2dnbGUp
OworfQorCit2b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVXZWJHTChib29sIHRvZ2dsZSkKK3sK
KyAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OldlYkdM
RW5hYmxlZCwgdG9nZ2xlKTsKK30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6aW5pdGlhbGl6ZVZp
ZXcoYm9vbCB1c2VHcmFwaGljc1ZpZXcpCit7CisgICAgZGVsZXRlIG1fdmlldzsKKworICAgIFFT
cGxpdHRlciogc3BsaXR0ZXIgPSBzdGF0aWNfY2FzdDxRU3BsaXR0ZXIqPihjZW50cmFsV2lkZ2V0
KCkpOworCisgICAgaWYgKCF1c2VHcmFwaGljc1ZpZXcpIHsKKyAgICAgICAgV2ViVmlld1RyYWRp
dGlvbmFsKiB2aWV3ID0gbmV3IFdlYlZpZXdUcmFkaXRpb25hbChzcGxpdHRlcik7CisgICAgICAg
IHZpZXctPnNldFBhZ2UocGFnZSgpKTsKKworICAgICAgICB2aWV3LT5pbnN0YWxsRXZlbnRGaWx0
ZXIodGhpcyk7CisKKyAgICAgICAgbV92aWV3ID0gdmlldzsKKyAgICB9IGVsc2UgeworICAgICAg
ICBXZWJWaWV3R3JhcGhpY3NCYXNlZCogdmlldyA9IG5ldyBXZWJWaWV3R3JhcGhpY3NCYXNlZChz
cGxpdHRlcik7CisgICAgICAgIHZpZXctPnNldFBhZ2UocGFnZSgpKTsKKworICAgICAgICBpZiAo
bV9mbGlwQW5pbWF0ZWQpCisgICAgICAgICAgICBjb25uZWN0KG1fZmxpcEFuaW1hdGVkLCBTSUdO
QUwodHJpZ2dlcmVkKCkpLCB2aWV3LCBTTE9UKGFuaW1hdGVkRmxpcCgpKSk7CisKKyAgICAgICAg
aWYgKG1fZmxpcFlBbmltYXRlZCkKKyAgICAgICAgICAgIGNvbm5lY3QobV9mbGlwWUFuaW1hdGVk
LCBTSUdOQUwodHJpZ2dlcmVkKCkpLCB2aWV3LCBTTE9UKGFuaW1hdGVkWUZsaXAoKSkpOworCisg
ICAgICAgIGNvbm5lY3QodmlldywgU0lHTkFMKGN1cnJlbnRGUFNVcGRhdGVkKGludCkpLCB0aGlz
LCBTTE9UKHVwZGF0ZUZQUyhpbnQpKSk7CisKKyAgICAgICAgdmlldy0+aW5zdGFsbEV2ZW50Rmls
dGVyKHRoaXMpOworICAgICAgICAvLyBUaGUgaW1wbGVtZW50YXRpb24gb2YgUUFic3RyYWN0U2Ny
b2xsQXJlYTo6ZXZlbnRGaWx0ZXIgbWFrZXMgdXMgbmVlZAorICAgICAgICAvLyB0byBpbnN0YWxs
IHRoZSBldmVudCBmaWx0ZXIgYWxzbyBvbiB0aGUgdmlld3BvcnQgb2YgYSBRR3JhcGhpY3NWaWV3
LgorICAgICAgICB2aWV3LT52aWV3cG9ydCgpLT5pbnN0YWxsRXZlbnRGaWx0ZXIodGhpcyk7CisK
KyAgICAgICAgbV92aWV3ID0gdmlldzsKKyAgICB9CisKKyNpZiBRVF9WRVJTSU9OID49IFFUX1ZF
UlNJT05fQ0hFQ0soNCwgNiwgMCkKKyAgICBtX3RvdWNoTW9ja2luZyA9IGZhbHNlOworI2VuZGlm
Cit9CisKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZVNwYXRpYWxOYXZpZ2F0aW9uKGJvb2wg
YikKK3sKKyAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6
OlNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCwgYik7Cit9CisKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6
OnRvZ2dsZUZ1bGxTY3JlZW5Nb2RlKGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisg
ICAgICAgIHNldFdpbmRvd1N0YXRlKFF0OjpXaW5kb3dGdWxsU2NyZWVuKTsKKyAgICBlbHNlIHsK
KyNpZiBkZWZpbmVkKFFfV1NfUzYwKQorICAgICAgICBzZXRXaW5kb3dTdGF0ZShRdDo6V2luZG93
TWF4aW1pemVkKTsKKyNlbHNlCisgICAgICAgIHNldFdpbmRvd1N0YXRlKFF0OjpXaW5kb3dOb1N0
YXRlKTsKKyNlbmRpZgorICAgIH0KK30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6c2hvd0ZQUyhi
b29sIGVuYWJsZSkKK3sKKyAgICBpZiAoIWlzR3JhcGhpY3NCYXNlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBnU2hvd0ZyYW1lUmF0ZSA9IGVuYWJsZTsKKyAgICBXZWJWaWV3R3JhcGhpY3NC
YXNlZCogdmlldyA9IHN0YXRpY19jYXN0PFdlYlZpZXdHcmFwaGljc0Jhc2VkKj4obV92aWV3KTsK
KyAgICB2aWV3LT5zZXRGcmFtZVJhdGVNZWFzdXJlbWVudEVuYWJsZWQoZW5hYmxlKTsKKworICAg
IGlmICghZW5hYmxlKSB7CisjaWYgZGVmaW5lZChRX1dTX01BRU1PXzUpICYmIGRlZmluZWQoUV9X
U19TNjApCisgICAgICAgIHNldFdpbmRvd1RpdGxlKCIiKTsKKyNlbHNlCisgICAgICAgIHN0YXR1
c0JhcigpLT5jbGVhck1lc3NhZ2UoKTsKKyNlbmRpZgorICAgIH0KK30KKwordm9pZCBMYXVuY2hl
cldpbmRvdzo6Y2hhbmdlVmlld3BvcnRVcGRhdGVNb2RlKGludCBtb2RlKQoreworICAgIGdWaWV3
cG9ydFVwZGF0ZU1vZGUgPSBRR3JhcGhpY3NWaWV3OjpWaWV3cG9ydFVwZGF0ZU1vZGUobW9kZSk7
CisKKyAgICBpZiAoIWlzR3JhcGhpY3NCYXNlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBX
ZWJWaWV3R3JhcGhpY3NCYXNlZCogdmlldyA9IHN0YXRpY19jYXN0PFdlYlZpZXdHcmFwaGljc0Jh
c2VkKj4obV92aWV3KTsKKyAgICB2aWV3LT5zZXRWaWV3cG9ydFVwZGF0ZU1vZGUoZ1ZpZXdwb3J0
VXBkYXRlTW9kZSk7Cit9CisKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZUZyYW1lRmxhdHRl
bmluZyhib29sIHRvZ2dsZSkKK3sKKyAgICBnVXNlRnJhbWVGbGF0dGVuaW5nID0gdG9nZ2xlOwor
ICAgIHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6RnJhbWVG
bGF0dGVuaW5nRW5hYmxlZCwgdG9nZ2xlKTsKK30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6dG9n
Z2xlSW50ZXJydXB0aW5nSmF2YVNjcmlwdEVuYWJsZWQoYm9vbCBlbmFibGUpCit7CisgICAgcGFn
ZSgpLT5zZXRJbnRlcnJ1cHRpbmdKYXZhU2NyaXB0RW5hYmxlZChlbmFibGUpOworfQorCit2b2lk
IExhdW5jaGVyV2luZG93Ojp0b2dnbGVKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MoYm9vbCBlbmFi
bGUpCit7CisgICAgcGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdz
OjpKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MsIGVuYWJsZSk7Cit9CisKKyNpZiBkZWZpbmVkKFFU
X0NPTkZJR1VSRURfV0lUSF9PUEVOR0wpCit2b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVRR0xX
aWRnZXRWaWV3cG9ydChib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoIWlzR3JhcGhpY3NCYXNlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBnVXNlUUdMV2lkZ2V0Vmlld3BvcnQgPSBlbmFibGU7
CisgICAgV2ViVmlld0dyYXBoaWNzQmFzZWQqIHZpZXcgPSBzdGF0aWNfY2FzdDxXZWJWaWV3R3Jh
cGhpY3NCYXNlZCo+KG1fdmlldyk7CisKKyAgICB2aWV3LT5zZXRWaWV3cG9ydChlbmFibGUgPyBu
ZXcgUUdMV2lkZ2V0KCkgOiAwKTsKK30KKyNlbmRpZgorCit2b2lkIExhdW5jaGVyV2luZG93Ojpz
aG93VXNlckFnZW50RGlhbG9nKCkKK3sKKyAgICBRU3RyaW5nTGlzdCBpdGVtczsKKyAgICBRRmls
ZSBmaWxlKCI6L3VzZXJhZ2VudGxpc3QudHh0Iik7CisgICAgaWYgKGZpbGUub3BlbihRSU9EZXZp
Y2U6OlJlYWRPbmx5KSkgeworICAgICAgICAgd2hpbGUgKCFmaWxlLmF0RW5kKCkpCisgICAgICAg
ICAgICBpdGVtcyA8PCBmaWxlLnJlYWRMaW5lKCkudHJpbW1lZCgpOworICAgICAgICBmaWxlLmNs
b3NlKCk7CisgICAgfQorCisgICAgUVNldHRpbmdzIHNldHRpbmdzOworICAgIFFTdHJpbmcgY3Vz
dG9tVXNlckFnZW50ID0gc2V0dGluZ3MudmFsdWUoIkN1c3RvbVVzZXJBZ2VudCIpLnRvU3RyaW5n
KCk7CisgICAgaWYgKCFpdGVtcy5jb250YWlucyhjdXN0b21Vc2VyQWdlbnQpICYmICFjdXN0b21V
c2VyQWdlbnQuaXNFbXB0eSgpKQorICAgICAgICBpdGVtcyA8PCBjdXN0b21Vc2VyQWdlbnQ7CisK
KyAgICBRRGlhbG9nKiBkaWFsb2cgPSBuZXcgUURpYWxvZyh0aGlzKTsKKyAgICBkaWFsb2ctPnJl
c2l6ZShzaXplKCkud2lkdGgoKSAqIDAuNywgZGlhbG9nLT5zaXplKCkuaGVpZ2h0KCkpOworICAg
IGRpYWxvZy0+c2V0TWF4aW11bUhlaWdodChkaWFsb2ctPnNpemUoKS5oZWlnaHQoKSk7CisgICAg
ZGlhbG9nLT5zZXRXaW5kb3dUaXRsZSgiQ2hhbmdlIFVzZXIgQWdlbnQiKTsKKworICAgIFFWQm94
TGF5b3V0KiBsYXlvdXQgPSBuZXcgUVZCb3hMYXlvdXQoZGlhbG9nKTsKKyAgICBkaWFsb2ctPnNl
dExheW91dChsYXlvdXQpOworCisgICAgUUNvbWJvQm94KiBjb21ibyA9IG5ldyBRQ29tYm9Cb3go
ZGlhbG9nKTsKKyAgICBjb21iby0+c2V0U2l6ZUFkanVzdFBvbGljeShRQ29tYm9Cb3g6OkFkanVz
dFRvTWluaW11bUNvbnRlbnRzTGVuZ3RoKTsKKyAgICBjb21iby0+c2V0RWRpdGFibGUodHJ1ZSk7
CisgICAgY29tYm8tPmluc2VydEl0ZW1zKDAsIGl0ZW1zKTsKKyAgICBsYXlvdXQtPmFkZFdpZGdl
dChjb21ibyk7CisKKyAgICBpbnQgaW5kZXggPSBjb21iby0+ZmluZFRleHQocGFnZSgpLT51c2Vy
QWdlbnRGb3JVcmwoUVVybCgpKSk7CisgICAgY29tYm8tPnNldEN1cnJlbnRJbmRleChpbmRleCk7
CisKKyAgICBRRGlhbG9nQnV0dG9uQm94KiBidXR0b25Cb3ggPSBuZXcgUURpYWxvZ0J1dHRvbkJv
eChRRGlhbG9nQnV0dG9uQm94OjpPaworICAgICAgICAgICAgfCBRRGlhbG9nQnV0dG9uQm94OjpD
YW5jZWwsIFF0OjpIb3Jpem9udGFsLCBkaWFsb2cpOworICAgIGNvbm5lY3QoYnV0dG9uQm94LCBT
SUdOQUwoYWNjZXB0ZWQoKSksIGRpYWxvZywgU0xPVChhY2NlcHQoKSkpOworICAgIGNvbm5lY3Qo
YnV0dG9uQm94LCBTSUdOQUwocmVqZWN0ZWQoKSksIGRpYWxvZywgU0xPVChyZWplY3QoKSkpOwor
ICAgIGxheW91dC0+YWRkV2lkZ2V0KGJ1dHRvbkJveCk7CisKKyAgICBpZiAoZGlhbG9nLT5leGVj
KCkgJiYgIWNvbWJvLT5jdXJyZW50VGV4dCgpLmlzRW1wdHkoKSkgeworICAgICAgICBwYWdlKCkt
PnNldFVzZXJBZ2VudChjb21iby0+Y3VycmVudFRleHQoKSk7CisgICAgICAgIGlmICghaXRlbXMu
Y29udGFpbnMoY29tYm8tPmN1cnJlbnRUZXh0KCkpKQorICAgICAgICAgICAgc2V0dGluZ3Muc2V0
VmFsdWUoIkN1c3RvbVVzZXJBZ2VudCIsIGNvbWJvLT5jdXJyZW50VGV4dCgpKTsKKyAgICB9CisK
KyAgICBkZWxldGUgZGlhbG9nOworfQorCitMYXVuY2hlcldpbmRvdyogTGF1bmNoZXJXaW5kb3c6
Om5ld1dpbmRvdygpCit7CisgICAgTGF1bmNoZXJXaW5kb3cqIG13ID0gbmV3IExhdW5jaGVyV2lu
ZG93KHRoaXMsIGZhbHNlKTsKKyAgICBtdy0+c2hvdygpOworICAgIHJldHVybiBtdzsKK30KKwor
TGF1bmNoZXJXaW5kb3cqIExhdW5jaGVyV2luZG93OjpjbG9uZVdpbmRvdygpCit7CisgICAgTGF1
bmNoZXJXaW5kb3cqIG13ID0gbmV3IExhdW5jaGVyV2luZG93KHRoaXMsIHRydWUpOworICAgIG13
LT5zaG93KCk7CisgICAgcmV0dXJuIG13OworfQorCit2b2lkIExhdW5jaGVyV2luZG93Ojp1cGRh
dGVGUFMoaW50IGZwcykKK3sKKyAgICBRU3RyaW5nIGZwc1N0YXR1c1RleHQgPSBRU3RyaW5nKCJD
dXJyZW50IEZQUzogJTEiKS5hcmcoZnBzKTsKKworI2lmIGRlZmluZWQoUV9XU19NQUVNT181KSAm
JiBkZWZpbmVkKFFfV1NfUzYwKQorICAgIHNldFdpbmRvd1RpdGxlKGZwc1N0YXR1c1RleHQpOwor
I2Vsc2UKKyAgICBzdGF0dXNCYXIoKS0+c2hvd01lc3NhZ2UoZnBzU3RhdHVzVGV4dCk7CisjZW5k
aWYKK30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6Y3JlYXRlQ2hyb21lKCkKK3sKKyAgICBRTWVu
dSogZmlsZU1lbnUgPSBtZW51QmFyKCktPmFkZE1lbnUoIiZGaWxlIik7CisgICAgZmlsZU1lbnUt
PmFkZEFjdGlvbigiTmV3IFdpbmRvdyIsIHRoaXMsIFNMT1QobmV3V2luZG93KCkpLCBRS2V5U2Vx
dWVuY2U6Ok5ldyk7CisgICAgZmlsZU1lbnUtPmFkZEFjdGlvbih0cigiT3BlbiBGaWxlLi4uIiks
IHRoaXMsIFNMT1Qob3BlbkZpbGUoKSksIFFLZXlTZXF1ZW5jZTo6T3Blbik7CisgICAgZmlsZU1l
bnUtPmFkZEFjdGlvbih0cigiT3BlbiBMb2NhdGlvbi4uLiIpLCB0aGlzLCBTTE9UKG9wZW5Mb2Nh
dGlvbigpKSwgUUtleVNlcXVlbmNlKFF0OjpDVFJMIHwgUXQ6OktleV9MKSk7CisgICAgZmlsZU1l
bnUtPmFkZEFjdGlvbigiQ2xvc2UgV2luZG93IiwgdGhpcywgU0xPVChjbG9zZSgpKSwgUUtleVNl
cXVlbmNlOjpDbG9zZSk7CisgICAgZmlsZU1lbnUtPmFkZFNlcGFyYXRvcigpOworICAgIGZpbGVN
ZW51LT5hZGRBY3Rpb24oIlRha2UgU2NyZWVuIFNob3QuLi4iLCB0aGlzLCBTTE9UKHNjcmVlbnNo
b3QoKSkpOworICAgIGZpbGVNZW51LT5hZGRBY3Rpb24odHIoIlByaW50Li4uIiksIHRoaXMsIFNM
T1QocHJpbnQoKSksIFFLZXlTZXF1ZW5jZTo6UHJpbnQpOworICAgIGZpbGVNZW51LT5hZGRTZXBh
cmF0b3IoKTsKKyAgICBmaWxlTWVudS0+YWRkQWN0aW9uKCJRdWl0IiwgUUFwcGxpY2F0aW9uOjpp
bnN0YW5jZSgpLCBTTE9UKGNsb3NlQWxsV2luZG93cygpKSwgUUtleVNlcXVlbmNlKFF0OjpDVFJM
IHwgUXQ6OktleV9RKSk7CisKKyAgICBRTWVudSogZWRpdE1lbnUgPSBtZW51QmFyKCktPmFkZE1l
bnUoIiZFZGl0Iik7CisgICAgZWRpdE1lbnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV2Vi
UGFnZTo6VW5kbykpOworICAgIGVkaXRNZW51LT5hZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdl
YlBhZ2U6OlJlZG8pKTsKKyAgICBlZGl0TWVudS0+YWRkU2VwYXJhdG9yKCk7CisgICAgZWRpdE1l
bnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6Q3V0KSk7CisgICAgZWRpdE1l
bnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6Q29weSkpOworICAgIGVkaXRN
ZW51LT5hZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlBhc3RlKSk7CisgICAgZWRp
dE1lbnUtPmFkZFNlcGFyYXRvcigpOworICAgIFFBY3Rpb24qIHNldEVkaXRhYmxlID0gZWRpdE1l
bnUtPmFkZEFjdGlvbigiU2V0IEVkaXRhYmxlIiwgdGhpcywgU0xPVChzZXRFZGl0YWJsZShib29s
KSkpOworICAgIHNldEVkaXRhYmxlLT5zZXRDaGVja2FibGUodHJ1ZSk7CisKKyAgICBRTWVudSog
dmlld01lbnUgPSBtZW51QmFyKCktPmFkZE1lbnUoIiZWaWV3Iik7CisgICAgdmlld01lbnUtPmFk
ZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6U3RvcCkpOworICAgIHZpZXdNZW51LT5h
ZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlJlbG9hZCkpOworICAgIHZpZXdNZW51
LT5hZGRTZXBhcmF0b3IoKTsKKyAgICBRQWN0aW9uKiB6b29tSW4gPSB2aWV3TWVudS0+YWRkQWN0
aW9uKCJab29tICZJbiIsIHRoaXMsIFNMT1Qoem9vbUluKCkpKTsKKyAgICBRQWN0aW9uKiB6b29t
T3V0ID0gdmlld01lbnUtPmFkZEFjdGlvbigiWm9vbSAmT3V0IiwgdGhpcywgU0xPVCh6b29tT3V0
KCkpKTsKKyAgICBRQWN0aW9uKiByZXNldFpvb20gPSB2aWV3TWVudS0+YWRkQWN0aW9uKCJSZXNl
dCBab29tIiwgdGhpcywgU0xPVChyZXNldFpvb20oKSkpOworICAgIFFBY3Rpb24qIHpvb21UZXh0
T25seSA9IHZpZXdNZW51LT5hZGRBY3Rpb24oIlpvb20gVGV4dCBPbmx5IiwgdGhpcywgU0xPVCh0
b2dnbGVab29tVGV4dE9ubHkoYm9vbCkpKTsKKyAgICB6b29tVGV4dE9ubHktPnNldENoZWNrYWJs
ZSh0cnVlKTsKKyAgICB6b29tVGV4dE9ubHktPnNldENoZWNrZWQoZmFsc2UpOworICAgIHZpZXdN
ZW51LT5hZGRTZXBhcmF0b3IoKTsKKyAgICB2aWV3TWVudS0+YWRkQWN0aW9uKCJEdW1wIEhUTUwi
LCB0aGlzLCBTTE9UKGR1bXBIdG1sKCkpKTsKKyAgICAvLyB2aWV3TWVudS0+YWRkQWN0aW9uKCJE
dW1wIHBsdWdpbnMiLCB0aGlzLCBTTE9UKGR1bXBQbHVnaW5zKCkpKTsKKworICAgIFFNZW51KiBm
b3JtYXRNZW51ID0gbmV3IFFNZW51KCJGJm9ybWF0IiwgdGhpcyk7CisgICAgbV9mb3JtYXRNZW51
QWN0aW9uID0gbWVudUJhcigpLT5hZGRNZW51KGZvcm1hdE1lbnUpOworICAgIG1fZm9ybWF0TWVu
dUFjdGlvbi0+c2V0VmlzaWJsZShmYWxzZSk7CisgICAgZm9ybWF0TWVudS0+YWRkQWN0aW9uKHBh
Z2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpUb2dnbGVCb2xkKSk7CisgICAgZm9ybWF0TWVudS0+YWRk
QWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpUb2dnbGVJdGFsaWMpKTsKKyAgICBmb3Jt
YXRNZW51LT5hZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlRvZ2dsZVVuZGVybGlu
ZSkpOworICAgIFFNZW51KiB3cml0aW5nTWVudSA9IGZvcm1hdE1lbnUtPmFkZE1lbnUodHIoIldy
aXRpbmcgRGlyZWN0aW9uIikpOworICAgIHdyaXRpbmdNZW51LT5hZGRBY3Rpb24ocGFnZSgpLT5h
Y3Rpb24oUVdlYlBhZ2U6OlNldFRleHREaXJlY3Rpb25EZWZhdWx0KSk7CisgICAgd3JpdGluZ01l
bnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6U2V0VGV4dERpcmVjdGlvbkxl
ZnRUb1JpZ2h0KSk7CisgICAgd3JpdGluZ01lbnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihR
V2ViUGFnZTo6U2V0VGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0KSk7CisKKyAgICB6b29tSW4tPnNl
dFNob3J0Y3V0KFFLZXlTZXF1ZW5jZShRdDo6Q1RSTCB8IFF0OjpLZXlfUGx1cykpOworICAgIHpv
b21PdXQtPnNldFNob3J0Y3V0KFFLZXlTZXF1ZW5jZShRdDo6Q1RSTCB8IFF0OjpLZXlfTWludXMp
KTsKKyAgICByZXNldFpvb20tPnNldFNob3J0Y3V0KFFLZXlTZXF1ZW5jZShRdDo6Q1RSTCB8IFF0
OjpLZXlfMCkpOworCisgICAgUU1lbnUqIHdpbmRvd01lbnUgPSBtZW51QmFyKCktPmFkZE1lbnUo
IiZXaW5kb3ciKTsKKyAgICBRQWN0aW9uKiB0b2dnbGVGdWxsU2NyZWVuID0gd2luZG93TWVudS0+
YWRkQWN0aW9uKCJUb2dnbGUgRnVsbFNjcmVlbiIsIHRoaXMsIFNJR05BTChlbnRlcmVkRnVsbFNj
cmVlbk1vZGUoYm9vbCkpKTsKKyAgICB0b2dnbGVGdWxsU2NyZWVuLT5zZXRDaGVja2FibGUodHJ1
ZSk7CisgICAgdG9nZ2xlRnVsbFNjcmVlbi0+c2V0Q2hlY2tlZChmYWxzZSk7CisKKyAgICAvLyB3
aGVuIGV4aXQgZnVsbHNjcmVlbiBtb2RlIGJ5IGNsaWNraW5nIG9uIHRoZSBleGl0IGFyZWEgKGJv
dHRvbSByaWdodCBjb3JuZXIpIHdlIG11c3QKKyAgICAvLyB1bmNoZWNrIHRoZSBUb2dnbGUgRnVs
bFNjcmVlbiBhY3Rpb24KKyAgICB0b2dnbGVGdWxsU2NyZWVuLT5jb25uZWN0KHRoaXMsIFNJR05B
TChlbnRlcmVkRnVsbFNjcmVlbk1vZGUoYm9vbCkpLCBTTE9UKHNldENoZWNrZWQoYm9vbCkpKTsK
KworICAgIFFNZW51KiB0b29sc01lbnUgPSBtZW51QmFyKCktPmFkZE1lbnUoIiZEZXZlbG9wIik7
CisKKyAgICBRV2ViU2V0dGluZ3MqIHNldHRpbmdzID0gcGFnZSgpLT5zZXR0aW5ncygpOworCisg
ICAgUU1lbnUqIGdyYXBoaWNzVmlld01lbnUgPSB0b29sc01lbnUtPmFkZE1lbnUoIlFHcmFwaGlj
c1ZpZXciKTsKKyAgICBRQWN0aW9uKiB0b2dnbGVHcmFwaGljc1ZpZXcgPSBncmFwaGljc1ZpZXdN
ZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSB1c2Ugb2YgUUdyYXBoaWNzVmlldyIsIHRoaXMsIFNMT1Qo
aW5pdGlhbGl6ZVZpZXcoYm9vbCkpKTsKKyAgICB0b2dnbGVHcmFwaGljc1ZpZXctPnNldENoZWNr
YWJsZSh0cnVlKTsKKyAgICB0b2dnbGVHcmFwaGljc1ZpZXctPnNldENoZWNrZWQoaXNHcmFwaGlj
c0Jhc2VkKCkpOworCisgICAgUUFjdGlvbiogdG9nZ2xlV2ViR0wgPSB0b29sc01lbnUtPmFkZEFj
dGlvbigiVG9nZ2xlIFdlYkdMIiwgdGhpcywgU0xPVCh0b2dnbGVXZWJHTChib29sKSkpOworICAg
IHRvZ2dsZVdlYkdMLT5zZXRDaGVja2FibGUodHJ1ZSk7CisgICAgdG9nZ2xlV2ViR0wtPnNldENo
ZWNrZWQoc2V0dGluZ3MtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQp
KTsKKworICAgIFFBY3Rpb24qIHNwYXRpYWxOYXZpZ2F0aW9uQWN0aW9uID0gdG9vbHNNZW51LT5h
ZGRBY3Rpb24oIlRvZ2dsZSBTcGF0aWFsIE5hdmlnYXRpb24iLCB0aGlzLCBTTE9UKHRvZ2dsZVNw
YXRpYWxOYXZpZ2F0aW9uKGJvb2wpKSk7CisgICAgc3BhdGlhbE5hdmlnYXRpb25BY3Rpb24tPnNl
dENoZWNrYWJsZSh0cnVlKTsKKyAgICBzcGF0aWFsTmF2aWdhdGlvbkFjdGlvbi0+c2V0U2hvcnRj
dXQoUUtleVNlcXVlbmNlKFF0OjpDVFJMIHwgUXQ6OlNISUZUIHwgUXQ6OktleV9TKSk7CisKKyAg
ICBRQWN0aW9uKiB0b2dnbGVGcmFtZUZsYXR0ZW5pbmcgPSB0b29sc01lbnUtPmFkZEFjdGlvbigi
VG9nZ2xlIEZyYW1lIEZsYXR0ZW5pbmciLCB0aGlzLCBTTE9UKHRvZ2dsZUZyYW1lRmxhdHRlbmlu
Zyhib29sKSkpOworICAgIHRvZ2dsZUZyYW1lRmxhdHRlbmluZy0+c2V0Q2hlY2thYmxlKHRydWUp
OworICAgIHRvZ2dsZUZyYW1lRmxhdHRlbmluZy0+c2V0Q2hlY2tlZChzZXR0aW5ncy0+dGVzdEF0
dHJpYnV0ZShRV2ViU2V0dGluZ3M6OkZyYW1lRmxhdHRlbmluZ0VuYWJsZWQpKTsKKworI2lmIFFU
X1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA2LCAwKQorICAgIFFBY3Rpb24qIHRvdWNo
TW9ja0FjdGlvbiA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJUb2dnbGUgbXVsdGl0b3VjaCBtb2Nr
aW5nIiwgdGhpcywgU0xPVChzZXRUb3VjaE1vY2tpbmcoYm9vbCkpKTsKKyAgICB0b3VjaE1vY2tB
Y3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKKyAgICB0b3VjaE1vY2tBY3Rpb24tPnNldFNob3J0
Y3V0KFFLZXlTZXF1ZW5jZShRdDo6Q1RSTCB8IFF0OjpBTFQgfCBRdDo6S2V5X1QpKTsKKyNlbmRp
ZgorCisgICAgdG9vbHNNZW51LT5hZGRTZXBhcmF0b3IoKTsKKworICAgIFFBY3Rpb24qIHRvZ2ds
ZUludGVycnVwdGluZ0phdmFTY3JpcHRlRW5hYmxlZCA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJF
bmFibGUgaW50ZXJydXB0aW5nIGpzIHNjcmlwdHMiLCB0aGlzLCBTTE9UKHRvZ2dsZUludGVycnVw
dGluZ0phdmFTY3JpcHRFbmFibGVkKGJvb2wpKSk7CisgICAgdG9nZ2xlSW50ZXJydXB0aW5nSmF2
YVNjcmlwdGVFbmFibGVkLT5zZXRDaGVja2FibGUodHJ1ZSk7CisgICAgdG9nZ2xlSW50ZXJydXB0
aW5nSmF2YVNjcmlwdGVFbmFibGVkLT5zZXRDaGVja2VkKGZhbHNlKTsKKworICAgIFFBY3Rpb24q
IHRvZ2dsZUphdmFzY3JpcHRDYW5PcGVuV2luZG93cyA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJF
bmFibGUganMgcG9wdXAgd2luZG93cyIsIHRoaXMsIFNMT1QodG9nZ2xlSmF2YXNjcmlwdENhbk9w
ZW5XaW5kb3dzKGJvb2wpKSk7CisgICAgdG9nZ2xlSmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzLT5z
ZXRDaGVja2FibGUodHJ1ZSk7CisgICAgdG9nZ2xlSmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzLT5z
ZXRDaGVja2VkKGZhbHNlKTsKKworICAgIHRvb2xzTWVudS0+YWRkU2VwYXJhdG9yKCk7CisKKyAg
ICBRQWN0aW9uKiB1c2VyQWdlbnRBY3Rpb24gPSB0b29sc01lbnUtPmFkZEFjdGlvbigiQ2hhbmdl
IFVzZXIgQWdlbnQiLCB0aGlzLCBTTE9UKHNob3dVc2VyQWdlbnREaWFsb2coKSkpOworICAgIHVz
ZXJBZ2VudEFjdGlvbi0+c2V0U2hvcnRjdXQoUUtleVNlcXVlbmNlKFF0OjpDVFJMIHwgUXQ6OlNI
SUZUIHwgUXQ6OktleV9VKSk7CisKKyAgICB0b29sc01lbnUtPmFkZEFjdGlvbigiU2VsZWN0IEVs
ZW1lbnRzLi4uIiwgdGhpcywgU0xPVChzZWxlY3RFbGVtZW50cygpKSk7CisKKyAgICBRQWN0aW9u
KiBzaG93SW5zcGVjdG9yQWN0aW9uID0gdG9vbHNNZW51LT5hZGRBY3Rpb24oIlNob3cgV2ViIElu
c3BlY3RvciIsIG1faW5zcGVjdG9yLCBTTE9UKHNldFZpc2libGUoYm9vbCkpLCBRS2V5U2VxdWVu
Y2UoUXQ6OkNUUkwgfCBRdDo6QUxUIHwgUXQ6OktleV9JKSk7CisgICAgc2hvd0luc3BlY3RvckFj
dGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOworICAgIHNob3dJbnNwZWN0b3JBY3Rpb24tPmNvbm5l
Y3QobV9pbnNwZWN0b3IsIFNJR05BTCh2aXNpYmxlQ2hhbmdlZChib29sKSksIFNMT1Qoc2V0Q2hl
Y2tlZChib29sKSkpOworCisgICAgLy8gR3JhcGhpY3NWaWV3IHN1YiBtZW51LgorICAgIFFBY3Rp
b24qIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcgPSBncmFwaGljc1ZpZXdNZW51LT5hZGRB
Y3Rpb24oIlRvZ2dsZSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZyIsIHRoaXMsIFNMT1QodG9nZ2xl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sKSkpOworICAgIHRvZ2dsZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmctPnNldENoZWNrYWJsZSh0cnVlKTsKKyAgICB0b2dnbGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nLT5zZXRDaGVja2VkKHNldHRpbmdzLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQpKTsKKyAgICB0b2dnbGVBY2NlbGVyYXRlZENv
bXBvc2l0aW5nLT5zZXRFbmFibGVkKGlzR3JhcGhpY3NCYXNlZCgpKTsKKyAgICB0b2dnbGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nLT5jb25uZWN0KHRvZ2dsZUdyYXBoaWNzVmlldywgU0lHTkFMKHRv
Z2dsZWQoYm9vbCkpLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpKTsKKworICAgIFFBY3Rpb24qIHRv
Z2dsZVJlc2l6ZXNUb0NvbnRlbnRzID0gZ3JhcGhpY3NWaWV3TWVudS0+YWRkQWN0aW9uKCJUb2dn
bGUgUmVzaXplcyBUbyBDb250ZW50cyBNb2RlIiwgdGhpcywgU0xPVCh0b2dnbGVSZXNpemVzVG9D
b250ZW50cyhib29sKSkpOworICAgIHRvZ2dsZVJlc2l6ZXNUb0NvbnRlbnRzLT5zZXRDaGVja2Fi
bGUodHJ1ZSk7CisgICAgdG9nZ2xlUmVzaXplc1RvQ29udGVudHMtPnNldENoZWNrZWQoZmFsc2Up
OworICAgIHRvZ2dsZVJlc2l6ZXNUb0NvbnRlbnRzLT5zZXRFbmFibGVkKGlzR3JhcGhpY3NCYXNl
ZCgpKTsKKyAgICB0b2dnbGVSZXNpemVzVG9Db250ZW50cy0+Y29ubmVjdCh0b2dnbGVHcmFwaGlj
c1ZpZXcsIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgU0xPVChzZXRFbmFibGVkKGJvb2wpKSk7CisK
KyAgICBRQWN0aW9uKiB0b2dnbGVUaWxlZEJhY2tpbmdTdG9yZSA9IGdyYXBoaWNzVmlld01lbnUt
PmFkZEFjdGlvbigiVG9nZ2xlIFRpbGVkIEJhY2tpbmcgU3RvcmUiLCB0aGlzLCBTTE9UKHRvZ2ds
ZVRpbGVkQmFja2luZ1N0b3JlKGJvb2wpKSk7CisgICAgdG9nZ2xlVGlsZWRCYWNraW5nU3RvcmUt
PnNldENoZWNrYWJsZSh0cnVlKTsKKyAgICB0b2dnbGVUaWxlZEJhY2tpbmdTdG9yZS0+c2V0Q2hl
Y2tlZChmYWxzZSk7CisgICAgdG9nZ2xlVGlsZWRCYWNraW5nU3RvcmUtPnNldEVuYWJsZWQoaXNH
cmFwaGljc0Jhc2VkKCkpOworICAgIHRvZ2dsZVRpbGVkQmFja2luZ1N0b3JlLT5jb25uZWN0KHRv
Z2dsZUdyYXBoaWNzVmlldywgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldEVuYWJsZWQo
Ym9vbCkpKTsKKworI2lmIGRlZmluZWQoUVRfQ09ORklHVVJFRF9XSVRIX09QRU5HTCkKKyAgICBR
QWN0aW9uKiB0b2dnbGVRR0xXaWRnZXRWaWV3cG9ydCA9IGdyYXBoaWNzVmlld01lbnUtPmFkZEFj
dGlvbigiVG9nZ2xlIHVzZSBvZiBRR0xXaWRnZXQgVmlld3BvcnQiLCB0aGlzLCBTTE9UKHRvZ2ds
ZVFHTFdpZGdldFZpZXdwb3J0KGJvb2wpKSk7CisgICAgdG9nZ2xlUUdMV2lkZ2V0Vmlld3BvcnQt
PnNldENoZWNrYWJsZSh0cnVlKTsKKyAgICB0b2dnbGVRR0xXaWRnZXRWaWV3cG9ydC0+c2V0Q2hl
Y2tlZChnVXNlUUdMV2lkZ2V0Vmlld3BvcnQpOworICAgIHRvZ2dsZVFHTFdpZGdldFZpZXdwb3J0
LT5zZXRFbmFibGVkKGlzR3JhcGhpY3NCYXNlZCgpKTsKKyAgICB0b2dnbGVRR0xXaWRnZXRWaWV3
cG9ydC0+Y29ubmVjdCh0b2dnbGVHcmFwaGljc1ZpZXcsIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwg
U0xPVChzZXRFbmFibGVkKGJvb2wpKSk7CisjZW5kaWYKKworICAgIFFNZW51KiB2aWV3cG9ydFVw
ZGF0ZU1lbnUgPSBncmFwaGljc1ZpZXdNZW51LT5hZGRNZW51KCJDaGFuZ2UgVmlld3BvcnQgVXBk
YXRlIE1vZGUiKTsKKyAgICB2aWV3cG9ydFVwZGF0ZU1lbnUtPnNldEVuYWJsZWQoaXNHcmFwaGlj
c0Jhc2VkKCkpOworICAgIHZpZXdwb3J0VXBkYXRlTWVudS0+Y29ubmVjdCh0b2dnbGVHcmFwaGlj
c1ZpZXcsIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgU0xPVChzZXRFbmFibGVkKGJvb2wpKSk7CisK
KyAgICBRQWN0aW9uKiBmdWxsVXBkYXRlID0gdmlld3BvcnRVcGRhdGVNZW51LT5hZGRBY3Rpb24o
IkZ1bGxWaWV3cG9ydFVwZGF0ZSIpOworICAgIGZ1bGxVcGRhdGUtPnNldENoZWNrYWJsZSh0cnVl
KTsKKyAgICBmdWxsVXBkYXRlLT5zZXRDaGVja2VkKChnVmlld3BvcnRVcGRhdGVNb2RlID09IFFH
cmFwaGljc1ZpZXc6OkZ1bGxWaWV3cG9ydFVwZGF0ZSkgPyB0cnVlIDogZmFsc2UpOworCisgICAg
UUFjdGlvbiogbWluaW1hbFVwZGF0ZSA9IHZpZXdwb3J0VXBkYXRlTWVudS0+YWRkQWN0aW9uKCJN
aW5pbWFsVmlld3BvcnRVcGRhdGUiKTsKKyAgICBtaW5pbWFsVXBkYXRlLT5zZXRDaGVja2FibGUo
dHJ1ZSk7CisgICAgbWluaW1hbFVwZGF0ZS0+c2V0Q2hlY2tlZCgoZ1ZpZXdwb3J0VXBkYXRlTW9k
ZSA9PSBRR3JhcGhpY3NWaWV3OjpNaW5pbWFsVmlld3BvcnRVcGRhdGUpID8gdHJ1ZSA6IGZhbHNl
KTsKKworICAgIFFBY3Rpb24qIHNtYXJ0VXBkYXRlID0gdmlld3BvcnRVcGRhdGVNZW51LT5hZGRB
Y3Rpb24oIlNtYXJ0Vmlld3BvcnRVcGRhdGUiKTsKKyAgICBzbWFydFVwZGF0ZS0+c2V0Q2hlY2th
YmxlKHRydWUpOworICAgIHNtYXJ0VXBkYXRlLT5zZXRDaGVja2VkKChnVmlld3BvcnRVcGRhdGVN
b2RlID09IFFHcmFwaGljc1ZpZXc6OlNtYXJ0Vmlld3BvcnRVcGRhdGUpID8gdHJ1ZSA6IGZhbHNl
KTsKKworICAgIFFBY3Rpb24qIGJvdW5kaW5nUmVjdFVwZGF0ZSA9IHZpZXdwb3J0VXBkYXRlTWVu
dS0+YWRkQWN0aW9uKCJCb3VuZGluZ1JlY3RWaWV3cG9ydFVwZGF0ZSIpOworICAgIGJvdW5kaW5n
UmVjdFVwZGF0ZS0+c2V0Q2hlY2thYmxlKHRydWUpOworICAgIGJvdW5kaW5nUmVjdFVwZGF0ZS0+
c2V0Q2hlY2tlZCgoZ1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBRR3JhcGhpY3NWaWV3OjpCb3VuZGlu
Z1JlY3RWaWV3cG9ydFVwZGF0ZSkgPyB0cnVlIDogZmFsc2UpOworCisgICAgUUFjdGlvbiogbm9V
cGRhdGUgPSB2aWV3cG9ydFVwZGF0ZU1lbnUtPmFkZEFjdGlvbigiTm9WaWV3cG9ydFVwZGF0ZSIp
OworICAgIG5vVXBkYXRlLT5zZXRDaGVja2FibGUodHJ1ZSk7CisgICAgbm9VcGRhdGUtPnNldENo
ZWNrZWQoKGdWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gUUdyYXBoaWNzVmlldzo6Tm9WaWV3cG9ydFVw
ZGF0ZSkgPyB0cnVlIDogZmFsc2UpOworCisgICAgUVNpZ25hbE1hcHBlciogc2lnbmFsTWFwcGVy
ID0gbmV3IFFTaWduYWxNYXBwZXIodmlld3BvcnRVcGRhdGVNZW51KTsKKyAgICBzaWduYWxNYXBw
ZXItPnNldE1hcHBpbmcoZnVsbFVwZGF0ZSwgUUdyYXBoaWNzVmlldzo6RnVsbFZpZXdwb3J0VXBk
YXRlKTsKKyAgICBzaWduYWxNYXBwZXItPnNldE1hcHBpbmcobWluaW1hbFVwZGF0ZSwgUUdyYXBo
aWNzVmlldzo6TWluaW1hbFZpZXdwb3J0VXBkYXRlKTsKKyAgICBzaWduYWxNYXBwZXItPnNldE1h
cHBpbmcoc21hcnRVcGRhdGUsIFFHcmFwaGljc1ZpZXc6OlNtYXJ0Vmlld3BvcnRVcGRhdGUpOwor
ICAgIHNpZ25hbE1hcHBlci0+c2V0TWFwcGluZyhib3VuZGluZ1JlY3RVcGRhdGUsIFFHcmFwaGlj
c1ZpZXc6OkJvdW5kaW5nUmVjdFZpZXdwb3J0VXBkYXRlKTsKKyAgICBzaWduYWxNYXBwZXItPnNl
dE1hcHBpbmcobm9VcGRhdGUsIFFHcmFwaGljc1ZpZXc6Ok5vVmlld3BvcnRVcGRhdGUpOworCisg
ICAgY29ubmVjdChmdWxsVXBkYXRlLCBTSUdOQUwodHJpZ2dlcmVkKCkpLCBzaWduYWxNYXBwZXIs
IFNMT1QobWFwKCkpKTsKKyAgICBjb25uZWN0KG1pbmltYWxVcGRhdGUsIFNJR05BTCh0cmlnZ2Vy
ZWQoKSksIHNpZ25hbE1hcHBlciwgU0xPVChtYXAoKSkpOworICAgIGNvbm5lY3Qoc21hcnRVcGRh
dGUsIFNJR05BTCh0cmlnZ2VyZWQoKSksIHNpZ25hbE1hcHBlciwgU0xPVChtYXAoKSkpOworICAg
IGNvbm5lY3QoYm91bmRpbmdSZWN0VXBkYXRlLCBTSUdOQUwodHJpZ2dlcmVkKCkpLCBzaWduYWxN
YXBwZXIsIFNMT1QobWFwKCkpKTsKKyAgICBjb25uZWN0KG5vVXBkYXRlLCBTSUdOQUwodHJpZ2dl
cmVkKCkpLCBzaWduYWxNYXBwZXIsIFNMT1QobWFwKCkpKTsKKworICAgIGNvbm5lY3Qoc2lnbmFs
TWFwcGVyLCBTSUdOQUwobWFwcGVkKGludCkpLCB0aGlzLCBTTE9UKGNoYW5nZVZpZXdwb3J0VXBk
YXRlTW9kZShpbnQpKSk7CisKKyAgICBRQWN0aW9uR3JvdXAqIHZpZXdwb3J0VXBkYXRlTW9kZUFj
dGlvbnMgPSBuZXcgUUFjdGlvbkdyb3VwKHZpZXdwb3J0VXBkYXRlTWVudSk7CisgICAgdmlld3Bv
cnRVcGRhdGVNb2RlQWN0aW9ucy0+YWRkQWN0aW9uKGZ1bGxVcGRhdGUpOworICAgIHZpZXdwb3J0
VXBkYXRlTW9kZUFjdGlvbnMtPmFkZEFjdGlvbihtaW5pbWFsVXBkYXRlKTsKKyAgICB2aWV3cG9y
dFVwZGF0ZU1vZGVBY3Rpb25zLT5hZGRBY3Rpb24oc21hcnRVcGRhdGUpOworICAgIHZpZXdwb3J0
VXBkYXRlTW9kZUFjdGlvbnMtPmFkZEFjdGlvbihib3VuZGluZ1JlY3RVcGRhdGUpOworICAgIHZp
ZXdwb3J0VXBkYXRlTW9kZUFjdGlvbnMtPmFkZEFjdGlvbihub1VwZGF0ZSk7CisKKyAgICBncmFw
aGljc1ZpZXdNZW51LT5hZGRTZXBhcmF0b3IoKTsKKworICAgIG1fZmxpcEFuaW1hdGVkID0gZ3Jh
cGhpY3NWaWV3TWVudS0+YWRkQWN0aW9uKCJBbmltYXRlZCBGbGlwIik7CisgICAgbV9mbGlwQW5p
bWF0ZWQtPmNvbm5lY3QodG9nZ2xlR3JhcGhpY3NWaWV3LCBTSUdOQUwodG9nZ2xlZChib29sKSks
IFNMT1Qoc2V0RW5hYmxlZChib29sKSkpOworICAgIG1fZmxpcEFuaW1hdGVkLT5zZXRFbmFibGVk
KGlzR3JhcGhpY3NCYXNlZCgpKTsKKworICAgIG1fZmxpcFlBbmltYXRlZCA9IGdyYXBoaWNzVmll
d01lbnUtPmFkZEFjdGlvbigiQW5pbWF0ZWQgWS1GbGlwIik7CisgICAgbV9mbGlwWUFuaW1hdGVk
LT5jb25uZWN0KHRvZ2dsZUdyYXBoaWNzVmlldywgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9U
KHNldEVuYWJsZWQoYm9vbCkpKTsKKyAgICBtX2ZsaXBZQW5pbWF0ZWQtPnNldEVuYWJsZWQoaXNH
cmFwaGljc0Jhc2VkKCkpOworCisgICAgaWYgKGlzR3JhcGhpY3NCYXNlZCgpKSB7CisgICAgICAg
IFdlYlZpZXdHcmFwaGljc0Jhc2VkKiB2aWV3ID0gc3RhdGljX2Nhc3Q8V2ViVmlld0dyYXBoaWNz
QmFzZWQqPihtX3ZpZXcpOworICAgICAgICBjb25uZWN0KG1fZmxpcEFuaW1hdGVkLCBTSUdOQUwo
dHJpZ2dlcmVkKCkpLCB2aWV3LCBTTE9UKGFuaW1hdGVkRmxpcCgpKSk7CisgICAgICAgIGNvbm5l
Y3QobV9mbGlwWUFuaW1hdGVkLCBTSUdOQUwodHJpZ2dlcmVkKCkpLCB2aWV3LCBTTE9UKGFuaW1h
dGVkWUZsaXAoKSkpOworICAgIH0KKworICAgIFFBY3Rpb24qIGNsb25lV2luZG93ID0gZ3JhcGhp
Y3NWaWV3TWVudS0+YWRkQWN0aW9uKCJDbG9uZSBXaW5kb3ciLCB0aGlzLCBTTE9UKGNsb25lV2lu
ZG93KCkpKTsKKyAgICBjbG9uZVdpbmRvdy0+Y29ubmVjdCh0b2dnbGVHcmFwaGljc1ZpZXcsIFNJ
R05BTCh0b2dnbGVkKGJvb2wpKSwgU0xPVChzZXRFbmFibGVkKGJvb2wpKSk7CisgICAgY2xvbmVX
aW5kb3ctPnNldEVuYWJsZWQoaXNHcmFwaGljc0Jhc2VkKCkpOworCisgICAgZ3JhcGhpY3NWaWV3
TWVudS0+YWRkU2VwYXJhdG9yKCk7CisKKyAgICBRQWN0aW9uKiBzaG93RlBTID0gZ3JhcGhpY3NW
aWV3TWVudS0+YWRkQWN0aW9uKCJTaG93IEZQUyIsIHRoaXMsIFNMT1Qoc2hvd0ZQUyhib29sKSkp
OworICAgIHNob3dGUFMtPnNldENoZWNrYWJsZSh0cnVlKTsKKyAgICBzaG93RlBTLT5zZXRFbmFi
bGVkKGlzR3JhcGhpY3NCYXNlZCgpKTsKKyAgICBzaG93RlBTLT5jb25uZWN0KHRvZ2dsZUdyYXBo
aWNzVmlldywgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpKTsK
KyAgICBzaG93RlBTLT5zZXRDaGVja2VkKGdTaG93RnJhbWVSYXRlKTsKK30KKworCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93LmggYi9XZWJLaXRU
b29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDllMjdmOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1F0
VGVzdEJyb3dzZXIvbGF1bmNoZXJ3aW5kb3cuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hA
Zm9yd2FyZGJpYXMuaW4+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0
YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5v
cmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGxhdW5jaGVy
d2luZG93X2gKKyNkZWZpbmUgbGF1bmNoZXJ3aW5kb3dfaAorCisjaW5jbHVkZSA8UXRHdWk+Cisj
aW5jbHVkZSA8UXROZXR3b3JrL1FOZXR3b3JrUmVxdWVzdD4KKworI2lmIGRlZmluZWQoUVRfQ09O
RklHVVJFRF9XSVRIX09QRU5HTCkKKyNpbmNsdWRlIDxRdE9wZW5HTC9RR0xXaWRnZXQ+CisjZW5k
aWYKKworI2lmICFkZWZpbmVkKFFUX05PX1BSSU5URVIpCisjaW5jbHVkZSA8UVByaW50UHJldmll
d0RpYWxvZz4KKyNlbmRpZgorCisjaWZuZGVmIFFUX05PX1VJVE9PTFMKKyNpbmNsdWRlIDxRdFVp
VG9vbHMvUVVpTG9hZGVyPgorI2VuZGlmCisKKyNpbmNsdWRlIDxRRGVidWc+CisKKyNpbmNsdWRl
IDxjc3RkaW8+CisjaW5jbHVkZSA8cWV2ZW50Lmg+CisjaW5jbHVkZSA8cXdlYmVsZW1lbnQuaD4K
KyNpbmNsdWRlIDxxd2ViZnJhbWUuaD4KKyNpbmNsdWRlIDxxd2ViaW5zcGVjdG9yLmg+CisjaW5j
bHVkZSA8cXdlYnNldHRpbmdzLmg+CisKKyNpZmRlZiBRX1dTX01BRU1PXzUKKyNpbmNsdWRlIDxx
eDExaW5mb194MTEuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibWFpbndpbmRvdy5oIgorI2luY2x1
ZGUgInVybGxvYWRlci5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisjaW5jbHVkZSAid2ViaW5zcGVj
dG9yLmgiCisjaW5jbHVkZSAid2VicGFnZS5oIgorI2luY2x1ZGUgIndlYnZpZXcuaCIKKyNpbmNs
dWRlICIuLi8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQuaCIKKworI2lmZGVmIFFfV1NfTUFFTU9fNQorI2luY2x1ZGUgPFgxMS9YYXRvbS5oPgorI2lu
Y2x1ZGUgPFgxMS9YbGliLmg+CisjdW5kZWYgS2V5UHJlc3MKKyNlbmRpZgorCitjbGFzcyBMYXVu
Y2hlcldpbmRvdyA6IHB1YmxpYyBNYWluV2luZG93IHsKKyAgICBRX09CSkVDVAorCitwdWJsaWM6
CisgICAgTGF1bmNoZXJXaW5kb3coTGF1bmNoZXJXaW5kb3cqIG90aGVyID0gMCwgYm9vbCBzaGFy
ZVNjZW5lID0gZmFsc2UpOworICAgIHZpcnR1YWwgfkxhdW5jaGVyV2luZG93KCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2ZW50KTsKKyAgICB2b2lkIGdy
YWJab29tS2V5cyhib29sIGdyYWIpOworCisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NI
RUNLKDQsIDYsIDApCisgICAgdm9pZCBzZW5kVG91Y2hFdmVudCgpOworI2VuZGlmCisKKyAgICBi
b29sIGV2ZW50RmlsdGVyKFFPYmplY3QqIG9iaiwgUUV2ZW50KiBldmVudCk7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3QgaW50IGdFeGl0Q2xpY2tBcmVhID0gODA7CisgICAgc3RhdGljIGJv
b2wgZ1VzZUdyYXBoaWNzVmlldzsKKyAgICBzdGF0aWMgYm9vbCBnVXNlQ29tcG9zaXRpbmc7Cisg
ICAgc3RhdGljIGJvb2wgZ0NhY2hlV2ViVmlldzsKKyAgICBzdGF0aWMgYm9vbCBnU2hvd0ZyYW1l
UmF0ZTsKKyAgICBzdGF0aWMgYm9vbCBnUmVzaXplc1RvQ29udGVudHM7CisgICAgc3RhdGljIGJv
b2wgZ1VzZVRpbGVkQmFja2luZ1N0b3JlOworICAgIHN0YXRpYyBib29sIGdVc2VGcmFtZUZsYXR0
ZW5pbmc7CisgICAgc3RhdGljIFFHcmFwaGljc1ZpZXc6OlZpZXdwb3J0VXBkYXRlTW9kZSBnVmll
d3BvcnRVcGRhdGVNb2RlOworICAgIHN0YXRpYyBRVXJsIGdJbnNwZWN0b3JVcmw7CisKKyNpZiBk
ZWZpbmVkKFFUX0NPTkZJR1VSRURfV0lUSF9PUEVOR0wpCisgICAgc3RhdGljIGJvb2wgZ1VzZVFH
TFdpZGdldFZpZXdwb3J0OworI2VuZGlmCisKK3Byb3RlY3RlZCBzbG90czoKKyAgICB2b2lkIGxv
YWRTdGFydGVkKCk7CisgICAgdm9pZCBsb2FkRmluaXNoZWQoKTsKKworICAgIHZvaWQgc2hvd0xp
bmtIb3Zlcihjb25zdCBRU3RyaW5nICZsaW5rLCBjb25zdCBRU3RyaW5nICZ0b29sVGlwKTsKKwor
ICAgIHZvaWQgem9vbUluKCk7CisgICAgdm9pZCB6b29tT3V0KCk7CisgICAgdm9pZCByZXNldFpv
b20oKTsKKyAgICB2b2lkIHRvZ2dsZVpvb21UZXh0T25seShib29sIG9uKTsKKyAgICB2b2lkIHpv
b21BbmltYXRpb25GaW5pc2hlZCgpOworCisgICAgdm9pZCBwcmludCgpOworICAgIHZvaWQgc2Ny
ZWVuc2hvdCgpOworCisgICAgdm9pZCBzZXRFZGl0YWJsZShib29sIG9uKTsKKworICAgIC8qIHZv
aWQgZHVtcFBsdWdpbnMoKSAqLworICAgIHZvaWQgZHVtcEh0bWwoKTsKKworICAgIHZvaWQgc2Vs
ZWN0RWxlbWVudHMoKTsKKworICAgIHZvaWQgc2V0VG91Y2hNb2NraW5nKGJvb2wgb24pOworICAg
IHZvaWQgdG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIHRvZ2dsZSk7CisgICAgdm9p
ZCB0b2dnbGVUaWxlZEJhY2tpbmdTdG9yZShib29sIHRvZ2dsZSk7CisgICAgdm9pZCB0b2dnbGVS
ZXNpemVzVG9Db250ZW50cyhib29sIHRvZ2dsZSk7CisKKyAgICB2b2lkIHRvZ2dsZVdlYkdMKGJv
b2wgdG9nZ2xlKTsKKyAgICB2b2lkIGluaXRpYWxpemVWaWV3KGJvb2wgdXNlR3JhcGhpY3NWaWV3
ID0gZmFsc2UpOworICAgIHZvaWQgdG9nZ2xlU3BhdGlhbE5hdmlnYXRpb24oYm9vbCBiKTsKKyAg
ICB2b2lkIHRvZ2dsZUZ1bGxTY3JlZW5Nb2RlKGJvb2wgZW5hYmxlKTsKKyAgICB2b2lkIHNob3dG
UFMoYm9vbCBlbmFibGUpOworICAgIHZvaWQgY2hhbmdlVmlld3BvcnRVcGRhdGVNb2RlKGludCBt
b2RlKTsKKyAgICB2b2lkIHRvZ2dsZUZyYW1lRmxhdHRlbmluZyhib29sIHRvZ2dsZSk7CisgICAg
dm9pZCB0b2dnbGVJbnRlcnJ1cHRpbmdKYXZhU2NyaXB0RW5hYmxlZChib29sIGVuYWJsZSk7Cisg
ICAgdm9pZCB0b2dnbGVKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MoYm9vbCBlbmFibGUpOworCisj
aWYgZGVmaW5lZChRVF9DT05GSUdVUkVEX1dJVEhfT1BFTkdMKQorICAgIHZvaWQgdG9nZ2xlUUdM
V2lkZ2V0Vmlld3BvcnQoYm9vbCBlbmFibGUpOworI2VuZGlmCisKKyAgICB2b2lkIHNob3dVc2Vy
QWdlbnREaWFsb2coKTsKKworcHVibGljIHNsb3RzOgorICAgIExhdW5jaGVyV2luZG93KiBuZXdX
aW5kb3coKTsKKyAgICBMYXVuY2hlcldpbmRvdyogY2xvbmVXaW5kb3coKTsKKyAgICB2b2lkIHVw
ZGF0ZUZQUyhpbnQgZnBzKTsKKworc2lnbmFsczoKKyAgICB2b2lkIGVudGVyZWRGdWxsU2NyZWVu
TW9kZShib29sIG9uKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUNocm9tZSgpOworICAg
IHZvaWQgYXBwbHlab29tKCk7CisKK3ByaXZhdGU6CisgICAgUVZlY3RvcjxpbnQ+IG1fem9vbUxl
dmVsczsKKyAgICBpbnQgbV9jdXJyZW50Wm9vbTsKKworICAgIFFXaWRnZXQqIG1fdmlldzsKKyAg
ICBXZWJJbnNwZWN0b3IqIG1faW5zcGVjdG9yOworCisgICAgUUFjdGlvbiogbV9mb3JtYXRNZW51
QWN0aW9uOworICAgIFFBY3Rpb24qIG1fZmxpcEFuaW1hdGVkOworICAgIFFBY3Rpb24qIG1fZmxp
cFlBbmltYXRlZDsKKworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA2LCAw
KQorICAgIFFQcm9wZXJ0eUFuaW1hdGlvbiogbV96b29tQW5pbWF0aW9uOworICAgIFFMaXN0PFFU
b3VjaEV2ZW50OjpUb3VjaFBvaW50PiBtX3RvdWNoUG9pbnRzOworICAgIGJvb2wgbV90b3VjaE1v
Y2tpbmc7CisjZW5kaWYKKworICAgIHZvaWQgaW5pdChib29sIHVzZUdyYXBoaWNzVmlldyA9IGZh
bHNlKTsKKyAgICBib29sIGlzR3JhcGhpY3NCYXNlZCgpIGNvbnN0OworICAgIHZvaWQgYXBwbHlQ
cmVmcyhMYXVuY2hlcldpbmRvdyogb3RoZXIgPSAwKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9tYWluLmNwcCBiL1dlYktpdFRvb2xzL1F0VGVz
dEJyb3dzZXIvbWFpbi5jcHAKaW5kZXggMjg4NDcyYy4uYWVhZDIzMSAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9tYWluLmNwcAorKysgYi9XZWJLaXRUb29scy9RdFRlc3RC
cm93c2VyL21haW4uY3BwCkBAIC0zMCw5ODQgKzMwLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2luY2x1ZGUgPFF0R3VpPgotI2luY2x1ZGUgPFF0TmV0d29yay9RTmV0d29ya1JlcXVlc3Q+
Ci0KLSNpZiBkZWZpbmVkKFFUX0NPTkZJR1VSRURfV0lUSF9PUEVOR0wpCi0jaW5jbHVkZSA8UXRP
cGVuR0wvUUdMV2lkZ2V0PgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChRVF9OT19QUklOVEVSKQot
I2luY2x1ZGUgPFFQcmludFByZXZpZXdEaWFsb2c+Ci0jZW5kaWYKLQotI2lmbmRlZiBRVF9OT19V
SVRPT0xTCi0jaW5jbHVkZSA8UXRVaVRvb2xzL1FVaUxvYWRlcj4KLSNlbmRpZgotCi0jaW5jbHVk
ZSA8UURlYnVnPgotCi0jaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPHFldmVudC5oPgotI2lu
Y2x1ZGUgPHF3ZWJlbGVtZW50Lmg+Ci0jaW5jbHVkZSA8cXdlYmZyYW1lLmg+Ci0jaW5jbHVkZSA8
cXdlYmluc3BlY3Rvci5oPgotI2luY2x1ZGUgPHF3ZWJzZXR0aW5ncy5oPgotCi0jaWZkZWYgUV9X
U19NQUVNT181Ci0jaW5jbHVkZSA8cXgxMWluZm9feDExLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUg
Im1haW53aW5kb3cuaCIKKyNpbmNsdWRlICJsYXVuY2hlcndpbmRvdy5oIgogI2luY2x1ZGUgInVy
bGxvYWRlci5oIgotI2luY2x1ZGUgInV0aWxzLmgiCi0jaW5jbHVkZSAid2ViaW5zcGVjdG9yLmgi
Ci0jaW5jbHVkZSAid2VicGFnZS5oIgotI2luY2x1ZGUgIndlYnZpZXcuaCIKLSNpbmNsdWRlICIu
Li8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaCIK
LQotI2lmZGVmIFFfV1NfTUFFTU9fNQotI2luY2x1ZGUgPFgxMS9YYXRvbS5oPgotI2luY2x1ZGUg
PFgxMS9YbGliLmg+Ci0jdW5kZWYgS2V5UHJlc3MKLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgaW50
IGdFeGl0Q2xpY2tBcmVhID0gODA7Ci1zdGF0aWMgYm9vbCBnVXNlR3JhcGhpY3NWaWV3ID0gZmFs
c2U7Ci1zdGF0aWMgYm9vbCBnVXNlQ29tcG9zaXRpbmcgPSB0cnVlOwotc3RhdGljIGJvb2wgZ0Nh
Y2hlV2ViVmlldyA9IGZhbHNlOwotc3RhdGljIGJvb2wgZ1Nob3dGcmFtZVJhdGUgPSBmYWxzZTsK
LXN0YXRpYyBRR3JhcGhpY3NWaWV3OjpWaWV3cG9ydFVwZGF0ZU1vZGUgZ1ZpZXdwb3J0VXBkYXRl
TW9kZSA9IFFHcmFwaGljc1ZpZXc6Ok1pbmltYWxWaWV3cG9ydFVwZGF0ZTsKLXN0YXRpYyBRVXJs
IGdJbnNwZWN0b3JVcmw7Ci1zdGF0aWMgYm9vbCBnUmVzaXplc1RvQ29udGVudHMgPSBmYWxzZTsK
LXN0YXRpYyBib29sIGdVc2VUaWxlZEJhY2tpbmdTdG9yZSA9IGZhbHNlOwotCi0jaWYgZGVmaW5l
ZChRX1dTX01BRU1PXzUpIHx8IGRlZmluZWQoUV9XU19TNjApCi1zdGF0aWMgYm9vbCBnVXNlRnJh
bWVGbGF0dGVuaW5nID0gdHJ1ZTsKLSNlbHNlCi1zdGF0aWMgYm9vbCBnVXNlRnJhbWVGbGF0dGVu
aW5nID0gZmFsc2U7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoUVRfQ09ORklHVVJFRF9XSVRIX09Q
RU5HTCkKLXN0YXRpYyBib29sIGdVc2VRR0xXaWRnZXRWaWV3cG9ydCA9IGZhbHNlOwotI2VuZGlm
Ci0KLWNsYXNzIExhdW5jaGVyV2luZG93IDogcHVibGljIE1haW5XaW5kb3cgewotICAgIFFfT0JK
RUNUCi0KLXB1YmxpYzoKLSAgICBMYXVuY2hlcldpbmRvdyhMYXVuY2hlcldpbmRvdyogb3RoZXIg
PSAwLCBib29sIHNoYXJlU2NlbmUgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB+TGF1bmNoZXJXaW5k
b3coKTsKLQotICAgIHZpcnR1YWwgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXZlbnQp
OwotICAgIHZvaWQgZ3JhYlpvb21LZXlzKGJvb2wgZ3JhYik7Ci0KLSNpZiBRVF9WRVJTSU9OID49
IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNiwgMCkKLSAgICB2b2lkIHNlbmRUb3VjaEV2ZW50KCk7Ci0j
ZW5kaWYKLQotICAgIGJvb2wgZXZlbnRGaWx0ZXIoUU9iamVjdCogb2JqLCBRRXZlbnQqIGV2ZW50
KTsKLQotcHJvdGVjdGVkIHNsb3RzOgotICAgIHZvaWQgbG9hZFN0YXJ0ZWQoKTsKLSAgICB2b2lk
IGxvYWRGaW5pc2hlZCgpOwotCi0gICAgdm9pZCBzaG93TGlua0hvdmVyKGNvbnN0IFFTdHJpbmcg
JmxpbmssIGNvbnN0IFFTdHJpbmcgJnRvb2xUaXApOwotCi0gICAgdm9pZCB6b29tSW4oKTsKLSAg
ICB2b2lkIHpvb21PdXQoKTsKLSAgICB2b2lkIHJlc2V0Wm9vbSgpOwotICAgIHZvaWQgdG9nZ2xl
Wm9vbVRleHRPbmx5KGJvb2wgb24pOwotICAgIHZvaWQgem9vbUFuaW1hdGlvbkZpbmlzaGVkKCk7
Ci0KLSAgICB2b2lkIHByaW50KCk7Ci0gICAgdm9pZCBzY3JlZW5zaG90KCk7Ci0KLSAgICB2b2lk
IHNldEVkaXRhYmxlKGJvb2wgb24pOwotCi0gICAgLyogdm9pZCBkdW1wUGx1Z2lucygpICovCi0g
ICAgdm9pZCBkdW1wSHRtbCgpOwotCi0gICAgdm9pZCBzZWxlY3RFbGVtZW50cygpOwotCi0gICAg
dm9pZCBzZXRUb3VjaE1vY2tpbmcoYm9vbCBvbik7Ci0gICAgdm9pZCB0b2dnbGVBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKGJvb2wgdG9nZ2xlKTsKLSAgICB2b2lkIHRvZ2dsZVRpbGVkQmFja2luZ1N0
b3JlKGJvb2wgdG9nZ2xlKTsKLSAgICB2b2lkIHRvZ2dsZVJlc2l6ZXNUb0NvbnRlbnRzKGJvb2wg
dG9nZ2xlKTsKLQotICAgIHZvaWQgdG9nZ2xlV2ViR0woYm9vbCB0b2dnbGUpOwotICAgIHZvaWQg
aW5pdGlhbGl6ZVZpZXcoYm9vbCB1c2VHcmFwaGljc1ZpZXcgPSBmYWxzZSk7Ci0gICAgdm9pZCB0
b2dnbGVTcGF0aWFsTmF2aWdhdGlvbihib29sIGIpOwotICAgIHZvaWQgdG9nZ2xlRnVsbFNjcmVl
bk1vZGUoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgc2hvd0ZQUyhib29sIGVuYWJsZSk7Ci0gICAg
dm9pZCBjaGFuZ2VWaWV3cG9ydFVwZGF0ZU1vZGUoaW50IG1vZGUpOwotICAgIHZvaWQgdG9nZ2xl
RnJhbWVGbGF0dGVuaW5nKGJvb2wgdG9nZ2xlKTsKLSAgICB2b2lkIHRvZ2dsZUludGVycnVwdGlu
Z0phdmFTY3JpcHRFbmFibGVkKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lkIHRvZ2dsZUphdmFzY3Jp
cHRDYW5PcGVuV2luZG93cyhib29sIGVuYWJsZSk7Ci0KLSNpZiBkZWZpbmVkKFFUX0NPTkZJR1VS
RURfV0lUSF9PUEVOR0wpCi0gICAgdm9pZCB0b2dnbGVRR0xXaWRnZXRWaWV3cG9ydChib29sIGVu
YWJsZSk7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2hvd1VzZXJBZ2VudERpYWxvZygpOwotCi1wdWJs
aWMgc2xvdHM6Ci0gICAgTGF1bmNoZXJXaW5kb3cqIG5ld1dpbmRvdygpOwotICAgIExhdW5jaGVy
V2luZG93KiBjbG9uZVdpbmRvdygpOwotICAgIHZvaWQgdXBkYXRlRlBTKGludCBmcHMpOwotCi1z
aWduYWxzOgotICAgIHZvaWQgZW50ZXJlZEZ1bGxTY3JlZW5Nb2RlKGJvb2wgb24pOwotCi1wcml2
YXRlOgotICAgIHZvaWQgY3JlYXRlQ2hyb21lKCk7Ci0gICAgdm9pZCBhcHBseVpvb20oKTsKLQot
cHJpdmF0ZToKLSAgICBRVmVjdG9yPGludD4gbV96b29tTGV2ZWxzOwotICAgIGludCBtX2N1cnJl
bnRab29tOwotCi0gICAgUVdpZGdldCogbV92aWV3OwotICAgIFdlYkluc3BlY3RvciogbV9pbnNw
ZWN0b3I7Ci0KLSAgICBRQWN0aW9uKiBtX2Zvcm1hdE1lbnVBY3Rpb247Ci0gICAgUUFjdGlvbiog
bV9mbGlwQW5pbWF0ZWQ7Ci0gICAgUUFjdGlvbiogbV9mbGlwWUFuaW1hdGVkOwotCi0jaWYgUVRf
VkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDApCi0gICAgUVByb3BlcnR5QW5pbWF0
aW9uKiBtX3pvb21BbmltYXRpb247Ci0gICAgUUxpc3Q8UVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQ+
IG1fdG91Y2hQb2ludHM7Ci0gICAgYm9vbCBtX3RvdWNoTW9ja2luZzsKLSNlbmRpZgotCi0gICAg
dm9pZCBpbml0KGJvb2wgdXNlR3JhcGhpY3NWaWV3ID0gZmFsc2UpOwotICAgIGJvb2wgaXNHcmFw
aGljc0Jhc2VkKCkgY29uc3Q7Ci0gICAgdm9pZCBhcHBseVByZWZzKExhdW5jaGVyV2luZG93KiBv
dGhlciA9IDApOwotfTsKLQotTGF1bmNoZXJXaW5kb3c6OkxhdW5jaGVyV2luZG93KExhdW5jaGVy
V2luZG93KiBvdGhlciwgYm9vbCBzaGFyZVNjZW5lKQotICAgIDogTWFpbldpbmRvdygpCi0gICAg
LCBtX2N1cnJlbnRab29tKDEwMCkKLSAgICAsIG1fdmlldygwKQotICAgICwgbV9pbnNwZWN0b3Io
MCkKLSAgICAsIG1fZm9ybWF0TWVudUFjdGlvbigwKQotICAgICwgbV9mbGlwQW5pbWF0ZWQoMCkK
LSAgICAsIG1fZmxpcFlBbmltYXRlZCgwKQotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9D
SEVDSyg0LCA2LCAwKQotICAgICwgbV96b29tQW5pbWF0aW9uKDApCi0jZW5kaWYKLXsKLSAgICBp
ZiAob3RoZXIpIHsKLSAgICAgICAgaW5pdChvdGhlci0+aXNHcmFwaGljc0Jhc2VkKCkpOwotICAg
ICAgICBhcHBseVByZWZzKG90aGVyKTsKLSAgICAgICAgaWYgKHNoYXJlU2NlbmUgJiYgb3RoZXIt
PmlzR3JhcGhpY3NCYXNlZCgpKSB7Ci0gICAgICAgICAgICBRR3JhcGhpY3NWaWV3KiBvdGhlclZp
ZXcgPSBzdGF0aWNfY2FzdDxRR3JhcGhpY3NWaWV3Kj4ob3RoZXItPm1fdmlldyk7Ci0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxRR3JhcGhpY3NWaWV3Kj4obV92aWV3KS0+c2V0U2NlbmUob3RoZXJW
aWV3LT5zY2VuZSgpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGluaXQoZ1Vz
ZUdyYXBoaWNzVmlldyk7Ci0gICAgICAgIGFwcGx5UHJlZnMoKTsKLSAgICB9Ci0KLSAgICBjcmVh
dGVDaHJvbWUoKTsKLX0KLQotTGF1bmNoZXJXaW5kb3c6On5MYXVuY2hlcldpbmRvdygpCi17Ci0g
ICAgZ3JhYlpvb21LZXlzKGZhbHNlKTsKLX0KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6aW5pdChi
b29sIHVzZUdyYXBoaWNzVmlldykKLXsKLSAgICBRU3BsaXR0ZXIqIHNwbGl0dGVyID0gbmV3IFFT
cGxpdHRlcihRdDo6VmVydGljYWwsIHRoaXMpOwotICAgIHNldENlbnRyYWxXaWRnZXQoc3BsaXR0
ZXIpOwotCi0jaWYgZGVmaW5lZChRX1dTX1M2MCkKLSAgICBzZXRXaW5kb3dTdGF0ZShRdDo6V2lu
ZG93TWF4aW1pemVkKTsKLSNlbHNlCi0gICAgc2V0V2luZG93U3RhdGUoUXQ6OldpbmRvd05vU3Rh
dGUpOwotICAgIHJlc2l6ZSg4MDAsIDYwMCk7Ci0jZW5kaWYKLQotICAgIGluaXRpYWxpemVWaWV3
KHVzZUdyYXBoaWNzVmlldyk7Ci0KLSAgICBjb25uZWN0KHBhZ2UoKSwgU0lHTkFMKGxvYWRTdGFy
dGVkKCkpLCB0aGlzLCBTTE9UKGxvYWRTdGFydGVkKCkpKTsKLSAgICBjb25uZWN0KHBhZ2UoKSwg
U0lHTkFMKGxvYWRGaW5pc2hlZChib29sKSksIHRoaXMsIFNMT1QobG9hZEZpbmlzaGVkKCkpKTsK
LSAgICBjb25uZWN0KHBhZ2UoKSwgU0lHTkFMKGxpbmtIb3ZlcmVkKGNvbnN0IFFTdHJpbmcmLCBj
b25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYpKSwKLSAgICAgICAgICAgIHRoaXMsIFNMT1Qo
c2hvd0xpbmtIb3Zlcihjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyYpKSk7Ci0gICAgY29u
bmVjdCh0aGlzLCBTSUdOQUwoZW50ZXJlZEZ1bGxTY3JlZW5Nb2RlKGJvb2wpKSwgdGhpcywgU0xP
VCh0b2dnbGVGdWxsU2NyZWVuTW9kZShib29sKSkpOwotCi0gICAgbV9pbnNwZWN0b3IgPSBuZXcg
V2ViSW5zcGVjdG9yKHNwbGl0dGVyKTsKLSNpZm5kZWYgUVRfTk9fUFJPUEVSVElFUwotICAgIGlm
ICghZ0luc3BlY3RvclVybC5pc0VtcHR5KCkpCi0gICAgICAgIG1faW5zcGVjdG9yLT5zZXRQcm9w
ZXJ0eSgiX3FfaW5zcGVjdG9yVXJsIiwgZ0luc3BlY3RvclVybCk7Ci0jZW5kaWYKLSAgICBtX2lu
c3BlY3Rvci0+c2V0UGFnZShwYWdlKCkpOwotICAgIG1faW5zcGVjdG9yLT5oaWRlKCk7Ci0gICAg
Y29ubmVjdCh0aGlzLCBTSUdOQUwoZGVzdHJveWVkKCkpLCBtX2luc3BlY3RvciwgU0xPVChkZWxl
dGVMYXRlcigpKSk7Ci0KLSAgICAvLyB0aGUgem9vbSB2YWx1ZXMgYXJlIGNob3NlbiB0byBiZSBs
aWtlIGluIE1vemlsbGEgRmlyZWZveCAzCi0gICAgbV96b29tTGV2ZWxzIDw8IDMwIDw8IDUwIDw8
IDY3IDw8IDgwIDw8IDkwOwotICAgIG1fem9vbUxldmVscyA8PCAxMDA7Ci0gICAgbV96b29tTGV2
ZWxzIDw8IDExMCA8PCAxMjAgPDwgMTMzIDw8IDE1MCA8PCAxNzAgPDwgMjAwIDw8IDI0MCA8PCAz
MDA7Ci0KLSAgICBncmFiWm9vbUtleXModHJ1ZSk7Ci19Ci0KLWJvb2wgTGF1bmNoZXJXaW5kb3c6
OmlzR3JhcGhpY3NCYXNlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGJvb2wocW9iamVjdF9jYXN0
PFFHcmFwaGljc1ZpZXcqPihtX3ZpZXcpKTsKLX0KLQotaW5saW5lIHZvaWQgYXBwbHlTZXR0aW5n
KFFXZWJTZXR0aW5nczo6V2ViQXR0cmlidXRlIHR5cGUsIFFXZWJTZXR0aW5ncyogc2V0dGluZ3Ms
IFFXZWJTZXR0aW5ncyogb3RoZXIsIGJvb2wgZGVmYXVsdFZhbHVlKQotewotICAgIHNldHRpbmdz
LT5zZXRBdHRyaWJ1dGUodHlwZSwgb3RoZXIgPyBvdGhlci0+dGVzdEF0dHJpYnV0ZSh0eXBlKSA6
IGRlZmF1bHRWYWx1ZSk7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OmFwcGx5UHJlZnMoTGF1
bmNoZXJXaW5kb3cqIHNvdXJjZSkKLXsKLSAgICBRV2ViU2V0dGluZ3MqIG90aGVyID0gc291cmNl
ID8gc291cmNlLT5wYWdlKCktPnNldHRpbmdzKCkgOiAwOwotICAgIFFXZWJTZXR0aW5ncyogc2V0
dGluZ3MgPSBwYWdlKCktPnNldHRpbmdzKCk7Ci0KLSAgICBhcHBseVNldHRpbmcoUVdlYlNldHRp
bmdzOjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgc2V0dGluZ3MsIG90aGVyLCBnVXNl
Q29tcG9zaXRpbmcpOwotICAgIGFwcGx5U2V0dGluZyhRV2ViU2V0dGluZ3M6OlRpbGVkQmFja2lu
Z1N0b3JlRW5hYmxlZCwgc2V0dGluZ3MsIG90aGVyLCBnVXNlVGlsZWRCYWNraW5nU3RvcmUpOwot
ICAgIGFwcGx5U2V0dGluZyhRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgc2V0dGluZ3MsIG90
aGVyLCBmYWxzZSk7Ci0gICAgYXBwbHlTZXR0aW5nKFFXZWJTZXR0aW5nczo6RnJhbWVGbGF0dGVu
aW5nRW5hYmxlZCwgc2V0dGluZ3MsIG90aGVyLCBnVXNlRnJhbWVGbGF0dGVuaW5nKTsKLQotICAg
IGlmICghaXNHcmFwaGljc0Jhc2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlZpZXdH
cmFwaGljc0Jhc2VkKiB2aWV3ID0gc3RhdGljX2Nhc3Q8V2ViVmlld0dyYXBoaWNzQmFzZWQqPiht
X3ZpZXcpOwotICAgIFdlYlZpZXdHcmFwaGljc0Jhc2VkKiBvdGhlclZpZXcgPSBzb3VyY2UgPyBx
b2JqZWN0X2Nhc3Q8V2ViVmlld0dyYXBoaWNzQmFzZWQqPihzb3VyY2UtPm1fdmlldykgOiAwOwot
Ci0gICAgdmlldy0+c2V0Vmlld3BvcnRVcGRhdGVNb2RlKG90aGVyVmlldyA/IG90aGVyVmlldy0+
dmlld3BvcnRVcGRhdGVNb2RlKCkgOiBnVmlld3BvcnRVcGRhdGVNb2RlKTsKLSAgICB2aWV3LT5z
ZXRGcmFtZVJhdGVNZWFzdXJlbWVudEVuYWJsZWQob3RoZXJWaWV3ID8gb3RoZXJWaWV3LT5mcmFt
ZVJhdGVNZWFzdXJlbWVudEVuYWJsZWQoKSA6IGdTaG93RnJhbWVSYXRlKTsKLQotICAgIGlmIChv
dGhlclZpZXcpCi0gICAgICAgIHZpZXctPnNldEl0ZW1DYWNoZU1vZGUob3RoZXJWaWV3LT5pdGVt
Q2FjaGVNb2RlKCkpOwotICAgIGVsc2UKLSAgICAgICAgdmlldy0+c2V0SXRlbUNhY2hlTW9kZShn
Q2FjaGVXZWJWaWV3ID8gUUdyYXBoaWNzSXRlbTo6RGV2aWNlQ29vcmRpbmF0ZUNhY2hlIDogUUdy
YXBoaWNzSXRlbTo6Tm9DYWNoZSk7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OmtleVByZXNz
RXZlbnQoUUtleUV2ZW50KiBldmVudCkKLXsKLSNpZmRlZiBRX1dTX01BRU1PXzUKLSAgICBzd2l0
Y2ggKGV2ZW50LT5rZXkoKSkgewotICAgIGNhc2UgUXQ6OktleV9GNzoKLSAgICAgICAgem9vbUlu
KCk7Ci0gICAgICAgIGV2ZW50LT5hY2NlcHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBR
dDo6S2V5X0Y4OgotICAgICAgICB6b29tT3V0KCk7Ci0gICAgICAgIGV2ZW50LT5hY2NlcHQoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi0gICAgTWFpbldpbmRvdzo6a2V5UHJlc3NF
dmVudChldmVudCk7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OmdyYWJab29tS2V5cyhib29s
IGdyYWIpCi17Ci0jaWZkZWYgUV9XU19NQUVNT181Ci0gICAgaWYgKCF3aW5JZCgpKSB7Ci0gICAg
ICAgIHFXYXJuaW5nKCJDYW4ndCBncmFiIGtleXMgdW5sZXNzIHdlIGhhdmUgYSB3aW5kb3cgaWQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEF0b20gYXRvbSA9IFhJbnRlcm5BdG9t
KFFYMTFJbmZvOjpkaXNwbGF5KCksICJfSElMRE9OX1pPT01fS0VZX0FUT00iLCBGYWxzZSk7Ci0g
ICAgaWYgKCFhdG9tKSB7Ci0gICAgICAgIHFXYXJuaW5nKCJVbmFibGUgdG8gb2J0YWluIF9ISUxE
T05fWk9PTV9LRVlfQVRPTSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgbG9uZyB2YWwgPSAoZ3JhYikgPyAxIDogMDsKLSAgICBYQ2hhbmdlUHJvcGVydHkoUVgxMUlu
Zm86OmRpc3BsYXkoKSwgd2luSWQoKSwgYXRvbSwgWEFfSU5URUdFUiwgMzIsIFByb3BNb2RlUmVw
bGFjZSwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oJnZhbCksIDEpOwotI2VuZGlm
Ci19Ci0KLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNiwgMCkKLXZvaWQg
TGF1bmNoZXJXaW5kb3c6OnNlbmRUb3VjaEV2ZW50KCkKLXsKLSAgICBpZiAobV90b3VjaFBvaW50
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFFdmVudDo6VHlwZSB0eXBlID0g
UUV2ZW50OjpUb3VjaFVwZGF0ZTsKLSAgICBpZiAobV90b3VjaFBvaW50cy5zaXplKCkgPT0gMSkg
ewotICAgICAgICBpZiAobV90b3VjaFBvaW50c1swXS5zdGF0ZSgpID09IFF0OjpUb3VjaFBvaW50
UmVsZWFzZWQpCi0gICAgICAgICAgICB0eXBlID0gUUV2ZW50OjpUb3VjaEVuZDsKLSAgICAgICAg
ZWxzZSBpZiAobV90b3VjaFBvaW50c1swXS5zdGF0ZSgpID09IFF0OjpUb3VjaFBvaW50UHJlc3Nl
ZCkKLSAgICAgICAgICAgIHR5cGUgPSBRRXZlbnQ6OlRvdWNoQmVnaW47Ci0gICAgfQotCi0gICAg
UVRvdWNoRXZlbnQgdG91Y2hFdih0eXBlKTsKLSAgICB0b3VjaEV2LnNldFRvdWNoUG9pbnRzKG1f
dG91Y2hQb2ludHMpOwotICAgIFFDb3JlQXBwbGljYXRpb246OnNlbmRFdmVudChwYWdlKCksICZ0
b3VjaEV2KTsKLQotICAgIC8vIEFmdGVyIHNlbmRpbmcgdGhlIGV2ZW50LCByZW1vdmUgYWxsIHRv
dWNocG9pbnRzIHRoYXQgd2VyZSByZWxlYXNlZAotICAgIGlmIChtX3RvdWNoUG9pbnRzWzBdLnN0
YXRlKCkgPT0gUXQ6OlRvdWNoUG9pbnRSZWxlYXNlZCkKLSAgICAgICAgbV90b3VjaFBvaW50cy5y
ZW1vdmVBdCgwKTsKLSAgICBpZiAobV90b3VjaFBvaW50cy5zaXplKCkgPiAxICYmIG1fdG91Y2hQ
b2ludHNbMV0uc3RhdGUoKSA9PSBRdDo6VG91Y2hQb2ludFJlbGVhc2VkKQotICAgICAgICBtX3Rv
dWNoUG9pbnRzLnJlbW92ZUF0KDEpOwotfQotI2VuZGlmIC8vIFFUX1ZFUlNJT04gPj0gUVRfVkVS
U0lPTl9DSEVDSyg0LCA2LCAwKQotCi1ib29sIExhdW5jaGVyV2luZG93OjpldmVudEZpbHRlcihR
T2JqZWN0KiBvYmosIFFFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gSWYgY2xpY2sgcG9zIGlzIHRo
ZSBib3R0b20gcmlnaHQgY29ybmVyIChzcXVhcmUgd2l0aCBzaXplIGRlZmluZWQgYnkgZ0V4aXRD
bGlja0FyZWEpCi0gICAgLy8gYW5kIHRoZSB3aW5kb3cgaXMgb24gRnVsbFNjcmVlbiwgdGhlIHdp
bmRvdyBtdXN0IHJldHVybiB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCi0gICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2UpIHsKLSAgICAgICAgUU1vdXNlRXZl
bnQqIGV2ID0gc3RhdGljX2Nhc3Q8UU1vdXNlRXZlbnQqPihldmVudCk7Ci0gICAgICAgIGlmICh3
aW5kb3dTdGF0ZSgpID09IFF0OjpXaW5kb3dGdWxsU2NyZWVuCi0gICAgICAgICAgICAmJiBldi0+
cG9zKCkueCgpID4gKHdpZHRoKCkgLSBnRXhpdENsaWNrQXJlYSkKLSAgICAgICAgICAgICYmIGV2
LT5wb3MoKS55KCkgPiAoaGVpZ2h0KCkgLSBnRXhpdENsaWNrQXJlYSkpIHsKLQotICAgICAgICAg
ICAgZW1pdCBlbnRlcmVkRnVsbFNjcmVlbk1vZGUoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQot
Ci0jaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDApCi0gICAgaWYgKCFt
X3RvdWNoTW9ja2luZykKLSAgICAgICAgcmV0dXJuIFFPYmplY3Q6OmV2ZW50RmlsdGVyKG9iaiwg
ZXZlbnQpOwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1dHRvblBy
ZXNzCi0gICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVh
c2UKLSAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xp
Y2sKLSAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6Ok1vdXNlTW92ZSkgewotCi0g
ICAgICAgIFFNb3VzZUV2ZW50KiBldiA9IHN0YXRpY19jYXN0PFFNb3VzZUV2ZW50Kj4oZXZlbnQp
OwotICAgICAgICBpZiAoZXYtPnR5cGUoKSA9PSBRRXZlbnQ6Ok1vdXNlTW92ZQotICAgICAgICAg
ICAgJiYgIShldi0+YnV0dG9ucygpICYgUXQ6OkxlZnRCdXR0b24pKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50IHRvdWNoUG9pbnQ7
Ci0gICAgICAgIHRvdWNoUG9pbnQuc2V0U3RhdGUoUXQ6OlRvdWNoUG9pbnRNb3ZlZCk7Ci0gICAg
ICAgIGlmICgoZXYtPnR5cGUoKSA9PSBRRXZlbnQ6Ok1vdXNlQnV0dG9uUHJlc3MKLSAgICAgICAg
ICAgICB8fCBldi0+dHlwZSgpID09IFFFdmVudDo6TW91c2VCdXR0b25EYmxDbGljaykpCi0gICAg
ICAgICAgICB0b3VjaFBvaW50LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50UHJlc3NlZCk7Ci0gICAg
ICAgIGVsc2UgaWYgKGV2LT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2UpCi0g
ICAgICAgICAgICB0b3VjaFBvaW50LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50UmVsZWFzZWQpOwot
Ci0gICAgICAgIHRvdWNoUG9pbnQuc2V0SWQoMCk7Ci0gICAgICAgIHRvdWNoUG9pbnQuc2V0U2Ny
ZWVuUG9zKGV2LT5nbG9iYWxQb3MoKSk7Ci0gICAgICAgIHRvdWNoUG9pbnQuc2V0UG9zKGV2LT5w
b3MoKSk7Ci0gICAgICAgIHRvdWNoUG9pbnQuc2V0UHJlc3N1cmUoMSk7Ci0KLSAgICAgICAgLy8g
SWYgdGhlIHBvaW50IGFscmVhZHkgZXhpc3RzLCB1cGRhdGUgaXQuIE90aGVyd2lzZSBjcmVhdGUg
aXQuCi0gICAgICAgIGlmIChtX3RvdWNoUG9pbnRzLnNpemUoKSA+IDAgJiYgIW1fdG91Y2hQb2lu
dHNbMF0uaWQoKSkKLSAgICAgICAgICAgIG1fdG91Y2hQb2ludHNbMF0gPSB0b3VjaFBvaW50Owot
ICAgICAgICBlbHNlIGlmIChtX3RvdWNoUG9pbnRzLnNpemUoKSA+IDEgJiYgIW1fdG91Y2hQb2lu
dHNbMV0uaWQoKSkKLSAgICAgICAgICAgIG1fdG91Y2hQb2ludHNbMV0gPSB0b3VjaFBvaW50Owot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3RvdWNoUG9pbnRzLmFwcGVuZCh0b3VjaFBvaW50
KTsKLQotICAgICAgICBzZW5kVG91Y2hFdmVudCgpOwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBRRXZlbnQ6OktleVByZXNzCi0gICAgICAgICYmIHN0YXRpY19jYXN0PFFLZXlFdmVu
dCo+KGV2ZW50KS0+a2V5KCkgPT0gUXQ6OktleV9GCi0gICAgICAgICYmIHN0YXRpY19jYXN0PFFL
ZXlFdmVudCo+KGV2ZW50KS0+bW9kaWZpZXJzKCkgPT0gUXQ6OkNvbnRyb2xNb2RpZmllcikgewot
Ci0gICAgICAgIC8vIElmIHRoZSBrZXlib2FyZCBwb2ludCBpcyBhbHJlYWR5IHByZXNzZWQsIHJl
bGVhc2UgaXQuCi0gICAgICAgIC8vIE90aGVyd2lzZSBjcmVhdGUgaXQgYW5kIGFwcGVuZCB0byBt
X3RvdWNoUG9pbnRzLgotICAgICAgICBpZiAobV90b3VjaFBvaW50cy5zaXplKCkgPiAwICYmIG1f
dG91Y2hQb2ludHNbMF0uaWQoKSA9PSAxKSB7Ci0gICAgICAgICAgICBtX3RvdWNoUG9pbnRzWzBd
LnNldFN0YXRlKFF0OjpUb3VjaFBvaW50UmVsZWFzZWQpOwotICAgICAgICAgICAgc2VuZFRvdWNo
RXZlbnQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChtX3RvdWNoUG9pbnRzLnNpemUoKSA+IDEgJiYg
bV90b3VjaFBvaW50c1sxXS5pZCgpID09IDEpIHsKLSAgICAgICAgICAgIG1fdG91Y2hQb2ludHNb
MV0uc2V0U3RhdGUoUXQ6OlRvdWNoUG9pbnRSZWxlYXNlZCk7Ci0gICAgICAgICAgICBzZW5kVG91
Y2hFdmVudCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUVRvdWNoRXZlbnQ6OlRv
dWNoUG9pbnQgdG91Y2hQb2ludDsKLSAgICAgICAgICAgIHRvdWNoUG9pbnQuc2V0U3RhdGUoUXQ6
OlRvdWNoUG9pbnRQcmVzc2VkKTsKLSAgICAgICAgICAgIHRvdWNoUG9pbnQuc2V0SWQoMSk7Ci0g
ICAgICAgICAgICB0b3VjaFBvaW50LnNldFNjcmVlblBvcyhRQ3Vyc29yOjpwb3MoKSk7Ci0gICAg
ICAgICAgICB0b3VjaFBvaW50LnNldFBvcyhtX3ZpZXctPm1hcEZyb21HbG9iYWwoUUN1cnNvcjo6
cG9zKCkpKTsKLSAgICAgICAgICAgIHRvdWNoUG9pbnQuc2V0UHJlc3N1cmUoMSk7Ci0gICAgICAg
ICAgICBtX3RvdWNoUG9pbnRzLmFwcGVuZCh0b3VjaFBvaW50KTsKLSAgICAgICAgICAgIHNlbmRU
b3VjaEV2ZW50KCk7Ci0KLSAgICAgICAgICAgIC8vIEFmdGVyIHNlbmRpbmcgdGhlIGV2ZW50LCBj
aGFuZ2UgdGhlIHRvdWNocG9pbnQgc3RhdGUgdG8gc3RhdGlvbmFyeQotICAgICAgICAgICAgbV90
b3VjaFBvaW50cy5sYXN0KCkuc2V0U3RhdGUoUXQ6OlRvdWNoUG9pbnRTdGF0aW9uYXJ5KTsKLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0so
NCwgNiwgMCkKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6
bG9hZFN0YXJ0ZWQoKQotewotICAgIG1fdmlldy0+c2V0Rm9jdXMoUXQ6Ok90aGVyRm9jdXNSZWFz
b24pOwotfQotCi12b2lkIExhdW5jaGVyV2luZG93Ojpsb2FkRmluaXNoZWQoKQotewotICAgIFFV
cmwgdXJsID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dXJsKCk7Ci0gICAgc2V0QWRkcmVzc1VybCh1
cmwudG9TdHJpbmcoUVVybDo6UmVtb3ZlVXNlckluZm8pKTsKLSAgICBhZGRDb21wbGV0ZXJFbnRy
eSh1cmwpOwotfQotCi12b2lkIExhdW5jaGVyV2luZG93OjpzaG93TGlua0hvdmVyKGNvbnN0IFFT
dHJpbmcgJmxpbmssIGNvbnN0IFFTdHJpbmcgJnRvb2xUaXApCi17Ci0jaWZuZGVmIFFfV1NfTUFF
TU9fNQotICAgIHN0YXR1c0JhcigpLT5zaG93TWVzc2FnZShsaW5rKTsKLSNlbmRpZgotI2lmbmRl
ZiBRVF9OT19UT09MVElQCi0gICAgaWYgKCF0b29sVGlwLmlzRW1wdHkoKSkKLSAgICAgICAgUVRv
b2xUaXA6OnNob3dUZXh0KFFDdXJzb3I6OnBvcygpLCB0b29sVGlwKTsKLSNlbmRpZgotfQotCi12
b2lkIExhdW5jaGVyV2luZG93Ojp6b29tQW5pbWF0aW9uRmluaXNoZWQoKQotewotICAgIGlmICgh
aXNHcmFwaGljc0Jhc2VkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBRR3JhcGhpY3NXZWJWaWV3
KiB2aWV3ID0gc3RhdGljX2Nhc3Q8V2ViVmlld0dyYXBoaWNzQmFzZWQqPihtX3ZpZXcpLT5ncmFw
aGljc1dlYlZpZXcoKTsKLSAgICB2aWV3LT5zZXRUaWxlZEJhY2tpbmdTdG9yZUZyb3plbihmYWxz
ZSk7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OmFwcGx5Wm9vbSgpCi17Ci0jaWYgUVRfVkVS
U0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDApCi0gICAgaWYgKGlzR3JhcGhpY3NCYXNl
ZCgpICYmIHBhZ2UoKS0+c2V0dGluZ3MoKS0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OlRp
bGVkQmFja2luZ1N0b3JlRW5hYmxlZCkpIHsKLSAgICAgICAgUUdyYXBoaWNzV2ViVmlldyogdmll
dyA9IHN0YXRpY19jYXN0PFdlYlZpZXdHcmFwaGljc0Jhc2VkKj4obV92aWV3KS0+Z3JhcGhpY3NX
ZWJWaWV3KCk7Ci0gICAgICAgIHZpZXctPnNldFRpbGVkQmFja2luZ1N0b3JlRnJvemVuKHRydWUp
OwotICAgICAgICBpZiAoIW1fem9vbUFuaW1hdGlvbikgewotICAgICAgICAgICAgbV96b29tQW5p
bWF0aW9uID0gbmV3IFFQcm9wZXJ0eUFuaW1hdGlvbih2aWV3LCAic2NhbGUiKTsKLSAgICAgICAg
ICAgIG1fem9vbUFuaW1hdGlvbi0+c2V0U3RhcnRWYWx1ZSh2aWV3LT5zY2FsZSgpKTsKLSAgICAg
ICAgICAgIGNvbm5lY3QobV96b29tQW5pbWF0aW9uLCBTSUdOQUwoZmluaXNoZWQoKSksIHRoaXMs
IFNMT1Qoem9vbUFuaW1hdGlvbkZpbmlzaGVkKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIG1fem9vbUFuaW1hdGlvbi0+c3RvcCgpOwotICAgICAgICAgICAgbV96b29tQW5pbWF0
aW9uLT5zZXRTdGFydFZhbHVlKG1fem9vbUFuaW1hdGlvbi0+Y3VycmVudFZhbHVlKCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbV96b29tQW5pbWF0aW9uLT5zZXREdXJhdGlvbigzMDApOwotICAg
ICAgICBtX3pvb21BbmltYXRpb24tPnNldEVuZFZhbHVlKHFyZWFsKG1fY3VycmVudFpvb20pIC8g
MTAwLik7Ci0gICAgICAgIG1fem9vbUFuaW1hdGlvbi0+c3RhcnQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnNldFpvb21GYWN0b3Io
cXJlYWwobV9jdXJyZW50Wm9vbSkgLyAxMDAuMCk7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6
Onpvb21JbigpCi17Ci0gICAgaW50IGkgPSBtX3pvb21MZXZlbHMuaW5kZXhPZihtX2N1cnJlbnRa
b29tKTsKLSAgICBRX0FTU0VSVChpID49IDApOwotICAgIGlmIChpIDwgbV96b29tTGV2ZWxzLmNv
dW50KCkgLSAxKQotICAgICAgICBtX2N1cnJlbnRab29tID0gbV96b29tTGV2ZWxzW2kgKyAxXTsK
LQotICAgIGFwcGx5Wm9vbSgpOwotfQotCi12b2lkIExhdW5jaGVyV2luZG93Ojp6b29tT3V0KCkK
LXsKLSAgICBpbnQgaSA9IG1fem9vbUxldmVscy5pbmRleE9mKG1fY3VycmVudFpvb20pOwotICAg
IFFfQVNTRVJUKGkgPj0gMCk7Ci0gICAgaWYgKGkgPiAwKQotICAgICAgICBtX2N1cnJlbnRab29t
ID0gbV96b29tTGV2ZWxzW2kgLSAxXTsKLQotICAgIGFwcGx5Wm9vbSgpOwotfQotCi12b2lkIExh
dW5jaGVyV2luZG93OjpyZXNldFpvb20oKQotewotICAgIG1fY3VycmVudFpvb20gPSAxMDA7Ci0g
ICAgcGFnZSgpLT5tYWluRnJhbWUoKS0+c2V0Wm9vbUZhY3RvcigxLjApOwotfQotCi12b2lkIExh
dW5jaGVyV2luZG93Ojp0b2dnbGVab29tVGV4dE9ubHkoYm9vbCBiKQotewotICAgIHBhZ2UoKS0+
c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6Wm9vbVRleHRPbmx5LCBiKTsK
LX0KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6cHJpbnQoKQotewotI2lmICFkZWZpbmVkKFFUX05P
X1BSSU5URVIpCi0gICAgUVByaW50UHJldmlld0RpYWxvZyBkbGcodGhpcyk7Ci0gICAgY29ubmVj
dCgmZGxnLCBTSUdOQUwocGFpbnRSZXF1ZXN0ZWQoUVByaW50ZXIqKSksCi0gICAgICAgICAgICBw
YWdlKCktPm1haW5GcmFtZSgpLCBTTE9UKHByaW50KFFQcmludGVyKikpKTsKLSAgICBkbGcuZXhl
YygpOwotI2VuZGlmCi19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnNjcmVlbnNob3QoKQotewot
ICAgIFFQaXhtYXAgcGl4bWFwID0gUVBpeG1hcDo6Z3JhYldpZGdldChtX3ZpZXcpOwotICAgIFFM
YWJlbCogbGFiZWwgPSBuZXcgUUxhYmVsOwotICAgIGxhYmVsLT5zZXRBdHRyaWJ1dGUoUXQ6OldB
X0RlbGV0ZU9uQ2xvc2UpOwotICAgIGxhYmVsLT5zZXRXaW5kb3dUaXRsZSgiU2NyZWVuc2hvdCAt
IFByZXZpZXciKTsKLSAgICBsYWJlbC0+c2V0UGl4bWFwKHBpeG1hcCk7Ci0gICAgbGFiZWwtPnNo
b3coKTsKLQotICAgIFFTdHJpbmcgZmlsZU5hbWUgPSBRRmlsZURpYWxvZzo6Z2V0U2F2ZUZpbGVO
YW1lKGxhYmVsLCAiU2NyZWVuc2hvdCIpOwotICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIHBpeG1hcC5zYXZlKGZpbGVOYW1lLCAicG5nIik7Ci0gICAgICAgIGxhYmVsLT5z
ZXRXaW5kb3dUaXRsZShRU3RyaW5nKCJTY3JlZW5zaG90IC0gU2F2ZWQgYXQgJTEiKS5hcmcoZmls
ZU5hbWUpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnNldEVkaXRhYmxlKGJv
b2wgb24pCi17Ci0gICAgcGFnZSgpLT5zZXRDb250ZW50RWRpdGFibGUob24pOwotICAgIG1fZm9y
bWF0TWVudUFjdGlvbi0+c2V0VmlzaWJsZShvbik7Ci19Ci0KLS8qCi12b2lkIExhdW5jaGVyV2lu
ZG93OjpkdW1wUGx1Z2lucygpIHsKLSAgICBRTGlzdDxRV2ViUGx1Z2luSW5mbz4gcGx1Z2lucyA9
IFFXZWJTZXR0aW5nczo6cGx1Z2luRGF0YWJhc2UoKS0+cGx1Z2lucygpOwotICAgIGZvcmVhY2gg
KGNvbnN0IFFXZWJQbHVnaW5JbmZvIHBsdWdpbiwgcGx1Z2lucykgewotICAgICAgICBxRGVidWco
KSA8PCAiUGx1Z2luOiIgPDwgcGx1Z2luLm5hbWUoKTsKLSAgICAgICAgZm9yZWFjaCAoY29uc3Qg
UVdlYlBsdWdpbkluZm86Ok1pbWVUeXBlIG1pbWUsIHBsdWdpbi5taW1lVHlwZXMoKSkgewotICAg
ICAgICAgICAgcURlYnVnKCkgPDwgIiAgICIgPDwgbWltZS5uYW1lOwotICAgICAgICB9Ci0gICAg
fQotfQotKi8KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6ZHVtcEh0bWwoKQotewotICAgIHFEZWJ1
ZygpIDw8ICJIVE1MOiAiIDw8IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnRvSHRtbCgpOwotfQotCi12
b2lkIExhdW5jaGVyV2luZG93OjpzZWxlY3RFbGVtZW50cygpCi17Ci0gICAgYm9vbCBvazsKLSAg
ICBRU3RyaW5nIHN0ciA9IFFJbnB1dERpYWxvZzo6Z2V0VGV4dCh0aGlzLCAiU2VsZWN0IGVsZW1l
bnRzIiwgIkNob29zZSBlbGVtZW50cyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUUxpbmVFZGl0OjpOb3JtYWwsICJhIiwgJm9rKTsKLQotICAgIGlmIChvayAmJiAh
c3RyLmlzRW1wdHkoKSkgewotICAgICAgICBRV2ViRWxlbWVudENvbGxlY3Rpb24gcmVzdWx0ID0g
IHBhZ2UoKS0+bWFpbkZyYW1lKCktPmZpbmRBbGxFbGVtZW50cyhzdHIpOwotICAgICAgICBmb3Jl
YWNoIChRV2ViRWxlbWVudCBlLCByZXN1bHQpCi0gICAgICAgICAgICBlLnNldFN0eWxlUHJvcGVy
dHkoImJhY2tncm91bmQtY29sb3IiLCAieWVsbG93Iik7Ci0jaWZuZGVmIFFfV1NfTUFFTU9fNQot
ICAgICAgICBzdGF0dXNCYXIoKS0+c2hvd01lc3NhZ2UoUVN0cmluZygiJTEgZWxlbWVudChzKSBz
ZWxlY3RlZCIpLmFyZyhyZXN1bHQuY291bnQoKSksIDUwMDApOwotI2VuZGlmCi0gICAgfQotfQot
Ci12b2lkIExhdW5jaGVyV2luZG93OjpzZXRUb3VjaE1vY2tpbmcoYm9vbCBvbikKLXsKLSNpZiBR
VF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNiwgMCkKLSAgICBtX3RvdWNoTW9ja2lu
ZyA9IG9uOwotI2VuZGlmCi19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoYm9vbCB0b2dnbGUpCi17Ci0gICAgZ1VzZUNvbXBvc2l0aW5nID0gdG9n
Z2xlOwotICAgIHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIHRvZ2dsZSk7Ci19Ci0KLXZvaWQgTGF1bmNo
ZXJXaW5kb3c6OnRvZ2dsZVRpbGVkQmFja2luZ1N0b3JlKGJvb2wgdG9nZ2xlKQotewotICAgIHBh
Z2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6VGlsZWRCYWNraW5n
U3RvcmVFbmFibGVkLCB0b2dnbGUpOwotfQotCi12b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVS
ZXNpemVzVG9Db250ZW50cyhib29sIHRvZ2dsZSkKLXsKLSAgICBzdGF0aWNfY2FzdDxXZWJWaWV3
R3JhcGhpY3NCYXNlZCo+KG1fdmlldyktPnNldFJlc2l6ZXNUb0NvbnRlbnRzKHRvZ2dsZSk7Ci19
Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZVdlYkdMKGJvb2wgdG9nZ2xlKQotewotICAg
IHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6V2ViR0xFbmFi
bGVkLCB0b2dnbGUpOwotfQotCi12b2lkIExhdW5jaGVyV2luZG93Ojppbml0aWFsaXplVmlldyhi
b29sIHVzZUdyYXBoaWNzVmlldykKLXsKLSAgICBkZWxldGUgbV92aWV3OwotCi0gICAgUVNwbGl0
dGVyKiBzcGxpdHRlciA9IHN0YXRpY19jYXN0PFFTcGxpdHRlcio+KGNlbnRyYWxXaWRnZXQoKSk7
Ci0KLSAgICBpZiAoIXVzZUdyYXBoaWNzVmlldykgewotICAgICAgICBXZWJWaWV3VHJhZGl0aW9u
YWwqIHZpZXcgPSBuZXcgV2ViVmlld1RyYWRpdGlvbmFsKHNwbGl0dGVyKTsKLSAgICAgICAgdmll
dy0+c2V0UGFnZShwYWdlKCkpOwotCi0gICAgICAgIHZpZXctPmluc3RhbGxFdmVudEZpbHRlcih0
aGlzKTsKLQotICAgICAgICBtX3ZpZXcgPSB2aWV3OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFdl
YlZpZXdHcmFwaGljc0Jhc2VkKiB2aWV3ID0gbmV3IFdlYlZpZXdHcmFwaGljc0Jhc2VkKHNwbGl0
dGVyKTsKLSAgICAgICAgdmlldy0+c2V0UGFnZShwYWdlKCkpOwotCi0gICAgICAgIGlmIChtX2Zs
aXBBbmltYXRlZCkKLSAgICAgICAgICAgIGNvbm5lY3QobV9mbGlwQW5pbWF0ZWQsIFNJR05BTCh0
cmlnZ2VyZWQoKSksIHZpZXcsIFNMT1QoYW5pbWF0ZWRGbGlwKCkpKTsKLQotICAgICAgICBpZiAo
bV9mbGlwWUFuaW1hdGVkKQotICAgICAgICAgICAgY29ubmVjdChtX2ZsaXBZQW5pbWF0ZWQsIFNJ
R05BTCh0cmlnZ2VyZWQoKSksIHZpZXcsIFNMT1QoYW5pbWF0ZWRZRmxpcCgpKSk7Ci0KLSAgICAg
ICAgY29ubmVjdCh2aWV3LCBTSUdOQUwoY3VycmVudEZQU1VwZGF0ZWQoaW50KSksIHRoaXMsIFNM
T1QodXBkYXRlRlBTKGludCkpKTsKLQotICAgICAgICB2aWV3LT5pbnN0YWxsRXZlbnRGaWx0ZXIo
dGhpcyk7Ci0gICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBRQWJzdHJhY3RTY3JvbGxB
cmVhOjpldmVudEZpbHRlciBtYWtlcyB1cyBuZWVkCi0gICAgICAgIC8vIHRvIGluc3RhbGwgdGhl
IGV2ZW50IGZpbHRlciBhbHNvIG9uIHRoZSB2aWV3cG9ydCBvZiBhIFFHcmFwaGljc1ZpZXcuCi0g
ICAgICAgIHZpZXctPnZpZXdwb3J0KCktPmluc3RhbGxFdmVudEZpbHRlcih0aGlzKTsKLQotICAg
ICAgICBtX3ZpZXcgPSB2aWV3OwotICAgIH0KLQotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lP
Tl9DSEVDSyg0LCA2LCAwKQotICAgIG1fdG91Y2hNb2NraW5nID0gZmFsc2U7Ci0jZW5kaWYKLX0K
LQotdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlU3BhdGlhbE5hdmlnYXRpb24oYm9vbCBiKQot
ewotICAgIHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6U3Bh
dGlhbE5hdmlnYXRpb25FbmFibGVkLCBiKTsKLX0KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9n
Z2xlRnVsbFNjcmVlbk1vZGUoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSkKLSAgICAg
ICAgc2V0V2luZG93U3RhdGUoUXQ6OldpbmRvd0Z1bGxTY3JlZW4pOwotICAgIGVsc2UgewotI2lm
IGRlZmluZWQoUV9XU19TNjApCi0gICAgICAgIHNldFdpbmRvd1N0YXRlKFF0OjpXaW5kb3dNYXhp
bWl6ZWQpOwotI2Vsc2UKLSAgICAgICAgc2V0V2luZG93U3RhdGUoUXQ6OldpbmRvd05vU3RhdGUp
OwotI2VuZGlmCi0gICAgfQotfQotCi12b2lkIExhdW5jaGVyV2luZG93OjpzaG93RlBTKGJvb2wg
ZW5hYmxlKQotewotICAgIGlmICghaXNHcmFwaGljc0Jhc2VkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGdTaG93RnJhbWVSYXRlID0gZW5hYmxlOwotICAgIFdlYlZpZXdHcmFwaGljc0Jhc2Vk
KiB2aWV3ID0gc3RhdGljX2Nhc3Q8V2ViVmlld0dyYXBoaWNzQmFzZWQqPihtX3ZpZXcpOwotICAg
IHZpZXctPnNldEZyYW1lUmF0ZU1lYXN1cmVtZW50RW5hYmxlZChlbmFibGUpOwotCi0gICAgaWYg
KCFlbmFibGUpIHsKLSNpZiBkZWZpbmVkKFFfV1NfTUFFTU9fNSkgJiYgZGVmaW5lZChRX1dTX1M2
MCkKLSAgICAgICAgc2V0V2luZG93VGl0bGUoIiIpOwotI2Vsc2UKLSAgICAgICAgc3RhdHVzQmFy
KCktPmNsZWFyTWVzc2FnZSgpOwotI2VuZGlmCi0gICAgfQotfQotCi12b2lkIExhdW5jaGVyV2lu
ZG93OjpjaGFuZ2VWaWV3cG9ydFVwZGF0ZU1vZGUoaW50IG1vZGUpCi17Ci0gICAgZ1ZpZXdwb3J0
VXBkYXRlTW9kZSA9IFFHcmFwaGljc1ZpZXc6OlZpZXdwb3J0VXBkYXRlTW9kZShtb2RlKTsKLQot
ICAgIGlmICghaXNHcmFwaGljc0Jhc2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlZp
ZXdHcmFwaGljc0Jhc2VkKiB2aWV3ID0gc3RhdGljX2Nhc3Q8V2ViVmlld0dyYXBoaWNzQmFzZWQq
PihtX3ZpZXcpOwotICAgIHZpZXctPnNldFZpZXdwb3J0VXBkYXRlTW9kZShnVmlld3BvcnRVcGRh
dGVNb2RlKTsKLX0KLQotdm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlRnJhbWVGbGF0dGVuaW5n
KGJvb2wgdG9nZ2xlKQotewotICAgIGdVc2VGcmFtZUZsYXR0ZW5pbmcgPSB0b2dnbGU7Ci0gICAg
cGFnZSgpLT5zZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpGcmFtZUZsYXR0
ZW5pbmdFbmFibGVkLCB0b2dnbGUpOwotfQotCi12b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVJ
bnRlcnJ1cHRpbmdKYXZhU2NyaXB0RW5hYmxlZChib29sIGVuYWJsZSkKLXsKLSAgICBwYWdlKCkt
PnNldEludGVycnVwdGluZ0phdmFTY3JpcHRFbmFibGVkKGVuYWJsZSk7Ci19Ci0KLXZvaWQgTGF1
bmNoZXJXaW5kb3c6OnRvZ2dsZUphdmFzY3JpcHRDYW5PcGVuV2luZG93cyhib29sIGVuYWJsZSkK
LXsKLSAgICBwYWdlKCktPnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6Okph
dmFzY3JpcHRDYW5PcGVuV2luZG93cywgZW5hYmxlKTsKLX0KLQotI2lmIGRlZmluZWQoUVRfQ09O
RklHVVJFRF9XSVRIX09QRU5HTCkKLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZVFHTFdpZGdl
dFZpZXdwb3J0KGJvb2wgZW5hYmxlKQotewotICAgIGlmICghaXNHcmFwaGljc0Jhc2VkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGdVc2VRR0xXaWRnZXRWaWV3cG9ydCA9IGVuYWJsZTsKLSAg
ICBXZWJWaWV3R3JhcGhpY3NCYXNlZCogdmlldyA9IHN0YXRpY19jYXN0PFdlYlZpZXdHcmFwaGlj
c0Jhc2VkKj4obV92aWV3KTsKLQotICAgIHZpZXctPnNldFZpZXdwb3J0KGVuYWJsZSA/IG5ldyBR
R0xXaWRnZXQoKSA6IDApOwotfQotI2VuZGlmCi0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnNob3dV
c2VyQWdlbnREaWFsb2coKQotewotICAgIFFTdHJpbmdMaXN0IGl0ZW1zOwotICAgIFFGaWxlIGZp
bGUoIjovdXNlcmFnZW50bGlzdC50eHQiKTsKLSAgICBpZiAoZmlsZS5vcGVuKFFJT0RldmljZTo6
UmVhZE9ubHkpKSB7Ci0gICAgICAgICB3aGlsZSAoIWZpbGUuYXRFbmQoKSkKLSAgICAgICAgICAg
IGl0ZW1zIDw8IGZpbGUucmVhZExpbmUoKS50cmltbWVkKCk7Ci0gICAgICAgIGZpbGUuY2xvc2Uo
KTsKLSAgICB9Ci0KLSAgICBRU2V0dGluZ3Mgc2V0dGluZ3M7Ci0gICAgUVN0cmluZyBjdXN0b21V
c2VyQWdlbnQgPSBzZXR0aW5ncy52YWx1ZSgiQ3VzdG9tVXNlckFnZW50IikudG9TdHJpbmcoKTsK
LSAgICBpZiAoIWl0ZW1zLmNvbnRhaW5zKGN1c3RvbVVzZXJBZ2VudCkgJiYgIWN1c3RvbVVzZXJB
Z2VudC5pc0VtcHR5KCkpCi0gICAgICAgIGl0ZW1zIDw8IGN1c3RvbVVzZXJBZ2VudDsKLQotICAg
IFFEaWFsb2cqIGRpYWxvZyA9IG5ldyBRRGlhbG9nKHRoaXMpOwotICAgIGRpYWxvZy0+cmVzaXpl
KHNpemUoKS53aWR0aCgpICogMC43LCBkaWFsb2ctPnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgZGlh
bG9nLT5zZXRNYXhpbXVtSGVpZ2h0KGRpYWxvZy0+c2l6ZSgpLmhlaWdodCgpKTsKLSAgICBkaWFs
b2ctPnNldFdpbmRvd1RpdGxlKCJDaGFuZ2UgVXNlciBBZ2VudCIpOwotCi0gICAgUVZCb3hMYXlv
dXQqIGxheW91dCA9IG5ldyBRVkJveExheW91dChkaWFsb2cpOwotICAgIGRpYWxvZy0+c2V0TGF5
b3V0KGxheW91dCk7Ci0KLSAgICBRQ29tYm9Cb3gqIGNvbWJvID0gbmV3IFFDb21ib0JveChkaWFs
b2cpOwotICAgIGNvbWJvLT5zZXRTaXplQWRqdXN0UG9saWN5KFFDb21ib0JveDo6QWRqdXN0VG9N
aW5pbXVtQ29udGVudHNMZW5ndGgpOwotICAgIGNvbWJvLT5zZXRFZGl0YWJsZSh0cnVlKTsKLSAg
ICBjb21iby0+aW5zZXJ0SXRlbXMoMCwgaXRlbXMpOwotICAgIGxheW91dC0+YWRkV2lkZ2V0KGNv
bWJvKTsKLQotICAgIGludCBpbmRleCA9IGNvbWJvLT5maW5kVGV4dChwYWdlKCktPnVzZXJBZ2Vu
dEZvclVybChRVXJsKCkpKTsKLSAgICBjb21iby0+c2V0Q3VycmVudEluZGV4KGluZGV4KTsKLQot
ICAgIFFEaWFsb2dCdXR0b25Cb3gqIGJ1dHRvbkJveCA9IG5ldyBRRGlhbG9nQnV0dG9uQm94KFFE
aWFsb2dCdXR0b25Cb3g6Ok9rCi0gICAgICAgICAgICB8IFFEaWFsb2dCdXR0b25Cb3g6OkNhbmNl
bCwgUXQ6Okhvcml6b250YWwsIGRpYWxvZyk7Ci0gICAgY29ubmVjdChidXR0b25Cb3gsIFNJR05B
TChhY2NlcHRlZCgpKSwgZGlhbG9nLCBTTE9UKGFjY2VwdCgpKSk7Ci0gICAgY29ubmVjdChidXR0
b25Cb3gsIFNJR05BTChyZWplY3RlZCgpKSwgZGlhbG9nLCBTTE9UKHJlamVjdCgpKSk7Ci0gICAg
bGF5b3V0LT5hZGRXaWRnZXQoYnV0dG9uQm94KTsKLQotICAgIGlmIChkaWFsb2ctPmV4ZWMoKSAm
JiAhY29tYm8tPmN1cnJlbnRUZXh0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHBhZ2UoKS0+c2V0
VXNlckFnZW50KGNvbWJvLT5jdXJyZW50VGV4dCgpKTsKLSAgICAgICAgaWYgKCFpdGVtcy5jb250
YWlucyhjb21iby0+Y3VycmVudFRleHQoKSkpCi0gICAgICAgICAgICBzZXR0aW5ncy5zZXRWYWx1
ZSgiQ3VzdG9tVXNlckFnZW50IiwgY29tYm8tPmN1cnJlbnRUZXh0KCkpOwotICAgIH0KLQotICAg
IGRlbGV0ZSBkaWFsb2c7Ci19Ci0KLUxhdW5jaGVyV2luZG93KiBMYXVuY2hlcldpbmRvdzo6bmV3
V2luZG93KCkKLXsKLSAgICBMYXVuY2hlcldpbmRvdyogbXcgPSBuZXcgTGF1bmNoZXJXaW5kb3co
dGhpcywgZmFsc2UpOwotICAgIG13LT5zaG93KCk7Ci0gICAgcmV0dXJuIG13OwotfQotCi1MYXVu
Y2hlcldpbmRvdyogTGF1bmNoZXJXaW5kb3c6OmNsb25lV2luZG93KCkKLXsKLSAgICBMYXVuY2hl
cldpbmRvdyogbXcgPSBuZXcgTGF1bmNoZXJXaW5kb3codGhpcywgdHJ1ZSk7Ci0gICAgbXctPnNo
b3coKTsKLSAgICByZXR1cm4gbXc7Ci19Ci0KLXZvaWQgTGF1bmNoZXJXaW5kb3c6OnVwZGF0ZUZQ
UyhpbnQgZnBzKQotewotICAgIFFTdHJpbmcgZnBzU3RhdHVzVGV4dCA9IFFTdHJpbmcoIkN1cnJl
bnQgRlBTOiAlMSIpLmFyZyhmcHMpOwotCi0jaWYgZGVmaW5lZChRX1dTX01BRU1PXzUpICYmIGRl
ZmluZWQoUV9XU19TNjApCi0gICAgc2V0V2luZG93VGl0bGUoZnBzU3RhdHVzVGV4dCk7Ci0jZWxz
ZQotICAgIHN0YXR1c0JhcigpLT5zaG93TWVzc2FnZShmcHNTdGF0dXNUZXh0KTsKLSNlbmRpZgot
fQotCi12b2lkIExhdW5jaGVyV2luZG93OjpjcmVhdGVDaHJvbWUoKQotewotICAgIFFNZW51KiBm
aWxlTWVudSA9IG1lbnVCYXIoKS0+YWRkTWVudSgiJkZpbGUiKTsKLSAgICBmaWxlTWVudS0+YWRk
QWN0aW9uKCJOZXcgV2luZG93IiwgdGhpcywgU0xPVChuZXdXaW5kb3coKSksIFFLZXlTZXF1ZW5j
ZTo6TmV3KTsKLSAgICBmaWxlTWVudS0+YWRkQWN0aW9uKHRyKCJPcGVuIEZpbGUuLi4iKSwgdGhp
cywgU0xPVChvcGVuRmlsZSgpKSwgUUtleVNlcXVlbmNlOjpPcGVuKTsKLSAgICBmaWxlTWVudS0+
YWRkQWN0aW9uKHRyKCJPcGVuIExvY2F0aW9uLi4uIiksIHRoaXMsIFNMT1Qob3BlbkxvY2F0aW9u
KCkpLCBRS2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBRdDo6S2V5X0wpKTsKLSAgICBmaWxlTWVudS0+
YWRkQWN0aW9uKCJDbG9zZSBXaW5kb3ciLCB0aGlzLCBTTE9UKGNsb3NlKCkpLCBRS2V5U2VxdWVu
Y2U6OkNsb3NlKTsKLSAgICBmaWxlTWVudS0+YWRkU2VwYXJhdG9yKCk7Ci0gICAgZmlsZU1lbnUt
PmFkZEFjdGlvbigiVGFrZSBTY3JlZW4gU2hvdC4uLiIsIHRoaXMsIFNMT1Qoc2NyZWVuc2hvdCgp
KSk7Ci0gICAgZmlsZU1lbnUtPmFkZEFjdGlvbih0cigiUHJpbnQuLi4iKSwgdGhpcywgU0xPVChw
cmludCgpKSwgUUtleVNlcXVlbmNlOjpQcmludCk7Ci0gICAgZmlsZU1lbnUtPmFkZFNlcGFyYXRv
cigpOwotICAgIGZpbGVNZW51LT5hZGRBY3Rpb24oIlF1aXQiLCBRQXBwbGljYXRpb246Omluc3Rh
bmNlKCksIFNMT1QoY2xvc2VBbGxXaW5kb3dzKCkpLCBRS2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBR
dDo6S2V5X1EpKTsKLQotICAgIFFNZW51KiBlZGl0TWVudSA9IG1lbnVCYXIoKS0+YWRkTWVudSgi
JkVkaXQiKTsKLSAgICBlZGl0TWVudS0+YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdl
OjpVbmRvKSk7Ci0gICAgZWRpdE1lbnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV2ViUGFn
ZTo6UmVkbykpOwotICAgIGVkaXRNZW51LT5hZGRTZXBhcmF0b3IoKTsKLSAgICBlZGl0TWVudS0+
YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpDdXQpKTsKLSAgICBlZGl0TWVudS0+
YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpDb3B5KSk7Ci0gICAgZWRpdE1lbnUt
PmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6UGFzdGUpKTsKLSAgICBlZGl0TWVu
dS0+YWRkU2VwYXJhdG9yKCk7Ci0gICAgUUFjdGlvbiogc2V0RWRpdGFibGUgPSBlZGl0TWVudS0+
YWRkQWN0aW9uKCJTZXQgRWRpdGFibGUiLCB0aGlzLCBTTE9UKHNldEVkaXRhYmxlKGJvb2wpKSk7
Ci0gICAgc2V0RWRpdGFibGUtPnNldENoZWNrYWJsZSh0cnVlKTsKLQotICAgIFFNZW51KiB2aWV3
TWVudSA9IG1lbnVCYXIoKS0+YWRkTWVudSgiJlZpZXciKTsKLSAgICB2aWV3TWVudS0+YWRkQWN0
aW9uKHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpTdG9wKSk7Ci0gICAgdmlld01lbnUtPmFkZEFj
dGlvbihwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6UmVsb2FkKSk7Ci0gICAgdmlld01lbnUtPmFk
ZFNlcGFyYXRvcigpOwotICAgIFFBY3Rpb24qIHpvb21JbiA9IHZpZXdNZW51LT5hZGRBY3Rpb24o
Ilpvb20gJkluIiwgdGhpcywgU0xPVCh6b29tSW4oKSkpOwotICAgIFFBY3Rpb24qIHpvb21PdXQg
PSB2aWV3TWVudS0+YWRkQWN0aW9uKCJab29tICZPdXQiLCB0aGlzLCBTTE9UKHpvb21PdXQoKSkp
OwotICAgIFFBY3Rpb24qIHJlc2V0Wm9vbSA9IHZpZXdNZW51LT5hZGRBY3Rpb24oIlJlc2V0IFpv
b20iLCB0aGlzLCBTTE9UKHJlc2V0Wm9vbSgpKSk7Ci0gICAgUUFjdGlvbiogem9vbVRleHRPbmx5
ID0gdmlld01lbnUtPmFkZEFjdGlvbigiWm9vbSBUZXh0IE9ubHkiLCB0aGlzLCBTTE9UKHRvZ2ds
ZVpvb21UZXh0T25seShib29sKSkpOwotICAgIHpvb21UZXh0T25seS0+c2V0Q2hlY2thYmxlKHRy
dWUpOwotICAgIHpvb21UZXh0T25seS0+c2V0Q2hlY2tlZChmYWxzZSk7Ci0gICAgdmlld01lbnUt
PmFkZFNlcGFyYXRvcigpOwotICAgIHZpZXdNZW51LT5hZGRBY3Rpb24oIkR1bXAgSFRNTCIsIHRo
aXMsIFNMT1QoZHVtcEh0bWwoKSkpOwotICAgIC8vIHZpZXdNZW51LT5hZGRBY3Rpb24oIkR1bXAg
cGx1Z2lucyIsIHRoaXMsIFNMT1QoZHVtcFBsdWdpbnMoKSkpOwotCi0gICAgUU1lbnUqIGZvcm1h
dE1lbnUgPSBuZXcgUU1lbnUoIkYmb3JtYXQiLCB0aGlzKTsKLSAgICBtX2Zvcm1hdE1lbnVBY3Rp
b24gPSBtZW51QmFyKCktPmFkZE1lbnUoZm9ybWF0TWVudSk7Ci0gICAgbV9mb3JtYXRNZW51QWN0
aW9uLT5zZXRWaXNpYmxlKGZhbHNlKTsKLSAgICBmb3JtYXRNZW51LT5hZGRBY3Rpb24ocGFnZSgp
LT5hY3Rpb24oUVdlYlBhZ2U6OlRvZ2dsZUJvbGQpKTsKLSAgICBmb3JtYXRNZW51LT5hZGRBY3Rp
b24ocGFnZSgpLT5hY3Rpb24oUVdlYlBhZ2U6OlRvZ2dsZUl0YWxpYykpOwotICAgIGZvcm1hdE1l
bnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV2ViUGFnZTo6VG9nZ2xlVW5kZXJsaW5lKSk7
Ci0gICAgUU1lbnUqIHdyaXRpbmdNZW51ID0gZm9ybWF0TWVudS0+YWRkTWVudSh0cigiV3JpdGlu
ZyBEaXJlY3Rpb24iKSk7Ci0gICAgd3JpdGluZ01lbnUtPmFkZEFjdGlvbihwYWdlKCktPmFjdGlv
bihRV2ViUGFnZTo6U2V0VGV4dERpcmVjdGlvbkRlZmF1bHQpKTsKLSAgICB3cml0aW5nTWVudS0+
YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXZWJQYWdlOjpTZXRUZXh0RGlyZWN0aW9uTGVmdFRv
UmlnaHQpKTsKLSAgICB3cml0aW5nTWVudS0+YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXZWJQ
YWdlOjpTZXRUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQpKTsKLQotICAgIHpvb21Jbi0+c2V0U2hv
cnRjdXQoUUtleVNlcXVlbmNlKFF0OjpDVFJMIHwgUXQ6OktleV9QbHVzKSk7Ci0gICAgem9vbU91
dC0+c2V0U2hvcnRjdXQoUUtleVNlcXVlbmNlKFF0OjpDVFJMIHwgUXQ6OktleV9NaW51cykpOwot
ICAgIHJlc2V0Wm9vbS0+c2V0U2hvcnRjdXQoUUtleVNlcXVlbmNlKFF0OjpDVFJMIHwgUXQ6Oktl
eV8wKSk7Ci0KLSAgICBRTWVudSogd2luZG93TWVudSA9IG1lbnVCYXIoKS0+YWRkTWVudSgiJldp
bmRvdyIpOwotICAgIFFBY3Rpb24qIHRvZ2dsZUZ1bGxTY3JlZW4gPSB3aW5kb3dNZW51LT5hZGRB
Y3Rpb24oIlRvZ2dsZSBGdWxsU2NyZWVuIiwgdGhpcywgU0lHTkFMKGVudGVyZWRGdWxsU2NyZWVu
TW9kZShib29sKSkpOwotICAgIHRvZ2dsZUZ1bGxTY3JlZW4tPnNldENoZWNrYWJsZSh0cnVlKTsK
LSAgICB0b2dnbGVGdWxsU2NyZWVuLT5zZXRDaGVja2VkKGZhbHNlKTsKLQotICAgIC8vIHdoZW4g
ZXhpdCBmdWxsc2NyZWVuIG1vZGUgYnkgY2xpY2tpbmcgb24gdGhlIGV4aXQgYXJlYSAoYm90dG9t
IHJpZ2h0IGNvcm5lcikgd2UgbXVzdAotICAgIC8vIHVuY2hlY2sgdGhlIFRvZ2dsZSBGdWxsU2Ny
ZWVuIGFjdGlvbgotICAgIHRvZ2dsZUZ1bGxTY3JlZW4tPmNvbm5lY3QodGhpcywgU0lHTkFMKGVu
dGVyZWRGdWxsU2NyZWVuTW9kZShib29sKSksIFNMT1Qoc2V0Q2hlY2tlZChib29sKSkpOwotCi0g
ICAgUU1lbnUqIHRvb2xzTWVudSA9IG1lbnVCYXIoKS0+YWRkTWVudSgiJkRldmVsb3AiKTsKLQot
ICAgIFFXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSBwYWdlKCktPnNldHRpbmdzKCk7Ci0KLSAgICBR
TWVudSogZ3JhcGhpY3NWaWV3TWVudSA9IHRvb2xzTWVudS0+YWRkTWVudSgiUUdyYXBoaWNzVmll
dyIpOwotICAgIFFBY3Rpb24qIHRvZ2dsZUdyYXBoaWNzVmlldyA9IGdyYXBoaWNzVmlld01lbnUt
PmFkZEFjdGlvbigiVG9nZ2xlIHVzZSBvZiBRR3JhcGhpY3NWaWV3IiwgdGhpcywgU0xPVChpbml0
aWFsaXplVmlldyhib29sKSkpOwotICAgIHRvZ2dsZUdyYXBoaWNzVmlldy0+c2V0Q2hlY2thYmxl
KHRydWUpOwotICAgIHRvZ2dsZUdyYXBoaWNzVmlldy0+c2V0Q2hlY2tlZChpc0dyYXBoaWNzQmFz
ZWQoKSk7Ci0KLSAgICBRQWN0aW9uKiB0b2dnbGVXZWJHTCA9IHRvb2xzTWVudS0+YWRkQWN0aW9u
KCJUb2dnbGUgV2ViR0wiLCB0aGlzLCBTTE9UKHRvZ2dsZVdlYkdMKGJvb2wpKSk7Ci0gICAgdG9n
Z2xlV2ViR0wtPnNldENoZWNrYWJsZSh0cnVlKTsKLSAgICB0b2dnbGVXZWJHTC0+c2V0Q2hlY2tl
ZChzZXR0aW5ncy0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCkpOwot
Ci0gICAgUUFjdGlvbiogc3BhdGlhbE5hdmlnYXRpb25BY3Rpb24gPSB0b29sc01lbnUtPmFkZEFj
dGlvbigiVG9nZ2xlIFNwYXRpYWwgTmF2aWdhdGlvbiIsIHRoaXMsIFNMT1QodG9nZ2xlU3BhdGlh
bE5hdmlnYXRpb24oYm9vbCkpKTsKLSAgICBzcGF0aWFsTmF2aWdhdGlvbkFjdGlvbi0+c2V0Q2hl
Y2thYmxlKHRydWUpOwotICAgIHNwYXRpYWxOYXZpZ2F0aW9uQWN0aW9uLT5zZXRTaG9ydGN1dChR
S2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBRdDo6U0hJRlQgfCBRdDo6S2V5X1MpKTsKLQotICAgIFFB
Y3Rpb24qIHRvZ2dsZUZyYW1lRmxhdHRlbmluZyA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJUb2dn
bGUgRnJhbWUgRmxhdHRlbmluZyIsIHRoaXMsIFNMT1QodG9nZ2xlRnJhbWVGbGF0dGVuaW5nKGJv
b2wpKSk7Ci0gICAgdG9nZ2xlRnJhbWVGbGF0dGVuaW5nLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0g
ICAgdG9nZ2xlRnJhbWVGbGF0dGVuaW5nLT5zZXRDaGVja2VkKHNldHRpbmdzLT50ZXN0QXR0cmli
dXRlKFFXZWJTZXR0aW5nczo6RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCkpOwotCi0jaWYgUVRfVkVS
U0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDApCi0gICAgUUFjdGlvbiogdG91Y2hNb2Nr
QWN0aW9uID0gdG9vbHNNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSBtdWx0aXRvdWNoIG1vY2tpbmci
LCB0aGlzLCBTTE9UKHNldFRvdWNoTW9ja2luZyhib29sKSkpOwotICAgIHRvdWNoTW9ja0FjdGlv
bi0+c2V0Q2hlY2thYmxlKHRydWUpOwotICAgIHRvdWNoTW9ja0FjdGlvbi0+c2V0U2hvcnRjdXQo
UUtleVNlcXVlbmNlKFF0OjpDVFJMIHwgUXQ6OkFMVCB8IFF0OjpLZXlfVCkpOwotI2VuZGlmCi0K
LSAgICB0b29sc01lbnUtPmFkZFNlcGFyYXRvcigpOwotCi0gICAgUUFjdGlvbiogdG9nZ2xlSW50
ZXJydXB0aW5nSmF2YVNjcmlwdGVFbmFibGVkID0gdG9vbHNNZW51LT5hZGRBY3Rpb24oIkVuYWJs
ZSBpbnRlcnJ1cHRpbmcganMgc2NyaXB0cyIsIHRoaXMsIFNMT1QodG9nZ2xlSW50ZXJydXB0aW5n
SmF2YVNjcmlwdEVuYWJsZWQoYm9vbCkpKTsKLSAgICB0b2dnbGVJbnRlcnJ1cHRpbmdKYXZhU2Ny
aXB0ZUVuYWJsZWQtPnNldENoZWNrYWJsZSh0cnVlKTsKLSAgICB0b2dnbGVJbnRlcnJ1cHRpbmdK
YXZhU2NyaXB0ZUVuYWJsZWQtPnNldENoZWNrZWQoZmFsc2UpOwotCi0gICAgUUFjdGlvbiogdG9n
Z2xlSmF2YXNjcmlwdENhbk9wZW5XaW5kb3dzID0gdG9vbHNNZW51LT5hZGRBY3Rpb24oIkVuYWJs
ZSBqcyBwb3B1cCB3aW5kb3dzIiwgdGhpcywgU0xPVCh0b2dnbGVKYXZhc2NyaXB0Q2FuT3Blbldp
bmRvd3MoYm9vbCkpKTsKLSAgICB0b2dnbGVKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MtPnNldENo
ZWNrYWJsZSh0cnVlKTsKLSAgICB0b2dnbGVKYXZhc2NyaXB0Q2FuT3BlbldpbmRvd3MtPnNldENo
ZWNrZWQoZmFsc2UpOwotCi0gICAgdG9vbHNNZW51LT5hZGRTZXBhcmF0b3IoKTsKLQotICAgIFFB
Y3Rpb24qIHVzZXJBZ2VudEFjdGlvbiA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJDaGFuZ2UgVXNl
ciBBZ2VudCIsIHRoaXMsIFNMT1Qoc2hvd1VzZXJBZ2VudERpYWxvZygpKSk7Ci0gICAgdXNlckFn
ZW50QWN0aW9uLT5zZXRTaG9ydGN1dChRS2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBRdDo6U0hJRlQg
fCBRdDo6S2V5X1UpKTsKLQotICAgIHRvb2xzTWVudS0+YWRkQWN0aW9uKCJTZWxlY3QgRWxlbWVu
dHMuLi4iLCB0aGlzLCBTTE9UKHNlbGVjdEVsZW1lbnRzKCkpKTsKLQotICAgIFFBY3Rpb24qIHNo
b3dJbnNwZWN0b3JBY3Rpb24gPSB0b29sc01lbnUtPmFkZEFjdGlvbigiU2hvdyBXZWIgSW5zcGVj
dG9yIiwgbV9pbnNwZWN0b3IsIFNMT1Qoc2V0VmlzaWJsZShib29sKSksIFFLZXlTZXF1ZW5jZShR
dDo6Q1RSTCB8IFF0OjpBTFQgfCBRdDo6S2V5X0kpKTsKLSAgICBzaG93SW5zcGVjdG9yQWN0aW9u
LT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0gICAgc2hvd0luc3BlY3RvckFjdGlvbi0+Y29ubmVjdCht
X2luc3BlY3RvciwgU0lHTkFMKHZpc2libGVDaGFuZ2VkKGJvb2wpKSwgU0xPVChzZXRDaGVja2Vk
KGJvb2wpKSk7Ci0KLSAgICAvLyBHcmFwaGljc1ZpZXcgc3ViIG1lbnUuCi0gICAgUUFjdGlvbiog
dG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IGdyYXBoaWNzVmlld01lbnUtPmFkZEFjdGlv
bigiVG9nZ2xlIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nIiwgdGhpcywgU0xPVCh0b2dnbGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nKGJvb2wpKSk7Ci0gICAgdG9nZ2xlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZy0+c2V0Q2hlY2thYmxlKHRydWUpOwotICAgIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmctPnNldENoZWNrZWQoc2V0dGluZ3MtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCkpOwotICAgIHRvZ2dsZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmctPnNldEVuYWJsZWQoaXNHcmFwaGljc0Jhc2VkKCkpOwotICAgIHRvZ2dsZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmctPmNvbm5lY3QodG9nZ2xlR3JhcGhpY3NWaWV3LCBTSUdOQUwodG9nZ2xl
ZChib29sKSksIFNMT1Qoc2V0RW5hYmxlZChib29sKSkpOwotCi0gICAgUUFjdGlvbiogdG9nZ2xl
UmVzaXplc1RvQ29udGVudHMgPSBncmFwaGljc1ZpZXdNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSBS
ZXNpemVzIFRvIENvbnRlbnRzIE1vZGUiLCB0aGlzLCBTTE9UKHRvZ2dsZVJlc2l6ZXNUb0NvbnRl
bnRzKGJvb2wpKSk7Ci0gICAgdG9nZ2xlUmVzaXplc1RvQ29udGVudHMtPnNldENoZWNrYWJsZSh0
cnVlKTsKLSAgICB0b2dnbGVSZXNpemVzVG9Db250ZW50cy0+c2V0Q2hlY2tlZChmYWxzZSk7Ci0g
ICAgdG9nZ2xlUmVzaXplc1RvQ29udGVudHMtPnNldEVuYWJsZWQoaXNHcmFwaGljc0Jhc2VkKCkp
OwotICAgIHRvZ2dsZVJlc2l6ZXNUb0NvbnRlbnRzLT5jb25uZWN0KHRvZ2dsZUdyYXBoaWNzVmll
dywgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpKTsKLQotICAg
IFFBY3Rpb24qIHRvZ2dsZVRpbGVkQmFja2luZ1N0b3JlID0gZ3JhcGhpY3NWaWV3TWVudS0+YWRk
QWN0aW9uKCJUb2dnbGUgVGlsZWQgQmFja2luZyBTdG9yZSIsIHRoaXMsIFNMT1QodG9nZ2xlVGls
ZWRCYWNraW5nU3RvcmUoYm9vbCkpKTsKLSAgICB0b2dnbGVUaWxlZEJhY2tpbmdTdG9yZS0+c2V0
Q2hlY2thYmxlKHRydWUpOwotICAgIHRvZ2dsZVRpbGVkQmFja2luZ1N0b3JlLT5zZXRDaGVja2Vk
KGZhbHNlKTsKLSAgICB0b2dnbGVUaWxlZEJhY2tpbmdTdG9yZS0+c2V0RW5hYmxlZChpc0dyYXBo
aWNzQmFzZWQoKSk7Ci0gICAgdG9nZ2xlVGlsZWRCYWNraW5nU3RvcmUtPmNvbm5lY3QodG9nZ2xl
R3JhcGhpY3NWaWV3LCBTSUdOQUwodG9nZ2xlZChib29sKSksIFNMT1Qoc2V0RW5hYmxlZChib29s
KSkpOwotCi0jaWYgZGVmaW5lZChRVF9DT05GSUdVUkVEX1dJVEhfT1BFTkdMKQotICAgIFFBY3Rp
b24qIHRvZ2dsZVFHTFdpZGdldFZpZXdwb3J0ID0gZ3JhcGhpY3NWaWV3TWVudS0+YWRkQWN0aW9u
KCJUb2dnbGUgdXNlIG9mIFFHTFdpZGdldCBWaWV3cG9ydCIsIHRoaXMsIFNMT1QodG9nZ2xlUUdM
V2lkZ2V0Vmlld3BvcnQoYm9vbCkpKTsKLSAgICB0b2dnbGVRR0xXaWRnZXRWaWV3cG9ydC0+c2V0
Q2hlY2thYmxlKHRydWUpOwotICAgIHRvZ2dsZVFHTFdpZGdldFZpZXdwb3J0LT5zZXRDaGVja2Vk
KGdVc2VRR0xXaWRnZXRWaWV3cG9ydCk7Ci0gICAgdG9nZ2xlUUdMV2lkZ2V0Vmlld3BvcnQtPnNl
dEVuYWJsZWQoaXNHcmFwaGljc0Jhc2VkKCkpOwotICAgIHRvZ2dsZVFHTFdpZGdldFZpZXdwb3J0
LT5jb25uZWN0KHRvZ2dsZUdyYXBoaWNzVmlldywgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9U
KHNldEVuYWJsZWQoYm9vbCkpKTsKLSNlbmRpZgotCi0gICAgUU1lbnUqIHZpZXdwb3J0VXBkYXRl
TWVudSA9IGdyYXBoaWNzVmlld01lbnUtPmFkZE1lbnUoIkNoYW5nZSBWaWV3cG9ydCBVcGRhdGUg
TW9kZSIpOwotICAgIHZpZXdwb3J0VXBkYXRlTWVudS0+c2V0RW5hYmxlZChpc0dyYXBoaWNzQmFz
ZWQoKSk7Ci0gICAgdmlld3BvcnRVcGRhdGVNZW51LT5jb25uZWN0KHRvZ2dsZUdyYXBoaWNzVmll
dywgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpKTsKLQotICAg
IFFBY3Rpb24qIGZ1bGxVcGRhdGUgPSB2aWV3cG9ydFVwZGF0ZU1lbnUtPmFkZEFjdGlvbigiRnVs
bFZpZXdwb3J0VXBkYXRlIik7Ci0gICAgZnVsbFVwZGF0ZS0+c2V0Q2hlY2thYmxlKHRydWUpOwot
ICAgIGZ1bGxVcGRhdGUtPnNldENoZWNrZWQoKGdWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gUUdyYXBo
aWNzVmlldzo6RnVsbFZpZXdwb3J0VXBkYXRlKSA/IHRydWUgOiBmYWxzZSk7Ci0KLSAgICBRQWN0
aW9uKiBtaW5pbWFsVXBkYXRlID0gdmlld3BvcnRVcGRhdGVNZW51LT5hZGRBY3Rpb24oIk1pbmlt
YWxWaWV3cG9ydFVwZGF0ZSIpOwotICAgIG1pbmltYWxVcGRhdGUtPnNldENoZWNrYWJsZSh0cnVl
KTsKLSAgICBtaW5pbWFsVXBkYXRlLT5zZXRDaGVja2VkKChnVmlld3BvcnRVcGRhdGVNb2RlID09
IFFHcmFwaGljc1ZpZXc6Ok1pbmltYWxWaWV3cG9ydFVwZGF0ZSkgPyB0cnVlIDogZmFsc2UpOwot
Ci0gICAgUUFjdGlvbiogc21hcnRVcGRhdGUgPSB2aWV3cG9ydFVwZGF0ZU1lbnUtPmFkZEFjdGlv
bigiU21hcnRWaWV3cG9ydFVwZGF0ZSIpOwotICAgIHNtYXJ0VXBkYXRlLT5zZXRDaGVja2FibGUo
dHJ1ZSk7Ci0gICAgc21hcnRVcGRhdGUtPnNldENoZWNrZWQoKGdWaWV3cG9ydFVwZGF0ZU1vZGUg
PT0gUUdyYXBoaWNzVmlldzo6U21hcnRWaWV3cG9ydFVwZGF0ZSkgPyB0cnVlIDogZmFsc2UpOwot
Ci0gICAgUUFjdGlvbiogYm91bmRpbmdSZWN0VXBkYXRlID0gdmlld3BvcnRVcGRhdGVNZW51LT5h
ZGRBY3Rpb24oIkJvdW5kaW5nUmVjdFZpZXdwb3J0VXBkYXRlIik7Ci0gICAgYm91bmRpbmdSZWN0
VXBkYXRlLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0gICAgYm91bmRpbmdSZWN0VXBkYXRlLT5zZXRD
aGVja2VkKChnVmlld3BvcnRVcGRhdGVNb2RlID09IFFHcmFwaGljc1ZpZXc6OkJvdW5kaW5nUmVj
dFZpZXdwb3J0VXBkYXRlKSA/IHRydWUgOiBmYWxzZSk7Ci0KLSAgICBRQWN0aW9uKiBub1VwZGF0
ZSA9IHZpZXdwb3J0VXBkYXRlTWVudS0+YWRkQWN0aW9uKCJOb1ZpZXdwb3J0VXBkYXRlIik7Ci0g
ICAgbm9VcGRhdGUtPnNldENoZWNrYWJsZSh0cnVlKTsKLSAgICBub1VwZGF0ZS0+c2V0Q2hlY2tl
ZCgoZ1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBRR3JhcGhpY3NWaWV3OjpOb1ZpZXdwb3J0VXBkYXRl
KSA/IHRydWUgOiBmYWxzZSk7Ci0KLSAgICBRU2lnbmFsTWFwcGVyKiBzaWduYWxNYXBwZXIgPSBu
ZXcgUVNpZ25hbE1hcHBlcih2aWV3cG9ydFVwZGF0ZU1lbnUpOwotICAgIHNpZ25hbE1hcHBlci0+
c2V0TWFwcGluZyhmdWxsVXBkYXRlLCBRR3JhcGhpY3NWaWV3OjpGdWxsVmlld3BvcnRVcGRhdGUp
OwotICAgIHNpZ25hbE1hcHBlci0+c2V0TWFwcGluZyhtaW5pbWFsVXBkYXRlLCBRR3JhcGhpY3NW
aWV3OjpNaW5pbWFsVmlld3BvcnRVcGRhdGUpOwotICAgIHNpZ25hbE1hcHBlci0+c2V0TWFwcGlu
ZyhzbWFydFVwZGF0ZSwgUUdyYXBoaWNzVmlldzo6U21hcnRWaWV3cG9ydFVwZGF0ZSk7Ci0gICAg
c2lnbmFsTWFwcGVyLT5zZXRNYXBwaW5nKGJvdW5kaW5nUmVjdFVwZGF0ZSwgUUdyYXBoaWNzVmll
dzo6Qm91bmRpbmdSZWN0Vmlld3BvcnRVcGRhdGUpOwotICAgIHNpZ25hbE1hcHBlci0+c2V0TWFw
cGluZyhub1VwZGF0ZSwgUUdyYXBoaWNzVmlldzo6Tm9WaWV3cG9ydFVwZGF0ZSk7Ci0KLSAgICBj
b25uZWN0KGZ1bGxVcGRhdGUsIFNJR05BTCh0cmlnZ2VyZWQoKSksIHNpZ25hbE1hcHBlciwgU0xP
VChtYXAoKSkpOwotICAgIGNvbm5lY3QobWluaW1hbFVwZGF0ZSwgU0lHTkFMKHRyaWdnZXJlZCgp
KSwgc2lnbmFsTWFwcGVyLCBTTE9UKG1hcCgpKSk7Ci0gICAgY29ubmVjdChzbWFydFVwZGF0ZSwg
U0lHTkFMKHRyaWdnZXJlZCgpKSwgc2lnbmFsTWFwcGVyLCBTTE9UKG1hcCgpKSk7Ci0gICAgY29u
bmVjdChib3VuZGluZ1JlY3RVcGRhdGUsIFNJR05BTCh0cmlnZ2VyZWQoKSksIHNpZ25hbE1hcHBl
ciwgU0xPVChtYXAoKSkpOwotICAgIGNvbm5lY3Qobm9VcGRhdGUsIFNJR05BTCh0cmlnZ2VyZWQo
KSksIHNpZ25hbE1hcHBlciwgU0xPVChtYXAoKSkpOwotCi0gICAgY29ubmVjdChzaWduYWxNYXBw
ZXIsIFNJR05BTChtYXBwZWQoaW50KSksIHRoaXMsIFNMT1QoY2hhbmdlVmlld3BvcnRVcGRhdGVN
b2RlKGludCkpKTsKLQotICAgIFFBY3Rpb25Hcm91cCogdmlld3BvcnRVcGRhdGVNb2RlQWN0aW9u
cyA9IG5ldyBRQWN0aW9uR3JvdXAodmlld3BvcnRVcGRhdGVNZW51KTsKLSAgICB2aWV3cG9ydFVw
ZGF0ZU1vZGVBY3Rpb25zLT5hZGRBY3Rpb24oZnVsbFVwZGF0ZSk7Ci0gICAgdmlld3BvcnRVcGRh
dGVNb2RlQWN0aW9ucy0+YWRkQWN0aW9uKG1pbmltYWxVcGRhdGUpOwotICAgIHZpZXdwb3J0VXBk
YXRlTW9kZUFjdGlvbnMtPmFkZEFjdGlvbihzbWFydFVwZGF0ZSk7Ci0gICAgdmlld3BvcnRVcGRh
dGVNb2RlQWN0aW9ucy0+YWRkQWN0aW9uKGJvdW5kaW5nUmVjdFVwZGF0ZSk7Ci0gICAgdmlld3Bv
cnRVcGRhdGVNb2RlQWN0aW9ucy0+YWRkQWN0aW9uKG5vVXBkYXRlKTsKLQotICAgIGdyYXBoaWNz
Vmlld01lbnUtPmFkZFNlcGFyYXRvcigpOwotCi0gICAgbV9mbGlwQW5pbWF0ZWQgPSBncmFwaGlj
c1ZpZXdNZW51LT5hZGRBY3Rpb24oIkFuaW1hdGVkIEZsaXAiKTsKLSAgICBtX2ZsaXBBbmltYXRl
ZC0+Y29ubmVjdCh0b2dnbGVHcmFwaGljc1ZpZXcsIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgU0xP
VChzZXRFbmFibGVkKGJvb2wpKSk7Ci0gICAgbV9mbGlwQW5pbWF0ZWQtPnNldEVuYWJsZWQoaXNH
cmFwaGljc0Jhc2VkKCkpOwotCi0gICAgbV9mbGlwWUFuaW1hdGVkID0gZ3JhcGhpY3NWaWV3TWVu
dS0+YWRkQWN0aW9uKCJBbmltYXRlZCBZLUZsaXAiKTsKLSAgICBtX2ZsaXBZQW5pbWF0ZWQtPmNv
bm5lY3QodG9nZ2xlR3JhcGhpY3NWaWV3LCBTSUdOQUwodG9nZ2xlZChib29sKSksIFNMT1Qoc2V0
RW5hYmxlZChib29sKSkpOwotICAgIG1fZmxpcFlBbmltYXRlZC0+c2V0RW5hYmxlZChpc0dyYXBo
aWNzQmFzZWQoKSk7Ci0KLSAgICBpZiAoaXNHcmFwaGljc0Jhc2VkKCkpIHsKLSAgICAgICAgV2Vi
Vmlld0dyYXBoaWNzQmFzZWQqIHZpZXcgPSBzdGF0aWNfY2FzdDxXZWJWaWV3R3JhcGhpY3NCYXNl
ZCo+KG1fdmlldyk7Ci0gICAgICAgIGNvbm5lY3QobV9mbGlwQW5pbWF0ZWQsIFNJR05BTCh0cmln
Z2VyZWQoKSksIHZpZXcsIFNMT1QoYW5pbWF0ZWRGbGlwKCkpKTsKLSAgICAgICAgY29ubmVjdCht
X2ZsaXBZQW5pbWF0ZWQsIFNJR05BTCh0cmlnZ2VyZWQoKSksIHZpZXcsIFNMT1QoYW5pbWF0ZWRZ
RmxpcCgpKSk7Ci0gICAgfQotCi0gICAgUUFjdGlvbiogY2xvbmVXaW5kb3cgPSBncmFwaGljc1Zp
ZXdNZW51LT5hZGRBY3Rpb24oIkNsb25lIFdpbmRvdyIsIHRoaXMsIFNMT1QoY2xvbmVXaW5kb3co
KSkpOwotICAgIGNsb25lV2luZG93LT5jb25uZWN0KHRvZ2dsZUdyYXBoaWNzVmlldywgU0lHTkFM
KHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpKTsKLSAgICBjbG9uZVdpbmRv
dy0+c2V0RW5hYmxlZChpc0dyYXBoaWNzQmFzZWQoKSk7Ci0KLSAgICBncmFwaGljc1ZpZXdNZW51
LT5hZGRTZXBhcmF0b3IoKTsKLQotICAgIFFBY3Rpb24qIHNob3dGUFMgPSBncmFwaGljc1ZpZXdN
ZW51LT5hZGRBY3Rpb24oIlNob3cgRlBTIiwgdGhpcywgU0xPVChzaG93RlBTKGJvb2wpKSk7Ci0g
ICAgc2hvd0ZQUy0+c2V0Q2hlY2thYmxlKHRydWUpOwotICAgIHNob3dGUFMtPnNldEVuYWJsZWQo
aXNHcmFwaGljc0Jhc2VkKCkpOwotICAgIHNob3dGUFMtPmNvbm5lY3QodG9nZ2xlR3JhcGhpY3NW
aWV3LCBTSUdOQUwodG9nZ2xlZChib29sKSksIFNMT1Qoc2V0RW5hYmxlZChib29sKSkpOwotICAg
IHNob3dGUFMtPnNldENoZWNrZWQoZ1Nob3dGcmFtZVJhdGUpOwotfQogCiBRV2ViUGFnZSogV2Vi
UGFnZTo6Y3JlYXRlV2luZG93KFFXZWJQYWdlOjpXZWJXaW5kb3dUeXBlIHR5cGUpCiB7CkBAIC0x
MDM1LDcgKzU5LDYgQEAgUU9iamVjdCogV2ViUGFnZTo6Y3JlYXRlUGx1Z2luKGNvbnN0IFFTdHJp
bmcgJmNsYXNzSWQsIGNvbnN0IFFVcmwmLCBjb25zdCBRU3RyaW4KICNlbmRpZgogfQogCi0KIGlu
dCBsYXVuY2hlck1haW4oY29uc3QgUUFwcGxpY2F0aW9uJiBhcHApCiB7CiAjaWZuZGVmIE5ERUJV
RwpAQCAtMTA5Miw3ICsxMTUsNyBAQCBMYXVuY2hlckFwcGxpY2F0aW9uOjpMYXVuY2hlckFwcGxp
Y2F0aW9uKGludCYgYXJnYywgY2hhcioqIGFyZ3YpCiAKIHN0YXRpYyB2b2lkIHJlcXVpcmVzR3Jh
cGhpY3NWaWV3KGNvbnN0IFFTdHJpbmcmIG9wdGlvbikKIHsKLSAgICBpZiAoZ1VzZUdyYXBoaWNz
VmlldykKKyAgICBpZiAoTGF1bmNoZXJXaW5kb3c6OmdVc2VHcmFwaGljc1ZpZXcpCiAgICAgICAg
IHJldHVybjsKICAgICBhcHBRdWl0KDEsIFFTdHJpbmcoIiUxIG9ubHkgd29ya3MgaW4gY29tYmlu
YXRpb24gd2l0aCB0aGUgLWdyYXBoaWNzYmFzZWQgb3B0aW9uIikuYXJnKG9wdGlvbikpOwogfQpA
QCAtMTEyNCwzMSArMTQ3LDMxIEBAIHZvaWQgTGF1bmNoZXJBcHBsaWNhdGlvbjo6aGFuZGxlVXNl
ck9wdGlvbnMoKQogICAgIH0KIAogICAgIGlmIChhcmdzLmNvbnRhaW5zKCItZ3JhcGhpY3NiYXNl
ZCIpKQotICAgICAgICBnVXNlR3JhcGhpY3NWaWV3ID0gdHJ1ZTsKKyAgICAgICAgTGF1bmNoZXJX
aW5kb3c6OmdVc2VHcmFwaGljc1ZpZXcgPSB0cnVlOwogCiAgICAgaWYgKGFyZ3MuY29udGFpbnMo
Ii1uby1jb21wb3NpdGluZyIpKSB7CiAgICAgICAgIHJlcXVpcmVzR3JhcGhpY3NWaWV3KCItbm8t
Y29tcG9zaXRpbmciKTsKLSAgICAgICAgZ1VzZUNvbXBvc2l0aW5nID0gZmFsc2U7CisgICAgICAg
IExhdW5jaGVyV2luZG93OjpnVXNlQ29tcG9zaXRpbmcgPSBmYWxzZTsKICAgICB9CiAKICAgICBp
ZiAoYXJncy5jb250YWlucygiLXNob3ctZnBzIikpIHsKICAgICAgICAgcmVxdWlyZXNHcmFwaGlj
c1ZpZXcoIi1zaG93LWZwcyIpOwotICAgICAgICBnU2hvd0ZyYW1lUmF0ZSA9IHRydWU7CisgICAg
ICAgIExhdW5jaGVyV2luZG93OjpnU2hvd0ZyYW1lUmF0ZSA9IHRydWU7CiAgICAgfQogCiAgICAg
aWYgKGFyZ3MuY29udGFpbnMoIi1jYWNoZS13ZWJ2aWV3IikpIHsKICAgICAgICAgcmVxdWlyZXNH
cmFwaGljc1ZpZXcoIi1jYWNoZS13ZWJ2aWV3Iik7Ci0gICAgICAgIGdDYWNoZVdlYlZpZXcgPSB0
cnVlOworICAgICAgICBMYXVuY2hlcldpbmRvdzo6Z0NhY2hlV2ViVmlldyA9IHRydWU7CiAgICAg
fQogCiAgICAgaWYgKGFyZ3MuY29udGFpbnMoIi10aWxlZC1iYWNraW5nLXN0b3JlIikpIHsKICAg
ICAgICAgcmVxdWlyZXNHcmFwaGljc1ZpZXcoIi10aWxlZC1iYWNraW5nLXN0b3JlIik7Ci0gICAg
ICAgIGdVc2VUaWxlZEJhY2tpbmdTdG9yZSA9IHRydWU7CisgICAgICAgIExhdW5jaGVyV2luZG93
OjpnVXNlVGlsZWRCYWNraW5nU3RvcmUgPSB0cnVlOwogICAgIH0KIAogICAgIGlmIChhcmdzLmNv
bnRhaW5zKCItcmVzaXplcy10by1jb250ZW50cyIpKSB7CiAgICAgICAgIHJlcXVpcmVzR3JhcGhp
Y3NWaWV3KCItcmVzaXplcy10by1jb250ZW50cyIpOwotICAgICAgICBnUmVzaXplc1RvQ29udGVu
dHMgPSB0cnVlOworICAgICAgICBMYXVuY2hlcldpbmRvdzo6Z1Jlc2l6ZXNUb0NvbnRlbnRzID0g
dHJ1ZTsKICAgICB9CiAKICAgICBRU3RyaW5nIGFyZzEoIi12aWV3cG9ydC11cGRhdGUtbW9kZSIp
OwpAQCAtMTE2MywxMyArMTg2LDEzIEBAIHZvaWQgTGF1bmNoZXJBcHBsaWNhdGlvbjo6aGFuZGxl
VXNlck9wdGlvbnMoKQogICAgICAgICBpZiAoaWR4ID09IC0xKQogICAgICAgICAgICAgYXBwUXVp
dCgxLCBRU3RyaW5nKCIlMSB2YWx1ZSBoYXMgdG8gYmUgb25lIG9mIFslMl0iKS5hcmcoYXJnMSku
YXJnKGZvcm1hdEtleXModXBkYXRlTW9kZXMpKSk7CiAKLSAgICAgICAgZ1ZpZXdwb3J0VXBkYXRl
TW9kZSA9IHN0YXRpY19jYXN0PFFHcmFwaGljc1ZpZXc6OlZpZXdwb3J0VXBkYXRlTW9kZT4oaWR4
KTsKKyAgICAgICAgTGF1bmNoZXJXaW5kb3c6OmdWaWV3cG9ydFVwZGF0ZU1vZGUgPSBzdGF0aWNf
Y2FzdDxRR3JhcGhpY3NWaWV3OjpWaWV3cG9ydFVwZGF0ZU1vZGU+KGlkeCk7CiAgICAgfQogCiAg
ICAgUVN0cmluZyBpbnNwZWN0b3JVcmxBcmcoIi1pbnNwZWN0b3ItdXJsIik7CiAgICAgaW50IGlu
c3BlY3RvclVybEluZGV4ID0gYXJncy5pbmRleE9mKGluc3BlY3RvclVybEFyZyk7CiAgICAgaWYg
KGluc3BlY3RvclVybEluZGV4ICE9IC0xKQotICAgICAgIGdJbnNwZWN0b3JVcmwgPSB0YWtlT3B0
aW9uVmFsdWUoJmFyZ3MsIGluc3BlY3RvclVybEluZGV4KTsKKyAgICAgICBMYXVuY2hlcldpbmRv
dzo6Z0luc3BlY3RvclVybCA9IHRha2VPcHRpb25WYWx1ZSgmYXJncywgaW5zcGVjdG9yVXJsSW5k
ZXgpOwogCiAgICAgaW50IHJvYm90SW5kZXggPSBhcmdzLmluZGV4T2YoIi1yIik7CiAgICAgaWYg
KHJvYm90SW5kZXggIT0gLTEpIHsKLS0gCjEuNy4wLjQKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>