<?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>36489</bug_id>
          
          <creation_ts>2010-03-23 05:50:40 -0700</creation_ts>
          <short_desc>[DRT/Chromium] Add TestNavigationController and TestWebWorker</short_desc>
          <delta_ts>2010-03-23 22:56:08 -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>Other</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>35902</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>fishd</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>203008</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-03-23 05:50:40 -0700</bug_when>
    <thetext>[DRT/Chromium] Add TestNavigationController and TestWebWorker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203013</commentid>
    <comment_count>1</comment_count>
      <attachid>51415</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-03-23 05:56:11 -0700</bug_when>
    <thetext>Created attachment 51415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203082</commentid>
    <comment_count>2</comment_count>
      <attachid>51415</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-03-23 09:46:02 -0700</bug_when>
    <thetext>Comment on attachment 51415
Patch

Why do we need TestNavigationController in its full glory in DRT? Most of its work is focused around providing a simple browser, which we don&apos;t need here.

&gt; +
&gt; +// ----------------------------------------------------------------------------
&gt; +// TestNavigationEntry
&gt; +
&gt; +TestNavigationEntry::TestNavigationEntry()
&gt; +    : m_pageID(-1) {}
&gt; +
&gt; +TestNavigationEntry::TestNavigationEntry(
&gt; +    int pageID, const GURL&amp; url, const WebString&amp; title, const WebString&amp; targetFrame)

Can we use WebURL here -- or at least put a FIXME?

&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#ifndef TestNavigationController_h
&gt; +#define TestNavigationController_h
&gt; +
&gt; +#include &quot;base/basictypes.h&quot;
&gt; +#include &quot;base/linked_ptr.h&quot;
&gt; +#include &quot;base/ref_counted.h&quot;

It would be good to use WTF types here, but a FIXME should suffice for now.

&gt; +#define TestWebWorker_h
&gt; +
&gt; +#include &quot;base/basictypes.h&quot;

No need for this here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203314</commentid>
    <comment_count>3</comment_count>
      <attachid>51476</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-03-23 20:47:05 -0700</bug_when>
    <thetext>Created attachment 51476
Proposed patch (rev.2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203315</commentid>
    <comment_count>4</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-03-23 20:50:39 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 51415 [details])
&gt; Why do we need TestNavigationController in its full glory in DRT? Most of its
&gt; work is focused around providing a simple browser, which we don&apos;t need here.

We need it to produce the output of layoutTestControler.dumpBackForwardList.

&gt; &gt; +TestNavigationEntry::TestNavigationEntry(
&gt; &gt; +    int pageID, const GURL&amp; url, const WebString&amp; title, const WebString&amp; targetFrame)
&gt; 
&gt; Can we use WebURL here -- or at least put a FIXME?

Replaced GURL with WebURL.

&gt; &gt; +#include &quot;base/basictypes.h&quot;
&gt; &gt; +#include &quot;base/linked_ptr.h&quot;
&gt; &gt; +#include &quot;base/ref_counted.h&quot;
&gt; 
&gt; It would be good to use WTF types here, but a FIXME should suffice for now.

Removed ref_counted.h, which was not used in this file.
I think no WTF alternative for linked_ptr.h.

&gt; &gt; +#define TestWebWorker_h
&gt; &gt; +
&gt; &gt; +#include &quot;base/basictypes.h&quot;
&gt; 
&gt; No need for this here.

Right. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203318</commentid>
    <comment_count>5</comment_count>
      <attachid>51476</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-03-23 21:04:41 -0700</bug_when>
    <thetext>Comment on attachment 51476
Proposed patch (rev.2)

ok. I don&apos;t think we&apos;ll need some of the methods TestNavigationController provides, but we can refactor this later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203330</commentid>
    <comment_count>6</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-03-23 22:56:08 -0700</bug_when>
    <thetext>Landed as r56434.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51415</attachid>
            <date>2010-03-23 05:56:11 -0700</date>
            <delta_ts>2010-03-23 20:46:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36489-20100323215608.patch</filename>
            <type>text/plain</type>
            <size>22718</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAyMzQ2YTBmLi5mZGZjYWY1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDMt
MjMgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtEUlQvQ2hyb21pdW1dIEFkZCBUZXN0TmF2
aWdhdGlvbkNvbnRyb2xsZXIgYW5kIFRlc3RXZWJXb3JrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NDg5CisKKyAgICAgICAgQWRkIFRlc3ROYXZp
Z2F0aW9uQ29udHJvbGxlciBhbmQgVGVzdFdlYldvcmtlciBjbGFzc2VzLCB3aGljaCBhcmUKKyAg
ICAgICAgZ29pbmcgdG8gYmUgdXNlZCBieSBEdW1wUmVuZGVyVHJlZSBDaHJvbWl1bSBwb3J0LiBU
aGVzZSBmaWxlcyBhcmUKKyAgICAgICAgYmFzZWQgb246CisgICAgICAgIC0gc3JjL3dlYmtpdC90
b29scy90ZXN0X3NoZWxsL3Rlc3RfbmF2aWdhdGlvbl9jb250cm9sbGVyLntjYyxofQorICAgICAg
ICAtIHNyYy93ZWJraXQvdG9vbHMvdGVzdF9zaGVsbC90ZXN0X3dlYl93b3JrZXIuaAorICAgICAg
ICBvZiBDaHJvbWl1bSByZXYuNDA0OTIuCisKKyAgICAgICAgVGVzdE5hdmlnYXRpb25Db250cm9s
bGVyIGhhcyBub24tc3R5bGUgY2hhbmdlcy4KKyAgICAgICAgLSBDaGFuZ2UgQ29udGVudFN0YXRl
IHR5cGU6IGJpbmFyeSBzdHJpbmcgLT4gV2ViSGlzdG9yeUl0ZW0KKyAgICAgICAgLSBSZW1vdmUg
VGVzdFNoZWxsIGRlcGVuZGVuY3kgYnkgaW50cm9kdWNpbmcgTmF2aWdhdGlvbkhvc3QgaW50ZXJm
YWNlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdE5hdmlnYXRpb25D
b250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RXZWJXb3JrZXIuaDogQWRkZWQuCisKIDIwMTAtMDMtMjIgIENzYWJh
IE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhMTdlNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5jcHAK
QEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdE5hdmln
YXRpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJUZXN0U2hlbGwuaCIKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGVzdE5hdmlnYXRpb25FbnRy
eQorCitUZXN0TmF2aWdhdGlvbkVudHJ5OjpUZXN0TmF2aWdhdGlvbkVudHJ5KCkKKyAgICA6IG1f
cGFnZUlEKC0xKSB7fQorCitUZXN0TmF2aWdhdGlvbkVudHJ5OjpUZXN0TmF2aWdhdGlvbkVudHJ5
KAorICAgIGludCBwYWdlSUQsIGNvbnN0IEdVUkwmIHVybCwgY29uc3QgV2ViU3RyaW5nJiB0aXRs
ZSwgY29uc3QgV2ViU3RyaW5nJiB0YXJnZXRGcmFtZSkKKyAgICA6IG1fcGFnZUlEKHBhZ2VJRCkK
KyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fdGl0bGUodGl0bGUpCisgICAgLCBtX3RhcmdldEZy
YW1lKHRhcmdldEZyYW1lKSB7fQorCitUZXN0TmF2aWdhdGlvbkVudHJ5Ojp+VGVzdE5hdmlnYXRp
b25FbnRyeSgpIHt9CisKK3ZvaWQgVGVzdE5hdmlnYXRpb25FbnRyeTo6c2V0Q29udGVudFN0YXRl
KGNvbnN0IFdlYkhpc3RvcnlJdGVtJiBzdGF0ZSkKK3sKKyAgICBtX3N0YXRlID0gc3RhdGU7Cit9
CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcgor
CitUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6OlRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcihOYXZp
Z2F0aW9uSG9zdCogaG9zdCkKKyAgICA6IG1fcGVuZGluZ0VudHJ5KDApCisgICAgLCBtX2xhc3RD
b21taXR0ZWRFbnRyeUluZGV4KC0xKQorICAgICwgbV9wZW5kaW5nRW50cnlJbmRleCgtMSkKKyAg
ICAsIG1faG9zdChob3N0KQorICAgICwgbV9tYXhQYWdlSUQoLTEpIHt9CisKK1Rlc3ROYXZpZ2F0
aW9uQ29udHJvbGxlcjo6flRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcigpCit7CisgICAgZGlzY2Fy
ZFBlbmRpbmdFbnRyeSgpOworfQorCit2b2lkIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6cmVz
ZXQoKQoreworICAgIG1fZW50cmllcy5jbGVhcigpOworICAgIGRpc2NhcmRQZW5kaW5nRW50cnko
KTsKKworICAgIG1fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXggPSAtMTsKK30KKwordm9pZCBUZXN0
TmF2aWdhdGlvbkNvbnRyb2xsZXI6OnJlbG9hZCgpCit7CisgICAgLy8gQmFzZSB0aGUgbmF2aWdh
dGlvbiBvbiB3aGVyZSB3ZSBhcmUgbm93Li4uCisgICAgaW50IGN1cnJlbnRJbmRleCA9IGN1cnJl
bnRFbnRyeUluZGV4KCk7CisKKyAgICAvLyBJZiB3ZSBhcmUgbm8gd2hlcmUsIHRoZW4gd2UgY2Fu
J3QgcmVsb2FkLiAgVE9ETyhkYXJpbik6IFdlIHNob3VsZCBhZGQgYQorICAgIC8vIENhblJlbG9h
ZCBtZXRob2QuCisgICAgaWYgKGN1cnJlbnRJbmRleCA9PSAtMSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZGlzY2FyZFBlbmRpbmdFbnRyeSgpOworCisgICAgbV9wZW5kaW5nRW50cnlJbmRleCA9
IGN1cnJlbnRJbmRleDsKKyAgICBuYXZpZ2F0ZVRvUGVuZGluZ0VudHJ5KHRydWUpOworfQorCit2
b2lkIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6Z29Ub09mZnNldChpbnQgb2Zmc2V0KQorewor
ICAgIGludCBpbmRleCA9IG1fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXggKyBvZmZzZXQ7CisgICAg
aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBlbnRyeUNvdW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGdvVG9JbmRleChpbmRleCk7Cit9CisKK3ZvaWQgVGVzdE5hdmlnYXRpb25Db250cm9s
bGVyOjpnb1RvSW5kZXgoaW50IGluZGV4KQoreworICAgIEFTU0VSVChpbmRleCA+PSAwKTsKKyAg
ICBBU1NFUlQoaW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KG1fZW50cmllcy5zaXplKCkpKTsKKwor
ICAgIGRpc2NhcmRQZW5kaW5nRW50cnkoKTsKKworICAgIG1fcGVuZGluZ0VudHJ5SW5kZXggPSBp
bmRleDsKKyAgICBuYXZpZ2F0ZVRvUGVuZGluZ0VudHJ5KGZhbHNlKTsKK30KKwordm9pZCBUZXN0
TmF2aWdhdGlvbkNvbnRyb2xsZXI6OmxvYWRFbnRyeShUZXN0TmF2aWdhdGlvbkVudHJ5KiBlbnRy
eSkKK3sKKyAgICAvLyBXaGVuIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZSwgd2UgZG9uJ3Qga25v
dyBmb3Igc3VyZSBpZiB3ZSB3aWxsIGFjdHVhbGx5CisgICAgLy8gZW5kIHVwIGxlYXZpbmcgdGhl
IGN1cnJlbnQgcGFnZS4gIFRoZSBuZXcgcGFnZSBsb2FkIGNvdWxkIGZvciBleGFtcGxlCisgICAg
Ly8gcmVzdWx0IGluIGEgZG93bmxvYWQgb3IgYSAnbm8gY29udGVudCcgcmVzcG9uc2UgKGUuZy4s
IGEgbWFpbHRvOiBVUkwpLgorICAgIGRpc2NhcmRQZW5kaW5nRW50cnkoKTsKKyAgICBtX3BlbmRp
bmdFbnRyeSA9IGVudHJ5OworICAgIG5hdmlnYXRlVG9QZW5kaW5nRW50cnkoZmFsc2UpOworfQor
CisKK1Rlc3ROYXZpZ2F0aW9uRW50cnkqIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6bGFzdENv
bW1pdHRlZEVudHJ5KCkgY29uc3QKK3sKKyAgICBpZiAobV9sYXN0Q29tbWl0dGVkRW50cnlJbmRl
eCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZW50cmllc1ttX2xhc3RD
b21taXR0ZWRFbnRyeUluZGV4XS5nZXQoKTsKK30KKworVGVzdE5hdmlnYXRpb25FbnRyeSogVGVz
dE5hdmlnYXRpb25Db250cm9sbGVyOjphY3RpdmVFbnRyeSgpIGNvbnN0Cit7CisgICAgVGVzdE5h
dmlnYXRpb25FbnRyeSogZW50cnkgPSBtX3BlbmRpbmdFbnRyeTsKKyAgICBpZiAoIWVudHJ5KQor
ICAgICAgICBlbnRyeSA9IGxhc3RDb21taXR0ZWRFbnRyeSgpOworICAgIHJldHVybiBlbnRyeTsK
K30KKworaW50IFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6Y3VycmVudEVudHJ5SW5kZXgoKSBj
b25zdAoreworICAgIGlmIChtX3BlbmRpbmdFbnRyeUluZGV4ICE9IC0xKQorICAgICAgICByZXR1
cm4gbV9wZW5kaW5nRW50cnlJbmRleDsKKyAgICByZXR1cm4gbV9sYXN0Q29tbWl0dGVkRW50cnlJ
bmRleDsKK30KKworCitUZXN0TmF2aWdhdGlvbkVudHJ5KiBUZXN0TmF2aWdhdGlvbkNvbnRyb2xs
ZXI6OmVudHJ5QXRJbmRleChpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKGluZGV4IDwgMCB8
fCBpbmRleCA+PSBlbnRyeUNvdW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBt
X2VudHJpZXNbaW5kZXhdLmdldCgpOworfQorCitUZXN0TmF2aWdhdGlvbkVudHJ5KiBUZXN0TmF2
aWdhdGlvbkNvbnRyb2xsZXI6OmVudHJ5V2l0aFBhZ2VJRChpbnQzMl90IHBhZ2VJRCkgY29uc3QK
K3sKKyAgICBpbnQgaW5kZXggPSBlbnRyeUluZGV4V2l0aFBhZ2VJRChwYWdlSUQpOworICAgIHJl
dHVybiAoaW5kZXggIT0gLTEpID8gbV9lbnRyaWVzW2luZGV4XS5nZXQoKSA6IDA7Cit9CisKK3Zv
aWQgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyOjpkaWROYXZpZ2F0ZVRvRW50cnkoVGVzdE5hdmln
YXRpb25FbnRyeSogZW50cnkpCit7CisgICAgLy8gSWYgdGhlIGVudHJ5IGlzIHRoYXQgb2YgYSBw
YWdlIHdpdGggUGFnZUlEIGxhcmdlciB0aGFuIGFueSB0aGlzIFRhYiBoYXMKKyAgICAvLyBzZWVu
IGJlZm9yZSwgdGhlbiBjb25zaWRlciBpdCBhIG5ldyBuYXZpZ2F0aW9uLgorICAgIGlmIChlbnRy
eS0+cGFnZUlEKCkgPiBtYXhQYWdlSUQoKSkgeworICAgICAgICBpbnNlcnRFbnRyeShlbnRyeSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UsIHdlIGp1c3QgbmVl
ZCB0byB1cGRhdGUgYW4gZXhpc3RpbmcgZW50cnkgd2l0aCBtYXRjaGluZyBQYWdlSUQuCisgICAg
Ly8gSWYgdGhlIGV4aXN0aW5nIGVudHJ5IGNvcnJlc3BvbmRzIHRvIHRoZSBlbnRyeSB3aGljaCBp
cyBwZW5kaW5nLCB0aGVuIHdlCisgICAgLy8gbXVzdCB1cGRhdGUgdGhlIGN1cnJlbnQgZW50cnkg
aW5kZXggYWNjb3JkaW5nbHkuICBXaGVuIG5hdmlnYXRpbmcgdG8gdGhlCisgICAgLy8gc2FtZSBV
UkwsIGEgbmV3IFBhZ2VJRCBpcyBub3QgY3JlYXRlZC4KKworICAgIGludCBleGlzdGluZ0VudHJ5
SW5kZXggPSBlbnRyeUluZGV4V2l0aFBhZ2VJRChlbnRyeS0+cGFnZUlEKCkpOworICAgIFRlc3RO
YXZpZ2F0aW9uRW50cnkqIGV4aXN0aW5nRW50cnkgPSAoZXhpc3RpbmdFbnRyeUluZGV4ICE9IC0x
KSA/CisgICAgICAgIG1fZW50cmllc1tleGlzdGluZ0VudHJ5SW5kZXhdLmdldCgpIDogMDsKKyAg
ICBpZiAoIWV4aXN0aW5nRW50cnkpIHsKKyAgICAgICAgLy8gTm8gZXhpc3RpbmcgZW50cnksIHRo
ZW4gc2ltcGx5IGlnbm9yZSB0aGlzIG5hdmlnYXRpb24hCisgICAgfSBlbHNlIGlmIChleGlzdGlu
Z0VudHJ5ID09IG1fcGVuZGluZ0VudHJ5KSB7CisgICAgICAgIC8vIFRoZSBnaXZlbiBlbnRyeSBt
aWdodCBwcm92aWRlIGEgbmV3IFVSTC4uLiBlLmcuLCBuYXZpZ2F0aW5nIGJhY2sgdG8gYQorICAg
ICAgICAvLyBwYWdlIGluIHNlc3Npb24gaGlzdG9yeSBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIGEg
bmV3IGNsaWVudCByZWRpcmVjdC4KKyAgICAgICAgZXhpc3RpbmdFbnRyeS0+c2V0VVJMKGVudHJ5
LT5VUkwoKSk7CisgICAgICAgIGV4aXN0aW5nRW50cnktPnNldENvbnRlbnRTdGF0ZShlbnRyeS0+
Y29udGVudFN0YXRlKCkpOworICAgICAgICBtX2xhc3RDb21taXR0ZWRFbnRyeUluZGV4ID0gbV9w
ZW5kaW5nRW50cnlJbmRleDsKKyAgICAgICAgbV9wZW5kaW5nRW50cnlJbmRleCA9IC0xOworICAg
ICAgICBtX3BlbmRpbmdFbnRyeSA9IDA7CisgICAgfSBlbHNlIGlmIChtX3BlbmRpbmdFbnRyeSAm
JiBtX3BlbmRpbmdFbnRyeS0+cGFnZUlEKCkgPT0gLTEKKyAgICAgICAgICAgICAgICYmIG1fcGVu
ZGluZ0VudHJ5LT5VUkwoKSA9PSBleGlzdGluZ0VudHJ5LT5VUkwoKSkgeworICAgICAgICAvLyBO
b3QgYSBuZXcgbmF2aWdhdGlvbgorICAgICAgICBkaXNjYXJkUGVuZGluZ0VudHJ5KCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gVGhlIGdpdmVuIGVudHJ5IG1pZ2h0IHByb3ZpZGUgYSBuZXcg
VVJMLi4uIGUuZy4sIG5hdmlnYXRpbmcgdG8gYSBwYWdlCisgICAgICAgIC8vIG1pZ2h0IHJlc3Vs
dCBpbiBhIGNsaWVudCByZWRpcmVjdCwgd2hpY2ggc2hvdWxkIG92ZXJyaWRlIHRoZSBVUkwgb2Yg
dGhlCisgICAgICAgIC8vIGV4aXN0aW5nIGVudHJ5LgorICAgICAgICBleGlzdGluZ0VudHJ5LT5z
ZXRVUkwoZW50cnktPlVSTCgpKTsKKyAgICAgICAgZXhpc3RpbmdFbnRyeS0+c2V0Q29udGVudFN0
YXRlKGVudHJ5LT5jb250ZW50U3RhdGUoKSk7CisKKyAgICAgICAgLy8gVGhlIG5hdmlnYXRpb24g
Y291bGQgaGF2ZSBiZWVuIGlzc3VlZCBieSB0aGUgcmVuZGVyZXIsIHNvIGJlIHN1cmUgdGhhdAor
ICAgICAgICAvLyB3ZSB1cGRhdGUgb3VyIGN1cnJlbnQgaW5kZXguCisgICAgICAgIG1fbGFzdENv
bW1pdHRlZEVudHJ5SW5kZXggPSBleGlzdGluZ0VudHJ5SW5kZXg7CisgICAgfQorCisgICAgZGVs
ZXRlIGVudHJ5OworICAgIHVwZGF0ZU1heFBhZ2VJRCgpOworfQorCit2b2lkIFRlc3ROYXZpZ2F0
aW9uQ29udHJvbGxlcjo6ZGlzY2FyZFBlbmRpbmdFbnRyeSgpCit7CisgICAgaWYgKG1fcGVuZGlu
Z0VudHJ5SW5kZXggPT0gLTEpCisgICAgICAgIGRlbGV0ZSBtX3BlbmRpbmdFbnRyeTsKKyAgICBt
X3BlbmRpbmdFbnRyeSA9IDA7CisgICAgbV9wZW5kaW5nRW50cnlJbmRleCA9IC0xOworfQorCit2
b2lkIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6aW5zZXJ0RW50cnkoVGVzdE5hdmlnYXRpb25F
bnRyeSogZW50cnkpCit7CisgICAgZGlzY2FyZFBlbmRpbmdFbnRyeSgpOworCisgICAgLy8gUHJ1
bmUgYW55IGVudHJ5IHdoaWNoIGFyZSBpbiBmcm9udCBvZiB0aGUgY3VycmVudCBlbnRyeQorICAg
IGludCBjdXJyZW50U2l6ZSA9IHN0YXRpY19jYXN0PGludD4obV9lbnRyaWVzLnNpemUoKSk7Cisg
ICAgaWYgKGN1cnJlbnRTaXplID4gMCkgeworICAgICAgICB3aGlsZSAobV9sYXN0Q29tbWl0dGVk
RW50cnlJbmRleCA8IChjdXJyZW50U2l6ZSAtIDEpKSB7CisgICAgICAgICAgICBtX2VudHJpZXMu
cmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgY3VycmVudFNpemUtLTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fZW50cmllcy5hcHBlbmQobGlua2VkX3B0cjxUZXN0TmF2aWdhdGlvbkVudHJ5
PihlbnRyeSkpOworICAgIG1fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXggPSBzdGF0aWNfY2FzdDxp
bnQ+KG1fZW50cmllcy5zaXplKCkpIC0gMTsKKyAgICB1cGRhdGVNYXhQYWdlSUQoKTsKK30KKwor
aW50IFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6ZW50cnlJbmRleFdpdGhQYWdlSUQoaW50MzIg
cGFnZUlEKSBjb25zdAoreworICAgIGZvciAoaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fZW50
cmllcy5zaXplKCkpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKG1fZW50cmllc1tp
XS0+cGFnZUlEKCkgPT0gcGFnZUlEKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAg
IHJldHVybiAtMTsKK30KKwordm9pZCBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6Om5hdmlnYXRl
VG9QZW5kaW5nRW50cnkoYm9vbCByZWxvYWQpCit7CisgICAgLy8gRm9yIHNlc3Npb24gaGlzdG9y
eSBuYXZpZ2F0aW9ucyBvbmx5IHRoZSBwZW5kaW5nX2VudHJ5X2luZGV4XyBpcyBzZXQuCisgICAg
aWYgKCFtX3BlbmRpbmdFbnRyeSkgeworICAgICAgICBBU1NFUlQobV9wZW5kaW5nRW50cnlJbmRl
eCAhPSAtMSk7CisgICAgICAgIG1fcGVuZGluZ0VudHJ5ID0gbV9lbnRyaWVzW21fcGVuZGluZ0Vu
dHJ5SW5kZXhdLmdldCgpOworICAgIH0KKworICAgIGlmIChtX2hvc3QtPm5hdmlnYXRlKCptX3Bl
bmRpbmdFbnRyeSwgcmVsb2FkKSkgeworICAgICAgICAvLyBOb3RlOiB0aGlzIGlzIHJlZHVuZGFu
dCBpZiBuYXZpZ2F0aW9uIGNvbXBsZXRlZCBzeW5jaHJvbm91c2x5IGJlY2F1c2UKKyAgICAgICAg
Ly8gRGlkTmF2aWdhdGVUb0VudHJ5IGNhbGwgdGhpcyBhcyB3ZWxsLgorICAgICAgICB1cGRhdGVN
YXhQYWdlSUQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGlzY2FyZFBlbmRpbmdFbnRyeSgpOwor
fQorCit2b2lkIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6dXBkYXRlTWF4UGFnZUlEKCkKK3sK
KyAgICBUZXN0TmF2aWdhdGlvbkVudHJ5KiBlbnRyeSA9IGFjdGl2ZUVudHJ5KCk7CisgICAgaWYg
KGVudHJ5KQorICAgICAgICBtX21heFBhZ2VJRCA9IG1heChtX21heFBhZ2VJRCwgZW50cnktPnBh
Z2VJRCgpKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZmFmNGM2MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5oCkBAIC0w
LDAgKzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXJfaAorI2RlZmluZSBU
ZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgi
CisjaW5jbHVkZSAiYmFzZS9saW5rZWRfcHRyLmgiCisjaW5jbHVkZSAiYmFzZS9yZWZfY291bnRl
ZC5oIgorI2luY2x1ZGUgImdvb2dsZXVybC9zcmMvZ3VybC5oIgorI2luY2x1ZGUgInB1YmxpYy9X
ZWJEYXRhU291cmNlLmgiCisjaW5jbHVkZSAicHVibGljL1dlYkhpc3RvcnlJdGVtLmgiCisjaW5j
bHVkZSAicHVibGljL1dlYlN0cmluZy5oIgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK2NsYXNzIEdVUkw7CisKKy8vIEFzc29jaWF0ZWQgd2l0aCBicm93c2Vy
LWluaXRhdGVkIG5hdmlnYXRpb25zIHRvIGhvbGQgdHJhY2tpbmcgZGF0YS4KK2NsYXNzIFRlc3RT
aGVsbEV4dHJhRGF0YSA6IHB1YmxpYyBXZWJLaXQ6OldlYkRhdGFTb3VyY2U6OkV4dHJhRGF0YSB7
CitwdWJsaWM6CisgICAgVGVzdFNoZWxsRXh0cmFEYXRhKGludDMyX3QgcGVuZGluZ1BhZ2VJRCkK
KyAgICAgICAgOiBwZW5kaW5nUGFnZUlEKHBlbmRpbmdQYWdlSUQpCisgICAgICAgICwgcmVxdWVz
dENvbW1pdHRlZChmYWxzZSkge30KKworICAgIC8vIENvbnRhaW5zIHRoZSBwYWdlX2lkIGZvciB0
aGlzIG5hdmlnYXRpb24gb3IgLTEgaWYgdGhlcmUgaXMgbm9uZSB5ZXQuCisgICAgaW50MzJfdCBw
ZW5kaW5nUGFnZUlEOworCisgICAgLy8gVHJ1ZSBpZiB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2Vk
IHRoZSAiRGlkQ29tbWl0TG9hZCIgZXZlbnQgZm9yIHRoaXMKKyAgICAvLyByZXF1ZXN0LiBVc2Vk
IGJ5IHNlc3Npb24gaGlzdG9yeS4KKyAgICBib29sIHJlcXVlc3RDb21taXR0ZWQ7Cit9OworCisv
LyBTdG9yZXMgb25lIGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uIHN0YXRlIGZvciB0aGUgdGVzdCBz
aGVsbC4KK2NsYXNzIFRlc3ROYXZpZ2F0aW9uRW50cnk6IHB1YmxpYyBOb25jb3B5YWJsZSB7Citw
dWJsaWM6CisgICAgVGVzdE5hdmlnYXRpb25FbnRyeSgpOworICAgIFRlc3ROYXZpZ2F0aW9uRW50
cnkoaW50IHBhZ2VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdVUkwmLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHRpdGxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHRhcmdldEZyYW1l
KTsKKworICAgIC8vIFZpcnR1YWwgdG8gYWxsb3cgdGVzdF9zaGVsbCB0byBleHRlbmQgdGhlIGNs
YXNzLgorICAgIH5UZXN0TmF2aWdhdGlvbkVudHJ5KCk7CisKKyAgICAvLyBTZXQgLyBHZXQgdGhl
IFVSSQorICAgIHZvaWQgc2V0VVJMKGNvbnN0IEdVUkwmIHVybCkgeyBtX3VybCA9IHVybDsgfQor
ICAgIGNvbnN0IEdVUkwmIFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisKKyAgICAvLyBT
ZXQgLyBHZXQgdGhlIHRpdGxlCisgICAgdm9pZCBzZXRUaXRsZShjb25zdCBXZWJLaXQ6OldlYlN0
cmluZyYgdGl0bGUpIHsgbV90aXRsZSA9IHRpdGxlOyB9CisgICAgY29uc3QgV2ViS2l0OjpXZWJT
dHJpbmcmIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQorCisgICAgLy8gU2V0IC8g
R2V0IGEgc3RhdGUuCisgICAgdm9pZCBzZXRDb250ZW50U3RhdGUoY29uc3QgV2ViS2l0OjpXZWJI
aXN0b3J5SXRlbSYpOworICAgIGNvbnN0IFdlYktpdDo6V2ViSGlzdG9yeUl0ZW0mIGNvbnRlbnRT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKworICAgIC8vIEdldCB0aGUgcGFnZSBp
ZCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YWIncyBzdGF0ZS4KKyAgICB2b2lkIHNldFBhZ2VJRChp
bnQgcGFnZUlEKSB7IG1fcGFnZUlEID0gcGFnZUlEOyB9CisgICAgaW50MzJfdCBwYWdlSUQoKSBj
b25zdCB7IHJldHVybiBtX3BhZ2VJRDsgfQorCisgICAgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcm
IHRhcmdldEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRGcmFtZTsgfQorCitwcml2YXRl
OgorICAgIC8vIERlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlIHRoYXQgdGhlIHRhYiByZXByZXNl
bnRzLiBUaGlzIGlzIG5vdCByZWxldmFudAorICAgIC8vIGZvciBhbGwgdGFiIGNvbnRlbnRzIHR5
cGVzLgorICAgIGludDMyX3QgbV9wYWdlSUQ7CisKKyAgICBHVVJMIG1fdXJsOworICAgIFdlYktp
dDo6V2ViU3RyaW5nIG1fdGl0bGU7CisgICAgV2ViS2l0OjpXZWJIaXN0b3J5SXRlbSBtX3N0YXRl
OworICAgIFdlYktpdDo6V2ViU3RyaW5nIG1fdGFyZ2V0RnJhbWU7Cit9OworCitjbGFzcyBOYXZp
Z2F0aW9uSG9zdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIG5hdmlnYXRlKGNvbnN0IFRl
c3ROYXZpZ2F0aW9uRW50cnkmLCBib29sIHJlbG9hZCkgPSAwOworfTsKKworLy8gVGVzdCBzaGVs
bCdzIE5hdmlnYXRpb25Db250cm9sbGVyLiBUaGUgZ29hbCBpcyB0byBiZSBhcyBjbG9zZSB0byB0
aGUgQ2hyb21lCisvLyB2ZXJzaW9uIGFzIHBvc3NpYmxlLgorY2xhc3MgVGVzdE5hdmlnYXRpb25D
b250cm9sbGVyOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIFRlc3ROYXZpZ2F0
aW9uQ29udHJvbGxlcihOYXZpZ2F0aW9uSG9zdCopOworICAgIH5UZXN0TmF2aWdhdGlvbkNvbnRy
b2xsZXIoKTsKKworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIC8vIENhdXNlcyB0aGUgY29udHJv
bGxlciB0byByZWxvYWQgdGhlIGN1cnJlbnQgKG9yIHBlbmRpbmcpIGVudHJ5LgorICAgIHZvaWQg
cmVsb2FkKCk7CisKKyAgICAvLyBDYXVzZXMgdGhlIGNvbnRyb2xsZXIgdG8gZ28gdG8gdGhlIHNw
ZWNpZmllZCBvZmZzZXQgZnJvbSBjdXJyZW50LiBEb2VzCisgICAgLy8gbm90aGluZyBpZiBvdXQg
b2YgYm91bmRzLgorICAgIHZvaWQgZ29Ub09mZnNldChpbnQpOworCisgICAgLy8gQ2F1c2VzIHRo
ZSBjb250cm9sbGVyIHRvIGdvIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXguCisgICAgdm9pZCBnb1Rv
SW5kZXgoaW50KTsKKworICAgIC8vIENhdXNlcyB0aGUgY29udHJvbGxlciB0byBsb2FkIHRoZSBz
cGVjaWZpZWQgZW50cnkuICBUaGUgY29udHJvbGxlcgorICAgIC8vIGFzc3VtZXMgb3duZXJzaGlw
IG9mIHRoZSBlbnRyeS4KKyAgICAvLyBOT1RFOiBEbyBub3QgcGFzcyBhbiBlbnRyeSB0aGF0IHRo
ZSBjb250cm9sbGVyIGFscmVhZHkgb3ducyEKKyAgICB2b2lkIGxvYWRFbnRyeShUZXN0TmF2aWdh
dGlvbkVudHJ5Kik7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBsYXN0IGNvbW1pdHRlZCBlbnRyeSwg
d2hpY2ggbWF5IGJlIG51bGwgaWYgdGhlcmUgYXJlIG5vCisgICAgLy8gY29tbWl0dGVkIGVudHJp
ZXMuCisgICAgVGVzdE5hdmlnYXRpb25FbnRyeSogbGFzdENvbW1pdHRlZEVudHJ5KCkgY29uc3Q7
CisKKyAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgTmF2aWdhdGlv
bkNvbnRyb2xsZXJCYXNlLCBleGNsdWRpbmcKKyAgICAvLyB0aGUgcGVuZGluZyBlbnRyeSBpZiB0
aGVyZSBpcyBvbmUuCisgICAgaW50IGVudHJ5Q291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KG1fZW50cmllcy5zaXplKCkpOyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSBhY3Rp
dmUgZW50cnksIHdoaWNoIGlzIHRoZSBwZW5kaW5nIGVudHJ5IGlmIGEgbmF2aWdhdGlvbiBpcyBp
bgorICAgIC8vIHByb2dyZXNzIG9yIHRoZSBsYXN0IGNvbW1pdHRlZCBlbnRyeSBvdGhlcndpc2Uu
ICBOT1RFOiBUaGlzIGNhbiBiZSAwISEKKyAgICAvLworICAgIC8vIElmIHlvdSBhcmUgdHJ5aW5n
IHRvIGdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgTmF2aWdhdGlvbkNvbnRyb2xsZXJCYXNl
LAorICAgIC8vIHRoaXMgaXMgdGhlIG1ldGhvZCB5b3Ugd2lsbCB0eXBpY2FsbHkgd2FudCB0byBj
YWxsLgorICAgIFRlc3ROYXZpZ2F0aW9uRW50cnkqIGFjdGl2ZUVudHJ5KCkgY29uc3Q7CisKKyAg
ICAvLyBSZXR1cm5zIHRoZSBpbmRleCBmcm9tIHdoaWNoIHdlIHdvdWxkIGdvIGJhY2svZm9yd2Fy
ZCBvciByZWxvYWQuIFRoaXMgaXMKKyAgICAvLyB0aGUgbV9sYXN0Q29tbWl0dGVkRW50cnlJbmRl
eCBpZiBtX3BlbmRpbmdFbnRyeUluZGV4IGlzIC0xLiBPdGhlcndpc2UsCisgICAgLy8gaXQgaXMg
dGhlIG1fcGVuZGluZ0VudHJ5SW5kZXguCisgICAgaW50IGN1cnJlbnRFbnRyeUluZGV4KCkgY29u
c3Q7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBlbnRyeSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LiAg
UmV0dXJucyAwIGlmIG91dCBvZgorICAgIC8vIGJvdW5kcy4KKyAgICBUZXN0TmF2aWdhdGlvbkVu
dHJ5KiBlbnRyeUF0SW5kZXgoaW50KSBjb25zdDsKKworICAgIC8vIFJldHVybiB0aGUgZW50cnkg
d2l0aCB0aGUgY29ycmVzcG9uZGluZyB0eXBlIGFuZCBwYWdlIElELCBvciAwIGlmCisgICAgLy8g
bm90IGZvdW5kLgorICAgIFRlc3ROYXZpZ2F0aW9uRW50cnkqIGVudHJ5V2l0aFBhZ2VJRChpbnQz
Ml90KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNvbW1p
dHRlZCBlbnRyeS4KKyAgICBpbnQgbGFzdENvbW1pdHRlZEVudHJ5SW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2xhc3RDb21taXR0ZWRFbnRyeUluZGV4OyB9CisKKyAgICAvLyBVc2VkIHRvIGluZm9y
bSB1cyBvZiBhIG5hdmlnYXRpb24gYmVpbmcgY29tbWl0dGVkIGZvciBhIHRhYi4gV2Ugd2lsbCB0
YWtlCisgICAgLy8gb3duZXJzaGlwIG9mIHRoZSBlbnRyeS4gQW55IGVudHJ5IGxvY2F0ZWQgZm9y
d2FyZCB0byB0aGUgY3VycmVudCBlbnRyeSB3aWxsCisgICAgLy8gYmUgZGVsZXRlZC4gVGhlIG5l
dyBlbnRyeSBiZWNvbWVzIHRoZSBjdXJyZW50IGVudHJ5LgorICAgIHZvaWQgZGlkTmF2aWdhdGVU
b0VudHJ5KFRlc3ROYXZpZ2F0aW9uRW50cnkqKTsKKworICAgIC8vIFVzZWQgdG8gaW5mb3JtIHVz
IHRvIGRpc2NhcmQgaXRzIHBlbmRpbmcgZW50cnkuCisgICAgdm9pZCBkaXNjYXJkUGVuZGluZ0Vu
dHJ5KCk7CisKK3ByaXZhdGU6CisgICAgLy8gSW5zZXJ0cyBhbiBlbnRyeSBhZnRlciB0aGUgY3Vy
cmVudCBwb3NpdGlvbiwgcmVtb3ZpbmcgYWxsIGVudHJpZXMgYWZ0ZXIgaXQuCisgICAgLy8gVGhl
IG5ldyBlbnRyeSB3aWxsIGJlY29tZSB0aGUgYWN0aXZlIG9uZS4KKyAgICB2b2lkIGluc2VydEVu
dHJ5KFRlc3ROYXZpZ2F0aW9uRW50cnkqKTsKKworICAgIGludCBtYXhQYWdlSUQoKSBjb25zdCB7
IHJldHVybiBtX21heFBhZ2VJRDsgfQorICAgIHZvaWQgbmF2aWdhdGVUb1BlbmRpbmdFbnRyeShi
b29sIHJlbG9hZCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBlbnRyeSB3aXRo
IHRoZSBjb3JyZXNwb25kaW5nIHR5cGUgYW5kIHBhZ2UgSUQsCisgICAgLy8gb3IgLTEgaWYgbm90
IGZvdW5kLgorICAgIGludCBlbnRyeUluZGV4V2l0aFBhZ2VJRChpbnQzMl90KSBjb25zdDsKKwor
ICAgIC8vIFVwZGF0ZXMgdGhlIG1heCBwYWdlIElEIHdpdGggdGhhdCBvZiB0aGUgZ2l2ZW4gZW50
cnksIGlmIGlzIGxhcmdlci4KKyAgICB2b2lkIHVwZGF0ZU1heFBhZ2VJRCgpOworCisgICAgLy8g
TGlzdCBvZiBOYXZpZ2F0aW9uRW50cnkgZm9yIHRoaXMgdGFiCisgICAgdHlwZWRlZiBWZWN0b3I8
bGlua2VkX3B0cjxUZXN0TmF2aWdhdGlvbkVudHJ5PiA+IE5hdmlnYXRpb25FbnRyeUxpc3Q7Cisg
ICAgdHlwZWRlZiBOYXZpZ2F0aW9uRW50cnlMaXN0OjppdGVyYXRvciBOYXZpZ2F0aW9uRW50cnlM
aXN0SXRlcmF0b3I7CisgICAgTmF2aWdhdGlvbkVudHJ5TGlzdCBtX2VudHJpZXM7CisKKyAgICAv
LyBBbiBlbnRyeSB3ZSBoYXZlbid0IGdvdHRlbiBhIHJlc3BvbnNlIGZvciB5ZXQuICBUaGlzIHdp
bGwgYmUgZGlzY2FyZGVkCisgICAgLy8gd2hlbiB3ZSBuYXZpZ2F0ZSBhZ2Fpbi4gIEl0J3MgdXNl
ZCBvbmx5IHNvIHdlIGtub3cgd2hhdCB0aGUgY3VycmVudGx5CisgICAgLy8gZGlzcGxheWVkIHRh
YiBpcy4KKyAgICBUZXN0TmF2aWdhdGlvbkVudHJ5KiBtX3BlbmRpbmdFbnRyeTsKKworICAgIC8v
IGN1cnJlbnRseSB2aXNpYmxlIGVudHJ5CisgICAgaW50IG1fbGFzdENvbW1pdHRlZEVudHJ5SW5k
ZXg7CisKKyAgICAvLyBpbmRleCBvZiBwZW5kaW5nIGVudHJ5IGlmIGl0IGlzIGluIGVudHJpZXNf
LCBvciAtMSBpZiBwZW5kaW5nX2VudHJ5XyBpcyBhCisgICAgLy8gbmV3IGVudHJ5IChjcmVhdGVk
IGJ5IExvYWRVUkwpLgorICAgIGludCBtX3BlbmRpbmdFbnRyeUluZGV4OworCisgICAgTmF2aWdh
dGlvbkhvc3QqIG1faG9zdDsKKyAgICBpbnQgbV9tYXhQYWdlSUQ7Cit9OworCisjZW5kaWYgLy8g
VGVzdE5hdmlnYXRpb25Db250cm9sbGVyX2gKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYldvcmtlci5oIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYldvcmtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjFmZWU4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViV29ya2VyLmgKQEAgLTAsMCArMSw4OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgVGVzdFdlYldvcmtlcl9oCisjZGVmaW5lIFRlc3RXZWJXb3JrZXJfaAorCisjaW5jbHVkZSAi
YmFzZS9iYXNpY3R5cGVzLmgiCisjaW5jbHVkZSAicHVibGljL1dlYk1lc3NhZ2VQb3J0Q2hhbm5l
bC5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJXb3JrZXIuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2Vi
V29ya2VyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CitjbGFzcyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI7CitjbGFzcyBXZWJTdHJp
bmc7CitjbGFzcyBXZWJVUkw7Cit9CisKK2NsYXNzIFRlc3RXZWJXb3JrZXIgOiBwdWJsaWMgV2Vi
S2l0OjpXZWJXb3JrZXIsCisgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYktpdDo6V2Vi
V29ya2VyQ2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBSZWZDb3VudGVkPFRl
c3RXZWJXb3JrZXI+IHsKK3B1YmxpYzoKKyAgICBUZXN0V2ViV29ya2VyKCkKKyAgICB7CisgICAg
ICAgIHJlZigpOworICAgICAgICAvLyBUaGUgaW5pdGlhbCBjb3VudGVyIHZhbHVlIHNob3VsZCBi
ZSAyLiBPbmUgZm9yIGEgd29ya2VyIG9iamVjdCwKKyAgICAgICAgLy8gYW5vdGhlciBmb3IgYSB3
b3JrZXIgY29udGV4dCBvYmplY3QuIFdlIG5lZWQgdG8gY2FsbCByZWYoKSBqdXN0IG9uY2UKKyAg
ICAgICAgLy8gYmVjYXVzZSB0aGUgZGVmYXVsdCBjb3VudGVyIHZhbHVlIG9mIFJlZkNvdW50ZWQg
aXMgMS4KKyAgICB9CisKKyAgICAvLyBXZWJXb3JrZXIgbWV0aG9kczoKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IFdlYktpdDo6V2ViVVJMJiwgY29uc3QgV2ViS2l0
OjpXZWJTdHJpbmcmLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpIHt9CisgICAgdmlydHVhbCB2
b2lkIHRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVz
c2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYsIGNvbnN0IFdlYktp
dDo6V2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmKSB7fQorICAgIHZpcnR1YWwgdm9pZCB3b3Jr
ZXJPYmplY3REZXN0cm95ZWQoKQorICAgIHsKKyAgICAgICAgLy8gUmVsZWFzZXMgdGhlIHJlZmVy
ZW5jZSBoZWxkIGZvciB3b3JrZXIgb2JqZWN0LgorICAgICAgICBkZXJlZigpOworICAgIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY2xpZW50RGVzdHJveWVkKCkge30KKworICAgIC8vIFdlYldvcmtlckNs
aWVudCBtZXRob2RzOgorICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0
KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiwgY29uc3QgV2ViS2l0OjpXZWJNZXNzYWdlUG9ydENo
YW5uZWxBcnJheSYpIHt9CisgICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9i
amVjdChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYsIGludCwgY29uc3QgV2ViS2l0OjpXZWJTdHJp
bmcmKSB7fQorICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVj
dChpbnQsIGludCwgaW50LCBpbnQsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiwgaW50LCBjb25z
dCBXZWJLaXQ6OldlYlN0cmluZyYpIHt9CisgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1NZXNzYWdl
RnJvbVdvcmtlck9iamVjdChib29sKSB7fQorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRQZW5kaW5n
QWN0aXZpdHkoYm9vbCkge30KKyAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dENsb3NlZCgp
IHt9CisgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKQorICAgIHsKKyAg
ICAgICAgLy8gUmVsZWFzZXMgdGhlIHJlZmVyZW5jZSBoZWxkIGZvciB3b3JrZXIgY29udGV4dCBv
YmplY3QuCisgICAgICAgIGRlcmVmKCk7CisgICAgfQorICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJX
b3JrZXIqIGNyZWF0ZVdvcmtlcihXZWJLaXQ6OldlYldvcmtlckNsaWVudCopIHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBub3RpZmlj
YXRpb25QcmVzZW50ZXIoKSB7IHJldHVybiAwOyB9CisKK3ByaXZhdGU6CisgICAgflRlc3RXZWJX
b3JrZXIoKSB7fQorICAgIGZyaWVuZCBjbGFzcyBSZWZDb3VudGVkPFRlc3RXZWJXb3JrZXI+Owor
fTsKKworI2VuZGlmIC8vIFRlc3RXZWJXb3JrZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51476</attachid>
            <date>2010-03-23 20:47:05 -0700</date>
            <delta_ts>2010-03-23 21:04:41 -0700</delta_ts>
            <desc>Proposed patch (rev.2)</desc>
            <filename>bug-36489-20100324124702.patch</filename>
            <type>text/plain</type>
            <size>22698</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAyMzQ2YTBmLi5mZGZjYWY1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDMt
MjMgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtEUlQvQ2hyb21pdW1dIEFkZCBUZXN0TmF2
aWdhdGlvbkNvbnRyb2xsZXIgYW5kIFRlc3RXZWJXb3JrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NDg5CisKKyAgICAgICAgQWRkIFRlc3ROYXZp
Z2F0aW9uQ29udHJvbGxlciBhbmQgVGVzdFdlYldvcmtlciBjbGFzc2VzLCB3aGljaCBhcmUKKyAg
ICAgICAgZ29pbmcgdG8gYmUgdXNlZCBieSBEdW1wUmVuZGVyVHJlZSBDaHJvbWl1bSBwb3J0LiBU
aGVzZSBmaWxlcyBhcmUKKyAgICAgICAgYmFzZWQgb246CisgICAgICAgIC0gc3JjL3dlYmtpdC90
b29scy90ZXN0X3NoZWxsL3Rlc3RfbmF2aWdhdGlvbl9jb250cm9sbGVyLntjYyxofQorICAgICAg
ICAtIHNyYy93ZWJraXQvdG9vbHMvdGVzdF9zaGVsbC90ZXN0X3dlYl93b3JrZXIuaAorICAgICAg
ICBvZiBDaHJvbWl1bSByZXYuNDA0OTIuCisKKyAgICAgICAgVGVzdE5hdmlnYXRpb25Db250cm9s
bGVyIGhhcyBub24tc3R5bGUgY2hhbmdlcy4KKyAgICAgICAgLSBDaGFuZ2UgQ29udGVudFN0YXRl
IHR5cGU6IGJpbmFyeSBzdHJpbmcgLT4gV2ViSGlzdG9yeUl0ZW0KKyAgICAgICAgLSBSZW1vdmUg
VGVzdFNoZWxsIGRlcGVuZGVuY3kgYnkgaW50cm9kdWNpbmcgTmF2aWdhdGlvbkhvc3QgaW50ZXJm
YWNlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdE5hdmlnYXRpb25D
b250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RXZWJXb3JrZXIuaDogQWRkZWQuCisKIDIwMTAtMDMtMjIgIENzYWJh
IE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOGI0Zjk1NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5jcHAK
QEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdE5hdmln
YXRpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJUZXN0U2hlbGwuaCIKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGVzdE5hdmlnYXRpb25FbnRy
eQorCitUZXN0TmF2aWdhdGlvbkVudHJ5OjpUZXN0TmF2aWdhdGlvbkVudHJ5KCkKKyAgICA6IG1f
cGFnZUlEKC0xKSB7fQorCitUZXN0TmF2aWdhdGlvbkVudHJ5OjpUZXN0TmF2aWdhdGlvbkVudHJ5
KAorICAgIGludCBwYWdlSUQsIGNvbnN0IFdlYlVSTCYgdXJsLCBjb25zdCBXZWJTdHJpbmcmIHRp
dGxlLCBjb25zdCBXZWJTdHJpbmcmIHRhcmdldEZyYW1lKQorICAgIDogbV9wYWdlSUQocGFnZUlE
KQorICAgICwgbV91cmwodXJsKQorICAgICwgbV90aXRsZSh0aXRsZSkKKyAgICAsIG1fdGFyZ2V0
RnJhbWUodGFyZ2V0RnJhbWUpIHt9CisKK1Rlc3ROYXZpZ2F0aW9uRW50cnk6On5UZXN0TmF2aWdh
dGlvbkVudHJ5KCkge30KKwordm9pZCBUZXN0TmF2aWdhdGlvbkVudHJ5OjpzZXRDb250ZW50U3Rh
dGUoY29uc3QgV2ViSGlzdG9yeUl0ZW0mIHN0YXRlKQoreworICAgIG1fc3RhdGUgPSBzdGF0ZTsK
K30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGVzdE5hdmlnYXRpb25Db250cm9sbGVy
CisKK1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6VGVzdE5hdmlnYXRpb25Db250cm9sbGVyKE5h
dmlnYXRpb25Ib3N0KiBob3N0KQorICAgIDogbV9wZW5kaW5nRW50cnkoMCkKKyAgICAsIG1fbGFz
dENvbW1pdHRlZEVudHJ5SW5kZXgoLTEpCisgICAgLCBtX3BlbmRpbmdFbnRyeUluZGV4KC0xKQor
ICAgICwgbV9ob3N0KGhvc3QpCisgICAgLCBtX21heFBhZ2VJRCgtMSkge30KKworVGVzdE5hdmln
YXRpb25Db250cm9sbGVyOjp+VGVzdE5hdmlnYXRpb25Db250cm9sbGVyKCkKK3sKKyAgICBkaXNj
YXJkUGVuZGluZ0VudHJ5KCk7Cit9CisKK3ZvaWQgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyOjpy
ZXNldCgpCit7CisgICAgbV9lbnRyaWVzLmNsZWFyKCk7CisgICAgZGlzY2FyZFBlbmRpbmdFbnRy
eSgpOworCisgICAgbV9sYXN0Q29tbWl0dGVkRW50cnlJbmRleCA9IC0xOworfQorCit2b2lkIFRl
c3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6cmVsb2FkKCkKK3sKKyAgICAvLyBCYXNlIHRoZSBuYXZp
Z2F0aW9uIG9uIHdoZXJlIHdlIGFyZSBub3cuLi4KKyAgICBpbnQgY3VycmVudEluZGV4ID0gY3Vy
cmVudEVudHJ5SW5kZXgoKTsKKworICAgIC8vIElmIHdlIGFyZSBubyB3aGVyZSwgdGhlbiB3ZSBj
YW4ndCByZWxvYWQuICBUT0RPKGRhcmluKTogV2Ugc2hvdWxkIGFkZCBhCisgICAgLy8gQ2FuUmVs
b2FkIG1ldGhvZC4KKyAgICBpZiAoY3VycmVudEluZGV4ID09IC0xKQorICAgICAgICByZXR1cm47
CisKKyAgICBkaXNjYXJkUGVuZGluZ0VudHJ5KCk7CisKKyAgICBtX3BlbmRpbmdFbnRyeUluZGV4
ID0gY3VycmVudEluZGV4OworICAgIG5hdmlnYXRlVG9QZW5kaW5nRW50cnkodHJ1ZSk7Cit9CisK
K3ZvaWQgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyOjpnb1RvT2Zmc2V0KGludCBvZmZzZXQpCit7
CisgICAgaW50IGluZGV4ID0gbV9sYXN0Q29tbWl0dGVkRW50cnlJbmRleCArIG9mZnNldDsKKyAg
ICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGVudHJ5Q291bnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZ29Ub0luZGV4KGluZGV4KTsKK30KKwordm9pZCBUZXN0TmF2aWdhdGlvbkNvbnRy
b2xsZXI6OmdvVG9JbmRleChpbnQgaW5kZXgpCit7CisgICAgQVNTRVJUKGluZGV4ID49IDApOwor
ICAgIEFTU0VSVChpbmRleCA8IHN0YXRpY19jYXN0PGludD4obV9lbnRyaWVzLnNpemUoKSkpOwor
CisgICAgZGlzY2FyZFBlbmRpbmdFbnRyeSgpOworCisgICAgbV9wZW5kaW5nRW50cnlJbmRleCA9
IGluZGV4OworICAgIG5hdmlnYXRlVG9QZW5kaW5nRW50cnkoZmFsc2UpOworfQorCit2b2lkIFRl
c3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6bG9hZEVudHJ5KFRlc3ROYXZpZ2F0aW9uRW50cnkqIGVu
dHJ5KQoreworICAgIC8vIFdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlLCB3ZSBkb24ndCBr
bm93IGZvciBzdXJlIGlmIHdlIHdpbGwgYWN0dWFsbHkKKyAgICAvLyBlbmQgdXAgbGVhdmluZyB0
aGUgY3VycmVudCBwYWdlLiAgVGhlIG5ldyBwYWdlIGxvYWQgY291bGQgZm9yIGV4YW1wbGUKKyAg
ICAvLyByZXN1bHQgaW4gYSBkb3dubG9hZCBvciBhICdubyBjb250ZW50JyByZXNwb25zZSAoZS5n
LiwgYSBtYWlsdG86IFVSTCkuCisgICAgZGlzY2FyZFBlbmRpbmdFbnRyeSgpOworICAgIG1fcGVu
ZGluZ0VudHJ5ID0gZW50cnk7CisgICAgbmF2aWdhdGVUb1BlbmRpbmdFbnRyeShmYWxzZSk7Cit9
CisKKworVGVzdE5hdmlnYXRpb25FbnRyeSogVGVzdE5hdmlnYXRpb25Db250cm9sbGVyOjpsYXN0
Q29tbWl0dGVkRW50cnkoKSBjb25zdAoreworICAgIGlmIChtX2xhc3RDb21taXR0ZWRFbnRyeUlu
ZGV4ID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9lbnRyaWVzW21fbGFz
dENvbW1pdHRlZEVudHJ5SW5kZXhdLmdldCgpOworfQorCitUZXN0TmF2aWdhdGlvbkVudHJ5KiBU
ZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6OmFjdGl2ZUVudHJ5KCkgY29uc3QKK3sKKyAgICBUZXN0
TmF2aWdhdGlvbkVudHJ5KiBlbnRyeSA9IG1fcGVuZGluZ0VudHJ5OworICAgIGlmICghZW50cnkp
CisgICAgICAgIGVudHJ5ID0gbGFzdENvbW1pdHRlZEVudHJ5KCk7CisgICAgcmV0dXJuIGVudHJ5
OworfQorCitpbnQgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyOjpjdXJyZW50RW50cnlJbmRleCgp
IGNvbnN0Cit7CisgICAgaWYgKG1fcGVuZGluZ0VudHJ5SW5kZXggIT0gLTEpCisgICAgICAgIHJl
dHVybiBtX3BlbmRpbmdFbnRyeUluZGV4OworICAgIHJldHVybiBtX2xhc3RDb21taXR0ZWRFbnRy
eUluZGV4OworfQorCisKK1Rlc3ROYXZpZ2F0aW9uRW50cnkqIFRlc3ROYXZpZ2F0aW9uQ29udHJv
bGxlcjo6ZW50cnlBdEluZGV4KGludCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPCAw
IHx8IGluZGV4ID49IGVudHJ5Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IG1fZW50cmllc1tpbmRleF0uZ2V0KCk7Cit9CisKK1Rlc3ROYXZpZ2F0aW9uRW50cnkqIFRlc3RO
YXZpZ2F0aW9uQ29udHJvbGxlcjo6ZW50cnlXaXRoUGFnZUlEKGludDMyX3QgcGFnZUlEKSBjb25z
dAoreworICAgIGludCBpbmRleCA9IGVudHJ5SW5kZXhXaXRoUGFnZUlEKHBhZ2VJRCk7CisgICAg
cmV0dXJuIChpbmRleCAhPSAtMSkgPyBtX2VudHJpZXNbaW5kZXhdLmdldCgpIDogMDsKK30KKwor
dm9pZCBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6OmRpZE5hdmlnYXRlVG9FbnRyeShUZXN0TmF2
aWdhdGlvbkVudHJ5KiBlbnRyeSkKK3sKKyAgICAvLyBJZiB0aGUgZW50cnkgaXMgdGhhdCBvZiBh
IHBhZ2Ugd2l0aCBQYWdlSUQgbGFyZ2VyIHRoYW4gYW55IHRoaXMgVGFiIGhhcworICAgIC8vIHNl
ZW4gYmVmb3JlLCB0aGVuIGNvbnNpZGVyIGl0IGEgbmV3IG5hdmlnYXRpb24uCisgICAgaWYgKGVu
dHJ5LT5wYWdlSUQoKSA+IG1heFBhZ2VJRCgpKSB7CisgICAgICAgIGluc2VydEVudHJ5KGVudHJ5
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgd2UganVzdCBu
ZWVkIHRvIHVwZGF0ZSBhbiBleGlzdGluZyBlbnRyeSB3aXRoIG1hdGNoaW5nIFBhZ2VJRC4KKyAg
ICAvLyBJZiB0aGUgZXhpc3RpbmcgZW50cnkgY29ycmVzcG9uZHMgdG8gdGhlIGVudHJ5IHdoaWNo
IGlzIHBlbmRpbmcsIHRoZW4gd2UKKyAgICAvLyBtdXN0IHVwZGF0ZSB0aGUgY3VycmVudCBlbnRy
eSBpbmRleCBhY2NvcmRpbmdseS4gIFdoZW4gbmF2aWdhdGluZyB0byB0aGUKKyAgICAvLyBzYW1l
IFVSTCwgYSBuZXcgUGFnZUlEIGlzIG5vdCBjcmVhdGVkLgorCisgICAgaW50IGV4aXN0aW5nRW50
cnlJbmRleCA9IGVudHJ5SW5kZXhXaXRoUGFnZUlEKGVudHJ5LT5wYWdlSUQoKSk7CisgICAgVGVz
dE5hdmlnYXRpb25FbnRyeSogZXhpc3RpbmdFbnRyeSA9IChleGlzdGluZ0VudHJ5SW5kZXggIT0g
LTEpID8KKyAgICAgICAgbV9lbnRyaWVzW2V4aXN0aW5nRW50cnlJbmRleF0uZ2V0KCkgOiAwOwor
ICAgIGlmICghZXhpc3RpbmdFbnRyeSkgeworICAgICAgICAvLyBObyBleGlzdGluZyBlbnRyeSwg
dGhlbiBzaW1wbHkgaWdub3JlIHRoaXMgbmF2aWdhdGlvbiEKKyAgICB9IGVsc2UgaWYgKGV4aXN0
aW5nRW50cnkgPT0gbV9wZW5kaW5nRW50cnkpIHsKKyAgICAgICAgLy8gVGhlIGdpdmVuIGVudHJ5
IG1pZ2h0IHByb3ZpZGUgYSBuZXcgVVJMLi4uIGUuZy4sIG5hdmlnYXRpbmcgYmFjayB0byBhCisg
ICAgICAgIC8vIHBhZ2UgaW4gc2Vzc2lvbiBoaXN0b3J5IGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4g
YSBuZXcgY2xpZW50IHJlZGlyZWN0LgorICAgICAgICBleGlzdGluZ0VudHJ5LT5zZXRVUkwoZW50
cnktPlVSTCgpKTsKKyAgICAgICAgZXhpc3RpbmdFbnRyeS0+c2V0Q29udGVudFN0YXRlKGVudHJ5
LT5jb250ZW50U3RhdGUoKSk7CisgICAgICAgIG1fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXggPSBt
X3BlbmRpbmdFbnRyeUluZGV4OworICAgICAgICBtX3BlbmRpbmdFbnRyeUluZGV4ID0gLTE7Cisg
ICAgICAgIG1fcGVuZGluZ0VudHJ5ID0gMDsKKyAgICB9IGVsc2UgaWYgKG1fcGVuZGluZ0VudHJ5
ICYmIG1fcGVuZGluZ0VudHJ5LT5wYWdlSUQoKSA9PSAtMQorICAgICAgICAgICAgICAgJiYgR1VS
TChtX3BlbmRpbmdFbnRyeS0+VVJMKCkpID09IEdVUkwoZXhpc3RpbmdFbnRyeS0+VVJMKCkuc3Bl
YygpKSkgeworICAgICAgICAvLyBOb3QgYSBuZXcgbmF2aWdhdGlvbgorICAgICAgICBkaXNjYXJk
UGVuZGluZ0VudHJ5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhlIGdpdmVuIGVudHJ5
IG1pZ2h0IHByb3ZpZGUgYSBuZXcgVVJMLi4uIGUuZy4sIG5hdmlnYXRpbmcgdG8gYSBwYWdlCisg
ICAgICAgIC8vIG1pZ2h0IHJlc3VsdCBpbiBhIGNsaWVudCByZWRpcmVjdCwgd2hpY2ggc2hvdWxk
IG92ZXJyaWRlIHRoZSBVUkwgb2YgdGhlCisgICAgICAgIC8vIGV4aXN0aW5nIGVudHJ5LgorICAg
ICAgICBleGlzdGluZ0VudHJ5LT5zZXRVUkwoZW50cnktPlVSTCgpKTsKKyAgICAgICAgZXhpc3Rp
bmdFbnRyeS0+c2V0Q29udGVudFN0YXRlKGVudHJ5LT5jb250ZW50U3RhdGUoKSk7CisKKyAgICAg
ICAgLy8gVGhlIG5hdmlnYXRpb24gY291bGQgaGF2ZSBiZWVuIGlzc3VlZCBieSB0aGUgcmVuZGVy
ZXIsIHNvIGJlIHN1cmUgdGhhdAorICAgICAgICAvLyB3ZSB1cGRhdGUgb3VyIGN1cnJlbnQgaW5k
ZXguCisgICAgICAgIG1fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXggPSBleGlzdGluZ0VudHJ5SW5k
ZXg7CisgICAgfQorCisgICAgZGVsZXRlIGVudHJ5OworICAgIHVwZGF0ZU1heFBhZ2VJRCgpOwor
fQorCit2b2lkIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6ZGlzY2FyZFBlbmRpbmdFbnRyeSgp
Cit7CisgICAgaWYgKG1fcGVuZGluZ0VudHJ5SW5kZXggPT0gLTEpCisgICAgICAgIGRlbGV0ZSBt
X3BlbmRpbmdFbnRyeTsKKyAgICBtX3BlbmRpbmdFbnRyeSA9IDA7CisgICAgbV9wZW5kaW5nRW50
cnlJbmRleCA9IC0xOworfQorCit2b2lkIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6aW5zZXJ0
RW50cnkoVGVzdE5hdmlnYXRpb25FbnRyeSogZW50cnkpCit7CisgICAgZGlzY2FyZFBlbmRpbmdF
bnRyeSgpOworCisgICAgLy8gUHJ1bmUgYW55IGVudHJ5IHdoaWNoIGFyZSBpbiBmcm9udCBvZiB0
aGUgY3VycmVudCBlbnRyeQorICAgIGludCBjdXJyZW50U2l6ZSA9IHN0YXRpY19jYXN0PGludD4o
bV9lbnRyaWVzLnNpemUoKSk7CisgICAgaWYgKGN1cnJlbnRTaXplID4gMCkgeworICAgICAgICB3
aGlsZSAobV9sYXN0Q29tbWl0dGVkRW50cnlJbmRleCA8IChjdXJyZW50U2l6ZSAtIDEpKSB7Cisg
ICAgICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgY3VycmVudFNp
emUtLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fZW50cmllcy5hcHBlbmQobGlua2VkX3B0
cjxUZXN0TmF2aWdhdGlvbkVudHJ5PihlbnRyeSkpOworICAgIG1fbGFzdENvbW1pdHRlZEVudHJ5
SW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KG1fZW50cmllcy5zaXplKCkpIC0gMTsKKyAgICB1cGRh
dGVNYXhQYWdlSUQoKTsKK30KKworaW50IFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6ZW50cnlJ
bmRleFdpdGhQYWdlSUQoaW50MzIgcGFnZUlEKSBjb25zdAoreworICAgIGZvciAoaW50IGkgPSBz
dGF0aWNfY2FzdDxpbnQ+KG1fZW50cmllcy5zaXplKCkpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAg
ICAgICAgaWYgKG1fZW50cmllc1tpXS0+cGFnZUlEKCkgPT0gcGFnZUlEKQorICAgICAgICAgICAg
cmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKwordm9pZCBUZXN0TmF2aWdhdGlv
bkNvbnRyb2xsZXI6Om5hdmlnYXRlVG9QZW5kaW5nRW50cnkoYm9vbCByZWxvYWQpCit7CisgICAg
Ly8gRm9yIHNlc3Npb24gaGlzdG9yeSBuYXZpZ2F0aW9ucyBvbmx5IHRoZSBwZW5kaW5nX2VudHJ5
X2luZGV4XyBpcyBzZXQuCisgICAgaWYgKCFtX3BlbmRpbmdFbnRyeSkgeworICAgICAgICBBU1NF
UlQobV9wZW5kaW5nRW50cnlJbmRleCAhPSAtMSk7CisgICAgICAgIG1fcGVuZGluZ0VudHJ5ID0g
bV9lbnRyaWVzW21fcGVuZGluZ0VudHJ5SW5kZXhdLmdldCgpOworICAgIH0KKworICAgIGlmICht
X2hvc3QtPm5hdmlnYXRlKCptX3BlbmRpbmdFbnRyeSwgcmVsb2FkKSkgeworICAgICAgICAvLyBO
b3RlOiB0aGlzIGlzIHJlZHVuZGFudCBpZiBuYXZpZ2F0aW9uIGNvbXBsZXRlZCBzeW5jaHJvbm91
c2x5IGJlY2F1c2UKKyAgICAgICAgLy8gRGlkTmF2aWdhdGVUb0VudHJ5IGNhbGwgdGhpcyBhcyB3
ZWxsLgorICAgICAgICB1cGRhdGVNYXhQYWdlSUQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGlz
Y2FyZFBlbmRpbmdFbnRyeSgpOworfQorCit2b2lkIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6
dXBkYXRlTWF4UGFnZUlEKCkKK3sKKyAgICBUZXN0TmF2aWdhdGlvbkVudHJ5KiBlbnRyeSA9IGFj
dGl2ZUVudHJ5KCk7CisgICAgaWYgKGVudHJ5KQorICAgICAgICBtX21heFBhZ2VJRCA9IG1heCht
X21heFBhZ2VJRCwgZW50cnktPnBhZ2VJRCgpKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5oIGIvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdE5hdmlnYXRpb25Db250cm9sbGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzYzJmNAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0
aW9uQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXN0TmF2aWdhdGlvbkNv
bnRyb2xsZXJfaAorI2RlZmluZSBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXJfaAorCisjaW5jbHVk
ZSAiYmFzZS9iYXNpY3R5cGVzLmgiCisjaW5jbHVkZSAiYmFzZS9saW5rZWRfcHRyLmgiCisjaW5j
bHVkZSAicHVibGljL1dlYkRhdGFTb3VyY2UuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViSGlzdG9y
eUl0ZW0uaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicHVibGlj
L1dlYlVSTC5oIgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
Ky8vIEFzc29jaWF0ZWQgd2l0aCBicm93c2VyLWluaXRhdGVkIG5hdmlnYXRpb25zIHRvIGhvbGQg
dHJhY2tpbmcgZGF0YS4KK2NsYXNzIFRlc3RTaGVsbEV4dHJhRGF0YSA6IHB1YmxpYyBXZWJLaXQ6
OldlYkRhdGFTb3VyY2U6OkV4dHJhRGF0YSB7CitwdWJsaWM6CisgICAgVGVzdFNoZWxsRXh0cmFE
YXRhKGludDMyX3QgcGVuZGluZ1BhZ2VJRCkKKyAgICAgICAgOiBwZW5kaW5nUGFnZUlEKHBlbmRp
bmdQYWdlSUQpCisgICAgICAgICwgcmVxdWVzdENvbW1pdHRlZChmYWxzZSkge30KKworICAgIC8v
IENvbnRhaW5zIHRoZSBwYWdlX2lkIGZvciB0aGlzIG5hdmlnYXRpb24gb3IgLTEgaWYgdGhlcmUg
aXMgbm9uZSB5ZXQuCisgICAgaW50MzJfdCBwZW5kaW5nUGFnZUlEOworCisgICAgLy8gVHJ1ZSBp
ZiB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkIHRoZSAiRGlkQ29tbWl0TG9hZCIgZXZlbnQgZm9y
IHRoaXMKKyAgICAvLyByZXF1ZXN0LiBVc2VkIGJ5IHNlc3Npb24gaGlzdG9yeS4KKyAgICBib29s
IHJlcXVlc3RDb21taXR0ZWQ7Cit9OworCisvLyBTdG9yZXMgb25lIGJhY2svZm9yd2FyZCBuYXZp
Z2F0aW9uIHN0YXRlIGZvciB0aGUgdGVzdCBzaGVsbC4KK2NsYXNzIFRlc3ROYXZpZ2F0aW9uRW50
cnk6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgVGVzdE5hdmlnYXRpb25FbnRy
eSgpOworICAgIFRlc3ROYXZpZ2F0aW9uRW50cnkoaW50IHBhZ2VJRCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVVJMJiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0YXJnZXRGcmFtZSk7CisKKyAgICAvLyBWaXJ0dWFs
IHRvIGFsbG93IHRlc3Rfc2hlbGwgdG8gZXh0ZW5kIHRoZSBjbGFzcy4KKyAgICB+VGVzdE5hdmln
YXRpb25FbnRyeSgpOworCisgICAgLy8gU2V0IC8gR2V0IHRoZSBVUkkKKyAgICB2b2lkIHNldFVS
TChjb25zdCBXZWJLaXQ6OldlYlVSTCYgdXJsKSB7IG1fdXJsID0gdXJsOyB9CisgICAgY29uc3Qg
V2ViS2l0OjpXZWJVUkwmIFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisKKyAgICAvLyBT
ZXQgLyBHZXQgdGhlIHRpdGxlCisgICAgdm9pZCBzZXRUaXRsZShjb25zdCBXZWJLaXQ6OldlYlN0
cmluZyYgdGl0bGUpIHsgbV90aXRsZSA9IHRpdGxlOyB9CisgICAgY29uc3QgV2ViS2l0OjpXZWJT
dHJpbmcmIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQorCisgICAgLy8gU2V0IC8g
R2V0IGEgc3RhdGUuCisgICAgdm9pZCBzZXRDb250ZW50U3RhdGUoY29uc3QgV2ViS2l0OjpXZWJI
aXN0b3J5SXRlbSYpOworICAgIGNvbnN0IFdlYktpdDo6V2ViSGlzdG9yeUl0ZW0mIGNvbnRlbnRT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKworICAgIC8vIEdldCB0aGUgcGFnZSBp
ZCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YWIncyBzdGF0ZS4KKyAgICB2b2lkIHNldFBhZ2VJRChp
bnQgcGFnZUlEKSB7IG1fcGFnZUlEID0gcGFnZUlEOyB9CisgICAgaW50MzJfdCBwYWdlSUQoKSBj
b25zdCB7IHJldHVybiBtX3BhZ2VJRDsgfQorCisgICAgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcm
IHRhcmdldEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRGcmFtZTsgfQorCitwcml2YXRl
OgorICAgIC8vIERlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlIHRoYXQgdGhlIHRhYiByZXByZXNl
bnRzLiBUaGlzIGlzIG5vdCByZWxldmFudAorICAgIC8vIGZvciBhbGwgdGFiIGNvbnRlbnRzIHR5
cGVzLgorICAgIGludDMyX3QgbV9wYWdlSUQ7CisKKyAgICBXZWJLaXQ6OldlYlVSTCBtX3VybDsK
KyAgICBXZWJLaXQ6OldlYlN0cmluZyBtX3RpdGxlOworICAgIFdlYktpdDo6V2ViSGlzdG9yeUl0
ZW0gbV9zdGF0ZTsKKyAgICBXZWJLaXQ6OldlYlN0cmluZyBtX3RhcmdldEZyYW1lOworfTsKKwor
Y2xhc3MgTmF2aWdhdGlvbkhvc3QgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBuYXZpZ2F0
ZShjb25zdCBUZXN0TmF2aWdhdGlvbkVudHJ5JiwgYm9vbCByZWxvYWQpID0gMDsKK307CisKKy8v
IFRlc3Qgc2hlbGwncyBOYXZpZ2F0aW9uQ29udHJvbGxlci4gVGhlIGdvYWwgaXMgdG8gYmUgYXMg
Y2xvc2UgdG8gdGhlIENocm9tZQorLy8gdmVyc2lvbiBhcyBwb3NzaWJsZS4KK2NsYXNzIFRlc3RO
YXZpZ2F0aW9uQ29udHJvbGxlcjogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBU
ZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIoTmF2aWdhdGlvbkhvc3QqKTsKKyAgICB+VGVzdE5hdmln
YXRpb25Db250cm9sbGVyKCk7CisKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICAvLyBDYXVzZXMg
dGhlIGNvbnRyb2xsZXIgdG8gcmVsb2FkIHRoZSBjdXJyZW50IChvciBwZW5kaW5nKSBlbnRyeS4K
KyAgICB2b2lkIHJlbG9hZCgpOworCisgICAgLy8gQ2F1c2VzIHRoZSBjb250cm9sbGVyIHRvIGdv
IHRvIHRoZSBzcGVjaWZpZWQgb2Zmc2V0IGZyb20gY3VycmVudC4gRG9lcworICAgIC8vIG5vdGhp
bmcgaWYgb3V0IG9mIGJvdW5kcy4KKyAgICB2b2lkIGdvVG9PZmZzZXQoaW50KTsKKworICAgIC8v
IENhdXNlcyB0aGUgY29udHJvbGxlciB0byBnbyB0byB0aGUgc3BlY2lmaWVkIGluZGV4LgorICAg
IHZvaWQgZ29Ub0luZGV4KGludCk7CisKKyAgICAvLyBDYXVzZXMgdGhlIGNvbnRyb2xsZXIgdG8g
bG9hZCB0aGUgc3BlY2lmaWVkIGVudHJ5LiAgVGhlIGNvbnRyb2xsZXIKKyAgICAvLyBhc3N1bWVz
IG93bmVyc2hpcCBvZiB0aGUgZW50cnkuCisgICAgLy8gTk9URTogRG8gbm90IHBhc3MgYW4gZW50
cnkgdGhhdCB0aGUgY29udHJvbGxlciBhbHJlYWR5IG93bnMhCisgICAgdm9pZCBsb2FkRW50cnko
VGVzdE5hdmlnYXRpb25FbnRyeSopOworCisgICAgLy8gUmV0dXJucyB0aGUgbGFzdCBjb21taXR0
ZWQgZW50cnksIHdoaWNoIG1heSBiZSBudWxsIGlmIHRoZXJlIGFyZSBubworICAgIC8vIGNvbW1p
dHRlZCBlbnRyaWVzLgorICAgIFRlc3ROYXZpZ2F0aW9uRW50cnkqIGxhc3RDb21taXR0ZWRFbnRy
eSgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhl
IE5hdmlnYXRpb25Db250cm9sbGVyQmFzZSwgZXhjbHVkaW5nCisgICAgLy8gdGhlIHBlbmRpbmcg
ZW50cnkgaWYgdGhlcmUgaXMgb25lLgorICAgIGludCBlbnRyeUNvdW50KCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50PihtX2VudHJpZXMuc2l6ZSgpKTsgfQorCisgICAgLy8gUmV0dXJu
cyB0aGUgYWN0aXZlIGVudHJ5LCB3aGljaCBpcyB0aGUgcGVuZGluZyBlbnRyeSBpZiBhIG5hdmln
YXRpb24gaXMgaW4KKyAgICAvLyBwcm9ncmVzcyBvciB0aGUgbGFzdCBjb21taXR0ZWQgZW50cnkg
b3RoZXJ3aXNlLiAgTk9URTogVGhpcyBjYW4gYmUgMCEhCisgICAgLy8KKyAgICAvLyBJZiB5b3Ug
YXJlIHRyeWluZyB0byBnZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIE5hdmlnYXRpb25Db250
cm9sbGVyQmFzZSwKKyAgICAvLyB0aGlzIGlzIHRoZSBtZXRob2QgeW91IHdpbGwgdHlwaWNhbGx5
IHdhbnQgdG8gY2FsbC4KKyAgICBUZXN0TmF2aWdhdGlvbkVudHJ5KiBhY3RpdmVFbnRyeSgpIGNv
bnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgaW5kZXggZnJvbSB3aGljaCB3ZSB3b3VsZCBnbyBi
YWNrL2ZvcndhcmQgb3IgcmVsb2FkLiBUaGlzIGlzCisgICAgLy8gdGhlIG1fbGFzdENvbW1pdHRl
ZEVudHJ5SW5kZXggaWYgbV9wZW5kaW5nRW50cnlJbmRleCBpcyAtMS4gT3RoZXJ3aXNlLAorICAg
IC8vIGl0IGlzIHRoZSBtX3BlbmRpbmdFbnRyeUluZGV4LgorICAgIGludCBjdXJyZW50RW50cnlJ
bmRleCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgZW50cnkgYXQgdGhlIHNwZWNpZmll
ZCBpbmRleC4gIFJldHVybnMgMCBpZiBvdXQgb2YKKyAgICAvLyBib3VuZHMuCisgICAgVGVzdE5h
dmlnYXRpb25FbnRyeSogZW50cnlBdEluZGV4KGludCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm4g
dGhlIGVudHJ5IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSBhbmQgcGFnZSBJRCwgb3IgMCBp
ZgorICAgIC8vIG5vdCBmb3VuZC4KKyAgICBUZXN0TmF2aWdhdGlvbkVudHJ5KiBlbnRyeVdpdGhQ
YWdlSUQoaW50MzJfdCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUg
bGFzdCBjb21taXR0ZWQgZW50cnkuCisgICAgaW50IGxhc3RDb21taXR0ZWRFbnRyeUluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9sYXN0Q29tbWl0dGVkRW50cnlJbmRleDsgfQorCisgICAgLy8gVXNl
ZCB0byBpbmZvcm0gdXMgb2YgYSBuYXZpZ2F0aW9uIGJlaW5nIGNvbW1pdHRlZCBmb3IgYSB0YWIu
IFdlIHdpbGwgdGFrZQorICAgIC8vIG93bmVyc2hpcCBvZiB0aGUgZW50cnkuIEFueSBlbnRyeSBs
b2NhdGVkIGZvcndhcmQgdG8gdGhlIGN1cnJlbnQgZW50cnkgd2lsbAorICAgIC8vIGJlIGRlbGV0
ZWQuIFRoZSBuZXcgZW50cnkgYmVjb21lcyB0aGUgY3VycmVudCBlbnRyeS4KKyAgICB2b2lkIGRp
ZE5hdmlnYXRlVG9FbnRyeShUZXN0TmF2aWdhdGlvbkVudHJ5Kik7CisKKyAgICAvLyBVc2VkIHRv
IGluZm9ybSB1cyB0byBkaXNjYXJkIGl0cyBwZW5kaW5nIGVudHJ5LgorICAgIHZvaWQgZGlzY2Fy
ZFBlbmRpbmdFbnRyeSgpOworCitwcml2YXRlOgorICAgIC8vIEluc2VydHMgYW4gZW50cnkgYWZ0
ZXIgdGhlIGN1cnJlbnQgcG9zaXRpb24sIHJlbW92aW5nIGFsbCBlbnRyaWVzIGFmdGVyIGl0Lgor
ICAgIC8vIFRoZSBuZXcgZW50cnkgd2lsbCBiZWNvbWUgdGhlIGFjdGl2ZSBvbmUuCisgICAgdm9p
ZCBpbnNlcnRFbnRyeShUZXN0TmF2aWdhdGlvbkVudHJ5Kik7CisKKyAgICBpbnQgbWF4UGFnZUlE
KCkgY29uc3QgeyByZXR1cm4gbV9tYXhQYWdlSUQ7IH0KKyAgICB2b2lkIG5hdmlnYXRlVG9QZW5k
aW5nRW50cnkoYm9vbCByZWxvYWQpOworCisgICAgLy8gUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUg
ZW50cnkgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB0eXBlIGFuZCBwYWdlIElELAorICAgIC8vIG9y
IC0xIGlmIG5vdCBmb3VuZC4KKyAgICBpbnQgZW50cnlJbmRleFdpdGhQYWdlSUQoaW50MzJfdCkg
Y29uc3Q7CisKKyAgICAvLyBVcGRhdGVzIHRoZSBtYXggcGFnZSBJRCB3aXRoIHRoYXQgb2YgdGhl
IGdpdmVuIGVudHJ5LCBpZiBpcyBsYXJnZXIuCisgICAgdm9pZCB1cGRhdGVNYXhQYWdlSUQoKTsK
KworICAgIC8vIExpc3Qgb2YgTmF2aWdhdGlvbkVudHJ5IGZvciB0aGlzIHRhYgorICAgIHR5cGVk
ZWYgVmVjdG9yPGxpbmtlZF9wdHI8VGVzdE5hdmlnYXRpb25FbnRyeT4gPiBOYXZpZ2F0aW9uRW50
cnlMaXN0OworICAgIHR5cGVkZWYgTmF2aWdhdGlvbkVudHJ5TGlzdDo6aXRlcmF0b3IgTmF2aWdh
dGlvbkVudHJ5TGlzdEl0ZXJhdG9yOworICAgIE5hdmlnYXRpb25FbnRyeUxpc3QgbV9lbnRyaWVz
OworCisgICAgLy8gQW4gZW50cnkgd2UgaGF2ZW4ndCBnb3R0ZW4gYSByZXNwb25zZSBmb3IgeWV0
LiAgVGhpcyB3aWxsIGJlIGRpc2NhcmRlZAorICAgIC8vIHdoZW4gd2UgbmF2aWdhdGUgYWdhaW4u
ICBJdCdzIHVzZWQgb25seSBzbyB3ZSBrbm93IHdoYXQgdGhlIGN1cnJlbnRseQorICAgIC8vIGRp
c3BsYXllZCB0YWIgaXMuCisgICAgVGVzdE5hdmlnYXRpb25FbnRyeSogbV9wZW5kaW5nRW50cnk7
CisKKyAgICAvLyBjdXJyZW50bHkgdmlzaWJsZSBlbnRyeQorICAgIGludCBtX2xhc3RDb21taXR0
ZWRFbnRyeUluZGV4OworCisgICAgLy8gaW5kZXggb2YgcGVuZGluZyBlbnRyeSBpZiBpdCBpcyBp
biBlbnRyaWVzXywgb3IgLTEgaWYgcGVuZGluZ19lbnRyeV8gaXMgYQorICAgIC8vIG5ldyBlbnRy
eSAoY3JlYXRlZCBieSBMb2FkVVJMKS4KKyAgICBpbnQgbV9wZW5kaW5nRW50cnlJbmRleDsKKwor
ICAgIE5hdmlnYXRpb25Ib3N0KiBtX2hvc3Q7CisgICAgaW50IG1fbWF4UGFnZUlEOworfTsKKwor
I2VuZGlmIC8vIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcl9oCisKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJXb3JrZXIuaCBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJXb3JrZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTRkYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYldvcmtlci5oCkBAIC0wLDAgKzEs
ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFRlc3RXZWJXb3JrZXJfaAorI2RlZmluZSBUZXN0V2ViV29ya2VyX2gKKwor
I2luY2x1ZGUgInB1YmxpYy9XZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKKyNpbmNsdWRlICJwdWJs
aWMvV2ViV29ya2VyLmgiCisjaW5jbHVkZSAicHVibGljL1dlYldvcmtlckNsaWVudC5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2Vi
Tm90aWZpY2F0aW9uUHJlc2VudGVyOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViVVJMOwor
fQorCitjbGFzcyBUZXN0V2ViV29ya2VyIDogcHVibGljIFdlYktpdDo6V2ViV29ya2VyLAorICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6OldlYldvcmtlckNsaWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgUmVmQ291bnRlZDxUZXN0V2ViV29ya2VyPiB7CitwdWJs
aWM6CisgICAgVGVzdFdlYldvcmtlcigpCisgICAgeworICAgICAgICByZWYoKTsKKyAgICAgICAg
Ly8gVGhlIGluaXRpYWwgY291bnRlciB2YWx1ZSBzaG91bGQgYmUgMi4gT25lIGZvciBhIHdvcmtl
ciBvYmplY3QsCisgICAgICAgIC8vIGFub3RoZXIgZm9yIGEgd29ya2VyIGNvbnRleHQgb2JqZWN0
LiBXZSBuZWVkIHRvIGNhbGwgcmVmKCkganVzdCBvbmNlCisgICAgICAgIC8vIGJlY2F1c2UgdGhl
IGRlZmF1bHQgY291bnRlciB2YWx1ZSBvZiBSZWZDb3VudGVkIGlzIDEuCisgICAgfQorCisgICAg
Ly8gV2ViV29ya2VyIG1ldGhvZHM6CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4
dChjb25zdCBXZWJLaXQ6OldlYlVSTCYsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiwgY29uc3Qg
V2ViS2l0OjpXZWJTdHJpbmcmKSB7fQorICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGVXb3JrZXJD
b250ZXh0KCkge30KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQo
Y29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmLCBjb25zdCBXZWJLaXQ6OldlYk1lc3NhZ2VQb3J0Q2hh
bm5lbEFycmF5Jikge30KKyAgICB2aXJ0dWFsIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJveWVkKCkK
KyAgICB7CisgICAgICAgIC8vIFJlbGVhc2VzIHRoZSByZWZlcmVuY2UgaGVsZCBmb3Igd29ya2Vy
IG9iamVjdC4KKyAgICAgICAgZGVyZWYoKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIGNsaWVu
dERlc3Ryb3llZCgpIHt9CisKKyAgICAvLyBXZWJXb3JrZXJDbGllbnQgbWV0aG9kczoKKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBXZWJLaXQ6OldlYlN0
cmluZyYsIGNvbnN0IFdlYktpdDo6V2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmKSB7fQorICAg
IHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgV2ViS2l0OjpX
ZWJTdHJpbmcmLCBpbnQsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJikge30KKyAgICB2aXJ0dWFs
IHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50LCBpbnQsIGludCwgaW50
LCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYsIGludCwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcm
KSB7fQorICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9v
bCkge30KKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wpIHt9Cisg
ICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWQoKSB7fQorICAgIHZpcnR1YWwgdm9p
ZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkKKyAgICB7CisgICAgICAgIC8vIFJlbGVhc2VzIHRo
ZSByZWZlcmVuY2UgaGVsZCBmb3Igd29ya2VyIGNvbnRleHQgb2JqZWN0LgorICAgICAgICBkZXJl
ZigpOworICAgIH0KKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViV29ya2VyKiBjcmVhdGVXb3JrZXIo
V2ViS2l0OjpXZWJXb3JrZXJDbGllbnQqKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBXZWJL
aXQ6OldlYk5vdGlmaWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0aW9uUHJlc2VudGVyKCkgeyBy
ZXR1cm4gMDsgfQorCitwcml2YXRlOgorICAgIH5UZXN0V2ViV29ya2VyKCkge30KKyAgICBmcmll
bmQgY2xhc3MgUmVmQ291bnRlZDxUZXN0V2ViV29ya2VyPjsKK307CisKKyNlbmRpZiAvLyBUZXN0
V2ViV29ya2VyX2gK
</data>
<flag name="review"
          id="34727"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>