<?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>55161</bug_id>
          
          <creation_ts>2011-02-24 11:20:36 -0800</creation_ts>
          <short_desc>Add basic pixel testing support to WebKitTestRunner</short_desc>
          <delta_ts>2011-02-24 15:59:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>49007</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>357186</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-02-24 11:20:36 -0800</bug_when>
    <thetext>Add basic pixel testing support to WebKitTestRunner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357219</commentid>
    <comment_count>1</comment_count>
      <attachid>83690</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-02-24 11:41:57 -0800</bug_when>
    <thetext>Created attachment 83690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357225</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-24 11:45:46 -0800</bug_when>
    <thetext>Attachment 83690 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/old-run-...&quot; exit_code: 1

Tools/WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:26:  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]
Tools/WebKitTestRunner/InjectedBundle/win/InjectedBundleWin.cpp:26:  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]
Total errors found: 2 in 19 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>357226</commentid>
    <comment_count>3</comment_count>
      <attachid>83690</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-24 11:46:43 -0800</bug_when>
    <thetext>Comment on attachment 83690
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=83690&amp;action=review

r=me but you said there is something wrong with the patch

&gt; Tools/WebKitTestRunner/TestInvocation.cpp:88
&gt; +TestInvocation::TestInvocation(std::string pathOrURL)

How about const string&amp; and using namespace std.

&gt; Tools/WebKitTestRunner/TestInvocation.h:41
&gt; +    TestInvocation(std::string pathOrURL);
&gt;      ~TestInvocation();
&gt;  
&gt; +    void setIsPixelTest(std::string expectedPixelHash);

Should be const std::string&amp;.

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:181
&gt; +    WKRetainPtr&lt;WKStringRef&gt; textOutput(AdoptWK, WKStringCreateWithUTF8CString(m_outputStream.str().c_str()));

Kind of annoying to have to convert to UTF-8 to convert back to UTF-16.

&gt; Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:97
&gt; +    , m_dumpPixels(true)

Should be m_shouldDumpPixels. The others should be named that way too.

&gt; Tools/WebKitTestRunner/mac/TestInvocationMac.mm:48
&gt; +    size_t rowBytes = (4 * pixelsWide + 63) &amp; ~63;

Magic numbers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357227</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-02-24 11:46:59 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 49007 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357231</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-02-24 11:51:20 -0800</bug_when>
    <thetext>Reopening and making this a subtask of the other one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357288</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-24 12:41:58 -0800</bug_when>
    <thetext>Attachment 83690 did not build on qt:
Build output: http://queues.webkit.org/results/7984548</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357307</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-24 12:55:19 -0800</bug_when>
    <thetext>Attachment 83690 did not build on win:
Build output: http://queues.webkit.org/results/7980584</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357339</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-02-24 13:38:15 -0800</bug_when>
    <thetext>Landed in r79612.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357516</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-24 15:59:51 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/79612 might have broken Qt Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83690</attachid>
            <date>2011-02-24 11:41:57 -0800</date>
            <delta_ts>2011-02-24 11:46:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55161-20110224114155.patch</filename>
            <type>text/plain</type>
            <size>36485</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDc5NTkyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsODAgQEAKKzIwMTEtMDItMjQgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYmFzaWMgcGl4
ZWwgdGVzdGluZyBzdXBwb3J0IHRvIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MTYxCisKKyAgICAgICAgKiBTY3JpcHRz
L29sZC1ydW4td2Via2l0LXRlc3RzOgorICAgICAgICBEb24ndCBwcmludCBjb2xvciBzcGFjZSBp
bmZvcm1hdGlvbiB3aGVuIHVzaW5nIFdlYktpdFRlc3RSdW5uZXIgc2luY2UKKyAgICAgICAgd2Ug
ZG9uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlIHNjcmVlbi4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIEFkZCBjYWxsIHRvIGluaXRpYWxp
emVQbGF0Zm9ybURlZmF1bHRzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGU6OmRvbmUpOgorICAgICAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IG9uIGNvbXBsZXRpb24gd2l0
aCBib3RoIHRoZSB0ZXh0IG91dHB1dCBhbmQgcGl4ZWwgZHVtcCBvdmVycmlkZS4KKworICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaDoKKyAg
ICAgICAgQWRkIGRlY2xhcmF0aW9uIGZvciBpbml0aWFsaXplUGxhdGZvcm1EZWZhdWx0cy4KKwor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVz
dENvbnRyb2xsZXIpOgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcEFz
VGV4dCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hv
dWxkRHVtcFBpeGVscyk6CisgICAgICAgIE1ha2Ugc2V0dGluZyBkdW1wQXNUZXh0IG92ZXJyaWRl
IHRoZSBkdW1wIHBpeGVscyBwcmVmZXJlbmNlLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMubW06IEFkZGVkLgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZVBsYXRmb3JtRGVmYXVsdHMpOgorICAg
ICAgICBTZXQgcGxhdGZvcm0gZGVmYXVsdHMgbWF0Y2hpbmcgRHVtcFJlbmRlclRyZWUuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3F0L0luamVjdGVkQnVuZGxl
UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmluaXRpYWxpemVQ
bGF0Zm9ybURlZmF1bHRzKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZVBsYXRmb3JtRGVmYXVsdHMpOgorICAgICAgICBBZGQgc3R1
YnMgZm9yIGluaXRpYWxpemVQbGF0Zm9ybURlZmF1bHRzLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
OjpydW5UZXN0KToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJ1blRlc3RpbmdTZXJ2
ZXJMb29wKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJ1bik6CisgICAgICAgIFBh
cnNlIGV4cGVjdGVkIHBpeGVsIHJlc3VsdHMgb3V0IG9mIHN0ZGluIGFuZCBzZXR1cCB0aGUgaW52
b2NhdGlvbiB3aXRoIGl0LgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2Nh
dGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpUZXN0SW52b2NhdGlvbik6
CisgICAgICAgIEluaXRpYWxpemUgbmV3IG1lbWJlcnMuCisKKyAgICAgICAgKFdUUjo6VGVzdElu
dm9jYXRpb246On5UZXN0SW52b2NhdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9u
OjpzZXRJc1BpeGVsVGVzdCk6CisgICAgICAgIChXVFI6OnNpemVXZWJWaWV3Rm9yQ3VycmVudFRl
c3QpOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKToKKyAgICAgICAgKFdU
Ujo6VGVzdEludm9jYXRpb246OmR1bXApOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdEludm9jYXRpb24uaDoKKyAgICAgICAgRHVtcCBwaXhlbHMgaW4gYWRkaXRp
b24gdG8gdGV4dCBieSBjYWxsaW5nIGR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkLgor
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tOgor
ICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyk6CisgICAgICAg
IFVzZSAtW05TQ29sb3JTcGFjZSBnZW5lcmljUkdCQ29sb3JTcGFjZV0gaW5zdGVhZCBvZiB0aGUg
bWFpbiBzY3JlZW4gY29sb3Igc3BhY2UuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL21h
Yy9UZXN0SW52b2NhdGlvbk1hYy5tbTogQWRkZWQuCisgICAgICAgIChXVFI6OmNyZWF0ZUNHQ29u
dGV4dEZyb21QbGF0Zm9ybVZpZXcpOgorICAgICAgICAoV1RSOjpjb21wdXRlTUQ1SGFzaFN0cmlu
Z0ZvckNvbnRleHQpOgorICAgICAgICAoV1RSOjpkdW1wQml0bWFwKToKKyAgICAgICAgKFdUUjo6
Zm9yY2VSZXBhaW50RnVuY3Rpb24pOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZHVt
cFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQpOgorICAgICAgICBBZGQgbWFjIHNwZWNpZmlj
IHBpeGVsIGR1bXBpbmcgc3VwcG9ydC4gUmlnaHQgbm93LCB3ZSBhbHdheXMgcHVsbCBwaXhlbHMK
KyAgICAgICAgZnJvbSB0aGUgd2luZG93IHNlcnZlci4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvcXQvSW5qZWN0ZWRCdW5kbGUucHJv
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvcXQvV2ViS2l0VGVzdFJ1bm5lci5wcm86Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vSW5qZWN0ZWRCdW5kbGUudmNwcm9qOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvd2luL1dlYktpdFRlc3RSdW5uZXIudmNwcm9qOgorICAg
ICAgICBBZGQgbmV3IGZpbGVzLgorCiAyMDExLTAyLTI0ICBBbmRyZXcgV2lsc29uICA8YXR3aWxz
b25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3OTU3
MC4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwkocmV2aXNpb24gNzk1OTIpCisr
KyBUb29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC00
NzEsMTAgKzQ3MSwxMiBAQCBwcmludCAiUnVubmluZyB0ZXN0cyBmcm9tICR0ZXN0RGlyZWN0b3J5
CiBpZiAoJHBpeGVsVGVzdHMpIHsKICAgICBwcmludCAiRW5hYmxpbmcgcGl4ZWwgdGVzdHMgd2l0
aCBhIHRvbGVyYW5jZSBvZiAkdG9sZXJhbmNlJVxuIjsKICAgICBpZiAoaXNEYXJ3aW4oKSkgewot
ICAgICAgICBwcmludCAiV0FSTklORzogVGVtcG9yYXJpbHkgY2hhbmdpbmcgdGhlIG1haW4gZGlz
cGxheSBjb2xvciBwcm9maWxlOlxuIjsKLSAgICAgICAgcHJpbnQgIlx0VGhlIGNvbG9ycyBvbiB5
b3VyIHNjcmVlbiB3aWxsIGNoYW5nZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB0ZXN0aW5nLlxu
IjsKLSAgICAgICAgcHJpbnQgIlx0VGhpcyBhbGxvd3MgdGhlIHBpeGVsIHRlc3RzIHRvIGhhdmUg
Y29uc2lzdGVudCBjb2xvciB2YWx1ZXMgYWNyb3NzIGFsbCBtYWNoaW5lcy5cbiI7Ci0gICAgICAg
IAorICAgICAgICBpZiAoISR1c2VXZWJLaXRUZXN0UnVubmVyKSB7CisgICAgICAgICAgICBwcmlu
dCAiV0FSTklORzogVGVtcG9yYXJpbHkgY2hhbmdpbmcgdGhlIG1haW4gZGlzcGxheSBjb2xvciBw
cm9maWxlOlxuIjsKKyAgICAgICAgICAgIHByaW50ICJcdFRoZSBjb2xvcnMgb24geW91ciBzY3Jl
ZW4gd2lsbCBjaGFuZ2UgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdGVzdGluZy5cbiI7CisgICAg
ICAgICAgICBwcmludCAiXHRUaGlzIGFsbG93cyB0aGUgcGl4ZWwgdGVzdHMgdG8gaGF2ZSBjb25z
aXN0ZW50IGNvbG9yIHZhbHVlcyBhY3Jvc3MgYWxsIG1hY2hpbmVzLlxuIjsKKyAgICAgICAgfQor
CiAgICAgICAgIGlmIChpc1Blcmlhbkluc3RhbGxlZCgpKSB7CiAgICAgICAgICAgICBwcmludCAi
V0FSTklORzogUGVyaWFuJ3MgUXVpY2tUaW1lIGNvbXBvbmVudCBpcyBpbnN0YWxsZWQgYW5kIHRo
aXMgbWF5IGFmZmVjdCBwaXhlbCB0ZXN0IHJlc3VsdHMhXG4iOwogICAgICAgICAgICAgcHJpbnQg
Ilx0WW91IHNob3VsZCBhdm9pZCBnZW5lcmF0aW5nIG5ldyBwaXhlbCByZXN1bHRzIGluIHRoaXMg
ZW52aXJvbm1lbnQuXG4iOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDc5NTkyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NCw4ICszODQsMjAgQEAgYm9vbCBU
ZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCisgICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMKHRlc3QpOworICAgIHN0ZDo6c3Ry
aW5nIGV4cGVjdGVkUGl4ZWxIYXNoOworICAgIHNpemVfdCBzZXBhcmF0b3JQb3MgPSBwYXRoT3JV
UkwuZmluZCgiJyIpOworICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3Mp
IHsKKyAgICAgICAgcGF0aE9yVVJMID0gc3RkOjpzdHJpbmcoc3RkOjpzdHJpbmcodGVzdCksIDAs
IHNlcGFyYXRvclBvcyk7CisgICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RkOjpzdHJpbmco
c3RkOjpzdHJpbmcodGVzdCksIHNlcGFyYXRvclBvcyArIDEpOworICAgIH0KKwogICAgIG1fc3Rh
dGUgPSBSdW5uaW5nVGVzdDsKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLnNldChuZXcgVGVzdElu
dm9jYXRpb24odGVzdCkpOworCisgICAgbV9jdXJyZW50SW52b2NhdGlvbi5zZXQobmV3IFRlc3RJ
bnZvY2F0aW9uKHBhdGhPclVSTCkpOworICAgIGlmIChtX2R1bXBQaXhlbHMpCisgICAgICAgIG1f
Y3VycmVudEludm9jYXRpb24tPnNldElzUGl4ZWxUZXN0KGV4cGVjdGVkUGl4ZWxIYXNoKTsgICAg
CisKICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5pbnZva2UoKTsKICAgICBtX2N1cnJlbnRJbnZv
Y2F0aW9uLmNsZWFyKCk7CiAKQEAgLTM5Niw3ICs0MDgsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpydW5UZXN0aW5nU2VydmVyTG9vCiB7CiAgICAgY2hhciBmaWxlbmFtZUJ1ZmZlclsyMDQ4XTsK
ICAgICB3aGlsZSAoZmdldHMoZmlsZW5hbWVCdWZmZXIsIHNpemVvZihmaWxlbmFtZUJ1ZmZlciks
IHN0ZGluKSkgewotICAgICAgICBjaGFyICpuZXdMaW5lQ2hhcmFjdGVyID0gc3RyY2hyKGZpbGVu
YW1lQnVmZmVyLCAnXG4nKTsKKyAgICAgICAgY2hhciogbmV3TGluZUNoYXJhY3RlciA9IHN0cmNo
cihmaWxlbmFtZUJ1ZmZlciwgJ1xuJyk7CiAgICAgICAgIGlmIChuZXdMaW5lQ2hhcmFjdGVyKQog
ICAgICAgICAgICAgKm5ld0xpbmVDaGFyYWN0ZXIgPSAnXDAnOwogCkBAIC00MTgsNyArNDMwLDYg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cnVuKCkKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgIH0KLQogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpydW5VbnRpbChib29s
JiBkb25lLCBUaW1lb3V0RHVyYXRpb24gdGltZW91dER1cmF0aW9uKQpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDc5NTkyKQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDE4ICs4NSwyNSBAQCBzdGF0aWMgV0tVUkxSZWYgY3JlYXRlV0tVUkwoY29uc3QgY2hhciog
CiAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1ZmZlci5nZXQoKSk7CiB9
CiAKLVRlc3RJbnZvY2F0aW9uOjpUZXN0SW52b2NhdGlvbihjb25zdCBjaGFyKiBwYXRoT3JVUkwp
Ci0gICAgOiBtX3VybChBZG9wdFdLLCBjcmVhdGVXS1VSTChwYXRoT3JVUkwpKQotICAgICwgbV9w
YXRoT3JVUkwoZmFzdFN0ckR1cChwYXRoT3JVUkwpKQorVGVzdEludm9jYXRpb246OlRlc3RJbnZv
Y2F0aW9uKHN0ZDo6c3RyaW5nIHBhdGhPclVSTCkKKyAgICA6IG1fdXJsKEFkb3B0V0ssIGNyZWF0
ZVdLVVJMKHBhdGhPclVSTC5jX3N0cigpKSkKKyAgICAsIG1fcGF0aE9yVVJMKHBhdGhPclVSTCkK
KyAgICAsIG1fZHVtcFBpeGVscyhmYWxzZSkKICAgICAsIG1fZ290SW5pdGlhbFJlc3BvbnNlKGZh
bHNlKQogICAgICwgbV9nb3RGaW5hbE1lc3NhZ2UoZmFsc2UpCisgICAgLCBtX2dvdFJlcGFpbnQo
ZmFsc2UpCiAgICAgLCBtX2Vycm9yKGZhbHNlKQogewogfQogCiBUZXN0SW52b2NhdGlvbjo6flRl
c3RJbnZvY2F0aW9uKCkKIHsKLSAgICBmYXN0RnJlZShtX3BhdGhPclVSTCk7Cit9CisKK3ZvaWQg
VGVzdEludm9jYXRpb246OnNldElzUGl4ZWxUZXN0KHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxI
YXNoKQoreworICAgIG1fZHVtcFBpeGVscyA9IHRydWU7CisgICAgbV9leHBlY3RlZFBpeGVsSGFz
aCA9IGV4cGVjdGVkUGl4ZWxIYXNoOwogfQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgdzNjU1ZH
V2lkdGggPSA0ODA7CkBAIC0xMDQsNyArMTExLDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHcz
Y1NWR0hlaWdodCA9IDM2MAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vcm1hbFdpZHRoID0gODAw
Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vcm1hbEhlaWdodCA9IDYwMDsKIAotc3RhdGljIHZv
aWQgc2l6ZVdlYlZpZXdGb3JDdXJyZW50VGVzdChjaGFyKiBwYXRoT3JVUkwpCitzdGF0aWMgdm9p
ZCBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKIHsKICAg
ICBib29sIGlzU1ZHVzNDVGVzdCA9IHN0cnN0cihwYXRoT3JVUkwsICJzdmcvVzNDLVNWRy0xLjEi
KSB8fCBzdHJzdHIocGF0aE9yVVJMLCAic3ZnXFxXM0MtU1ZHLTEuMSIpOwogCkBAIC0xMjEsNyAr
MTI4LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkT3BlbldlYkluc3BlY3Rvcihjb25zdAogCiB2b2lk
IFRlc3RJbnZvY2F0aW9uOjppbnZva2UoKQogewotICAgIHNpemVXZWJWaWV3Rm9yQ3VycmVudFRl
c3QobV9wYXRoT3JVUkwpOworICAgIHNpemVXZWJWaWV3Rm9yQ3VycmVudFRlc3QobV9wYXRoT3JV
UkwuY19zdHIoKSk7CiAKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUo
QWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJlZ2luVGVzdCIpKTsKICAg
ICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNo
YXJlZCgpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwpAQCAtMTM2LDcgKzE0Myw3
IEBAIHZvaWQgVGVzdEludm9jYXRpb246Omludm9rZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoc2hvdWxkT3BlbldlYkluc3BlY3RvcihtX3BhdGhPclVSTCkpCisgICAgaWYg
KHNob3VsZE9wZW5XZWJJbnNwZWN0b3IobV9wYXRoT3JVUkwuY19zdHIoKSkpCiAgICAgICAgIFdL
SW5zcGVjdG9yU2hvdyhXS1BhZ2VHZXRJbnNwZWN0b3IoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSkpOwogCiAgICAgV0tQYWdlTG9hZFVSTChUZXN0Q29udHJv
bGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtX3VybC5nZXQoKSk7CkBAIC0x
NTYsMTEgKzE2Myw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXAoY29uc3QgY2hhciogc3QK
ICAgICBwcmludGYoIiVzIiwgc3RyaW5nVG9EdW1wKTsKIAogICAgIGZwdXRzKCIjRU9GXG4iLCBz
dGRvdXQpOwotICAgIGZwdXRzKCIjRU9GXG4iLCBzdGRvdXQpOwogICAgIGZwdXRzKCIjRU9GXG4i
LCBzdGRlcnIpOwotCi0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgZmZsdXNoKHN0ZGVycik7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkpCkBAIC0x
ODcsMTEgKzE5MCwyNiBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZy
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJEb25lIikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAgICAgICAgV0tTdHJpbmdSZWYgbWVzc2FnZUJvZHlT
dHJpbmcgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgp
KTsKKyAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRp
Y19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOworCisgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB0ZXh0T3V0cHV0S2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJUZXh0T3V0cHV0IikpOworICAgICAgICBXS1N0cmluZ1JlZiB0ZXh0T3V0
cHV0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0ZXh0T3V0cHV0S2V5LmdldCgpKSk7CiAKLSAgICAgICAg
ZHVtcCh0b1NURChtZXNzYWdlQm9keVN0cmluZykuY19zdHIoKSk7CisgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB0ZXh0T25seUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVGV4dE9ubHkiKSk7CisgICAgICAgIGJvb2wgdGV4dE9ubHkgPSBXS0Jvb2xl
YW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0ZXh0T25seUtleS5nZXQoKSkpKTsKIAorICAg
ICAgICAvLyBEdW1wIHRleHQuCisgICAgICAgIGR1bXAodG9TVEQodGV4dE91dHB1dCkuY19zdHIo
KSk7CisKKyAgICAgICAgLy8gRHVtcCBwaXhlbHMgKGlmIG5lY2Vzc2FyeSkuCisgICAgICAgIGlm
IChtX2R1bXBQaXhlbHMgJiYgIXRleHRPbmx5KQorICAgICAgICAgICAgZHVtcFBpeGVsc0FuZENv
bXBhcmVXaXRoRXhwZWN0ZWQoKTsKKworICAgICAgICBmcHV0cygiI0VPRlxuIiwgc3Rkb3V0KTsK
KyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAg
ICAKICAgICAgICAgbV9nb3RGaW5hbE1lc3NhZ2UgPSB0cnVlOwogICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2hhcmVkKCkubm90aWZ5RG9uZSgpOwogICAgICAgICByZXR1cm47CkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCShyZXZpc2lvbiA3OTU5MikKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2lmbmRlZiBUZXN0SW52b2NhdGlvbl9oCiAjZGVmaW5lIFRlc3RJbnZv
Y2F0aW9uX2gKIAorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWlu
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTM0LDIyICszNSwyOSBA
QCBuYW1lc3BhY2UgV1RSIHsKIGNsYXNzIFRlc3RJbnZvY2F0aW9uIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShUZXN0SW52b2NhdGlvbik7CiBwdWJsaWM6Ci0gICAgVGVzdEludm9jYXRpb24o
Y29uc3QgY2hhciopOworICAgIFRlc3RJbnZvY2F0aW9uKHN0ZDo6c3RyaW5nIHBhdGhPclVSTCk7
CiAgICAgflRlc3RJbnZvY2F0aW9uKCk7CiAKKyAgICB2b2lkIHNldElzUGl4ZWxUZXN0KHN0ZDo6
c3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoKTsKKyAgICAKICAgICB2b2lkIGludm9rZSgpOwogICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVz
c2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSk7CiAgICAgV0tSZXRhaW5QdHI8V0tUeXBl
UmVmPiBkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3Ry
aW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkpOwogCiBwcml2YXRlOgog
ICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKik7Ci0KKyAgICB2b2lkIGR1bXBQaXhlbHNBbmRDb21w
YXJlV2l0aEV4cGVjdGVkKCk7CisgICAgCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1fdXJs
OwotICAgIGNoYXIqIG1fcGF0aE9yVVJMOworICAgIHN0ZDo6c3RyaW5nIG1fcGF0aE9yVVJMOwor
ICAgIAorICAgIGJvb2wgbV9kdW1wUGl4ZWxzOworICAgIHN0ZDo6c3RyaW5nIG1fZXhwZWN0ZWRQ
aXhlbEhhc2g7CiAKICAgICAvLyBJbnZvY2F0aW9uIHN0YXRlCiAgICAgYm9vbCBtX2dvdEluaXRp
YWxSZXNwb25zZTsKICAgICBib29sIG1fZ290RmluYWxNZXNzYWdlOworICAgIGJvb2wgbV9nb3RS
ZXBhaW50OwogICAgIGJvb2wgbV9lcnJvcjsKIH07CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShy
ZXZpc2lvbiA3OTU5MikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw4IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OmluaXRpYWxpemUoV0tCdW5kbGUKICAgICB9OwogICAgIFdLQnVuZGxl
U2V0Q2xpZW50KG1fYnVuZGxlLCAmY2xpZW50KTsKIAorICAgIGluaXRpYWxpemVQbGF0Zm9ybURl
ZmF1bHRzKCk7CisKICAgICBhY3RpdmF0ZUZvbnRzKCk7CiAgICAgV0tCdW5kbGVBY3RpdmF0ZU1h
Y0ZvbnRBc2NlbnRIYWNrKG1fYnVuZGxlKTsKIH0KQEAgLTE3Myw3ICsxNzUsMTUgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6ZG9uZSgpCiAgICAgc2V0VG9wTG9hZGluZ0ZyYW1lKDApOwogCiAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRvbmVNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRG9uZSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gZG9uZU1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKG1fb3V0cHV0U3RyZWFtLnN0cigpLmNfc3RyKCkpKTsKKyAgICBXS1JldGFpblB0cjxXS011
dGFibGVEaWN0aW9uYXJ5UmVmPiBkb25lTWVzc2FnZUJvZHkoQWRvcHRXSywgV0tNdXRhYmxlRGlj
dGlvbmFyeUNyZWF0ZSgpKTsKKworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0T3V0
cHV0S2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXh0T3V0cHV0
IikpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0T3V0cHV0KEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1fb3V0cHV0U3RyZWFtLnN0cigpLmNfc3RyKCkp
KTsKKyAgICBXS0RpY3Rpb25hcnlBZGRJdGVtKGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgdGV4dE91
dHB1dEtleS5nZXQoKSwgdGV4dE91dHB1dC5nZXQoKSk7CisgICAgCisgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRleHRPbmx5S2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJUZXh0T25seSIpKTsKKyAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHRleHRP
bmx5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSghbV9sYXlvdXRUZXN0Q29udHJvbGxlci0+c2hv
dWxkRHVtcFBpeGVscygpKSk7CisgICAgV0tEaWN0aW9uYXJ5QWRkSXRlbShkb25lTWVzc2FnZUJv
ZHkuZ2V0KCksIHRleHRPbmx5S2V5LmdldCgpLCB0ZXh0T25seS5nZXQoKSk7CiAKICAgICBXS0J1
bmRsZVBvc3RNZXNzYWdlKG1fYnVuZGxlLCBkb25lTWVzc2FnZU5hbWUuZ2V0KCksIGRvbmVNZXNz
YWdlQm9keS5nZXQoKSk7CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgJKHJldmlzaW9uIDc5NTkyKQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRJbml0
aWFsaXplUGFnZUdyb3VwKFdLQnVuZGxlUGFnZUdyb3VwUmVmKTsKICAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkp
OwogCisgICAgdm9pZCBpbml0aWFsaXplUGxhdGZvcm1EZWZhdWx0cygpOwogICAgIHZvaWQgcmVz
ZXRMb2NhbFNldHRpbmdzKCk7CiAKICAgICB2b2lkIGJlZ2luVGVzdGluZygpOwpJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDc5NTkyKQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk0LDYgKzk0LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRl
c3RDb250cm9sbAogICAgICwgbV9kdW1wRWRpdGluZ0NhbGxiYWNrcyhmYWxzZSkKICAgICAsIG1f
ZHVtcFN0YXR1c0NhbGxiYWNrcyhmYWxzZSkKICAgICAsIG1fZHVtcFRpdGxlQ2hhbmdlcyhmYWxz
ZSkKKyAgICAsIG1fZHVtcFBpeGVscyh0cnVlKQogICAgICwgbV93YWl0VG9EdW1wKGZhbHNlKQog
ICAgICwgbV90ZXN0UmVwYWludChmYWxzZSkKICAgICAsIG1fdGVzdFJlcGFpbnRTd2VlcEhvcml6
b250YWxseShmYWxzZSkKQEAgLTExNiw2ICsxMTcsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGlzcGxheSgpCiAgICAgLy8gRklYTUU6IGFjdHVhbGx5IGltcGxlbWVudCwgb25jZSB3
ZSB3YW50IHBpeGVsIHRlc3RzCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBB
c1RleHQoKQoreworICAgIG1fd2hhdFRvRHVtcCA9IE1haW5GcmFtZVRleHQ7CisgICAgbV9kdW1w
UGl4ZWxzID0gZmFsc2U7Cit9CisgICAgCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0
VW50aWxEb25lKCkKIHsKICAgICBtX3dhaXRUb0R1bXAgPSB0cnVlOwpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuaAkocmV2aXNpb24gNzk1OTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIHZvaWQgbWFrZVdpbmRvd09iamVjdChKU0NvbnRl
eHRSZWYsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsK
IAogICAgIC8vIFRoZSBiYXNpY3MuCi0gICAgdm9pZCBkdW1wQXNUZXh0KCkgeyBtX3doYXRUb0R1
bXAgPSBNYWluRnJhbWVUZXh0OyB9CisgICAgdm9pZCBkdW1wQXNUZXh0KCk7CiAgICAgdm9pZCBk
dW1wQ2hpbGRGcmFtZXNBc1RleHQoKSB7IG1fd2hhdFRvRHVtcCA9IEFsbEZyYW1lc1RleHQ7IH0K
ICAgICB2b2lkIHdhaXRVbnRpbERvbmUoKTsKICAgICB2b2lkIG5vdGlmeURvbmUoKTsKQEAgLTEx
NCw2ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGREdW1wTWFpbkZyYW1lU2Nyb2xs
UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3doYXRUb0R1bXAgPT0gUmVuZGVyVHJlZTsgfQog
ICAgIGJvb2wgc2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZHVt
cFN0YXR1c0NhbGxiYWNrczsgfQogICAgIGJvb2wgc2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpIGNv
bnN0IHsgcmV0dXJuIG1fZHVtcFRpdGxlQ2hhbmdlczsgfQorICAgIGJvb2wgc2hvdWxkRHVtcFBp
eGVscygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFBpeGVsczsgfQogCiAgICAgYm9vbCB3YWl0VG9E
dW1wKCkgY29uc3QgeyByZXR1cm4gbV93YWl0VG9EdW1wOyB9CiAgICAgdm9pZCB3YWl0VG9EdW1w
V2F0Y2hkb2dUaW1lckZpcmVkKCk7CkBAIC0xNTQsNiArMTU1LDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1fZHVtcEVkaXRpbmdDYWxsYmFja3M7CiAgICAgYm9vbCBtX2R1bXBTdGF0dXNDYWxsYmFj
a3M7CiAgICAgYm9vbCBtX2R1bXBUaXRsZUNoYW5nZXM7CisgICAgYm9vbCBtX2R1bXBQaXhlbHM7
CiAgICAgYm9vbCBtX3dhaXRUb0R1bXA7IC8vIFRydWUgaWYgd2FpdFVudGlsRG9uZSgpIGhhcyBi
ZWVuIGNhbGxlZCwgYnV0IG5vdGlmeURvbmUoKSBoYXMgbm90IHlldCBiZWVuIGNhbGxlZC4KICAg
ICBib29sIG1fdGVzdFJlcGFpbnQ7CiAgICAgYm9vbCBtX3Rlc3RSZXBhaW50U3dlZXBIb3Jpem9u
dGFsbHk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9J
bmplY3RlZEJ1bmRsZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9JbmplY3RlZEJ1bmRsZU1hYy5tbQkocmV2aXNpb24gMCkKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxl
TWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgIkluamVjdGVkQnVuZGxlLmgiCisKK25hbWVzcGFjZSBXVFIgeworCit2b2lkIEluamVjdGVk
QnVuZGxlOjppbml0aWFsaXplUGxhdGZvcm1EZWZhdWx0cygpCit7CisgICAgTlNVc2VyRGVmYXVs
dHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKKwor
ICAgIFtkZWZhdWx0cyBzZXRJbnRlZ2VyOjQgZm9yS2V5OkAiQXBwbGVBbnRpQWxpYXNpbmdUaHJl
c2hvbGQiXTsKKyAgICBbZGVmYXVsdHMgc2V0SW50ZWdlcjowIGZvcktleTpAIkFwcGxlRm9udFNt
b290aGluZyJdOworICAgIFtkZWZhdWx0cyBzZXRCb29sOk5PIGZvcktleTpAIkFwcGxlU2Nyb2xs
QW5pbWF0aW9uRW5hYmxlZCJdOworICAgIFtkZWZhdWx0cyBzZXRCb29sOk5PIGZvcktleTpAIk5T
T3ZlcmxheVNjcm9sbGVyc0VuYWJsZWQiXTsKKyAgICBbZGVmYXVsdHMgc2V0T2JqZWN0OkAiQWx3
YXlzIiBmb3JLZXk6QCJBcHBsZVNob3dTY3JvbGxCYXJzIl07Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9Jbmpl
Y3RlZEJ1bmRsZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9xdC9JbmplY3RlZEJ1bmRsZS5wcm8JKHJldmlzaW9uIDc5NTkyKQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9JbmplY3RlZEJ1bmRsZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgLi4vTGF5
b3V0VGVzdENvbnRyb2xsZXIuaCBcCiAgICAgLi4vQmluZGluZ3MvSlNXcmFwcGVyLmNwcCBcCiAg
ICAgQWN0aXZhdGVGb250c1F0LmNwcCBcCisgICAgSW5qZWN0ZWRCdW5kbGVRdC5jcHAgXAogICAg
IExheW91dFRlc3RDb250cm9sbGVyUXQuY3BwIFwKICAgICAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJ
Ui9KU0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwIFwKICAgICAkJEdFTkVSQVRFRF9TT1VSQ0VT
X0RJUi9KU0dDQ29udHJvbGxlci5jcHAgXApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9xdC9JbmplY3RlZEJ1bmRsZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3F0L0luamVjdGVkQnVuZGxlUXQuY3Bw
CShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9x
dC9JbmplY3RlZEJ1bmRsZVF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgorCituYW1lc3BhY2UgV1RSIHsK
Kwordm9pZCBJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZVBsYXRmb3JtRGVmYXVsdHMoKQorewor
fQorCit9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvd2luL0luamVjdGVkQnVuZGxlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5j
cHAJKHJldmlzaW9uIDApCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKKworbmFtZXNwYWNlIFdU
UiB7CisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGU6OmluaXRpYWxpemVQbGF0Zm9ybURlZmF1bHRzKCkK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gNzk1OTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dl
YktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDcsNiArNDcsOCBAQAogCQlCQzc5MzRBQzExOTA2NThDMDA1RUE4RTIgLyogV2ViS2l0Mi5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzc5MzRBQjExOTA2NThDMDA1RUE4RTIgLyogV2ViS2l0Mi5mcmFtZXdvcmsgKi87IH07CiAJ
CUJDNzkzNEU4MTE5MDY4NDYwMDVFQThFMiAvKiBQbGF0Zm9ybVdlYlZpZXdNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc5MzRFNzExOTA2ODQ2
MDA1RUE4RTIgLyogUGxhdGZvcm1XZWJWaWV3TWFjLm1tICovOyB9OwogCQlCQzhDNzk1QzExRDI3
ODVEMDA0NTM1QTEgLyogVGVzdENvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzhDNzk1QjExRDI3ODVEMDA0NTM1QTEgLyogVGVz
dENvbnRyb2xsZXJNYWMubW0gKi87IH07CisJCUJDOERBRDVEMTMxNUMwRUMwMEVDOTZGQyAvKiBU
ZXN0SW52b2NhdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDOERBRDVCMTMxNUMwRUMwMEVDOTZGQyAvKiBUZXN0SW52b2NhdGlvbk1hYy5t
bSAqLzsgfTsKKwkJQkM4REFEN0IxMzE2RDkxMDAwRUM5NkZDIC8qIEluamVjdGVkQnVuZGxlTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4REFE
NzcxMzE2RDdCOTAwRUM5NkZDIC8qIEluamVjdGVkQnVuZGxlTWFjLm1tICovOyB9OwogCQlCQzhG
RDhDQTEyMEU1MjdGMDBGM0U3MUEgLyogRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzhGRDhDOTEyMEU1MjdG
MDBGM0U3MUEgLyogRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgKi87IH07CiAJCUJDOEZEOEQy
MTIwRTU0NUIwMEYzRTcxQSAvKiBKU0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4RkQ4RDAxMjBFNTQ1QjAw
RjNFNzFBIC8qIEpTRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAgKi87IH07CiAJCUJDOTUyQzBE
MTFGM0I5NjUwMDMzOThCNCAvKiBKU1dyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5NTJDMEMxMUYzQjk2NTAwMzM5OEI0IC8qIEpTV3Jh
cHBlci5jcHAgKi87IH07CkBAIC0xMTMsNiArMTE1LDggQEAKIAkJQkM3OTM0REQxMTkwNjZFQzAw
NUVBOEUyIC8qIFBsYXRmb3JtV2ViVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQbGF0Zm9ybVdlYlZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM3
OTM0RTcxMTkwNjg0NjAwNUVBOEUyIC8qIFBsYXRmb3JtV2ViVmlld01hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtV2ViVmlld01hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4Qzc5NUIxMUQyNzg1RDAwNDUzNUExIC8qIFRl
c3RDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gVGVzdENvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
OERBRDVCMTMxNUMwRUMwMEVDOTZGQyAvKiBUZXN0SW52b2NhdGlvbk1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRlc3RJbnZvY2F0aW9uTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzhEQUQ3NzEzMTZEN0I5MDBFQzk2RkMgLyogSW5q
ZWN0ZWRCdW5kbGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBJbmplY3RlZEJ1bmRsZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4
RkQ4QzgxMjBFNTI3RjAwRjNFNzFBIC8qIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhGRDhDOTEyMEU1MjdGMDBGM0U3MUEgLyogRXZl
bnRTZW5kaW5nQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBFdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkM4RkQ4Q0IxMjBFNTJCMDAwRjNFNzFBIC8qIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE4LDYgKzIyMiw3IEBACiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTY1RUI4NTlGMTFFQzY3Q0MwMDM0RDMwMCAv
KiBBY3RpdmF0ZUZvbnRzLm1tICovLAorCQkJCUJDOERBRDc3MTMxNkQ3QjkwMEVDOTZGQyAvKiBJ
bmplY3RlZEJ1bmRsZU1hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI3OCw2ICsyODMsNyBAQAogCQkJCUJDNzkzM0ZGMTE4RjdD
ODQwMDVFQThFMiAvKiBtYWluLm1tICovLAogCQkJCUJDNzkzNEU3MTE5MDY4NDYwMDVFQThFMiAv
KiBQbGF0Zm9ybVdlYlZpZXdNYWMubW0gKi8sCiAJCQkJQkM4Qzc5NUIxMUQyNzg1RDAwNDUzNUEx
IC8qIFRlc3RDb250cm9sbGVyTWFjLm1tICovLAorCQkJCUJDOERBRDVCMTMxNUMwRUMwMEVDOTZG
QyAvKiBUZXN0SW52b2NhdGlvbk1hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ0MCw2ICs0NDYsNyBAQAogCQkJCUJDNzkzNDMx
MTE4RjdGMTkwMDVFQThFMiAvKiBUZXN0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzc5MzRFODExOTA2ODQ2MDA1RUE4RTIgLyogUGxhdGZvcm1XZWJWaWV3TWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNEN0QyRjgxMTkyMTI3ODAwNkRCN0VFIC8qIFRlc3RJbnZvY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDOERBRDVEMTMxNUMwRUMwMEVDOTZGQyAvKiBUZXN0
SW52b2NhdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDOEM3OTVDMTFEMjc4NUQwMDQ1
MzVBMSAvKiBUZXN0Q29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtNDU3LDYgKzQ2NCw3IEBA
CiAJCQkJQkM5NTJGMUYxMUYzQzY1MjAwMzM5OEI0IC8qIEpTTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNEU0REIxMjBFMDJEMDAwODI2QzBDIC8qIEdDQ29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzE0RTRFQTEyMEUwM0Q4MDA4MjZDMEMg
LyogSlNHQ0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM4REFEN0IxMzE2RDkx
MDAwRUM5NkZDIC8qIEluamVjdGVkQnVuZGxlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4
RkQ4Q0ExMjBFNTI3RjAwRjNFNzFBIC8qIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM4RkQ4RDIxMjBFNTQ1QjAwRjNFNzFBIC8qIEpTRXZlbnRTZW5kaW5n
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMENFNzIwQjEyNDdDOTMzMDBCQzBF
QzQgLyogTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0JKHJl
dmlzaW9uIDc5NTkyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJW
aWV3TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIFBsYXRmb3JtV2ViVmll
dzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGUKIAogICAgIE5TUmVjdCB3aW5kb3dSZWN0ID0gTlNP
ZmZzZXRSZWN0KHJlY3QsIC0xMDAwMCwgW1tbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRl
eDowXSBmcmFtZV0uc2l6ZS5oZWlnaHQgLSByZWN0LnNpemUuaGVpZ2h0ICsgMTAwMDApOwogICAg
IG1fd2luZG93ID0gW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3aW5kb3dS
ZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3Rv
cmVCdWZmZXJlZCBkZWZlcjpZRVNdOwotICAgIFttX3dpbmRvdyBzZXRDb2xvclNwYWNlOltbTlNT
Y3JlZW4gbWFpblNjcmVlbl0gY29sb3JTcGFjZV1dOworICAgIFttX3dpbmRvdyBzZXRDb2xvclNw
YWNlOltOU0NvbG9yU3BhY2UgZ2VuZXJpY1JHQkNvbG9yU3BhY2VdXTsKICAgICBbW21fd2luZG93
IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3Om1fdmlld107CiAgICAgW21fd2luZG93IG9yZGVyQmFj
azpuaWxdOwogICAgIFttX3dpbmRvdyBzZXRBdXRvZGlzcGxheTpOT107CkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0SW52b2NhdGlvbk1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0SW52b2NhdGlvbk1hYy5tbQkocmV2aXNpb24g
MCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RJbnZvY2F0aW9uTWFjLm1tCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJUZXN0
SW52b2NhdGlvbi5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisjaW5jbHVkZSAi
VGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlIDxJbWFnZUlPL0NHSW1hZ2VEZXN0aW5hdGlvbi5o
PgorI2luY2x1ZGUgPExhdW5jaFNlcnZpY2VzL1VUQ29yZVR5cGVzLmg+CisjaW5jbHVkZSA8V2Vi
S2l0Mi9XS1BhZ2UuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKyNkZWZpbmUgQ09N
TU9OX0RJR0VTVF9GT1JfT1BFTlNTTAorI2luY2x1ZGUgPENvbW1vbkNyeXB0by9Db21tb25EaWdl
c3QuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK3N0YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ0dD
b250ZXh0RnJvbVBsYXRmb3JtVmlldyhQbGF0Zm9ybVdlYlZpZXcqIHBsYXRmb3JtV2ViVmlldykK
K3sKKyAgICBXS1ZpZXcqIHZpZXcgPSBwbGF0Zm9ybVdlYlZpZXctPnBsYXRmb3JtVmlldygpOwor
ICAgIFt2aWV3IGRpc3BsYXldOworCisgICAgTlNTaXplIHdlYlZpZXdTaXplID0gW3ZpZXcgZnJh
bWVdLnNpemU7CisgICAgc2l6ZV90IHBpeGVsc1dpZGUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHdl
YlZpZXdTaXplLndpZHRoKTsKKyAgICBzaXplX3QgcGl4ZWxzSGlnaCA9IHN0YXRpY19jYXN0PHNp
emVfdD4od2ViVmlld1NpemUuaGVpZ2h0KTsKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSAoNCAqIHBp
eGVsc1dpZGUgKyA2MykgJiB+NjM7CisgICAgdm9pZCogYnVmZmVyID0gY2FsbG9jKHBpeGVsc0hp
Z2gsIHJvd0J5dGVzKTsKKworICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xv
clNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZUdlbmVyaWNSR0IpOworICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJ1ZmZlciwgcGl4ZWxzV2lk
ZSwgcGl4ZWxzSGlnaCwgOCwgcm93Qnl0ZXMsIGNvbG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpOworICAgIENHQ29sb3JT
cGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7CisgICAgCisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IENH
V2luZG93TGlzdENyZWF0ZUltYWdlKENHUmVjdE51bGwsIGtDR1dpbmRvd0xpc3RPcHRpb25JbmNs
dWRpbmdXaW5kb3csIFtbdmlldyB3aW5kb3ddIHdpbmRvd051bWJlcl0sIGtDR1dpbmRvd0ltYWdl
Qm91bmRzSWdub3JlRnJhbWluZyB8IGtDR1dpbmRvd0ltYWdlU2hvdWxkQmVPcGFxdWUpOworICAg
IENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBDR1JlY3RNYWtlKDAsIDAsIENHSW1hZ2VHZXRX
aWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKSwgaW1hZ2UpOworICAgIENHSW1h
Z2VSZWxlYXNlKGltYWdlKTsKKworICAgIHJldHVybiBjb250ZXh0OworfQorCit2b2lkIGNvbXB1
dGVNRDVIYXNoU3RyaW5nRm9yQ29udGV4dChDR0NvbnRleHRSZWYgYml0bWFwQ29udGV4dCwgY2hh
ciBoYXNoU3RyaW5nWzMzXSkKK3sKKyAgICBBU1NFUlQoQ0dCaXRtYXBDb250ZXh0R2V0Qml0c1Bl
clBpeGVsKGJpdG1hcENvbnRleHQpID09IDMyKTsgLy8gSW1hZ2VEaWZmIGFzc3VtZXMgMzIgYml0
IFJHQkEsIHdlIG11c3QgYXMgd2VsbC4KKyAgICBzaXplX3QgcGl4ZWxzSGlnaCA9IENHQml0bWFw
Q29udGV4dEdldEhlaWdodChiaXRtYXBDb250ZXh0KTsKKyAgICBzaXplX3QgcGl4ZWxzV2lkZSA9
IENHQml0bWFwQ29udGV4dEdldFdpZHRoKGJpdG1hcENvbnRleHQpOworICAgIHNpemVfdCBieXRl
c1BlclJvdyA9IENHQml0bWFwQ29udGV4dEdldEJ5dGVzUGVyUm93KGJpdG1hcENvbnRleHQpOwor
ICAgIAorICAgIC8vIFdlIG5lZWQgdG8gc3dhcCB0aGUgYnl0ZXMgdG8gZW5zdXJlIGNvbnNpc3Rl
bnQgaGFzaGVzIGluZGVwZW5kZW50bHkgb2YgZW5kaWFubmVzcworICAgIE1ENV9DVFggbWQ1Q29u
dGV4dDsKKyAgICBNRDVfSW5pdCgmbWQ1Q29udGV4dCk7CisgICAgdW5zaWduZWQgY2hhciogYml0
bWFwRGF0YSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihDR0JpdG1hcENvbnRleHRHZXRE
YXRhKGJpdG1hcENvbnRleHQpKTsKKyAgICBpZiAoKENHQml0bWFwQ29udGV4dEdldEJpdG1hcElu
Zm8oYml0bWFwQ29udGV4dCkgJiBrQ0dCaXRtYXBCeXRlT3JkZXJNYXNrKSA9PSBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkJpZykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBp
eGVsc0hpZ2g7IHJvdysrKSB7CisgICAgICAgICAgICB1aW50MzJfdCBidWZmZXJbcGl4ZWxzV2lk
ZV07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHBpeGVs
c1dpZGU7IGNvbHVtbisrKQorICAgICAgICAgICAgICAgIGJ1ZmZlcltjb2x1bW5dID0gT1NSZWFk
TGl0dGxlSW50MzIoYml0bWFwRGF0YSwgNCAqIGNvbHVtbik7CisgICAgICAgICAgICBNRDVfVXBk
YXRlKCZtZDVDb250ZXh0LCBidWZmZXIsIDQgKiBwaXhlbHNXaWRlKTsKKyAgICAgICAgICAgIGJp
dG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IHBpeGVsc0hpZ2g7IHJvdysrKSB7CisgICAg
ICAgICAgICBNRDVfVXBkYXRlKCZtZDVDb250ZXh0LCBiaXRtYXBEYXRhLCA0ICogcGl4ZWxzV2lk
ZSk7CisgICAgICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVzUGVyUm93OworICAgICAgICB9Cisg
ICAgfQorCisgICAgdW5zaWduZWQgY2hhciBoYXNoWzE2XTsKKyAgICBNRDVfRmluYWwoaGFzaCwg
Jm1kNUNvbnRleHQpOworICAgIAorICAgIGhhc2hTdHJpbmdbMF0gPSAnXDAnOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICAgICAgc25wcmludGYoaGFzaFN0cmluZywgMzMs
ICIlcyUwMngiLCBoYXNoU3RyaW5nLCBoYXNoW2ldKTsKK30KKworc3RhdGljIHZvaWQgZHVtcEJp
dG1hcChDR0NvbnRleHRSZWYgYml0bWFwQ29udGV4dCkKK3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2UoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29u
dGV4dCkpOworICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBpbWFnZURhdGEoQWRvcHRD
RiwgQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0
aW5hdGlvblJlZj4gaW1hZ2VEZXN0KEFkb3B0Q0YsIENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdp
dGhEYXRhKGltYWdlRGF0YS5nZXQoKSwga1VUVHlwZVBORywgMSwgMCkpOworICAgIENHSW1hZ2VE
ZXN0aW5hdGlvbkFkZEltYWdlKGltYWdlRGVzdC5nZXQoKSwgaW1hZ2UuZ2V0KCksIDApOworICAg
IENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGltYWdlRGVzdC5nZXQoKSk7CisKKyAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihpbWFnZURhdGEuZ2V0KCkp
OworICAgIGNvbnN0IHNpemVfdCBkYXRhTGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGltYWdlRGF0
YS5nZXQoKSk7CisKKworICAgIGZwcmludGYoc3Rkb3V0LCAiQ29udGVudC1UeXBlOiAlc1xuIiwg
ImltYWdlL3BuZyIpOworICAgIGZwcmludGYoc3Rkb3V0LCAiQ29udGVudC1MZW5ndGg6ICVsdVxu
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oZGF0YUxlbmd0aCkpOworICAgIAorICAgIGNv
bnN0IHNpemVfdCBieXRlc1RvV3JpdGVJbk9uZUNodW5rID0gMSA8PCAxNTsKKyAgICBzaXplX3Qg
ZGF0YVJlbWFpbmluZ1RvV3JpdGUgPSBkYXRhTGVuZ3RoOworICAgIHdoaWxlIChkYXRhUmVtYWlu
aW5nVG9Xcml0ZSkgeworICAgICAgICBzaXplX3QgYnl0ZXNUb1dyaXRlSW5UaGlzQ2h1bmsgPSBz
dGQ6Om1pbihkYXRhUmVtYWluaW5nVG9Xcml0ZSwgYnl0ZXNUb1dyaXRlSW5PbmVDaHVuayk7Cisg
ICAgICAgIHNpemVfdCBieXRlc1dyaXR0ZW4gPSBmd3JpdGUoZGF0YSwgMSwgYnl0ZXNUb1dyaXRl
SW5UaGlzQ2h1bmssIHN0ZG91dCk7CisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gIT0gYnl0ZXNU
b1dyaXRlSW5UaGlzQ2h1bmspCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGF0YVJlbWFp
bmluZ1RvV3JpdGUgLT0gYnl0ZXNXcml0dGVuOworICAgICAgICBkYXRhICs9IGJ5dGVzV3JpdHRl
bjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZvcmNlUmVwYWludEZ1bmN0aW9uKFdLRXJyb3JS
ZWYsIHZvaWQqIGNvbnRleHQpCit7CisgICAgKnN0YXRpY19jYXN0PGJvb2wqPihjb250ZXh0KSA9
IHRydWU7Cit9CisKK3ZvaWQgVGVzdEludm9jYXRpb246OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0
aEV4cGVjdGVkKCkKK3sKKyAgICBXS1BhZ2VGb3JjZVJlcGFpbnQoVGVzdENvbnRyb2xsZXI6OnNo
YXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgJm1fZ290UmVwYWludCwgZm9yY2VSZXBhaW50
RnVuY3Rpb24pOworICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5ydW5VbnRpbChtX2dvdFJl
cGFpbnQsIFRlc3RDb250cm9sbGVyOjpMb25nVGltZW91dCk7CisgICAgCisgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBjcmVhdGVDR0NvbnRleHRGcm9tUGxhdGZvcm1WaWV3KFRlc3RDb250cm9s
bGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpKTsKKyAgICAKKyAgICAvLyBDb21wdXRlIHRoZSBo
YXNoIG9mIHRoZSBiaXRtYXAgY29udGV4dCBwaXhlbHMKKyAgICBjaGFyIGFjdHVhbEhhc2hbMzNd
OworICAgIGNvbXB1dGVNRDVIYXNoU3RyaW5nRm9yQ29udGV4dChjb250ZXh0LCBhY3R1YWxIYXNo
KTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIlxuQWN0dWFsSGFzaDogJXNcbiIsIGFjdHVhbEhhc2gp
OworCisgICAgLy8gQ2hlY2sgdGhlIGNvbXB1dGVkIGhhc2ggYWdhaW5zdCB0aGUgZXhwZWN0ZWQg
b25lIGFuZCBkdW1wIGltYWdlIG9uIG1pc21hdGNoCisgICAgYm9vbCBoYXNoZXNNYXRjaCA9IGZh
bHNlOworICAgIGlmIChtX2V4cGVjdGVkUGl4ZWxIYXNoLmxlbmd0aCgpID4gMCkgeworICAgICAg
ICBBU1NFUlQobV9leHBlY3RlZFBpeGVsSGFzaC5sZW5ndGgoKSA9PSAzMik7CisKKyAgICAgICAg
ZnByaW50ZihzdGRvdXQsICJcbkV4cGVjdGVkSGFzaDogJXNcbiIsIG1fZXhwZWN0ZWRQaXhlbEhh
c2guY19zdHIoKSk7CisKKyAgICAgICAgLy8gRklYTUU6IERvIGNhc2UgaW5zZW5zaXRpdmUgY29t
cGFyZS4KKyAgICAgICAgaWYgKG1fZXhwZWN0ZWRQaXhlbEhhc2ggPT0gYWN0dWFsSGFzaCkKKyAg
ICAgICAgICAgIGhhc2hlc01hdGNoID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWhhc2hlc01h
dGNoKQorICAgICAgICBkdW1wQml0bWFwKGNvbnRleHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvV2ViS2l0VGVzdFJ1bm5lci5wcm8K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9XZWJLaXRUZXN0UnVubmVy
LnBybwkocmV2aXNpb24gNzk1OTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1dlYktp
dFRlc3RSdW5uZXIucHJvCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIFNPVVJDRVMg
PSBcCiAgICAgbWFpbi5jcHAgXAogICAgIFBsYXRmb3JtV2ViVmlld1F0LmNwcCBcCiAgICAgVGVz
dENvbnRyb2xsZXJRdC5jcHAgXAorICAgIFRlc3RJbnZvY2F0aW9uUXQuY3BwIFwKICAgICAkJEJB
U0VESVIvVGVzdENvbnRyb2xsZXIuY3BwIFwKICAgICAkJEJBU0VESVIvVGVzdEludm9jYXRpb24u
Y3BwIFwKIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vSW5qZWN0ZWRCdW5kbGUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL0luamVjdGVk
QnVuZGxlLnZjcHJvagkocmV2aXNpb24gNzk1OTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L3dpbi9JbmplY3RlZEJ1bmRsZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw2ICs0Mzks
MTAgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmpl
Y3RlZEJ1bmRsZVx3aW5cSW5qZWN0ZWRCdW5kbGVXaW4uY3BwIgorCQkJPgorCQk8L0ZpbGU+CisJ
CTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluamVjdGVkQnVuZGxlXEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXIuY3BwIgogCQkJPgogCQk8L0ZpbGU+CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvagkocmV2aXNpb24gNzk1OTIp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtNDAxLDYgKzQwMSwxMCBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLlxU
ZXN0Q29udHJvbGxlcldpbi5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cVGVzdEludm9jYXRpb25XaW4uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4K
IAkJPC9GaWx0ZXI+CiAJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtV2ViVmll
dy5oIgo=
</data>
<flag name="review"
          id="75553"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>