<?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>71915</bug_id>
          
          <creation_ts>2011-11-09 07:29:42 -0800</creation_ts>
          <short_desc>addTrack() must throw an exception if &apos;kind&apos; is unknown</short_desc>
          <delta_ts>2011-12-02 09:48:22 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>43668</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>abarth</cc>
    
    <cc>annacc</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>498939</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-11-09 07:29:42 -0800</bug_when>
    <thetext>http://dev.w3.org/html5/spec/the-iframe-element.html#dom-media-addtexttrack says: &quot;If kind is not one of the following strings, then throw a SyntaxError exception and abort these steps&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498940</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2011-11-09 07:30:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/10419196&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503490</commentid>
    <comment_count>2</comment_count>
      <attachid>115292</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-11-15 18:33:58 -0800</bug_when>
    <thetext>Created attachment 115292
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503502</commentid>
    <comment_count>3</comment_count>
      <attachid>115292</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-15 18:54:33 -0800</bug_when>
    <thetext>Comment on attachment 115292
Proposed patch

Attachment 115292 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10494001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503553</commentid>
    <comment_count>4</comment_count>
      <attachid>115311</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-11-15 20:42:28 -0800</bug_when>
    <thetext>Created attachment 115311
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503875</commentid>
    <comment_count>5</comment_count>
      <attachid>115311</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-16 07:57:57 -0800</bug_when>
    <thetext>Comment on attachment 115311
Patch

Nice patch, thanks Eric!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503887</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-11-16 08:06:52 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/100453</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513225</commentid>
    <comment_count>7</comment_count>
      <attachid>115292</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-01 16:02:28 -0800</bug_when>
    <thetext>Comment on attachment 115292
Proposed patch

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:2099
&gt; -TextTrackList* HTMLMediaElement::textTracks() const 
&gt; +TextTrackList* HTMLMediaElement::textTracks() 

Left a trailing space on there.

&gt; Source/WebCore/html/HTMLTrackElement.cpp:106
&gt; +    } else if (attrName == kindAttr)
&gt; +        track()-&gt;setKind(attr-&gt;value());
&gt; +    else if (attrName == labelAttr)
&gt; +        track()-&gt;setLabel(attr-&gt;value());
&gt; +    else if (attrName == srclangAttr)
&gt; +        track()-&gt;setLanguage(attr-&gt;value());

I’m not sure why this is in attributeChanged rather than parseMappedAttribute.

&gt; Source/WebCore/html/HTMLTrackElement.cpp:109
&gt;  KURL HTMLTrackElement::src() const

I don’t understand why this doesn’t just use [Reflect]. Why do we need a custom function for this? And for any of these other attributes.

&gt; Source/WebCore/html/HTMLTrackElement.cpp:122
&gt;  String HTMLTrackElement::kind() const
&gt;  {
&gt; -    return getAttribute(kindAttr);
&gt; +    return track()-&gt;kind();
&gt;  }

I don’t understand this change. How can these two get out of sync?

&gt; Source/WebCore/html/HTMLTrackElement.cpp:166
&gt; +        String kind = getAttribute(kindAttr);

Should be fastGetAttribute.

&gt; Source/WebCore/html/HTMLTrackElement.h:-51
&gt;      KURL src() const;
&gt; +    void setSrc(const String&amp;);
&gt; +
&gt;      String kind() const;
&gt; +    void setKind(const String&amp;);
&gt; +
&gt;      String srclang() const;
&gt; +    void setSrclang(const String&amp;);
&gt; +
&gt;      String label() const;
&gt; +    void setLabel(const String&amp;);
&gt;  
&gt;      bool isDefault() const;
&gt; -    void setKind(const String&amp;);
&gt; -    void setSrc(const String&amp;);
&gt; -    void setSrclang(const String&amp;);
&gt; -    void setLabel(const String&amp;);

This seems like an unneeded change.

&gt; Source/WebCore/html/TextTrack.h:70
&gt; +    static const AtomicString&amp; subtitlesKeyword();
&gt; +    static const AtomicString&amp; captionsKeyword();
&gt; +    static const AtomicString&amp; descriptionsKeyword();
&gt; +    static const AtomicString&amp; chaptersKeyword();
&gt; +    static const AtomicString&amp; metadataKeyword();

Do these need to be member functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513864</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-02 09:48:22 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 115292 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115292&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:2099
&gt; &gt; -TextTrackList* HTMLMediaElement::textTracks() const 
&gt; &gt; +TextTrackList* HTMLMediaElement::textTracks() 
&gt; 
&gt; Left a trailing space on there.
&gt; 
I will fix that.

&gt; &gt; Source/WebCore/html/HTMLTrackElement.cpp:106
&gt; &gt; +    } else if (attrName == kindAttr)
&gt; &gt; +        track()-&gt;setKind(attr-&gt;value());
&gt; &gt; +    else if (attrName == labelAttr)
&gt; &gt; +        track()-&gt;setLabel(attr-&gt;value());
&gt; &gt; +    else if (attrName == srclangAttr)
&gt; &gt; +        track()-&gt;setLanguage(attr-&gt;value());
&gt; 
&gt; I’m not sure why this is in attributeChanged rather than parseMappedAttribute.
&gt; 
No good reason, I will fix this.

&gt; &gt; Source/WebCore/html/HTMLTrackElement.cpp:109
&gt; &gt;  KURL HTMLTrackElement::src() const
&gt; 
&gt; I don’t understand why this doesn’t just use [Reflect]. Why do we need a custom function for this? And for any of these other attributes.
&gt; 
Good point.

&gt; &gt; Source/WebCore/html/HTMLTrackElement.cpp:122
&gt; &gt;  String HTMLTrackElement::kind() const
&gt; &gt;  {
&gt; &gt; -    return getAttribute(kindAttr);
&gt; &gt; +    return track()-&gt;kind();
&gt; &gt;  }
&gt; 
&gt; I don’t understand this change. How can these two get out of sync?
&gt; 
The kind IDL attribute must &quot;reflect the content attribute of the same name, limited to only known values&quot;. I decided to put the knowledge about what kind values are allowed in TextTrack because it also applies to tracks created with HTMLMediaElement::addTrack(). I will add a comment to this function.

&gt; &gt; Source/WebCore/html/HTMLTrackElement.cpp:166
&gt; &gt; +        String kind = getAttribute(kindAttr);
&gt; 
&gt; Should be fastGetAttribute.
&gt; 
Good point, I will fix this.

&gt; &gt; Source/WebCore/html/HTMLTrackElement.h:-51
&gt; &gt;      KURL src() const;
&gt; &gt; +    void setSrc(const String&amp;);
&gt; &gt; +
&gt; &gt;      String kind() const;
&gt; &gt; +    void setKind(const String&amp;);
&gt; &gt; +
&gt; &gt;      String srclang() const;
&gt; &gt; +    void setSrclang(const String&amp;);
&gt; &gt; +
&gt; &gt;      String label() const;
&gt; &gt; +    void setLabel(const String&amp;);
&gt; &gt;  
&gt; &gt;      bool isDefault() const;
&gt; &gt; -    void setKind(const String&amp;);
&gt; &gt; -    void setSrc(const String&amp;);
&gt; &gt; -    void setSrclang(const String&amp;);
&gt; &gt; -    void setLabel(const String&amp;);
&gt; 
&gt; This seems like an unneeded change.
&gt; 
It was just drive-by cleanup.

&gt; &gt; Source/WebCore/html/TextTrack.h:70
&gt; &gt; +    static const AtomicString&amp; subtitlesKeyword();
&gt; &gt; +    static const AtomicString&amp; captionsKeyword();
&gt; &gt; +    static const AtomicString&amp; descriptionsKeyword();
&gt; &gt; +    static const AtomicString&amp; chaptersKeyword();
&gt; &gt; +    static const AtomicString&amp; metadataKeyword();
&gt; 
&gt; Do these need to be member functions?
&gt;
Not necessarily. They are also used by HTMLMediaElement and HTMLTrackElement so I thought it would be helpful to give them class scope.

Thanks for the feedback!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115292</attachid>
            <date>2011-11-15 18:33:58 -0800</date>
            <delta_ts>2011-12-01 16:02:28 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch_kind_4.txt</filename>
            <type>text/plain</type>
            <size>27937</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDA4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDExLTExLTE1ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIGFkZFRyYWNrKCkgbXVz
dCB0aHJvdyBhbiBleGNlcHRpb24gaWYgJ2tpbmQnIGlzIHVua25vd24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxOTE1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IG1lZGlhL3RyYWNrL3RyYWNr
LWFkZHRyYWNrLWtpbmQuaHRtbAorICAgICAgICAgICAgICAgbWVkaWEvdHJhY2svdHJhY2sta2lu
ZC5odG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrS2luZENoYW5nZWQpOiBOZXcuIFdp
bGwgYmUgaW1wbGVtZW50ZWQgZm9yIDYyODg1LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6YWRkVHJhY2spOiBUaHJvdyBpZiAgJ2tpbmQnIGlzIG5vdCBhIGtub3duIHZhbHVl
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKTogQ2Fs
bCB0ZXh0VHJhY2tzKCksIGl0IHdpbGwgYWxsb2NhdGUgdGhlIHRyYWNrCisgICAgICAgICAgICBs
aXN0IG9iamVjdCBpZiBuZWNlc3NhcnkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50Ojp0ZXh0VHJhY2tzKTogTmV2ZXIgcmV0dXJuIE5VTEwsIGEgVGV4dFRyYWNrTGlzdCB3aXRo
IG5vIHRyYWNrcworICAgICAgICAgICAgaXMgYWxsb3dlZC4KKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRy
YWNrKTogQWRkIHZhcmlhbnRzIHRvIGRlYWwgd2l0aCBvcHRpb25hbCBwYXJhbWV0ZXJzIHBsdXMK
KyAgICAgICAgICAgIGFuIG1hbmRhdG9yeSBFeGNlcHRpb25Db2RlIHBhcmFtZXRlci4KKyAgICAg
ICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRsOiBhZGRUcmFjayBjYW4gZ2VuZXJhdGUgYW4g
ZXhjZXB0aW9uLgorCisgICAgICAgICogaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOiBraW5kLCBs
YWJlbCwgYW5kIHNyY2xhbmcgYXR0cmlidXRlIGNoYW5nZXMgc2hvdWxkCisgICAgICAgICAgICBw
ZXJjb2xhdGUgZG93biB0aGUgdGhlIFRleHRUcmFjay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmFja0VsZW1lbnQ6OmtpbmQpOiBSZXR1cm4gdGhlIFRleHRUcmFjayBraW5kIGJlY2F1c2UgaXQg
aXMgbm90IG5lY2Vzc2FyaWx5IHRoZQorICAgICAgICAgICAgc2FtZSBhcyB0aGUgYXR0cmlidXRl
IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyYWNrRWxlbWVudDo6ZW5zdXJlVHJhY2sp
OiBPbmx5IHBhc3MgbGVnYWwgJ2tpbmQnIGtleXdvcmRzIHRvIGNyZWF0ZSBhIFRleHRUcmFjay4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6OnRleHRUcmFja0tpbmRDaGFuZ2Vk
KTogTm90aWZ5IHBhcmVudCBlbGVtZW50LCBpZiBhbnkuCisgICAgICAgICogaHRtbC9IVE1MVHJh
Y2tFbGVtZW50Lmg6CisKKyAgICAgICAgKiBodG1sL1RleHRUcmFjay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2s6OnN1YnRpdGxlc0tleXdvcmQpOiBOZXcsIHJldHVybiBsZWdhbCBr
aW5kIGF0dHJpYnV0ZSB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6Y2FwdGlv
bnNLZXl3b3JkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OmRlc2NyaXB0
aW9uc0tleXdvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6Y2hhcHRl
cnNLZXl3b3JkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6Om1ldGFkYXRh
S2V5d29yZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpUZXh0VHJhY2sp
OiBDYWxsIHNldEtpbmQgdG8gbWFrZSBzdXJlIG1fa2luZCBpcyBhbHdheXMgc2V0IHRvIGxlZ2Fs
IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjppc1ZhbGlkS2luZEtleXdvcmQp
OiBOZXcsIHZhbGlkYXRlICdraW5kJyB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFj
azo6c2V0S2luZCk6IE9ubHkgYWxsb3cgbGVnYWwgdmFsdWVzLgorICAgICAgICAqIGh0bWwvVGV4
dFRyYWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OmtpbmQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrOjpsYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6
OnNldExhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6bGFuZ3VhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpzZXRMYW5ndWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2s6OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpt
b2RlKToKKwogMjAxMS0xMS0xMiAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tp
YS5jb20+CiAKICAgICAgICAgW1F0XVtTeW1iaWFuXSBSZW1vdmUgc3VwcG9ydCBmb3IgV0lOU0NX
IGNvbXBpbGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDEwMDA4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw2ICs4OTQsMTEgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojp0ZXh0VHJhY2tNb2RlQ2hhbgogICAgIC8vIEZJWE1FKDYyODg1KTogSW1wbGVtZW50
LgogfQogCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja0tpbmRDaGFuZ2VkKFRleHRU
cmFjayopCit7CisgICAgLy8gRklYTUUoNjI4ODUpOiBJbXBsZW1lbnQuCit9CisKIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrQWRkQ3VlcyhUZXh0VHJhY2sqLCBjb25zdCBUZXh0VHJh
Y2tDdWVMaXN0KiBjdWVzKSAKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1ZXMtPmxl
bmd0aCgpOyArK2kpCkBAIC0yMDE1LDIzICsyMDIwLDM4IEBAIGZsb2F0IEhUTUxNZWRpYUVsZW1l
bnQ6OnBlcmNlbnRMb2FkZWQoKSAKIH0KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLVBhc3NS
ZWZQdHI8VGV4dFRyYWNrPiBIVE1MTWVkaWFFbGVtZW50OjphZGRUcmFjayhjb25zdCBTdHJpbmcm
IGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCitQYXNz
UmVmUHRyPFRleHRUcmFjaz4gSFRNTE1lZGlhRWxlbWVudDo6YWRkVHJhY2soY29uc3QgU3RyaW5n
JiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYmtp
dFZpZGVvVHJhY2tFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gRklYTUUo
NzE5MTUpOiBhZGRUcmFjayBzaG91bGQgdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24gaWYg
J2tpbmQnIGlzIGFuIHVua25vd24gdmFsdWUuCisgICAgLy8gNC44LjEwLjEyLjQgVGV4dCB0cmFj
ayBBUEkKKyAgICAvLyBUaGUgYWRkVGV4dFRyYWNrKGtpbmQsIGxhYmVsLCBsYW5ndWFnZSkgbWV0
aG9kIG9mIG1lZGlhIGVsZW1lbnRzLCB3aGVuIGludm9rZWQsIG11c3QgcnVuIHRoZSBmb2xsb3dp
bmcgc3RlcHM6CisgICAgCisgICAgLy8gMS4gSWYga2luZCBpcyBub3Qgb25lIG9mIHRoZSBmb2xs
b3dpbmcgc3RyaW5ncywgdGhlbiB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbiBhbmQgYWJv
cnQgdGhlc2Ugc3RlcHMKKyAgICBpZiAoIVRleHRUcmFjazo6aXNWYWxpZEtpbmRLZXl3b3JkKGtp
bmQpKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgLy8gMi4gSWYgdGhlIGxhYmVsIGFyZ3VtZW50IHdhcyBvbWl0dGVkLCBsZXQgbGFi
ZWwgYmUgdGhlIGVtcHR5IHN0cmluZy4KKyAgICAvLyAzLiBJZiB0aGUgbGFuZ3VhZ2UgYXJndW1l
bnQgd2FzIG9taXR0ZWQsIGxldCBsYW5ndWFnZSBiZSB0aGUgZW1wdHkgc3RyaW5nLgorICAgIC8v
IDQuIENyZWF0ZSBhIG5ldyBUZXh0VHJhY2sgb2JqZWN0LgogICAgIFJlZlB0cjxUZXh0VHJhY2s+
IHRleHRUcmFjayA9IFRleHRUcmFjazo6Y3JlYXRlKEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCB0aGlzLCBraW5kLCBsYWJlbCwgbGFuZ3VhZ2UpOworCisgICAgLy8g
NS4gQ3JlYXRlIGEgbmV3IHRleHQgdHJhY2sgY29ycmVzcG9uZGluZyB0byB0aGUgbmV3IG9iamVj
dCwgYW5kIHNldCBpdHMgdGV4dCB0cmFjayBraW5kIHRvIGtpbmQsIGl0cyB0ZXh0IAorICAgIC8v
IHRyYWNrIGxhYmVsIHRvIGxhYmVsLCBpdHMgdGV4dCB0cmFjayBsYW5ndWFnZSB0byBsYW5ndWFn
ZSwgaXRzIHRleHQgdHJhY2sgcmVhZGluZXNzIHN0YXRlIHRvIHRoZSB0ZXh0IHRyYWNrCisgICAg
Ly8gbG9hZGVkIHN0YXRlLCBpdHMgdGV4dCB0cmFjayBtb2RlIHRvIHRoZSB0ZXh0IHRyYWNrIGhp
ZGRlbiBtb2RlLCBhbmQgaXRzIHRleHQgdHJhY2sgbGlzdCBvZiBjdWVzIHRvIGFuIGVtcHR5IGxp
c3QuCisgICAgCisgICAgLy8gNi4gQWRkIHRoZSBuZXcgdGV4dCB0cmFjayB0byB0aGUgbWVkaWEg
ZWxlbWVudCdzIGxpc3Qgb2YgdGV4dCB0cmFja3MuCiAgICAgYWRkVGV4dFRyYWNrKHRleHRUcmFj
ayk7CisKICAgICByZXR1cm4gdGV4dFRyYWNrLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjphZGRUZXh0VHJhY2soUGFzc1JlZlB0cjxUZXh0VHJhY2s+IHRyYWNrKQogewot
ICAgIGlmICghbV90ZXh0VHJhY2tzKQotICAgICAgICBtX3RleHRUcmFja3MgPSBUZXh0VHJhY2tM
aXN0OjpjcmVhdGUodGhpcywgQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOwotICAgIG1fdGV4dFRyYWNrcy0+YXBwZW5kKHRyYWNrKTsKLQorICAgIHRleHRUcmFja3Mo
KS0+YXBwZW5kKHRyYWNrKTsKICAgICBjb25maWd1cmVUZXh0VHJhY2tzKCk7CiB9CiAKQEAgLTIw
NzYsMTUgKzIwOTYsMTUgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJh
YwogICAgIH0KIH0KIAotVGV4dFRyYWNrTGlzdCogSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNr
cygpIGNvbnN0IAorVGV4dFRyYWNrTGlzdCogSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrcygp
IAogewogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2Via2l0VmlkZW9UcmFja0Vu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobV90ZXh0VHJhY2tzKQotICAg
ICAgICByZXR1cm4gbV90ZXh0VHJhY2tzLmdldCgpOworICAgIGlmICghbV90ZXh0VHJhY2tzKQor
ICAgICAgICBtX3RleHRUcmFja3MgPSBUZXh0VHJhY2tMaXN0OjpjcmVhdGUodGhpcywgQWN0aXZl
RE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogCi0gICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIG1fdGV4dFRyYWNrcy5nZXQoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50
Ojp0cmFja1dhc0FkZGVkKEhUTUxUcmFja0VsZW1lbnQqIHRyYWNrRWxlbWVudCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAxMDAwODYpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTg3LDggKzE4NywxMSBAQCBwdWJsaWM6CiAgICAgZmxvYXQgcGVyY2VudExvYWRlZCgpIGNvbnN0
OwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIFBhc3NSZWZQdHI8VGV4dFRyYWNrPiBh
ZGRUcmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwgPSAiIiwgY29u
c3QgU3RyaW5nJiBsYW5ndWFnZSA9ICIiKTsKLSAgICBUZXh0VHJhY2tMaXN0KiB0ZXh0VHJhY2tz
KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxUZXh0VHJhY2s+IGFkZFRyYWNrKGNvbnN0IFN0cmlu
ZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8VGV4dFRyYWNrPiBhZGRUcmFjayhjb25zdCBT
dHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBhZGRUcmFjayhraW5kLCBsYWJlbCwgZW1wdHlTdHJpbmcoKSwgZWMpOyB9CisgICAgUGFz
c1JlZlB0cjxUZXh0VHJhY2s+IGFkZFRyYWNrKGNvbnN0IFN0cmluZyYga2luZCwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgcmV0dXJuIGFkZFRyYWNrKGtpbmQsIGVtcHR5U3RyaW5nKCksIGVtcHR5U3Ry
aW5nKCksIGVjKTsgfQorCisgICAgVGV4dFRyYWNrTGlzdCogdGV4dFRyYWNrcygpOwogCiAgICAg
dm9pZCBhZGRUZXh0VHJhY2soUGFzc1JlZlB0cjxUZXh0VHJhY2s+KTsKIApAQCAtMTk3LDYgKzIw
MCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRleHRUcmFja0NsaWVudAogICAgIHZpcnR1YWwgdm9p
ZCB0ZXh0VHJhY2tSZWFkeVN0YXRlQ2hhbmdlZChUZXh0VHJhY2sqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdGV4dFRyYWNrS2luZENoYW5nZWQoVGV4dFRyYWNrKik7CiAgICAgdmlydHVhbCB2b2lkIHRl
eHRUcmFja01vZGVDaGFuZ2VkKFRleHRUcmFjayopOwogICAgIHZpcnR1YWwgdm9pZCB0ZXh0VHJh
Y2tBZGRDdWVzKFRleHRUcmFjayosIGNvbnN0IFRleHRUcmFja0N1ZUxpc3QqKTsKICAgICB2aXJ0
dWFsIHZvaWQgdGV4dFRyYWNrUmVtb3ZlQ3VlcyhUZXh0VHJhY2sqLCBjb25zdCBUZXh0VHJhY2tD
dWVMaXN0Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5pZGwJ
KHJldmlzaW9uIDEwMDA4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsOCBAQCBtb2R1bGUgaHRtbCB7CiAj
ZW5kaWYKIAogI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPX1RSQUNLKSAmJiBFTkFCTEVfVklERU9f
VFJBQ0sKLSAgICBbRW5hYmxlZEF0UnVudGltZT13ZWJraXRWaWRlb1RyYWNrXSBUZXh0VHJhY2sg
YWRkVHJhY2soaW4gRE9NU3RyaW5nIGtpbmQsIGluIFtPcHRpb25hbF0gRE9NU3RyaW5nIGxhYmVs
LCBpbiBbT3B0aW9uYWxdIERPTVN0cmluZyBsYW5ndWFnZSk7CisgICAgW0VuYWJsZWRBdFJ1bnRp
bWU9d2Via2l0VmlkZW9UcmFja10gVGV4dFRyYWNrIGFkZFRyYWNrKGluIERPTVN0cmluZyBraW5k
LCBpbiBbT3B0aW9uYWxdIERPTVN0cmluZyBsYWJlbCwgaW4gW09wdGlvbmFsXSBET01TdHJpbmcg
bGFuZ3VhZ2UpCisgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWU9d2Via2l0VmlkZW9UcmFja10gVGV4dFRyYWNrTGlz
dCB0ZXh0VHJhY2tzOwogI2VuZGlmCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VHJhY2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
cmFja0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDAwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUcmFja0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSwxNSBAQCB2
b2lkIEhUTUxUcmFja0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoCiAgICAgaWYgKGF0dHJOYW1l
ID09IHNyY0F0dHIpIHsKICAgICAgICAgaWYgKCFnZXRBdHRyaWJ1dGUoc3JjQXR0cikuaXNFbXB0
eSgpICYmIG1lZGlhRWxlbWVudCgpKQogICAgICAgICAgICAgc2NoZWR1bGVMb2FkKCk7Ci0gICAg
fQorCisgICAgLy8gNC44LjEwLjEyLjMgU291cmNpbmcgb3V0LW9mLWJhbmQgdGV4dCB0cmFja3MK
KyAgICAvLyBBcyB0aGUga2luZCwgbGFiZWwsIGFuZCBzcmNsYW5nIGF0dHJpYnV0ZXMgYXJlIHNl
dCwgY2hhbmdlZCwgb3IgcmVtb3ZlZCwgdGhlIHRleHQgdHJhY2sgbXVzdCB1cGRhdGUgYWNjb3Jk
aW5nbHkuLi4KKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGtpbmRBdHRyKQorICAgICAgICB0
cmFjaygpLT5zZXRLaW5kKGF0dHItPnZhbHVlKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IGxhYmVsQXR0cikKKyAgICAgICAgdHJhY2soKS0+c2V0TGFiZWwoYXR0ci0+dmFsdWUoKSk7Cisg
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gc3JjbGFuZ0F0dHIpCisgICAgICAgIHRyYWNrKCktPnNl
dExhbmd1YWdlKGF0dHItPnZhbHVlKCkpOwogfQogCiBLVVJMIEhUTUxUcmFja0VsZW1lbnQ6OnNy
YygpIGNvbnN0CkBAIC0xMTAsNyArMTE4LDcgQEAgdm9pZCBIVE1MVHJhY2tFbGVtZW50OjpzZXRT
cmMoY29uc3QgU3RyaQogCiBTdHJpbmcgSFRNTFRyYWNrRWxlbWVudDo6a2luZCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShraW5kQXR0cik7CisgICAgcmV0dXJuIHRyYWNrKCkt
PmtpbmQoKTsKIH0KIAogdm9pZCBIVE1MVHJhY2tFbGVtZW50OjpzZXRLaW5kKGNvbnN0IFN0cmlu
ZyYga2luZCkKQEAgLTE1Myw4ICsxNjEsMTMgQEAgTG9hZGFibGVUZXh0VHJhY2sqIEhUTUxUcmFj
a0VsZW1lbnQ6OmVucwogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2Via2l0Vmlk
ZW9UcmFja0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoIW1fdHJhY2sp
Ci0gICAgICAgIG1fdHJhY2sgPSBMb2FkYWJsZVRleHRUcmFjazo6Y3JlYXRlKHRoaXMsIGtpbmQo
KSwgbGFiZWwoKSwgc3JjbGFuZygpLCBpc0RlZmF1bHQoKSk7CisgICAgaWYgKCFtX3RyYWNrKSB7
CisgICAgICAgIC8vIFRoZSBraW5kIGF0dHJpYnV0ZSBpcyBhbiBlbnVtZXJhdGVkIGF0dHJpYnV0
ZSwgbGltaXRlZCBvbmx5IHRvIGtub3cgdmFsdWVzLiBJdCBkZWZhdWx0cyB0byAnc3VidGl0bGVz
JyBpZiBtaXNzaW5nIG9yIGludmFsaWQuCisgICAgICAgIFN0cmluZyBraW5kID0gZ2V0QXR0cmli
dXRlKGtpbmRBdHRyKTsKKyAgICAgICAgaWYgKCFUZXh0VHJhY2s6OmlzVmFsaWRLaW5kS2V5d29y
ZChraW5kKSkKKyAgICAgICAgICAgIGtpbmQgPSBUZXh0VHJhY2s6OnN1YnRpdGxlc0tleXdvcmQo
KTsKKyAgICAgICAgbV90cmFjayA9IExvYWRhYmxlVGV4dFRyYWNrOjpjcmVhdGUodGhpcywga2lu
ZCwgbGFiZWwoKSwgc3JjbGFuZygpLCBpc0RlZmF1bHQoKSk7CisgICAgfQogICAgIHJldHVybiBt
X3RyYWNrLmdldCgpOwogfQogCkBAIC0yMDMsMTIgKzIxNiwxOCBAQCB2b2lkIEhUTUxUcmFja0Vs
ZW1lbnQ6OnRleHRUcmFja1JlYWR5U3RhCiAgICAgICAgIHJldHVybiBwYXJlbnQtPnRleHRUcmFj
a1JlYWR5U3RhdGVDaGFuZ2VkKHRyYWNrKTsKIH0KICAgICAKK3ZvaWQgSFRNTFRyYWNrRWxlbWVu
dDo6dGV4dFRyYWNrS2luZENoYW5nZWQoVGV4dFRyYWNrKiB0cmFjaykKK3sKKyAgICBpZiAoSFRN
TE1lZGlhRWxlbWVudCogcGFyZW50ID0gbWVkaWFFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBw
YXJlbnQtPnRleHRUcmFja0tpbmRDaGFuZ2VkKHRyYWNrKTsKK30KKwogdm9pZCBIVE1MVHJhY2tF
bGVtZW50Ojp0ZXh0VHJhY2tNb2RlQ2hhbmdlZChUZXh0VHJhY2sqIHRyYWNrKQogewogICAgIGlm
IChIVE1MTWVkaWFFbGVtZW50KiBwYXJlbnQgPSBtZWRpYUVsZW1lbnQoKSkKICAgICAgICAgcmV0
dXJuIHBhcmVudC0+dGV4dFRyYWNrTW9kZUNoYW5nZWQodHJhY2spOwogfQotICAgIAorCiB2b2lk
IEhUTUxUcmFja0VsZW1lbnQ6OnRleHRUcmFja0FkZEN1ZXMoVGV4dFRyYWNrKiB0cmFjaywgY29u
c3QgVGV4dFRyYWNrQ3VlTGlzdCogY3VlcykKIHsKICAgICBpZiAoSFRNTE1lZGlhRWxlbWVudCog
cGFyZW50ID0gbWVkaWFFbGVtZW50KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
cmFja0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFj
a0VsZW1lbnQuaAkocmV2aXNpb24gMTAwMDg2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VHJhY2tFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE2ICs0MCwyMCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFRyYWNrRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgS1VSTCBzcmMoKSBjb25zdDsKKyAgICB2
b2lkIHNldFNyYyhjb25zdCBTdHJpbmcmKTsKKwogICAgIFN0cmluZyBraW5kKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRLaW5kKGNvbnN0IFN0cmluZyYpOworCiAgICAgU3RyaW5nIHNyY2xhbmcoKSBj
b25zdDsKKyAgICB2b2lkIHNldFNyY2xhbmcoY29uc3QgU3RyaW5nJik7CisKICAgICBTdHJpbmcg
bGFiZWwoKSBjb25zdDsKKyAgICB2b2lkIHNldExhYmVsKGNvbnN0IFN0cmluZyYpOwogCiAgICAg
Ym9vbCBpc0RlZmF1bHQoKSBjb25zdDsKLSAgICB2b2lkIHNldEtpbmQoY29uc3QgU3RyaW5nJik7
Ci0gICAgdm9pZCBzZXRTcmMoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRTcmNsYW5nKGNv
bnN0IFN0cmluZyYpOwotICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBzZXRJc0RlZmF1bHQoYm9vbCk7CisKICAgICBUZXh0VHJhY2sqIHRyYWNrKCk7CiAgICAgCiAg
ICAgdm9pZCBzY2hlZHVsZUxvYWQoKTsKQEAgLTc3LDYgKzgxLDcgQEAgcHJpdmF0ZToKICAgICAv
LyBUZXh0VHJhY2tDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgdGV4dFRyYWNrUmVhZHlTdGF0ZUNo
YW5nZWQoVGV4dFRyYWNrKik7CiAgICAgdmlydHVhbCB2b2lkIHRleHRUcmFja01vZGVDaGFuZ2Vk
KFRleHRUcmFjayopOworICAgIHZpcnR1YWwgdm9pZCB0ZXh0VHJhY2tLaW5kQ2hhbmdlZChUZXh0
VHJhY2sqKTsKICAgICB2aXJ0dWFsIHZvaWQgdGV4dFRyYWNrQWRkQ3VlcyhUZXh0VHJhY2sqLCBj
b25zdCBUZXh0VHJhY2tDdWVMaXN0Kik7CiAgICAgdmlydHVhbCB2b2lkIHRleHRUcmFja1JlbW92
ZUN1ZXMoVGV4dFRyYWNrKiwgY29uc3QgVGV4dFRyYWNrQ3VlTGlzdCopOwogICAgIHZpcnR1YWwg
dm9pZCB0ZXh0VHJhY2tBZGRDdWUoVGV4dFRyYWNrKiwgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFjay5jcHAJKHJldmlzaW9uIDEwMDA4NikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEs
MTUgKzQxLDQ1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgQXRvbWljU3RyaW5n
JiBUZXh0VHJhY2s6OnN1YnRpdGxlc0tleXdvcmQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgQXRvbWljU3RyaW5nLCBzdWJ0aXRsZXMsICgic3VidGl0bGVzIikpOworICAgIHJl
dHVybiBzdWJ0aXRsZXM7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgVGV4dFRyYWNrOjpjYXB0
aW9uc0tleXdvcmQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3Ry
aW5nLCBjYXB0aW9ucywgKCJjYXB0aW9ucyIpKTsKKyAgICByZXR1cm4gY2FwdGlvbnM7Cit9CisK
K2NvbnN0IEF0b21pY1N0cmluZyYgVGV4dFRyYWNrOjpkZXNjcmlwdGlvbnNLZXl3b3JkKCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgZGVzY3JpcHRpb25z
LCAoImRlc2NyaXB0aW9ucyIpKTsKKyAgICByZXR1cm4gZGVzY3JpcHRpb25zOworfQorCitjb25z
dCBBdG9taWNTdHJpbmcmIFRleHRUcmFjazo6Y2hhcHRlcnNLZXl3b3JkKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgY2hhcHRlcnMsICgiY2hhcHRlcnMi
KSk7CisgICAgcmV0dXJuIGNoYXB0ZXJzOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIFRleHRU
cmFjazo6bWV0YWRhdGFLZXl3b3JkKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IEF0b21pY1N0cmluZywgbWV0YWRhdGEsICgibWV0YWRhdGEiKSk7CisgICAgcmV0dXJuIG1ldGFk
YXRhOworfQorCiBUZXh0VHJhY2s6OlRleHRUcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBUZXh0VHJhY2tDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBraW5kLCBjb25z
dCBTdHJpbmcmIGxhYmVsLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlKQogICAgIDogVHJhY2tCYXNl
KGNvbnRleHQsIFRyYWNrQmFzZTo6VGV4dFRyYWNrKQotICAgICwgbV9raW5kKGtpbmQpCiAgICAg
LCBtX2xhYmVsKGxhYmVsKQogICAgICwgbV9sYW5ndWFnZShsYW5ndWFnZSkKICAgICAsIG1fcmVh
ZHlTdGF0ZShUZXh0VHJhY2s6Ok5PTkUpCi0gICAgLCBtX21vZGUoVGV4dFRyYWNrOjpTSE9XSU5H
KQorICAgICwgbV9tb2RlKFRleHRUcmFjazo6SElEREVOKQogICAgICwgbV9jbGllbnQoY2xpZW50
KQogeworICAgIHNldEtpbmQoa2luZCk7CiB9CiAKIFRleHRUcmFjazo6flRleHRUcmFjaygpCkBA
IC01OSwyNCArODksMzMgQEAgVGV4dFRyYWNrOjp+VGV4dFRyYWNrKCkKICAgICBjbGVhckNsaWVu
dCgpOwogfQogCi1TdHJpbmcgVGV4dFRyYWNrOjpraW5kKCkgY29uc3QKK2Jvb2wgVGV4dFRyYWNr
Ojppc1ZhbGlkS2luZEtleXdvcmQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
bV9raW5kOwotfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgc3VidGl0bGVzS2V5
d29yZCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KHZhbHVlLCBjYXB0aW9uc0tleXdvcmQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgZGVzY3JpcHRpb25zS2V5d29yZCgpKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCBjaGFwdGVy
c0tleXdvcmQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZSh2YWx1ZSwgbWV0YWRhdGFLZXl3b3JkKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
U3RyaW5nIFRleHRUcmFjazo6bGFiZWwoKSBjb25zdAotewotICAgIHJldHVybiBtX2xhYmVsOwor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotU3RyaW5nIFRleHRUcmFjazo6bGFuZ3VhZ2UoKSBjb25z
dAordm9pZCBUZXh0VHJhY2s6OnNldEtpbmQoY29uc3QgU3RyaW5nJiBraW5kKQogewotICAgIHJl
dHVybiBtX2xhbmd1YWdlOwotfQorICAgIFN0cmluZyBvbGRLaW5kID0gbV9raW5kOwogCi1UZXh0
VHJhY2s6OlJlYWR5U3RhdGUgVGV4dFRyYWNrOjpyZWFkeVN0YXRlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9yZWFkeVN0YXRlOworICAgIGlmIChpc1ZhbGlkS2luZEtleXdvcmQoa2luZCkpCisg
ICAgICAgIG1fa2luZCA9IGtpbmQ7CisgICAgZWxzZQorICAgICAgICBtX2tpbmQgPSBzdWJ0aXRs
ZXNLZXl3b3JkKCk7CisKKyAgICBpZiAobV9jbGllbnQgJiYgb2xkS2luZCAhPSBtX2tpbmQpCisg
ICAgICAgIG1fY2xpZW50LT50ZXh0VHJhY2tLaW5kQ2hhbmdlZCh0aGlzKTsKIH0KIAogdm9pZCBU
ZXh0VHJhY2s6OnNldFJlYWR5U3RhdGUoUmVhZHlTdGF0ZSBzdGF0ZSkKQEAgLTg2LDExICsxMjUs
NiBAQCB2b2lkIFRleHRUcmFjazo6c2V0UmVhZHlTdGF0ZShSZWFkeVN0YXRlCiAgICAgICAgIG1f
Y2xpZW50LT50ZXh0VHJhY2tSZWFkeVN0YXRlQ2hhbmdlZCh0aGlzKTsKIH0KIAotVGV4dFRyYWNr
OjpNb2RlIFRleHRUcmFjazo6bW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbW9kZTsKLX0K
LQogdm9pZCBUZXh0VHJhY2s6OnNldE1vZGUodW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgLy8gNC44LjEwLjEyLjUgT24gc2V0dGluZyB0aGUgbW9kZSwgaWYg
dGhlIG5ldyB2YWx1ZSBpcyBub3QgZWl0aGVyIDAsIDEsIG9yIDIsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL1RleHRUcmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
VGV4dFRyYWNrLmgJKHJldmlzaW9uIDEwMDA4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4
dFRyYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShW
SURFT19UUkFDSykKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJUcmFj
a0Jhc2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CkBAIC0zOSwxMiArNDAsMTEgQEAgY2xhc3MgVGV4dFRyYWNrOwogY2xhc3MgVGV4
dFRyYWNrQ3VlOwogY2xhc3MgVGV4dFRyYWNrQ3VlTGlzdDsKIAotdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKLQogY2xhc3MgVGV4dFRyYWNrQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5UZXh0VHJhY2tDbGllbnQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdGV4dFRyYWNrUmVhZHlT
dGF0ZUNoYW5nZWQoVGV4dFRyYWNrKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0ZXh0VHJhY2tL
aW5kQ2hhbmdlZChUZXh0VHJhY2sqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHRleHRUcmFja01v
ZGVDaGFuZ2VkKFRleHRUcmFjayopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdGV4dFRyYWNrQWRk
Q3VlcyhUZXh0VHJhY2sqLCBjb25zdCBUZXh0VHJhY2tDdWVMaXN0KikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCB0ZXh0VHJhY2tSZW1vdmVDdWVzKFRleHRUcmFjayosIGNvbnN0IFRleHRUcmFja0N1
ZUxpc3QqKSA9IDA7CkBAIC02MCwxNSArNjAsMjcgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0
dWFsIH5UZXh0VHJhY2soKTsKIAotICAgIFN0cmluZyBraW5kKCkgY29uc3Q7Ci0gICAgU3RyaW5n
IGxhYmVsKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGxhbmd1YWdlKCkgY29uc3Q7CisgICAgU3RyaW5n
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICB2b2lkIHNldEtpbmQoY29uc3Qg
U3RyaW5nJik7CisKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzdWJ0aXRsZXNLZXl3
b3JkKCk7CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgY2FwdGlvbnNLZXl3b3JkKCk7
CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZGVzY3JpcHRpb25zS2V5d29yZCgpOwor
ICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGNoYXB0ZXJzS2V5d29yZCgpOworICAgIHN0
YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIG1ldGFkYXRhS2V5d29yZCgpOworICAgIHN0YXRpYyBi
b29sIGlzVmFsaWRLaW5kS2V5d29yZChjb25zdCBTdHJpbmcmKTsKKworICAgIFN0cmluZyBsYWJl
bCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWw7IH0KKyAgICB2b2lkIHNldExhYmVsKGNvbnN0IFN0
cmluZyYgbGFiZWwpIHsgbV9sYWJlbCA9IGxhYmVsOyB9CisKKyAgICBTdHJpbmcgbGFuZ3VhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2xhbmd1YWdlOyB9CisgICAgdm9pZCBzZXRMYW5ndWFnZShjb25z
dCBTdHJpbmcmIGxhbmd1YWdlKSB7IG1fbGFuZ3VhZ2UgPSBsYW5ndWFnZTsgfQogCiAgICAgZW51
bSBSZWFkeVN0YXRlIHsgTk9ORSA9IDAsIExPQURJTkcgPSAxLCBMT0FERUQgPSAyLCBIVE1MX0VS
Uk9SID0gMyB9OwotICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworICAgIFJlYWR5
U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQogCiAgICAg
ZW51bSBNb2RlIHsgRElTQUJMRUQgPSAwLCBISURERU4gPSAxLCBTSE9XSU5HID0gMiB9OwotICAg
IE1vZGUgbW9kZSgpIGNvbnN0OworICAgIE1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
ZTsgfQogICAgIHZvaWQgc2V0TW9kZSh1bnNpZ25lZCBzaG9ydCwgRXhjZXB0aW9uQ29kZSYpOwog
CiAgICAgVGV4dFRyYWNrQ3VlTGlzdCogY3VlcygpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwMDg2
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTEtMTEtMTUgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgYWRkVHJhY2soKSBtdXN0IHRocm93IGFuIGV4Y2VwdGlvbiBpZiAna2luZCcgaXMg
dW5rbm93bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzE5MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IG1lZGlhL3RyYWNrL3RyYWNrLWFkZHRyYWNrLWtpbmQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBtZWRpYS90cmFjay90cmFjay1hZGR0cmFjay1raW5kLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIG1lZGlhL3RyYWNrL3RyYWNrLWtpbmQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBtZWRpYS90cmFjay90cmFjay1raW5kLmh0bWw6IEFkZGVkLgorCiAyMDExLTExLTEyICBB
bm5hIENhdmVuZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgV2ViVlRU
IHBhcnNpbmcgbGF5b3V0IHRlc3RzLiAgUGF0Y2ggYWxzbyBpbmNsdWRlcyBjcmVhdGluZyBhIFRl
eHRUcmFja0N1ZUxpc3QKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWFkZHRy
YWNrLWtpbmQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3Ry
YWNrL3RyYWNrLWFkZHRyYWNrLWtpbmQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stYWRkdHJhY2sta2luZC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKK1Rlc3RzIHRoYXQgdGhlIGFkZFRyYWNrKCkgb25s
eSBhY2NlcHRzIGtub3duICdraW5kJyB2YWx1ZXMuCisKKysrIFRlc3QgaW52YWxpZCAna2luZCcu
CitFWFBFQ1RFRCAodmlkZW8udGV4dFRyYWNrcy5sZW5ndGggPT0gJzAnKSBPSworVEVTVCh2aWRl
by5hZGRUcmFjaygna2FwdGlvbnMnKSkgVEhST1dTKERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSKSBP
SworRVhQRUNURUQgKHZpZGVvLnRleHRUcmFja3MubGVuZ3RoID09ICcwJykgT0sKKworKysgVGVz
dCBhbGwgdmFsaWQgJ2tpbmQnIGtleXdvcmRzLgorUlVOKHZpZGVvLmFkZFRyYWNrKCdzdWJ0aXRs
ZXMnKSkKK0VYUEVDVEVEICh2aWRlby50ZXh0VHJhY2tzLmxlbmd0aCA9PSAnMScpIE9LCitSVU4o
dmlkZW8uYWRkVHJhY2soJ2NhcHRpb25zJykpCitFWFBFQ1RFRCAodmlkZW8udGV4dFRyYWNrcy5s
ZW5ndGggPT0gJzInKSBPSworUlVOKHZpZGVvLmFkZFRyYWNrKCdkZXNjcmlwdGlvbnMnKSkKK0VY
UEVDVEVEICh2aWRlby50ZXh0VHJhY2tzLmxlbmd0aCA9PSAnMycpIE9LCitSVU4odmlkZW8uYWRk
VHJhY2soJ2NoYXB0ZXJzJykpCitFWFBFQ1RFRCAodmlkZW8udGV4dFRyYWNrcy5sZW5ndGggPT0g
JzQnKSBPSworUlVOKHZpZGVvLmFkZFRyYWNrKCdtZXRhZGF0YScpKQorRVhQRUNURUQgKHZpZGVv
LnRleHRUcmFja3MubGVuZ3RoID09ICc1JykgT0sKKworRU5EIE9GIFRFU1QKKwpJbmRleDogTGF5
b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stYWRkdHJhY2sta2luZC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWFkZHRyYWNrLWtpbmQuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWFkZHRyYWNrLWtpbmQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKyAgICA8aGVhZD4KKyAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBj
b250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+CisKKyAgICAgICAgPHNjcmlwdCBz
cmM9Li4vbWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vdmlk
ZW8tdGVzdC5qcz48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdD4KKworICAgICAgICAgICAgdmFy
IHRyYWNrQ291bnQgPSAwOworCisgICAgICAgICAgICBmdW5jdGlvbiBhZGRUcmFjayh0eXBlKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJ1bigidmlkZW8uYWRkVHJhY2soJyIgKyB0
eXBlICsgIicpIik7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby50ZXh0VHJh
Y2tzLmxlbmd0aCIsICsrdHJhY2tDb3VudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZ1bmN0aW9uIHN0YXJ0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaW5kTWVk
aWFFbGVtZW50KCk7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxlbT4rKyBUZXN0
IGludmFsaWQgJ2tpbmQnLjwvZW0+Iik7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2
aWRlby50ZXh0VHJhY2tzLmxlbmd0aCIsIDApOworICAgICAgICAgICAgICAgIHRlc3RFeGNlcHRp
b24oInZpZGVvLmFkZFRyYWNrKCdrYXB0aW9ucycpIiwgIkRPTUV4Y2VwdGlvbi5TWU5UQVhfRVJS
Iik7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby50ZXh0VHJhY2tzLmxlbmd0
aCIsIDApOworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisKKyAgICAgICAgICAg
ICAgICBjb25zb2xlV3JpdGUoIjxlbT4rKyBUZXN0IGFsbCB2YWxpZCAna2luZCcga2V5d29yZHMu
PC9lbT4iKTsKKyAgICAgICAgICAgICAgICBhZGRUcmFjaygic3VidGl0bGVzIik7CisgICAgICAg
ICAgICAgICAgYWRkVHJhY2soImNhcHRpb25zIik7CisgICAgICAgICAgICAgICAgYWRkVHJhY2so
ImRlc2NyaXB0aW9ucyIpOworICAgICAgICAgICAgICAgIGFkZFRyYWNrKCJjaGFwdGVycyIpOwor
ICAgICAgICAgICAgICAgIGFkZFRyYWNrKCJtZXRhZGF0YSIpOworCisgICAgICAgICAgICAgICAg
Y29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9oZWFkPgorICAgIDxib2R5IG9ubG9hZD0i
c3RhcnQoKSI+CisgICAgICAgIDxwPlRlc3RzIHRoYXQgdGhlIGFkZFRyYWNrKCkgb25seSBhY2Nl
cHRzIGtub3duICdraW5kJyB2YWx1ZXMuPC9wPgorICAgICAgICA8dmlkZW8+CisgICAgICAgIDwv
dmlkZW8+CisgICAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJh
Y2svdHJhY2sta2luZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVk
aWEvdHJhY2svdHJhY2sta2luZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9tZWRpYS90cmFjay90cmFjay1raW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5NSBAQAorVGVzdHMgdGhhdCB0aGUgJ2FkZHRyYWNrJyBldmVudCBpcyBmaXJlZCB3
aGVuIGEgVGV4dFRyYWNrIGlzIGNyZWF0ZWQuCisKKworKysgVGVzdCBkZWZhdWx0IGF0dHJpYnV0
ZSB2YWx1ZQorRVhQRUNURUQgKHRyYWNrRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2tpbmQnKSA9PSAn
bnVsbCcpIE9LCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LmtpbmQgPT0gJ3N1YnRpdGxlcycpIE9L
CitFWFBFQ1RFRCAodmlkZW8udGV4dFRyYWNrc1swXS5raW5kID09ICdzdWJ0aXRsZXMnKSBPSwor
CisqKiogU2V0IHRvIGJvZ3VzIHZhbHVlLCBzaG91bGQgcmV0dXJuIGRlZmF1bHQKK3NldCB2aWEg
RE9NCitSVU4odHJhY2tFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgna2luZCcpKQorUlVOKHRyYWNr
RWxlbWVudC5raW5kID0gJ2VuZ2xpc2gtbWV0YWRhdGEnKQorRVhQRUNURUQgKHRyYWNrRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoJ2tpbmQnKSA9PSAnZW5nbGlzaC1tZXRhZGF0YScpIE9LCitFWFBFQ1RF
RCAodHJhY2tFbGVtZW50LmtpbmQgPT0gJ3N1YnRpdGxlcycpIE9LCitFWFBFQ1RFRCAodHJhY2tF
bGVtZW50LnRyYWNrLmtpbmQgPT0gJ3N1YnRpdGxlcycpIE9LCithbmQgdmlhIGF0dHJpYnV0ZQor
UlVOKHRyYWNrRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2tpbmQnKSkKK1JVTih0cmFja0VsZW1l
bnQuc2V0QXR0cmlidXRlKCdraW5kJywgJ2VuZ2xpc2gtbWV0YWRhdGEnKSkKK0VYUEVDVEVEICh0
cmFja0VsZW1lbnQua2luZCA9PSAnc3VidGl0bGVzJykgT0sKK0VYUEVDVEVEICh0cmFja0VsZW1l
bnQudHJhY2sua2luZCA9PSAnc3VidGl0bGVzJykgT0sKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQu
Z2V0QXR0cmlidXRlKCdraW5kJykgPT0gJ2VuZ2xpc2gtbWV0YWRhdGEnKSBPSworCisqKiogU2V0
IHRvIGtub3duIHZhbHVlcworKysgJ3N1YnRpdGxlcycKK3NldCB2aWEgRE9NCitSVU4odHJhY2tF
bGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgna2luZCcpKQorUlVOKHRyYWNrRWxlbWVudC5raW5kID0g
J3N1YnRpdGxlcycpCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LmdldEF0dHJpYnV0ZSgna2luZCcp
ID09ICdzdWJ0aXRsZXMnKSBPSworRVhQRUNURUQgKHRyYWNrRWxlbWVudC5raW5kID09ICdzdWJ0
aXRsZXMnKSBPSworRVhQRUNURUQgKHRyYWNrRWxlbWVudC50cmFjay5raW5kID09ICdzdWJ0aXRs
ZXMnKSBPSworYW5kIHZpYSBhdHRyaWJ1dGUKK1JVTih0cmFja0VsZW1lbnQucmVtb3ZlQXR0cmli
dXRlKCdraW5kJykpCitSVU4odHJhY2tFbGVtZW50LnNldEF0dHJpYnV0ZSgna2luZCcsICdzdWJ0
aXRsZXMnKSkKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQua2luZCA9PSAnc3VidGl0bGVzJykgT0sK
K0VYUEVDVEVEICh0cmFja0VsZW1lbnQudHJhY2sua2luZCA9PSAnc3VidGl0bGVzJykgT0sKK0VY
UEVDVEVEICh0cmFja0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdraW5kJykgPT0gJ3N1YnRpdGxlcycp
IE9LCisKKysrICdjYXB0aW9ucycKK3NldCB2aWEgRE9NCitSVU4odHJhY2tFbGVtZW50LnJlbW92
ZUF0dHJpYnV0ZSgna2luZCcpKQorUlVOKHRyYWNrRWxlbWVudC5raW5kID0gJ2NhcHRpb25zJykK
K0VYUEVDVEVEICh0cmFja0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdraW5kJykgPT0gJ2NhcHRpb25z
JykgT0sKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQua2luZCA9PSAnY2FwdGlvbnMnKSBPSworRVhQ
RUNURUQgKHRyYWNrRWxlbWVudC50cmFjay5raW5kID09ICdjYXB0aW9ucycpIE9LCithbmQgdmlh
IGF0dHJpYnV0ZQorUlVOKHRyYWNrRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2tpbmQnKSkKK1JV
Tih0cmFja0VsZW1lbnQuc2V0QXR0cmlidXRlKCdraW5kJywgJ2NhcHRpb25zJykpCitFWFBFQ1RF
RCAodHJhY2tFbGVtZW50LmtpbmQgPT0gJ2NhcHRpb25zJykgT0sKK0VYUEVDVEVEICh0cmFja0Vs
ZW1lbnQudHJhY2sua2luZCA9PSAnY2FwdGlvbnMnKSBPSworRVhQRUNURUQgKHRyYWNrRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoJ2tpbmQnKSA9PSAnY2FwdGlvbnMnKSBPSworCisrKyAnZGVzY3JpcHRp
b25zJworc2V0IHZpYSBET00KK1JVTih0cmFja0VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdraW5k
JykpCitSVU4odHJhY2tFbGVtZW50LmtpbmQgPSAnZGVzY3JpcHRpb25zJykKK0VYUEVDVEVEICh0
cmFja0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdraW5kJykgPT0gJ2Rlc2NyaXB0aW9ucycpIE9LCitF
WFBFQ1RFRCAodHJhY2tFbGVtZW50LmtpbmQgPT0gJ2Rlc2NyaXB0aW9ucycpIE9LCitFWFBFQ1RF
RCAodHJhY2tFbGVtZW50LnRyYWNrLmtpbmQgPT0gJ2Rlc2NyaXB0aW9ucycpIE9LCithbmQgdmlh
IGF0dHJpYnV0ZQorUlVOKHRyYWNrRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2tpbmQnKSkKK1JV
Tih0cmFja0VsZW1lbnQuc2V0QXR0cmlidXRlKCdraW5kJywgJ2Rlc2NyaXB0aW9ucycpKQorRVhQ
RUNURUQgKHRyYWNrRWxlbWVudC5raW5kID09ICdkZXNjcmlwdGlvbnMnKSBPSworRVhQRUNURUQg
KHRyYWNrRWxlbWVudC50cmFjay5raW5kID09ICdkZXNjcmlwdGlvbnMnKSBPSworRVhQRUNURUQg
KHRyYWNrRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2tpbmQnKSA9PSAnZGVzY3JpcHRpb25zJykgT0sK
KworKysgJ2NoYXB0ZXJzJworc2V0IHZpYSBET00KK1JVTih0cmFja0VsZW1lbnQucmVtb3ZlQXR0
cmlidXRlKCdraW5kJykpCitSVU4odHJhY2tFbGVtZW50LmtpbmQgPSAnY2hhcHRlcnMnKQorRVhQ
RUNURUQgKHRyYWNrRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2tpbmQnKSA9PSAnY2hhcHRlcnMnKSBP
SworRVhQRUNURUQgKHRyYWNrRWxlbWVudC5raW5kID09ICdjaGFwdGVycycpIE9LCitFWFBFQ1RF
RCAodHJhY2tFbGVtZW50LnRyYWNrLmtpbmQgPT0gJ2NoYXB0ZXJzJykgT0sKK2FuZCB2aWEgYXR0
cmlidXRlCitSVU4odHJhY2tFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgna2luZCcpKQorUlVOKHRy
YWNrRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2tpbmQnLCAnY2hhcHRlcnMnKSkKK0VYUEVDVEVEICh0
cmFja0VsZW1lbnQua2luZCA9PSAnY2hhcHRlcnMnKSBPSworRVhQRUNURUQgKHRyYWNrRWxlbWVu
dC50cmFjay5raW5kID09ICdjaGFwdGVycycpIE9LCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50Lmdl
dEF0dHJpYnV0ZSgna2luZCcpID09ICdjaGFwdGVycycpIE9LCisKKysrICdtZXRhZGF0YScKK3Nl
dCB2aWEgRE9NCitSVU4odHJhY2tFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgna2luZCcpKQorUlVO
KHRyYWNrRWxlbWVudC5raW5kID0gJ21ldGFkYXRhJykKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQu
Z2V0QXR0cmlidXRlKCdraW5kJykgPT0gJ21ldGFkYXRhJykgT0sKK0VYUEVDVEVEICh0cmFja0Vs
ZW1lbnQua2luZCA9PSAnbWV0YWRhdGEnKSBPSworRVhQRUNURUQgKHRyYWNrRWxlbWVudC50cmFj
ay5raW5kID09ICdtZXRhZGF0YScpIE9LCithbmQgdmlhIGF0dHJpYnV0ZQorUlVOKHRyYWNrRWxl
bWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2tpbmQnKSkKK1JVTih0cmFja0VsZW1lbnQuc2V0QXR0cmli
dXRlKCdraW5kJywgJ21ldGFkYXRhJykpCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LmtpbmQgPT0g
J21ldGFkYXRhJykgT0sKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQudHJhY2sua2luZCA9PSAnbWV0
YWRhdGEnKSBPSworRVhQRUNURUQgKHRyYWNrRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2tpbmQnKSA9
PSAnbWV0YWRhdGEnKSBPSworCitFTkQgT0YgVEVTVAorCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRp
YS90cmFjay90cmFjay1raW5kLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEv
dHJhY2svdHJhY2sta2luZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEv
dHJhY2svdHJhY2sta2luZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg0IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorCisgICAgICAgIDxzY3JpcHQgc3JjPS4u
L21lZGlhLWZpbGUuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPS4uL3ZpZGVvLXRl
c3QuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQ+CisKKyAgICAgICAgICAgIHZhciB0cmFj
a0VsZW1lbnQ7CisgICAgICAgICAgICBmdW5jdGlvbiBzZXRLaW5kKHZhbHVlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGI+IHNldCB2aWEgRE9NPC9iPiIp
OworICAgICAgICAgICAgICAgIHJ1bigidHJhY2tFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgna2lu
ZCcpIik7CisgICAgICAgICAgICAgICAgcnVuKCJ0cmFja0VsZW1lbnQua2luZCA9ICciICsgdmFs
dWUgKyAiJyIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tFbGVtZW50Lmdl
dEF0dHJpYnV0ZSgna2luZCcpIiwgdmFsdWUpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3Rl
ZCgidHJhY2tFbGVtZW50LmtpbmQiLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVj
dGVkKCJ0cmFja0VsZW1lbnQudHJhY2sua2luZCIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBj
b25zb2xlV3JpdGUoIjxiPiBhbmQgdmlhIGF0dHJpYnV0ZTwvYj4iKTsKKyAgICAgICAgICAgICAg
ICBydW4oInRyYWNrRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2tpbmQnKSIpOworICAgICAgICAg
ICAgICAgIHJ1bigidHJhY2tFbGVtZW50LnNldEF0dHJpYnV0ZSgna2luZCcsICciICsgdmFsdWUg
KyAiJykiKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrRWxlbWVudC5raW5k
IiwgdmFsdWUpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tFbGVtZW50LnRy
YWNrLmtpbmQiLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja0Vs
ZW1lbnQuZ2V0QXR0cmlidXRlKCdraW5kJykiLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgY29u
c29sZVdyaXRlKCIiKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBz
dGFydCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmluZE1lZGlhRWxlbWVudCgp
OworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisKKyAgICAgICAgICAgICAgICB0
cmFja0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJhY2tfMScpOworCisgICAg
ICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8Yj4rKyBUZXN0IGRlZmF1bHQgYXR0cmlidXRlIHZh
bHVlPC9iPiIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tFbGVtZW50Lmdl
dEF0dHJpYnV0ZSgna2luZCcpIiwgbnVsbCk7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVk
KCJ0cmFja0VsZW1lbnQua2luZCIsICJzdWJ0aXRsZXMiKTsKKyAgICAgICAgICAgICAgICB0ZXN0
RXhwZWN0ZWQoInZpZGVvLnRleHRUcmFja3NbMF0ua2luZCIsICJzdWJ0aXRsZXMiKTsKKyAgICAg
ICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworCisgICAgICAgICAgICAgICAgY29uc29sZVdy
aXRlKCI8Yj4qKiogU2V0IHRvIGJvZ3VzIHZhbHVlLCBzaG91bGQgcmV0dXJuIGRlZmF1bHQ8L2I+
Iik7CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8Yj4gc2V0IHZpYSBET008L2I+Iik7
CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gImVuZ2xpc2gtbWV0YWRhdGEiCisgICAgICAg
ICAgICAgICAgcnVuKCJ0cmFja0VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdraW5kJykiKTsKKyAg
ICAgICAgICAgICAgICBydW4oInRyYWNrRWxlbWVudC5raW5kID0gJyIgKyB2YWx1ZSArICInIik7
CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja0VsZW1lbnQuZ2V0QXR0cmlidXRl
KCdraW5kJykiLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja0Vs
ZW1lbnQua2luZCIsICJzdWJ0aXRsZXMiKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InRyYWNrRWxlbWVudC50cmFjay5raW5kIiwgInN1YnRpdGxlcyIpOworICAgICAgICAgICAgICAg
IGNvbnNvbGVXcml0ZSgiPGI+IGFuZCB2aWEgYXR0cmlidXRlPC9iPiIpOworICAgICAgICAgICAg
ICAgIHJ1bigidHJhY2tFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgna2luZCcpIik7CisgICAgICAg
ICAgICAgICAgcnVuKCJ0cmFja0VsZW1lbnQuc2V0QXR0cmlidXRlKCdraW5kJywgJyIgKyB2YWx1
ZSArICInKSIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tFbGVtZW50Lmtp
bmQiLCAic3VidGl0bGVzIik7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja0Vs
ZW1lbnQudHJhY2sua2luZCIsICJzdWJ0aXRsZXMiKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhw
ZWN0ZWQoInRyYWNrRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2tpbmQnKSIsIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworCisgICAgICAgICAgICAgICAgY29uc29sZVdy
aXRlKCI8Yj4qKiogU2V0IHRvIGtub3duIHZhbHVlczwvYj4iKTsKKyAgICAgICAgICAgICAgICBj
b25zb2xlV3JpdGUoIjxiPisrICdzdWJ0aXRsZXMnPC9iPiIpOworICAgICAgICAgICAgICAgIHNl
dEtpbmQoInN1YnRpdGxlcyIpOworCisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8Yj4r
KyAnY2FwdGlvbnMnPC9iPiIpOworICAgICAgICAgICAgICAgIHNldEtpbmQoImNhcHRpb25zIik7
CisKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxiPisrICdkZXNjcmlwdGlvbnMnPC9i
PiIpOworICAgICAgICAgICAgICAgIHNldEtpbmQoImRlc2NyaXB0aW9ucyIpOworCisgICAgICAg
ICAgICAgICAgY29uc29sZVdyaXRlKCI8Yj4rKyAnY2hhcHRlcnMnPC9iPiIpOworICAgICAgICAg
ICAgICAgIHNldEtpbmQoImNoYXB0ZXJzIik7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlV3Jp
dGUoIjxiPisrICdtZXRhZGF0YSc8L2I+Iik7CisgICAgICAgICAgICAgICAgc2V0S2luZCgibWV0
YWRhdGEiKTsKKworICAgICAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHkgb25sb2FkPSJzdGFydCgp
Ij4KKyAgICAgICAgPHA+VGVzdHMgdGhhdCB0aGUgJ2FkZHRyYWNrJyBldmVudCBpcyBmaXJlZCB3
aGVuIGEgVGV4dFRyYWNrIGlzIGNyZWF0ZWQuPC9wPgorICAgICAgICA8dmlkZW8+CisgICAgICAg
ICAgICA8dHJhY2sgaWQ9dHJhY2tfMT4KKyAgICAgICAgPC92aWRlbz4KKyAgICA8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>
<flag name="commit-queue"
          id="114162"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115311</attachid>
            <date>2011-11-15 20:42:28 -0800</date>
            <delta_ts>2011-11-16 07:57:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch_kind_5.txt</filename>
            <type>text/plain</type>
            <size>28013</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDM5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDExLTExLTE1ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIGFkZFRyYWNrKCkgbXVz
dCB0aHJvdyBhbiBleGNlcHRpb24gaWYgJ2tpbmQnIGlzIHVua25vd24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxOTE1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IG1lZGlhL3RyYWNrL3RyYWNr
LWFkZHRyYWNrLWtpbmQuaHRtbAorICAgICAgICAgICAgICAgbWVkaWEvdHJhY2svdHJhY2sta2lu
ZC5odG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrS2luZENoYW5nZWQpOiBOZXcuIFdp
bGwgYmUgaW1wbGVtZW50ZWQgZm9yIDYyODg1LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6YWRkVHJhY2spOiBUaHJvdyBpZiAgJ2tpbmQnIGlzIG5vdCBhIGtub3duIHZhbHVl
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKTogQ2Fs
bCB0ZXh0VHJhY2tzKCksIGl0IHdpbGwgYWxsb2NhdGUgdGhlIHRyYWNrCisgICAgICAgICAgICBs
aXN0IG9iamVjdCBpZiBuZWNlc3NhcnkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50Ojp0ZXh0VHJhY2tzKTogTmV2ZXIgcmV0dXJuIE5VTEwsIGEgVGV4dFRyYWNrTGlzdCB3aXRo
IG5vIHRyYWNrcworICAgICAgICAgICAgaXMgYWxsb3dlZC4KKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRy
YWNrKTogQWRkIHZhcmlhbnRzIHRvIGRlYWwgd2l0aCBvcHRpb25hbCBwYXJhbWV0ZXJzIHBsdXMK
KyAgICAgICAgICAgIGFuIG1hbmRhdG9yeSBFeGNlcHRpb25Db2RlIHBhcmFtZXRlci4KKyAgICAg
ICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRsOiBhZGRUcmFjayBjYW4gZ2VuZXJhdGUgYW4g
ZXhjZXB0aW9uLgorCisgICAgICAgICogaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOiBraW5kLCBs
YWJlbCwgYW5kIHNyY2xhbmcgYXR0cmlidXRlIGNoYW5nZXMgc2hvdWxkCisgICAgICAgICAgICBw
ZXJjb2xhdGUgZG93biB0aGUgdGhlIFRleHRUcmFjay4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmFja0VsZW1lbnQ6OmtpbmQpOiBSZXR1cm4gdGhlIFRleHRUcmFjayBraW5kIGJlY2F1c2UgaXQg
aXMgbm90IG5lY2Vzc2FyaWx5IHRoZQorICAgICAgICAgICAgc2FtZSBhcyB0aGUgYXR0cmlidXRl
IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyYWNrRWxlbWVudDo6ZW5zdXJlVHJhY2sp
OiBPbmx5IHBhc3MgbGVnYWwgJ2tpbmQnIGtleXdvcmRzIHRvIGNyZWF0ZSBhIFRleHRUcmFjay4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6OnRleHRUcmFja0tpbmRDaGFuZ2Vk
KTogTm90aWZ5IHBhcmVudCBlbGVtZW50LCBpZiBhbnkuCisgICAgICAgICogaHRtbC9IVE1MVHJh
Y2tFbGVtZW50Lmg6CisKKyAgICAgICAgKiBodG1sL1RleHRUcmFjay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2s6OnN1YnRpdGxlc0tleXdvcmQpOiBOZXcsIHJldHVybiBsZWdhbCBr
aW5kIGF0dHJpYnV0ZSB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6Y2FwdGlv
bnNLZXl3b3JkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OmRlc2NyaXB0
aW9uc0tleXdvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6Y2hhcHRl
cnNLZXl3b3JkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6Om1ldGFkYXRh
S2V5d29yZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpUZXh0VHJhY2sp
OiBDYWxsIHNldEtpbmQgdG8gbWFrZSBzdXJlIG1fa2luZCBpcyBhbHdheXMgc2V0IHRvIGxlZ2Fs
IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjppc1ZhbGlkS2luZEtleXdvcmQp
OiBOZXcsIHZhbGlkYXRlICdraW5kJyB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFj
azo6c2V0S2luZCk6IE9ubHkgYWxsb3cgbGVnYWwgdmFsdWVzLgorICAgICAgICAqIGh0bWwvVGV4
dFRyYWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OmtpbmQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrOjpsYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6
OnNldExhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6bGFuZ3VhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpzZXRMYW5ndWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2s6OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpt
b2RlKToKKwogMjAxMS0xMS0xNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIEpTIERPTSB3cmFwcGVycyBkZXBlbmQgb24gZGVzdHJ1Y3RvciB0byBk
ZXJlZiBpbXBsIFJlZlB0cnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTAwMDg2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk0LDYgKzg5NCwxMSBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuCiAgICAgLy8gRklYTUUoNjI4ODUpOiBJ
bXBsZW1lbnQuCiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrS2luZENoYW5n
ZWQoVGV4dFRyYWNrKikKK3sKKyAgICAvLyBGSVhNRSg2Mjg4NSk6IEltcGxlbWVudC4KK30KKwog
dm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tBZGRDdWVzKFRleHRUcmFjayosIGNvbnN0
IFRleHRUcmFja0N1ZUxpc3QqIGN1ZXMpIAogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y3Vlcy0+bGVuZ3RoKCk7ICsraSkKQEAgLTIwMTUsMjMgKzIwMjAsMzggQEAgZmxvYXQgSFRNTE1l
ZGlhRWxlbWVudDo6cGVyY2VudExvYWRlZCgpIAogfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQotUGFzc1JlZlB0cjxUZXh0VHJhY2s+IEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRyYWNrKGNvbnN0
IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFn
ZSkKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrPiBIVE1MTWVkaWFFbGVtZW50OjphZGRUcmFjayhjb25z
dCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3Vh
Z2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6d2Via2l0VmlkZW9UcmFja0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAv
LyBGSVhNRSg3MTkxNSk6IGFkZFRyYWNrIHNob3VsZCB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2Vw
dGlvbiBpZiAna2luZCcgaXMgYW4gdW5rbm93biB2YWx1ZS4KKyAgICAvLyA0LjguMTAuMTIuNCBU
ZXh0IHRyYWNrIEFQSQorICAgIC8vIFRoZSBhZGRUZXh0VHJhY2soa2luZCwgbGFiZWwsIGxhbmd1
YWdlKSBtZXRob2Qgb2YgbWVkaWEgZWxlbWVudHMsIHdoZW4gaW52b2tlZCwgbXVzdCBydW4gdGhl
IGZvbGxvd2luZyBzdGVwczoKKyAgICAKKyAgICAvLyAxLiBJZiBraW5kIGlzIG5vdCBvbmUgb2Yg
dGhlIGZvbGxvd2luZyBzdHJpbmdzLCB0aGVuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9u
IGFuZCBhYm9ydCB0aGVzZSBzdGVwcworICAgIGlmICghVGV4dFRyYWNrOjppc1ZhbGlkS2luZEtl
eXdvcmQoa2luZCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICAvLyAyLiBJZiB0aGUgbGFiZWwgYXJndW1lbnQgd2FzIG9taXR0ZWQs
IGxldCBsYWJlbCBiZSB0aGUgZW1wdHkgc3RyaW5nLgorICAgIC8vIDMuIElmIHRoZSBsYW5ndWFn
ZSBhcmd1bWVudCB3YXMgb21pdHRlZCwgbGV0IGxhbmd1YWdlIGJlIHRoZSBlbXB0eSBzdHJpbmcu
CisgICAgLy8gNC4gQ3JlYXRlIGEgbmV3IFRleHRUcmFjayBvYmplY3QuCiAgICAgUmVmUHRyPFRl
eHRUcmFjaz4gdGV4dFRyYWNrID0gVGV4dFRyYWNrOjpjcmVhdGUoQWN0aXZlRE9NT2JqZWN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMsIGtpbmQsIGxhYmVsLCBsYW5ndWFnZSk7CisK
KyAgICAvLyA1LiBDcmVhdGUgYSBuZXcgdGV4dCB0cmFjayBjb3JyZXNwb25kaW5nIHRvIHRoZSBu
ZXcgb2JqZWN0LCBhbmQgc2V0IGl0cyB0ZXh0IHRyYWNrIGtpbmQgdG8ga2luZCwgaXRzIHRleHQg
CisgICAgLy8gdHJhY2sgbGFiZWwgdG8gbGFiZWwsIGl0cyB0ZXh0IHRyYWNrIGxhbmd1YWdlIHRv
IGxhbmd1YWdlLCBpdHMgdGV4dCB0cmFjayByZWFkaW5lc3Mgc3RhdGUgdG8gdGhlIHRleHQgdHJh
Y2sKKyAgICAvLyBsb2FkZWQgc3RhdGUsIGl0cyB0ZXh0IHRyYWNrIG1vZGUgdG8gdGhlIHRleHQg
dHJhY2sgaGlkZGVuIG1vZGUsIGFuZCBpdHMgdGV4dCB0cmFjayBsaXN0IG9mIGN1ZXMgdG8gYW4g
ZW1wdHkgbGlzdC4KKyAgICAKKyAgICAvLyA2LiBBZGQgdGhlIG5ldyB0ZXh0IHRyYWNrIHRvIHRo
ZSBtZWRpYSBlbGVtZW50J3MgbGlzdCBvZiB0ZXh0IHRyYWNrcy4KICAgICBhZGRUZXh0VHJhY2so
dGV4dFRyYWNrKTsKKwogICAgIHJldHVybiB0ZXh0VHJhY2sucmVsZWFzZSgpOwogfQogCiB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhQYXNzUmVmUHRyPFRleHRUcmFjaz4gdHJh
Y2spCiB7Ci0gICAgaWYgKCFtX3RleHRUcmFja3MpCi0gICAgICAgIG1fdGV4dFRyYWNrcyA9IFRl
eHRUcmFja0xpc3Q6OmNyZWF0ZSh0aGlzLCBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7Ci0gICAgbV90ZXh0VHJhY2tzLT5hcHBlbmQodHJhY2spOwotCisgICAgdGV4
dFRyYWNrcygpLT5hcHBlbmQodHJhY2spOwogICAgIGNvbmZpZ3VyZVRleHRUcmFja3MoKTsKIH0K
IApAQCAtMjA3NiwxNSArMjA5NiwxNSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3Vy
ZVRleHRUcmFjCiAgICAgfQogfQogCi1UZXh0VHJhY2tMaXN0KiBIVE1MTWVkaWFFbGVtZW50Ojp0
ZXh0VHJhY2tzKCkgY29uc3QgCitUZXh0VHJhY2tMaXN0KiBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0
VHJhY2tzKCkgCiB7CiAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJraXRWaWRl
b1RyYWNrRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChtX3RleHRUcmFj
a3MpCi0gICAgICAgIHJldHVybiBtX3RleHRUcmFja3MuZ2V0KCk7CisgICAgaWYgKCFtX3RleHRU
cmFja3MpCisgICAgICAgIG1fdGV4dFRyYWNrcyA9IFRleHRUcmFja0xpc3Q6OmNyZWF0ZSh0aGlz
LCBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAKLSAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gbV90ZXh0VHJhY2tzLmdldCgpOwogfQogCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnRyYWNrV2FzQWRkZWQoSFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVtZW50KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDEwMDA4
NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xODcsOCArMTg3LDExIEBAIHB1YmxpYzoKICAgICBmbG9hdCBwZXJjZW50TG9hZGVk
KCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgUGFzc1JlZlB0cjxUZXh0
VHJhY2s+IGFkZFRyYWNrKGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCA9
ICIiLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlID0gIiIpOwotICAgIFRleHRUcmFja0xpc3QqIHRl
eHRUcmFja3MoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFRleHRUcmFjaz4gYWRkVHJhY2soY29u
c3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBTdHJpbmcmIGxhbmd1
YWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxUZXh0VHJhY2s+IGFkZFRyYWNr
KGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgcmV0dXJuIGFkZFRyYWNrKGtpbmQsIGxhYmVsLCBlbXB0eVN0cmluZygpLCBlYyk7IH0K
KyAgICBQYXNzUmVmUHRyPFRleHRUcmFjaz4gYWRkVHJhY2soY29uc3QgU3RyaW5nJiBraW5kLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkVHJhY2soa2luZCwgZW1wdHlTdHJpbmcoKSwg
ZW1wdHlTdHJpbmcoKSwgZWMpOyB9CisKKyAgICBUZXh0VHJhY2tMaXN0KiB0ZXh0VHJhY2tzKCk7
CiAKICAgICB2b2lkIGFkZFRleHRUcmFjayhQYXNzUmVmUHRyPFRleHRUcmFjaz4pOwogCkBAIC0x
OTcsNiArMjAwLDcgQEAgcHVibGljOgogCiAgICAgLy8gVGV4dFRyYWNrQ2xpZW50CiAgICAgdmly
dHVhbCB2b2lkIHRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRleHRUcmFjayopOworICAgIHZp
cnR1YWwgdm9pZCB0ZXh0VHJhY2tLaW5kQ2hhbmdlZChUZXh0VHJhY2sqKTsKICAgICB2aXJ0dWFs
IHZvaWQgdGV4dFRyYWNrTW9kZUNoYW5nZWQoVGV4dFRyYWNrKik7CiAgICAgdmlydHVhbCB2b2lk
IHRleHRUcmFja0FkZEN1ZXMoVGV4dFRyYWNrKiwgY29uc3QgVGV4dFRyYWNrQ3VlTGlzdCopOwog
ICAgIHZpcnR1YWwgdm9pZCB0ZXh0VHJhY2tSZW1vdmVDdWVzKFRleHRUcmFjayosIGNvbnN0IFRl
eHRUcmFja0N1ZUxpc3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmlkbAkocmV2aXNpb24gMTAwMDg2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw4IEBAIG1vZHVsZSBo
dG1sIHsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChFTkFCTEVfVklERU9fVFJBQ0spICYmIEVOQUJM
RV9WSURFT19UUkFDSwotICAgIFtFbmFibGVkQXRSdW50aW1lPXdlYmtpdFZpZGVvVHJhY2tdIFRl
eHRUcmFjayBhZGRUcmFjayhpbiBET01TdHJpbmcga2luZCwgaW4gW09wdGlvbmFsXSBET01TdHJp
bmcgbGFiZWwsIGluIFtPcHRpb25hbF0gRE9NU3RyaW5nIGxhbmd1YWdlKTsKKyAgICBbRW5hYmxl
ZEF0UnVudGltZT13ZWJraXRWaWRlb1RyYWNrXSBUZXh0VHJhY2sgYWRkVHJhY2soaW4gRE9NU3Ry
aW5nIGtpbmQsIGluIFtPcHRpb25hbF0gRE9NU3RyaW5nIGxhYmVsLCBpbiBbT3B0aW9uYWxdIERP
TVN0cmluZyBsYW5ndWFnZSkKKyAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZT13ZWJraXRWaWRlb1RyYWNrXSBUZXh0
VHJhY2tMaXN0IHRleHRUcmFja3M7CiAjZW5kaWYKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwMDA4NikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1
LDE1IEBAIHZvaWQgSFRNTFRyYWNrRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCgKICAgICBpZiAo
YXR0ck5hbWUgPT0gc3JjQXR0cikgewogICAgICAgICBpZiAoIWdldEF0dHJpYnV0ZShzcmNBdHRy
KS5pc0VtcHR5KCkgJiYgbWVkaWFFbGVtZW50KCkpCiAgICAgICAgICAgICBzY2hlZHVsZUxvYWQo
KTsKLSAgICB9CisKKyAgICAvLyA0LjguMTAuMTIuMyBTb3VyY2luZyBvdXQtb2YtYmFuZCB0ZXh0
IHRyYWNrcworICAgIC8vIEFzIHRoZSBraW5kLCBsYWJlbCwgYW5kIHNyY2xhbmcgYXR0cmlidXRl
cyBhcmUgc2V0LCBjaGFuZ2VkLCBvciByZW1vdmVkLCB0aGUgdGV4dCB0cmFjayBtdXN0IHVwZGF0
ZSBhY2NvcmRpbmdseS4uLgorICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0ga2luZEF0dHIpCisg
ICAgICAgIHRyYWNrKCktPnNldEtpbmQoYXR0ci0+dmFsdWUoKSk7CisgICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gbGFiZWxBdHRyKQorICAgICAgICB0cmFjaygpLT5zZXRMYWJlbChhdHRyLT52YWx1
ZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBzcmNsYW5nQXR0cikKKyAgICAgICAgdHJh
Y2soKS0+c2V0TGFuZ3VhZ2UoYXR0ci0+dmFsdWUoKSk7CiB9CiAKIEtVUkwgSFRNTFRyYWNrRWxl
bWVudDo6c3JjKCkgY29uc3QKQEAgLTEwOCw5ICsxMTYsOSBAQCB2b2lkIEhUTUxUcmFja0VsZW1l
bnQ6OnNldFNyYyhjb25zdCBTdHJpCiAgICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIHVybCk7CiB9
CiAKLVN0cmluZyBIVE1MVHJhY2tFbGVtZW50OjpraW5kKCkgY29uc3QKK1N0cmluZyBIVE1MVHJh
Y2tFbGVtZW50OjpraW5kKCkKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGtpbmRBdHRyKTsK
KyAgICByZXR1cm4gdHJhY2soKS0+a2luZCgpOwogfQogCiB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6
OnNldEtpbmQoY29uc3QgU3RyaW5nJiBraW5kKQpAQCAtMTUzLDggKzE2MSwxMyBAQCBMb2FkYWJs
ZVRleHRUcmFjayogSFRNTFRyYWNrRWxlbWVudDo6ZW5zCiAgICAgaWYgKCFSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjp3ZWJraXRWaWRlb1RyYWNrRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIGlmICghbV90cmFjaykKLSAgICAgICAgbV90cmFjayA9IExvYWRhYmxlVGV4dFRyYWNr
OjpjcmVhdGUodGhpcywga2luZCgpLCBsYWJlbCgpLCBzcmNsYW5nKCksIGlzRGVmYXVsdCgpKTsK
KyAgICBpZiAoIW1fdHJhY2spIHsKKyAgICAgICAgLy8gVGhlIGtpbmQgYXR0cmlidXRlIGlzIGFu
IGVudW1lcmF0ZWQgYXR0cmlidXRlLCBsaW1pdGVkIG9ubHkgdG8ga25vdyB2YWx1ZXMuIEl0IGRl
ZmF1bHRzIHRvICdzdWJ0aXRsZXMnIGlmIG1pc3Npbmcgb3IgaW52YWxpZC4KKyAgICAgICAgU3Ry
aW5nIGtpbmQgPSBnZXRBdHRyaWJ1dGUoa2luZEF0dHIpOworICAgICAgICBpZiAoIVRleHRUcmFj
azo6aXNWYWxpZEtpbmRLZXl3b3JkKGtpbmQpKQorICAgICAgICAgICAga2luZCA9IFRleHRUcmFj
azo6c3VidGl0bGVzS2V5d29yZCgpOworICAgICAgICBtX3RyYWNrID0gTG9hZGFibGVUZXh0VHJh
Y2s6OmNyZWF0ZSh0aGlzLCBraW5kLCBsYWJlbCgpLCBzcmNsYW5nKCksIGlzRGVmYXVsdCgpKTsK
KyAgICB9CiAgICAgcmV0dXJuIG1fdHJhY2suZ2V0KCk7CiB9CiAKQEAgLTIwMywxMiArMjE2LDE4
IEBAIHZvaWQgSFRNTFRyYWNrRWxlbWVudDo6dGV4dFRyYWNrUmVhZHlTdGEKICAgICAgICAgcmV0
dXJuIHBhcmVudC0+dGV4dFRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQodHJhY2spOwogfQogICAgIAor
dm9pZCBIVE1MVHJhY2tFbGVtZW50Ojp0ZXh0VHJhY2tLaW5kQ2hhbmdlZChUZXh0VHJhY2sqIHRy
YWNrKQoreworICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBwYXJlbnQgPSBtZWRpYUVsZW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIHBhcmVudC0+dGV4dFRyYWNrS2luZENoYW5nZWQodHJhY2spOwor
fQorCiB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuZ2VkKFRleHRUcmFj
ayogdHJhY2spCiB7CiAgICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIHBhcmVudCA9IG1lZGlhRWxl
bWVudCgpKQogICAgICAgICByZXR1cm4gcGFyZW50LT50ZXh0VHJhY2tNb2RlQ2hhbmdlZCh0cmFj
ayk7CiB9Ci0gICAgCisKIHZvaWQgSFRNTFRyYWNrRWxlbWVudDo6dGV4dFRyYWNrQWRkQ3VlcyhU
ZXh0VHJhY2sqIHRyYWNrLCBjb25zdCBUZXh0VHJhY2tDdWVMaXN0KiBjdWVzKQogewogICAgIGlm
IChIVE1MTWVkaWFFbGVtZW50KiBwYXJlbnQgPSBtZWRpYUVsZW1lbnQoKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCShyZXZpc2lvbiAxMDAwODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
MTYgKzQwLDIwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MVHJhY2tFbGVt
ZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICBLVVJM
IHNyYygpIGNvbnN0OwotICAgIFN0cmluZyBraW5kKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHNyY2xh
bmcoKSBjb25zdDsKLSAgICBTdHJpbmcgbGFiZWwoKSBjb25zdDsKKyAgICB2b2lkIHNldFNyYyhj
b25zdCBTdHJpbmcmKTsKIAotICAgIGJvb2wgaXNEZWZhdWx0KCkgY29uc3Q7CisgICAgU3RyaW5n
IGtpbmQoKTsKICAgICB2b2lkIHNldEtpbmQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRT
cmMoY29uc3QgU3RyaW5nJik7CisKKyAgICBTdHJpbmcgc3JjbGFuZygpIGNvbnN0OwogICAgIHZv
aWQgc2V0U3JjbGFuZyhjb25zdCBTdHJpbmcmKTsKKworICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0
OwogICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgU3RyaW5nJik7CisKKyAgICBib29sIGlzRGVmYXVs
dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0SXNEZWZhdWx0KGJvb2wpOworCiAgICAgVGV4dFRyYWNr
KiB0cmFjaygpOwogICAgIAogICAgIHZvaWQgc2NoZWR1bGVMb2FkKCk7CkBAIC03Nyw2ICs4MSw3
IEBAIHByaXZhdGU6CiAgICAgLy8gVGV4dFRyYWNrQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIHRl
eHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRleHRUcmFjayopOwogICAgIHZpcnR1YWwgdm9pZCB0
ZXh0VHJhY2tNb2RlQ2hhbmdlZChUZXh0VHJhY2sqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4dFRy
YWNrS2luZENoYW5nZWQoVGV4dFRyYWNrKik7CiAgICAgdmlydHVhbCB2b2lkIHRleHRUcmFja0Fk
ZEN1ZXMoVGV4dFRyYWNrKiwgY29uc3QgVGV4dFRyYWNrQ3VlTGlzdCopOwogICAgIHZpcnR1YWwg
dm9pZCB0ZXh0VHJhY2tSZW1vdmVDdWVzKFRleHRUcmFjayosIGNvbnN0IFRleHRUcmFja0N1ZUxp
c3QqKTsKICAgICB2aXJ0dWFsIHZvaWQgdGV4dFRyYWNrQWRkQ3VlKFRleHRUcmFjayosIFBhc3NS
ZWZQdHI8VGV4dFRyYWNrQ3VlPik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFj
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2suY3BwCShy
ZXZpc2lvbiAxMDAwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDE1ICs0MSw0NSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NvbnN0IEF0b21pY1N0cmluZyYgVGV4dFRyYWNrOjpzdWJ0aXRsZXNLZXl3b3JkKCkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc3VidGl0bGVzLCAoInN1
YnRpdGxlcyIpKTsKKyAgICByZXR1cm4gc3VidGl0bGVzOworfQorCitjb25zdCBBdG9taWNTdHJp
bmcmIFRleHRUcmFjazo6Y2FwdGlvbnNLZXl3b3JkKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IEF0b21pY1N0cmluZywgY2FwdGlvbnMsICgiY2FwdGlvbnMiKSk7CisgICAgcmV0
dXJuIGNhcHRpb25zOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIFRleHRUcmFjazo6ZGVzY3Jp
cHRpb25zS2V5d29yZCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNT
dHJpbmcsIGRlc2NyaXB0aW9ucywgKCJkZXNjcmlwdGlvbnMiKSk7CisgICAgcmV0dXJuIGRlc2Ny
aXB0aW9uczsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBUZXh0VHJhY2s6OmNoYXB0ZXJzS2V5
d29yZCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGNo
YXB0ZXJzLCAoImNoYXB0ZXJzIikpOworICAgIHJldHVybiBjaGFwdGVyczsKK30KKworY29uc3Qg
QXRvbWljU3RyaW5nJiBUZXh0VHJhY2s6Om1ldGFkYXRhS2V5d29yZCgpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIG1ldGFkYXRhLCAoIm1ldGFkYXRhIikp
OworICAgIHJldHVybiBtZXRhZGF0YTsKK30KKwogVGV4dFRyYWNrOjpUZXh0VHJhY2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgVGV4dFRyYWNrQ2xpZW50KiBjbGllbnQsIGNvbnN0
IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFn
ZSkKICAgICA6IFRyYWNrQmFzZShjb250ZXh0LCBUcmFja0Jhc2U6OlRleHRUcmFjaykKLSAgICAs
IG1fa2luZChraW5kKQogICAgICwgbV9sYWJlbChsYWJlbCkKICAgICAsIG1fbGFuZ3VhZ2UobGFu
Z3VhZ2UpCiAgICAgLCBtX3JlYWR5U3RhdGUoVGV4dFRyYWNrOjpOT05FKQotICAgICwgbV9tb2Rl
KFRleHRUcmFjazo6U0hPV0lORykKKyAgICAsIG1fbW9kZShUZXh0VHJhY2s6OkhJRERFTikKICAg
ICAsIG1fY2xpZW50KGNsaWVudCkKIHsKKyAgICBzZXRLaW5kKGtpbmQpOwogfQogCiBUZXh0VHJh
Y2s6On5UZXh0VHJhY2soKQpAQCAtNTksMjQgKzg5LDMzIEBAIFRleHRUcmFjazo6flRleHRUcmFj
aygpCiAgICAgY2xlYXJDbGllbnQoKTsKIH0KIAotU3RyaW5nIFRleHRUcmFjazo6a2luZCgpIGNv
bnN0Citib29sIFRleHRUcmFjazo6aXNWYWxpZEtpbmRLZXl3b3JkKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIG1fa2luZDsKLX0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
dmFsdWUsIHN1YnRpdGxlc0tleXdvcmQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgY2FwdGlvbnNLZXl3b3JkKCkpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsIGRlc2NyaXB0aW9u
c0tleXdvcmQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZSh2YWx1ZSwgY2hhcHRlcnNLZXl3b3JkKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsIG1ldGFkYXRhS2V5d29yZCgpKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLVN0cmluZyBUZXh0VHJhY2s6OmxhYmVsKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9sYWJlbDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVN0cmluZyBUZXh0VHJh
Y2s6Omxhbmd1YWdlKCkgY29uc3QKK3ZvaWQgVGV4dFRyYWNrOjpzZXRLaW5kKGNvbnN0IFN0cmlu
ZyYga2luZCkKIHsKLSAgICByZXR1cm4gbV9sYW5ndWFnZTsKLX0KKyAgICBTdHJpbmcgb2xkS2lu
ZCA9IG1fa2luZDsKIAotVGV4dFRyYWNrOjpSZWFkeVN0YXRlIFRleHRUcmFjazo6cmVhZHlTdGF0
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKKyAgICBpZiAoaXNWYWxpZEtp
bmRLZXl3b3JkKGtpbmQpKQorICAgICAgICBtX2tpbmQgPSBraW5kOworICAgIGVsc2UKKyAgICAg
ICAgbV9raW5kID0gc3VidGl0bGVzS2V5d29yZCgpOworCisgICAgaWYgKG1fY2xpZW50ICYmIG9s
ZEtpbmQgIT0gbV9raW5kKQorICAgICAgICBtX2NsaWVudC0+dGV4dFRyYWNrS2luZENoYW5nZWQo
dGhpcyk7CiB9CiAKIHZvaWQgVGV4dFRyYWNrOjpzZXRSZWFkeVN0YXRlKFJlYWR5U3RhdGUgc3Rh
dGUpCkBAIC04NiwxMSArMTI1LDYgQEAgdm9pZCBUZXh0VHJhY2s6OnNldFJlYWR5U3RhdGUoUmVh
ZHlTdGF0ZQogICAgICAgICBtX2NsaWVudC0+dGV4dFRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQodGhp
cyk7CiB9CiAKLVRleHRUcmFjazo6TW9kZSBUZXh0VHJhY2s6Om1vZGUoKSBjb25zdAotewotICAg
IHJldHVybiBtX21vZGU7Ci19Ci0KIHZvaWQgVGV4dFRyYWNrOjpzZXRNb2RlKHVuc2lnbmVkIHNo
b3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIDQuOC4xMC4xMi41IE9uIHNl
dHRpbmcgdGhlIG1vZGUsIGlmIHRoZSBuZXcgdmFsdWUgaXMgbm90IGVpdGhlciAwLCAxLCBvciAy
LApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFjay5oCShyZXZpc2lvbiAxMDAwODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRUcmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiVHJhY2tCYXNlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzksMTIgKzQwLDExIEBAIGNsYXNzIFRl
eHRUcmFjazsKIGNsYXNzIFRleHRUcmFja0N1ZTsKIGNsYXNzIFRleHRUcmFja0N1ZUxpc3Q7CiAK
LXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KIGNsYXNzIFRleHRUcmFja0NsaWVudCB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+VGV4dFRyYWNrQ2xpZW50KCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHRleHRUcmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRleHRUcmFjayopID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdGV4dFRyYWNrS2luZENoYW5nZWQoVGV4dFRyYWNrKikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCB0ZXh0VHJhY2tNb2RlQ2hhbmdlZChUZXh0VHJhY2sqKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHRleHRUcmFja0FkZEN1ZXMoVGV4dFRyYWNrKiwgY29uc3QgVGV4dFRyYWNrQ3VlTGlz
dCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdGV4dFRyYWNrUmVtb3ZlQ3VlcyhUZXh0VHJhY2sq
LCBjb25zdCBUZXh0VHJhY2tDdWVMaXN0KikgPSAwOwpAQCAtNjAsMTUgKzYwLDI3IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgdmlydHVhbCB+VGV4dFRyYWNrKCk7CiAKLSAgICBTdHJpbmcga2luZCgp
IGNvbnN0OwotICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0OwotICAgIFN0cmluZyBsYW5ndWFnZSgp
IGNvbnN0OworICAgIFN0cmluZyBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAg
dm9pZCBzZXRLaW5kKGNvbnN0IFN0cmluZyYpOworCisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0
cmluZyYgc3VidGl0bGVzS2V5d29yZCgpOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IGNhcHRpb25zS2V5d29yZCgpOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGRlc2Ny
aXB0aW9uc0tleXdvcmQoKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBjaGFwdGVy
c0tleXdvcmQoKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtZXRhZGF0YUtleXdv
cmQoKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkS2luZEtleXdvcmQoY29uc3QgU3RyaW5nJik7
CisKKyAgICBTdHJpbmcgbGFiZWwoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsOyB9CisgICAgdm9p
ZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKSB7IG1fbGFiZWwgPSBsYWJlbDsgfQorCisg
ICAgU3RyaW5nIGxhbmd1YWdlKCkgY29uc3QgeyByZXR1cm4gbV9sYW5ndWFnZTsgfQorICAgIHZv
aWQgc2V0TGFuZ3VhZ2UoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkgeyBtX2xhbmd1YWdlID0gbGFu
Z3VhZ2U7IH0KIAogICAgIGVudW0gUmVhZHlTdGF0ZSB7IE5PTkUgPSAwLCBMT0FESU5HID0gMSwg
TE9BREVEID0gMiwgSFRNTF9FUlJPUiA9IDMgfTsKLSAgICBSZWFkeVN0YXRlIHJlYWR5U3RhdGUo
KSBjb25zdDsKKyAgICBSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3Jl
YWR5U3RhdGU7IH0KIAogICAgIGVudW0gTW9kZSB7IERJU0FCTEVEID0gMCwgSElEREVOID0gMSwg
U0hPV0lORyA9IDIgfTsKLSAgICBNb2RlIG1vZGUoKSBjb25zdDsKKyAgICBNb2RlIG1vZGUoKSBj
b25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICB2b2lkIHNldE1vZGUodW5zaWduZWQgc2hvcnQs
IEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFRleHRUcmFja0N1ZUxpc3QqIGN1ZXMoKTsKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDEwMDA4NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTExLTE1ICBFcmljIENhcmxzb24gIDxlcmljLmNh
cmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIGFkZFRyYWNrKCkgbXVzdCB0aHJvdyBhbiBleGNl
cHRpb24gaWYgJ2tpbmQnIGlzIHVua25vd24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxOTE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBtZWRpYS90cmFjay90cmFjay1hZGR0cmFjay1raW5kLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvdHJhY2svdHJhY2stYWRkdHJhY2sta2lu
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS90cmFjay90cmFjay1raW5kLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvdHJhY2svdHJhY2sta2luZC5odG1sOiBBZGRl
ZC4KKwogMjAxMS0xMS0xMiAgQW5uYSBDYXZlbmRlciAgPGFubmFjY0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgQWRkIFdlYlZUVCBwYXJzaW5nIGxheW91dCB0ZXN0cy4gIFBhdGNoIGFsc28gaW5j
bHVkZXMgY3JlYXRpbmcgYSBUZXh0VHJhY2tDdWVMaXN0CkluZGV4OiBMYXlvdXRUZXN0cy9tZWRp
YS90cmFjay90cmFjay1hZGR0cmFjay1raW5kLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1hZGR0cmFjay1raW5kLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWFkZHRyYWNrLWtp
bmQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACitUZXN0cyB0aGF0
IHRoZSBhZGRUcmFjaygpIG9ubHkgYWNjZXB0cyBrbm93biAna2luZCcgdmFsdWVzLgorCisrKyBU
ZXN0IGludmFsaWQgJ2tpbmQnLgorRVhQRUNURUQgKHZpZGVvLnRleHRUcmFja3MubGVuZ3RoID09
ICcwJykgT0sKK1RFU1QodmlkZW8uYWRkVHJhY2soJ2thcHRpb25zJykpIFRIUk9XUyhET01FeGNl
cHRpb24uU1lOVEFYX0VSUikgT0sKK0VYUEVDVEVEICh2aWRlby50ZXh0VHJhY2tzLmxlbmd0aCA9
PSAnMCcpIE9LCisKKysrIFRlc3QgYWxsIHZhbGlkICdraW5kJyBrZXl3b3Jkcy4KK1JVTih2aWRl
by5hZGRUcmFjaygnc3VidGl0bGVzJykpCitFWFBFQ1RFRCAodmlkZW8udGV4dFRyYWNrcy5sZW5n
dGggPT0gJzEnKSBPSworUlVOKHZpZGVvLmFkZFRyYWNrKCdjYXB0aW9ucycpKQorRVhQRUNURUQg
KHZpZGVvLnRleHRUcmFja3MubGVuZ3RoID09ICcyJykgT0sKK1JVTih2aWRlby5hZGRUcmFjaygn
ZGVzY3JpcHRpb25zJykpCitFWFBFQ1RFRCAodmlkZW8udGV4dFRyYWNrcy5sZW5ndGggPT0gJzMn
KSBPSworUlVOKHZpZGVvLmFkZFRyYWNrKCdjaGFwdGVycycpKQorRVhQRUNURUQgKHZpZGVvLnRl
eHRUcmFja3MubGVuZ3RoID09ICc0JykgT0sKK1JVTih2aWRlby5hZGRUcmFjaygnbWV0YWRhdGEn
KSkKK0VYUEVDVEVEICh2aWRlby50ZXh0VHJhY2tzLmxlbmd0aCA9PSAnNScpIE9LCisKK0VORCBP
RiBURVNUCisKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWFkZHRyYWNrLWtp
bmQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1hZGR0
cmFjay1raW5kLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90
cmFjay1hZGR0cmFjay1raW5kLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGh0dHAtZXF1
aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgor
CisgICAgICAgIDxzY3JpcHQgc3JjPS4uL21lZGlhLWZpbGUuanM+PC9zY3JpcHQ+CisgICAgICAg
IDxzY3JpcHQgc3JjPS4uL3ZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQ+
CisKKyAgICAgICAgICAgIHZhciB0cmFja0NvdW50ID0gMDsKKworICAgICAgICAgICAgZnVuY3Rp
b24gYWRkVHJhY2sodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBydW4oInZp
ZGVvLmFkZFRyYWNrKCciICsgdHlwZSArICInKSIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBl
Y3RlZCgidmlkZW8udGV4dFRyYWNrcy5sZW5ndGgiLCArK3RyYWNrQ291bnQpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBzdGFydCgpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZmluZE1lZGlhRWxlbWVudCgpOworCisgICAgICAgICAgICAgICAgY29uc29s
ZVdyaXRlKCI8ZW0+KysgVGVzdCBpbnZhbGlkICdraW5kJy48L2VtPiIpOworICAgICAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgidmlkZW8udGV4dFRyYWNrcy5sZW5ndGgiLCAwKTsKKyAgICAgICAg
ICAgICAgICB0ZXN0RXhjZXB0aW9uKCJ2aWRlby5hZGRUcmFjaygna2FwdGlvbnMnKSIsICJET01F
eGNlcHRpb24uU1lOVEFYX0VSUiIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlk
ZW8udGV4dFRyYWNrcy5sZW5ndGgiLCAwKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUo
IiIpOworCisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8ZW0+KysgVGVzdCBhbGwgdmFs
aWQgJ2tpbmQnIGtleXdvcmRzLjwvZW0+Iik7CisgICAgICAgICAgICAgICAgYWRkVHJhY2soInN1
YnRpdGxlcyIpOworICAgICAgICAgICAgICAgIGFkZFRyYWNrKCJjYXB0aW9ucyIpOworICAgICAg
ICAgICAgICAgIGFkZFRyYWNrKCJkZXNjcmlwdGlvbnMiKTsKKyAgICAgICAgICAgICAgICBhZGRU
cmFjaygiY2hhcHRlcnMiKTsKKyAgICAgICAgICAgICAgICBhZGRUcmFjaygibWV0YWRhdGEiKTsK
KworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICAgICAgZW5k
VGVzdCgpOworICAgICAgICAgICAgfQorCisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4K
KyAgICA8Ym9keSBvbmxvYWQ9InN0YXJ0KCkiPgorICAgICAgICA8cD5UZXN0cyB0aGF0IHRoZSBh
ZGRUcmFjaygpIG9ubHkgYWNjZXB0cyBrbm93biAna2luZCcgdmFsdWVzLjwvcD4KKyAgICAgICAg
PHZpZGVvPgorICAgICAgICA8L3ZpZGVvPgorICAgIDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWtpbmQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWtpbmQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2sta2luZC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAKK1Rlc3RzIHRoYXQgdGhlICdhZGR0cmFj
aycgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIFRleHRUcmFjayBpcyBjcmVhdGVkLgorCisKKysrIFRl
c3QgZGVmYXVsdCBhdHRyaWJ1dGUgdmFsdWUKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQuZ2V0QXR0
cmlidXRlKCdraW5kJykgPT0gJ251bGwnKSBPSworRVhQRUNURUQgKHRyYWNrRWxlbWVudC5raW5k
ID09ICdzdWJ0aXRsZXMnKSBPSworRVhQRUNURUQgKHZpZGVvLnRleHRUcmFja3NbMF0ua2luZCA9
PSAnc3VidGl0bGVzJykgT0sKKworKioqIFNldCB0byBib2d1cyB2YWx1ZSwgc2hvdWxkIHJldHVy
biBkZWZhdWx0CitzZXQgdmlhIERPTQorUlVOKHRyYWNrRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUo
J2tpbmQnKSkKK1JVTih0cmFja0VsZW1lbnQua2luZCA9ICdlbmdsaXNoLW1ldGFkYXRhJykKK0VY
UEVDVEVEICh0cmFja0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdraW5kJykgPT0gJ2VuZ2xpc2gtbWV0
YWRhdGEnKSBPSworRVhQRUNURUQgKHRyYWNrRWxlbWVudC5raW5kID09ICdzdWJ0aXRsZXMnKSBP
SworRVhQRUNURUQgKHRyYWNrRWxlbWVudC50cmFjay5raW5kID09ICdzdWJ0aXRsZXMnKSBPSwor
YW5kIHZpYSBhdHRyaWJ1dGUKK1JVTih0cmFja0VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdraW5k
JykpCitSVU4odHJhY2tFbGVtZW50LnNldEF0dHJpYnV0ZSgna2luZCcsICdlbmdsaXNoLW1ldGFk
YXRhJykpCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LmtpbmQgPT0gJ3N1YnRpdGxlcycpIE9LCitF
WFBFQ1RFRCAodHJhY2tFbGVtZW50LnRyYWNrLmtpbmQgPT0gJ3N1YnRpdGxlcycpIE9LCitFWFBF
Q1RFRCAodHJhY2tFbGVtZW50LmdldEF0dHJpYnV0ZSgna2luZCcpID09ICdlbmdsaXNoLW1ldGFk
YXRhJykgT0sKKworKioqIFNldCB0byBrbm93biB2YWx1ZXMKKysrICdzdWJ0aXRsZXMnCitzZXQg
dmlhIERPTQorUlVOKHRyYWNrRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2tpbmQnKSkKK1JVTih0
cmFja0VsZW1lbnQua2luZCA9ICdzdWJ0aXRsZXMnKQorRVhQRUNURUQgKHRyYWNrRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoJ2tpbmQnKSA9PSAnc3VidGl0bGVzJykgT0sKK0VYUEVDVEVEICh0cmFja0Vs
ZW1lbnQua2luZCA9PSAnc3VidGl0bGVzJykgT0sKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQudHJh
Y2sua2luZCA9PSAnc3VidGl0bGVzJykgT0sKK2FuZCB2aWEgYXR0cmlidXRlCitSVU4odHJhY2tF
bGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgna2luZCcpKQorUlVOKHRyYWNrRWxlbWVudC5zZXRBdHRy
aWJ1dGUoJ2tpbmQnLCAnc3VidGl0bGVzJykpCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LmtpbmQg
PT0gJ3N1YnRpdGxlcycpIE9LCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LnRyYWNrLmtpbmQgPT0g
J3N1YnRpdGxlcycpIE9LCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LmdldEF0dHJpYnV0ZSgna2lu
ZCcpID09ICdzdWJ0aXRsZXMnKSBPSworCisrKyAnY2FwdGlvbnMnCitzZXQgdmlhIERPTQorUlVO
KHRyYWNrRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2tpbmQnKSkKK1JVTih0cmFja0VsZW1lbnQu
a2luZCA9ICdjYXB0aW9ucycpCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LmdldEF0dHJpYnV0ZSgn
a2luZCcpID09ICdjYXB0aW9ucycpIE9LCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LmtpbmQgPT0g
J2NhcHRpb25zJykgT0sKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQudHJhY2sua2luZCA9PSAnY2Fw
dGlvbnMnKSBPSworYW5kIHZpYSBhdHRyaWJ1dGUKK1JVTih0cmFja0VsZW1lbnQucmVtb3ZlQXR0
cmlidXRlKCdraW5kJykpCitSVU4odHJhY2tFbGVtZW50LnNldEF0dHJpYnV0ZSgna2luZCcsICdj
YXB0aW9ucycpKQorRVhQRUNURUQgKHRyYWNrRWxlbWVudC5raW5kID09ICdjYXB0aW9ucycpIE9L
CitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LnRyYWNrLmtpbmQgPT0gJ2NhcHRpb25zJykgT0sKK0VY
UEVDVEVEICh0cmFja0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdraW5kJykgPT0gJ2NhcHRpb25zJykg
T0sKKworKysgJ2Rlc2NyaXB0aW9ucycKK3NldCB2aWEgRE9NCitSVU4odHJhY2tFbGVtZW50LnJl
bW92ZUF0dHJpYnV0ZSgna2luZCcpKQorUlVOKHRyYWNrRWxlbWVudC5raW5kID0gJ2Rlc2NyaXB0
aW9ucycpCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LmdldEF0dHJpYnV0ZSgna2luZCcpID09ICdk
ZXNjcmlwdGlvbnMnKSBPSworRVhQRUNURUQgKHRyYWNrRWxlbWVudC5raW5kID09ICdkZXNjcmlw
dGlvbnMnKSBPSworRVhQRUNURUQgKHRyYWNrRWxlbWVudC50cmFjay5raW5kID09ICdkZXNjcmlw
dGlvbnMnKSBPSworYW5kIHZpYSBhdHRyaWJ1dGUKK1JVTih0cmFja0VsZW1lbnQucmVtb3ZlQXR0
cmlidXRlKCdraW5kJykpCitSVU4odHJhY2tFbGVtZW50LnNldEF0dHJpYnV0ZSgna2luZCcsICdk
ZXNjcmlwdGlvbnMnKSkKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQua2luZCA9PSAnZGVzY3JpcHRp
b25zJykgT0sKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQudHJhY2sua2luZCA9PSAnZGVzY3JpcHRp
b25zJykgT0sKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdraW5kJykgPT0g
J2Rlc2NyaXB0aW9ucycpIE9LCisKKysrICdjaGFwdGVycycKK3NldCB2aWEgRE9NCitSVU4odHJh
Y2tFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgna2luZCcpKQorUlVOKHRyYWNrRWxlbWVudC5raW5k
ID0gJ2NoYXB0ZXJzJykKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdraW5k
JykgPT0gJ2NoYXB0ZXJzJykgT0sKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQua2luZCA9PSAnY2hh
cHRlcnMnKSBPSworRVhQRUNURUQgKHRyYWNrRWxlbWVudC50cmFjay5raW5kID09ICdjaGFwdGVy
cycpIE9LCithbmQgdmlhIGF0dHJpYnV0ZQorUlVOKHRyYWNrRWxlbWVudC5yZW1vdmVBdHRyaWJ1
dGUoJ2tpbmQnKSkKK1JVTih0cmFja0VsZW1lbnQuc2V0QXR0cmlidXRlKCdraW5kJywgJ2NoYXB0
ZXJzJykpCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LmtpbmQgPT0gJ2NoYXB0ZXJzJykgT0sKK0VY
UEVDVEVEICh0cmFja0VsZW1lbnQudHJhY2sua2luZCA9PSAnY2hhcHRlcnMnKSBPSworRVhQRUNU
RUQgKHRyYWNrRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2tpbmQnKSA9PSAnY2hhcHRlcnMnKSBPSwor
CisrKyAnbWV0YWRhdGEnCitzZXQgdmlhIERPTQorUlVOKHRyYWNrRWxlbWVudC5yZW1vdmVBdHRy
aWJ1dGUoJ2tpbmQnKSkKK1JVTih0cmFja0VsZW1lbnQua2luZCA9ICdtZXRhZGF0YScpCitFWFBF
Q1RFRCAodHJhY2tFbGVtZW50LmdldEF0dHJpYnV0ZSgna2luZCcpID09ICdtZXRhZGF0YScpIE9L
CitFWFBFQ1RFRCAodHJhY2tFbGVtZW50LmtpbmQgPT0gJ21ldGFkYXRhJykgT0sKK0VYUEVDVEVE
ICh0cmFja0VsZW1lbnQudHJhY2sua2luZCA9PSAnbWV0YWRhdGEnKSBPSworYW5kIHZpYSBhdHRy
aWJ1dGUKK1JVTih0cmFja0VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdraW5kJykpCitSVU4odHJh
Y2tFbGVtZW50LnNldEF0dHJpYnV0ZSgna2luZCcsICdtZXRhZGF0YScpKQorRVhQRUNURUQgKHRy
YWNrRWxlbWVudC5raW5kID09ICdtZXRhZGF0YScpIE9LCitFWFBFQ1RFRCAodHJhY2tFbGVtZW50
LnRyYWNrLmtpbmQgPT0gJ21ldGFkYXRhJykgT0sKK0VYUEVDVEVEICh0cmFja0VsZW1lbnQuZ2V0
QXR0cmlidXRlKCdraW5kJykgPT0gJ21ldGFkYXRhJykgT0sKKworRU5EIE9GIFRFU1QKKwpJbmRl
eDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2sta2luZC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWtpbmQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWtpbmQuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw4NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgICA8aGVhZD4KKworICAg
ICAgICA8c2NyaXB0IHNyYz0uLi9tZWRpYS1maWxlLmpzPjwvc2NyaXB0PgorICAgICAgICA8c2Ny
aXB0IHNyYz0uLi92aWRlby10ZXN0LmpzPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0PgorCisg
ICAgICAgICAgICB2YXIgdHJhY2tFbGVtZW50OworICAgICAgICAgICAgZnVuY3Rpb24gc2V0S2lu
ZCh2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxi
PiBzZXQgdmlhIERPTTwvYj4iKTsKKyAgICAgICAgICAgICAgICBydW4oInRyYWNrRWxlbWVudC5y
ZW1vdmVBdHRyaWJ1dGUoJ2tpbmQnKSIpOworICAgICAgICAgICAgICAgIHJ1bigidHJhY2tFbGVt
ZW50LmtpbmQgPSAnIiArIHZhbHVlICsgIiciKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoInRyYWNrRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2tpbmQnKSIsIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrRWxlbWVudC5raW5kIiwgdmFsdWUpOworICAgICAg
ICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tFbGVtZW50LnRyYWNrLmtpbmQiLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8Yj4gYW5kIHZpYSBhdHRyaWJ1dGU8L2I+
Iik7CisgICAgICAgICAgICAgICAgcnVuKCJ0cmFja0VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdr
aW5kJykiKTsKKyAgICAgICAgICAgICAgICBydW4oInRyYWNrRWxlbWVudC5zZXRBdHRyaWJ1dGUo
J2tpbmQnLCAnIiArIHZhbHVlICsgIicpIik7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVk
KCJ0cmFja0VsZW1lbnQua2luZCIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoInRyYWNrRWxlbWVudC50cmFjay5raW5kIiwgdmFsdWUpOworICAgICAgICAgICAgICAgIHRl
c3RFeHBlY3RlZCgidHJhY2tFbGVtZW50LmdldEF0dHJpYnV0ZSgna2luZCcpIiwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZnVuY3Rpb24gc3RhcnQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZpbmRNZWRpYUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOwor
CisgICAgICAgICAgICAgICAgdHJhY2tFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3RyYWNrXzEnKTsKKworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGI+KysgVGVzdCBk
ZWZhdWx0IGF0dHJpYnV0ZSB2YWx1ZTwvYj4iKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoInRyYWNrRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2tpbmQnKSIsIG51bGwpOworICAgICAgICAg
ICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tFbGVtZW50LmtpbmQiLCAic3VidGl0bGVzIik7Cisg
ICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby50ZXh0VHJhY2tzWzBdLmtpbmQiLCAi
c3VidGl0bGVzIik7CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKworICAgICAg
ICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGI+KioqIFNldCB0byBib2d1cyB2YWx1ZSwgc2hvdWxk
IHJldHVybiBkZWZhdWx0PC9iPiIpOworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGI+
IHNldCB2aWEgRE9NPC9iPiIpOworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICJlbmdsaXNo
LW1ldGFkYXRhIgorICAgICAgICAgICAgICAgIHJ1bigidHJhY2tFbGVtZW50LnJlbW92ZUF0dHJp
YnV0ZSgna2luZCcpIik7CisgICAgICAgICAgICAgICAgcnVuKCJ0cmFja0VsZW1lbnQua2luZCA9
ICciICsgdmFsdWUgKyAiJyIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2tF
bGVtZW50LmdldEF0dHJpYnV0ZSgna2luZCcpIiwgdmFsdWUpOworICAgICAgICAgICAgICAgIHRl
c3RFeHBlY3RlZCgidHJhY2tFbGVtZW50LmtpbmQiLCAic3VidGl0bGVzIik7CisgICAgICAgICAg
ICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja0VsZW1lbnQudHJhY2sua2luZCIsICJzdWJ0aXRsZXMi
KTsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxiPiBhbmQgdmlhIGF0dHJpYnV0ZTwv
Yj4iKTsKKyAgICAgICAgICAgICAgICBydW4oInRyYWNrRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUo
J2tpbmQnKSIpOworICAgICAgICAgICAgICAgIHJ1bigidHJhY2tFbGVtZW50LnNldEF0dHJpYnV0
ZSgna2luZCcsICciICsgdmFsdWUgKyAiJykiKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoInRyYWNrRWxlbWVudC5raW5kIiwgInN1YnRpdGxlcyIpOworICAgICAgICAgICAgICAgIHRl
c3RFeHBlY3RlZCgidHJhY2tFbGVtZW50LnRyYWNrLmtpbmQiLCAic3VidGl0bGVzIik7CisgICAg
ICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFja0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdraW5k
JykiLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKworICAgICAg
ICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGI+KioqIFNldCB0byBrbm93biB2YWx1ZXM8L2I+Iik7
CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8Yj4rKyAnc3VidGl0bGVzJzwvYj4iKTsK
KyAgICAgICAgICAgICAgICBzZXRLaW5kKCJzdWJ0aXRsZXMiKTsKKworICAgICAgICAgICAgICAg
IGNvbnNvbGVXcml0ZSgiPGI+KysgJ2NhcHRpb25zJzwvYj4iKTsKKyAgICAgICAgICAgICAgICBz
ZXRLaW5kKCJjYXB0aW9ucyIpOworCisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8Yj4r
KyAnZGVzY3JpcHRpb25zJzwvYj4iKTsKKyAgICAgICAgICAgICAgICBzZXRLaW5kKCJkZXNjcmlw
dGlvbnMiKTsKKworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGI+KysgJ2NoYXB0ZXJz
JzwvYj4iKTsKKyAgICAgICAgICAgICAgICBzZXRLaW5kKCJjaGFwdGVycyIpOworCisgICAgICAg
ICAgICAgICAgY29uc29sZVdyaXRlKCI8Yj4rKyAnbWV0YWRhdGEnPC9iPiIpOworICAgICAgICAg
ICAgICAgIHNldEtpbmQoIm1ldGFkYXRhIik7CisKKyAgICAgICAgICAgICAgICBlbmRUZXN0KCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9oZWFkPgorICAgIDxi
b2R5IG9ubG9hZD0ic3RhcnQoKSI+CisgICAgICAgIDxwPlRlc3RzIHRoYXQgdGhlICdhZGR0cmFj
aycgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIFRleHRUcmFjayBpcyBjcmVhdGVkLjwvcD4KKyAgICAg
ICAgPHZpZGVvPgorICAgICAgICAgICAgPHRyYWNrIGlkPXRyYWNrXzE+CisgICAgICAgIDwvdmlk
ZW8+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="114185"
          type_id="1"
          status="+"
          setter="pnormand"
    />
          </attachment>
      

    </bug>

</bugzilla>